1. 前言
MQL 程式設計是什麼?
MQL(MetaQuotes Language)是一種專門用於 MetaTrader 交易平台的程式語言。MetaTrader 可自動化金融市場交易,並廣泛用於執行分析工具和交易策略。學習 MQL 程式設計,交易者可以自動化自己的交易策略,實現更高效的運營。
自動交易與交易策略的重要性
在金融市場中,迅速的決策至關重要。然而,人工手動交易可能因情緒或缺乏一致性而受到影響。此時,自動交易就顯得非常有用。自動交易能根據預先編寫的策略執行交易,並持續24小時監控市場。
2. MQL 程式設計概述
MQL 的歷史與 MetaTrader 的關係
MQL 是 MetaQuotes 公司開發的 MetaTrader 專用腳本語言。MetaTrader 4(MT4)和 MetaTrader 5(MT5)兩個主要版本存在,分別擁有 MQL4 和 MQL5 兩種不同的語言規範。
MQL4 與 MQL5 的差異與選擇
- MQL4 :
- 用於 MetaTrader 4。
- 結構簡單,適合初學者。
- 專注於交易策略自動化。
- MQL5 :
- 用於 MetaTrader 5。
- 可開發更高階程式(支援多執行緒等)。
- 能利用市場深度(DOM:Depth of Market)。
根據交易目的和使用的平台,請選擇學習哪一種語言。
3. 開始 MQL 程式設計的準備
必要工具與安裝步驟
- 下載 MetaTrader : 從 MetaTrader 官方網站下載 MT4 或 MT5。
- 使用 MetaEditor : MetaEditor 是官方提供的 MQL 程式開發環境。安裝 MetaTrader 時會同時安裝。
- 建立帳戶 : 註冊模擬帳戶或實盤帳戶,以模擬真實交易環境。
初學者應了解的 MQL 程式設計前置知識
- 基本的程式設計概念(例如:變數、條件分支、迴圈)。
- 理解類似 C 語言的語法非常重要。
首先要學會的基本語法
int start() {
// 程式的起始點
Print("讓我們開始 MQL 程式設計吧!");
return 0;
}
上述為簡單程式範例。start() 函式作為 MQL 程式的主進入點。
4. 實務程式開發
初學者簡易 EA 創建範例
專家顧問(EA)是用於自動化交易策略的程式。以下為簡易 EA 的程式碼範例。
//+------------------------------------------------------------------+
//| 專家顧問的基本結構 |
//+------------------------------------------------------------------+
int start() {
// 取得貨幣對的即時價格
double price = Bid;
// 簡單條件:若即時價格低於特定值則進行買賣
if(price < 1.1000) {
OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, 0, 0, "買入訂單", 0, 0, Green);
}
return 0;
}
此程式在價格低於特定值(例如 1.1000)時發出買入訂單。可於 MetaEditor 編寫程式碼,編譯後於 MetaTrader 執行。
自訂指標的創建與使用方法
自訂指標是協助交易決策的工具。以下為繪製移動平均線的簡易範例。
//+------------------------------------------------------------------+
//| 自訂指標 |
//+------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Blue
double Buffer[];
int init() {
SetIndexBuffer(0, Buffer);
return 0;
}
int start() {
for(int i = 0; i < Bars; i++) {
Buffer[i] = iMA(NULL, 0, 14, 0, MODE_SMA, PRICE_CLOSE, i);
}
return 0;
}
此程式繪製 14 期間簡單移動平均線(SMA)。使用指標可提升交易判斷的精準度。
實際交易策略自動化腳本的具體範例
腳本是一次性執行特定任務的程式。以下為一次性關閉所有持倉的腳本範例。
//+------------------------------------------------------------------+
//| 全部持倉關閉腳本 |
//+------------------------------------------------------------------+
int start() {
for(int i = OrdersTotal() - 1; i >= 0; i--) {
if(OrderSelect(i, SELECT_BY_POS) && OrderType() <= OP_SELL) {
OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 3, Red);
}
}
return 0;
}
此腳本可即時關閉所有開倉。適用於緊急情況或交易策略調整時。
以程式碼範例說明的具體說明
- 簡單結構 : 對於初學者,理想的起點是從一個條件和一個動作開始。
- 即時資料使用 : 利用 MetaTrader 的即時資料,即可立即確認結果。
- 進階參考 : 以這些範例為基礎,根據自己的交易風格進行自訂。
5. 調試與優化方法
調試:常見錯誤與解決方法
在 MQL 程式設計中,程式碼可能會發生錯誤。以下介紹常見錯誤及其處理方法。
1. 編譯錯誤
錯誤訊息:『unexpected token』或『semicolon expected』等。
解決方法:
- 檢查程式碼是否遺漏分號(
;)。 - 檢查函式括號(
{})或條件分支是否忘記關閉。
2. 執行時錯誤
錯誤訊息:程式執行時發生意外行為。
解決方法:
- 使用
Print()函式輸出各步驟的值。 - 檢查條件分支或迴圈是否產生無限迴圈。
3. 函式誤用
錯誤內容:『invalid function parameters』或『wrong arguments count』。
解決方法:
- 檢查 MQL 官方文件,重新確認函式的參數是否正確。
- 確認函式名稱是否有拼寫錯誤。
MetaEditor 內的除錯功能使用方法
MetaEditor 內已內建工具以提升除錯效率。
1. 設定斷點
設定斷點後,程式會在指定位置暫停執行。
方法:
- 右鍵點擊想要除錯的程式碼行。
- 選擇「設定斷點」。
2. 步進執行
逐行執行程式,確認每行的執行結果,從而定位錯誤發生位置。
3. 變數監控
此功能可即時查看執行中變數的值。將所需變數加入除錯視窗即可。
優化:提升效能的方法
1. 使用策略測試器進行回測
策略測試器是用於以歷史資料驗證 EA(專家顧問)效能的工具。
步驟:
- 在 MetaTrader 中選擇「工具」→「策略測試器」。
- 選擇 EA,並設定測試的貨幣對與時間範圍。
- 檢視結果,分析策略有效性。
2. 參數優化
調整 EA 設定的變數,以取得最佳結果。
例:移動平均線期間或停損幅度。
3. 減少不必要的計算
由於 MQL 程式即時執行,減少不必要的計算尤為重要。
- 避免不必要的迴圈。
- 明確必要的條件分支。
除錯時有用的工具
- Print() 函式:確認程式執行的最基本方法。
- Alert() 函式:當特定事件發生時顯示警示。
- ErrorDescription() 函式:取得錯誤訊息詳細資訊的工具。
6. 更進階技術的學習
利用外部函式庫(DLL)擴充功能
在 MQL 程式中,透過使用外部 DLL(動態連結庫)可實現超越標準 MQL 功能的高階處理,例如自訂計算演算法或與外部資料庫連結。
DLL 使用範例
- 高階統計分析:透過 Python 或 R 腳本計算 MQL 無法處理的複雜統計。
- 資料庫連結:連接外部 SQL 資料庫以儲存交易紀錄。
使用 DLL 時的注意事項
- 安全風險:執行外部 DLL 必須謹慎。請使用可信來源取得的 DLL。
- 平台相容性:DLL 只能在 Windows 上執行,其他作業系統無法使用。
- 使用
#import指令:以下為將外部 DLL 匯入程式的範例。
#import "myLibrary.dll"
double CalculateSomething(double input);
#import
與其他工具的資料連結
1. 與 Python 的連結
Python 是資料分析與機器學習中極為強大的工具。透過 MQL 程式呼叫 Python 腳本,可實現以下連結。
- 即時資料分析:使用 Python 分析 MQL 傳送的資料,並將結果反映於交易。
- 視覺化:利用 Python 函式庫(如 Matplotlib)將交易紀錄或市場資料視覺化。
2. 與 Excel 的連結
在 MetaTrader 中,通常會將資料以 CSV 格式匯出,再用 Excel 進行分析。若使用 Excel 巨集,可實現以下連結。
- 交易紀錄自動彙總:將 MQL 匯出的交易紀錄在 Excel 中分析。
- 策略模擬:在 Excel 輸入條件,並將結果反映至 MQL 程式。
3. 使用 API 與外部服務整合
可利用外部交易平台或資料服務(如 Alpha Vantage、Yahoo Finance)的 API 取得即時資料。
高階 EA 的開發
多時間框架分析
開發同時考慮多個時間框架(如 1 分鐘、1 小時)的 EA,可實現更可靠的交易策略。
double M15_MA = iMA(NULL, PERIOD_M15, 14, 0, MODE_SMA, PRICE_CLOSE, 0);
double H1_MA = iMA(NULL, PERIOD_H1, 14, 0, MODE_SMA, PRICE_CLOSE, 0);
if(M15_MA > H1_MA) {
// 買入訊號的處理
}
自動手數計算
作為資金管理的一環,開發根據帳戶餘額動態計算手數大小的 EA。
double CalculateLot(double riskPercent) {
double freeMargin = AccountFreeMargin();
return (freeMargin * riskPercent) / 100000;
}
7. 常見問題區
如何有效學習 MQL 程式設計?
為了有效學習 MQL 程式設計,建議採取以下步驟:
- 詳細閱讀官方文件:MetaQuotes 提供的 官方文件 是了解 MQL 基本語法與函式細節的最佳資源。
- 分析範例程式碼:研究 MetaTrader 預設提供的 EA 或指標,了解其結構。
- 利用線上教學:透過影片或部落格教學進行實務學習。
MetaEditor 的便利快捷鍵有哪些?
以下列出幾個可提升 MetaEditor 使用效率的快捷鍵:
- F7 鍵:編譯程式碼。
- F5 鍵:啟動程式除錯。
- Ctrl + Space:啟用程式碼補全。
- Ctrl + H:使用搜尋與取代功能。
利用這些快捷鍵可大幅提升工作效率。
EA 開發時應避免的陷阱?
在開發 EA(專家顧問)時,請注意以下幾點:
- 避免過度優化:過度依賴歷史資料的策略,可能在未來市場環境中失效。
- 資金管理不足:若未適當設定手數或停損,可能承受重大損失。
- 測試不足:除了歷史資料,亦需在模擬帳戶進行足夠期間的實務測試。
可免費學習 MQL 的資源在哪裡?
以下免費資源可協助學習 MQL:
- MetaQuotes 官方文件:涵蓋基礎至進階。
- 線上論壇: MQL5 社群論壇 是提問與分享程式碼的便利場所。
- YouTube 教學:有大量針對 MQL 程式設計的免費影片。
除錯時有用的工具是什麼?
以下介紹可協助順利除錯的工具:
MetaEditor 的除錯功能:
* 透過斷點與步進執行確認程式行為。Print() 函式:
* 透過日誌輸出檢驗變數值與條件執行。策略測試器:
* 模擬 EA 效能並定位錯誤。
從 MQL4 轉移至 MQL5 時的注意事項是什麼?
MQL4 與 MQL5 之間並非完全相容,轉移時請確認以下事項:
- 語法差異 :
- 在 MQL5 中採用了
OnStart()、OnTick()等事件驅動型結構。
- 函式變更 :
- 部分 MQL4 函式在 MQL5 中已被棄用。
- 多執行緒支援 :
- 在 MQL5 中可進行多執行緒處理,提升 EA 效率,但程式碼結構可能變得更複雜。

8. 總結
MQL 程式設計開啟的交易策略可能性
透過掌握 MQL 程式設計,可自動化獨特交易策略,突破手動交易的限制。
- 利用自動交易系統(EA)可實現不受情緒影響的交易。
- 透過自訂指標,可獲得傳統工具無法提供的獨特市場洞察。
MQL 是 MetaTrader 專用程式語言,但其通用性與強大功能,能大幅擴展交易者的技能組合。
從初學者到進階的學習資源
透過以下資源,進一步提升 MQL 程式設計技能:
- 在 MQL5 論壇可從其他開發者處獲得建議,或分享程式碼範例。
影片教學 : 在 YouTube 等搜尋「MQL 程式設計 初學者」即可找到日語免費課程。
專業書籍 : 日語 MQL 相關書籍與 MetaTrader 解說書,對於系統性學習很有幫助。
參考書籍
Amazon.co.jp: FXで勝ち組を目指す!メタトレーダーを使ったEA開発マスターガイド (現代の錬金術師シリーズ…
持續學習的動機維持方法
MQL 程式設計學習可能耗時,但透過以下重點可維持動機:
- 設定小目標 : 先從簡單腳本或指標開始,獲得成就感。
- 實際交易測試 : 利用模擬帳戶體驗程式運作。
- 累積成功經驗 : 先製作簡單 EA 或指標,並逐步改良,累積成果。
最後
透過本文,已示出從 MQL 程式設計基礎到進階的學習路徑。無論是即將開始學習 MQL 程式設計,或已經開始學習的朋友,請運用此知識構建獨特交易策略。程式設計與交易技巧的結合雖需時間,但其潛力無限。
相關網站
Keyword MQL(MetaQuotes Language) MQL言語とは MQL(MetaQuotes Lang…



