MT4編程入門(mén)(十):畫(huà)一條指標(biāo)線(xiàn) [MT4]
作者:
MT4 來(lái)源:
cxh99.com 發(fā)布時(shí)間:2012年05月16日 點(diǎn)擊數(shù):
【
收藏到本網(wǎng)的會(huì)員中心】
- 要畫(huà)指標(biāo)線(xiàn),只要在程序中寫(xiě)明以下幾點(diǎn)就可以了:
第一、明確指標(biāo)線(xiàn)所在窗口,是主圖還是副圖
第二、要建立數(shù)組,用以保存指標(biāo)線(xiàn)在各個(gè)位置的值。
第三、要建立指標(biāo)線(xiàn)與數(shù)組的對(duì)應(yīng)關(guān)系,哪個(gè)數(shù)組對(duì)應(yīng)哪條指標(biāo)線(xiàn)
第四、要明確指標(biāo)線(xiàn)的線(xiàn)型,是曲線(xiàn)還是柱線(xiàn)或者是箭頭
第五、如果指標(biāo)線(xiàn)是箭頭,還要說(shuō)明是哪種箭頭
第六、給數(shù)組賦值
其中:
第一、二條寫(xiě)在文件頭部中,
第三、四、五條寫(xiě)在init()函數(shù)中(init函數(shù)僅在指標(biāo)加載時(shí)運(yùn)行一次)
第六條寫(xiě)在start()函數(shù)中(start函數(shù)在數(shù)據(jù)發(fā)動(dòng)變動(dòng)時(shí)運(yùn)行,變動(dòng)一次運(yùn)行一次)
下面以MACD為例說(shuō)明
我們知道,MACD指標(biāo)由二條曲線(xiàn)和一組紅綠柱線(xiàn)組成。(下圖一)
其中:
白線(xiàn)是二根均線(xiàn)的差;
紫線(xiàn)是白線(xiàn)的移動(dòng)平均線(xiàn);
紅綠柱線(xiàn)則是白線(xiàn)和紫線(xiàn)的差,白線(xiàn)上穿紫線(xiàn),出現(xiàn)紅柱,下穿則出現(xiàn)綠柱。

我們從簡(jiǎn)單入手,先去除紫線(xiàn)和紅綠柱線(xiàn),僅保留其中的那根白線(xiàn),來(lái)看白線(xiàn)是怎樣畫(huà)出來(lái)的。
下面是全部語(yǔ)句:
#property indicator_separate_window
#property indicator_color1White
#property indicator_level10
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<limit; i++)
{
buf=
iMA(NULL,0,FMA,0,1,0,i)
-iMA(NULL,0,SMA,0,1,0,i);
}
return(0);
}
說(shuō)明如下:

==============================================
==============================================
以下為上述語(yǔ)句的簡(jiǎn)要說(shuō)明
#property indicator_separate_window
指標(biāo)放在副圖
#property indicator_color1White
第一條指標(biāo)線(xiàn)為白色
#property indicator_level10
在副圖中零值位置上畫(huà)一條水平橫線(xiàn),
extern int FMA=12;
extern int SMA=26;
設(shè)立二個(gè)整數(shù)型變量,默認(rèn)值為12和26,允許外部修改值
double buf[];
設(shè)立一個(gè)數(shù)組
int init()
初始化函數(shù)。該函數(shù)在指標(biāo)加載時(shí)只運(yùn)行一次。init是系統(tǒng)默認(rèn)的函數(shù)名,但使用時(shí)仍需要進(jìn)行創(chuàng)設(shè),所以要加定義符int
{
SetIndexBuffer(0,buf);
設(shè)置數(shù)組buf為第一條指標(biāo)線(xiàn)
SetIndexStyle(0,DRAW_LINE);
設(shè)置第一條指標(biāo)線(xiàn)線(xiàn)型為連續(xù)曲線(xiàn)
return(0);
函數(shù)結(jié)束語(yǔ)句
}
int start()
指標(biāo)觸發(fā)函數(shù)。與init函數(shù)不同,該函數(shù)在有數(shù)據(jù)變化時(shí)被觸發(fā),如果數(shù)據(jù)被不斷更新,則該函數(shù)將不斷執(zhí)行。start也是系統(tǒng)默認(rèn)的函數(shù)名,但使用時(shí)也仍然需要進(jìn)行創(chuàng)設(shè),所以也要加定義符int
{
int limit=Bars-IndicatorCounted();
自定義一個(gè)變量limit,并賦值
Bars是圖表中的柱數(shù)
IndicatorCounted()緩存中的柱數(shù),就是已經(jīng)計(jì)算過(guò)的有值的柱數(shù)
這樣limit的值就是未經(jīng)計(jì)算的柱數(shù),這樣就可以起到優(yōu)化程序的作用。
for(int i=0; i<limit; i++)
循環(huán)語(yǔ)句。
循環(huán)從i=0開(kāi)始,每循環(huán)一次i值增加1,一直循環(huán)到i<limit不滿(mǎn)足時(shí)結(jié)束循環(huán)
由于循環(huán)變量i為一個(gè)新變量,所以要先定義,加上整型變量定義符int
下面大括中為循環(huán)體,此例中只一條語(yǔ)句
{
buf=
iMA(NULL,0,FMA,0,1,0,i)
-iMA(NULL,0,SMA,0,1,0,i);
}
給數(shù)組buf賦值,其值分別為相應(yīng)位置上兩條均線(xiàn)的差
i是水平位置序號(hào)值,即燭柱從右到左的序號(hào),右邊第一個(gè)燭柱序號(hào)為0
return(0);
start函數(shù)結(jié)束
}