Julia anyone?
Moderator: student
Re: Julia anyone?
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! Das geht sogar soweit, dass ich an einem Video "R & RCpp" arbeite...
Von mir ebenfalls einen guten Rutsch und ein gutes neues Jahr!
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! 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)
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)
-
- Beiträge: 253
- Registriert: Di Jun 27, 2017 12:09 pm
Re: Julia anyone?
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
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
-
- Beiträge: 253
- Registriert: Di Jun 27, 2017 12:09 pm
Re: Julia anyone?
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
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
Re: Julia anyone?
Ich hab den R-Part aus Neugier mal unbesehen laufen lassen wollen, !
Code: Alles auswählen
Error in nrow(Values) : object 'Values' not found
-
- Beiträge: 253
- Registriert: Di Jun 27, 2017 12:09 pm
Re: Julia anyone?
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).
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
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)
https://frouah.com/finance%20notes/Eule ... zation.pdf
https://frouah.com/finance%20notes/The% ... ersion.pdf
Re: Julia anyone?
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?
Re: Julia anyone?
Zeit für die Ausführung (1 Mio Pfade) in R mit innerer Schleife in RCPP und Parallelisierung - allerdinge mit 40 Threads - unter Ubuntu auf meinem Heimserver (2 x Intel(R) Xeon(R) CPU E5-2650 v3 @ 2.30GHz):
Urfassung, Rein-R und ein Thread:
RCPP mit einem Thread:
RCPP und parallel mit 4 Threads:
RCPP und parallel mit 8 Threads:
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
Code: Alles auswählen
User System verstrichen
1379.269 19.835 1386.604
Code: Alles auswählen
User System verstrichen
62.684 1.106 63.167
Code: Alles auswählen
User System verstrichen
60.963 1.285 16.080
Code: Alles auswählen
User System verstrichen
68.467 3.200 9.489
-
- Beiträge: 253
- Registriert: Di Jun 27, 2017 12:09 pm
Re: Julia anyone?
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
"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
Re: Julia anyone?
Yep - deswegen jaDie Methode nennt sich 'Reflection'.
Die Bezeichnung ist mir begegnet - allerdings nimmt der Autor dann den Absolutbetrag des "fehlgeleiteten" (negativen) Wertes!?
Code: Alles auswählen
vt <- vt + dt_vt
if(vt <= 0) vt <- vt - 2*dt_vt
Dank&Gruß
schubbiaschwilli
-
- Beiträge: 253
- Registriert: Di Jun 27, 2017 12:09 pm
Re: Julia anyone?
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:
Wenn ich die folgenden Zahlen richtig interpretiere:
Dank&Gruß
schubbiaschwilli
Ü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)
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?Urfassung, Rein-R und ein Thread:
(...)
verstrichen
1386.604
RCPP mit einem Thread:
(...)
verstrichen
63.167
Dank&Gruß
schubbiaschwilli