PythonでFXのバックテストするためのデータをMT5から取得する

作成:2022/10/10
更新:2023/02/23

PythonでFXのバックテストするためのデータをMT5から取得する MetaTrader5==5.0.37

Pythonでバックテストするのに、FXのデータ持ってくるのが結構めんどくさかった。

色々みてたらMT5から簡単に取得できると!

Pythonとの統合のためのMetaTraderモジュール
https://www.mql5.com/ja/docs/python_metatrader5

pip install MetaTrader5


Jupyter Notebookで。

import MetaTrader5 as mt5

if mt5.initialize():
    print('Connected to MT5 Version', mt5.version())
else:
    print('initialize() failed, error code = ', mt5.last_error())


from datetime import datetime, timezone
import pandas as pd

# ドル円の5分足
symbol = "USDJPY"
tf = mt5.TIMEFRAME_M5

date_from = datetime(2023, 1, 1, tzinfo=timezone.utc)
date_to = datetime(2023, 1, 31, tzinfo=timezone.utc)

rates = mt5.copy_rates_range(symbol, tf, date_from, date_to)

df = pd.DataFrame(rates)
df['Time'] = pd.to_datetime(df['time'], unit='s')
df.set_index(df['Time'],inplace=True)
ohlc =df.rename(columns={"open":'Open','high':'High','low':'Low','close':'Close','tick_volume':'Volume'})
ohlc = ohlc.drop(columns=['spread','real_volume','Time','time'],axis=1)

ohlc


これで1カ月分取得できるはず。

copy_rates_range関数
https://www.mql5.com/ja/docs/python_metatrader5/mt5copyratesrange_py

copy_rates_range(
  symbol,      // 銘柄名
  timeframe,    // 時間枠
  date_from,   // バーがリクエストされている最初の日
  date_to       // バーがリクエストされている最後の日
  )


似た関数がいくつかあるの自分が使いやすいの探すとよい

取得できる足はここに一覧がある
https://www.mql5.com/ja/docs/python_metatrader5/mt5copyratesfrom_py#timeframe
6分足なんてあるのね

あとはこのデータを使って、backtestingで遊んで現実を見よう。


バックテストでググったときに最初に見た記事がチャートデータはサイトからダウンロードしてたので、MT5につなぐという発想がなくなってしまった。
色々な方法を最初に考えるべきだった。反省。


参考
PythonでMetaTrader5のデータを取得する
https://qiita.com/toyolab/items/bcd50b35e1cbf1cae5d5