您现在的位置: 比特财富网 >> 财经 >  >> 外匯
MT4編程初級手冊(10):一條指標線的實例
外_匯_邦 WaiHuiBang.com

我們現在以一個簡單的實例來給大家講述如何進行EA的開發。www.emoneybtc.com要畫指標線,只要在程序中寫明以下幾點就可以了:

 

第一、定義指標線所在窗口,是主圖還是副圖。

 

第二、創建數組,用以保存指標線在各個位置上的值。

 

第三、要建立指標線與數組的對應關系(函數關系,運算關系),哪個數組中的數據對應哪條指標線。

 

第四、要定義指標線的線型,是曲線還是柱線或者是箭頭。

 

第五、如果指標線是箭頭,還要定義是哪種類型的箭頭。

 

第六、通過運算,給數組賦值。

 

其中:

 

第一、二條寫在文件頭部中;

 

第三、四、五條寫在init()初始化函數中(init函數僅在指標加載時運行一次);

 

第六條寫在start()函數中(start函數在數據發動變動時運行,變動一次刷新運行一次);

 

下面我們以MACD為例來說明,我們知道,MACD指標由二條曲線(快線和慢線)和一組紅綠柱線組成。(下圖一)

 

其中:

 

白線是二根均線的差;

 

紫線是白線的移動平均線;

 

紅綠柱線則是白線和紫線的差,白線上穿紫線,出現紅柱,下穿則出現綠柱。

 

111.gif

 

我們從簡單入手,先去除紫線和紅綠柱線,僅保留其中的那根白線,來看白線是怎樣畫出來的。

 

下面是源代碼的全部語句:

 

#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<limit; i++)

    {

    buf=

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

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

    }

   return(0);

  }

 

說明如下:

 

222.gif

 

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

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

 

以下為上述語句的簡要說明

 

#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。

 

  {

   int limit=Bars-IndicatorCounted();

   自定義了一個變量limit,並對其賦值

   Bars是圖表中的柱數(K線數)

   IndicatorCounted()函數調用的是緩存中的柱數,就是已經計算過的有值的柱數。

   這樣limit的值就是未經計算的柱數,這樣就可以起到優化程序的作用了。

   for(int i=0; i<limit; i++)

   該句為循環語句。

   循環從i=0開始,每循環一次i值增加1,一直循環到i<limit不滿足時結束循環

   由於循環變量i為一個新變量,所以在這裡聲明,加上整型變量聲明符int

   下面大括中為循環體,此例中只涉及一條語句

    {

    buf=

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

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

    }

   給數組buf賦值,其值分別為相應位置上兩條均線計算出的差

   i是水平位置索引值,即燭柱從右到左的序號,右邊第一個燭柱序號為0

   return(0);

   start函數結束

  }

外_匯_邦 WaiHuiBang.com
  • 原油期貨寶app是假的嗎

    原油寶是期貨嗎?所以賠的錢   不是期貨,是假盤,中行不會把這些錢真拿去期貨市場建倉,最多意思意思,但是肯定有足夠的對沖

  • 牛市中賺到大錢的秘訣

    牛市中如果你只賺到小錢,那你熊市一定虧大錢,所以你基本是來股市做慈善的,只是這慈善有證書但從不發獎狀。牛市中賺大錢是有秘訣的,總結出來的以下

  • 怎麼買基金最省錢?

      通過銀行購買基金是買基金最普通的方法。購買基金還可以通過證券公司、基金公司、第三方機構。通過什麼方式購買基金最省錢呢?

  • 大額存單存哪個銀行?

    最佳答案: 目前,各大銀行的大額存單利息都差不多,普遍在央行基准利率的基礎之上上浮50%左右。在安全

  • 掃黑除惡包括高利貸嗎?

    最佳答案: 正常來說,放高利貸產生的糾紛一般被歸為民事類型。但是如果在其中涉及暴力、套路等,那麼可以

  風險提示:比特財富網的各種信息資料僅供參考,不構成任何投資建議,不對任何交易提供任何擔保,亦不構成任何邀約,不作為任何法律文件,投資人據此進行投資交易而產生的後果請自行承擔,本網站不承擔任何責任,理財有風險,投資需謹慎。
比特財富網 版權所有 © www.emoneybtc.com