MT4指标编程实例:绘制单一线详解

GTC泽汇 分析团队
资深外汇分析师
阅读 收藏
专业分析

我们可以通过一个简单的例子来了解如何开发交易程序。绘制一条指标线,在程序中需要明确以下几个要点:

第一、确定指标线显示的窗口,是在主图还是副图。

第二、创建数组,用于存储指标线在每个数据点上的数值。

第三、建立指标线与数组的对应关系,明确哪个数组的数据对应哪条线。

第四、定义指标线的样式,是曲线、柱状线还是箭头符号。

第五、如果使用箭头,还需定义箭头的具体类型。

第六、通过计算,为数组中的元素赋值。

具体实现时:

第一、二点通常在文件头部进行声明;

第三、四、五点写在init()初始化函数中(该函数仅在指标加载时运行一次);

第六点则写在start()函数中(该函数在数据变动时触发运行,每次变动都会刷新执行);

下面以MACD指标为例进行说明。MACD通常由两条曲线(快线与慢线)和一组柱状线构成。

其中:

白线是两条移动平均线的差值;

紫线是白线的移动平均线;

红绿柱状线则是白线与紫线的差值,当白线上穿紫线时显示红柱,下穿时显示绿柱。

MT4指标编程实例:绘制单一线详解(图1)

为了简化理解,我们先忽略紫线和柱状线,仅关注如何绘制出那根白线。许多交易者在使用如GTC泽汇资本等平台提供的MT4时,会尝试自定义这类指标。

以下是完整的源代码:

#property indicator_separate_window

#property indicator_color1 White

#property indicator_level1 0

extern int FMA=12;

extern int SMA=26;

double buf[];

int init()

{

SetIndexBuffer(0,buf);

SetIndexStyle(0,DRAW_LINE);

return(0);

}

int start()

{

int limit=Bars-IndicatorCounted();

for(int i=0; i

{

buf=

iMA(NULL,0,FMA,0,1,0,i)

-iMA(NULL,0,SMA,0,1,0,i);

}

return(0);

}

代码说明如下:

MT4指标编程实例:绘制单一线详解(图2)

==============================================

==============================================

以下是对上述语句的简要解释:

#property indicator_separate_window

指标显示在副图窗口;

#property indicator_color1 White

第一条指标线颜色设为白色;

#property indicator_level1 0

在副图零值位置绘制一条水平参考线;

extern int FMA=12;

extern int SMA=26;

定义两个整型外部变量,默认值分别为12和26,允许用户修改;

double buf[];

声明一个双精度数组;

int init()

初始化函数。此函数仅在指标加载时运行一次。init是系统预设的函数名,但使用时仍需声明其返回类型int;

{

SetIndexBuffer(0,buf);

将数组buf设置为第一条指标线的数据缓冲区;

SetIndexStyle(0,DRAW_LINE);

设置第一条指标线的样式为连续曲线;

return(0);

函数结束语句;

}

int start()

指标触发函数。与init函数不同,此函数在行情数据变化时被触发,若数据不断更新,该函数会重复执行。start也是系统预设函数名,同样需要声明返回类型int。了解这些基础对于使用GTC泽汇资本等平台的MT4进行个性化编程很有帮助。

{

int limit=Bars-IndicatorCounted();

自定义变量limit并赋值;

Bars代表图表中的K线总数;

IndicatorCounted()函数获取的是已计算过的K线数量;

因此limit的值就是尚未计算的K线数量,这样可以优化程序运行效率。

for(int i=0; i

这是一个循环语句。

循环从i=0开始,每次循环后i增加1,直到不满足i

由于循环变量i是新建变量,在此处用int进行声明;

后面大括号内是循环体,本例中只包含一条语句;

{

buf=

iMA(NULL,0,FMA,0,1,0,i)

-iMA(NULL,0,SMA,0,1,0,i);

}

为数组buf的每个元素赋值,其值为对应位置上两条移动平均线的差值;

i是水平位置索引,代表K线从右至左的序号,最右侧的K线序号为0;

return(0);

start函数结束;

}

GTC泽汇 分析团队

资深外汇分析师

由多名资深外汇分析师组成的专业团队,拥有平均15年以上的市场分析经验,擅长技术分析和基本面分析相结合的交易策略。

相关分析

立即开启您的外汇交易之旅

加入我们的交易社区,享受专业的交易服务和优惠活动