You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何去除股票交易逻辑中的重复买卖信号?

股票交易信号清洗:保留初始买卖信号

需求说明

仅保留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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 13:05:40