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