cnil在python_在Python中使用cumprod()计算权益曲线
我在使用cumprod()计算复合收益时遇到困难。它从一开始就开始复利,但我只希望它在“最终指令”等于买入时开始,在“最终指令”等于卖出时停止,然后在下一个买入指令时重新设置。请看下面的例子。
下面的示例数据显示了我希望看到的列“Backtest”的输出。
Time Adj_Price Final_Order Backtest
0 7 nan 1000
1 6 nan 1000
2 5 Buy 1000
3 7 Buy 1400
4 8 Sell 1600
5 6 Sell 1600
6 4 Buy 1600
7 5 Buy 2000
8 7 Buy 2800
9 9 Sell 3600
10 7 Sell 3600
11 7 Sell 3600
12 6 Sell 3600
下面是“回溯测试”的计算。
时间1=IF(Final_Order=“Buy(t0)”,(6/7)*1000,Else 1000)=1000
时间2=IF(Final_Order=“Buy(t1)”,(5/6)*1000,Else 1000)=1000
时间3=IF(Final_Order=“Buy(t2)”,(7/5)*1000,Else 1000)=1400
时间4=IF(Final_Order=“购买(t3)”,(8/7)*1400,Else 1400)=1600
时间5=IF(Final_Order=“Buy(t4)”,(6/8)*1600,Else 1600)=1600
时间6=IF(Final_Order=“Buy(t5)”,(4/6)*1600,否则1600)=1600
时间7=IF(Final_Order=“Buy(t6)”,(5/4)*1600,Else 1600)=2000
时间8=IF(Final_Order=“Buy(t7)”,(7/5)*2000,Else 2000)=2800
时间9=IF(Final_Order=“Buy(t8)”,(9/7)*2800,Else 2800)=3600
时间10=IF(Final_Order=“Buy(t9)”,(7/9)*3600,Else 3600)=3600
下面是我正在使用的代码。
data['Backtest'] = np.where(data['Final_Order'] == 'Buy',
((1 + data['Adj
Close'].pct_change(1)).cumprod())*1000,
data['Backtest'].ffill())
总结
以上是生活随笔为你收集整理的cnil在python_在Python中使用cumprod()计算权益曲线的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 一汽奔腾x40怎么样 详细解析一汽奔腾x
- 下一篇: python绘图模块pandas_pyt