Ich habe eine Reihe von Funktionen, die ich mit den gleichen Eingaben berechnen möchte. Gibt es eine bessere Möglichkeit, die Ergebnisse zu sehen, als die, die ich unten gewählt habe?Wie die gleichen Parameter an mehrere Funktionen übergeben?
open MathNet.Numerics.Distributions
// The functions
let EuVanillaPut S0 K T r sigma =
let d1 = (log(S0/K) + (r + sigma ** 2.0/2.0) * T)/(sqrt(T)*sigma)
let d2 = d1 - sqrt(T)*sigma
K*exp(-r*T)*Normal.CDF(0.0,1.0,-d2) - S0*Normal.CDF(0.0,1.0,-d1)
let BSMdelta S0 K T r sigma =
let d1 = (log(S0/K) + (r + sigma ** 2.0/2.0) * T)/(sqrt(T)*sigma)
Normal.CDF(0.0,1.0,d1)
let BSMgamma S0 K T r sigma =
let d1 = (log(S0/K) + (r + sigma ** 2.0/2.0) * T)/(sqrt(T)*sigma)
Normal.PDF(0.0,1.0,d1)/(S0 * sigma * sqrt(T))
let BSMvega S0 K T r sigma =
let d1 = (log(S0/K) + (r + sigma ** 2.0/2.0) * T)/(sqrt(T)*sigma)
Normal.PDF(0.0,1.0,d1) * S0 * sqrt(T)
let BSMthetacall S0 K T r sigma =
let d1 = (log(S0/K) + (r + sigma ** 2.0/2.0) * T)/(sqrt(T)*sigma)
let d2 = d1 - sqrt(T)*sigma
-S0 * Normal.PDF(0.0,1.0,d1) * sigma/(2.0*sqrt(T)) - r*K*exp(-r*T)*Normal.CDF(0.0,1.0,d2)
let BSMthetaput S0 K T r sigma =
let d1 = (log(S0/K) + (r + sigma ** 2.0/2.0) * T)/(sqrt(T)*sigma)
let d2 = d1 - sqrt(T)*sigma
-S0 * Normal.PDF(0.0,1.0,d1) * sigma/(2.0*sqrt(T)) + r*K*exp(-r*T)*Normal.CDF(0.0,1.0,-d2)
// Calling them all at once on the same inputs
// So ugly! Is there a better way?
(30.0, 25.0, 5.0, 0.02, 0.05)
|> fun (S0, K, T, r, sigma) -> [EuVanillaPut S0 K T r sigma;
BSMdelta S0 K T r sigma;
BSMgamma S0 K T r sigma;
BSMvega S0 K T r sigma;
BSMthetacall S0 K T r sigma;
BSMthetaput S0 K T r sigma]
Ich bin zu F # ziemlich neu, sollte ich einen Typ für diese machen? Soll ich eine andere Datenstruktur als Eingabe für die Funktionen verwenden? Alle und alle Zeiger sind sehr geschätzt.
Wahrscheinlich ist dies besser geeignet für codereview.se, aber Sie können immer nur eine Liste der Funktionen und verwenden Sie 'List.map' –
Auch wenn Sie mit Tupeln mit fünf Elementen zu tun haben, ist wahrscheinlich ein Datensatztyp Schöner, alles zu lesen und zu handhaben. – TeaDrivenDev
+1 für die Verwendung von Datensätzen. Es erleichtert späteres Refactoring (z. B. Hinzufügen eines Parameters). Sie verringern auch die Chance, Ihre Argumente zu vermischen - sie sind alle im Moment schweben. –