mt4的指标线怎么编程

时间:2025-01-28 14:38:27 网络游戏

在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()` 函数中,我们计算这些值并赋值给数组。