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

基于Pandas历史与当前金融数据新增Buy_Signal信号的实现咨询

实现代码

首先先处理StopLoss列的特殊标记(样例中存在[Cond]后缀,需先提取数值),再按规则生成信号列:

import pandas as pd

# 1. 处理StopLoss列的特殊标记,转为纯数值
df['StopLoss'] = df['StopLoss'].astype(str).str.replace(r'\s*\[.*\]', '', regex=True).astype(float)

# 2. 生成上一行的Buy、StopLoss偏移列
df['prev_Buy'] = df['Buy'].shift(1)
df['prev_StopLoss'] = df['StopLoss'].shift(1)

# 3. 生成判断掩码:当前行High > 当前行Buy
signal_mask = df['High'] > df['Buy']

# 4. 新增信号列,满足条件则赋值上一行对应值,否则为NaN
df['Buy_Signal_Buy'] = df['prev_Buy'].where(signal_mask)
df['Buy_Signal_StopLoss'] = df['prev_StopLoss'].where(signal_mask)

# 可选:删除中间临时列
df.drop(columns=['prev_Buy', 'prev_StopLoss'], inplace=True)

结果验证

对应你的样例数据,生成的信号列结果如下:

DateTimeBuyStopLossHighBuy_Signal_BuyBuy_Signal_StopLoss
2021-09-13 09:15:00NaNNaN460.05NaNNaN
2021-09-13 09:16:00500.825352.5456.25NaNNaN
2021-09-13 09:17:00410.375330.0479.5500.825352.5
2021-09-13 09:18:00400.125367.25453.0410.375330.0
2021-09-13 09:19:00367.0320.0477.75400.125367.25

注意事项

  • 第一行不存在上一行数据,因此无论是否满足条件,信号列均为NaN,符合逻辑
  • 如果你的原始StopLoss列已经是纯数值,可跳过第一步的特殊字符处理步骤

内容的提问来源于stack exchange,提问作者Yatin Dave

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:24:03