この記事は、あなた自身のトレード履歴を“データ資産”として解析し、勝てる場面だけに資源を集中するための実務手順を、初学者でも再現できるレベルで具体化したものです。外部の難しい指標や高価なデータは不要です。必要なのは、あなたの約定CSVと、Excel/Googleスプレッドシート(以下「スプレッドシート」)だけです。
到達点は明確です。①数値で自分の強み・弱みを可視化、②勝ちパターンだけを抽出、③ルール化して翌営業日から実装。この“内省→抽出→実装”を1サイクルで回せるようにします。
本ガイドのゴール
- 自分の履歴からKPI(勝率、期待値、PF、最大ドローダウン、平均保有時間)を正しく計算できる。
- 時間帯・曜日・ボラティリティ・方向・セットアップ別に儲かる条件と避ける条件を切り分けられる。
- 抽出した条件をIf-Thenルールへ落とし込み、サイズとOCOで実運用に変換できる。
なぜ「自分の履歴」が最強のアルファ源か
理由は3つです。第一に情報の独占性。あなたの実取引は他者に公開されず、コモディティ化しません。第二に再現性。自分が実行できる条件でのみ最適化するため、机上の空論に陥りません。第三に即時性。今日作ったルールを、明日から小ロットで回せます。
準備物と前提
- ブローカー/取引所からの約定履歴CSV(対象:国内株、FX、暗号資産など)。最低でも「日時、銘柄/通貨ペア、売買、数量、価格、手数料」が必要。
- スプレッドシート(Excel/Google)。ピボットテーブルが使えること。
- 任意:MQL4/MT4を使う場合、履歴を書き出すスクリプト(付録にコードあり)。
データ取得:CSVの取り出し方(共通の考え方)
各社UIは異なりますが、基本は「期間指定 → 約定履歴のエクスポート → CSV保存」です。約定ベースで出力できない場合は、注文履歴を取得後に約定に整形します。保存時は日付はYYYY-MM-DD hh:mm:ssの形式に揃え、タイムゾーンを統一してください。
前処理:必須列と推奨列
列名 | 内容 | 型 | 備考 |
---|---|---|---|
timestamp | 約定時刻 | 日時 | 分解して「日付/時/曜日」列も作る |
symbol | 銘柄/通貨ペア | 文字列 | 先物/オプションは限月も |
side | BUY/SELL | 文字列 | 売り建ても区別 |
qty | 数量 | 数値 | ロット/株数/枚数 |
price | 約定価格 | 数値 | 平均約定ならその値 |
fee | 手数料/スワップ等 | 数値 | なければ0 |
pnl | 損益 | 数値 | 建玉クローズ時に計算 |
holding_min | 保有時間(分) | 数値 | 約定時刻差で計算 |
tag | 任意の理由タグ | 文字列 | 「ブレイク」「押し目」「逆張り」等 |
spread/slip | スプレッド/スリッページ | 数値 | 計測できる場合のみ |
volatility | ボラ指標 | 数値 | ATR/標準偏差など |
KPIの定義(シンプルで十分)
- 勝率 = 勝ち回数 / 総取引数
- 平均損益 = PnL平均(手数料込み)
- 期待値(1回あたり) = 勝率 × 平均勝ち額 − (1−勝率) × 平均負け額
- プロフィットファクター(PF) = 総利益 ÷ 総損失(絶対値)
- 最大ドローダウン = 累積損益の最小落ち込み
- 平均保有時間 = holding_min の平均
初心者はまず「期待値>0」「PF≥1.2」「最大DDが月間利益の1/2以内」を一つの目安としてください(厳密ではありませんが運用上の安全マージンとして有効です)。
セグメンテーション設計:どの切り口で勝てているか
次の軸でピボットを組み、KPIを比較します。
- 時間帯(例:株なら寄り後15分/引け前30分、FXなら東京/ロンドン/NY)
- 曜日(月〜金の傾向差)
- 方向(買い/売り、順張り/逆張り)
- ボラティリティ(上位/下位の分位で区切る)
- セットアップ(tag列:ブレイク/押し目/リバなど)
- 保有時間帯(スキャル/ディ/オーバーナイト)
「すべての場面で勝とうとしない」。勝ちやすい“島”を見つけ、その他は参戦禁止にするだけで、成績は急に安定します。
ピボットテーブルの作り方(Excel/スプレッドシート)
- データ範囲をテーブル化(挿入→テーブル)。
- 挿入→ピボットテーブル→新しいワークシート。
- 行に「時間帯」や「曜日」、列に「方向」など、値に「件数」「平均pnl」「勝率」「PF」を配置。
- 数字の桁・通貨・パーセンテージを整える。負の値は赤表示で視覚化。
これだけで「例えば、水曜のロンドン前後に“買いの押し目”はPF1.8、逆張りはPF0.7」のような、行動に直結する示唆が出ます。
見つかりやすい5つの“勝ち島”テンプレ
- 寄り付き/ロンドン開始直後の順張り:ギャップや初動のモメンタムに追随。保有は短く、伸びなければ即撤退。
- レンジ上限/下限の反発:明確なボックス相場での逆張り。スプレッドが広がる時間帯は回避。
- 中途半端な時間帯を避ける:昼休み・早朝の板薄での逆行は避けるだけでPFが改善。
- 保有時間の最適化:平均保有が長すぎると勝ちが負けに転化。TPまでの平均到達時間を超えたら機械的にカット。
- タグ別の取捨選択:「ニュース追随」は成績が荒れやすい等、あなた固有の癖を数値で確認。
やってはいけない分析
- 過剰最適化(pハッキング):粒度を細かくしすぎると偶然に適合します。最小でも各セルに30件は欲しい。
- ルックアヘッド:将来の情報(確定足の高値/安値など)を使ってルールを組まない。
- 手数料・スリッページ無視:必ず控除。スキャルは特に影響が大きい。
ルール化:If-Thenで十分
抽出した“勝ち島”を、以下のように明文化します。
条件A: 水曜かつロンドン前後(日本時間16:00±30分)かつ 押し目形成後の買い
条件B: ATR上位40%かつ直近高値ブレイク
エントリー: 成行/指値(状況による)
イグジット: 目標利確=リスクの1.2倍、逆指値=直近スイング下
再入場: 同条件が再現したら1回まで
禁止: 経済イベント30分前後は回避
初期は1トレードあたり口座の0.5%リスク程度で始め、連敗が続いたらサイズを半分に縮小します。
資金管理:シンプルな2択
- 固定金額法:常に同じ金額を賭ける(初心者向け、操作が簡単)。
- 固定リスク%法:口座残高×0.5〜1.0%=1回の許容損失。逆指値幅から数量を逆算。
ケリー基準は上級者向けです。誤推定のダメージが大きいので、最初は固定金額か固定%で十分です。
日々の運用フロー(テンプレ)
- 開場30分前:前日のKPIサマリを見る。勝ち島に該当しない時間帯は参戦しないと決める。
- 取引中:ルール通りにOCOを置く。裁量の介入は「撤退を早める方向」に限定。
- 引け/クローズ後:履歴にtagを必ず付けて保存。週末にピボットを更新。
具体例:初心者Aの改善プロセス
初心者Aは1か月で200取引。初期KPIは勝率48%、PF0.92、期待値-50円/回。分析すると「月・火の早朝の逆張り」と「ニュース追随の買い」で大きく負け、逆に「水・木のロンドン前後の押し目買い」ではPF1.7を記録。翌月から前者を全面停止し、後者に集中。結果、勝率52%、PF1.35、期待値+80円/回に転換。トレード数は150に減ったが、資産曲線は右肩上がりに安定しました。
付録1:MT4/MQL4 履歴CSVエクスポート・スクリプト
MT4の「スクリプト」として保存・実行すると、指定期間の取引履歴をCSVに出力します。必要に応じて手数料やスワップの列名をブローカー仕様に合わせてください。
//+------------------------------------------------------------------+
//| Script: ExportHistoryToCSV.mq4 |
//+------------------------------------------------------------------+
#property strict
input datetime FromTime = D'2025.01.01 00:00';
input datetime ToTime = D'2030.12.31 23:59';
input string FileName = "trade_history.csv";
int start() {
int total = OrdersHistoryTotal();
int handle = FileOpen(FileName, FILE_CSV|FILE_WRITE, ';');
if(handle < 0) { Print("File open failed"); return(0); }
FileWrite(handle, "ticket","open_time","close_time","symbol","type","lots","open_price","close_price","profit","commission","swap","comment","magic");
for(int i=0; i<total; i++) {
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
datetime ot = OrderOpenTime();
datetime ct = OrderCloseTime();
if(ot < FromTime || ot > ToTime) continue;
FileWrite(handle,
OrderTicket(),
TimeToStr(ot, TIME_DATE|TIME_MINUTES|TIME_SECONDS),
TimeToStr(ct, TIME_DATE|TIME_MINUTES|TIME_SECONDS),
OrderSymbol(),
OrderType(),
DoubleToStr(OrderLots(),2),
DoubleToStr(OrderOpenPrice(),Digits),
DoubleToStr(OrderClosePrice(),Digits),
DoubleToStr(OrderProfit(),2),
DoubleToStr(OrderCommission(),2),
DoubleToStr(OrderSwap(),2),
OrderComment(),
OrderMagicNumber()
);
}
}
FileClose(handle);
Print("Export done: ", FileName);
return(0);
}
//+------------------------------------------------------------------+
付録2:スプレッドシート数式テンプレ
- 勝率:
=COUNTIF(pnl_range, ">0")/COUNTA(pnl_range)
- 平均勝ち額:
=AVERAGEIF(pnl_range, ">0")
- 平均負け額:
=ABS(AVERAGEIF(pnl_range, "<0"))
- 期待値:
=勝率*平均勝ち額-(1-勝率)*平均負け額
- PF:
=SUMIF(pnl_range,">0")/ABS(SUMIF(pnl_range,"<0"))
付録3:簡易チェックリスト(印刷推奨)
- 今日の取引は「勝ち島」の時間帯だけか。
- 発注は必ずOCOか。逆指値は置いたか。
- エントリー理由のタグを付けたか。
- 保有時間は“平均到達時間”を過ぎていないか。
- ルール外の裁量をしていないか。
まとめ
勝ち続けるために必要なのは新しいインジケーターではなく、自分の履歴を科学することです。ピボットで傾向を掘り、If-Thenでルール化し、OCOとサイズで粛々と実装する。これを1か月回すだけで、あなたのトレードは別物になります。
コメント