Python×MT5 入門指南:從環境建置到自動交易&機器學習應用全方位解析

目次

1. 前言

MetaTrader 5(MT5)是一個在全球廣泛使用的高功能交易平台,結合 Python 後,能進一步實現更高階的自動交易與資料分析。近年來,AI 與機器學習在金融業界受到關注,「MT5 × Python」的需求正迅速攀升。

本文將詳細說明透過 MT5 與 Python 的結合能做什麼、其優點、實際應用案例,以及即使是初學者也能輕鬆上手的環境構建重點,讓「想嘗試自動交易」「想用 Python 提升資產運營效率」「想輕鬆可視化與分析資料」的你,能以簡單易懂的方式快速入門。

閱讀本指南後,你將能看到 MT5 與 Python 結合所帶來的新交易可能性。

2. MT5×Python 是什麼?

MetaTrader 5(MT5)是一個支援 FX、股票、虛擬貨幣等多種金融商品交易的全球性平台。許多個人投資者與專業交易者都在使用,擁有高速成交、豐富技術指標與自動交易(EA:Expert Advisor)功能。

然而,MT5 原生的自動交易功能是以「MQL5」這種專用語言為前提。然而,近年來官方已正式支援 Python 與 MT5 的連結,交易範圍因此大幅擴展。

MT5×Python 連結的優點

  • 直覺式編碼
    Python 以簡單易懂的語法為特色,即使是程式設計初學者也能輕鬆上手。即使之前對 MQL5 有顧慮的人,也能用 Python 以輕鬆方式挑戰自動交易與資料取得。

  • 豐富的外部函式庫可供使用
    Python 擁有 pandas、numpy、matplotlib、scikit-learn 等多種金融資料分析、可視化、AI/機器學習函式庫。利用 MT5 的交易資料,可實現更進階的交易策略。

  • 透過 API 的靈活操作
    使用 MetaTrader5 官方的 Python 套件(MetaTrader5),即可從 Python 腳本直接操作 MT5。可輕鬆調用圖表資料取得、下單、帳戶資訊等多項功能。

MQL5 與 Python 的差異

MQL5 是為 MT5 專門設計的高速語言,但在擴充性與資料分析自由度上,Python 更勝一籌。若追求「高階資料分析」「與 AI 的整合」「與外部服務的結合」,Python 的靈活性將成為關鍵優勢。

透過將 MT5 與 Python 組合,可不僅限於自動交易,還能擴展多種資產運營可能性。

3. 開發環境的準備

MT5 與 Python 連結並使用,首先必須正確配置各自的環境。以下將以初學者也能不迷失的方式,逐步說明設定流程。

3.1 MT5 的安裝與基本設定

首先從官方網站下載並安裝 MT5 本體。

  1. 從官方網站下載
    從 MT5 官方網站(https://www.metatrader5.com/ja/download)下載最新版 MT5。執行安裝程式,並依照畫面指示完成安裝。

  2. 開設模擬帳戶
    建議初次使用者開設模擬帳戶。於 MT5 的「檔案」選單中選擇「申請模擬帳戶」,填寫必要資訊,即可免費使用虛擬資金進行交易測試。

  3. 啟用自動交易
    為於 MT5 執行自動交易或外部連結,必須將「自動交易」開啟。確認工具列的「自動交易」按鈕已變為綠色。

  4. 確認伺服器資訊與帳戶資訊
    帳戶編號與伺服器資訊在 Python 端連線時可能需要,建議事先備妥。

3.2 Python 的安裝與套件安裝

接下來配置 Python 開發環境。

  1. 安裝 Python 本體
    從官方網站(https://www.python.org/downloads/)下載並安裝最新版 Python(建議 3.10 以上)。安裝時請勾選「Add Python to PATH」。

  2. 準備編輯器(如 VS Code)
    作為程式編寫工具,Visual Studio Code(VS Code)相當受歡迎。可輕鬆進行語言切換,且 Python 擴充功能完善。

  3. 安裝 MetaTrader5 套件
    於命令提示字元或終端機執行以下指令,安裝 MT5 連結套件。

pip install MetaTrader5

  1. (可選)安裝資料分析函式庫
    可同時安裝 pandas、numpy、matplotlib 等資料分析與圖表繪製函式庫。

pip install pandas numpy matplotlib

3.3 基本功能測試

完成上述步驟後,請簡單測試 Python 是否能連線至 MT5。

import MetaTrader5 as mt5

if not mt5.initialize():
    print("MT5的初始化失敗")
else:
    print("MT5與正常連線")
    mt5.shutdown()

若上述程式顯示「MT5 與正常連線」,即表示已完成準備。若出現錯誤,請確認 MT5 是否已啟動、帳戶資訊是否正確,以及是否以管理員權限執行。

以上即為開發環境構建流程。

4. MT5 與 Python 的基本連結程式碼

準備完成後,即可從 Python 連線至 MT5,並實作基本操作。以下將以範例程式說明「MT5 與 Python 的初始連線」與「基本資訊取得」的流程。

4.1 MT5 的初始化與連接

要從 Python 連線至 MT5,必須先確保 MT5 正在執行。若 MT5 應用程式已關閉,將無法連線,請留意。

import MetaTrader5 as mt5

# MT5 連線初始化
if not mt5.initialize():
    print("MT5的初始化失敗")
    mt5.shutdown()
    exit()

print("MT5與連線成功")

4.2 取得帳戶資訊與終端資訊

連線成功後,先取得「帳戶資訊」與「終端資訊」,以確認 MT5 可被 Python 操作。

# 取得帳戶資訊
account_info = mt5.account_info()
if account_info is not None:
    print("帳戶資訊:", account_info)
else:
    print("帳戶資訊取得失敗")

# 取得終端資訊
terminal_info = mt5.terminal_info()
if terminal_info is not None:
    print("終端資訊:", terminal_info)
else:
    print("終端資訊取得失敗")

4.3 斷開連接(關閉)

程式結束時,務必斷開 MT5 連線(關閉)。這樣可確保多次執行程式時的穩定性。

mt5.shutdown()
print("已結束與 MT5 的連線")

4.4 取得版本資訊

可輕鬆確認已安裝的 MetaTrader5 套件版本與開發者資訊,亦可作為環境檢查。

import MetaTrader5 as mt5

print("MetaTrader5 套件版本:", mt5.__version__)
print("MetaTrader5 開發者資訊:", mt5.__author__)
import MetaTrader5 as mt5

print("MetaTrader5 套件版本:", mt5.__version__)
print("MetaTrader5 套件開發者:", mt5.__author__)

本節中,我們已確認能將 MT5 與 Python 連接,並取得基本資訊。

5. 市場資料的取得方法

透過將 MT5 與 Python 整合,可輕鬆取得即時匯率及過去的蠟燭圖資料(OHLCV 資料)。以下將以具體程式碼範例說明代表性的市場資料取得方式。

5.1 取得點檔資料

點檔資料是指每一次交易時所記錄的最細緻價格資訊。若想取得最新的報價,請使用 symbol_info_tick() 方法。

import MetaTrader5 as mt5

symbol = "USDJPY"

if not mt5.initialize():
    print("MT5 初始化失敗")
else:
    tick = mt5.symbol_info_tick(symbol)
    if tick is not None:
        print(f"{symbol}的最新點檔資料:", tick)
    else:
        print(f"{symbol}的點檔資料取得失敗")
    mt5.shutdown()

5.2 取得蠟燭圖資料(OHLCV)

若想確認固定時間段的價格走勢,蠟燭圖資料(Open, High, Low, Close, Volume)非常方便。
使用 copy_rates_from()copy_rates_from_pos() 可取得指定符號的歷史資料。

import MetaTrader5 as mt5
from datetime import datetime

symbol = "USDJPY"
timeframe = mt5.TIMEFRAME_M1  # 1 分鐘圖
n_candles = 10                # 最新 10 根

if not mt5.initialize():
    print("MT5 初始化失敗")
else:
    rates = mt5.copy_rates_from_pos(symbol, timeframe, 0, n_candles)
    if rates is not None:
        for r in rates:
            print(r)
    else:
        print(f"{symbol}的蠟燭圖資料取得失敗")
    mt5.shutdown()

5.3 取得資料的分析與可視化

使用 Python,可利用 pandas、matplotlib 等函式庫輕鬆分析與可視化取得的資料。例如,僅將最近的收盤價資料以圖表顯示,即可直觀掌握市場走勢。

import MetaTrader5 as mt5
import pandas as pd
import matplotlib.pyplot as plt

symbol = "USDJPY"
timeframe = mt5.TIMEFRAME_M5  # 5 分鐘圖
n_candles = 50

if not mt5.initialize():
    print("MT5 初始化失敗")
else:
    rates = mt5.copy_rates_from_pos(symbol, timeframe, 0, n_candles)
    if rates is not None:
        df = pd.DataFrame(rates)
        df['time'] = pd.to_datetime(df['time'], unit='s')
        plt.plot(df['time'], df['close'])
        plt.title(f"{symbol} 5 分鐘圖的收盤價")
        plt.xlabel("時間")
        plt.ylabel("收盤價")
        plt.xticks(rotation=45)
        plt.tight_layout()
        plt.show()
    else:
        print(f"{symbol}的蠟燭圖資料取得失敗")
    mt5.shutdown()

如此一來,透過 MT5 與 Python 的整合,可即時且靈活地取得所需市場資料,並將其運用於分析與自動交易策略。

6. 訂單與交易自動化

透過將 MT5 與 Python 整合,不僅可進行手動交易,亦能輕鬆實作自動交易程式(演算法交易)。以下將說明從 Python 發送訂單至 MT5 的基本流程,以及常用的訂單方式。

6.1 訂單發送的基本流程

若從 Python 向 MT5 發送訂單,請使用 order_send() 方法。訂單內容以字典(dict)形式一次性指定。

市價單(例:買入 USDJPY)

import MetaTrader5 as mt5

symbol = "USDJPY"
lot = 0.1  # 交易數量

if not mt5.initialize():
    print("MT5 初始化失敗")
else:
    # 新增買入倉位
    order = {
        "action": mt5.TRADE_ACTION_DEAL,
        "symbol": symbol,
        "volume": lot,
        "type": mt5.ORDER_TYPE_BUY,
        "price": mt5.symbol_info_tick(symbol).ask,
        "deviation": 20,
        "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("訂單錯誤:", result)
    mt5.shutdown()

6.2 限價單與止損單

若想在價格達到特定水準時成交,可使用限價(LIMIT)或止損(STOP)訂單。

限價買入訂單(BUY LIMIT)範例

order = {
    "action": mt5.TRADE_ACTION_PENDING,
    "symbol": symbol,
    "volume": lot,
    "type": mt5.ORDER_TYPE_BUY_LIMIT,
    "price": 140.000,  # 以指定價格買入
    "deviation": 20,
    "magic": 234001,
    "comment": "python buy limit",
    "type_time": mt5.ORDER_TIME_GTC,
    "type_filling": mt5.ORDER_FILLING_IOC,
}

6.3 位置的結算(關閉)

若要結算已持有的倉位,請下「相反買賣」訂單。
例如,若想關閉買入倉位,請送出賣出訂單(ORDER_TYPE_SELL)。

6.4 下單時的注意事項

  • Spread & Slippage
    在實際交易中,可能會發生 Spread(買賣價差)與 Slippage(成交偏差)。尤其在市價單時,指定價格與實際成交價格可能會有差異,建議在模擬帳戶中充分測試。

  • 保證金 & 槓桿
    需注意帳戶保證金狀況與槓桿限制。若保證金不足,訂單可能會被拒絕。

  • 可交易時間 & 交易所規定
    交易的貨幣對或 CFD 可能有不同的可交易時間,請確認相關規定。

這樣,透過 Python 以彈性方式向 MT5 發送訂單,系統交易與自動化策略的範圍將大幅擴展。

7. 應用:Walk‑Forward 分析與機器學習的結合

MT5 與 Python 的結合不僅限於簡單的自動交易或資料取得,還能應用於最先進的資料科學方法與 AI 技術。以下將介紹「Walk‑Forward 分析」與「機器學習的應用」等進階使用方式。

7.1 Walk‑Forward 分析是什麼?

Walk‑Forward 分析是一種為避免回測結果過度優化(曲線擬合)而設計的手法。
具體而言,會在固定時間間隔內重複進行參數優化與驗證(測試),以確認策略在未來資料中仍具有效力。
透過此方法,可減少「僅在過去資料中合適」的失敗,並開發出更具實務運用力的邏輯。

Walk‑Forward 分析的一般流程:

  1. 將資料分為「學習期間」與「驗證期間」
  2. 在學習期間資料中計算最佳參數
  3. 在驗證期間以該參數實際測試
  4. 以一步為單位往前推進,重複 1–3

Python 可利用 pandas 與 scikit‑learn 方便地實作此類驗證流程。

7.2 Python 進行機器學習策略構建

結合 Python 與 MT5,可實作 AI 預測模型與交易訊號產生。
例如,可依照以下流程運用機器學習:

  • 資料取得:從 MT5 擷取價格與指標資料
  • 前處理・特徵量產生:使用 pandas 與 numpy 轉換為易於分析的格式
  • 模型構建:利用 scikit‑learn、TensorFlow、PyTorch 等建立回歸或分類模型
  • 預測與進場判斷:以模型輸出交易訊號,自動下單

簡易範例:使用隨機森林判斷買賣訊號

# 取得資料並進行前處理後
from sklearn.ensemble import RandomForestClassifier

# X: 特徵量資料、y: 買賣標籤(例:1=Buy, 0=Sell)
model = RandomForestClassifier()
model.fit(X_train, y_train)
pred = model.predict(X_test)

# 根據 pred 的結果在 MT5 下單

7.3 ONNX 等外部 AI 模型的結合

若要在 MT5 中使用已訓練好的 AI 模型,可將模型匯出為 ONNX 等高相容性格式,並從 Python 或 MQL5 呼叫。
這樣即可將雲端或其他環境中開發的強大模型直接應用於 MT5 的交易判斷。

這樣,MT5 與 Python 的結合不僅限於「自動交易」與「資料取得」,更能實現 AI 與機器學習時代的演算法交易,成為強大的武器。

8. 錯誤處理與故障排除

MT5 與 Python 的結合程式非常強大,但實際運營時可能會遇到各種故障與錯誤。以下整理了常見故障案例與解決方法。

8.1 連線錯誤

【症狀】

  • mt5.initialize() 失敗
  • 從 Python 無法辨識 MT5

【主要原因與對策】

  • MT5 應用未啟動 → 必須確保 MT5 正在「啟動中」
  • MT5 版本或位元不一致 → 若 Python 為 32bit,請使用 32bit MT5;若為 64bit,請使用 64bit MT5
  • 缺少管理員權限 → 以「管理員執行」程式或 MT5 可能解決
  • 路徑未設定或環境變數錯誤 → 檢查 Python 與 MT5 的安裝路徑是否正確

8.2 帳戶・訂單相關錯誤

【症狀】

  • 訂單無法成交(回傳錯誤)
  • account_info()order_send() 回傳 None 或錯誤碼

【主要原因與對策】

  • 保證金不足或手數設定錯誤 → 事先確認可成交手數與保證金
  • 交易時間外或不支援的標的 → 檢查目標標的的交易時間與規定
  • 必要項目遺漏 → 檢查訂單字典(dict)是否缺少參數
  • API 版本不相容 → 嘗試升級 MetaTrader5 套件或 MT5 本體

8.3 資料取得時的故障

【症狀】

  • 無法取得歷史資料或 tick 資料
  • 資料為空(None)或僅部分回傳

【主要原因與對策】

  • MT5 未顯示目標貨幣對 → 在 MT5 的「行情顯示」列表中加入欲取得的符號
  • 歷史資料未存在於 MT5 本體 → 先在 MT5 中開啟圖表,讓資料下載完成

8.4 其他常見陷阱

  • 函式庫相依性錯誤 → 事先安裝 pandas、numpy 等必要外部函式庫
  • 程式執行權限或防火牆設定 → Windows Defender 等可能影響,請考慮加入例外設定
  • 日誌輸出與 print → 在錯誤發生時,使用 print 輸出變數與回傳值,協助定位原因

MT5×Python 的結合自由度高,初期可能會遇到意外的故障。但逐一排查並處理,最終一定能解決。遇到問題時,整理「錯誤內容・症狀・環境資訊」並記錄,邁向解決。

9. 總結與未來展望

至此,我們已說明透過 MetaTrader 5(MT5)與 Python 的結合,可實現的廣泛應用。從自動交易程式、資料取得與分析,到 AI 與機器學習的高階演算法交易,其潛力極為龐大。

9.1 MT5×Python 結合的魅力重確認

  • 直覺式自動交易實現:雖然系統交易難度高,但 Python 的易讀語法與豐富函式庫,使其更貼近使用者
  • 資料分析與可視化:利用 Pandas、matplotlib 等,能自由地可視化市場與分析結果,並以自身方式驗證投資判斷
  • AI 與機器學習整合:可自行學習與最佳化交易策略,並於實際市場中測試。未來的演算法交易將成為投資者的強大武器

9.2 進一步深入學習

本文所介紹的內容僅為 MT5×Python 應用的「入口」。若想挑戰更高階的策略與演算法,以下學習資源亦值得參考:

此外,務必在模擬帳戶中重複測試程式,並徹底執行風險管理。

9.3 未來展望

未來金融業將持續見證 AI 與自動交易的進化。MT5 與 Python 的結合,象徵著即使是個人投資者也能達到專業級的分析與自動化。
打造屬於自己的交易策略,並將其運用於市場,請務必把握並提升此技能。

10. FAQ(常見問題)

Q1. MT5 的 Python 連結可以免費使用嗎?

是的,MetaTrader5 本體以及 Python 套件(MetaTrader5)均可免費使用。但若在實盤帳戶進行交易,可能需要額外支付 FX 公司的交易條件或手續費等。建議先在模擬帳戶試用。

Q2. MT5 的 Python 套件(PyPI 版)與 MQL5 組合的 Python 有何不同?

在 PyPI 上公開的「MetaTrader5」套件,是從外部使用 Python 腳本直接存取 MT5 本體的方法。相對地,MQL5 組合的 Python 是在 MT5 內部呼叫 Python 程式碼的機制。
基本使用方式相似,但目的與實作方式不同。若是一般的自動交易或資料分析,PyPI 版已足夠。

Q3. 模擬帳戶與實盤帳戶的行為會有差異嗎?

是的,會有。模擬帳戶因為沒有實際資金,成交速度、點差、滑點等可能與實盤帳戶不同。在正式運用自動交易前,建議一定要在實盤帳戶以小額進行測試。

Q4. Walk‑Forward 分析是什麼?

Walk‑Forward 分析是一種驗證交易策略或參數通用性的手法。將歷史資料分為「學習期間」與「驗證期間」,反覆進行優化與測試,以評估策略是否能在未來未知資料上繼續有效。

Q5. 在 MT5 中使用 AI 或機器學習模型時,有哪些注意事項?

在 MT5 中使用 AI 或機器學習模型時,請注意模型的輸入輸出格式以及環境(Python 版本、外部函式庫等)。
特別是將已訓練好的模型部署到正式環境時,建議以 ONNX 或 pkl 檔案保存,以確保可重現性。此外,也別忘了實作通信延遲或錯誤發生時的例外處理。

Q6. MT4 與 MT5 的 Python 連結有何不同?

MT4(MetaTrader4)不支援官方的 Python 連結。雖然有部分非官方的 MT4 套件,但考慮到穩定性與未來性,強烈建議使用 MT5。

Q7. 若庫存或環境設定無法順利進行,該怎麼辦?

首先仔細閱讀錯誤訊息,並參考官方文件或論壇。安裝時的位元數(32bit/64bit)、Python 版本、權限設定等常是原因。若仍無法解決,請將錯誤內容與環境資訊一起在網路上提問,通常能加速解決。

若有不明之處,建議使用官方網站或專業論壇。
即將開始 MT5 × Python 連結的朋友,請參考本文並勇於挑戰。

相關網站

Pythonプログラミングの世界

目次 1 1. はじめに2 2. MT5とPythonを使うメリット3 3. 環境構築手順3.1 【設定の順序・全体の流…

くりっく365