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 本體。
從官方網站下載
從 MT5 官方網站(https://www.metatrader5.com/ja/download)下載最新版 MT5。執行安裝程式,並依照畫面指示完成安裝。開設模擬帳戶
建議初次使用者開設模擬帳戶。於 MT5 的「檔案」選單中選擇「申請模擬帳戶」,填寫必要資訊,即可免費使用虛擬資金進行交易測試。啟用自動交易
為於 MT5 執行自動交易或外部連結,必須將「自動交易」開啟。確認工具列的「自動交易」按鈕已變為綠色。確認伺服器資訊與帳戶資訊
帳戶編號與伺服器資訊在 Python 端連線時可能需要,建議事先備妥。
3.2 Python 的安裝與套件安裝
接下來配置 Python 開發環境。
安裝 Python 本體
從官方網站(https://www.python.org/downloads/)下載並安裝最新版 Python(建議 3.10 以上)。安裝時請勾選「Add Python to PATH」。準備編輯器(如 VS Code)
作為程式編寫工具,Visual Studio Code(VS Code)相當受歡迎。可輕鬆進行語言切換,且 Python 擴充功能完善。安裝 MetaTrader5 套件
於命令提示字元或終端機執行以下指令,安裝 MT5 連結套件。
pip install MetaTrader5
- (可選)安裝資料分析函式庫
可同時安裝 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–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 應用的「入口」。若想挑戰更高階的策略與演算法,以下學習資源亦值得參考:
- MQL5 官方文件與論壇:https://www.mql5.com/ja/docs/python_metatrader5
- PyPI(MetaTrader5 套件)官方:https://pypi.org/project/MetaTrader5/
此外,務必在模擬帳戶中重複測試程式,並徹底執行風險管理。
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 連結的朋友,請參考本文並勇於挑戰。
相關網站
目次 1 1. はじめに2 2. MT5とPythonを使うメリット3 3. 環境構築手順3.1 【設定の順序・全体の流…



