「Excelでは限界を感じるが、プログラミングは難しそう」と感じているトレーダーは多い。しかしPythonは、データ分析に特化したライブラリが充実しており、数行のコードでExcelでは困難な高度な分析が可能になる。
この記事では、Pythonを使ってFXトレード記録を分析する方法を、プログラミング初心者でも理解できるレベルで解説する。環境構築から実際の分析コードまでカバーするので、手を動かしながら読み進めてほしい。
なぜPythonがトレード分析に最適なのか
データ分析ライブラリの充実
Pythonには「pandas」というデータ操作ライブラリがあり、CSVの読み込みからフィルタリング、集計、統計計算まで数行で実行できる。Excelの関数やピボットテーブルで苦労していた作業が、はるかにシンプルなコードで再現できる。
可視化ライブラリで美しいグラフ
「matplotlib」や「plotly」を使えば、エクイティカーブ、勝率の推移、時間帯別のヒートマップなど、Excelでは作成困難なグラフを簡単に描画できる。視覚化はパターン発見の最強の武器だ。
分析の再現性と自動化
一度書いたコードは何度でも再利用できる。毎週のCSVを同じスクリプトに通すだけで、同じ基準の分析が自動的に完了する。Excelのように手作業で集計し直す必要がない。
環境構築:最初の一歩
Pythonの環境構築は以前より格段に簡単になっている。Google Colabを使えばインストールすら不要だ。ローカルで実行する場合も、Python公式サイトからインストーラをダウンロードして実行するだけだ。
必要なライブラリ
トレード分析に必要なライブラリは主に3つだ。pandasはデータの読み込みと集計を担当し、matplotlibはグラフの描画を担当し、numpyは統計計算を高速に処理する。ターミナルから「pip install pandas matplotlib numpy」の1行でまとめてインストールできる。
CSVファイルの準備
分析の第一歩は、トレード記録をCSV形式で用意することだ。必要なカラムは、日時・通貨ペア・売買方向・エントリー価格・決済価格・損益pips・損益金額の7項目が基本になる。MT4やTradingViewからエクスポートしたCSVをそのまま使うこともできる。
基本分析:勝率・損益比・PFを計算する
CSVの読み込みと基本統計
pandasのread_csv関数でファイルを読み込み、describe関数で基本統計量を一発表示できる。損益カラムの正負で勝ち負けを判定し、勝率はlen関数を使って勝ちトレード数を全トレード数で割るだけだ。
プロフィットファクターの計算
PFは総利益を総損失の絶対値で割った値だ。Pythonでは、損益カラムが正の値の合計と負の値の合計を算出し、前者を後者の絶対値で割ればよい。PF1.0以上なら期待値がプラスで、1.5以上が安定した利益の目安とされている。
月別・週別の損益集計
pandasのgroupby関数と日付カラムを組み合わせれば、月別や週別の損益を簡単に集計できる。resample関数を使えば、日次・週次・月次の集計を自由に切り替えられる。この時系列集計は、自分のパフォーマンスのトレンドを把握するのに不可欠だ。
応用分析:Excelでは困難な分析を実行する
時間帯別ヒートマップ
横軸を曜日、縦軸を時間帯としたヒートマップを作成すると、自分が得意な時間帯と苦手な時間帯が一目でわかる。pandasのpivot_table関数で集計し、matplotlibのimshow関数で描画する。赤が損失、緑が利益を表すカラーマップにすると直感的に理解できる。
エクイティカーブの描画
損益の累積合計をグラフにしたものがエクイティカーブだ。pandasのcumsum関数で累積損益を計算し、plot関数で折れ線グラフにする。右肩上がりなら安定して利益が出ており、大きな凹みがあればドローダウンの問題が視覚化される。
連勝・連敗のストリーク分析
勝ち負けの連続パターンを分析するのはExcelでは非常に面倒だが、Pythonなら数行で実現できる。損益の正負をリスト化し、groupby関数で連続する同じ値をグループ化して長さを計算する。最大連敗数やその発生タイミングを特定できる。