股票市场alg的数据帧循环问题

2024-05-14 07:12:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用python分析一个基于历史股市数据的交易算法。但我了解到,在大型数据集上使用循环并不是很快——对于数百万行来说,这是不可能的

所以我从布尔索引开始。但我不能让它工作。有人有线索吗?我的示例有5行,但实际上我有200万行

我学习了SHIFT函数来考虑前一行的值。但这只解决了一排问题

## data set
timehourminute=['15:25','15:30','15:35','15:40','15:45']
close=[21.02,21.05,21.10,21.22, 21.17]
signal=[False,True,True,True,False]
position=[0,0,0,0,0]
data={'timehourminute':timehourminute,'close':close, 'signal':signal,'position':position}
df=pd.DataFrame.from_dict(data)

## if time = 15:30 and signal = True, buy $1000 worth of stocks
subset = (df.timehourminute=='15:30') & (df.signal==True)
df.loc[subset,'position']=(1000/df.close)

## if previous row has position, keep the position if the signal is still True
df['positionprev']=df.position.shift(1)
df.position = df.signal * df[['position','positionprev']].max(axis=1)
df.position = df.position.astype(int)

输出如下:

timehourminute  close  signal  position  positionprev
0          15:25  21.02   False         0           NaN
1          15:30  21.05    True        47      0.000000
2          15:35  21.10    True        47     47.505938
3          15:40  21.22    True         0      0.000000
4          15:45  21.17   False         0      0.000000

问题是我想保持这个位置直到信号变假。在本例中,信号持续3行,但实际上可能持续1000行。我如何得到47的值以保持在第3行


Tags: the数据falsetruedfclosedatasignal
1条回答
网友
1楼 · 发布于 2024-05-14 07:12:15

我相信您需要^{}按条件填充缺失值并向前填充缺失值:

df['new'] = df.position.mask(df.signal & (df.position == 0)).ffill()
print (df)
  timehourminute  close  signal   position        new
0          15:25  21.02   False   0.000000   0.000000
1          15:30  21.05    True  47.505938  47.505938
2          15:35  21.10    True   0.000000  47.505938
3          15:40  21.22    True   0.000000  47.505938
4          15:45  21.17   False   0.000000   0.000000

相关问题 更多 >

    热门问题