Julia anyone?

Interessantes ohne bestimmtes Thema!

Moderator: student

Benutzeravatar
student
Beiträge: 674
Registriert: Fr Okt 07, 2016 9:52 am

Re: Julia anyone?

Beitrag von student »

Hallo Bernhard,

ein paar gute Wort zum Thema. Wie gesagt, wir werden sehen was mit Julia passiert.

Ich habe ab und an den Eindruck, dass das Beschäftigen mit Julia für mich vertane Zeit war. Aber etwas positives kam für mich dann doch raus, nämlich die Beschäftigung mit C/C++. Dieses "alte Schachtschiff" halte ich tatsächlich neben R (für die Datenanalyse) für eine optimale Programmiersprache. Aber damit will ich keine neue Diskussion lostreten! :lol: Das geht sogar soweit, dass ich an einem Video "R & RCpp" arbeite...

Von mir ebenfalls einen guten Rutsch und ein gutes neues Jahr!
Viele Grüße,
Student
-----------------------------------------------------------------------------------------------------------------------
faes.de, Datenanalyse mit R & das Ad-Oculos-Projekt
Das Ad-Oculos-Projekt auf YouTube

Habe Mut, dich deines eigenen Verstandes zu bedienen! (Kant)
schubbiaschwilli
Beiträge: 253
Registriert: Di Jun 27, 2017 12:09 pm

Re: Julia anyone?

Beitrag von schubbiaschwilli »

Gude!

Ich beschäftige mich ja mit Finanzmathematik, und da aktuell mit Parameterschätzung, also Numerik.
In diesem Rahmen habe ich mal julia vs. python vs R verglichen, und auch Auswertungen, Analysen, Plots usw. erstellt - Siehe:
https://thepathisthegoalblog.wordpress. ... ity-model/
bzw.
https://thepathisthegoalblog.wordpress. ... g-formula/
(der Vergleich)
https://thepathisthegoalblog.wordpress. ... x-options/
(ein paar Auswertungen zu den mit julia berechneten Parametern - Aus gutem Grund mit R)

Folgendes habe ich für mich mitgenommen:
julia und r unterscheiden sich nicht viel in der Geschwindigkeit - In den ersten beiden Beispielen von oben ist R je nach verwendeter Methode zur Integration schneller oder langsamer, und das ist dann auch das Ergebnis bei der Numerik (Optimierung mit Nelder-Mead; sieht man im zweiten Beispiel): Verwendet man die schnellere Methode zur Integration ist R bei der Numerik schneller, bei der langsameren halt nicht. (Und ja, R nutzt an dieser Stelle Fortran.)
Was das Erstellen von Plots usw. angeht, ziehe ich R vor - Einfach, weil es mehr bietet. Der Code von julia kommt mir manchmal komisch vor, aber das war bei R am Anfang auch so, deswegen möchte ich da nichts zu sagen. Ich habe aber den Eindruck, dass bei den Themen, mit denen ich mich beschäftige, R mächtiger ist als julia - Es gibt mehr Arten von Plots, Tests, Algorithmen, Verfahren usw.usf.

Dank&Gruß
Schubbiaschwilli
schubbiaschwilli
Beiträge: 253
Registriert: Di Jun 27, 2017 12:09 pm

Re: Julia anyone?

Beitrag von schubbiaschwilli »

Kleiner Nachtrag:
Aus Gründen hab' ich mal die Laufzeiten einer Monte-Carlo-Simulation des HestonSV-Modells in Gnu R, julia und python gemessen. Das HestonSV-Modell ist in der Praxis ein übliches Modell, um Optionen zu bewerten, und beinhaltet ein CIR (https://de.wikipedia.org/wiki/Wurzel-Di ... oss-Modell), was bei Zinsmodellen ebenfalls Standard ist.

Falls jemand meinen gaaaz tollen Blog nicht lesen möchte (https://thepathisthegoalblog.wordpress. ... o-pricing/) hier kurz die Ergebnisse: julia ist ungefähr 25x schneller als Gnu R, und etwa 50x schneller als python.
Allerdings habe ich den Code nicht mit wasauchimmer optimiert - Sind auch nur ein paar verschachtelte Schleifen und ein wenig Kram drumherum.

Dank&Gruß
Schubbiaschwilli
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Julia anyone?

Beitrag von Athomas »

Ich hab den R-Part aus Neugier mal unbesehen laufen lassen wollen, :( !

Code: Alles auswählen

Error in nrow(Values) : object 'Values' not found
schubbiaschwilli
Beiträge: 253
Registriert: Di Jun 27, 2017 12:09 pm

Re: Julia anyone?

Beitrag von schubbiaschwilli »

Oh, hups... Danke für's Ausprobieren, und dass du einen Fehler gefunden hast... Ich hatte Value durch Results ersetzt - Zumindest ab und zu... (und auf GitHub ist es natürlich auch korrigiert).

Code: Alles auswählen

HestonSV_MC <- function(S,T,r,q,v0,theta,rho,kappa,sigma,NPaths,seed=606060){
	set.seed(seed)

	NSteps <- floor(T*252)
	Results <- rep(0, NPaths)
	dt <- T/NSteps
	
	for(Path in 1:(NPaths)){
		St <- S  # Stock price
		vt <- v0 # Volatility

	for(Step in 1:NSteps){
		Wt1 <- rnorm(1)
		Wt2 <- rho * Wt1 + sqrt(1 - rho^2) * rnorm(1)
		
		St <- St*exp((r - q - vt/2)*dt + sqrt(vt*dt)*Wt1)

		dt_vt <- kappa*(theta-vt)*dt + sigma*sqrt(vt*dt)*Wt2
		vt <- vt + dt_vt
		
		if(vt <= 0) vt <- vt - 2*dt_vt
	}
	Results[Path] <- St
	}

	return(Results)
}

r <- 0.01
T <- 1

St <- HestonSV_MC(S=100,T=T,r,q=0.02,v0=0.04,theta=0.25,rho=-0.5,kappa=4.0,sigma=1.0,NPaths=10^6)

Results <- data.frame(Strike=seq(80,120,10))
Results$PriceCall <- NA
Results$PricePut <- NA

for(i in 1:nrow(Results)){
	Results$PriceCall[i] <- exp(-r*T)*mean(pmax(St - Results$Strike[i], 0))
	Results$PricePut[i] <- exp(-r*T)*mean(pmax(Results$Strike[i] - St, 0))
}

print(Results)
Kleiner Nachtrag: Ja, das sind jetzt wirklich nur 2 Schleifen, und ne Cholesky-Zerlegung und so weiter - Und in der Literatur sieht das auch anders aus:
https://frouah.com/finance%20notes/Eule ... zation.pdf
https://frouah.com/finance%20notes/The% ... ersion.pdf
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Julia anyone?

Beitrag von Athomas »

Ich hab mir das mal (grob) angeguckt und zwei Fragen:
  • Was ist q - wo kommt das her?
  • Ich kann die von Dir benutzte vt-Korrektur (falls negativ) nicht in den Artikeln finden - wo kommt die her?
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Julia anyone?

Beitrag von Athomas »

Zeit für die Ausführung (1 Mio Pfade) in R mit innerer Schleife in RCPP und Parallelisierung - allerdinge mit 40 Threads :oops: - unter Ubuntu auf meinem Heimserver (2 x Intel(R) Xeon(R) CPU E5-2650 v3 @ 2.30GHz):

Code: Alles auswählen

> print(Results)
  Strike PriceCall  PricePut
1     80 26.833651  7.982865
2     90 20.993774 12.043486
3    100 16.132920 17.083130
4    110 12.193011 23.043720
5    120  9.082842 29.834049
> proc.time() - a
       User      System verstrichen 
    107.708       9.455       4.046 
Urfassung, Rein-R und ein Thread:

Code: Alles auswählen

       User      System verstrichen 
   1379.269      19.835    1386.604 
RCPP mit einem Thread:

Code: Alles auswählen

       User      System verstrichen 
     62.684       1.106      63.167
RCPP und parallel mit 4 Threads:

Code: Alles auswählen

       User      System verstrichen 
     60.963       1.285      16.080 
RCPP und parallel mit 8 Threads:

Code: Alles auswählen

       User      System verstrichen 
     68.467       3.200       9.489
schubbiaschwilli
Beiträge: 253
Registriert: Di Jun 27, 2017 12:09 pm

Re: Julia anyone?

Beitrag von schubbiaschwilli »

Gude!

"Was ist q - wo kommt das her?"
Da muss ich ich etwas ausholen: Falls man Optionen auf Aktien bewerten möchte, hat man hier folgendes Problem: In diesem Modell (wie im klassischen Black-Scholes-Merton - Alfred-Nobel-Gedächtnispreis für Wirtschaftswissenschaften 1997) gibt es keine 'richtige' Dividende. Um das ein wenig zu verbessern, hat man als Notlösung die stetigen Dividenden eingeführt (das q) - Man geht also davon aus, dass die Dividende nicht (wie in der Realität) ein- oder mehrmals im Jahr zufließen (und damit den Aktienkurs beeinflussen, d.h. er fällt nach Zahlung der Dividende - CumEx lässt grüßen), sondern hat eine Art stetiger Zins. Allerdings gilt das nur für Optionen auf Aktien - Für Optionen auf Fremdwährung (EUR/USD bspw.) passt das aber wieder, da man dann für r und q die jeweiligen Zinssätze der Währungen nimmt.

"Ich kann die von Dir benutzte vt-Korrektur (falls negativ) nicht in den Artikeln finden - wo kommt die her?"
Beim CIR kann es bei der Simulation (also in diskreter Zeit) vorkommen, dass das vt negativ (oder 0) wird - Eine negative Vola (oder auch eine von 0) gibt es aber nicht. Jetzt gibt es verschiedene Möglichkeiten, damit umzugehen. Eine wäre max(0, vt) - Da es aber keine Aktie mit Vola 0 gibt, habe ich mich dafür entschieden, statt vt + dt_vt einfach vt - dt_vt zu rechen - Die Methode nennt sich 'Reflection'. Man hätte auch nochmal neu würfeln können oder so, aber das macht nicht viel aus.

Dank&Gruß
schubbiaschwilli
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Julia anyone?

Beitrag von Athomas »

Die Methode nennt sich 'Reflection'.
Die Bezeichnung ist mir begegnet - allerdings nimmt der Autor dann den Absolutbetrag des "fehlgeleiteten" (negativen) Wertes!?
Yep - deswegen ja

Code: Alles auswählen

vt <- vt + dt_vt
if(vt <= 0) vt <- vt - 2*dt_vt
Ich hoffe, ich habe mich jetzt nicht verrechnet?

Dank&Gruß
schubbiaschwilli
schubbiaschwilli
Beiträge: 253
Registriert: Di Jun 27, 2017 12:09 pm

Re: Julia anyone?

Beitrag von schubbiaschwilli »

Gude!

Über eine Umsetzung mit RPP hatte ich auch nachgedacht, aber zum einen hatte ich schon R vs julia vs python in anderen Beiträgen verglichen, und ich habe RCPP noch nie ernsthaft ausprobiert - Ich hätte aber Interesse an dem Code, und er wäre mir auch ein paar kalte Getränke wert, falls wir uns mal treffen - OK, kann auch Rotwein (ungekühlt) sein.

Tatsächlich habe ich die 'Bewertung' nicht mit gemessen, für mich war nur dieser Teil interessant:

Code: Alles auswählen

St <- HestonSV_MC(S=100,T=T,r,q=0.02,v0=0.04,theta=0.25,rho=-0.5,kappa=4.0,sigma=1.0,NPaths=10^6)
Wenn ich die folgenden Zahlen richtig interpretiere:
Urfassung, Rein-R und ein Thread:
(...)
verstrichen
1386.604

RCPP mit einem Thread:
(...)
verstrichen
63.167
Also wenn ich das richtig interpretiere, komme ich auf 1386.604/63.167=21.95... Also ist (wenn wir mal davon ausgehen, dass die Bewertung (also die Schleife, um Result zu füllen) das nicht verfälscht) RCPP und julia im Vergleich zu 'reinem' R ungefähr gleich schnell - Oder?

Dank&Gruß
schubbiaschwilli
Antworten