我不是F#程序员。我正在修改现有的库。F#划分函数错误:期望支持运算符'/'的类型,但给出函数类型
我正在尝试并慢慢捡起来。
我想要做的是划分两个功能。
我可以看到它通过图书馆的其余部分做了,所以我知道这是可能的。然而,当我尝试和鸿沟我得到的错误
“期待型支持运营商‘/’,但给出的函数类型。您可能缺少一个参数传递给函数”
这是错误发生
let sharpeRatio2 pfRets bmkRets x =
let top pfRets bmkRets = excessReturns2 pfRets bmkRets
let bottom pfRets x = volatilty pfRets false x
let result = top/bottom
result
子功能叫我觉得都是很好的,对我创造了它的波动一个唯一的问号应该乘以std结果开方(12)
顶(返回)
let excessReturns2 (pfRets: seq<float>) bmkRets =
Seq.zip pfRets bmkRets |> Seq.map activeReturn
|> Seq.zip
let inline activeReturn (ret, bmkRet) = ret - bmkRet
底部(波动性)
let var xs nmethod =
match Seq.fold (fun (i, s, sumsq) x -> i + 1, s + x, sumsq + x * x) (0, 0., 0.) xs with
| 0, _, _ -> 0.
| 1, _, _ when not nmethod -> 0.
| n, xsum, xsumsq ->
// denominator is (n-1) or n
let d = if nmethod then float n else float n - 1.
(xsumsq - xsum * xsum/float n)/d
let std xs nmethod = sqrt (var xs nmethod)
let volatilty xs nmethod x = (std xs nmethod) * sqrt (x)
任何想法欢迎请
感谢GWS
这是类型推断使得有点难以看到发生了什么的地方。你能显示'top'和'bottom'功能的类型签名吗?如有必要,您可以从REPL中复制它。 – s952163
我的猜测是,也许你没有提供所有的参数给你的函数,所以顶部或底部不是一个数字(还)。 – s952163
对不起,我必须弄清楚你的意思。我相信TOP是seq - > seq - > seq <'d> - > seq 和底部 - >浮动 - >浮动 –