MT4.0和3.x相比,編程語言迥然不同,基本上是C語言的翻版,所以有一些C語言基礎是很容易學會MT編程的。www.emoneybtc.com
MT4.0可以編寫的程序有好幾類,主要是自動交易程序和指標,估計大家都是為了給自己的投資策略,由於我的精力有限,所以接下來只介紹自動交易程序。
1. MT程序的語法
MT程序既然是C語言的翻版,語法和C語言當然很接近了,用有限的篇幅來說明其語法似乎是一個不能完成的任務,我這裡只能告訴大家如何去學習。
語法說明可以在Meta Editor的幫助中找到,在工具欄上點MQL Navigator,就會彈出MT編程的導航,其中Dictionary就是語言和函數庫的幫助。
在這個樹狀幫助目錄下,語法的說明在Basic下,主要包括Syntax, Data type, Operations & Expressions, Operators, Functions, Variables, Preprocessor
如果會C的話,粗略看一下即可,如果不會,結合例程學習一遍吧。
由於幫助基本是英文的,所以剛開始學還是有難度的,不過沒有辦法,我也幫不上忙,大家有問題就提吧,我盡量回答。啥時候能出個中文版的就好了。
學習的時候,從網上搜一些現成的程序進行學習和修改是加快學習的一個辦法,上一次我貼的Grid的交易程序就是一個很好的學習的例子。
2. 函數庫
MT的函數庫幫助進行了分類,看起來還是比較方便的。這裡也沒有辦法詳細介紹,做一個扼要介紹。
還是在幫助的Dictionary下,看這些幫助要考驗一下大家的英文,特別要涉及到金融和計算機專業英語。
包括以下幾類:
(1) Stardard constants
也就是系統定義的標准常量,主要是一些枚舉類型和窗口常量等,一般先不用管它,在別的地方會鏈接過來。
(2) Predifined variables
一些系統常量,包括買入價,賣出價,最高、最低價等,還是很有用的,不過不太多,挨個兒看一下吧。
(3) Account Information
賬戶有關的函數
(4) Array functions
數組處理函數。
(5) Common functions
常用處理函數。
(6) Conversion functions
轉換函數,主要是字符串和主要類型之間的轉換函數。
(7) Custom Indicators
編寫自定義指標用到的函數,如果不編寫自定義指標的話,可以不管它。
(8) Date&Time functions
時間日期有關的函數
(9) File functions
文件處理函數
(10) Globle variables
全局變量有關的處理函數。
(11) Math & Trig
數學計算函數
(12)Object functions
對象處理函數,主要是在圖表中處理對象的函數,對象是指直線、文本等。
(13) String functions
字符串處理函數。
(14) Technical indicators
技術指標函數,相信大家一定會經常用到的。大家通過指標的英文,應該比較容易看出來誰是誰。
(15) Trading functions
交易函數。這一類對自動交易系統是很重要的。
(16) Window functions
窗口處理函數,基本不需要用到。
3. 創建程序
在MT的程序組中,有一個Meta Editor,這就是MT的編譯器,還是很容易上手的。用過Visual Studio C++的人一看,有點熟,對吧?
首先,點擊菜單File->New,彈出對話框,程序類型選擇Expert Advisor,後面按導航操作輸入名稱即可。
這樣一個簡單的MT空白交易程序就創建了,點按鈕Compile或直接按快捷鍵F5就可以編譯通過了。因為是空白的,這時候它什麼也不能干。
注意:自動交易程序一定要存放在安裝目錄下的Experts子目錄。
4. 修改
(1)全局變量
在程序的開頭,可以定義一下全局變量。前面加extern的全局變量的值,在自動交易程序啟動的時候可以直接在MT改,不需要重新編譯。
(2)入口函數
MT程序的調用入口是start()函數,和C程序的main()函數是一樣的,一般就在這裡寫處理過程即可。
(3) 子函數
比較復雜的過程,可以寫子函數,在start()函數裡調用子函數。
5. 例程:以下是在MT官方網站的論壇下hdb寫的Grid自動交易程序,供參考。
#property copyright "外匯聯盟 www.FXunion.com QQ群144033"
#property link ""
//#property version
// DISCLAIMER ***** IMPORTANT NOTE ***** READ BEFORE USING *****
// This expert advisor can open and close real positions and hence do real trades and lose real money.
// This is not a 'trading system' but a simple robot that places trades according to fixed rules.
// The author has no pretentions as to the profitability of this system and does not suggest the use
// of this EA other than for testing purposes in demo accounts.
// Use of this system is free - but u may not resell it - and is without any garantee as to its
// suitability for any purpose.
// By using this program you implicitly acknowledge that you understand what it does and agree that
// the author bears no responsibility for any losses.
// Before using, please also check with your broker that his systems are adapted for the frequest trades
// associated with this expert.
// 1.8 changes
// made wantLongs and wantShorts into localvariables. Previously, if u set UseMACD to true,
//
//
// added a loop to check if there are 'illicit' open orders above or below the EMA when the limitEMA34
//
// removed the switch instruction as they dont seem to work - replaced with if statements
// made the EMA period variable
//
//
// modified by cori. Using OrderMagicNumber to identify the trades of the grid
extern int
extern double Lots = 0.1;
extern double GridSize = 6;
extern double GridSteps = 12;
extern double TakeProfit = 12 ;
extern double StopLoss = 0;
extern double UpdateInterval = 1;
extern bool
extern bool
extern bool
extern bool
extern bool
extern int
extern double GridMaxOpen = 0;
extern bool
extern bool CloseOpenPositions = false;// if UseMACD, do we also close open positions with a loss?
extern bool doHouseKeeping = true;
// modified by cori. internal variables only
string GridName = "Grid";
double LastUpdate = 0;
#property copyright "外匯聯盟 www.FXunion.com QQ群144033"
#property link ""
int init()
//----
#property show_inputs
//----
// added my corri and removed by hdb!! lol.. just to stay compatible with open grids...
//
//+------------------------------------------------------------------------+
//| tests if there is an open position or order in the region of atRate
//|
//|
//+------------------------------------------------------------------------+
bool IsPosition(double atRate, double inRange, bool checkLongs )
// modified by cori. Using OrderMagicNumber to identify the trades of the grid // hdb added or gridname for compatibility
//+------------------------------------------------------------------------+
//| cancells all pending orders
//+------------------------------------------------------------------------+
void CloseAllPendingOrders( )
&bsp;
// modified as per cori. Using OrderMagicNumber to identify the trades of the grid // hdb added or gridname for compatibility
//+------------------------------------------------------------------------+
//| cancells all pending orders
//+------------------------------------------------------------------------+
void CloseOpenOrders()
{
{
// modified by cori. Using OrderMagicNumber to identify the trades of the grid // hdb added or gridname for compatibility
}
//+------------------------------------------------------------------------+
//| cancells all open orders which fall on the wrong side of the EMA
//+------------------------------------------------------------------------+
void CloseOrdersfromEMA( double theEMAValue )
//if (type > 1) Print(type,"
//+------------------------------------------------------------------+
//| script program start function
//+------------------------------------------------------------------+
int start()
//----
//---- setup parameters
if ( TakeProfit <= 0 )
bool myWantLongs = wantLongs;
bool myWantShorts = wantShorts;
//----
//+------------------------------------------------------------------+
自動交易系統的測試
很多人都想用歷史數據測試自己的自動交易系統結果怎麼樣。
在MT的View菜單下,有一個Strategy tester。
選定自己的交易系統,設定好幣種,歷史數據的時間周期,交易系統的屬性,勾上Recalculate,設定時間范圍,點Start按鈕即開始測試。
特別強調的是,由於歷史數據不能反映內部的波動情況,測試中可以選擇三種插值方式,但是因為要使用插值,測試結果可能是不准確的,尤其是在以下兩種情況下:
(1) 有止損的策略
(2) 使用的TimeFrame比較大
找了一個根據均線交易的例子,我自己擇主要的加了一些中文注釋,看看有沒有幫助。
//+------------------------------------------------------------------+
//|
//|
//|
//+------------------------------------------------------------------+
#define MAGICMA
// extern的全局變量,編譯後可以直接在MT中修改
extern double Lots
extern double MaximumRisk
extern double DecreaseFactor
extern double MovingPeriod
extern double MovingShift
//+------------------------------------------------------------------+
//| 入口函數,程序從這裡開始運行
//+------------------------------------------------------------------+
void start()
//----
//----
//----
}
//+------------------------------------------------------------------+
//| 檢查現有倉位|
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
//----
//---- return orders volume
//+------------------------------------------------------------------+
//| 計算最優倉位
//+http://blog.sina.com.cn/zhouxiaoyin18---------------------+
double LotsOptimized()
//---- select lot size
//---- calcuulate number of losses orders without a break
//---- return lot size
//+------------------------------------------------------------------+
//| 檢查是否建倉
//+------------------------------------------------------------------+
void CheckForOpen()
//---- go trading only for first tiks of new bar
//---- 指標調用,iMA就是均線(Moving Average)
//---- sell conditions
//---- buy conditions
//----
//+------------------------------------------------------------------+
//| 檢查是否平倉
//+------------------------------------------------------------------+
void CheckForClose()
//---- go trading only for first tiks of new bar
//---- get Moving Average
//----
//----
導言區塊鏈在證券市場的最大作用在於進一步推進金融資產的數字化。實際上,從上世紀七八十年代的紙上作業危機後,證券市場一直在進行“電子化”和“
據了解,要想成為年薪百萬的區塊鏈工程師,那你必須得有兩把刷子才行。你可能想問,我每天勤學苦練,每天不斷地寫代碼行不行。我只能說,有可能。回
據了解,俄羅斯非銀行信貸組織專家委員會提出了一項提案,允許該國的農村企業獲得加密貸款以吸引海外資金。該委員會主席要求農村信用合作社研究和教
5月17日,中國北京國際科技產業博覽會(簡稱“科博會”)順利召開,作為重要活動之一的“中國金融論壇”邀請到金融監管部委及北京市領導、和
外匯智能交易軟件怎麼玩?外匯智能交易軟件顧名思義就是在炒外匯時電腦會利用這個軟件給投資人進行智能化的自動化的交易,那麼我們就來詳細的介紹一下
外_匯_邦 WaiHuiBang.com 經常在QQ群裡看到很多小散戶哭訴,又爆倉了!這樣的場景看到太多,都已經有點麻木了。尤其是每當
說機構投資者是滬深市場的柱石一點也不過分,市場的各參與方只有認識到這點才能更好的管理好這個市場、投資好這個市場,否
最佳答案: 國內A股的交易時間是周一到周五的9點30到11點30、13點到15點,也就是交易日下午3
最佳答案: 近幾年,過久搭理發展保險行業,為了迎合市場保險產品更新迭代的速度非常快,常常是好產品還沒