 
等级: 超级版主
- 注册:
- 2021-5-18
- 曾用名:
|
// 计算 MACD 指标
SHORT := 12;
LONG := 26;
MID := 9;
DIFF := EMA(CLOSE, SHORT) - EMA(CLOSE, LONG);
DEA := EMA(DIFF, MID);
MACD := 2 * (DIFF - DEA);
// 标记 DIF 上穿 DEA 的金叉信号
CROSS_UP := CROSS(DIFF, DEA);
// 记录当前金叉时的 DIF 值和收盘价
CURRENT_DIFF := DIFF;
CURRENT_CLOSE := CLOSE;
// 查找前一次金叉的位置
PREV_CROSS_BARS := BARSLAST(CROSS_UP);
// 记录前一次金叉时的 DIF 值和收盘价
PREV_DIFF := REF(DIFF, PREV_CROSS_BARS);
PREV_CLOSE := REF(CLOSE, PREV_CROSS_BARS);
// 判断两次金叉之间 DIF 是否回抽到 0 轴附近
// 定义 0 轴附近的范围,这里设置为 -0.02 到 0.02,可根据实际调整
ZERO_NEAR_RANGE := ABS(DIFF) <= 0.02;
DIF_BACK_TO_ZERO := EXIST(ZERO_NEAR_RANGE, PREV_CROSS_BARS - 1);
// 判断是否发生背离
// 顶背离:价格创新高,DIF 未创新高
TOP_DIVERGENCE := CROSS_UP AND CURRENT_CLOSE > PREV_CLOSE AND CURRENT_DIFF < PREV_DIFF AND DIF_BACK_TO_ZERO;
// 底背离:价格创新低,DIF 未创新低
BOTTOM_DIVERGENCE := CROSS_UP AND CURRENT_CLOSE < PREV_CLOSE AND CURRENT_DIFF > PREV_DIFF AND DIF_BACK_TO_ZERO;
// 综合背离信号
DIVERGENCE := TOP_DIVERGENCE OR BOTTOM_DIVERGENCE;
IF DIVERGENCE THEN DRAWTEXT(1,close,'底背离'); |
|