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
相关产品推荐
相关产品推荐

