Quantstrat交易统计:期末权益为正却累计收益-100%?
嘿,我来帮你拆解这个离谱的矛盾问题——期末权益看着高得吓人(初始100万),但累计收益却显示-1.0,这大概率是收益统计的基准逻辑或者工具内部的计算规则在搞鬼,结合quantstrat和tradestatistics的常见坑,我整理了几个最可能的原因:
累计收益的计算基准不是初始权益
有些绩效统计工具(包括tradestatistics里的部分函数)可能没把你设定的100万初始权益作为计算基准。比如:- 可能错误地用了策略中途某个低点的权益作为基准;
- 或者收益序列的计算方向搞反了(比如用
(昨日权益/今日权益)-1代替了(今日权益/昨日权益)-1),这种极端错误会直接导致累计收益出现离谱的负数,而期末权益是正确的当前值。
你可以手动验证:用initial_eq <- 1000000; final_eq <- getEndEq(your_account_name); real_cum_return <- (final_eq - initial_eq)/initial_eq计算真实累计收益,和工具给出的结果对比。
期末权益包含未实现浮盈,累计收益仅统计已实现收益
在quantstrat里,getEndEq()默认会包含持仓的未实现浮盈/浮亏,但有些绩效统计函数(比如部分tradestatistics函数)可能只统计已平仓交易的累计收益。如果你的策略里有大量持仓处于大幅浮盈状态,但已平仓的交易整体是亏损的,就会出现这种“期末权益高但累计收益负”的情况。
你可以用tradeStats(your_portfolio_name)查看已平仓交易的总盈亏,对比getEndEq(your_account_name)的数值,就能看出未实现损益的占比。代码中权益序列的处理逻辑出错
从你贴的代码开头看,你加载了blotter和quantstrat,有可能在构建绩效序列时犯了低级错误:比如把权益序列反转了,或者错误地用了对数收益的反向计算。这种情况下,工具计算的累计收益会完全失真,但期末权益是直接读取的当前值,所以不会受影响。tradestatistics的参数设置问题
部分tradestatistics函数默认可能计算的是相对基准的收益而非绝对收益。如果你的策略跑输了默认基准(比如大盘指数),累计相对收益可能为负,但期末权益还是正的。不过这种情况一般不会出现-1这么极端的数值,但也值得排查:检查你调用函数时的参数,有没有指定benchmark或者收益类型的选项。
快速排查步骤
- 手动计算真实累计收益,确认工具结果是否失真;
- 对比已平仓交易总盈亏和期末权益,看未实现损益的影响;
- 查看
tradestatistics函数的文档(?tradestatistics),确认累计收益的计算规则。
内容的提问来源于stack exchange,提问作者Bryan Lwy

