從初學者開始的 MQL 程式設計|EA 製作・自訂指標開發完整指南

目次

1. 前言

MQL 程式設計是什麼?

MQL(MetaQuotes Language)是一種專門用於 MetaTrader 交易平台的程式語言。MetaTrader 可自動化金融市場交易,並廣泛用於執行分析工具和交易策略。學習 MQL 程式設計,交易者可以自動化自己的交易策略,實現更高效的運營。

自動交易與交易策略的重要性

在金融市場中,迅速的決策至關重要。然而,人工手動交易可能因情緒或缺乏一致性而受到影響。此時,自動交易就顯得非常有用。自動交易能根據預先編寫的策略執行交易,並持續24小時監控市場。

LIGHT FX

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 程式設計的準備

必要工具與安裝步驟

  1. 下載 MetaTrader : 從 MetaTrader 官方網站下載 MT4 或 MT5。
  2. 使用 MetaEditor : MetaEditor 是官方提供的 MQL 程式開發環境。安裝 MetaTrader 時會同時安裝。
  3. 建立帳戶 : 註冊模擬帳戶或實盤帳戶,以模擬真實交易環境。

初學者應了解的 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. 設定斷點

設定斷點後,程式會在指定位置暫停執行。
方法:

  1. 右鍵點擊想要除錯的程式碼行。
  2. 選擇「設定斷點」。

2. 步進執行

逐行執行程式,確認每行的執行結果,從而定位錯誤發生位置。

3. 變數監控

此功能可即時查看執行中變數的值。將所需變數加入除錯視窗即可。

優化:提升效能的方法

1. 使用策略測試器進行回測

策略測試器是用於以歷史資料驗證 EA(專家顧問)效能的工具。

步驟:

  1. 在 MetaTrader 中選擇「工具」→「策略測試器」。
  2. 選擇 EA,並設定測試的貨幣對與時間範圍。
  3. 檢視結果,分析策略有效性。

2. 參數優化

調整 EA 設定的變數,以取得最佳結果。

例:移動平均線期間或停損幅度。

3. 減少不必要的計算

由於 MQL 程式即時執行,減少不必要的計算尤為重要。

  • 避免不必要的迴圈。
  • 明確必要的條件分支。

除錯時有用的工具

  • Print() 函式:確認程式執行的最基本方法。
  • Alert() 函式:當特定事件發生時顯示警示。
  • ErrorDescription() 函式:取得錯誤訊息詳細資訊的工具。

6. 更進階技術的學習

利用外部函式庫(DLL)擴充功能

在 MQL 程式中,透過使用外部 DLL(動態連結庫)可實現超越標準 MQL 功能的高階處理,例如自訂計算演算法或與外部資料庫連結。

DLL 使用範例

  • 高階統計分析:透過 Python 或 R 腳本計算 MQL 無法處理的複雜統計。
  • 資料庫連結:連接外部 SQL 資料庫以儲存交易紀錄。

使用 DLL 時的注意事項

  1. 安全風險:執行外部 DLL 必須謹慎。請使用可信來源取得的 DLL。
  2. 平台相容性:DLL 只能在 Windows 上執行,其他作業系統無法使用。
  3. 使用 #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 程式設計,建議採取以下步驟:

  1. 詳細閱讀官方文件:MetaQuotes 提供的 官方文件 是了解 MQL 基本語法與函式細節的最佳資源。
  2. 分析範例程式碼:研究 MetaTrader 預設提供的 EA 或指標,了解其結構。
  3. 利用線上教學:透過影片或部落格教學進行實務學習。

MetaEditor 的便利快捷鍵有哪些?

以下列出幾個可提升 MetaEditor 使用效率的快捷鍵:

  • F7 鍵:編譯程式碼。
  • F5 鍵:啟動程式除錯。
  • Ctrl + Space:啟用程式碼補全。
  • Ctrl + H:使用搜尋與取代功能。

利用這些快捷鍵可大幅提升工作效率。

EA 開發時應避免的陷阱?

在開發 EA(專家顧問)時,請注意以下幾點:

  1. 避免過度優化:過度依賴歷史資料的策略,可能在未來市場環境中失效。
  2. 資金管理不足:若未適當設定手數或停損,可能承受重大損失。
  3. 測試不足:除了歷史資料,亦需在模擬帳戶進行足夠期間的實務測試。

可免費學習 MQL 的資源在哪裡?

以下免費資源可協助學習 MQL:

  • MetaQuotes 官方文件:涵蓋基礎至進階。
  • 線上論壇MQL5 社群論壇 是提問與分享程式碼的便利場所。
  • YouTube 教學:有大量針對 MQL 程式設計的免費影片。

除錯時有用的工具是什麼?

以下介紹可協助順利除錯的工具:

  1. MetaEditor 的除錯功能
    * 透過斷點與步進執行確認程式行為。

  2. Print() 函式
    * 透過日誌輸出檢驗變數值與條件執行。

  3. 策略測試器
    * 模擬 EA 效能並定位錯誤。

從 MQL4 轉移至 MQL5 時的注意事項是什麼?

MQL4 與 MQL5 之間並非完全相容,轉移時請確認以下事項:


  1. 語法差異 :
  • 在 MQL5 中採用了 OnStart()OnTick() 等事件驅動型結構。
  1. 函式變更 :
  • 部分 MQL4 函式在 MQL5 中已被棄用。
  1. 多執行緒支援 :
  • 在 MQL5 中可進行多執行緒處理,提升 EA 效率,但程式碼結構可能變得更複雜。

8. 總結

MQL 程式設計開啟的交易策略可能性

透過掌握 MQL 程式設計,可自動化獨特交易策略,突破手動交易的限制。

  • 利用自動交易系統(EA)可實現不受情緒影響的交易。
  • 透過自訂指標,可獲得傳統工具無法提供的獨特市場洞察。

MQL 是 MetaTrader 專用程式語言,但其通用性與強大功能,能大幅擴展交易者的技能組合。

從初學者到進階的學習資源

透過以下資源,進一步提升 MQL 程式設計技能:

  1. 官方文件 : MQL4 官方網站MQL5 官方網站 提供所有語法與函式的詳細說明。

  2. 社群論壇 :

  • 在 MQL5 論壇可從其他開發者處獲得建議,或分享程式碼範例。
  1. 影片教學 : 在 YouTube 等搜尋「MQL 程式設計 初學者」即可找到日語免費課程。

  2. 專業書籍 : 日語 MQL 相關書籍與 MetaTrader 解說書,對於系統性學習很有幫助。

參考書籍

Amazon.co.jp: FXで勝ち組を目指す!メタトレーダーを使ったEA開発マスターガイド (現代の錬金術師シリーズ…

持續學習的動機維持方法

MQL 程式設計學習可能耗時,但透過以下重點可維持動機:

  • 設定小目標 : 先從簡單腳本或指標開始,獲得成就感。
  • 實際交易測試 : 利用模擬帳戶體驗程式運作。
  • 累積成功經驗 : 先製作簡單 EA 或指標,並逐步改良,累積成果。

最後

透過本文,已示出從 MQL 程式設計基礎到進階的學習路徑。無論是即將開始學習 MQL 程式設計,或已經開始學習的朋友,請運用此知識構建獨特交易策略。程式設計與交易技巧的結合雖需時間,但其潛力無限。

相關網站

EXPO blog 投資の翼

Keyword MQL(MetaQuotes Language) MQL言語とは MQL(MetaQuotes Lang…

EXPO blog 投資の翼

Keyword EA開発 EAの基本構成 EA(エキスパートアドバイザー)は、MetaTraderで動作する自動売買プロ…