我在用简单的熊猫算法进行股票交易。没什么严重或复杂的,我只想学习如何在python中做到这一点。
我想做的是
但是我无法使它正常工作。我可以使它与循环一起使用,但这将非常耗时。有什么建议吗?
## data set
close=[21.02,21.05,21.10,21.22, 22.17,22.13,22.07]
signal=[False,True,True,True,False,True,True]
data={'close':close, 'signal':signal}
df=pd.DataFrame.from_dict(data)
df['cash']=1000
df['trade']=0
df['pos']=0
## if signal turns True, buy stocks
buysubset = ((df.signal==True) & (df.signal.shift(1)==False))
sellsubset = ((df.signal==False) & df.signal.shift(1)==True)
df.loc[buysubset,'trade']=(df.cash/df.close).astype(int)
df.loc[buysubset,'cash']=df.cash-(df.trade*df.close)
df.loc[sellsubset,'trade']=-df.pos.shift(1)
## if previous row has position, keep the position if the signal is still True
df['pos']=df.trade.mask(df.signal & (df.trade == 0)).ffill().astype(int)
我得到这个结果:
close signal cash trade pos
0 21.02 False 1000.00 0.0 0
1 21.05 True 10.65 47.0 47
2 21.10 True 1000.00 0.0 47
3 21.22 True 1000.00 0.0 47
4 22.17 False 1000.00 -0.0 0
5 23.34 True 4.15 45.0 45
但是想得到这个:
close signal cash trade pos
0 21.02 False 1000.00 0.0 0
1 21.05 True 10.65 47.0 47
2 21.10 True 10.65 0.0 47
3 21.22 True 10.65 0.0 47
4 22.17 False 1052.62 -47.0 0
5 23.34 True 2.57 45.0 45