MT4精講:MT4編程入門全集1-11_第1頁
MT4精講:MT4編程入門全集1-11_第2頁
MT4精講:MT4編程入門全集1-11_第3頁
MT4精講:MT4編程入門全集1-11_第4頁
MT4精講:MT4編程入門全集1-11_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、MT4編程入門1:MT4自定義指標(biāo)的基本操作MT4自定義指標(biāo)的保存目錄、指標(biāo)編緝器與指標(biāo)調(diào)用一、MT4自定義指標(biāo)保存在C:Program FilesMetaTrader 4expertsindicators這個目錄中,該目錄中主要有二種類型的文件,一種是mq4文件,這是MT4自定義指標(biāo)的源碼文件,是一種高級語言文件,可以人工編寫修改,機器不能直接執(zhí)行,但能在MT4啟動時自動編譯為ex4可執(zhí)行文件。另一種就是ex4文件,這是MT4自定義指標(biāo)的可執(zhí)行文件,由mq4文件編譯得到。mq4文件必須編譯為ex4文件才能被MT4執(zhí)行。但ex4文件是機器碼文件,人工不可修改另外還有一個文件是mqlcache.

2、dat,它用來保存目錄中的文件信息,如果MT4無法自動編譯,只要刪除此文件即可解決問題mq4文件編譯為ex4可執(zhí)行文件有兩種方法:1、MT4啟動時,會自動把此目錄中的mq4文件編譯為ex4文件。2、用MQ語言編輯器打開mq4文件,點一下“編寫”按鈕,即可生成ex4文件二、下載保存mq4文件、ex4文件在論壇上我們經(jīng)??吹接衜q4文件、ex4文件可供下載,我們只要把它們保存到C:Program FilesMetaTrader 4expertsindicators這個目錄,也就是下面這個目錄中,就可以了。如果下載的是ex4文件,那可以直接調(diào)用;如果是mq4文件,則需要重啟動MT4,讓系統(tǒng)自動編譯生

3、成ex4可執(zhí)行文件。如果下載的是rar、zip等類型的壓縮文件,還必須下載后解壓到此目錄才能使用。三、將源碼保存為源碼文件在論壇上,我們也經(jīng)常能看到指標(biāo)源碼貼在網(wǎng)頁上,但沒有mq4、ex4等文件可以下載,只能復(fù)制源碼。此時需要我們自己動手將源碼保存為源碼文件,那也沒關(guān)系,非常地簡單,多點幾下鼠標(biāo)就搞定。1、打開MQ語言編輯器2、在MQ語言編輯器中新建一個文件,文件名一定要輸,別的隨便操作都沒關(guān)系。3、刪除新文件里面的所有內(nèi)容,成為一個空文件,4、接著我們就可以將網(wǎng)頁上源碼復(fù)制粘貼進來試著點一下“編寫”,如果左下角出現(xiàn)“0錯誤,0警告”,那說明源碼沒問題,編譯通過了,成功生成了ex4可執(zhí)行文件5

4、、還有很重要的一點,就是要把源碼文件保存到正確的目錄中保存后,再點一下編寫。到此,源碼保存完成。當(dāng)然,我們也還有另的辦法:可以打開一個原已存在的mq4文件,然后另存為你需要的文件名,再刪除文件中的所有內(nèi)容成為空文件,把網(wǎng)頁上的源貼到文件中保存即可也可以在記事本中新建一個文件,把網(wǎng)頁上的源碼貼進記事本,然后取個文件名保存到上面提到的目錄,不過文件后綴必須輸入mq4,保存類型選擇“所以文件”四、mt4程序調(diào)用自定義指標(biāo)這非常簡單   MT4編程入門2:指標(biāo)源碼中的常用符號說明一、注釋符:單行注釋“/”、多行注釋“”程序不執(zhí)行注釋,注釋內(nèi)容僅供閱讀或保留不用的語句在MQ

5、語言編輯器中,注釋內(nèi)容以灰色顯示二、分號“;”表示一個語句結(jié)束三、逗號“,”表示一個語句內(nèi)部間隔,不結(jié)束語句。四、等于號“=”賦值語句,把等號后面的值賦給等號前的變量中五、加號“+”整數(shù)或小數(shù),則表示值相加;字符串,則表示前后連接。六、加加“+”表示把符號前的變量值加1,例如:“i+;”  這實際上就是:“i=i+1;”的簡寫,表示i的值加1七、加等于“+=”表示把符號后的值加到符號前的變量中。例如“i+=2;”,實際上就是“i=i+2;”的簡寫,表示i的值加2八、雙等號“=”等于號。用于邏輯判斷,雙等號前后值相等,則返回邏輯值“真true”;雙等號前后值不相等,則返回邏輯

6、值“假false”九、嘆號等號“!=”不等于號。用于邏輯判斷,不等號前后值不相等,則返回邏輯值“真true”;不等號前后值相等,則返回邏輯值“假false”十、“&&”邏輯符“并且”十一、“|”邏輯符“或者”十二、大括號“”表示函數(shù)體。內(nèi)部為函數(shù)體語句。MT4編程入門3:自定義變量 MT4編程入門3:自定義變量一、自定義變量在使用前,必須先創(chuàng)建(定義),設(shè)定變量的類型和名稱。創(chuàng)建時可同時賦值,也可以不賦值。名稱可以使用中文字符。例:int  mark;          

7、0;創(chuàng)建一個整型變量,變量名為“mark”。bool 是否報警=true;  創(chuàng)建一個邏輯型變量,變量名為“是否報警”,同時,賦初值“true”二、類型和類型定義詞自定義變量的基本類型有:1、整形(int):就是整數(shù),包括負(fù)整數(shù)2、雙精度小數(shù)(double):可以簡單地理解為帶小數(shù)位的數(shù)3、字符串型(string)。4、邏輯型(bool):其值分別為“true、false”,即“真、假”,也可以寫成“1、0”(1真,0假)。類型定義詞僅在創(chuàng)建變量時使用,后面使用變量時,就不能再加類型定義詞了三、附加變量附加變量就是在程序投入使用后,變量值允許用戶自由更改的變量,一般用作程序

8、參數(shù)。一般指標(biāo),例如MACD(12,26,9)參數(shù)輸入就是通過附加變量實現(xiàn),(12,26,9)分別為三個附加變量的默認(rèn)值。定義附加變量只需在變量定義語句前加“extern”例:extern int 周期=9;  創(chuàng)建一個整型附加變量,變量名為“周期”,默認(rèn)值為9,允許用戶在程序外部修改參數(shù)值MT4編程入門4:自定義函數(shù)自定義函數(shù)與數(shù)學(xué)函數(shù)在本質(zhì)上是一致的例如:數(shù)學(xué)函數(shù)ft(x,y)=3x+2y (x,y為正整數(shù)) 寫成程序語句就是:int ft(int x,int y)         int temp; 

9、;    temp=3*x+2*y;     return(temp);    一、和自定義變量一樣,自定義函數(shù)在使用前,也必須先設(shè)立,以定義其類型、名稱、參數(shù)和運算語句。函數(shù)類型、名稱、參數(shù)位于函數(shù)頭部(參數(shù)間以逗號分隔),大括號中的是運算語句,也就是函數(shù)體部分。return語句為函數(shù)結(jié)束語句,return后面括號中的值為函數(shù)返回值,即函數(shù)運算結(jié)果。上例中,int為函數(shù)類型,表示該函數(shù)的返回值(運算結(jié)果)是整數(shù);(x,y)為參數(shù),由于自定義變量使用之前都必須先創(chuàng)建,所以要加上類型定義詞intft為函數(shù)名

10、,有了函數(shù)名,我們就可以在別處用ft(2,1)的形式來調(diào)用此函數(shù);函數(shù)體部分有三句:第一句,定義一個整形變量temp第二句,計算temp的值第三句,函數(shù)結(jié)束,返回調(diào)用點,以temp的值作為本函數(shù)返回值。此函數(shù)也可以簡寫為:int ft(int x,int y)  return(3*x+2*y);二、函數(shù)類型與類型符函數(shù)類型就是函數(shù)返回值(運算結(jié)果)的類型,與自定義變量類型差不多有整型(int)、雙精度型(double)、字符串型(string)、邏輯型(bool)等,還有一種函數(shù)是以函數(shù)運行為目的,運行結(jié)束后不需要返回值也沒有返回值的,則函數(shù)類型可以寫成void(無值型)三

11、、函數(shù)中如果定義了自定義變量,那么此變量僅在本函數(shù)內(nèi)部存在,函數(shù)運行結(jié)束時,自定義變量也就自動注銷。上例中,有x、y、temp三個自定義變量,在函數(shù)運行時創(chuàng)建,在函數(shù)運行結(jié)束時自動消失,僅在函數(shù)內(nèi)部有效,與函數(shù)外部無關(guān)。四、函數(shù)的調(diào)用函數(shù)調(diào)用非常簡單,只要函數(shù)名正確、參數(shù)個數(shù)一致、類型相同就能正確調(diào)用如我們前面創(chuàng)建了ft(x,y)函數(shù),則別處我們可以用ft(4,5)等樣式來調(diào)用ft(x,y)函數(shù)求值。調(diào)用時,傳遞參數(shù)值給ft(x,y)函數(shù)(按順序把4傳給x,把5傳給y),返回結(jié)果23后繼續(xù)執(zhí)行主程序。  MT4編程入門5:自定義數(shù)組一、數(shù)組是一系列同類型變量的集合,可以同時

12、存儲多個數(shù)值。例:int aa4=4,3,2,1;這是一個數(shù)據(jù)名為aa、包含了4個元素的整數(shù)型數(shù)組(即數(shù)組長度為4),可以同時存儲4個數(shù)值。二、自定義數(shù)組也必須“先建立,后使用”創(chuàng)建(定義)時,必須設(shè)定類型和名稱。創(chuàng)建(定義)時,數(shù)組的元素個數(shù)也可以設(shè)定,也可以不設(shè)定數(shù)組中第一個元素的編號為0,第二個為1,以此類推。編號使用方括號括起來在這上例中aa0的值為4、aa1的值為3、aa2的值為2、aa3的值為1創(chuàng)建(定義)數(shù)組的同時,可以賦初值,也可以不賦初值。例:int bb;   創(chuàng)建數(shù)組bb,不設(shè)定數(shù)組元素個數(shù)int cc8;  創(chuàng)建數(shù)組cc,設(shè)定數(shù)組

13、元素為8個,不賦初值int dd3=9,8,7;  創(chuàng)建數(shù)組dd,設(shè)定數(shù)組元素為4個,并賦初值賦值后,dd0的值為9、dd1的值為8、dd2的值為7int ee9=0,1,2,3;   創(chuàng)建數(shù)組ee,設(shè)定數(shù)組元素為9個,但只給前4個元素賦初值三、數(shù)組使用時的賦值數(shù)組的賦值必須指定明確的賦值對象,除了新建數(shù)組時可以批量賦值外,數(shù)組元素必須一個一個賦值例如:dd2=1;這是對數(shù)組dd的第3個元素dd2(0是第1個,2表示第3個)重新賦值為1在這里,沒有整數(shù)型變量定義符int,這樣,數(shù)組dd原有三個值9,8,7就變?yōu)?,8,1四、數(shù)組的引用數(shù)組只是一系列變量的

14、集合,所以每次只能使用數(shù)組中的一個元素。數(shù)組的引用必須指定明確的引用對象,一次只能引用一個。如果需要使用整列數(shù)組,則必須逐個使用。例如:數(shù)組aa4的值為4,3,2,1我們用aa來引用數(shù)組aa中的值當(dāng)i=0時,aai的值為4當(dāng)i=1時,aai的值為3當(dāng)i=2時,aai的值為2當(dāng)i=3時,aai的值為1這樣,我們在處理數(shù)列的時候,使用數(shù)組就能帶來極大的方便 MT4編程入門6:市場數(shù)據(jù)取值一、預(yù)定義數(shù)組(MT4已經(jīng)定義好的,可以直接使用)開盤價、最高價、最低價、收盤價、成交量等歷史數(shù)據(jù),每根K線蠟燭都各有一個,所以必須用數(shù)組來解決問題,MT4有幾個預(yù)定義數(shù)組:開盤價Open、最高價High

15、、最低價Low、收盤價close、成交量Volume、所屬時間Time類型為雙精度double型(即精確小數(shù))這里有一個位置的問題,右邊第一根K線蠟燭(即最新的蠟燭)的編號為0,第二根蠟燭編號1,第三根蠟燭編號2,也就是說從右向左倒著數(shù)過去。Open0、High0、Low0、Close0,表示最新的開盤價、最高價、最低價、收盤價Open1、High1、Low1、close1,表示第2根K線蠟燭的開盤價、最高價、最低價、收盤價Open2、High2、Low2、close2,表示第3根K線蠟燭的開盤價、最高價、最低價、收盤價Open3、High3、Low3、close3,表示第4根K線蠟燭的開盤價

16、、最高價、最低價、收盤價Open、High、Low、close,表示第i+1根K線蠟燭的開盤價、最高價、最低價、收盤價以此類推。注意:這些是數(shù)組,用的是方括號。二、預(yù)定義變量買入價、賣出價是實時價格,MT4用預(yù)定義變量Ask和Bid表示,數(shù)值類型為double雙精度還有一些預(yù)定義變量,如:Bars 表示圖表中的蠟燭數(shù),類型為int整數(shù)型Digits 表示當(dāng)前貨幣對的小數(shù)位,類型為int整數(shù)型,無日元幣對為4,有日元幣對為2,黃金石油等一般也為2Point 表示當(dāng)前貨幣對的點值,類型為雙精度double型,無日元幣對為0.0001,有日元幣對為0.01。與Digits正好相反。三、指標(biāo)函數(shù)1、價

17、格、成交量、時間它們都有三個參數(shù):貨幣對名、K線周期、位置序號開盤價:iOpen(symbol,timeframe,shift)    雙精度double型收盤價:iClose(symbol,timeframe,shift)    雙精度double型最高價:iHigh(symbol,timeframe,shift)    雙精度double型最低價:iLow(symbol,timeframe,shift)    雙精度double型成交量:iVolume(symbol,timeframe,shift) 

18、 雙精度double型所屬時間:iTime(symbol,timeframe,shift)  日期時間datetime型K線周期為:1分鐘圖(PERIOD_M1)、5分鐘圖(PERIOD_M5)、15分鐘圖(PERIOD_M15)、30分鐘圖(PERIOD_M30)、1小時圖(PERIOD_H1)、4小時圖(PERIOD_H4)、日線圖(PERIOD_D1)、周線圖(PERIOD_W1)、周線圖(PERIOD_W1)、月線圖(PERIOD_W1)例:iOpen("USDJPY",PERIOD_H1,0)   表示美元兌日元1

19、小時圖最新K線蠟燭的開盤價iClose("EURUSD",PERIOD_H4,2)  表示歐元兌美元4小時圖第3根K線蠟燭的收盤價iClose("GBPUSD",PERIOD_H1,i)  表示英磅兌美元1小時圖第i+1根K線蠟燭的收盤價iHigh(NULL,0,0)               既不指定商品,也不指定K線周期,用在誰就是誰,用在哪就是哪2、移動平均值。雙精度double型iMA(symbol, ti

20、meframe, period, ma_shift, ma_method, applied_price, shift)參數(shù)共7個,分別為:商品名稱、K線周期、均線周期、均線偏移、平均模式、價格種類、位置均線周期:10天平均線的均線周期為10,20天均線的均線周期為20均線偏移:均線位置整體左右移動的位置偏移量平均模式:簡單移動平均(MODE_SMA)、指數(shù)移動平均(MODE_EMA)、平滑移動平均線(MODE_SMMA)、線性加權(quán)移動平均線(MODE_LWMA)價格種類:收盤價(PRICE_CLOSE)、開盤價(PRICE_OPEN)、最高價(PRICE_HIGH)、最低價(PRICE_LOW

21、)、中值(PRICE_MEDIAN)、5(PRICE_TYPICAL)、6(PRICE_WEIGHTED)例1:iMA("EURUSD",PERIOD_H1,20,0,MODE_SMA,PRICE_CLOSE,0)表示:歐元1小時圖上,以收盤價計算的,20小時簡單移動平均線,最新K線所對應(yīng)位置的值例2:iMA(NULL,0,20,0,MODE_EMA,PRICE_CLOSE,2)表示:在當(dāng)前商品、當(dāng)前K線周期圖表上,以收盤價計算的,20(天)指數(shù)移動平均線 第3根K線所對應(yīng)位置的值其他如MACD指標(biāo)、威廉指標(biāo)、RSI、SAR、布林線等指標(biāo)取值都與移動平均線指標(biāo)相類似3、在數(shù)

22、組中求元素的移動平均值。雙精度double型iMAOnArray(數(shù)組名, 總數(shù), 平均周期, 均線偏移, 平均模式, 位置)這也與iMA函數(shù)差不多,不過數(shù)據(jù)源變?yōu)閿?shù)組從數(shù)組中不但可以求得移動平均值,還可以求得RSI等指標(biāo)值4、求自定義指標(biāo)的值我們經(jīng)常自己編一些自定義指標(biāo),可用iCustom函數(shù)來取得自定義函數(shù)的值iCustom(商品名,K線周期,自定義指標(biāo)名稱,自定義指標(biāo)參數(shù)1,參數(shù)2,參數(shù)3,自定義指標(biāo)線編號,位置)如果自定義指標(biāo)只有一根指標(biāo)線,則自定義指標(biāo)線的編號為0。如果自定義指標(biāo)有多根指標(biāo)線,則第一條自定義指標(biāo)線的編號為0,第二條為1,第三條為2。例如:iCustom(NULL,0,

23、"mymacd",12,26,9,2,0)   (12,26,9)為自定義指標(biāo)mymacd的三個參數(shù)表示:求當(dāng)前圖表中,自定義指標(biāo)mymacd(12,26,9)的第3條指標(biāo)線在最新位置的值拋磚引玉,這里只是有代表性地列了幾個函數(shù),詳細(xì)請查閱MT4編程手冊 MT4編程入門7:判斷語句一、if語句if語句很常用,也比較簡單。規(guī)則:如果小括號中的條件成立,則執(zhí)行大括號中的語句;如果不成立,則跳過大括號。例如:if(a=1)         b=c+1;    我們在編寫報

24、警指標(biāo)的時候,就經(jīng)常用到這一語句:如果“價格向上達到指定價位”,則“報警”如果“MACD上穿”,則“報警”如果“均線金叉”,則“報警”。等等例:int mark=0;if( High1<1.0000 && High0>=1.0000 && mark!=1)         Alert(symbol(),"價格向上觸及1.0000");     mark=1;    if( Low1>1.0000 &

25、& Low0<=1.0000 && mark!=2)         Alert(symbol(),"價格向下觸及1.0000");     mark=2;    這是一個價格上、下穿1.0000時報警的判斷語句:上穿報警條件:當(dāng)?shù)诙鵎線最高價小于1.0000,并且最新K線最高價大等于1.0000下穿報警條件:當(dāng)?shù)诙鵎線最低價大于1.0000,并且最新K線最低價小等于1.0000這里,mark是用作報警標(biāo)記,mark的初值

26、是0,當(dāng)上穿報警后,mark的值就改為1;當(dāng)下穿報警后,mark的值就改為2;當(dāng)mark=0時,說明從未報過警,上、下穿都能報警;當(dāng)mark=1時,說明已經(jīng)上穿報過警了,不能再上穿報警了,但仍可下穿報警;當(dāng)mark=2時,說明已經(jīng)下穿報過警了,不能再下穿報警了,但仍可上穿報警。二、if . else語句規(guī)則:如果小括號中的條件成立,則執(zhí)行if下大括號中的語句1;如果不成立,則執(zhí)行else下大括號中的語句2。if(條件)    語句1;  else    語句2;  三、注意事

27、項1、只有語句后面才用到語句結(jié)束符“;” 條件、大、小括號后面都不用“;”2、語句用大括號括起來,但如果只有一行語句,則大括號可以省略              if(條件)    語句1; MT4編程入門8:循環(huán)一幅K線圖有幾千上萬條K線,每根K線又各有開收盤價、最高低價等數(shù)值,而且還有很多移動平均線、MACD、RSI等指標(biāo)值。面對海量數(shù)據(jù),我們必須用循環(huán)來實現(xiàn)數(shù)據(jù)的取值和賦值。一、while循環(huán)while(條件)      

28、;語句1   語句2   。   規(guī)則:當(dāng)小括號中的條件成立時,就執(zhí)行大括號中的語句,執(zhí)行完了再判斷條件是否成立,如果條件成立就繼續(xù)執(zhí)行大括號中的語句。只要條件成立,程序就不停地運行大括號中的語句(循環(huán)體),直到小括號中的條件不再成立時結(jié)束循環(huán)。它與if語句的區(qū)別是:if語句是當(dāng)條件為真時運行一次;而while語句則是只要條件為真,循環(huán)體語句就不停地運行,直到條件為假時結(jié)束循環(huán)。例:   extern int 快線=12;   extern int 慢線=26;   doub

29、le buffer;   int i=0;   while(i<1000)           buffer=  iMA(NULL,0,快線,0,MODE_EMA,PRICE_CLOSE,i)                 -iMA(NULL,0,慢線,0,MODE_EMA,PRICE_CLOSE,i);   

30、   i+;     這里,循環(huán)執(zhí)行條件是i<1000,循環(huán)體中有兩個語句,一句是把兩條均線的差值賦給數(shù)組buffer,另一句“i+;”是每運行一次,i的值在原有基礎(chǔ)上增加1。這樣,隨著循環(huán)的不斷運行,i的值逐漸增加,循環(huán)1000次后,i的值也就從0變?yōu)?000,此時“i<1000”就不再成立,循環(huán)結(jié)束。這樣,數(shù)組buffer中也就有了1000個值。二、for循環(huán)for循環(huán)與while循環(huán)在原理上是一致的,只是書寫格式上有所區(qū)別把上面的例子改成for語句:   extern int 快線=12;

31、0;  extern int 慢線=26;   double buffer;   for(int i=0; i<1000; i+)           buffer=  iMA(NULL,0,快線,0,MODE_EMA,PRICE_CLOSE,i)                 -iMA(NULL,0,慢線,0,MODE

32、_EMA,PRICE_CLOSE,i);     與前面相比,我們注意到:“int i=0;”語句從“while(i<1000)”上方移到循環(huán)條件“i<1000”的前面;“i+;”語句從循環(huán)體中移到了循環(huán)條件“i<1000”的后面;循環(huán)執(zhí)行順序與while循環(huán)一致:第一步、先執(zhí)行小括號中的第1句:int i=0;(此語句用來定義初始變量,在循環(huán)中僅執(zhí)行一次,可以為沒有任何表達式的空操作符“;”)第二步、再判斷小括號中的第2句是否成立:i<1000;如果不成立,則循環(huán)結(jié)束;如果成立,則循環(huán)繼續(xù)運行,執(zhí)行第三步第三步、按順序執(zhí)行大括號

33、中的語句第四步、執(zhí)行小括號中的第1句:i+ (此語句即:每執(zhí)行一次,i的值增加1)然后回到第二步繼續(xù)執(zhí)行循環(huán)。再補充一點:如果循環(huán)體中(大括號中)只有一行語句,大括號可以省略 MT4編程入門9:MT4自定義指標(biāo)的結(jié)構(gòu)MT4自定義指標(biāo)一般由四個部分構(gòu)成:(1)文件頭部(2)參數(shù)、變量和數(shù)組的定義(3)初始化函數(shù)init()(4)主函數(shù)start()一、文件頭部,也稱為預(yù)處理程序預(yù)處理程序以“#”開頭,行尾無語句結(jié)束符“;”常用的預(yù)處理程序有:1、#property  indicator_chart_window把指標(biāo)顯示在主圖。如:均線、SRA等類指標(biāo)用到此語句2、

34、#property indicator_separate_window把指標(biāo)顯示在副圖。如:MACD、RSI、威廉等類指標(biāo)用到此語句3、#property indicator_buffers 3顯示3根指標(biāo)線4、#property indicator_color1 Red第1根指標(biāo)線的顏色為Red5、#property  indicator_width1  1第1根指標(biāo)線的粗細(xì)分別為16、#property indicator_level1   0.00在0.00值位置橫劃1條虛線二、參數(shù)、變量和數(shù)組的定義全局性的參數(shù)、變量、數(shù)組在此

35、定義,局部變量可在start()函數(shù)中定義三、初始化函數(shù)init()init()在自定義指標(biāo)加載時運行一次。初始化函數(shù)的功能是“設(shè)置”。如果自定義指標(biāo)需要劃線,則必然用到此函數(shù)四、主函數(shù)start()當(dāng)數(shù)據(jù)有變動時,start()就被觸發(fā)。數(shù)據(jù)變動一次,start()就運行一次。自定義指標(biāo)的編程主要依靠此函數(shù)進行。start()函數(shù)的作用主要是取值和給指標(biāo)線賦值,報警也在此函數(shù)內(nèi)發(fā)起。另外,還有一個反初始化函數(shù)deinit()deinit()在自定義卸載時運行一次,可用以去除指標(biāo)加載時init()所做的初始化操作。 MT4編程入門10:畫一條指標(biāo)線要畫指標(biāo)線,只要在程序中寫明以下幾點

36、就可以了:第一、明確指標(biāo)線所在窗口,是主圖還是副圖第二、要建立數(shù)組,用以保存指標(biāo)線在各個位置的值。第三、要建立指標(biāo)線與數(shù)組的對應(yīng)關(guān)系,哪個數(shù)組對應(yīng)哪條指標(biāo)線第四、要明確指標(biāo)線的線型,是曲線還是柱線或者是箭頭第五、如果指標(biāo)線是箭頭,還要說明是哪種箭頭第六、給數(shù)組賦值其中:第一、二條寫在文件頭部中,第三、四、五條寫在init()函數(shù)中(init函數(shù)僅在指標(biāo)加載時運行一次)第六條寫在start()函數(shù)中(start函數(shù)在數(shù)據(jù)發(fā)動變動時運行,變動一次運行一次)下面以MACD為例說明我們知道,MACD指標(biāo)由二條曲線和一組紅綠柱線組成。(下圖一)其中:白線是二根均線的差;紫線是白線的移動平均線;紅綠柱線則

37、是白線和紫線的差,白線上穿紫線,出現(xiàn)紅柱,下穿則出現(xiàn)綠柱。我們從簡單入手,先去除紫線和紅綠柱線,僅保留其中的那根白線,來看白線是怎樣畫出來的。下面是全部語句:#property indicator_separate_window#property indicator_color1  White#property indicator_level1  0extern int FMA=12;extern int SMA=26;double     buf;int init()    

38、0;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

39、,i)       -iMA(NULL,0,SMA,0,1,0,i);       return(0);  說明如下:=以下為上述語句的簡要說明#property indicator_separate_window指標(biāo)放在副圖#property indicator_color1  White第一條指標(biāo)線為白色#property indicator_level1  0在副圖中零值位置上畫一條水平橫線,extern int FMA=12;extern int

40、SMA=26;設(shè)立二個整數(shù)型變量,默認(rèn)值為12和26,允許外部修改值double     buf;設(shè)立一個數(shù)組int init()初始化函數(shù)。該函數(shù)在指標(biāo)加載時只運行一次。init是系統(tǒng)默認(rèn)的函數(shù)名,但使用時仍需要進行創(chuàng)設(shè),所以要加定義符int     SetIndexBuffer(0,buf);   設(shè)置數(shù)組buf為第一條指標(biāo)線   SetIndexStyle(0,DRAW_LINE);   設(shè)置第一條指標(biāo)線線型為連續(xù)曲線   ret

41、urn(0);   函數(shù)結(jié)束語句  int start()指標(biāo)觸發(fā)函數(shù)。與init函數(shù)不同,該函數(shù)在有數(shù)據(jù)變化時被觸發(fā),如果數(shù)據(jù)被不斷更新,則該函數(shù)將不斷執(zhí)行。start也是系統(tǒng)默認(rèn)的函數(shù)名,但使用時也仍然需要進行創(chuàng)設(shè),所以也要加定義符int     int limit=Bars-IndicatorCounted();   自定義一個變量limit,并賦值   Bars是圖表中的柱數(shù)   IndicatorCounted()緩存中的柱數(shù),就是已經(jīng)計算過的有

42、值的柱數(shù)   這樣limit的值就是未經(jīng)計算的柱數(shù),這樣就可以起到優(yōu)化程序的作用。   for(int i=0; i<limit; i+)   循環(huán)語句。   循環(huán)從i=0開始,每循環(huán)一次i值增加1,一直循環(huán)到i<limit不滿足時結(jié)束循環(huán)   由于循環(huán)變量i為一個新變量,所以要先定義,加上整型變量定義符int   下面大括中為循環(huán)體,此例中只一條語句        buf=      

43、;  iMA(NULL,0,FMA,0,1,0,i)       -iMA(NULL,0,SMA,0,1,0,i);       給數(shù)組buf賦值,其值分別為相應(yīng)位置上兩條均線的差   i是水平位置序號值,即燭柱從右到左的序號,右邊第一個燭柱序號為0   return(0);   start函數(shù)結(jié)束  MT4編程入門11:MT4的報警報警功能是MT4的一大特色。它可以在預(yù)定的條件達到時,發(fā)出警報。與指標(biāo)畫線相比,報警

44、語句顯得非常簡單,只要在判斷語句中加一個報警語句即可報警方式有:彈出窗口報警、音樂報警、郵件報警等。如果郵箱開通了手機短信通知,則郵件報警的內(nèi)容會即時轉(zhuǎn)發(fā)到手機上。1、彈出窗口報警:當(dāng)(條件達到)執(zhí)行此語句時,以彈出窗口警告。格式:Alert(內(nèi)容1,內(nèi)容2,內(nèi)容3,內(nèi)容4);報警內(nèi)容為字符串型,內(nèi)容之間加逗號例如:Alert( Symbol(),"4小時圖MACD上穿零軸");2、音樂報警:當(dāng)(條件達到)執(zhí)行此語句時,播放一段音樂。格式:PlaySound("音樂文件名.wav");文件類型為wav格式,并且保存在C:Program FilesMeta

45、Trader4sounds目錄中文件名加引號3、郵件報警:當(dāng)(條件達到)執(zhí)行此語句時,發(fā)送一個郵件。(收發(fā)件人地址在MT4系統(tǒng)中設(shè)置詳見MT4編程實例1:一個簡單的小程序,讓你的手機搖身變成外匯行情接收機)格式:SendMail(標(biāo)題1+標(biāo)題2, 內(nèi)容1+內(nèi)容2);標(biāo)題之間以加號連接,內(nèi)容之間也以加號連接郵件標(biāo)題和郵件內(nèi)容以逗號間隔下面是價格穿越某均線報警舉例+-#property indicator_chart_windowextern int 警戒均線=20;int mark=0;int start()    if(   iHigh(0,0,0) &

46、gt;= iMA(0,0,警戒均線,0,MODE_SMA,PRICE_CLOSE,0)       && iHigh(0,0,1) <  iMA(0,0,警戒均線,0,MODE_SMA,PRICE_CLOSE,1)       && mark != 1   )                      Alert(Symbol(),"向上觸及30均線");&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論