【応用】FX講座:パフォーマンスを数値で分析する方法

パフォーマンスを数値で分析する方法

トレード成績は“感覚”で語ると迷子になります。勝った気がしても口座残高は増えない—そんな経験、誰にでもあります。だからこそ、パフォーマンスを数値で分析して、改善の打ち手を明確にしましょう。本記事では、勝率・平均損益・期待値(Expectancy)・R倍数・リスクリワード・プロフィットファクター(PF)・最大ドローダウン(MDD)・回復率・シャープ/ソルティノ比・リスクオブルインなどの主要指標を、表と手順で現場投入できる形に落とし込みます。

分析の前提:データの準備と粒度

まずは確定損益ベースの原データが必要です。最低限の列は以下。

  • 日時(エントリー/エグジット)
  • 銘柄(例:XAUUSD)
  • 方向(Buy/Sell)
  • 損益(通貨建てとR建ての両方が理想)
  • 手数料・スワップ
  • リスク(初期ストップまでの距離 × ロット → 1Rの金額)

粒度は、1トレード単位が基本。ナンピン・分割決済はルール化(例:同一意図の一連の約定を1セットとして評価)。

主要KPIの定義と直感

定義を“直感”で掴むとバイアスが減ります。

  • 勝率(Win Rate)=勝ちトレード数 ÷ 総トレード数。高ければ安心とは限らない
  • 平均勝ち/平均負け(Avg Win/Loss):1回あたりの平均損益。
  • リスクリワード比(RR)=平均勝ち ÷ 平均負け(絶対値)。
  • プロフィットファクター(PF)=総利益 ÷ 総損失(絶対値)。1.3以上で継続性の目安。
  • 期待値(Expectancy)=勝率×平均勝ち − (1−勝率)×平均負け。
  • 最大ドローダウン(MDD):資産曲線のピークからボトムまでの最大下げ幅。
  • 回復率(Recovery Factor)=累積利益 ÷ MDD。1.0超を目指す。
  • シャープ比=超過リターン ÷ リターンの標準偏差。分散の荒さを罰する指標。
  • ソルティノ比=超過リターン ÷ ダウンサイド偏差。下振れの荒さだけを罰する。
  • R倍数(R-Multiple):1トレードの損益を初期リスクRで割った値。システム横断の比較が可能。

まずはこの表:サマリーKPIのひな形

KPI 解説 目安
総トレード数 サンプル数。50以上で議論が安定。 50〜200
勝率 勝ち/総数。 40〜60%
平均勝ち 勝ちトレード平均。 口座規模依存
平均負け 負けトレード平均。
RR(平均勝ち/平均負け) 損小利大を可視化。 ≥ 1.3
PF(総利益/総損失) 収益性の基本指標。 ≥ 1.3
期待値(1トレード) 平均的な1回の利益。 > 0
MDD(最大DD) 最悪期の下げ幅。 ≤ 月利目標の1.5〜2倍以内
回復率 累益÷MDD。 ≥ 1.0
シャープ比 ボラ調整リターン。 ≥ 1.0
ソルティノ比 下振れ調整。 ≥ 1.2

期待値(Expectancy)を武器にする

期待値がプラスなら、回数を重ねるほど口座は増えやすい。式は:

E = p × AvgWin − (1 − p) × AvgLoss
RR = AvgWin / AvgLoss
⇒ E = AvgLoss × (p × RR − (1 − p))

RRを上げるには、利確を伸ばす/損切りを早めるの両輪。p(勝率)は、フィルタ精度・市場選択・時間帯最適化で改善します。

ドローダウンと回復力を測る

同じ利益でも、MDDが浅いほど心理的・資金的に持続可能。資産曲線からピーク—ボトムを走査してMDDを取得し、回復率=累積利益/MDDで耐性を評価。回復率1.0未満が続く場合は、ポジションサイズ縮小・システム停止ラインを検討。

ボラとリスク調整:シャープ/ソルティノ

単なる利益ではなく、どれだけ“なめらか”に増やしたかを測るのがリスク調整指標。デイトレやスキャルでは日次/週次のリターン系列を作って計算。

Sharpe = (μ - r_f) / σ
Sortino = (μ - r_f) / σ_downside

ここでμは平均リターン、r_fは無リスク金利、σは標準偏差、σ_downsideは負の偏差のみの標準偏差。

継続運用のカギ:リスク・オブ・ルイン

戦略は“破綻しないこと”が最優先。簡易近似:

Risk of Ruin ≈ ((1 - edge) / (1 + edge))^(Capital/RiskPerTrade)
edge = p × RR − (1 − p)

リスク/トレード(%)が大きいほど破綻確率は急増。1回あたり1R=口座の0.5〜1.0%を基本線に。

MT5/取引履歴からの実務フロー

  1. 口座履歴を日付・シンボル・損益・手数料付きでエクスポート(HTML/CSV)。
  2. Excel/Googleスプレッドシートに取り込み、1トレード=1行に正規化。
  3. 初期ストップ距離からR(円)を算出し、損益をR建てにも変換。
  4. サマリーKPI表と月次ヒートマップを更新。
  5. 停止ライン:月次MDDがX%超でロット半減、Y%で停止 & 再検証。

自動化テンプレ:Python/Excelの数式

最小構成のPython例(CSV: columns=[date,symbol,pl,fee,init_r])。


import pandas as pd

df = pd.read_csv("trades.csv", parse_dates=["date"])
df["net"] = df["pl"] - df["fee"]
df["R"] = df["net"] / df["init_r"]
win = (df["net"] > 0)
p = win.mean()
avg_win = df.loc[win, "net"].mean()
avg_loss = -df.loc[~win, "net"].mean()
RR = avg_win / avg_loss
PF = df.loc[win, "net"].sum() / (-df.loc[~win, "net"].sum())
E = p * avg_win - (1 - p) * avg_loss
df["equity"] = df["net"].cumsum()
roll_max = df["equity"].cummax()
dd = df["equity"] - roll_max
MDD = -dd.min()
recovery = df["net"].sum() / MDD if MDD > 0 else float("inf")
print(p, RR, PF, E, MDD, recovery)

監視ダッシュボードと運用ルール

  • 月次KPI表:勝率、RR、PF、E、MDD、取引回数。
  • 時間帯別:東京/ロンドン/NYでの期待値差。
  • 銘柄別:XAUUSD/GBPJPY/US30などで比較。
  • セットアップ別:ブレイク/押し目/逆張りでR分布を比較。
  • ルール:2週連続でE<0 → ロット半減。MDD>=X% → 停止。

よくある落とし穴と対策

  • サンプル不足:30未満は偶然が支配。まずは50。
  • 手数料無視:特にゴールドや指数のスプレッドはPFを圧縮。
  • Rの未定義:リスク一定化ができず、比較不能。
  • 複利暴走:連敗期に損益曲線が破綻。最大損失%の枠を設定。
  • 過剰最適化:期間/銘柄を跨いだロバスト性テストを。

まとめ

“勝率が高いから良い戦略”ではなく、期待値・PF・MDD・回復率などを総合評価して、破綻しないスケーリングを設計しましょう。本記事の表・数式をそのままテンプレとして、月次でモニタリングすれば、改善サイクルが回り始めます。