本稿では、初心者でも自分の約定履歴(ブローカーの取引レポートCSV)を材料にして、統計的に根拠のある「勝ちパターン(エッジ)」を発見し、少額から収益化するまでの道筋を、ノーコード(Excel / Google スプレッドシート中心)で具体的に解説します。再現性のある手順とテンプレートを提供しますので、今日からトレードの意思決定を「勘」から「データ」へ置き換えていきましょう。
- この記事のゴール
- なぜ「日誌のデータ化」が初心者の最短ルートなのか
- 準備物:口座・ツール・ファイル構成
- CSVの中身:最低限の必須列と意味
- 安全に取得・整形する手順(Excel / Sheets)
- 正しい指標定義(誤解しやすいポイント)
- ピボットで「効く条件」を可視化する
- 初心者がまず試すべき3つの「簡易エッジ」
- フィルタ設計:やる取引・やらない取引を数式で決める
- 検証の落とし穴と対策
- 実装フェーズ:少額で現金化するまで
- MT4/MQL4で「戦略ID付きログ」を残す(テンプレEA)
- 週次レポートのフォーマット(テンプレ)
- 実例シナリオ:初心者Aさんの2週間改善
- 資金管理:致命傷を避けるサイズの決め方
- Q&A:よくある詰まりポイント
- まとめと次の一手
- 付録:Sheets関数スニペット集
この記事のゴール
- 約定履歴CSVを安全に取得・整形し、ミスのない分析用データセットを作る。
- 勝率・損益比・期待値・ドローダウンなどの指標を正しく定義して、自分に効くパターンを数値で可視化する。
- 曜日・時間帯・銘柄属性・ボラティリティなどの軸で「やる取引/やらない取引」を線引きする。
- 少額での実地検証→改善→定着という反復サイクルをセットアップする。
なぜ「日誌のデータ化」が初心者の最短ルートなのか
多くの初心者は「勝てる手法探し」の前に、自分が何で負けているかを把握できていません。市場はコントロールできませんが、自分の再現行動はコントロールできます。そこで、まずは過去の自分の売買から統計的に優位な条件を抽出し、「やらないことリスト」を作るだけで損失の多くは消せます。これは資金量や知識量に依存せず、今日から誰でも実行できる改善です。
準備物:口座・ツール・ファイル構成
口座・ツール
- ブローカー約定履歴のCSVエクスポート機能(株・FX・暗号資産いずれも可)。
- Excel または Google スプレッドシート(以降「Sheets」)。
- (任意)MT4/MT5、TradingView。取引コメント/タグを付けられると分析精度が上がります。
フォルダ構成のテンプレ
journal/
├─ raw/ (生のCSVを保存:編集禁止)
├─ clean/ (整形済みCSV)
├─ reports/ (日次・週次レポートHTML/PDF)
└─ templates/ (ピボット・関数テンプレ)
CSVの中身:最低限の必須列と意味
ブローカーによって列名は異なりますが、下記が最低限あれば分析可能です。
列名(例) | 意味 | データ型 |
---|---|---|
timestamp | 約定日時(現地またはJST)。 | 日時 |
symbol | 銘柄/通貨ペア/ティッカー。 | 文字列 |
side | 買い=BUY / 売り=SELL。 | 文字列 |
qty | 約定数量。 | 数値 |
price | 約定価格。 | 数値 |
exit_price | 手仕舞い価格。 | 数値 |
gross_pl | 売買損益(手数料・スワップ等控除前)。 | 数値 |
fee | 売買手数料・スリッページ・スワップ等の合計。 | 数値 |
net_pl | 実現損益=gross_pl – fee。 | 数値 |
comment | 戦略IDやメモ(例:breakout_A)。 | 文字列 |
列が足りない場合は、後述の計算列で補います。最重要は「net_pl(最終損益)」を正しく持つことです。
安全に取得・整形する手順(Excel / Sheets)
生データの扱い
- raw/にCSVを保存(上書き禁止)。
- 別ファイルとしてclean/にコピーし、整形は必ずこちらで実施。
日付と数値の正規化
- 日付は ISO 形式(YYYY-MM-DD HH:MM:SS)に統一。
- 小数点区切り(, / .)を確認し、全列のデータ型を明示設定。
- 通貨や%記号は削除し、数値のみにします。
計算列を追加
hour
(=HOUR(timestamp))weekday
(=WEEKDAY(timestamp,2)) ※1=月, …, 7=日hold_minutes
(約定〜手仕舞いの分数)r_multiple
(=net_pl / 想定リスク額)is_win
(net_pl > 0 → 1, それ以外 0)
想定リスク額は、エントリー時のストップ幅×数量×ポイント価値で見積もります。ストップを事前に置かない裁量でも、置いたと仮定してRを揃えると比較が容易です。
正しい指標定義(誤解しやすいポイント)
基本4指標
- 勝率 = 勝ちトレード数 / 総トレード数。
- 損益比(RR) = 平均利益 / 平均損失(絶対値)。
- 期待値 = 勝率×平均利益 − (1 − 勝率)×平均損失。
- プロフィットファクター(PF) = 総利益 / 総損失(絶対値)。
実務で重要な3指標
- 最大ドローダウン:累積損益曲線の最大落ち込み。現金残高で把握。
- 保持時間の偏り:勝ち負けで保持時間がどう違うか。
- 手数料・スリッページ負担:取引コストがPFをどれだけ圧縮しているか。
勝率だけ良く見せかける「早利確・損切り粘り」は、RRが悪化して期待値がマイナスになります。必ず期待値とPFを併記しましょう。
ピボットで「効く条件」を可視化する
Excelでの作成手順
- データ範囲を選択 → 「挿入」→「ピボットテーブル」。
- 行:
weekday
、列:hour
、値:net_pl
の合計。 - 同じピボットに「値の追加」で
is_win
の平均(=勝率)も追加。 - 条件付き書式で色分け(PF>1.2や勝率>55%を濃色など)。
Sheetsでの作成手順
- データ → ピボット テーブル → 新しいシート。
- 行:
weekday
、列:hour
、値:net_pl
合計 +is_win
平均。 - スライサーで
symbol
やside
で絞り込み。
この一枚で「曜日×時間帯の相性」が一目瞭然になります。勝っている帯だけを残して他を削るだけで、損益の分布は大きく改善します。
初心者がまず試すべき3つの「簡易エッジ」
1)曜日×時間帯の相性を固定
例えばFXならロンドン開始直後(日本時間16〜18時)やNY早朝(21〜23時)にボラティリティが高まりやすい時間帯があります。自分の履歴で最もPFが高い帯を「積極ゾーン」として固定し、それ以外の時間は原則見送りにします。
2)勝ちやすい保持時間を守る
勝ちトレードの保持時間中央値を計算し、その±25%に収まるように利確・損切りの時間制約をあらかじめ決めます。時間切れの自動手仕舞いを入れると、保有の引き延ばし癖を矯正できます。
3)手数料負担の重い銘柄を避ける
同じ戦略でも、スプレッド/手数料/借株料/スワップが高い銘柄はPFが伸びません。コストの安い銘柄・口座タイプへ移すだけで改善するケースは多いです。
フィルタ設計:やる取引・やらない取引を数式で決める
ピボットで見つけた条件を、実運用で使えるIF式に落とします。
// Excelの例(許可ゾーンの時だけエントリーOK)
=IF( AND(PF_weekday_hour >= 1.2, WinRate_weekday_hour >= 0.55), "OK", "SKIP")
この「OK」以外は見送るだけで、無駄打ちが激減します。
検証の落とし穴と対策
- 過剰最適化:条件を細かく切りすぎると偶然に当てはまります。トレード数が各セル30以上になるまで粗く。
- データ汚染:同じデータで条件探索と検証を行わない。期間を前半/後半で分割し、後半で再確認。
- コスト無視:手数料・スリッページを必ず含める。バックテストでも固定スリップを上乗せ。
実装フェーズ:少額で現金化するまで
- 紙ルール化:入る/入らない、手仕舞い、時間切れ、最大同時ポジション数をA4一枚に。
- 少額実装:最小ロットで2〜4週間。毎週同じピボットで再評価。
- サイズ調整:期待値がプラスでDDが資金に対して許容内なら、数量を段階的に増やす。
MT4/MQL4で「戦略ID付きログ」を残す(テンプレEA)
裁量でも、EAを「記録係」として使うと後分析が簡単です。下のテンプレはエントリー/イグジット時にコメントへstrategy_id
を埋め込み、CSV風のログをExperts
タブへ出力します(必要に応じてファイル出力に拡張できます)。
//+------------------------------------------------------------------+
//| SimpleLoggerEA.mq4 - ログ専用テンプレ(成行/決済時に記録) |
//+------------------------------------------------------------------+
#property strict
string strategy_id = "breakout_A"; // ←自分の戦略名
int magic = 24680;
int OnInit(){ Print("Logger start: ", strategy_id); return(INIT_SUCCEEDED); }
void OnDeinit(const int reason){ Print("Logger stop"); }
void OnTick(){
// 例:時間帯フィルタ(日本時間16-23時のみ)
datetime t = TimeCurrent();
int hourJST = TimeHour(t + 9*60*60);
if(hourJST < 16 || hourJST > 23) return;
// ダミー条件:移動平均クロスで1回だけ試し買い(最小ロット)
static bool done=false;
if(done) return;
double ma_fast = iMA(NULL,0,5,0,MODE_SMA,PRICE_CLOSE,0);
double ma_slow = iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0);
if(ma_fast > ma_slow){
double lot = MarketInfo(Symbol(), MODE_MINLOT);
int ticket = OrderSend(Symbol(), OP_BUY, lot, Ask, 2, 0, 0,
strategy_id, magic, 0, clrNONE);
if(ticket>0){ Print("ENTRY,",strategy_id,",",Symbol(),",BUY,",DoubleToStr(Ask,Digits),",",TimeToString(t)); done=true; }
}
// 利確/損切り・時間切れなどの実装は任意で追加
}
void OnTrade(){
// 約定イベントで決済を検出しログ出力
for(int i=0;i<OrdersHistoryTotal();i++){
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){
if(OrderMagicNumber()==magic && StringFind(OrderComment(),strategy_id)>=0){
if(OrderCloseTime()==TimeCurrent()){
Print("EXIT,",strategy_id,",",Symbol(),",",OrderType()==OP_BUY?"BUY":"SELL",
",",DoubleToStr(OrderClosePrice(),Digits),",",TimeToString(OrderCloseTime()),
",NET_PL,",DoubleToStr(OrderProfit()-OrderSwap()-OrderCommission(),2));
}
}
}
}
}
//+------------------------------------------------------------------+
実運用では、EAが成績の「タグ付け」とログ出力を担い、エントリー/決済自体は裁量でも構いません。重要なのは戦略IDごとに後から切り分けられることです。
週次レポートのフォーマット(テンプレ)
毎週末に同じフォーマットで記録・振り返りを行います。以下をテンプレ化してreports/に保存します。
- 総損益、PF、最大DD、トレード数。
- トップ3の貢献要因(時間帯/銘柄/方向など)。
- ワースト3の足を引っ張る要因と、翌週からやらないルール。
- 次週の実験(例:利益確定トレーリングを+3pips延長)。
実例シナリオ:初心者Aさんの2週間改善
仮想の履歴から、改善プロセスを示します。
- 初期状態:総損益 -18,000円、勝率54%、RR 0.7、PF 0.83、最大DD -24,000円。
- ピボット分析:月〜木の21〜23時のBUYがPF 1.35、金曜深夜のSELLがPF 0.6。
- ルール化:21〜23時BUYのみ実施、その他は原則スキップ。時間切れ30分の自動決済を追加。
- 結果(2週目):総損益 +12,600円、勝率58%、RR 1.1、PF 1.32、最大DD -9,800円。
「やらないこと」を決めただけでDDが半分以下になり、期待値がプラスに転じました。
資金管理:致命傷を避けるサイズの決め方
1トレードの想定損失(R)を口座残高の0.5〜1.0%以内に制限します。期待値Eと勝率pが分かれば、近似ケリーで上限サイズの目安を得られます。
近似ケリー f* ≈ p - (1 - p) / RR (RR = 平均利益 / 平均損失)
実運用は f*/2 〜 f*/3 程度に抑える
また、最大DDに対して資金の何%を許容するかをあらかじめ決め、その範囲でしかサイズを上げないことが長期生存の鍵です。
Q&A:よくある詰まりポイント
Q. データが少なくて結論が出ません。
A. 粗い分類(例:時間帯は4区分、曜日は平日/金曜/週末)にしてサンプル数を確保します。十分に溜まるまで「やらないこと」の発見に集中しましょう。
Q. 裁量のメモが面倒です。
A. 事前に戦略IDを3つだけに絞り、ボタン一発でコメントへ挿入できるスクリプトを作ると続きます。
Q. 手数料の影響が見積もれません。
A. ブローカーの約定明細から手数料とスリッページを別列に切り出し、トレードごとの負担額を平均・中央値で把握しましょう。
まとめと次の一手
「トレード日誌のデータ化」は、初心者が最初に取り組むべきローリスク・ハイリターンの自己投資です。勝っている時間帯・銘柄・保持時間だけに集中し、やらない取引を明確にするだけで、成績は目に見えて改善します。テンプレを使って、今日から小さく始めてください。
付録:Sheets関数スニペット集
// 勝率(範囲に1/0のis_winがあるとき)
=AVERAGE(FILTER(is_win, 条件式))
// 期待値(net_plの平均値)
=AVERAGE(FILTER(net_pl, 条件式))
// 持ち時間(分)
=(exit_timestamp - entry_timestamp) * 24 * 60
// 特定時間帯抽出(21〜23時)
=FILTER(A:Z, (HOUR(timestamp)>=21) * (HOUR(timestamp)<=23))
// 平均損益比(RR)
=AVERAGE(FILTER(profit, profit>0)) / ABS(AVERAGE(FILTER(profit, profit<0)))
コメント