F#下Long-Short组合日收益率计算Cumulative Returns的实现咨询
F#多空组合累计收益率实现方案
核心逻辑
累计收益率逐期计算规则为:截至第n期的累计收益率 = (1+第1期收益率) * (1+第2期收益率) * ... * (1+第n期收益率) - 1
代码实现
你现有代码中缺失的累计收益率计算部分,可以根据使用需求选择以下两种实现:
场景1:需要获取每期对应累计收益率序列(适配绘制收益曲线等场景)
// 可选:先定义累计收益对应记录类型,保留日期关联 type CumulativeReturn = { YearMonth : DateTime; CumulativeReturn : float } let cumulativereturnslongshort = longShort // scan操作保留每一步累乘结果,初始值设为0(0期累计收益为0) |> Array.scan (fun prevCum current -> (1.0 + prevCum) * (1.0 + current.Return) - 1.0) 0.0 // 跳过初始的0值,和实际收益期数对齐 |> Array.skip 1 // 关联对应日期,不需要日期可删除这一步直接得到累计收益率数值数组 |> Array.mapi (fun idx cumRet -> { YearMonth = longShort[idx].YearMonth; CumulativeReturn = cumRet })
场景2:仅需要最终总累计收益率
let cumulativereturnslongshort = longShort // fold操作仅返回最终累乘结果 |> Array.fold (fun acc current -> (1.0 + acc) * (1.0 + current.Return) - 1.0) 0.0
注意事项
- 请确认
Return字段为小数格式收益率:例如1.5%的收益率对应值为0.015,若为百分比格式请先除以100再代入计算。 - 若要计算累计净值,直接删除公式末尾的
- 1.0即可,初始净值为1。
内容的提问来源于stack exchange,提问作者kenji4
相关产品推荐
相关产品推荐

