使用 Python 入門 MT5 自動交易與資料應用指南|API 整合到 AI 應用徹底解析

目次

1. 介紹

MetaTrader 5(MT5)是全球交易者廣泛使用的功能強大的交易平台。透過將 MT5 與 Python 結合,可以取得市場數據、進行自動交易、獨家邏輯的回測、AI 分析等,大幅擴展交易的可能性。 本文將為「想結合 MT5 和 Python 進行 FX 自動交易或數據分析」的人,從環境建置到實際實作,甚至 AI 和風險管理等應用內容,逐步說明。 即使是初學者,只要依序閱讀,就能實際掌握 MT5 和 Python 的目標。 事實上,Python 擁有豐富的資料分析強大函式庫,如「pandas」「numpy」「scikit-learn」等,活用這些就能實現高階策略或自動交易。傳統的 MetaEditor(MQL5)難以實現的 AI 或外部工具整合,也能透過 Python 更自由地處理,這是很大的優勢。 本文從環境建置步驟到範例程式碼、具體的自動交易策略實作範例,甚至常見問題和風險管理要點,都會以 MT5 和 Python 的組合,清楚說明「能做什麼・如何開始・注意事項」。 一開始可能覺得困難,但只要依序整理必要的知識,任何人皆能嘗試。請務必閱讀到最後,透過 MT5 和 Python 的強大組合,擴展新的交易可能性吧。

2. 使用 MT5 和 Python 的優點

將 MT5 和 Python 結合使用的最大魅力,在於「高度的自由度」與「廣泛的擴展性」。以往,MT5 需要使用專屬語言 MQL5 來撰寫程式,平台內部完成的交易是主流。然而,透過使用 Python,即可大幅超越該框架,實現自動買賣與資料分析。 首先,Python 是全球使用者眾多、資訊豐富的程式語言,因此即使是初學者也能輕鬆學習。例如,利用 Python 的強項「pandas」或「numpy」等函式庫,即可輕鬆實現從 MT5 取得的價格資料的加工、彙總與圖表化。此外,技術指標的計算或投資組合分析,也能透過活用現有的 Python 套件來輕鬆進行。 此外,與 AI 或機器學習領域的相性也極佳。Python 擁有豐富的機器學習函式庫,如「scikit-learn」或「TensorFlow」,能夠從市場資料中發現模式來自動產生買賣訊號,或是導入模型進行風險分析,從而建構比傳統 EA(自動買賣程式)更進階的策略。 另一個重點是,「只要 MT5 終端機運作的環境,就能從 Python 存取任何地方」這一點。跨越多個貨幣對或時間框架的大規模資料蒐集與分析也變得容易,能夠活用資料科學知識來進行彈性的策略開發。 如此一來,透過將 MT5 和 Python 結合,
  • 從手動作業轉向自動化
  • 大量資料的高速處理
  • 與外部 AI 的聯動
  • 建構原創的交易邏輯 等,這些是現代 FX 交易不可或缺的功能。
對於想要建立專屬自動買賣系統或資料分析工具的人來說,MT5 與 Python 的聯動正是最強的選擇。
侍エンジニア塾

3. 環境建置步驟

要讓 MT5 與 Python 聯動進行自動交易或資料分析,需要進行一些準備。首先,整理整體流程與設定的順序。

【設定的順序・整體流程】

  1. 安裝 MetaTrader 5(MT5)終端機 從官方網站或 FX 業者的網站下載・安裝 Windows 64 位元版的 MT5。
  2. 啟動 MT5 終端機・帳戶登入 啟動 MT5,並登入模擬帳戶或真實帳戶。
  3. MT5 的選項設定 「工具」→「選項」→「專家顧問(Expert Advisors)」分頁中, 勾選「允許自動交易」「允許匯入 DLL」。
  4. 安裝 Python(64 位元版) 從 Python 官方網站下載・安裝 64 位元版。
  5. 安裝必要的程式庫 在命令提示字元或終端機中執行下列指令。 pip install MetaTrader5 pandas numpy
  6. 執行 Python 腳本(連接測試) 環境準備就緒後,實際使用範例腳本進行連接確認。
遵循此順序,即可順利進行 MT5 與 Python 的聯動,並將問題降到最低。

3.1 MT5 終端機的安裝

MetaTrader 5(MT5)可從官方網站(https://www.metatrader5.com/ja/download)或許多 FX 業者網站免費下載。安裝後,請登入模擬帳戶或真實帳戶。 ※MT5 僅官方支援 64 位元版。

3.2 MT5 的選項設定

啟動 MT5 終端機後,請務必進行下列設定。
  1. 開啟「工具」→「選項」
  2. 選擇「專家顧問(Expert Advisors)」分頁
  3. 勾選「允許自動交易」「允許匯入 DLL」
此設定可讓外部程式(例如 Python)存取 MT5。

3.3 Python 環境與程式庫的準備

從官方網站(https://www.python.org/)下載並安裝64 位元版的 Python。 此外,導入 Visual Studio Code 或 PyCharm 等編輯器也能提升效率。 接著,在命令提示字元或終端機中安裝必要的 Python 程式庫。
pip install MetaTrader5 pandas numpy

3.4 聯動時的注意事項

  • 請務必確認 Python 與 MT5 的位元數(64 位元)一致。
  • 請在 MT5 終端機啟動・登入的狀態下執行 Python 腳本。
  • 一開始請務必使用模擬帳戶進行測試。
如此一來,遵循設定的順序並正確執行每個步驟,即可安全且舒適地讓 MT5 與 Python 聯動。也能減少環境建置時的障礙點,請務必注意此流程。

4. 從 Python 連接到 MT5

環境建置完成後,讓我們確認是否能從 Python 實際連接到 MT5 終端機。在這裡,我們將說明基本的連接流程和範例程式碼,並且解說「在什麼樣的環境中執行最好」等執行環境的要點。

4.1 執行環境相關注意事項

  • OS 和位元數 MetaTrader 5(MT5)官方支援 Windows 64 位元版。請使用 Python 的 64 位元版。如果位元數不一致,在匯入程式庫或連接時可能會發生錯誤。
  • MT5 終端機的狀態 在執行 Python 腳本之前,需要啟動 MT5 終端機並登入帳戶。如果終端機未啟動,或未登入,則會發生連接錯誤。
  • 推薦環境 ・Windows 10/11 64 位元 ・Python 3.8 以上(64 位元) ・MetaTrader 5 終端機最新版 ※Mac 或 Linux 環境的運作不在官方支援範圍內,但透過虛擬環境(VirtualBox 或 Parallels 等)則有運作實績。不過,發生問題時需自行負責。

4.2 MT5 程式庫的匯入與初始化

那麼,讓我們實際從 Python 連接到 MT5 吧。匯入 MetaTrader5 程式庫,並對終端機進行初始化連接。
import MetaTrader5 as mt5

# 連接到 MT5 終端機
if not mt5.initialize():
    print("連接到 MT5 失敗了。")
    mt5.shutdown()
else:
    print("成功連接到 MT5。")
    mt5.shutdown()
要點:
  • 務必事先啟動 MT5 終端機並登入帳戶。
  • 請確認執行範例腳本的 Python 是「64 位元版」。
  • 在腳本結束時,務必使用mt5.shutdown()來斷開連接。

4.3 取得帳戶資訊

連接成功後,接下來取得 MT5 帳戶資訊,檢查是否能實際透過 API 存取 MT5。
import MetaTrader5 as mt5

mt5.initialize()

# 取得帳戶資訊
account_info = mt5.account_info()
if account_info is None:
    print("無法取得帳戶資訊。")
else:
    print(f"帳戶號碼: {account_info.login}")
    print(f"餘額: {account_info.balance}")

mt5.shutdown()

4.4 發生問題時的檢查要點

  • MT5 終端機未啟動/未登入 → 請務必確認 MT5 終端機已「啟動」,且已「登入」帳戶。
  • Python 和 MT5 的位元數不一致 → 請使用 64 位元版來搭配。可在命令提示字元中使用python --versionpython -c "import struct;print(struct.calcsize('P') * 8)"等來確認。
  • 符號名稱或訂單設定的錯誤 → 請一併檢查符號是否有效,以及是否能進行交易。

4.5 補充:時間戳記的處理

從 MT5 取得的資料時間為「UTC 時間戳記」返回。如果使用 pandas 轉換為本地時間,則可以
import pandas as pd
# 範例: rates_df["time"] = pd.to_datetime(rates_df["time"], unit="s").dt.tz_localize("UTC").dt.tz_convert("Asia/Tokyo")
像這樣進行轉換。 如此一來,透過確認執行環境和正確的手順來連接 MT5 和 Python,下一步的資料取得或訂單下單也能順利進行。
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

5. 價格資料的取得與訂單處理

MT5 與 Python 的聯動中最常使用的功能是「價格資料的取得」與「訂單的下單」。這裡,將以實際的範例程式碼為輔,說明基本資料取得與訂單處理的方法。

5.1 Tick & Bar(OHLC)資料的取得

在 MT5 中,可以輕鬆取得 tick 資料(每個 tick 的價格變動)或 bar(K 線:OHLC)資料。例如,要在 Python 中取得特定銘柄(例如:USDJPY)的最新 tick 資料,或一定期間的 K 線資料,請使用以下程式碼。 最新 tick 資料的取得範例:
import MetaTrader5 as mt5

mt5.initialize()

# 指定符號(例如:USDJPY)
symbol = "USDJPY"

# 取得最新的 tick 資料
tick = mt5.symbol_info_tick(symbol)
if tick:
    print(f"Bid: {tick.bid}, Ask: {tick.ask}, 時間: {tick.time}")
else:
    print("無法取得 tick 資料。")

mt5.shutdown()
K 線資料(bar/OHLC)的取得範例:
import MetaTrader5 as mt5
import pandas as pd

mt5.initialize()

symbol = "USDJPY"
# 取得過去 100 根的 1 小時足資料
rates = mt5.copy_rates_from_pos(symbol, mt5.TIMEFRAME_H1, 0, 100)

if rates is not None and len(rates) > 0:
    df = pd.DataFrame(rates)
    print(df.head())
else:
    print("無法取得 K 線資料。")

mt5.shutdown()

5.2 傳送訂單的範例

在 MT5 API 中,也可以從 Python 直接下訂單。這裡顯示 USDJPY 買入 0.1 手的範例程式碼。
import MetaTrader5 as mt5

mt5.initialize()

symbol = "USDJPY"

# 建立訂單參數
order = {
    "action": mt5.TRADE_ACTION_DEAL,
    "symbol": symbol,
    "volume": 0.1,
    "type": mt5.ORDER_TYPE_BUY,
    "price": mt5.symbol_info_tick(symbol).ask,
    "deviation": 10,
    "magic": 234000,
    "comment": "python script order",
    "type_time": mt5.ORDER_TIME_GTC,
    "type_filling": mt5.ORDER_FILLING_IOC,
}

result = mt5.order_send(order)

if result.retcode == mt5.TRADE_RETCODE_DONE:
    print("訂單正常完成。")
else:
    print(f"訂單錯誤: {result.retcode}")

mt5.shutdown()
注意事項:
  • 下單時,無論是真實帳戶或模擬帳戶,都需事先在帳戶中準備足夠的保證金。
  • 訂單邏輯的測試,務必一開始在模擬帳戶中進行。
  • 由於價差或手數限制、業者端的規格,訂單可能無法通過,因此確認回傳碼或錯誤訊息很重要。
如此一來,透過活用 MT5 的 Python 函式庫,即可輕鬆透過 API 實現彈性的資料取得與自動下單。

6. 簡單的自動交易策略範例

在這裡,我們將介紹使用 MT5 和 Python 結合來實現的「簡單自動交易策略」的實作範例。以實際常用到的黃金交叉(短期移動平均線從下方穿越長期移動平均線的現象)為例,讓我們用 Python 來建構基本的買賣邏輯。

6.1 黃金交叉策略的概要

黃金交叉是技術分析中頗受歡迎的訊號。
  • 短期移動平均線(例:5 期間)從下方穿越長期移動平均線(例:25 期間)的時機為「買入」
  • 相反地,短期從上方穿越長期至下方的時機為「賣出」
這是一個非常簡單且再現性高的規則。

6.2 Python 的實作範例

在這裡,我們使用 USDJPY 的 1 小時足資料來判斷黃金交叉訊號,並在訊號發生時發出買入訂單的範例。
import MetaTrader5 as mt5

import pandas as pd

# 連接到 MT5
mt5.initialize()
symbol = "USDJPY"

# 取得最近 100 根的 1 小時足資料
rates = mt5.copy_rates_from_pos(symbol, mt5.TIMEFRAME_H1, 0, 100)
df = pd.DataFrame(rates)

# 計算移動平均線
df["ma_short"] = df["close"].rolling(window=5).mean()
df["ma_long"] = df["close"].rolling(window=25).mean()

# 黃金交叉判斷(使用最近 2 根來判斷)
cross = (
    df["ma_short"].iloc[-2] < df["ma_long"].iloc[-2]
    and df["ma_short"].iloc[-1] > df["ma_long"].iloc[-1]
)

if cross:
    # 僅在訊號發生時發出訂單(買入)
    order = {
        "action": mt5.TRADE_ACTION_DEAL,
        "symbol": symbol,
        "volume": 0.1,
        "type": mt5.ORDER_TYPE_BUY,
        "price": mt5.symbol_info_tick(symbol).ask,
        "deviation": 10,
        "magic": 234001,
        "comment": "golden cross buy",
        "type_time": mt5.ORDER_TIME_GTC,
        "type_filling": mt5.ORDER_FILLING_IOC,
    }
    result = mt5.order_send(order)
    if result.retcode == mt5.TRADE_RETCODE_DONE:
        print("黃金交叉買入訂單已發出。")
    else:
        print(f"訂單錯誤:{result.retcode}")
else:
    print("目前未滿足黃金交叉條件。")

mt5.shutdown()

6.3 實踐時的要點

  • 實際運作時,加入進場・出場(決済)的條件以及風險管理機制會更安全。
  • 要定期執行腳本,可以使用 Windows 的工作排程器或 cron(Linux)來自動化。
  • 更進階的策略或複雜的訊號判斷,也可以用 Python 靈活擴展。
如此一來,在 MT5 × Python 的環境中,從簡單的技術指標到屬於自己的自動交易邏輯,都能輕鬆開發・測試・運作。

7. 應用範例:與 AI/機器學習的聯動

MT5 與 Python 聯動的最大優勢之一,就是能夠輕鬆活用 AI 或機器學習模型。傳統僅用 MQL5 難以實現的高度分析或預測,透過活用 Python 豐富的機器學習函式庫,即可實現更先進的自動交易或分析。

7.1 使用 AI 模型建立買賣訊號

例如,使用過去的價格資料或技術指標來建構預測「未來價格走勢」的 AI 模型,並根據其輸出自動下單。Python 中可以使用「scikit-learn」或「TensorFlow」「PyTorch」等函式庫,利用決策樹、隨機森林、神經網路等多樣模型。 【範例:簡單的機器學習訊號生成流程】
  1. 從 MT5 取得過去的價格資料
  2. 使用 pandas 或 numpy 計算特徵量(例如:移動平均・布林通道等)
  3. AI 模型輸出「上漲/下跌」等訊號
  4. 根據訊號,使用 mt5.order_send 自動下單
如果在 Python 腳本中讀取 AI 的已學習模型(pickle 或 ONNX 格式),即可在每次交易時執行預測。

7.2 使用 Walk‑Forward 分析進行策略最佳化

在機器學習或自動交易的實務中,避免「過度最佳化(曲線擬合)」是非常重要的。 Walk‑Forward 分析是指在一定期間內重複學習・驗證,同時評估模型或策略效能的手法。 【Walk‑Forward 分析的意象】
  • 使用某期間的資料學習 AI 模型
  • 使用最近的未學習資料驗證預測效能
  • 新資料增加時重新學習模型
  • 透過重複此流程,即可培育出對「未來未知資料」也強韌的策略
Python 中備有助於此類分析的 backtesting 函式庫,以及用於資料分割的 sklearn 工具等。

7.3 應用的範圍無限大

  • 高精度預測邏輯的開發 可使用 AI 進化現有 EA 的邏輯,或利用深度學習學習模式等多樣手法。
  • 外部資料的活用 經濟指標曆、ニュース、SNS 等,將 MT5 外部的資料納入交易策略中也行得通。
  • 自動調整或最佳化 使用 Python 的最佳化工具,即可實現參數自動探索的「進化型 EA」。
如此一來,透過使用 Python,MT5 的可能性將大幅擴展。不僅是簡單的技術分析,個人也能相對輕鬆建構融入 AI 或最新資料科學手法的高度自動交易系統的時代來臨了。

8. 風險管理與注意事項

透過活用 MT5 和 Python,可以實現強大的自動交易或高級分析,但同時也需要了解風險與注意事項。在這裡,我們將說明特別重要的風險管理基礎,以及實際常見的問題與注意事項。

8.1 在模擬帳戶中進行充分的測試

首先,使用 Python 開發的自動交易邏輯或分析程式碼,務必在模擬帳戶中進行充分期間的測試。雖然真實帳戶與模擬帳戶在點差或成交速度等方面有細微差異,但在模擬環境中可以避免重大錯誤或預料之外的動作。 MT5 的模擬帳戶開設也很簡單,因此在實際運作前將風險最小化是鐵則。

8.2 注意點差・滑價・業者的差異

  • 點差・滑價 即使從 Python 下單,在市場急變時也會發生點差擴大或滑價(成交價格的偏差)。特別是指標公布時或流動性低的時間帶需要注意。
  • 業者各自的規格差異 MT5 的交易規格因 FX 業者而異,因此請事先確認「可交易的最小手數」「最大訂單數」「可使用的符號」等。透過 API 的情況下,也可能因伺服器端的規格而無法下單。

8.3 回測與邏輯的驗證

自動交易系統中最危險的是「過度樂觀」。僅憑過去資料成功,並不保證未來也會成功。
  • 回測:使用過去資料進行充分的驗證
  • 走前分析:使用未使用資料確認真實實力
  • 風險管理:最大損失額的限制或停損的設定等,對萬一的準備也很重要。

8.4 系統的監視・維護也不要忘記

完全放置自動交易是很危險的。
  • 系統異常或錯誤發生時的電子郵件通知
  • 日誌的自動儲存・備份
  • 伺服器重新啟動時的自動復舊處理 等
使用 Python,這些維護用腳本也可以靈活地建立。

8.5 法律・合規性的注意事項

將自製 EA 或自動交易系統提供給第三方,或進行買賣訊號發送的情況下,需要考慮金融商品交易法等法律上的限制。 個人運作的話沒有太大問題,但如果考慮商用利用或付費發送,建議諮詢專家。 如此一來,活用 MT5 和 Python 的情況下,也要しっかり意識「風險管理」與「維護運作」,這是長久穩定使用下去的訣竅。不要只被便利性或效率化吸引,而要注重堅實的運作。

9. 總結與下一步驟

到這裡為止,我們已經從MT5與Python聯動的環境建置開始,涵蓋資料取得、下單發注、自動買賣策略的實作、與AI・機器學習的整合、風險管理等,一一進行了解說。 透過結合MT5與Python,可以實現超越傳統交易平台的框架,靈活且高度的自動買賣或資料分析。 透過與Python豐富的函式庫或外部服務聯動,那些以往僅停留在點子的策略或工具,也能以實際運作的形式實現。 透過這篇文章,如果讀者能感覺到「自己也能進行MT5×Python的自動買賣或資料分析」,那就太好了。 建議一開始使用模擬帳戶仔細試用,確實理解・驗證後逐步升級。

【下一步驟範例】

  • 進一步發展更複雜的技術指標或獨有策略
  • 透過自製・導入AI或機器學習模型來提升訊號的精進
  • 與Slack或LINE等外部通知服務的聯動
  • 擴展至多個帳戶或貨幣對的運作
請打造出屬於自己的原創自動買賣系統,並擴展您的交易範圍。

10. FAQ(常見問題)

這裡將針對 MT5 與 Python 的整合以及自動交易系統開發中,實際上常見的疑問與問題,提供簡潔的回答。

Q1. MT5 可以免費使用嗎?

A. MT5 本體及官方 Python 函式庫可以免費使用。 如果是模擬帳戶,則不受 FX 業者的限制,可以自由驗證交易。許多業者也免費提供真實帳戶,但處理真實資金時,請務必確認各業者的使用條款及手續費。

Q2. 可以對應多種貨幣對嗎?

A. 可以。 在 Python 腳本中指定多個符號,並透過迴圈取得資料或下單,即可對應多種貨幣對的自動交易或分析。 不過,由於各業者有下單上限或通訊頻率限制,實作時請注意。

Q3. 訂單無法通過、發生錯誤時的對策是?

A. 首先確認 MT5 終端是否已啟動。 接著,確認帳戶的登入狀態、訂單手數指定(小於最小手數、超過上限)、符號名稱的拼寫錯誤、下單時的價格或滑點等。 發生錯誤時,可以透過 MetaTrader5 函式庫的retcode確認原因。

Q4. 在日文環境下,Python 與 MT5 容易使用嗎?

A. 是的,Python 及 MT5 皆可在日文 OS 上運作。 VS Code 或 PyCharm 等主要編輯器也支援日文,因此操作上幾乎不會有困擾。 錯誤訊息或官方文件以英文為主,但網路上日文資訊也逐漸增加,因此可以邊查詢邊進行。

Q5. AI 模型可以多簡單地整合?

A. 以 Python 學習並儲存的 AI 模型(scikit-learn 的 pkl 或 ONNX 格式等)可以在 Python 腳本中輕鬆呼叫。 基於模型的預測結果,可以自動將買賣訊號或風險判斷反映到交易策略中。 即使是 AI 初學者,也能活用現有的範例或函式庫,逐步挑戰高階策略。

Q6. 函式庫錯誤或版本不符導致無法連線,該怎麼辦?

A. MT5 與 Python 必須使用相同位元數(32 位元或 64 位元)。此外,也需注意 MetaTrader5 函式庫的版本與 MT5 本體的更新狀況。 請使用最新版本的 Python 及 MT5,必要時試著解除安裝後重新安裝。 若有不明之處或其他疑問,請參考官方文件、開發者論壇或日文技術部落格等。 安心地拓展 MT5 × Python 的可能性吧。

相關網站

GlobalTradeCraft

目次 1 1. はじめに2 2. MT5×Pythonとは?2.1 MT5×Python連携のメリット2.2 MQL5と…

RUNTEQ(ランテック)|超実戦型エンジニア育成スクール