EA 開發第一步:Hello World — 你的第一個 MQL5 程式

📌 本文重點
從零開始撰寫你的第一個 MQL5 Expert Advisor(EA)。學習 EA 的三大核心函數、輸入參數設計、Print() 日誌輸出,以及如何在 MT5 中載入並執行你的第一個程式。

前言:為什麼從 Hello World 開始?

學習任何程式語言的第一步都是「Hello World」——這不只是傳統,它讓你驗證整個開發環境是否正常運作。在 MQL5 中,Hello World 讓你熟悉:MetaEditor 的使用、EA 的基本結構、如何在 MT5 終端視窗看到程式輸出。

第一步:在 MetaEditor 建立新的 EA

  1. 在 MT5 中按 F4 開啟 MetaEditor
  2. 點擊「文件」→「新建」(或按 Ctrl+N
  3. 選擇「Expert Advisor(template)」
  4. 填寫:名稱「HelloWorldEA」、作者「你的名字」、版權說明
  5. 點擊「下一步」→「完成」

MetaEditor 會自動產生一個包含三個基本函數的 EA 骨架。

第二步:EA 的三大核心函數

每個 MQL5 EA 都圍繞三個核心函數運作:

//+------------------------------------------------------------------+
//|                                           HelloWorldEA.mq5       |
//|                              Copyright 2026, James Lee           |
//|                              https://mq5.fincosoft.com           |
//+------------------------------------------------------------------+
#property copyright "Copyright 2026, James Lee"
#property link      "https://mq5.fincosoft.com"
#property version   "1.00"

//--- 輸入參數:用戶可在 EA 設定視窗調整
input string InpGreeting   = "Hello, MQL5!";  // 歡迎訊息
input bool   InpShowTick   = false;            // 顯示每個 Tick

//--- 全域變數
int g_tickCount = 0;  // Tick 計數器

//+------------------------------------------------------------------+
//| OnInit:EA 初始化函數                                            |
//| 載入 EA 到圖表時執行一次                                         |
//+------------------------------------------------------------------+
int OnInit()
{
    // Print() 會輸出到 MT5 底部「專家」標籤頁
    Print("============================");
    Print(InpGreeting);
    Print("EA 已成功載入!");
    Print("交易品種: ", _Symbol);
    Print("圖表週期: ", EnumToString(_Period));
    Print("帳戶餘額: $", AccountInfoDouble(ACCOUNT_BALANCE));
    Print("============================");
    
    // 在圖表上顯示文字標籤
    ObjectCreate(0, "WelcomeLabel", OBJ_LABEL, 0, 0, 0);
    ObjectSetInteger(0, "WelcomeLabel", OBJPROP_CORNER, CORNER_LEFT_UPPER);
    ObjectSetInteger(0, "WelcomeLabel", OBJPROP_XDISTANCE, 10);
    ObjectSetInteger(0, "WelcomeLabel", OBJPROP_YDISTANCE, 20);
    ObjectSetString(0, "WelcomeLabel", OBJPROP_TEXT, InpGreeting);
    ObjectSetInteger(0, "WelcomeLabel", OBJPROP_COLOR, clrDodgerBlue);
    ObjectSetInteger(0, "WelcomeLabel", OBJPROP_FONTSIZE, 14);
    ChartRedraw();
    
    return INIT_SUCCEEDED; // 返回成功,EA 開始運行
    // 若返回 INIT_FAILED,EA 會立即停止
}

//+------------------------------------------------------------------+
//| OnDeinit:EA 清理函數                                            |
//| EA 被移除或 MT5 關閉時執行一次                                   |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
    // 移除圖表物件,避免遺留
    ObjectDelete(0, "WelcomeLabel");
    
    // 輸出停止原因
    Print("EA 已停止。原因代碼: ", reason);
    Print("共處理了 ", g_tickCount, " 個 Tick");
}

//+------------------------------------------------------------------+
//| OnTick:每次報價更新時執行                                       |
//| 這是 EA 的「心跳」,所有交易邏輯都在這裡                         |
//+------------------------------------------------------------------+
void OnTick()
{
    g_tickCount++;
    
    // 只有當 InpShowTick = true 時才顯示每個 Tick
    if (InpShowTick)
    {
        double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
        double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
        Print("Tick #", g_tickCount, 
              " | Bid: ", DoubleToString(bid, _Digits),
              " | Ask: ", DoubleToString(ask, _Digits));
    }
    
    // 每100個 Tick 輸出一次統計
    if (g_tickCount % 100 == 0)
    {
        Print("已處理 ", g_tickCount, " 個 Tick,EA 運行正常");
    }
}

第三步:編譯並載入 EA

編譯

  1. 在 MetaEditor 中按 F7 編譯程式碼
  2. 底部輸出視窗應顯示:0 error(s), 0 warning(s)
  3. 如有錯誤,雙擊錯誤訊息跳到問題行

載入到圖表

  1. 切換回 MT5(按 F5 或點擊工具列)
  2. 在「導航器」面板展開「Expert Advisors」
  3. 找到「HelloWorldEA」,雙擊或拖曳到圖表
  4. 在設定視窗確認參數,點擊「確定」
  5. 確認圖表右上角顯示 EA 名稱和 😊 表情(表示 EA 允許交易)

第四步:查看輸出

EA 載入後,在 MT5 底部的「終端」視窗切換到「專家」標籤,你應該看到類似:

============================
Hello, MQL5!
EA 已成功載入!
交易品種: EURUSD
圖表週期: PERIOD_H1
帳戶餘額: $10000.00
============================

恭喜!你的第一個 MQL5 EA 已成功運行。

OnInit() 返回值說明

返回值 說明
INIT_SUCCEEDED 初始化成功,EA 正常運行
INIT_FAILED 初始化失敗,EA 立即停止(適合在無效參數時使用)

常見初學者問題

Q:圖表上沒看到 EA 名稱?
A:確認 MT5 設定中允許 EA 運行。點選「工具」→「選項」→「Expert Advisors」→ 勾選「允許自動交易」。

Q:專家標籤沒有任何輸出?
A:確認你看的是「專家」標籤而非「日誌」標籤。也確認 EA 確實有被載入到圖表(右上角有 EA 名稱)。

Q:可以同時在多個圖表載入同一個 EA 嗎?
A:可以,每個圖表的 EA 實例是獨立的。使用不同的 Magic Number 來區分它們。

下一步


本文由 James Lee 撰寫,轉載請註明出處。

Similar Posts

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *