在MetaTrader 4(MT4)平台的MQL4编程语言中,MACD(指数平滑异同移动平均线)指标常用于分析价格趋势和判断买卖信号。以下是一个简单的自定义MACD指标代码示例,同时包含信号线(Signal Line)和柱状图(Histogram)的计算与绘制:
- #property copyright "Your Name"
- #property link "Your Website"
- #property version "1.00"
- #property strict
-
- // 指标参数
- input int FastEMA_Period = 12;
- input int SlowEMA_Period = 26;
- input int Signal_Period = 9;
-
- // 缓存数组
- double MACDBuffer[];
- double SignalBuffer[];
- double HistogramBuffer[];
-
- // 初始化函数
- int init() {
- // 设置指标缓冲区
- SetIndexBuffer(0, MACDBuffer);
- SetIndexBuffer(1, SignalBuffer);
- SetIndexBuffer(2, HistogramBuffer);
-
- // 设置指标绘图
- SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 1, Blue);
- SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 1, Red);
- SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_SOLID, 1, Green);
-
- // 设置指标名称和标签
- IndicatorShortName("MACD (" + FastEMA_Period + "," + SlowEMA_Period + "," + Signal_Period + ")");
- SetIndexLabel(0, "MACD");
- SetIndexLabel(1, "Signal");
- SetIndexLabel(2, "Histogram");
-
- // 定义指标绘图区域
- IndicatorDigits(Digits + 2);
- SetIndexDrawBegin(0, Signal_Period);
- SetIndexDrawBegin(1, Signal_Period);
- SetIndexDrawBegin(2, Signal_Period);
-
- return 0;
- }
-
- // 计算函数
- int start() {
- int limit = Bars - Signal_Period;
- int i;
-
- for (i = 0; i < limit; i++) {
- // 计算MACD线
- MACDBuffer = iMA(Symbol(), 0, FastEMA_Period, 0, MODE_EMA, PRICE_CLOSE, i) -
- iMA(Symbol(), 0, SlowEMA_Period, 0, MODE_EMA, PRICE_CLOSE, i);
-
- // 计算信号线
- SignalBuffer = iMAOnArray(MACDBuffer, 0, Signal_Period, 0, MODE_EMA, i);
-
- // 计算柱状图
- HistogramBuffer = MACDBuffer - SignalBuffer;
- }
-
- return 0;
- }
复制代码
代码说明:
1. 指标参数:定义了快速EMA周期(FastEMA_Period)、慢速EMA周期(SlowEMA_Period)和信号线周期(Signal_Period),可在MT4平台上直接调整。
2. 缓存数组:MACDBuffer存储MACD线数据,SignalBuffer存储信号线数据,HistogramBuffer存储柱状图数据。
3. 初始化函数(init()):设置指标缓冲区、绘图样式、名称和标签,并定义绘图区域。
4. 计算函数(start()):通过iMA函数计算MACD线,通过iMAOnArray函数在MACD线数组上计算信号线,最后得出柱状图数据。
使用方法:
1. 将上述代码复制到MT4的“专家顾问(EA)”编辑器(可通过“文件” -> “打开数据文件夹”,进入“MQL4” -> “Indicators”文件夹,创建一个新的.mq4文件并粘贴代码)。
2. 编译代 |