【コラム】MT5×Python #5 — 取引履歴を pandas で集計する¶
#4 までが テスターが吐いた HTML だったのに対し、ここでは 実際の口座で約定した履歴を扱います。ヒストリカル足や テスター結果とは別のデータ源です。まずは デモ口座で読み取りから始めるのが安全です。
この記事の3行まとめ
history_deals_get/history_orders_getで期間を指定し、約定・注文履歴を取得できる- タプルの列を
pandas.DataFrameにし、集計・CSV 出力に回せる - 自動売買の送信とは切り分け、まずは 読み取りに慣れる
1. 何が取れるか¶
history_deals_get— 約定(Deal) に関する履歴。損益の集計などに使いやすいです。history_orders_get— 注文(Order) の履歴。キャンセルや保留も含めたいときに向きます。
いずれも 日時範囲を指定します。時刻は ブローカーのサーバー時間基準で扱われることが多く、#2 と同様、UTC と JST の混同に注意してください。
公式ドキュメントの引数に従い、開始・終了を datetime で渡すパターンが一般的です。
2. DataFrame へ載せる¶
返り値は タプルの配列であることが多いです。先頭要素を見て、列名を決めて pandas.DataFrame にします。
deals = mt5.history_deals_get(date_from, date_to)
if deals is None or len(deals) == 0:
# データなし
...
df = pd.DataFrame(list(deals), columns=deals[0]._asdict().keys())
列名は _asdict().keys() で揃えると、手元の環境と列の対応が取りやすいです。あとは groupby、sum、to_csv など、いつもの pandas です。
例として mt5_data_fetcher.py では、同様のパターンで history_deals_get を DataFrame に載せている箇所があります。手元のコードと照らし合わせてください。
3. コマンドプロンプトで試す(サンプルスクリプト)¶
#1 と同様、コマンドプロンプトで 仮想環境を有効化したうえで Python を実行します。MT5 は起動したまま、対象口座にログインしておいてください(デモ推奨)。
- 期間を決める — たとえば「直近 30 日」なら、終端を「今」、開始を 30 日前にします。取引が無い期間を指定すると 行数 0 になります。
mt5.initialize()— 接続に失敗したら、ターミナル未起動・未ログインなどを疑います。history_deals_get(開始, 終了)— 返り値がNoneのときは API 側の失敗、空タプルのときはその期間に約定なしです。- DataFrame 化 — 記事「2」のとおり
pd.DataFrame(list(deals), columns=...)で表にします。 to_csv— 文字化けしにくいよう UTF-8(BOM 付き)で保存する例にしています。mt5.shutdown()— 必ず呼び出して接続を閉じます。
上の流れをそのまま実行できる サンプルを配布しています(注文は一切送りません。読み取りだけです)。ダウンロードして scripts\research\ に配置してください。
mt5_history_deals_sample.py をダウンロード
--days 30… 直近 30 日(省略時も 30)--from-date/--to-date…YYYYMMDDで開始・終了を細かく指定(指定時は--daysより優先して開始側を決めます)--out ファイル名.csv… 出力先(既定はdeals_export.csv)
# 流れの要約(サンプルスクリプトと同じ)
if not mt5.initialize():
...
deals = mt5.history_deals_get(date_from, date_to)
df = pd.DataFrame(list(deals), columns=deals[0]._asdict().keys())
df.to_csv(args.out, index=False, encoding="utf-8-sig")
mt5.shutdown()
プロジェクトのルートで、仮想環境を有効化したうえで例えば次のように実行します(パスは環境に合わせてください)。
cd C:\Users\あなたの名前\プロジェクトフォルダ
.venv\Scripts\activate.bat
python scripts\research\mt5_history_deals_sample.py --days 30 --out deals_export.csv
4. 運用上の注意¶
本番口座で試す前に、デモで動作と取得範囲を確認してください。発注・決済を行うコードは別の責任とリスクがあります。本連載では 読み取りにとどめます。
取引が 0 件のとき
デモ口座で一度も取引していない場合や、指定期間に約定がない場合、history_deals_get は空(0 件)を返します。これはエラーではありません。サンプルスクリプトは 指定期間に約定がありません と表示して正常終了します。まずは 直近で取引があった期間を指定するか、デモ口座で 小さいロットで 1 回だけ取引してからお試しください。
次回予告¶
#6 では、ここまでの ヒストリカル・テスター HTML・履歴を、地図に置き換えます。MT5 のテスター/最適化と Python 上の別シミュレーションの二系統、そして この連載の主線(「MT5 で試す + Python で集計」)を整理します。連載の終わりは #8 です。
免責の一文¶
本記事は検証・学習用の技術メモであり、投資助言ではありません。FX には損失リスクがあります。最終判断はご自身の責任でお願いします。