Python使用for循环计算投资组合PnL求和结果异常的问题求解
问题根因
- Python的
range函数遵循左闭右开规则,你写的range(0, 3)只会生成0、1、2三个索引值,仅遍历了前3个持仓(aapl、goog、tsla),漏掉了索引为3的fb持仓的pnl计算,所以得到的是不全的计算结果。 - 可手动验证:前3个持仓的pnl累加和就是你得到的364.42,加上fb持仓的pnl
(179.06-209.0)*18 = -538.92后,总结果刚好是正确值-174.5。
修复方案
把循环的range范围调整为覆盖全部4个持仓即可,推荐两种写法:
- 固定范围写法:
for n in range(0, 4): pnl=(market[n]-portfolio[n][1])*portfolio[n][0] total_pnl += pnl
- 鲁棒性写法,直接取持仓列表长度作为遍历上限,后续新增持仓无需手动修改范围参数:
for n in range(len(portfolio)): pnl=(market[n]-portfolio[n][1])*portfolio[n][0] total_pnl += pnl
内容的提问来源于stack exchange,提问作者felixthuermer
相关产品推荐
相关产品推荐

