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

Python实现自定义规则MACD背离自动识别的技术问题求助

实现逻辑思路
  • 首先做数据预处理,必须保证行情数据按日期升序排列,也就是越靠下的数据对应越新的交易日,排序错误会直接导致回溯逻辑失效
  • 遍历所有交易日作为待校验的当前节点,前40个交易日没有足够的回溯数据直接跳过即可
  • 对每个符合条件的当前节点,取往前数40条数据的回溯区间,在区间内定位MACD Hist的最小值对应的行,拿到该行的价格、MACD Hist值以及对应索引
  • 依次校验三个判定条件:
    • 当前交易日价格 < 回溯区间MACD Hist最低点对应的价格
    • 当前交易日MACD Hist的绝对值 < 最低点MACD Hist的绝对值
    • 最低点到当前交易日的区间内,存在至少一个大于0的MACD Hist值
  • 三个条件全部满足则标记当前交易日为背离信号点,初学阶段用显式循环更方便调试每一步的取值是否正确,后续熟悉了可以替换成滚动窗口函数提升运行速度
参考代码
import pandas as pd

# 假设你的原始数据存储在df中,列名分别为date(日期)、price(价格)、macd_hist(MACD柱值)
# 第一步:按日期升序排序并重设索引
df = df.sort_values('date', ascending=True).reset_index(drop=True)
# 新增信号列,0代表无背离,1代表出现目标背离
df['divergence_signal'] = 0

# 从第41条数据开始遍历(索引从0计数,所以i从40开始)
for i in range(40, len(df)):
    # 取当前节点往前40天的回溯区间,不含当前节点
    lookback_window = df.loc[i-40 : i-1]
    # 定位区间内MACD Hist最低的行,默认取第一个出现的最小值,要取最后一个把iloc[0]改成iloc[-1]
    lowest_hist_row = lookback_window[lookback_window['macd_hist'] == lookback_window['macd_hist'].min()].iloc[0]
    lowest_hist_price = lowest_hist_row['price']
    lowest_hist_val = lowest_hist_row['macd_hist']
    lowest_hist_idx = lowest_hist_row.name
    
    # 三个条件校验
    cond1 = df.loc[i, 'price'] < lowest_hist_price
    cond2 = abs(df.loc[i, 'macd_hist']) < abs(lowest_hist_val)
    # 取最低点和当前节点之间的区间判断是否有正值MACD Hist
    between_window = df.loc[lowest_hist_idx+1 : i-1]
    cond3 = (between_window['macd_hist'] > 0).any()
    
    if cond1 and cond2 and cond3:
        df.loc[i, 'divergence_signal'] = 1

如果你需要把当前交易日算在40天回溯区间内,把lookback_window的切片改成i-39 : i即可。

内容的提问来源于stack exchange,提问作者Sam.H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:48:02