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

股票多周期卖出信号整合及日线信号加入dfall的技术咨询

解决多周期卖出信号匹配问题:加入日线信号到dfall DataFrame

看起来你已经搞定了5/15/60分钟级信号的匹配,现在卡在日线信号的合并上对吧?别担心,核心问题是日线数据和分钟级数据的时间对齐——日线是单日一条记录,而分钟级是日内多条,我们需要把日线信号映射到对应日期的所有分钟级数据上,然后就能统一判断多周期信号了。

步骤1:预处理日线数据

首先确保你的日线DataFrame(比如叫df_daily)有两个关键列:

  • 日期列(比如'Date',格式为YYYY-MM-DD)
  • 日线信号列(比如'Signal_D',卖出信号为-1)

如果日期是索引,先转成列并统一格式:

df_daily.reset_index(inplace=True)
# 把日期转成纯日期类型(忽略时分秒)
df_daily['Date'] = df_daily['Date'].dt.date

步骤2:将日线信号合并到dfall

接下来处理你的dfall(包含5/15/60分钟信号的DataFrame),提取每条记录对应的日期,然后和日线数据做匹配:

方法A:用merge做左连接(推荐)

# 先把dfall的时间列转成纯日期格式(假设你的时间列叫'Timestamp')
dfall['Date'] = dfall['Timestamp'].dt.date

# 左连接日线数据,把对应日期的Signal_D合并进来
dfall = pd.merge(dfall, df_daily[['Date', 'Signal_D']], on='Date', how='left')

方法B:用map快速映射

如果df_daily的Date是唯一索引,可以用更简洁的映射方式:

# 先把df_daily设置Date为索引
df_daily.set_index('Date', inplace=True)
# 提取dfall的日期,直接映射日线信号
dfall['Signal_D'] = dfall['Timestamp'].dt.date.map(df_daily['Signal_D'])

两种方法都能把日线信号Signal_D成功加入dfall,现在dfall就有Signal_5、Signal_15、Signal_60、Signal_D四个信号列了。

步骤3:实现多周期卖出条件判断

现在可以用高效的向量操作(比iterrows快N倍)筛选出所有周期都满足卖出信号的记录:

# 定义卖出条件:四个周期的信号全部等于-1
sell_condition = (dfall['Signal_5'] == -1) & \
                 (dfall['Signal_15'] == -1) & \
                 (dfall['Signal_60'] == -1) & \
                 (dfall['Signal_D'] == -1)

# 筛选满足条件的记录,提取日期和收盘价
sell_signals = dfall.loc[sell_condition, ['Date', 'Close']]

# 去重(同一天可能有多个分钟级记录满足,只保留一条)
sell_signals = sell_signals.drop_duplicates(subset='Date').reset_index(drop=True)

为什么不用iterrows?

iterrows是逐行遍历,对于大数据量的分钟级数据效率极低,用pandas的向量布尔索引能快几十倍甚至上百倍,而且代码更简洁易读。

验证结果

最后打印sell_signals,就能得到你要的所有周期同一天出现卖出信号的日期和收盘价了。

内容的提问来源于stack exchange,提问作者Fredrick Chege

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:49:14