MT5 / MQL5新功能新函數(shù)首次大曝光 [MT4]
作者:
MT4 來源:
cxh99.com 發(fā)布時(shí)間:2012年05月08日 點(diǎn)擊數(shù):
【
收藏到本網(wǎng)的會(huì)員中心】
- 我只能進(jìn)行一下簡短的描述。
MetaTrader 5 和 MQL5的高水準(zhǔn)讓大多數(shù)人感興趣。
MQL5中根本的改變是面向?qū)ο缶幊痰某霈F(xiàn)。我不會(huì)在面向?qū)ο缶幊谭矫孀叩酶睿侵皇墙o資深程序員提供了更多的可能性。對(duì)于那些喜歡MQL4并且不懂得面向?qū)ο缶幊谭椒ǖ娜藖碚f,在MQL5里仍然可以用MQL4的方式編程,而不使用面向?qū)ο蠊δ堋^(qū)別只是如果你要使用這個(gè)功能,就必須重新學(xué)習(xí)。
讓我們看一個(gè)簡單的例子:Ask和Bid變量沒有了。為了取得賣出價(jià),需要調(diào)用以下函數(shù):
復(fù)制代碼- SymbolInfoDouble(Symbol(),SYMBOL_BID);
不需要頻繁使用Low[0] 或 iLow ( Symbol(), PERIOD_D1, 0 ),但你可以很容易重建他們,新函數(shù)把歷史數(shù)據(jù)逐個(gè)讀入內(nèi)存,從某一K線到另一K線,或從一個(gè)選定的時(shí)間到另一個(gè)選定的時(shí)間。通過預(yù)讀數(shù)據(jù),整個(gè)可見的變化范圍都被讀入內(nèi)存。不管你是否需要,它已經(jīng)被讀入內(nèi)存了;比如你需要讀入一分鐘的數(shù)據(jù),那么從1999年(如果存在有效歷史數(shù)據(jù)的話)到此時(shí)此刻的一分鐘數(shù)據(jù)都會(huì)被讀入內(nèi)存。
下面的例子只讀入必要范圍的數(shù)據(jù)。極大的節(jié)省了時(shí)間和內(nèi)存。
復(fù)制代碼-
- MqlRates rates_arrayG[];
- Int Bar=30; // 從當(dāng)前K線開始只讀入30個(gè)K線的數(shù)據(jù)
- iCopBar=CopyRates(Symbol(),PERIOD_M1,0,Bar,rates_arrayG);
這個(gè)功能既節(jié)省時(shí)間又節(jié)省內(nèi)存。
這樣的功能性變化并不嚇人,我們只需要花點(diǎn)時(shí)間學(xué)習(xí)一下函數(shù)指針。
我等待已久MQL的一些有用的創(chuàng)新:
OnTimer() – 處理時(shí)間事件的函數(shù)(可以使EA的工作不再單純依賴tick數(shù)據(jù)的觸發(fā));
OnTrade()-處理交易事件函數(shù)-交易倉位的開立、關(guān)閉或數(shù)量的變化。
OnChartEvent() – 處理來自鼠標(biāo)和鍵盤的消息。
讓我們仔細(xì)研究一下這些功能:
要調(diào)用OnTimer()函數(shù),需在OnInit()函數(shù)(EA初始化事件處理器)里初始化計(jì)時(shí)器。
例如:
復(fù)制代碼-
- //+------------------------------------------------------------------+
- //| |
- //+------------------------------------------------------------------+
- int OnInit()
- {
- EventSetTimer(1); //每一鈔鐘將會(huì)提交給 OnTimer()函數(shù)
- }
- //+------------------------------------------------------------------+
- //| |
- //+------------------------------------------------------------------+
- void OnDeinit()
- {
- EventKillTimer(); // 退出時(shí)必須調(diào)用取消時(shí)間基準(zhǔn)
- }
- //+------------------------------------------------------------------+
- //| |
- //+------------------------------------------------------------------+
- void OnTimer()
- {
- MqlDateTime str1;
- TimeGMT(str1); // 新函數(shù)取得 GMT 時(shí)間
- Comment(str1.hour
- ,str1.min
- ,str1.sec
- ,str1.day
- ,str1.mon
- ,str1.year
- ,str1.day_of_year
- ,OrdersTotal()
- ,PositionsTotal()
- );
- }
因此,控制不只象早先那樣能夠在收到tick數(shù)據(jù)時(shí)得到,還可以從時(shí)鐘控制器上得到,這樣可以編寫實(shí)時(shí)的易處理程序,有了這個(gè)功能,更復(fù)雜的系統(tǒng)可以創(chuàng)建。
我喜歡OnTrade()函數(shù),這個(gè)函數(shù)在下列交易事件被觸發(fā)時(shí)調(diào)用:訂單放置、止損或止盈被激活、改變止損或止盈數(shù)值、放置/刪除一個(gè)待辦定單。
現(xiàn)在監(jiān)視事件與交易操作之間的關(guān)系更容易了。現(xiàn)在不用在每個(gè)tick發(fā)生或K線產(chǎn)生時(shí)循環(huán)檢查定單狀態(tài)了。這樣的循環(huán)檢查在MQL4中被使用,這極大地削弱了程序的性能。因此,在優(yōu)化過程中特別重要。
讓我們仔細(xì)研究一下OnChartEvent()函數(shù)。這個(gè)函數(shù)在以下幾個(gè)事件發(fā)生時(shí)調(diào)用。我沒有逐個(gè)測試,但這個(gè)目錄給人印象深刻:
CHARTEVENT_KEYDOWN — 鍵盤按下事件;
CHARTEVENT_OBJECT_CLICK —在一個(gè)圖表上繪制的物件被鼠標(biāo)點(diǎn)擊事件;
CHARTEVENT_OBJECT_DRAG —在一個(gè)圖表上繪制的物件被鼠標(biāo)移動(dòng)事件;;
CHARTEVENT_OBJECT_ENDEDIT — 文本編輯結(jié)束事件;
CHARTEVENT_CUSTOM+n — 定制事件的識(shí)別;
CHARTEVENT_CUSTOM_LAST —定制的最后一個(gè)事件的識(shí)別.
高水平管理交易和圖表的能力-這是開發(fā)者事先承諾過的
新的圖表物件、按鈕、進(jìn)入域出現(xiàn)了。圖表管理變得非同尋常,甚至可以插入來自于文件的圖片-這個(gè)選項(xiàng)給那些喜歡特別設(shè)計(jì)的人提供了很多可能性。這不是Photoshop,這是MQL5 和 MetaTrader 5的結(jié)果。通過這些功能,你可以創(chuàng)建自己的按鈕或添加進(jìn)入域,例如,一個(gè)關(guān)閉所有打開訂單的按鈕或預(yù)先設(shè)定好止損止盈的快速買入和賣出按鈕。
有一個(gè)另人不愉快的事實(shí):那就是指標(biāo)里不能創(chuàng)建物件,這是為了使指標(biāo)執(zhí)行得更快。好消息是他們知道了這一點(diǎn),可能會(huì)讓一個(gè)圖表上可以執(zhí)行多個(gè)EA。這樣我們可以創(chuàng)建一個(gè)帶有物件的“EA指標(biāo)”,這個(gè)EA不交易,象指標(biāo)一樣操作。現(xiàn)在,問題是這樣解決的:在一個(gè)圖表上運(yùn)行一個(gè)交易EA,這個(gè)EA在可以在第二個(gè)圖表上創(chuàng)建物件,二者可以互換。
我試著把我的一個(gè)MQL4突破指標(biāo)轉(zhuǎn)換成MQL5的,用了好幾個(gè)小時(shí),大部份時(shí)間用在學(xué)習(xí)函數(shù)和調(diào)試上了。不過MQL5的程序代碼已經(jīng)變得很短了。
至于終端方面,讓我印象最深的是數(shù)據(jù)周期的數(shù)目。在我看來,已經(jīng)過多了。但是,大量的時(shí)間周期對(duì)一些交易者可能有用。現(xiàn)在創(chuàng)建任意時(shí)間周期只需要一步。所有的數(shù)據(jù)都是以一分鐘周期存儲(chǔ)的,因此轉(zhuǎn)換成任何不同的周期都沒有問題-這是一個(gè)重要的技術(shù)解決方案。
在歷史數(shù)據(jù)目錄里,現(xiàn)在沒有不同時(shí)間周期的文件了。
另一個(gè)另人愉快的新功能是現(xiàn)在我們可以清除日志文件了。
這只是MetaTrader 5簡短的評(píng)價(jià)。在這么短的時(shí)間內(nèi)我無法描述系統(tǒng)全部的新功能。2009年9月9日開始測試,這是一個(gè)象征性的日子,我確信它將是一個(gè)幸運(yùn)數(shù)字。自從我得到MetaTrader 5 終端 和 MQL5的測試版,幾天過去了,還沒能試遍它的所有功能,但我已經(jīng)印象非常深刻了。
來自METAQUOTES的魔術(shù)師們創(chuàng)造了一個(gè)不可思議的產(chǎn)品。我是一個(gè)有25年經(jīng)驗(yàn)的開發(fā)者,我看到了很多項(xiàng)目的開始并一定能夠完成。
獻(xiàn)上最好的祝福
Yuriy Zaytsev
Skype: yurazyuraz
翻譯者:bcsunwww
MetaQuotes 官方網(wǎng)站英文原文地址:http://articles.mql4.com/854