コンテンツにスキップ

【コラム】MT5×Python #2 — データを DataFrame とチャートに

#1 で MT5 と Python がつながったら、次は ヒストリカル足を表にして扱う段階です。スプレッドシートに近い pandas.DataFrame に載せれば、集計や可視化の選択肢が一気に広がります。

この記事の3行まとめ

  • mt5.copy_rates_* で取ったレートを pandas.DataFrame にする
  • 例として mt5_rates_to_dataframe.pyCSV と終値の PNG をまとめて出せる
  • チャートで 週末が「まっすぐ」に見えるのは、休場のあいだも線でつないでいるため(抜けているわけではない)

1. 前提(#1 のおさらい)

  • MT5 ターミナルが起動し、対象銘柄が Market Watch に載っている(または取得可能な状態)。
  • 仮想環境を有効化し、MetaTrader5import できる。
  • 必要なら #1test_mt5.py で一度つながりを確認しておく。

この記事ではさらに pandasmatplotlib を使います。未導入なら仮想環境内で次のように入れてください。

Batchfile
pip install pandas matplotlib

2. レートを DataFrame にする、ということ

MT5 から返ってくるレートは、たとえば copy_rates_from_pos だと 構造体の配列です。これをそのまま pd.DataFrame(rates) に渡すと、列として timeopenhighlowclosetick_volume などが並びます。

timeUNIX 秒(UTC)なので、読みやすくするなら pd.to_datetime(..., unit="s", utc=True) で日時列に変換するのが一般的です。以降、「いつの足か」を日本時間で考えたい場合は、別途 +9 時間するなどの変換が必要になります。


3. スクリプトで CSV とチャートを一気に出す

まず、今回使うスクリプトをダウンロードして scripts\research\ に配置してください。

mt5_rates_to_dataframe.py をダウンロード

mt5_rates_to_dataframe.py の流れです。

  1. mt5.initialize() で接続。
  2. copy_rates_from_pos(銘柄, 時間足, 開始位置, 本数) などで足を取得。
  3. DataFrame にし、time を日時に直す。
  4. to_csv で CSV、matplotlib で終値を折れ線にして PNG 保存。

プロジェクトのルートで、仮想環境を有効化したうえで例えば次のように実行します(パスは環境に合わせてください)。

Batchfile
python scripts\research\mt5_rates_to_dataframe.py

銘柄や本数を変えたいときの例です。

Batchfile
python scripts\research\mt5_rates_to_dataframe.py --symbol EURUSD --bars 300

出力先を変えたいときは --out にフォルダを指定します(なければ作成される想定です)。

Batchfile
python scripts\research\mt5_rates_to_dataframe.py --out C:\work\mt5_out

成功すると、指定フォルダに 銘柄_H1_本数.csv と、終値だけを描いた 同じ名前_close.png のようなファイルが並びます。ターミナルに head 数行が出れば、中身のイメージもつかみやすいです。

mt5_rates_to_dataframe 系で出力した終値チャートの例(USDJPY・H1・本数は実行時の指定による)

うまく取れないとき

  • 銘柄名はブローカー表示と一致させる(USDJPYUSDJPY. のような違いに注意)。
  • Market Watch に無い銘柄は取得できないことがあります。
  • 週末・メンテ時間はデータが薄い・空に近いことがあります。

4. チャートの「見え方」について

時刻はスクリプトの例によっては 軸ラベルが UTC になっています。生活の時刻と突き合わせるときは、9 時間ずれているのはおかしいのではなく、基準が違うと思うと混乱が減ります。

週末について。外国為替は週末に取引が止まるため、土日のバーが無いのが普通です。それでも matplotlib の折れ線チャートでは、金曜の終値と月曜の始値のあいだを、線でつなぐので、グラフ上は まっすぐな対角線のように見えることがあります。これは 「週末も動いた」という意味ではなく、描画の都合です。分析するときは、CSV の timeを見て欠損を確認するほうが確実です。


次回予告

#3 では ストラテジーテスターに触れます。軽い EA(EA_Smoke_LightMA_v1)でバックテストを実行し、HTML を保存する流れです。あわせて「公式 Python API ではテスターを起動できない」点を押さえます(HTML を Python で読むのは #4)。


免責の一文

本記事は検証・学習用の技術メモであり、投資助言ではありません。FX には損失リスクがあります。最終判断はご自身の責任でお願いします。


#1 に戻る 連載マップ #3 へ


関連用語

— SPONSORED —