コンテンツにスキップ

MT5とPythonの連携:ヒストリカルデータ取得

MT5とPythonの連携で金融データ分析が可能

金融分析において、リアルタイムの市場データを用いることは非常に重要である

MT5は盛んに使われている金融取引プラットフォームだが、分析のためにPythonといったデータサイエンス向け言語と連携することで、更なる活用が期待できる

PythonからMT5にアクセスすることで、任意の期間のTICKデータを取得でき、pandasなどを使った効率的なデータ処理が実現が可能となる

Pythonの金融データ処理のメリットとMT5との連携方法についてまとめる

MT5データをPythonで取得・加工するコード

MT5にPythonから接続し、指定した期間の価格データを取得してpandasのDataFrameに変換し、CSVファイルとして保存する処理

import MetaTrader5 as mt5
import pandas as pd
from datetime import datetime, timezone
import pytz
import os

try:
    # MT5に接続
    if not mt5.initialize():
        print("initialize() failed, error code =", mt5.last_error())
        quit()

    # タイムゾーンをUTCに設定する
    symbol = "EURUSD"
    timeframe = mt5.TIMEFRAME_M1
    timezone = pytz.timezone("Etc/UTC")
    utc_from = datetime(2022, 8, 1, tzinfo=timezone)
    utc_to = datetime(2023, 8, 1, hour = 13, tzinfo=timezone)
    rates = mt5.copy_rates_range(symbol, timeframe, utc_from, utc_to)

    if rates is None:
        raise Exception("No data received, error code =", mt5.last_error())

    if len(rates) == 1:
        rates = [rates[0]]

    # DataFrameに変換
    df = pd.DataFrame(rates,
        columns=['time', 'open', 'high', 'low', 'close', 'tick_volume', 'spread', 'real_volume'])

    # タイムスタンプを変換
    df['time'] = pd.to_datetime(df['time'], unit='s')

    # CSVファイルとして保存
    csv_folder = 'csv'
    if not os.path.exists(csv_folder):
        os.makedirs(csv_folder)

    from_date_str = utc_from.strftime("%Y%m%d")
    to_date_str = utc_to.strftime("%Y%m%d")
    csv_file = os.path.join(csv_folder, f'{symbol}_{timeframe}_{from_date_str}_to_{to_date_str}.csv')
    df.to_csv(csv_file, index=False)

    print(f"{csv_file} has been saved.")

except Exception as e:
    print("An error occurred:", str(e))

finally:
    # MT5との接続を閉じる
    mt5.shutdown()

実行すると、以下のようなCSVファイルを取得できる

time,open,high,low,close,tick_volume,spread,real_volume
2022-08-01 00:00:00,1.02083,1.02083,1.02083,1.02083,1,183,0
2022-08-01 00:03:00,1.02083,1.02083,1.02083,1.02083,1,183,0
2022-08-01 00:05:00,1.02083,1.02111,1.02083,1.02111,5,155,0
2022-08-01 00:06:00,1.02111,1.02111,1.02111,1.02111,1,155,0
2022-08-01 00:07:00,1.02111,1.02134,1.02102,1.02134,9,68,0

MT5への接続とデータ取得

initialize()で接続し、copy_rates_range()で任意期間のTickデータを取得できる

タイムゾーン変換

timezoneを意識してUTCに揃えることで、時刻のずれを防ぐ

pandasでのデータフレーム処理

取得データをpandasのDataFrameに変換することで、柔軟なデータの扱いが可能に

CSVでの保存

後の再利用のためにCSVファイルで保存



このように、Pythonを使ってMT5データを扱う処理を実装できる

複数のMT5をインストールしている場合、mt5.initialize()は自動的にMT5を見つけに行く

特定のMT5を指定したい場合は、フルパスを引数に渡す

file_path = "C:\\Program Files\\OANDA MetaTrader 5 Terminal\\terminal64.exe"

if not mt5.initialize(path=file_path):
    print("initialize() failed, error code =", mt5.last_error())
    quit()

金融データ分析のPython活用事例

このようにして取得したデータを使って、以下のような金融データ分析をPythonで行うことができる

技術分析指標の計算・可視化

移動平均線、ボリンジャーバンドなどの技術分析を実施

機械学習による価格予測モデル

LSTMなどの手法を用いた価格予測AIの構築

統計的手法による異常検知

変動の統計解析により、異常な変動を検知

自動売買システムのバックテスト

戦略のシミュレーションによるバックテスト

このように、MT5とPythonを連携することで、高度な金融データ分析が可能となる

Reference