您现在的位置: 比特财富网 >> 财经 >  >> 外匯
MT4編程開發實戰系列:畫圖系列
外_匯_邦 WaiHuiBang.com

第一節  如何畫水平線與垂直線


這是MT4編程開發實戰系列的第一站,我們先來學習一下如何在MT4圖表上進行基本的畫圖操作。www.emoneybtc.com

在開始動手之前,首先講一個很基本也很重要的概念:在MT4系統中,圖表的方向是從右到左的,舉例說:在一個記錄有當前圖表每根K線位置的數組中,第一個數值表示的是圖表最右邊、也就是當前的K線的數值!

畫圖最基本的操作是畫直線。下面的兩個例子將演示如何在圖表上畫一條直線。

 

1、畫水平線:

首先,在MetaEditor編輯器中創建一個客戶指標文件,名字可以任意,我這裡就把它命名為Lesson1_DrawLine。

然後,在其中的start()函數中添加下面的代碼:

  1. ObjectCreate("HLine",OBJ_HLINE,0,0,Bid);       //在圖表上畫一條直線

復制代碼

添加完畢後,按F5編譯代碼,然後在MT4中打開任意一張圖表,把編譯好的指標Lesson1_DrawLine添加到圖表上,我們可以看到圖表上已經畫出了一條橫線:

 

 

 

現在來解釋一下上面的代碼。

上面的代碼使用了ObjectCreate這個函數。

ObjectCreate是一個非常重要的函數,在後面的畫圖教程中會多次使用到這個函數。

在上面的例子中,ObjectCreate函數有5個參數,第1個”Hline”是對你要畫的橫線起一個名字,這個名字是可以任意的;

第2個OBJ_HLINE是MT4系統默認的一個變量,表示橫線,意義是告訴系統你准備畫一條橫線;

第3個參數是0,表示在主窗口進行畫圖的操作,這裡暫時不對這個參數作詳細的說明,後面我會專門用一個專題來將畫圖窗口的知識;

第4個參數也是0,這個代表的是橫坐標(X軸),

第5個參數是Bid,這個是MT4系統默認的一個變量,意思是當前的賣出價。

這裡重點說一下最後兩個參數:

在MT4中,圖表的橫坐標(X軸)代表時間,縱坐標(Y軸)代表價格。

 

二、畫垂直線:

在上面的例子中,ObjectCreate函數的最後兩個參數0和Bid就分別代表X軸坐標和Y軸坐標,意思是在Y軸為當前賣出價格的地方畫一條橫線(因為直線為無限長,X坐標沒有意義,所以這裡就設成0了)。

明白了這點,再畫條豎線就很簡單了。只要把X軸坐標設為你想要的數值即可。

例如:我想在當前的K線位置上畫條豎線,代碼如下:

  1. ObjectCreate("VLine",OBJ_VLINE,0,Time[0],0);           //在圖表上畫一條豎線

復制代碼

Time[]數組是MT4系統默認的一個數組,數組中每個數值對應當前圖表上每根K線所處的時間。同樣,因為直線是無限的,Y軸坐標此時也失去了意義,我們就把它設為0好了。

在本節的最後,我補充說明一下指標文件的各個組成部分:

當你創建了一個指標文件後,會發現系統已經自動生成了init()、deinit()和start()這3個函數。

Init函數是在初始化的時候調用的,也就是添加到圖表的同時會執行一次,之後就不會再執行了;

deinit函數是在關閉圖表或刪除指標的同時執行一次,主要作用是把該指標制作出來的東西刪除掉;

start函數是主函數,每次價格變動的時候,都會執行一次這個函數。


第二節  如何畫橢圓形與矩形

 

這是MT4編程開發實戰系列的第2站,

在上一節中,我們學習了如何利用ObjectCreate函數在圖表上畫直線。在這一節中,我們將繼續用ObjectCreate函數在圖表上畫出更多的圖形。

有時候我們想對某些時間段的圖形用橢圓形標識出來,下面我們一起來實現這樣的一個指標。

 

一、畫橢圓形:

利用ObjectCreate函數可以方便的在圖表上畫出一個橢圓形,MQL語言中表示橢圓的常量是OBJ_ELLIPSE。畫一個橢圓需要兩個坐標點,所以,畫一個橢圓的基本語句如下:

  1. ObjectCreate(“ellipse”, OBJ_ELLIPSE, 0, x1, y1, x2, y2)

復制代碼

新建一個指標文件,命名為”Lesson2_DrawShape_ 1”,然後在start函數中加入如下語句:

  1. ObjectCreate("ellipse",OBJ_ELLIPSE,0,Time[0],Bid,Time[10],Ask);          //在圖表上畫一個橢圓形

復制代碼

保存文件,按F5編譯指標文件,然後把在MT4中新建一個圖表,把Lesson2_DrawShape_1指標添加到圖表上,可以看到我們已經在圖表上畫出了一個橢圓形:

 

 

 

解釋一下ObjectCreate函數中的各個參數,

第1個是圖形的名字,可以任意寫(忘記了就回頭看看第一節);

第2個是MT4系統默認的一個常量,意思是告訴MT4我們要畫一個橢圓;

第3個0是表示我們要在主窗口上進行畫圖;

第4個是坐標點1的x坐標,簡單起見,我這裡寫了Time[0],代表起點是當前時間(還記得MT4圖表的方向是從右到左的嗎?);

第5個參數是坐標點1的y坐標,為簡單起見,這裡我寫了Bid,表示當前的賣出價;

第6個是坐標點2的x坐標,Time[10]表示在當前圖表上從當前時間往左第10根K線的位置;

第7個是坐標點2的y坐標,Ask表示當前的買入價。

橢圓已經畫出來了,顏色似乎不夠醒目,那我們應該如何修改已畫出來的圖形的顏色呢?

用ObjectSet函數。例如我現在想把橢圓的顏色改為紅色,可以在ObjectCreate函數下面添加這樣一句:

  1. ObjectSet("ellipse",OBJPROP_COLOR,Red);      //把橢圓的顏色改為紅色

復制代碼

編譯後把指標重新添加到圖表上,可以看到橢圓已經變為紅色了:

 

 

 

ObjectSet的第一個參數是圖形的名字,意思是告訴MT4我將要對”ellipse”這個圖形進行修改;

OBJPROP_COLOR這個參數是MT4默認的系統常量,表示Object的顏色屬性,在後面我們將會看到,Object還會有很多各種各樣的屬性,這些屬性命名的規則都是OBJ_XXX這樣的,只要把這個常量更改為我們想要修改的屬性就行了;

第3個參數Red是MT4默認的系統常量,表示紅色,在MQL語言中,各種顏色都可以直接用它們的英文名稱來表示,非常方便。

橢圓的顏色已經修改好了,但是大小似乎還不滿意,我們再把它改大一點,在前面代碼的基礎上再添加一句:

  1. ObjectSet("ellipse",OBJPROP_SCALE,1);      //對圖形進行縮放

復制代碼

編譯運行後重新添加到圖表上,我們發現橢圓變大了:

 

 

 

OBJ_SCALE表示對圖形進行縮放,1是縮放的數值,越小橢圓就越大,具體效果可以自己修改看看。

 

二、畫矩形:

下面,我想用一個矩形來替代上面我們畫出來的橢圓,該如何做呢?

很簡單,只要用OBJ_RECTANGLE代替OBJ_ELLIPSE就行了。

下面我們一起動手做。

首先新創建一個指標文件,命名為Lesson2_DrawShape_2,

在start函數加入如下語句:

  1. ObjectCreate("rectangle",OBJ_RECTANGLE,0,Time[0],iLow(Symbol(),1440,0),Time[10],iHigh(Symbol(),1440,0));

復制代碼

編譯後運行,然後在MT4中新建一張圖表,把Lesson2_DrawShape_2指標添加到圖表上,可以看到我們已經在圖表上畫了一個矩形:

 

 

 

解釋一下上面的代碼:我們用OBJ_RECTANGLE代替了前面的OBJ_ELLIPSE,意思是告訴MT4我們將要在圖表上畫一個矩形;

Time[0]和Time[10]分別是坐標點1的x軸坐標和坐標點2的x軸坐標,這個我們在前面都講過了,關鍵是iHigh和iLow這兩個函數。

iHigh和iLow都是MT4自帶的系統函數,iHigh的意思是獲取指定周期的最高價格,

iHigh函數裡面有3個參數:Symbol()函數表明用當前圖表上的貨幣、1440表示天圖、0表示取當天的最高價。

這裡做個補充,在MT4編程中,表示時間周期有兩種方法:

一是直接用數字表示,MT4中的時間單位是分鐘,所以你要指定哪個時間周期,就直接填多少分鐘行了,在上面的例子中,因為1天是1440分鐘,所以直接填1440就行了,如果要取1小時圖的最高值就填60,30分鐘圖就填30,如此類推。

二是用MT4默認的系統變量,像上面的語句,我們也可以這樣寫:

  1. ObjectCreate("rectangle",OBJ_RECTANGLE,0,Time[0],iLow(Symbol(),PERIOD_D1,0),Time[10],iHigh(Symbol(),PERIOD_D1,0));

復制代碼

編譯出來的指標是一樣的,PERIOD_D1是MT4默認的系統變量,表示周期為天,如果1小時圖就是PERIOD_H1,30分鐘圖就是PERIOD_M30,如此類推。

同理,iLow就是取指定周期的最低價;最後一個參數是0,這裡表示取最天圖最右邊的K線的最高價和最低價,即當天的最高價和最低價;如果改為1,上面的例子就是取昨天的最高價和最低價了(還記得MT4圖表的方向是由右往左吧?)。

同樣,我們可以用ObjectSet函數把上面畫出來的矩形變為紅色:

  1. ObjectSet("rectangle",OBJPROP_COLOR,Red);

復制代碼

三、刪除圖形:

現在,我們把指標Lesson2_DrawShape_2從圖表上刪除掉,發現已經畫出來的矩形並沒有從圖表上刪除,為什麼呢?

在MT4中,已經畫出來的圖形默認是不會隨指標一起被刪除的,這時我們就要用到deinit和ObjectDelete函數了。

前面說過,deinit函數是在指標被刪除的時候調用的,主要用來做一些清理性的工作,ObjectDelete函數是刪除一個指定的圖形對象,因此,我們可以在deinit函數中加入如下代碼:

  1. int deinit()
  2.   {
  3. //----
  4.   ObjectDelete("rectangle");
  5. //----
  6.   return(0);
  7.   }

復制代碼

ObjectDelete函數中的參數表示告訴MT4我們要刪除哪個圖形。



 

第三節  如何創建符號及文字

 

這是MT4編程開發實戰系列的第3站。在前面兩節中,我們已經學會了如何利用ObjectCreate函數來畫直線、橢圓和矩形。但這些都是很基本的圖形,我們經常能看到一些MT4指標在圖表上畫出了各種各樣的符號,非常有趣!

 

一、畫符號:

那麼這些符號是如何畫出來的呢?

答案還是ObjectCreate函數!由此看見ObjectCreate函數在MT4畫圖編程中是多麼的重要了吧,就如造物主一般創造出各種美妙的圖形!

下面,我們一起來學習一下,如何用ObjectCreate函數創造出更多的圖形。

首先創建一個指標文件,命名為Lesson3_DrawSymbol_1,然後在start函數中輸入如下代碼:

  1. ObjectCreate("arrow",OBJ_ARROW,0,Time[0],Low[0]);

復制代碼

編譯後添加到圖表,會發現我們已在圖表上畫了一個向上的箭頭:

 

 

 

從前面兩節的學習中,我們知道”arrow”是圖形的名字,OBJ_ARROW是告訴MT4我們要畫一個箭頭,Time[0]是x軸坐標,Low[0]是表示當前K線的最低價。

這裡對Low[]和iLow()做一個解釋。Low[]是一個數組,裡面儲存了當前周期圖表上每根K線的最低價,

注意了:僅儲存了當前周期的!如果想獲取其它周期的圖表上的某根K線的最低價,就要用到iLow函數了。同理,High[]和iHigh()也是這樣區分的,這樣解釋,應該很清楚了吧?

如果我想讓箭頭指向下方,該怎麼做呢?現在,就開始了本節最精彩的部分了!

在剛才的代碼後面添加如下一句:

  1. ObjectSet("arrow",OBJPROP_ARROWCODE,242);

復制代碼

編譯後,會發現圖表上的箭頭已經指向下方了。

補充一下,學到這裡我們可以發現一個規律:

創建一個圖形,用ObjectCreate,修改一個圖形,用ObjectSet。就這麼簡單!

在上面的例子中,最關鍵的是ObjectSet的第三個參數:242。我們把242改成67,然後再編譯,看看圖表現在的圖形是什麼?是一個大拇指向上的手勢。改成68,再編譯看看,是一個大拇指向下的手勢。看到這裡,相信大家都知道怎麼回事了吧,沒錯!只要更改這個參數,就能畫出各種我們想要的符號了。我曾在火線發過一個中文的MT4編程文檔,大家可以下載來查看一下,裡面有個圖形符號代碼表,只要將第3個參數改成代碼表裡面的數值,就可以畫出相應的符號了。下面我們來做個有趣的嘗試:把MT4裡面的各種符號都拉出來檢閱一遍!

首先新建一個指標文件,命名為Lesson3_DrawSymbol_2,然後在start函數中輸入如下的代碼:

  1. int start()
  2.   {
  3.   int counted_bars=IndicatorCounted();
  4.   int i;
  5. //----
  6.   for(i=0;i<257;i++)
  7.   {
  8.     ObjectCreate("arrow"+i,OBJ_ARROW,Time[i],Low[i]);
  9.     ObjectSet("arrow"+i,OBJPROP_ARROWCODE,i);
  10.   }
  11. //----
  12.   return(0);
  13.   }

復制代碼

編譯後把Lesson3_DrawSymbol_2指標添加到圖表上,看到了什麼?沒錯,所有MT4支持的圖形符號都跑出來了!

 

 

 

在上面的代碼中,我用了一個循環,從當前K線往左數257根K線,在每根K線的最低價位置畫一個符號。為什麼是257呢?你可以把這個數字改大一點,會發現之後所有的圖形符號都是一樣的了,這說明MT4支持的圖形符號就是到257為止了。

 

二、寫文字:

學完了前面的例子後,我相信很多朋友都能在圖表上隨意畫出自己想要的各種圖形和符號了,那麼假如想在圖表上加入一些文字呢?這個問題是初學MT4編程的朋友經常提出的一個問題,答案還是用ObjectCreate和ObjectSet這對配合得天衣無縫的函數來實現!

在MT4圖表上添加文字,有兩種方法,一種是用Comment函數,缺點是只能在圖表的左上角添加,且不能對文字的各種特性調整,如大小、顏色等;另外一種就是我們下面將要學到的方法,用ObjectCreate函數來創建。ObjectCreate函數可以創建兩種類型的文字,一種是OBJ_TEXT,一種是OBJ_LABEL。這兩種類型的區別:OBJ_TEXT是以時間和價格作為坐標的,且可以設置顯示角度;OBJ_LABEL是以當前圖表可視區域的相對位置作為坐標的,且不能調整顯示角度。下面我們用例子來加深理解。

新建一個指標文件,命名為Lesson3_DrawText_1,在start函數輸入如下代碼:

  1.   ObjectCreate("text",OBJ_TEXT,0,Time[0],High[0]);
  2.   ObjectSetText("text","Hello World!",10,"Arial",Red);

復制代碼

編譯後添加Lesson3_DrawText_1指標到圖表:

 

 

 

如果我想讓”Hello World!”以與水平線成30度的角度顯示,該如何做呢?在上面的代碼後面添加一句:

  1. ObjectSet("text",OBJPROP_ANGLE,30);

復制代碼

重新編譯後效果如下:

 

 

 

利用ObjectSet函數來調整顯示文字的角度屬性:OBJPROP_ANGLE,30表示30度。

既然已經有OBJ_TEXT了,為什麼MT4中還要再多一個OBJ_LABEL呢?

關鍵就是兩者的坐標性質不同。OBJ_TEXT的坐標是時間和價格,而OBJ_LABEL的坐標是以當前可視區域的相對位置作為坐標。

當你移動圖表的時候,會發現用OBJ_TEXT創建的文字的位置會隨著圖表的移動而變化,但用OBJ_LABEL創建的文字則始終不變,除非你更改了屏幕分辨率它才會變化,當你想創建一些始終顯示在某個固定位置的文字時,用OBJ_LABEL;如果想在某個固定的價格或時間位置顯示文字,用OBJ_TEXT。

由於精力所限,我就不再演示OBJ_LABEL的使用方法了,大家可以參照幫助文檔來使用,記住坐標的性質不同就行了。


第四節  如何畫曲線

 

這是MT4編程開發實戰系列的第4站。在前面3節我們分別學習了直線、橢圓和矩形、文字及符號的創建方法,這次我們要學習一下如何在圖表上創建曲線。

雖然MT4中已經自帶了很多曲線類型的指標,如各種不同的均線、布林帶等等,但經常有些朋友還需要創建一些自己獨有的曲線,系統自帶的指標已經無法滿足需求,這時我們就需要通過MT4編程來開發自己的曲線指標了。

下面我們一起通過實例來學習如何畫曲線。假設我現在想把圖表上每根K線的中間部分(即最高價與最低價之和的均值)用一條曲線連接起來。

首先創建一個新的指標文件,命名為Lesson4_DrawCurve_1。在指標文件的開始部分,添加如下語句:

  1. #property indicator_chart_window
  2. #property indicator_buffers 1
  3. #property indicator_color1 Red
  4. Double ExtMapBuffer[ ];

復制代碼

上面代碼的最後面三行為我們添加的語句。然後在init函數內添加如下語句:

  1. int init()
  2. {
  3. //-----indicators
  4. SetIndexStyle(0,DRAW_LINE);
  5. SetIndexBuffer(0,ExtMapBuffer);
  6. //-----
  7. return(0);
  8. }

復制代碼

在start函數內添加如下語句:

  1. int start()
  2. {
  3. int counted_bars=IndicatorCounted();
  4. int cnt;
  5. //----
  6. if(counted_bars>0) counted_bars--;
  7. int limit=Bars-counted_bars-1;
  8. for(cnt=0;cnt<limit;cnt++)
  9. {
  10. ExtMapBuffer[cnt]=(High[cnt]+Low[cnt])/2;
  11. }
  12. //-----
  13. return(0);
  14. }

復制代碼

編譯後,將Lesson4_DrawCurve_1指標添加到圖表上,會看到我們已創建了一條紅色的曲線,將圖表上每根K線的中間部分連接了起來:

 

 

 

下面來解釋一下上面代碼的意思。首先我們在指標文件的開始部分插入了3條語句,前面兩條分別是:

#property indicator_buffer 1的意思是本指標將使用一個指標緩存(最多只能有8個指標,編碼是從0至7);

#property indicator_color Red的意思是創建的指標將用紅色顯示。#property的意思是給指標文件添加一個編譯參數(注:由於這些東西涉及到程序開發中比較專業的部分了,本教程的主旨是“實用為主”,所以我將不會對一些太過專業的部分進行深入探討,只需知道應該這樣做就行了。

假如你想創建兩條曲線,則可以寫成:#property indicator_buffer 2;假如想改變曲線的顏色,則可以把Red數值改為其它顏色,如Yellow、Green等。

在添加了兩個編譯參數後,我們還創建了一個double類型的數組ExtMapBuffer[],這個數組的作用是儲存每根K線中間部分的數值,畫圖的時候就根據這個數組裡面的數值來畫。

在init函數中,我們用到了SetIndexStyle和SetIndexBuffer這兩個MT4中的系統函數。SetIndexStyle的意思是設置我們要畫的圖形的類型,SetIndexStyle中的第一個參數0,表示我們要對第一個指標的樣式進行設置,在MT4中,最多只能設置8個指標,編碼是從0開始至7結束;第二個參數DRAW_LINE是MT4默認的系統變量,意思是告訴MT4我們將要在圖表上畫線。如果我們現在想在每根K線的中間部分畫個箭頭,該如何做呢?用DRAW_ARROW替換DRAW_LINE就行了,替換後的效果如下:

 

 

 

剛才我們畫出來的曲線是一條連續的曲線,如果我想畫一條虛線該如何做呢?給SetIndexStyle增加一個參數就行了,現在我們把SetIndexStyle函數改寫為如下這樣:

  1. SetIndexStyle(0,DRAW_LINE,STYLE_DASH);

復制代碼

編譯後重新添加到圖表上,會發現現在的曲線已經是一條虛線了。

 

 

 

同理,如果用STYLE_DOT替換STYLE_DASH,就可以畫出一條由點組成的曲線了,更多的類型大家可以通過查找編程文檔獲得。

現在,假如我們覺得曲線太細了,想加粗該怎麼做呢?這時就需要給SetIndexStyle函數增加第4個參數了:

  1. SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,4);

復制代碼

SetIndexStyle的第4個參數4,意思是把曲線的寬度設置為4(從1開始,最大為5)。

最後,假如想把剛才畫的線更改一下顏色,可以用到SetIndexStyle的第5個參數,像下面這句:

  1. SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,4,Blue);

復制代碼

最後一個參數Blue的意思是把曲線的顏色改為藍色。



 

第五節  如何創建警報

 

在前面幾節,我們學習了MT4編程開發中畫圖方面的一些基礎知識,這次我們來學習一下如何在MT4編程中應用報警功能。

大家都知道,外匯市場是24小時不間斷的,而人的精力是有限的,那麼,在休息的時候如果價位到達了自己的目標價位,這時候該怎麼辦呢?答案是利用MT4的警報功能。在MT4平台上如何設置警報這裡就不詳述了,具體可參考幫助文檔,這裡說一下如何通過編程來實現。

首先,我們來實現一個最簡單的指標:當價格到達指定價位時,進行報警。

新創建一個指標文件,命名為:Lesson5_Alert_1。

在程序頭部加入如下一句:

  1. #property indicator_chart_window
  2. Extern double Price;

復制代碼

第二句為我們添加的語句。Extern的意思是Price為一個外部變量,可以在指標運行期間動態進行修改。

然後在start函數中加入如下語句:

  1. int start()
  2. {
  3. int counted_bars=IndicatorCounted();
  4. //----
  5. if(Bid==Price)
  6. Alert(“到達指定價位!”);
  7. //----
  8. return(0);
  9. }
  10.  

復制代碼

編譯後運行,然後把Lesson5_Alert_1指標添加到圖表上,並設置好Price變量,當當前的賣出價等於設定的Price價格時,則會彈出如下的報警窗口:

 

 

 

Alert函數的意思是當滿足if內設定的條件時,彈出一個警報窗口,把Alert函數內設定的內容顯示出來,同時會發出警報聲。

 

如果我把Lesson5_Alert_1指標同時添加到很多個貨幣對上,那麼當指標彈出報警窗口時,我怎麼才能知道是哪個貨幣對在報警呢?這時就必須為報警內容添上貨幣對的名稱了。現在我們把剛才的語句改寫如下:

  1. if(Bid==Price)
  2. Alert(Symbol()+“到達指定價位!”);
  3.  

復制代碼

重新編譯並添加到圖表上,當當前賣出價格等於Price指定的價格時,將會彈出如下的報警窗口:

 

 

 

可以看到報警窗口內已經顯示出是哪個貨幣對在報警了,這都是Symbol()函數的功勞,Symbol函數的作用是獲得當前指標所在圖表的貨幣對的名稱。與Alert函數類似的還有MessageBox函數,有興趣的朋友可以自己查看幫助文檔。

 

現在設想一下,假如同樣是EURUSD貨幣對,同時打開了5分鐘圖、30分鐘圖、1小時圖,並在每張圖上都添加了Lesson5_Alert_1指標,那麼,指標報警時光有名稱還不足夠了,這時可把語句改寫如下:

  1. if(Bid==Price)
  2. Alert(Symbol()+“在”+Period()+“分鐘圖上到達指定價位!”);
  3.  

復制代碼

此時,當賣出價到達指定價位後,彈出的報警窗口如下圖所示:

 

 

 

Period函數的作用是獲取指標所在圖表的時間周期。



 

附:《MT4》編程的輸出方式

 

1、畫圖:

MT4語言編程的基本輸出方式就是“畫”(動詞)。這個“畫“可以畫出最常見的線圖,也可以畫出提示用的箭頭、柱狀圖、趨勢線等。

決定“畫”的輸出樣式的函數是: SetIndexStyle

它應用在我們前面說過的系統函數init()的內容裡面,一般通過在函數init()裡面的SetIndexStyle設定,來決定哪個要畫成線圖、哪個要畫成箭頭。

舉例:

int init()

  {

IndicatorBuffers(2); //這個函數表示有兩個數組的數值用於畫圖

SetIndexBuffer(0,MAUp) ;//表示前面定義的數組MAUp的數值用於畫第一個指標的圖

SetIndexBuffer(1,MADown); //表示前面定義的數組MADown的數值用於畫第二個指標的圖

SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2); //參數裡面:0表示設定第一個數組,參數DRAW_HISTOGRAM表示畫柱狀圖,參數STYLE_SOLID表示畫圖的樣式為實心圖,參數2表示畫徒的線寬度為2。

SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,1);//參考上面

提示:凡是你不懂意思的參數或者函數,將光標移動到它上面,按F1,則MetaEditor就會給你顯示函數或者參數的意思和用法。

 

2、 標記文字:

函數為Comment(),

使用這個函數可以輸出文字到屏幕K線圖的左上角。我們一般用它顯示一些記憶性的內容。因為左上佳的字體比較小,文字內容的變化不容易被察覺到,所以一般不用她來做提示性的功能。

 

3、 彈出窗口報警:

函數為Alert(),

使用這個函數,當運他的時候,將彈出一個報警窗口,並發出一個短促的警報聲音。使用它可以在滿足條件的重要時刻,彈出報警窗口,及時察覺這種變化。
注意:這個函數一般放在條件語句滿足之後運行,不要將滿足條件設得很頻繁,否則報警窗口經常彈出來比較煩人。還有如果你是對當前K線進性判斷,要注意到一個編成問題,當前K線的價格還在不停變動中,每變動一次都將執行一次系統函數Start(),因此您的Alert()條件如果是和當前K線的Close關系密切的話,在滿足條件後,將會來一個價格就報一次窗口,也很討厭。

 

4、 文件輸出:

MT4可以讀取和寫入一般文本文件,因此你可以將一些運行中的重要動態數據通過MT4的文件函數寫入具體文件中。這些功能應用較少。有興趣的朋友可以直接查看MetaEditor右側幫助欄的File Functions函數分類。

 

5、 對象:

MT4可以使用程序來創造很種類型的“對象”放在圖表上面,這種功能主要用於將圖表打扮的更加漂亮以及標示出更多重要的程序計算出來的數據,具體用法後面再慢慢說。MT4可以創造的“對象”類型如下:

OBJ_VLINE  0  垂直線,使用第一坐標部分時間

OBJ_HLINE  1  水平線,使用第一坐標部分價格

OBJ_TREND  2  趨勢線,應用2個坐標

OBJ_TRENDBYANGLE  3  趨勢角度,應用1個坐標。應用ObjectSet()功能設置線的角度(角度的趨勢線)

OBJ_REGRESSION  4  回歸線,應用前2個坐標的時間部分

OBJ_CHANNEL  5  通道,應用3個坐標

OBJ_STDDEVCHANNEL  6  標准偏離通道,應用前2個坐標的時間部分

OBJ_GANNLINE  7  甘氏線,應用2個坐標,但第2個坐標的價格部分

OBJ_GANNFAN  8  甘氏扇形,應用2個坐標,但第二個坐標價格部分

OBJ_GANNGRID  9  甘氏網格線,應用2個坐標,但第2個坐標的價格部分

OBJ_FIBO  10  費波納切搞通撤回,應用2個坐標

OBJ_FIBOTIMES  11  費波納切周期線,應用2個坐標

OBJ_FIBOFAN  12  費波納切扇形圖,應用2個坐標

OBJ_FIBOARC  13  費波納切弧線,應用2個坐標

OBJ_EXPANSION  14  費波納切延展線,應用3個坐標

OBJ_FIBOCHANNEL  15  費波納切波通道,應用3個坐標

OBJ_RECTANGLE  16  長方形,應用2個坐標

OBJ_TRIANGLE  17  三角形,應用3個坐標

OBJ_ELLIPSE  18  橢圓形,應用2個坐標

OBJ_PITCHFORK  19   安德魯分叉線,應用3個坐標

OBJ_CYCLES  20  圓形,應用2個坐標

OBJ_TEXT  21  文本,應用1個坐標

OBJ_ARROW  22  箭頭,應用1個坐標

OBJ_LABEL  23  文字標簽,應用1個坐標



 

楊氏補:如何畫射線與線段

 

1、畫射線:

ObjectCreate("射線名",OBJ_TREND,0,X1,Y1,X2,Y2);

如下語句:

ObjectCreate("X1LINE",OBJ_TREND,0,Time[20],High[20],Time[5],Low[5]);

編譯後如下圖所示:

 

 


2、畫線段:

方法:在射線基礎上,加以限制“射線=假”加以實現。

如下語句:

ObjectCreate("X1LINE",OBJ_TREND,0,Time[20],High[20],Time[5],Low[5]);

ObjectSet("X1LINE", OBJPROP_RAY, false);//限制射線方式,即線段方式

編譯後,如下圖所示。

 

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