EA 開發第一步:Hello World — 你的第一個 MQL5 程式
📌 本文重點
從零開始撰寫你的第一個 MQL5 Expert Advisor(EA)。學習 EA 的三大核心函數、輸入參數設計、Print() 日誌輸出,以及如何在 MT5 中載入並執行你的第一個程式。
從零開始撰寫你的第一個 MQL5 Expert Advisor(EA)。學習 EA 的三大核心函數、輸入參數設計、Print() 日誌輸出,以及如何在 MT5 中載入並執行你的第一個程式。
前言:為什麼從 Hello World 開始?
學習任何程式語言的第一步都是「Hello World」——這不只是傳統,它讓你驗證整個開發環境是否正常運作。在 MQL5 中,Hello World 讓你熟悉:MetaEditor 的使用、EA 的基本結構、如何在 MT5 終端視窗看到程式輸出。
第一步:在 MetaEditor 建立新的 EA
- 在 MT5 中按 F4 開啟 MetaEditor
- 點擊「文件」→「新建」(或按 Ctrl+N)
- 選擇「Expert Advisor(template)」
- 填寫:名稱「HelloWorldEA」、作者「你的名字」、版權說明
- 點擊「下一步」→「完成」
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
編譯
- 在 MetaEditor 中按 F7 編譯程式碼
- 底部輸出視窗應顯示:
0 error(s), 0 warning(s) - 如有錯誤,雙擊錯誤訊息跳到問題行
載入到圖表
- 切換回 MT5(按 F5 或點擊工具列)
- 在「導航器」面板展開「Expert Advisors」
- 找到「HelloWorldEA」,雙擊或拖曳到圖表
- 在設定視窗確認參數,點擊「確定」
- 確認圖表右上角顯示 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 來區分它們。
下一步
- 👉 OnTick() 與交易邏輯:在 EA 中加入真正的交易邏輯
- 👉 從零開始建立你的第一個完整 MQL5 EA
本文由 James Lee 撰寫,轉載請註明出處。