如何去除股票交易逻辑中的重复买卖信号?
股票交易信号清洗:保留初始买卖信号
需求说明
仅保留position列中初始的1.0(买入)或-1.0(卖出)信号,规则如下:
- 位于1.0与-1.0之间的1.0替换为0.0
- 位于-1.0与1.0之间的-1.0替换为0.0
原始数据
import pandas as pd df = pd.DataFrame({'position': [1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1.0, 1.0, 0.0, -1.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0]})
解决方案
方法1:遍历处理
通过跟踪上一个有效信号,判断当前信号是否需要保留:
prev_signal = None for idx, val in enumerate(df['position']): if val != 0.0: if prev_signal is None: prev_signal = val else: if val == prev_signal: df.loc[idx, 'position'] = 0.0 else: prev_signal = val
方法2:Pandas向量化操作
利用Pandas的索引和diff方法批量处理,效率更高:
# 提取所有非0信号的行 signals = df[df['position'] != 0.0] # 标记需要保留的信号:与前一个信号不同的才保留(第一个信号默认保留) keep_mask = signals['position'].diff().fillna(True).astype(bool) # 将不需要保留的信号设为0 df.loc[signals[~keep_mask].index, 'position'] = 0.0
处理后结果
print(df) # 输出: # position # 0 1.0 # 1 0.0 # 2 0.0 # 3 0.0 # 4 0.0 # 5 0.0 # 6 0.0 # 7 0.0 # 8 0.0 # 9 0.0 # 10 -1.0 # 11 1.0 # 12 0.0 # 13 -1.0 # 14 0.0 # 15 0.0 # 16 0.0 # 17 0.0 # 18 0.0 # 19 0.0 # 20 1.0
内容的提问来源于stack exchange,提问作者Chung Joshua
相关产品推荐
相关产品推荐

