在MetaTrader 4 (MT4) 中编写指标线,你需要遵循以下步骤:
确定指标线所在的窗口
你可以选择将指标线放在主图(`property indicator_chart_window main`)还是副图(`property indicator_chart_window chart`)。
建立数组
创建一个数组来保存指标线在各个位置的值。例如,如果你要绘制一条简单的移动平均线,你可以创建一个双精度类型的数组(如 `double MA_Buffer[]`)。
建立指标线与数组的对应关系
明确哪个数组对应哪条指标线。例如,如果你在主图上绘制一条移动平均线,你可以使用 `SetIndexBuffer(0, MA_Buffer)` 将数组与指标线关联起来。
明确指标线的线型
定义指标线的线型,如曲线(`DRAW_LINE`)、柱线(`DRAW_BAR`)或箭头(`DRAW_ARROW`)。例如,`SetIndexStyle(0, DRAW_LINE)` 会设置指标线为线型。
初始化函数(`init()`)
在指标加载时运行一次的函数。在这个函数中,你可以设置指标线的属性,如颜色、线型等。例如:
```mql4
int init() {
SetIndexBuffer(0, MA_Buffer); // 将数组与指标线关联
SetIndexStyle(0, DRAW_LINE); // 设置指标线为线型
return(0);
}
```
数据发动变动时的函数(`start()`)
每当数据有变动时,这个函数就会被触发。在这个函数中,你可以取值并给指标线赋值。例如:
```mql4
int start() {
int limit = Bars - IndicatorCounted();
for (int i = 0; i < limit; i++) {
double currentPrice = iClose(NULL, 0, i);
double movingAverage = iMA(NULL, 0, 14, 0, MODE_SMA, currentPrice, i);
MA_Buffer[i] = movingAverage; // 将计算出的移动平均值赋值给数组
}
return(0);
}
```
示例:绘制MACD指标
MACD指标由两条曲线(DIF和DEA)和一组红绿柱线(MACD柱)组成。以下是一个简单的MACD指标编程示例:
```mql4
property indicator_separate_window
property indicator_color1 White
property indicator_color2 Blue
property indicator_color3 Red
property indicator_level1 0
extern int FMA = 12;
extern int SMA = 26;
extern int signal = 9;
double bufDIF[];
double bufDEA[];
double bufMACD[];
int init() {
SetIndexBuffer(0, bufDIF);
SetIndexBuffer(1, bufDEA);
SetIndexBuffer(2, bufMACD);
SetIndexStyle(0, DRAW_LINE);
SetIndexStyle(1, DRAW_LINE);
SetIndexStyle(2, DRAW_BAR);
return(0);
}
int start() {
int limit = Bars - IndicatorCounted();
for (int i = 0; i < limit; i++) {
double currentPrice = iClose(NULL, 0, i);
double dif = iMA(NULL, 0, FMA, 0, MODE_SMA, currentPrice, i) - iMA(NULL, 0, SMA, 0, MODE_SMA, currentPrice, i);
double dea = iMA(NULL, 0, FMA, 0, MODE_SMA, bufDEA[i - 1], i - 1);
bufDIF[i] = dif;
bufDEA[i] = dea;
bufMACD[i] = dif - dea;
}
return(0);
}
```
在这个示例中,我们定义了三个数组 `bufDIF`、`bufDEA` 和 `bufMACD` 分别用于存储DIF、DEA和MACD柱的值。在 `init()` 函数中,我们将这些数组与指标线关联,并设置它们的线型和颜色。在 `start()` 函数中,我们计算这些值并赋值给数组。