MACD 指标前高前低公式解析及代码实现
DIF:=EMA(CLOSE,12)-EMA(CLOSE,26); // 计算短期和长期指数移动平均线的差值 DEA:=EMA(DIF,9); // 计算DIF的指数移动平均线 MACD:=(DIF-DEA)*2,COLORSTICK; // 计算MACD指标的值 JZX1:=CROSS(DIF,DEA); // 判断DIF是否上穿DEA JZX2:=CROSS(DEA,DIF); // 判断DEA是否上穿DIF 前高:IF(CONST(SUMBARS(JZX1,2)-BARSLAST(JZX2))>2,IF(CURRBARSCOUNT<=CONST(FINDHIGHBARS(DIF,BARSLAST(JZX2),SUMBARS(JZX1,2)-BARSLAST(JZX2),1))+1,CONST(FINDHIGH(Y,BARSLAST(JZX2),SUMBARS(JZX1,2)-BARSLAST(JZX2),1)),DRAWNULL),COLORMAGENTA,DOTLINE; // 查找前一高点的价格 前低:IF(CONST(SUMBARS(JZX1,2)-BARSLAST(JZX2))>2,IF(CURRBARSCOUNT<=CONST(FINDLOWBARS(DIF,BARSLAST(JZX1),SUMBARS(JZX1,2)-BARSLAST(JZX2),1))+1,CONST(FINDLOW(Y,BARSLAST(JZX1),SUMBARS(JZX1,2)-BARSLAST(JZX2),1)),DRAWNULL),COLORGREEN,DOTLINE; // 查找前一低点的价格
前高每个函数的意思
- SUMBARS(JZX1,2): 返回JZX1信号出现的最后两次的总柱数
- BARSLAST(JZX2): 返回JZX2信号出现的最后一次的柱数
- CONST(SUMBARS(JZX1,2)-BARSLAST(JZX2)): 计算两次JZX1信号出现的间隔的柱数
- CURRBARSCOUNT: 当前的柱数
- FINDHIGHBARS(DIF,BARSLAST(JZX2),SUMBARS(JZX1,2)-BARSLAST(JZX2),1): 从JZX2信号出现的最后一次开始,向前回溯两次JZX1信号间隔的柱数,找到DIF最高的柱数
- FINDHIGH(Y,BARSLAST(JZX2),SUMBARS(JZX1,2)-BARSLAST(JZX2),1): 从JZX2信号出现的最后一次开始,向前回溯两次JZX1信号间隔的柱数,找到Y最高的值
- DRAWNULL: 表示不绘制任何内容
- COLORMAGENTA: 设置线条颜色为洋红色
- DOTLINE: 设置线条类型为点线
代码解析
以上代码的目的是在MACD指标中查找前一个高点和低点。
- 首先计算两次JZX1信号出现的间隔的柱数,确保间隔超过2根柱。
- 然后从JZX2信号出现的最后一次开始,向前回溯两次JZX1信号间隔的柱数,找到DIF最高的柱数。
- 最后根据DIF最高的柱数找到Y的最高值,并绘制成洋红色的点线,表示前一个高点。
同理,前低公式也类似,只是将FINDHIGHBARS和FINDHIGH替换成FINDLOWBARS和FINDLOW,将COLORMAGENTA替换成COLORGREEN,表示前一个低点。
原文地址: https://www.cveoy.top/t/topic/nhPV 著作权归作者所有。请勿转载和采集!