過去検証と先行検証――方法・証拠・落とし穴
戦略検証とは、規則がデータ上でどう振る舞い、結果が仮定にどれほど依存するかを調べることです。過去検証は履歴を使い、将来に向けた先行検証は新しいデータの到来に合わせ判断を記録します。どちらも明確な仕様、現実的な費用計上、標本の正直な説明が必要です。本課は十二項目の検証カード、時系列検証の例、実行できる計算ツール、過去シミュレーションと後の観察を比較する手順を示します。証拠が支えることと未確定なことを区別するのが目的で、好成績の曲線を将来収益の約束に変えるためではありません。

元の説明用の図を維持しています。デモは模擬約定を使い、実際の約定はマイクロ口座で評価します。図示した段階の仮定と制約は、以下の方法本文で説明します。
- 過去検証も先行検証も証拠になり得ます。どちらも自動的に持続する優位性を証明せず、デモ約定は実約定ではありません。
- 評価結果を見る前に、問い、版、データ分割、約定モデル、評価基準を固定します。全研究試行の履歴を残します。
- シグナルの利用可能時点と約定時刻は別です。ビッド・アスク、曖昧な足内経路、分割約定、窓開け、費用で結論が変わり得ます。
- 標本数だけでは合否を決められません。損益のばらつき、依存、網羅性、不確実性を報告します。勝率区間は期待値の推定ではありません。
- ブートストラップは仮定の下で代替標本を作り、新しい市場観測を作るのではありません。模擬ドローダウンのパーセンタイルは最大損失保証ではありません。
- 「稼働しない」「未決」も正当な結果です。チェックリストや暦上の経過期間が、実資金取引への移行を義務づけることはありません。
仮説、規則、標本、結果は、 ツールN:戦略検証の手順に記録します。フォームは本章の方法に、ローカル保存・書出し・印刷を補います。
1. 過去検証と先行検証――異なる問い、異なる答え
過去検証が良くても、取引準備が整ったとは限りません。過去検証は指定モデルで過去を調べ、先行検証は新しいデータの到来に合わせ判断を観察します。前者は長い損益標本、後者は時刻・実装・遵守の問題と、異なる情報を与えます。実際の約定と費用を測るのは、適切に管理した実資金段階だけで、デモは模擬約定のままです。一方を他方の代用にすると、欠けた段階が与えるはずの情報を失います。
過去検証:過去についての問い
過去検証は「例えば直前三〜十年に、この規則はどう振る舞ったか」と問います。答えの有用性は、 データ、 約定・費用モデル、研究設計の妥当性に依存します。事後的な検証です。
- 速く実行できます。単純な検証なら五年分を数分で扱えるかもしれませんが、詳細なティックモデルや大規模なパラメータ探索ははるかに長くかかり得ます。
- シグナル頻度と過去期間によって、数百・数千の観測を得られます。
- パラメータ変種を比較できます。その柔軟さは同時に、選択偏りと過剰適合の大きな原因です。
- 異常ティック、欠落足、誤った時刻印、非現実的な費用に敏感です。大標本でも系統的なデータ・モデル誤りは直せません。
過去検証は、 現在の有効性を証明しません。2018〜2022の局面が2024〜2026にも続くとは限りません。同様に、特定の過去の円トレンドの結果を、別の金融政策・介入環境へそのまま移せません。これらは条件変化の例で、特定の戦略が特定期間に必ず成功・失敗するという主張ではありません。日付範囲だけを十分な証拠とせず、局面への関与を記録します。
先行検証:将来に向けた問い
先行検証は「固定規則は新しい観測でどう振る舞い、実装は意図した工程に一致するか」と問い、リアルタイムで先へ進みます。
- 時間がかかります。週五取引なら100取引に約20週間、約五か月必要で、祝日や見送りはまだ考慮していません。
- 標本が小さいままかもしれません。30〜80取引の試行は限られた証拠の例で、全個人トレーダーの実態を確認した記述ではありません。
- 本当の実判断時には、将来の観測を使えません。先読みの経路一つは除けますが、後の分類変更、改定データ、事後編集で記録した評価はなお汚染され得ます。
- スプレッド変化、遅延、要求拒否、 スリッページを発見できます。証拠は方式によります。実取引の記録は実約定を測りますが、デモ・模擬記録は完全には再現しません。
- 数量違い、判断遅れ、見逃し、保有への裁量介入など、人の実装誤りが現れます。
短い先行検証では長期的優位性の主張は決着しません。過去の仮定と現在の実装の差を特定するのに特に役立ちます。長期推論は「先行」という名称ではなく、標本数、依存、局面の網羅性、不確実性で決まります。
三つの検証方式:手動確認・再生・自動化
「過去検証」は三つの異なる作業を指し得ます。証拠を比べる前に区別します。
- 手動チャート確認。 履歴をスクロールして判断を記録し、不明確な規則や境界例を見つけます。後続足が見える通常の確認は、後知恵、都合の良い進め方、結果の記憶に弱く、偏りのない成績標本と提示してはいけません。慎重に設計した盲検の手動手順は、別の、より厳しい作業です。
- 一本ずつの再生。 ツールが後の観測を隠し、順次履歴を見せます。チャート再生、可視テスターモード、専用アプリなどがあり、実際のデータ・時刻の挙動に従います。進行速度を管理すれば、裁量分類の一貫性と応答時間を試せますが、実約定費用は示しません。結果を見た後に巻き戻し、元の判断を置き換えると、その試行は汚染されます。探索的再生は別記録にします。
- 自動の過去検証。 コードが規則をデータへ適用します。大規模で再現可能な標本を効率よく得られますが、第2節の情報漏れ、約定仮定、費用、反復選択の危険すべてが伴います。欠陥規則も、自動化は非常に一貫して再現します。
順序が重要です。コード作成前の再生で、二人が違って解釈する指示を発見できます。テスターは欠けた定義を補わず、開発者が選んだ解釈を実行するだけです。戦略仕様と版は、 評価前に 固定します。手順は、 記事15.3にあり、結果を見た後ではありません。
各段階で分かること・分からないこと
| 論点 | 過去検証 | 先行検証 |
|---|---|---|
| 先読み:判断に将来情報を使用 | 利益報告は自身の漏れを診断しません。コード確認、時刻印確認、管理した再生で発見できます。 | リアルタイム記録は、後の過去再構成との不一致を示せます。元の値と判断を保存します。 |
| パラメータの曲線適合 | 未使用データの評価、ウォークフォワード研究、完全な試行登録簿で調べられますが、自動的な治療法ではありません。 | 十分な観測や局面変化後の悪化が見える場合があります。短い好成績の試行は、なお偶然かもしれません。 |
| 約定費用の過小モデル化 | 入力データと約定モデルが表現する範囲だけです。 | 実費は直接測定できます。デモ・模擬記録の費用は不完全な代用のままです。 |
| 過去期間後の局面変化 | データにない将来条件は観察できません。 | 現在の環境を観察しますが、発見しても継続期間が分かるとは限りません。 |
| 規則を守れない | 機械的検証は通常、プログラムの指示遵守を仮定します。手動手順では使い勝手の問題を一部発見できます。 | 時刻印付き判断は、実際の操作者の見逃し、逸脱、介入を示します。 |
| 推定した 優位性 の精度 | 品質、依存、選別を適切に扱えば、長い標本で不確実性が狭まる場合があります。 | 短い先行試行は不十分なことが多く、週5取引なら半年で約130観測(26 × 5)となり、その数では区間は広くなります。精度は損益分布にも依存します。 |
| 長期のドローダウン(3年以上・複数循環) | 数年あれば過去条件を広く覆えますが、5年で複数の独立した市場循環や最悪の損失経路を保証はできません。 | 短い先行試行は通常、市場循環1つか実際に観察した条件だけを覆います。長い先行記録なら、やがて広い証拠を加えられます。 |
過去の作業は背景と標本の厚みを与え、先行作業は新データと想定運用環境に接しても工程が成り立つかを確認します。速い過去検証と90日の観察では待機費用が大きく違いますが、時間がかかることは後者を省く理由にはなりません。十分間の計算でも三か月の試行でも、必要証拠の収集は保証されません。
過去と先行のシグナルを照合する
特に有用なのは、 同じ日付での一件ごとの比較です。両方を共通スキーマへ書き出します。例:
timestamp_utc, broker_server_time, pair, setup_id, direction, entry_rule_hash,
entry_price, sl_price, tp_price, trigger_bar_close, source
シグナル時刻、実際の情報利用可能時点、注文要求、約定を区別する追加項目を十分残します。最初の30〜60日後、同じ日の保存データで固定した過去実装を実行し、一覧を比較します。例示の不一致基準である 5–10% で調査を始めてもよいものの、小さい差でも系統的に過去検証を有利にするなら重要です。百分率を報告する前に分母と、照合対象がシグナル・要求・約定のどれかを定義します。
将来情報漏れ、描き換え、配信の差、時間帯誤り、コード不一致、リアルタイム注文失敗などが原因候補です。同じ日付で過去五十件・先行十二件なら大きな未解決差で、説明前に進んではいけません。足の途中で Close[0] を読んでも自動的に不具合ではありません。後で決まる最終値を、以前の判断時に知っていたと扱うことが誤りです。
timestamp_utc と broker_server_timeと、日付別のサーバー時差の方式です。一部のMT4/MT5業者はニューヨーク終値に関連づけたUTC+2・UTC+3のサーバー時計を使いますが、共通ではありません。未正規化の記録を比べると、実際は別の足を使っただけなのに先読み問題に見え得ます。正しく時刻換算してから比較します。欠落足と重複時刻印も数え、正当な市場休止と配信欠落を区別します。同時刻のティックは別の気配更新を表し得るため、識別と順序を確認せず一律削除してはいけません。検証カード:結果を解釈する前の十二項目
カードがなければ、半年後に結果を再現できないかもしれません。どのデータ、実装、費用モデル、選択履歴が生んだかを知る必要があります。最初の九項目は、 評価実行前に 埋めます。本記事の残りで、各項目が結論を変え得る理由を説明します。
| 項目 | 記録内容 | 記入例:合成データ |
|---|---|---|
| 1. 問い | 何を調べる検証か、一文で示す。 | 「EUR/USDのロンドン前範囲突破には、費用後の正の期待値があるか」 |
| 2. 戦略・コード版 | 固定した仕様・実装の版識別子とハッシュ。 | lonbreak v1.3、例示ハッシュ接頭部 a91f…、初回標本外実行前に固定。 |
| 3. データ・期間 | 提供元、銘柄、解像度、ビッド・アスク・仲値、時間帯、範囲、洗浄処理。 | Dukascopy EUR/USDビッド・アスクのティック、UTC、2018-01 → 2024-12。確認済み重複記録を削除し、同時刻でも別の更新は保持。欠落4日と30分超の欠落11件を記録。 |
| 4. 分割 | IS・検証・標本外の時系列境界。「先行」が過去の保留標本か到来データかを特定。 | IS 2018-01 → 2021-12、検証2022-01 → 2023-06、未使用OOS 2023-07 → 2024-12。先行観察開始2026-05-04。 |
| 5. 約定モデル | シグナル利用可能時点、約定、遅延、分割約定、窓開け、曖昧な足の処理。 | M15確定シグナル。模擬遅延300 ms後、買いはアスク、売りはビッド。足内ストップ・目標の順序不明はストップ先。窓開けは次の約定可能価格。このカード例は前記事の候補とは別。 |
| 6. 費用 | スプレッド、スリッページ、手数料、資金調達と、明示的な二重計上確認。 | ビッド・アスクのティックからスプレッド。開始・決済の例示的不利スリッページ0.1 × M5のATR(14)。往復手数料相当0.6ピップ。資金調達は該当業者の日程。約定内のスプレッドは再控除しない。 |
| 7. 変種・試行 | 破棄したものも含む、試した全パラメータ組合せ・規則版。 | パラメータ96組と別個の決済実験4件で100試行。全組合せ96 × 4なら384試行になる。各試行の記録先は、 02_IS/trial_log.csv. |
| 8. 指標 | 定義、分母、標本化の方式。 | 開始前の予定金銭リスクとしてR₀を固定したR期待値、プロフィットファクター、直近資産最高値からのドローダウン、取引数、不確実性推定。 |
| 9. 事前指定の判断基準 | 正・負・未決の結果を検証前に記述。 | OOS期待値の95%下限がゼロ超なら研究継続、上限がゼロ未満なら設計へ戻り、それ以外は未決。「継続」は実取引の自動許可ではない。 |
| 10. 結果 | 点推定だけでなく区間付き推定。 | OOS n = 214、期待値+0.12R、例示95%区間(−0.07R、+0.31R)。ゼロを含む。 |
| 11. 制約 | 検証が測らないもの、汚染し得るもの。 | 一提供元・一ペア、板深度データなし、観測した流動性危機なし、多重検定調整を指定しない探索100試行。選別と保留標本の完全性が推論へどう影響するか明記。 |
| 12. 再現用ファイル | 必要入力・コード・出力のパスと完全なハッシュ。 | 01_data/eurusd_2018_2024.csv (sha256), lonbreak_v1_3.mq5, costs.json, trial_log.csv とブートストラップのノートブック。上の短縮ハッシュは表示例にすぎない。 |
項目9は抜けがちです。結果後に書く基準は事後説明で、事前判断規則ではありません。項目7も同じく重要で、総試行数がなければ勝者は多数探索の最大値だけかもしれません。項目11には未解決の制約を明示します。前の項目で重要入力が不明なら作り上げず、未解決と記し、検証を延期するか解釈を限定します。
2. 検証の落とし穴――先読み・生存者偏り・曲線適合・過剰適合
これは方法上の危険で、単なる研究者の不注意の印ではありません。設定・実装に深刻な誤りがあっても、端末や独自スクリプトは説得力ある報告を作れます。 確証バイアス や後知恵は取引心理の部で扱います。ここでは検証の技術設計と弱点発見に必要な確認に集中します。
落とし穴1:先読みバイアス
後になって利用可能な情報を判断に使うと、先読みになります。主な経路は次の通りです。
- 足内判断に最終終値を使用。 進行中のM5足を含むSMA(20)を計算し、その足が平均より上で確定したら開始する戦略を考えます。五分足の240秒時点では最終終値は不明です。現在の
Close[0]を読むこと自体は将来漏れではありません。後の最終終値を240秒時点で使えたと解釈することが漏れです。「始値のみ」というモード名が意図した足内規則に対応すると仮定せず、各コールバックで実際のテスターモードとコードが返す値を確認します。 - 後で確定する過去マーカー。 ZigZag、スイング点、フラクタル、手動選択のピッチフォーク基点、一部の独自チャネルは、後の情報で以前の足に印を付ける場合があります。今日十本前に描かれたスイング高値は、その足では未確定だったかもしれません。挙動を決めるのは指標名ではなく、実装と確定時刻です。
- 発表時刻でなく対象期間を索引にしたマクロデータ。 「三月CPI」という値は四月に初めて発表されるかもしれません。実発表前に使う戦略は未利用情報を使っています。発表機関の日程、提供元の時刻印方式、当時利用できた版を確認します。後の改定も別の漏れ源です。
検出: 固定戦略を到来データで観察し、元のシグナルと同日付の過去再構成を照合します。不一致は診断する問題で、それだけで先読みの証明ではありません。別配信、描き換え、時刻換算誤り、実注文失敗も考えられます。まず時刻とデータをそろえ、シグナル・要求・約定を区別し、情報の流れを調べます。入力足を確認する前に正しい指標を書き直すと、古い問題を説明せず新しい問題を作り得ます。
情報の時点を明示的に確認すべき実装には、次があります。
- ZigZag、フラクタル、ピッチフォーク。 ピボットや基点をいつ知り得るか、表示された過去点が動くかを調べます。正しく遅延させた確定シグナルと、起点でピボットを知っていたふりは異なります。
- 平均足、SuperTrend、Hull移動平均、独自チャネル。 どれも本質的に不正というわけではありません。確定足シグナルが変わるか、実際の実装を検証します。平均足の合成価格も別扱いが必要で、自動的に約定可能な市場価格ではありません。
- 市場の非公開コード指標。 内部ロジックを調べられません。ソース水準の検証を求める方針なら、その研究工程では却下します。ブラックボックスの時刻検証は欠陥を発見できても、内部依存すべてを確定できません。
iCustom()のバッファ読出し。 バッファ、足のシフト、利用不能値の処理、過去バッファ値の再計算の有無を特定します。- 足内の
Close[0]によるMT4の判断。 現在値は変化中の足の価格で、最終終値ではありません。検証では実取引規則と同じ情報の順序を再現します。 - 下位時間軸チャートでの上位時間軸データ。 H4確定前の値をM15判断で使う場合、それは暫定値です。Pineでは、
request.security()の挙動は式のオフセット、先読み設定、過去・リアルタイム評価によります。意図する規則なら文書化された上位時間軸確定値の方式を使い、単に[1]をどこかへ加えれば全時刻問題が直るとは考えません。対応するMQL実装も確認します。 - 対象期間で日付を付けたマクロ系列。 統計が示す月の初日ではなく、実際の情報利用可能時点と当時の版で結合します。
実務的な描き換え確認: 稼働中の配信で、現在十本前にある特定の確定足の指標値を記録します。新しい足が五本来たら、今は十五本前となった同じ時刻印を確認します。新しいM1五本は約五分、H1五本は約五時間で、取引時間の切れ目は除きます。値が変われば過去表示は元のシグナルを再現していないかもしれません。確認情報がいつ利用可能になったか記録します。
一足で変わらなくても、描き換えなしの証明にはなりません。複数足、境界例、変動率局面で繰り返し、該当時は再接続・履歴更新後の変化も含めます。観察手順であり、全実装を数分で検証できるという主張ではありません。比較を再現できるよう記録を保存します。
Close[0] の値を足内で利用できたと扱っています。問題は平均足の概念自体でなく、コードと時刻です。例の照合規則では50%超の不一致があり、進行を止めます。十二取引では精密な優位性推定に少なすぎても、直接再現できる規則不一致は少数例から特定できます。 小さい・依存のある標本では、成績の結論を限定し、実証した実装欠陥の調査は限定しません。落とし穴2:生存者バイアス
現在の通貨ペア一覧で過去を検証すると、当時取引できたが後に消失・利用不能になった銘柄を除く場合があります。逆の実装問題も重要で、魅力的な過去成績が、想定業者では同等条件で提供しなくなった銘柄に依存しているかもしれません。2022後の変化前後のUSD/RUBは、利用可能性、制裁制限、流動性、約定条件を日付・業者ごとに確認すべき例です。現在のアクセスについての一律の主張ではありません。
現在見える五つ星・好意的評価200件のEAは、掲載が続き注目される製品から選ばれています。失敗・撤回・不人気製品は比較にないかもしれません。評価だけでは発売時の全群は分からず、生存確率も、各EAの当初の成功確率が等しかったことも示しません。
検出: 当時の判断日に存在した銘柄範囲を再構成します。2018〜2020の検証なら、後に撤回したものも含め、該当業者の2018年の提供銘柄を特定します。現在の生存銘柄だけに絞ると、範囲選択に将来情報を使います。現在の実行可能性は別の制約です。想定法人でまだ使える銘柄と、使えない銘柄が過去成績にどれだけ寄与したかを記録します。市販製品なら公開日、版履歴、比較群の情報を保存し、現在順位を未選別標本とみなしません。
落とし穴3:曲線適合
SMA期間20、22、25、30、RSI期間11、14、17、ATR基準0.8〜1.5を0.1刻みで試すと、 4 × 3 × 8 = 96通りです。多数を探すと持続的優位性がなくても魅力的結果を見つけやすくなります。必ず突出値が出るわけではありませんが、選んだ最大値は通常の一つの事前指定観測ではありません。
合成例では、最良の組み合わせがSMA-22、RSI-14、ATR 1.1で、過去三年間の収益は+180%とします。続く60日間は−8%です。この対照は過去の雑音への適合と整合し得ますが、二つの収益値だけではその診断を証明できません。費用、実装、局面、標本化も確認する必要があります。確実なのは、過去の勝者が96試行から選ばれたことであり、報告ではその過程を開示しなければなりません。
検出: パラメータのヒートマップを確認します。悪い結果に囲まれた孤立した好成績セルは、調べるべき感応度を示します。広い平坦部は一設定だけに依存しないことしか示しません。 平坦部は正の期待値を証明しません。 同じ使い過ぎたデータの産物か、小変更でも取引集合が変わらない値を反映するだけかもしれません。
本当に未使用のOOS期間、事前指定のウォークフォワード、第3節の基準戦略比較という独立評価が必要です。滑らかな図や良い平均だけでなく、取引数、不確実性、全選択履歴を報告します。手法変更中に繰り返し見たOOSは、未使用ではなくなります。
落とし穴4:規則の過剰適合
パラメータ適合は過剰適合の一形態で、特定の過去損失を除く規則追加もあります。「火曜13:00 Europe/London後の開始禁止」は、その間の二損失だけが理由かもしれません。通常の英国・ポーランド時差なら、ポーランド例の14:00締切に対応します。その取引を除けば標本は構造上改善しますが、戦略自体の改善とは限りません。
過去三損失が金曜だからと、金曜フィルターを検証済みとしません。損失閲覧後の提案は新仮説です。開発データで調べても、改善と呼ぶ前に理由、試行記録、独立評価が必要です。裏付けに使う評価の前に固定します。
本記事では、200取引未満で四つ超のパラメータを最適化する場合の保守的な実務警告と、大まかな目安である、 最適化パラメータ数 × 30 ≤ 取引数を扱います。四つなら120取引、八つなら240です。 例示の監査目安であり、統計定理や市場標準ではありません。警告線より下でも過剰適合し得て、上でも比率だけでは否定されません。
感応度、試した変種数、依存、独立成績を調べます。観測を共有する変種の差は、別々の区間の重なりで決着すると考えず、適切な対応比較・再標本化で評価します。良いOOSや安定した図は評価すべき証拠で、過剰適合の除去を普遍的に証明しません。
落とし穴5:費用の過小モデル化
固定1ピップのMT4検証は、当時の流動性にかかわらず単純化費用を適用します。全端末・ビルドの既定が同じと考えず、実際のテスターの設定と能力を確認します。実スプレッドは流動的な時間帯重複、ロールオーバー、重要発表で大きく違い得ます。一ピップ未満、数ピップ、一時的な二桁ピップは調査すべきシナリオの尺度で、現在の提示値や保証範囲ではありません。薄い夜間に集中する戦略は固定費用では利益でも、適切な変動スプレッドモデルでは失敗し得ます。
第二の要素は、 スリッページです。過去の正確な価格約定は仮定で、実約定の約束ではありません。例は通常0.2〜0.5ピップ、突破前後1〜3、発表後5〜15です。自口座で測定した分布とは扱えません。追加実行費用0.2Rなら費用控除前+0.3Rの推定が+0.1Rへ下がり得ます。実際の減少は当初リスク幅、注文種別、実測約定によります。
第三の要素は、 資金調達です。三〜八日保有するスイング戦略は、銘柄、方向、業者に応じて支払や受取が生じます。EUR/USD買いが常に特定の符号だと考えてはいけません。例示計算では、一晩3ピップ、当初ストップ幅20ピップなら、 課金日当たり0.15Rです。一日分の課金五回で計0.75Rとなり、資金調達前+0.4R推定を超えます。60ピップのストップなら同じ費用は一日0.05Rです。暦の五夜を同じ課金五回とみなさず、週末・祝日調整も含め実際の日数倍率を使います。換算は、 資金調達費用の単位 R = ピップ相当の資金調達 / 当初ストップ幅のピップ数で、数量と通貨換算を一貫して扱います。
第四の要素は、 手数料です。一部のロースプレッド口座は数量別に別課金します。「ECN」という名称は必要口座種別や費用を確定しません。標準ロット往復USD 6の例なら、0.1ロット200取引の費用は、 200 × 0.1 × 6 = USD 120です。値動きの損益前で初期残高USD 1,000の12%です。USD 5〜7は例で、現在の料金調査ではありません。大きな往復費用を省くスキャルピング検証では、意図した純成績の主張を支えられません。
落とし穴6:データ探索の偏り
30戦略を試し、28を捨て、二つの良い過去検証を公開するとします。個々の計算が正しくても、選別で見かけの有意性が誤解を招きます。独立した帰無検定30回を5%基準で行うと、偽陽性の期待数1.5、少なくとも一件の確率約78.5%です。必ず二〜三つ成功する、公開戦略の機能確率がほぼゼロ、という意味ではありません。生存者だけでなく探索全体を推論に含めるという意味です。
検定族全体の誤りを抑える従来法の一つは、 Bonferroni補正です。30検定で全体水準0.05なら、一検定の基準は、 0.05 / 30 ≈ 0.00167.[2] 特に関連した検定では保守的になり得ます。他の手法は偽発見率制御や調整Sharpe比など、異なる目的を扱います。[3] 相互に交換できるスイッチではなく、仮定と選択入力を示す必要があります。どの方式でも失敗試行を隠せば意味ある評価ができません。
検出: 棄却結果も含め全戦略・変種の試行簿を維持します。探索30候補からの二勝者と、本当に事前指定した二評価は別の解釈が必要です。そのためカード項目7は必須です。
誤りの具体例:同じ足の中のストップと目標
通常の取引結果に見えても、この約定の曖昧さは過去成績を大きくかさ上げし得ます。重要度は、同じ記録足内に両決済が入る頻度によります。
誤った記録: H1足の始値1.0850、高値1.0885、安値1.0815、終値1.0870とします。買いは1.0850で約定済み、ストップ1.0820、目標1.0880で各30ピップ離れ、両方とも足の値幅内です。目標を先に確認する独自検証は、 +1Rと記録しますが、OHLCから先に触れた水準は分かりません。楽観的実装を定義した例で、全テスターの既定が目標先という主張ではありません。
修正した約定モデル: OHLCだけでは足内の全順序を再構成できません。曖昧さの扱いを明記します。
- 保守的な既定では、両決済に触れた足を、 損切りとします。カード項目5に、現実的と証明済みではなく悲観的と明記します。
- 曖昧な足の下位時間軸・ティックを確認します。M1でも同足に両方が残り得ます。十分詳細で正しい気配側なら一部を解消できますが、約定には注文状態・流動性の仮定がなお必要な場合があります。
- 全曖昧取引をストップ先・目標先とする両極端を計算します。その範囲で判断が変わるなら、有利な端を選ばず不確実性を報告します。
- 曖昧足数を制約に記録します。判断足の値幅に対してストップと目標が近いなら、選んだOHLC解像度は主張に不十分かもしれません。
合成計算: 200取引に該当足14本があるとします。全件目標先なら期待値+0.18R。14件すべてを+1Rから−1Rに変えると28R、つまり、 一取引当たり0.14R減り、+0.04Rが残ります。詳細再生でストップ先九件・目標先五件と判明したなら、全件目標先に対し九件が各2R減ります。18R / 200 = 0.09Rなので、解消後の推定は、 +0.09Rです。楽観モデルの過大評価は、 一取引当たり0.09Rで、費用余裕に対して大きい場合があります。H1足だけでは順序を確定できません。良く見える結果ではなく、制約と解消方法を報告します。

3. ウォークフォワード分析――限られたデータでの検証
ウォークフォワード分析(WFA)は、開発とその後の評価を一連の期間で検証します。Robert Pardoは次の書籍で体系的に論じています。 The Evaluation and Optimization of Trading Strategies.[1] 履歴全体で値を選ばず、開発には、 標本内 の期間を使い、固定した選択を後の、 標本外 で評価し、事前固定の手順で先へ進みます。
時系列の分割:開発・検証・標本外
単純な二分割の例は、
- 暦の五年間:2020年1月1日〜2024年12月31日。
- 開発約70%:2020年1月1日〜2023年6月30日、三年半。
- 最終評価約30%:2023年7月1日〜2024年12月31日、一年半。選択規則の固定後に初めて見る。
70/30分割は、 シナリオ仮定で、市場標準ではありません。両側に使えるシグナル数と関連条件がある分割を選びます。この予測・取引では評価は開発後で、時系列が重要です。日付を無作為に混ぜると、将来局面の情報や依存関係が研究へ漏れ得ます。
最初の例が大きく二期間でも、役割は三つに分かれます。
- 標本内開発: ここで探索・最適化・棄却します。開発と開示するなら、値の選択は正当です。
- 選択のための検証: 後の開発期間で候補を選びます。選択に使えばその一部であり、未使用の最終検証ではありません。上の二分割例なら、開発期間内へ明示的に割り当てます。
- 最終標本外評価: 戦略と評価手順の固定後に見ます。結果で新フィルターを考えたなら、その改訂を支える独立証拠ではなくなり、汚染を記録します。
複数候補の比較には別の選択期間が有用です。一つの完全事前指定候補には論理上必須でなくても、最終OOSを黙って勝者選びの場にしてはいけません。結果後の「もう一フィルター」はデータの役割を変えます。
弱いOOS後に開発へ戻れても、規則を変え同期間を再実行した結果を未使用検証とは呼べません。初回結果を残し、後の利用を開発・診断再利用と記します。再現確認の同一実行自体は新仮説でなく、結果に導かれた規則変更が新仮説です。
ローリング型ウォークフォワード分析
一つの最終期間が特別に有利・困難な場合があります。連続した複数期間で手順を評価しますが、全将来条件の代表は保証しません。
| 段階 | 開発期間 | 続く評価期間 |
|---|---|---|
| 1 | 2020-01〜2022-12(3年) | 2023-01〜2023-06(6か月) |
| 2 | 2020-07〜2023-06(3年) | 2023-07〜2023-12(6か月) |
| 3 | 2021-01〜2023-12(3年) | 2024-01〜2024-06(6か月) |
| 4 | 2021-07〜2024-06(3年) | 2024-07〜2024-12(6か月) |
四つの評価期間は暦上重ならず、計二年を覆います。それで 統計的に独立するわけではありません。隣接しており、開発期間は大きく重なり、一つの持続局面が複数評価をまたぎ得ます。結合した結果を見る前に選択手順を固定しないと、手順自体を見かけのOOSへ適合させられます。
三〜四期間の純損益プラスは頑健性の追加研究の理由になり得ますが、件数だけでは弱い証拠です。例示の独立した公平な符号モデルで、四つ中少なくとも三つが正になる確率は、 5/16 = 31.25%です。依存で変わり、その方向を普遍的には予測できません。各期間の取引数、純期待値、不確実性、局面関与を報告します。一〜二の正は局面感応度を示すかもしれず、ゼロ〜一では説得力ある稼働根拠になりません。どの件数も事前の統計・運用基準を代替しません。
低頻度トレーダーのウォークフォワード
月五〜十取引のスイングなら、およそ、 五年で300〜600取引です。30%のOOS部分には約90〜180件が含まれます。勝率60%付近では、独立二項モデルによる95%区間の半幅は、件数と方法に応じて約7〜11パーセントポイントです。これは勝率に関する主張を制約し得ますが、それだけで費用控除後に利益を生む損益構造が成立するとはいえません。
月50〜100なら五年で約3,000〜6,000観測です。標本の不確実性は小さくなっても、依存、選択、局面の網羅性、約定モデルは重要です。取引数が多いだけで、残る問題が費用だけになるわけではありません。
月一〜二取引のポジション戦略では、 五年で60〜120取引で、30%のOOS区間には約18〜36件が残ります。この不確実性は、有用な期待値と損失を区別できないほど大きくなり得ます。対応として考えられるのは、
- 長い履歴: その頻度で十〜十五年なら約120〜360取引、評価30%で約36〜108です。古い市場・約定条件の関連性を確認します。
- 複数銘柄: 六〜十ペアで観測は増やせても、共通通貨イベントと重複保有で依存が生じます。銘柄横断の主張を検証し、各取引を新たな独立実験と数えません。
- ブロック・ブートストラップ: 観測損益をブロックで再抽出し、明記した依存仮定の下で変動を調べます。既存観測の再利用で、新たな市場証拠は生みません。多数の模擬経路で小標本を確立した優位性には変えられません。
基準戦略:何と比べているか
平均プラスは基準戦略なしでも報告できますが、追加規則に価値があるとの主張には関連する比較対象が必要です。「一取引+0.25R」を解釈する前に、同じデータ期間、約定仮定、費用計上を明示的な代替案へ適用します。
- 追加フィルターなしの発動条件。 四フィルターが事前の成績・リスク目標を改善しないなら、標本を減らし柔軟性を増すだけかもしれません。ドローダウン・保有を変える目的なら平均以外も比べます。
- 頻度・方向方針・決済規則をそろえた無作為開始。 反復シミュレーションは、都合よく選んだ単一値でなく参照分布を作ります。適格開始の範囲、無作為化手順、シードを指定します。その中心付近の戦略は、この比較で違いを示していません。全側面が無作為だという普遍的証明ではありません。
- 期間を通じた指定方向の保有。 単一ペアのスイングなら、方向性の偏りに似る結果がどれだけあるか分かります。同等のエクスポージャーで資金調達を含めます。規模未調整の保有が公平なリスク比較とは限りません。
- シグナルを逆にした同じ手順。 両方向に利益が見えるなら、時刻、非対称決済、変動率効果、費用モデルを調べます。自動的な誤りではなくても、方向予測だけが価値源という主張に疑問が生じます。
戦略と基準の結果を項目10に記録します。感応度分析は局所的に同じ問いを立て、各パラメータを両方向へ一段動かしたらどうなるかを見ます。ATR基準1.1から1.0で優位性が消えるなら、取引集合の変化と不確実性を調べます。一つの好成績セルは頑健な優位性の強い証拠ではありません。
OOSの固定:フォルダー・設定ハッシュ・試行記録
弱いOOS後に値を変え同期間を繰り返し見るのは、結合した履歴での開発であり未使用の証拠ではありません。単純な構成で違いを見えるようにします。
- 次のようにフォルダーを分けます。
01_raw_data,02_IS_optimizationと03_OOS_locked。使う場合は、選択用検証部分と境界も明記します。 - 初回の最終OOS実行前に、 仕様、コード、値、費用モデル、日付境界の完全ハッシュを、
03_OOS_locked/run_001.lockへ記録します。後から結果と実行情報を追記し、元の入力は置き換えません。 - 変更候補には新しい実行記録、例えば、
run_002.lockと、閲覧済み期間は改訂の未使用証拠ではないという注記を付けます。最初の固定候補の正当な過去記録を消しません。 - 各最終期間には、事前手順での初回閲覧が一回あります。同一の再現確認と結果に導かれた新変種を区別します。期間を事前計画し、前の評価が後の予定開発に正当に使える過去データになる時点を記録します。
ファイル名の末尾が、 .lock やハッシュでも、編集・閲覧を物理的には防ぎません。保存ファイルとアクセス規律があって監査履歴になります。誰がどのデータを見たかの記録がない見かけのロックは、独立性の証拠ではありません。
弱いOOS後の対応
結果が不快というだけでフィルターを足しません。記録した判断順序に従います。
- 結果を受け入れ保存する。 現候補は目標検証基準未達です。確実な否定でなく未決の場合もあります。事前基準を使います。
- 概念に戻る。 仮説、開発循環、優位性定義は、 記事15.3の最初の三節で見直します。想定機構がまだ妥当か、実装・データ欠陥で結果を説明できるかを確認します。
- 仕組みが妥当なら、局面依存を新たな研究課題として調べる。 事前指定の四〜六期間が役立つ場合があります。トレンドの二期間が良く、持合いの四期間が悪ければ局面との相互作用候補で、トレンド発生時の即再開許可ではありません。各期間に標本数と純期待値区間が必要です。各八取引の三期間が正でも、大きく未決のままかもしれません。結果から発見した局面フィルターには版付き仕様と独立評価が必要です。
- 概念が破綻したら候補を廃止する。 理由と試行履歴を残し、棄却した主張の周囲に例外を積まず、次の案へ進みます。
4. モンテカルロ分析――一つの過去経路が全体ではない
過去検証は機会と損益の一系列を記録します。五年の標本が100取引でも、別の市場履歴なら95や110で、価格・損益も違い得ます。再標本化は全市場の可能性を再構成しません。既存観測に基づく明示モデルの下で結果がどう変動するか、という狭い問いです。
模擬計算は点推定でなく分布を作り、元の順序に隠れた感応度を示せますが、モデルと入力標本に条件づけられます。現実リスクの完全測定でも、将来がその範囲内という保証でもありません。
二つの基本的再標本化
個別取引のブートストラップ: 例えば+1.5R、−1R、+2.2Rなど200損益の一覧から、200観測を、 復元抽出します。1,000回で1,000経路を作り、順序も各損益の頻度も変わります。
これは、同じ損益を、 非復元で 並べ替える無作為順列とは異なります。同じ固定R損益を並べ替えても合計は変わりません。固定比率数量で経路依存の制限がなければ、資産倍率の積も変わらず、ドローダウンは変わり得ます。順列とブートストラップを交換可能な手順と呼んではいけません。
ブロック・ブートストラップ: 単独取引でなく、例えば連続十取引のブロックを抽出します。内部の依存は一部保ちますが、新たな結合境界の関係は切れます。適切かは観測した依存によります。長さは調べるパラメータで、安心できる結果だけを選ばず、5、10、20などを比較します。
1,000模擬経路から計算するもの
- 最終収益の中央値: 指定期間の模擬収益分布の中心です。期間と時間モデルが本当に一年を表す場合だけ年次と呼びます。
- 収益の第五パーセンタイル: 模擬分布の下側裾の分位点で、最悪の可能性や保証された「現実的最悪」ではありません。同値と有限標本補間で、厳密に下回る割合は変わり得ます。
- ドローダウンの大きさの第95パーセンタイル: 模擬した高値から安値の下落の上側裾の要約です。上限とはせず、計画の事前リスク限度と比べます。
- 定義した基準の超過率: 例えばドローダウン30%超の経路割合です。基準と、初期残高・直近最高値のどちらから測るかを明記します。30%下落は文字通りの支払不能ではありません。
例示数値で、過去成績ではありません。 年次モデルの元の経路が収益+45%、最大ドローダウン12%とします。仮の1,000経路では中央値+38%、収益第五パーセンタイル+8%、下落幅第95パーセンタイル22%、30%超の経路4%でした。このモデルで25経路中約一つが選択境界を超えるという意味で、現実の破産確率4%ではありません。比率ドローダウンには数量方針がすでに仮定されており、開始シグナルだけの性質ではありません。[4]
指標定義を一貫して使う
実行前にR期待値、プロフィットファクター、ドローダウンと期間、回復係数、使う場合はSQN型スコアを定義します。 記事15.9 が本章の式と分母の参照先です。ここでは三点が重要です。
- ドローダウンは後の全体最大値でなく、直近最高値を使う。 次のように定義します。
H_t = max(その時点までの資産 t),D_t = (H_t - E_t) / H_tとmaxDD = max(D_t)。100 → 80 → 120 → 110では、先行最高値からの最大下落は、 20%で、100から80です。後の120と前の80で計算する33.3%は、この経路のドローダウンではありません。 - 曲線と標本化頻度を示す。 保有を含む時価資産と決済済み残高は異なります。ティック、日次、取引後で最大値は変わり得ます。定義のない「12%下落」は他報告や計画と直接比較できません。
- スコアの方式を示す。 平均R/標準偏差に√Nを掛ける値はNで変わります。上限あり・なしは別の量です。同じ方式と比較可能なNを使い、不確実性や配分規則の代用にしません。
他の報告方式も明示します。金銭リスク単位が変わるなら、現金とRのプロフィットファクターは一致しない場合があります。Sharpeは収益間隔、基準、年率化仮定が必要で、取引Rは自動的に暦上の収益系列にはなりません。Calmarには同等期間の年率収益とドローダウンが必要です。裾損失、連敗長、下落期間、未解決運用状態も含め、一比率に縮めません。
Pythonのブロック・ブートストラップ例
NumPyとpandasを入れたローカルPython、または次のようなノートブックサービスで実行できます。 Google Colab。Colabは利用制限付きのブラウザーノートブックです。 現在のサービスと保存情報を確認します。ノートブックを作りセルへ貼り付けて実行します。既定入力は、 合成なので、表示形式を見るだけなら個人取引データは不要です。
自分の記録なら、数値の、 R 列一つと、一行に一つの完全な取引を時系列で用意します。取込行のコメントを外してファイルを渡します。各Rは費用を一度含め、開始前に予定した正の金銭リスクを使います。クラウドを検討する前に個人識別子を除き、第三者に保存したくない機密口座出力はローカルに置きます。
import numpy as np
import pandas as pd
def block_bootstrap_strategy(trades_R, n_simulations=1000, block_size=10,
risk_per_trade=0.01, seed=42):
"""R単位の純取引結果から、連続する非循環ブロックを再標本化します。
trades_R: 時系列順の有限な結果。各値は一つの完結した取引を表します。
n_simulations: 合成経路の本数であり、新しい市場観測ではありません。
block_size: 連続ブロックの長さ。5、10、20を検討します。
risk_per_trade: 各取引でリスクにさらす、その時点の資産の固定比率。
seed: 再現性のための入力。NumPyの版も記録します。
収益はlen(trades_R)取引を通じた値で、自動的に年率になるわけではありません。
ドローダウンは各取引後に測定し、負の値として保存します。
"""
trades_R = np.asarray(trades_R, dtype=float)
if trades_R.ndim != 1 or trades_R.size == 0:
raise ValueError("trades_Rは空でない一次元配列が必要")
if not np.isfinite(trades_R).all():
raise ValueError("trades_Rには有限値だけを含める")
for name, value in (("n_simulations", n_simulations),
("block_size", block_size)):
if isinstance(value, bool) or not isinstance(value, (int, np.integer)):
raise ValueError(name + "は正の整数が必要")
if value < 1:
raise ValueError(name + "は正の整数が必要")
if not np.isfinite(risk_per_trade) or not 0 < risk_per_trade < 1:
raise ValueError("risk_per_tradeはゼロと一の間が必要")
rng = np.random.default_rng(seed)
n_trades = len(trades_R)
# 本例に合わせ、過大なブロックは標本長を上限にする。
# 標本全体のブロックでは再抽出に多様性がない。この制約を報告する。
block_size = min(block_size, n_trades)
n_blocks = (n_trades + block_size - 1) // block_size
final_returns, max_drawdowns = [], []
threshold_breaches = 0
for _ in range(n_simulations):
# 開始位置を復元抽出し、各ブロックを保持する。
starts = rng.integers(0, n_trades - block_size + 1, size=n_blocks)
sample = np.concatenate(
[trades_R[s:s + block_size] for s in starts]
)[:n_trades] # 元の取引数を正確に保つ。
equity, equity_curve = 1.0, [1.0]
for outcome in sample:
# 損失で資産を使い切ればゼロに吸収する。債務モデルではなく、
# 法的なマイナス残高保護の適用を主張するものでもない。
equity *= max(0.0, 1.0 + outcome * risk_per_trade)
equity_curve.append(equity)
equity_curve = np.asarray(equity_curve)
peak = np.maximum.accumulate(equity_curve)
drawdown = (equity_curve - peak) / peak
worst = float(drawdown.min())
final_returns.append(equity - 1.0)
max_drawdowns.append(worst)
if worst < -0.30: # 直近最高値からの30%下落を厳密に超える。
threshold_breaches += 1
return {
"trades_per_path": n_trades,
"effective_block_size": block_size,
"median_return": float(np.median(final_returns)),
"p05_return": float(np.percentile(final_returns, 5)),
"p95_return": float(np.percentile(final_returns, 95)),
# 負のDD:第五パーセンタイルは不利な第95パーセンタイルの大きさ。
"p95_max_dd": float(np.percentile(max_drawdowns, 5)),
"p99_max_dd": float(np.percentile(max_drawdowns, 1)),
"prob_dd_over_30pct": threshold_breaches / n_simulations,
"mean_return": float(np.mean(final_returns)),
}
# 任意の自分のデータ:一完了取引に一純R値、時系列順。
# trades = pd.read_csv("my_results.csv")["R"].to_numpy(dtype=float)
# 合成デモで、市場戦略の結果ではない。
# 20値:6利益、合計+2R、平均+0.10R。一つの+7.2R外れ値が支配する。
toy = np.array([-1.0, -1.0, 3.1, -1.0, -1.0, -1.0, 0.9, -1.0, 7.2, -1.0,
-1.0, -0.6, 1.4, -1.0, -1.0, -1.0, 2.3, -1.0, -1.0, 0.7])
trades = np.tile(toy, 10) # 人工的な反復で、独立した200観測ではない。
# 自分のCSVには上の行を任意の取込行と置き換える。
print("NumPyの版:", np.__version__)
for risk in (0.01, 0.02):
result = block_bootstrap_strategy(trades, n_simulations=2000,
block_size=10, risk_per_trade=risk, seed=42)
print(f"一取引のリスク比率:{risk:.0%}")
print(f"全{result['trades_per_path']}取引にわたる収益の中央値:{result['median_return']:.2%}")
print(f"収益第五パーセンタイル:{result['p05_return']:.2%}")
print(f"不利な第95パーセンタイルDD:{result['p95_max_dd']:.2%}")
print(f"DDが30%より深い経路:{result['prob_dd_over_30pct']:.2%}")
選んだ標本を指定数量方針で再抽出した挙動を調べます。練習用20値は合計+2R、平均+0.10Rで、+7.2Rを除くと大きく変わります。十回反復した200件は人工周期を持つコード例で、独立証拠が十倍になるのではありません。
NumPy 2.5.3、シード42、2,000経路で確認した出力: リスク1%では200取引の収益中央値が、 +19.56%、収益第五パーセンタイル、 −4.11%、不利な第95パーセンタイル下落、 −17.66%で、30%下落超はありません。リスク2%ではそれぞれ、 +32.25%, −13.71%, −33.70% で、 11.05% の経路が基準を超えます。不利な第99パーセンタイル下落は順に約−21.09%、−39.51%です。200取引の合成出力で、年次予測ではありません。シードとコード・NumPy版を記録します。全将来版で同じ乱数列は保証されません。重要なのは、比率下落がR系列だけでなく数量にも依存することです。
模擬基準を検証カード項目9へ記録するのは、 出力を見る前です。例示方針では、中央値と第五パーセンタイルが正、不利下落分位点が計画限度未満、30%下落を超える経路が1%未満、を求められます。これは、 シナリオ判断規則で、市場標準ではありません。不合格なら、そのモデル・規模で選択基準を通らないという意味で、後から基準を動かす誘いではありません。
重要な制約: 再標本化は入力最悪値より極端な単一損失を作れませんが、反復損失で累積下落は深くなり得ます。未観測の流動性危機、新資金調達局面、欠けた約定障害は作れません。有限模擬で超過ゼロでも現実リスクゼロではありません。コードの取引後曲線は、取引中資産変動、証拠金清算、重複保有、残債を省きます。資産ゼロの下限はモデルの約束で、口座の法的保護ではありません。
同じ比率でも金銭額は違う
PLN 5,000の15%下落はPLN 750、PLN 50,000ならPLN 7,500です。元のポーランド例の通貨を維持し、為替換算ではありません。どの口座通貨でも、5,000単位の15%は750、50,000の15%は7,500です。率は同じでも金銭的影響と所有者の制約は大きく違い得ます。
口座規模別の許容下落と数量は、 記事15.11で、日次・週次・月次限度は、 記事15.2の計画にあります。。模擬分位点は実行前に記録した限度と比べ、結果後に許す気になった額とは比べません。
なぜ独立抽出よりブロックを検討するか
変動率の集中は値動きの大きさに関わり、負けた次も負けやすいと自動的には意味しません。符号と損益の依存は、 自分の戦略 で調べる性質で、普遍的事実として仮定しません。共通局面、相関ペア、一つのマクロイベントが、独立抽出で壊れる連なりを作る場合があります。
ブロックは局所的な連なりを保ち、依存が重要なら感応度分析に適する場合があります。ただし長期関係をすべて保たず、独立方式が常にリスクを過小評価するとも限りません。長さ5、10、20を比べ全結果を開示し、元の依存構造を調べます。長いブロックで不利な下落分位点が増せば方式への感応度を示しますが、特定モデルの単独証明ではありません。この小さな分析で変化が少なくても、全条件で独立性が無害とは証明できません。
5. 先行検証――デモ・模擬記録・限定実資金試行
次の段階ほど現実性と誤りの金銭的影響が増します。工程を短縮しても未検証仮定は消えず、資金投入後に発見するものが増えます。教育的な枠組みで、全候補を実取引へ進める義務ではありません。
「Forward」の二つの意味
報告では必ず区別します。
- 過去の先行保留標本: 既存履歴の後半を分け、前半で値を選び、保留部分で評価します。MT5の過去分割の名称はForwardです。[6] テスターのモデルで別の過去期間を調べるもので、実際の将来約定は測りません。
- 先行観察: 固定日後の到来観測で戦略を動かします。元の時刻印付き判断は未存在の観測を使えませんが、後の改訂や再分類による汚染に備え記録を保存します。模擬注文、紙への記録のみ、実注文のどれかを明記し、最後だけが実約定を与えます。
方式と固定日をカード項目4へ記録します。日付なしでは「新データで機能」と「規則選択時に利用済みのデータで機能」を区別できません。
段階1:到来データでのデモ
業者のデモは実端末に似ていても、配信・約定規則・制約が全一致とは限りません。同一と仮定せず確認します。利点は、
- 注文・戦略誤りで実資金を直接失いません。
- 十取引で欠陥を発見し、金銭損失なしに開発へ戻れます。新版を記録し、旧観測を保存して、同じ評価に改訂規則を混ぜません。
- 通知、EA起動、規則実装、注文状態処理、記録書出しの統合を試せます。
制約は、
- 模擬約定: スリッページ・流動性処理が実取引と違い得ます。有利なデモ約定から業者の動機を推測せず、測れる差を特定します。
- 金銭的影響の違い: 模擬証拠金・強制決済はあっても、実損がないので資金投入時の反応は再現しません。
- 要求挙動の不完全さ: 拒否、再提示、分割約定の処理は異なり得ます。ECN・STPの宣伝名だけでなく、約定方式と商品設定によります。
30日・30取引のデモ例では、通知時刻、EAの見逃し、モデルと実測スプレッドの差、手動規則変更を問います。件数は、 シナリオ基準で、市場標準ではありません。二週に一シグナルなら同じ観察数に何か月もかかります。正しい30取引でも主にインフラ・工程確認であり、精密な期待値推定ではありません。
初日から先行結果を記録する。 一か月を後から手で再構成すると漏れや不確かな照合を招きます。記録スキーマ、取込、業者明細との比較は、 記事15.9で扱います。最低限、シグナル・要求・約定時刻、約定可能価格、スリッページ、費用、型の版、当初金銭リスクを保存します。計上が対応しなければ、先行の、 R倍数 を検証のRと比べられません。
段階2:リアルタイム配信の模擬記録、任意で30〜60日
影・紙の工程は、全適格シグナルを記録し、注文せず明示したスプレッド・スリッページ・約定モデルで仮の損益を計算します。モデルを管理でき、不明なデモ約定への依存を避けられますが、実約定の証拠ではなく、実資金でも注文したかは分からない場合があります。例示30〜60日は任意で、デモ後の未解決な問いによります。同じシグナルなら、新たな独立市場観測が自動的に増えるわけではありません。
段階3:別途承認された限定実資金試行
例はPLN 1,000〜2,000の小口資金口座と標準0.01〜0.05ロットです。これは、 ポーランドのシナリオ額で、適切な入金・数量の推奨ではありません。適切な数量はストップ幅、ピップ価値、費用、証拠金、所有者の損失予算から求めます。0.01でも小口や広いストップには大きすぎ得ます。最低数量が承認予算に収まらなければ、そこで試行しないのが正しい結果です。
限定実資金の目的は、明示的に受け入れた限定予定リスクで実装を調べることで、収入を得られるかの試験ではありません。測れるのは、
- 実際の約定: 実口座方式のスプレッド、スリッページ、遅延、拒否、再提示。
- 運用遵守: 規則外の手動決済、ストップ変更、無視したシグナル、他の逸脱。誤り率の分母を定義します。適格シグナル、送信注文、完了取引は別母集団です。
- 実際の資金調達: デモ日程でなく、該当する実銘柄仕様と支払・受取を照合。
- 実条件下の統合: EA、通知、記録、管理手順が意図どおりか確認。
例の90日・60〜100取引は、 例示の計画仮定です。両標本の不確実性を考慮する比較法を事前指定します。新平均が過去平均の信頼区間内かを見るだけでは適切な二標本比較ではありません。二つの別区間の重なりも、差の信頼区間がゼロを含むことと数学的に同じではありません。
データと依存に合う方法で差を推定し、実務上の同等性を問うなら許容悪化幅も定めます。差の区間がゼロを含めば未決であり、実装の同等性の証明ではありません。約定挙動の理解、リスク限度遵守、測定した許容可能な規則違反率も求めます。模擬下落パーセンタイルは事前の見直し基準にできても、不可侵の将来境界ではありません。開始前にすべて記録します。
移行基準
以下の期間・件数は本例のシナリオです。実際の判断規則は項目9に置き、経過日数だけで進む許可表ではありません。
| 移行元 | 次の候補段階 | 関門の例 |
|---|---|---|
| 過去研究 | デモ・影の観察 | 事前OOS/WFA基準合格。モンテカルロ:収益第5パーセンタイル > 0、超過率はカード項目9の限度未満、費用モデルが現実的。進行前に不確実性・制約を確認。 |
| デモ | 別途承認の限定実資金試行 | 例:30+日、30+取引。シグナル照合・統合確認に合格、差を説明し、適切な比較で事前悪化基準に抵触しない。有効な最低数量と明示的な実リスク予算を確認。 |
| 限定実資金試行 | 取引計画が承認する規模(15.2) | 例:90+日、60+取引。実費・損益差を不確実性込みで評価、計画管理内の下落、許容可能な実測逸脱率、未解決運用欠陥なし。規模変更は別判断で自動移行ではない。 |
多くの計画に欠ける分岐は、 「稼働しない」です。不合格は記録する結果で、基準引下げへの誘いではありません。例示日程は過去研究四〜八週、デモ30日、試行90日で、 148〜176日、約五〜六か月です。任意の紙段階と停止期間は除きます。十分な証拠の保証や、省略すれば必ず損失という予測ではなく、計画計算の例です。省略すれば問いが残ります。
運用可能性:過去モデルが試さないこと
13:30 Europe/Londonに判断を要する戦略は、同地域16:00まで会議の人には実行不能です。元のポーランド14:30・17:00の対応時刻で、共通イベント予定ではありません。先行シグナル一覧は見逃しを示します。未執行と記録し、削除して研究・実務の機会が同じだったふりをしません。
記事15.5 は仕事と両立する判断時間、通知、上位時間軸を、 記事15.1 は作業環境の継続、VPS監視・起動を、 記事15.3 は戦略の時刻・約定仮定を記録します。別の役割で、すべて実装に関係します。
この例の過去ビッドのみの費用は1.5ピップ、観測モデルはスプレッド2.5〜4に、各側のスリッページ0.5〜1.5を加え、 計3.5〜7ピップです。合成仮定で現在のGBP/JPY気配ではありません。R差はストップ幅によります。費用1.5から4.5ピップなら差3、D = 5なら0.6Rで、+0.4Rを−0.2Rへ変えるのに十分です。デモは気配モデル差を示しても、実滑りの発見を保証しません。金銭リスク十分の一なら同じ−6RはUSD 150でなくUSD 15ですが、最低数量と比例費用が許す場合だけです。三十取引はなお限定的証拠です。測定した費用差でモデルを直せても、費用の変動と裾の約定の不確実性を認めます。
6. 観測はいくつ必要か――N・p値・信頼区間
過去30取引で18勝なら観測勝率60%です。正当な標本記述でも、背後の勝つ確率の精密測定ではありません。独立同分布のBernoulli試行で、両側95%Clopper–Pearson区間は約、 40.6–77.3%です。モデル下の反復標本で少なくとも公称の被覆率を持つ手順で、今回の観測後に固定未知パラメータへ95%の確率を付けるものではありません。
中心極限定理・裾の厚さ・魔法の件数はない
中心極限定理は、 N = 30 が一律に十分とは言いません。適用可能性と近似精度は分布・依存仮定によります。取引損益は歪み、厚い裾、集中を持ち、一つの+5R利益や−3R窓開け損失で小標本の平均とばらつきが大きく変わり得ます。収束は遅い場合があり、通常の有限分散仮定を満たさないモデルもあります。
魔法の取引数はありません。 十分さはR損益の散らばり、取引依存、頻度、局面の網羅性、試した変種数、必要精度で決まります。同じ週次トレンドやマクロイベントに関わる三十開始が、三十独立実験とは限りません。件数は必ず示しますが、単独の合否ではなく区間・手法・仮定を添えます。
標本数別の勝率区間
| 取引数N | 観測勝数と勝率 | 両側正確95%区間 | 優位性と雑音を区別できるか |
|---|---|---|---|
| 30 | 60% | 40.6〜77.3%(約±18ポイント) | 未決。損益比1:1・費用なしの損益分岐50%未満も区間内。 |
| 50 | 60% | 45.2〜73.6%(約±14ポイント) | 下限は依然50%未満。 |
| 100 | 60% | 49.7〜69.7%(約±10ポイント) | 50%をまだ含む。丸めで判断を変えない。 |
| 200 | 60% | 52.9〜66.8%(約±7ポイント) | 指定モデルでは50%を除くが、費用後の利益は示さない。 |
| 500 | 60% | 55.6〜64.3%(約±4ポイント) | 勝つ確率の不確実性が狭いだけで、利益期待値の証明ではない。 |
| 1,000 | 60% | 57〜63%(丸め、約±3ポイント) | モデル内精度は増すが、品質・依存・損益幅は重要。 |
表は、 両側95%Clopper–Pearson区間 を整数勝数と独立・一定確率試行で使います。依存や確率変化で単純な解釈は崩れます。正の集中は情報量を減らすことが多くても、全依存が同じ効果とは仮定しません。集中・変化をどう扱うか示します。
比較列が50%を使うのは、二損益の固定1:1モデルで、 追加費用なしの場合の分岐点だからです。一般に正の利益幅W・損失幅Lなら、追加費用なしの分岐勝率は、 L / (W + L)、同じく、 1 / (1 + W/L)です。利益2R・損失1Rなら33.3%、利益0.5R・損失1Rなら66.7%。一定の追加平均費用cで基準は、 (L + c) / (W + L)へ上がります。ただしW・Lへ未計上の費用だけです。
実務上の結論は「200で十分」でなく、 選んだ判断基準に対する不確実性が重要ということです。n = 100では両側区間にまだ50%が含まれるので、その特定の区間基準では未決です。n = 200では50%が除外されますが、利益を生む戦略だという主張には、なお損益構造全体と費用が必要です。未決の結果なら通常は計画に沿って研究を続けます。それは実口座の数量を小さくすれば自動的に許可されるという意味でも、既存戦略を廃止すべきだという証明でもありません。安全限度と実証された実装上の欠陥は、別個の停止理由です。
二項検定:勝つ確率は50%超か
ここでの帰無仮説は、 p = 0.5、事前指定の対立仮説は、 p > 0.5です。「取引の優位性なし」とは違います。勝率40%で損益比3:1なら費用前期待値は正、70%でも0.5:1なら余裕は小さく、費用で消え得ます。
片側p値は、帰無仮説と抽出仮定の下で、標本以上の勝数を観測する確率です。帰無が真、優位性がある、将来利益になる確率ではありません。本例の説明区分を使うなら慎重に解釈します。
- 0.01未満: 一つの事前検定では帰無下で比較的珍しい上側裾の結果ですが、有用な取引効果の証明ではありません。
- 0.01–0.05: 事前の片側5%検定に通る場合がありますが、多候補の選択には適切な多重性手順が必要です。
- 0.05–0.10: 5%棄却基準は通らず、その基準では効果は未確定です。
- 0.10超: その基準では勝率の帰無を棄却する証拠が不十分です。無作為な成績や、損益幅由来の優位性の欠如を証明しません。
結果前に方向と基準を選びます。30変種を探した後の最小未調整p値は選択結果です。第2節に全試行履歴の重要性を説明しています。
現在のSciPyでは、 from scipy.stats import binomtestの後に、 binomtest(wins, n_trades, 0.5, alternative='greater').pvalueを使います。 公式API文書 には1.7.0での導入が記されています。旧、 binom_test は1.10.0で非推奨、1.12.0で削除されました。古い例を写さず、現行の結果オブジェクトAPIを使います。
100取引60勝の片側p値は約、 0.02844、30件18勝なら約、 0.18080です。同じ60%でも異なります。前者は未調整・事前指定の5%、 片側 に合格し、後者は不合格です。表の100取引区間が50%を含んでも矛盾しません。表は、 両側 95%です。信頼水準と検定方向をそろえてから判断を比べます。
勝率だけでなくR損益を検証する
勝率40%、平均利益3R・損失1Rなら、追加費用前期待値は、 0.4 × 3 − 0.6 × 1 = +0.6Rです。勝率70%、平均利益0.5R・損失1Rならわずか、 +0.05Rです。後者は勝率が高くても費用余裕ははるかに小さい。どちらの数値仮定も実戦略の品質証拠ではありません。
一標本t検定は仮定と近似が適切なら純R平均をゼロと比べられます。統計量は、 t = mean_R / (sample_sd_R / sqrt(N))で自由度N−1です。選択済み・依存・裾の厚い損益への完全な統計回答ではなく、別の推論設計や再標本化が必要な場合があります。
平均+0.3R、標本標準偏差1.5Rの例で、N = 30ならt ≈ 1.10、片側p値は約、 0.14です。N = 200で同じ平均・ばらつきならt ≈ 2.83、片側p値は約、 0.003です。後者は仮定下の特定の平均ゼロ帰無に対し強い証拠ですが、確実性や実取引の自動許可ではありません。 SciPyの一標本t検定API は対立仮説を明示できます。 alternative='greater' は、事前の問いがそれに当たる場合だけ選びます。
同じ点推定でも標本数で結論が違い得ます。Nと適切な純期待値区間を記録します。特定Nで確実にならず、有意になるまでの反復確認は別の選択問題です。
実務の期待値の式
W%・L%は比率、条件付き平均利益・損失は正の大きさを使います。損益ゼロも総数に含めます。勝率54%、平均利益1.8R・損失1Rなら、 0.54 × 1.8 − 0.46 × 1 = 0.512R、約+0.51Rです。
これらは、 実現平均で、予定目標比ではありません。目標が当初幅の1.8倍でも、分割・早期決済・約定で変わるので実利益平均+1.8Rとは限りません。全費用控除済みのRなら再控除せず、未計上費用は純主張の評価前に一度だけ入れます。+0.2〜0.3Rの費用で小さい控除前利益は消え得ます。単位・分母で計算を追えるようにします。
SQN:報告方式であり、資金配分判断ではない
次の形のスコアは、 SQN = sqrt(N) × mean(R) / std(R) 平均損益、ばらつき、標本数を組み合わせます。[5] 同じ平均・標準偏差でも上限なしは√Nとともに上がり、長い検証は一取引の優位性が増さずとも高得点になります。標本標準偏差の方式とN上限を示します。本章の上限付き変種と無上限値は交換できません。
記事15.9 に共通定義と制約があります。SQNは実在する優位性を証明せず、OOSや費用モデルを代替せず、単独で配分を決めません。
平均利益0.7R・損失1.2Rを加えると、 (27 × 0.7 − 20 × 1.2) / 47 = (18.9 − 24) / 47 ≈ −0.109Rです。合計は、 −5.1Rで、プラスではありません。金銭Rを初期資産1%で固定すれば−5.1%です。27利益がすべて正確に+0.7R、各損失が−1.2Rで毎回現在資産1%をリスクにすれば、 1.007^27 × 0.988^20 − 1 ≈ −5.17%です。二つの平均だけでは、個別損益の大きさも関係するので複利結果は一意に決まりません。
現金プラスと無加重平均Rマイナスの併存は、金銭リスクの重み、入出金、費用、照合誤りなどが原因で、決めつけず調べます。変動リスクでもR期待値は計算できます。各取引には正の、 開始前に固定したR₀が必要で、 R_i = 純 P/L_i / R₀_iです。リスク重み、資産経路、現金フローなしに、無加重R合計を口座変化率へ換算はできません。教訓は不足列の保存で、一指標の不備で八か月の観測を捨てることではありません。 小さい・依存のある標本では推論を限定します。
7. 約定・費用モデル:スプレッド・スリッページ・資金調達・手数料・分割約定
費用の過小評価で損失実装が過去検証では利益に見え得ます。四費用を分け、約定モデルと照合して一度ずつ数えます。詳細な料金表も不可能約定を補いません。
スプレッド:固定か変動か
| モデル | 説明 | 適切な解釈 |
|---|---|---|
| 固定スプレッド、例1ピップ | 検証全体で設定値一つ。 | 速い初期選別か明示した単純化シナリオ。薄い流動性では楽観的で、実取引主張の前に感応度確認が必要。 |
| 過去平均スプレッド | 6〜12か月の推定平均を一値で報告。 | 平均と裾が代表的なら、明確な流動時間帯の粗いモデル。終日平均は実開始費用を隠し得る。 |
| 時間帯別スプレッド | 時間帯・流動性別の値。例は流動時0.3ピップ、ロールオーバー前後4ピップ。 | 詳しいシナリオだが、表・時間帯・局面境界の証拠が必要。全気配や発表衝撃は再現しない。 |
| ティックごとのビッド・アスク幅 | 選択配信の各ビッド・アスク観測が示す幅。 | 幅に敏感な足内戦略に有用。ただし板深度、可能数量、待ち行列位置、自業者約定を自動では含まない。 |
Tick Data Suiteは、ティック取込、変動スプレッド、追加約定設定を扱うMT4工程の一つです。提供元は機能とモデル品質99%を宣伝していますが、テスター関連指標で、戦略や実約定が正しい確率99%ではありません。購入は表示勲章でなく、研究に不足するデータ・機能で判断します。
幅に敏感な短期・発表戦略はモデル変更で符号が変わり、約100ピップ幅のスイングは小差に鈍いかもしれません。有料なら回収できるとせず測定します。本記事は購入推奨・現行料金案内ではありません。
スリッページ:固定・条件付きモデル
スリッページは、方向と注文側を指定した参照価格と実約定の差です。過去モデルと実約定を比べるには、参照時刻と気配基準の一致が必要です。モデル候補は、
- 固定型: 開始・決済各0.5ピップなどの固定不利幅。単純ですがストレス時には不足し得ます。
- ATR条件付き: 確定M5のATR(14) × 0.1をピップ換算する例。選んだ変動率と増減しますが、係数の調整が必要で裾を表すとは限りません。
- 数量・深度条件付き: 注文数量、利用可能深度、執行場所の手順を使います。必要な深度・注文状態データは通常のティック履歴に自動では含まれません。
通常は一ピップ未満、突破前後は数ピップ、発表後は二桁もあり得るという三局面の素案は、 例示で、自口座の実測分布ではありません。照合した要求・約定から自分の表を作ります。正を不利とするなら買いは、 約定 - 参照、売りは、 参照 - 約定をピップ幅で割ります。買いポジション決済は売り、売り決済は買いです。有利な約定も拒否要求も保存し、参照基準を報告します。
数十取引で通常の実装差は見つかっても、稀な約定裾は通常十分測れません。小標本平均をモデル全体とせず、期間、数量、条件を記録します。
スワップと資金調達
資金調達境界をまたぐと支払・受取が生じます。銘柄仕様は計算方式が異なり、表示値が常に「一ロット一晩のピップ」とは限りません。ポイント、通貨額、金利計算など、換算前に確認します。
- 方向: 買い・売りの率を別に取得します。等大・逆符号とは限らず両方支払もあります。過去金利環境からEUR/USD売りは永久に正、買いは負と決めつけません。
- 日数倍率: 多くのT+2銘柄は水曜境界に関連する三倍調整を使いますが、日・祝日例外は銘柄・業者によります。日付のない夜数を掛けず、保有カレンダーをモデル化します。
- 率の変更: 金利環境と業者条件を反映します。過去の日程があれば使い、なければシナリオ近似を開示します。今の表は数年前の費用を自動再現しません。
三〜八日のスイングでは資金調達が期待値の大きな部分を消費し得ます。当初幅でピップ相当をR換算し、日付付きの実率・倍率を適用します。重要費用を省けば純主張は支えられず、受取も正しい符号で記録し、他費用との相殺を仮定しません。
手数料
一部口座はスプレッド以外に数量課金します。例は標準ロット往復で主要USD 5〜7、準主要USD 6〜10、エキゾチックUSD 8〜15。シナリオで現行提示ではなく、ECN/STP名で決まりません。最低料・段階制を含む該当表を使います。
ピップ表示には、一ロット往復手数料をそのピップ価値で割り、 通貨をそろえます。標準EUR/USDの例では、 USD 6 / USD 10(ピップ当たり) = 往復0.6ピップです。PLN等の口座なら両額を一貫して換算します。分子だけ換算すると比率が誤ります。
月200取引、0.1ロット、標準往復USD 6なら、 月USD 120です。初期資産USD 1,000の月12%、同じ十二か月ならUSD 1,440、初期額の144%です。算術合計で予測・複利収益ではありません。回転と費用の点検の必要性を示し、全小口戦略が不経済という証明ではありません。
例示方針は年手数料を期待収益の20〜30%以内とします。普遍的資本基準ではなくシナリオ方針で、分母が期待粗利益か同手数料控除後かを明示し循環を避けます。保有も比例拡大するなら増資だけで一取引純優位性は増えません。まず実際の純損益と不確実性を評価します。
Tick Data Suite:MT4のティック工程
ソフト名を専門的検証の証明とせず、元の工程を使えます。
- 提供元・ライセンス: 購入前に現行の公式サイト、利用・互換条件を確認します。アドレスや転送は変わり得ます。
- データ: Dukascopyの過去データ書出し は一候補です。銘柄範囲、時刻印、気配欄、欠落、利用条件を確認します。細かい時刻でも流動性の完全性は保証しません。
- 初期設定: 二〜三時間の予定は例で保証ではありません。小期間を先に取得し、時刻換算と銘柄属性を確認し、文書化された工程へ接続して実ティック方式を検証します。
- 設定後: 変動幅、手数料、資金調達、数量制約、証拠金、ストップ設定を対象口座と照合し、標本取引を手で確認します。「全ティック」だけで記録値と生成値は区別できません。
目的は単純幅モデルとより関連する記録モデルとの差の調査です。仮説検証、欠けた深度補完、将来費用保証はできません。有用性は研究要件と自分の確認から生じます。
約定モデル:遅延・窓開け・分割約定
費用計上は実装モデルの半分だけです。項目5にシグナルから約定までの挙動も示します。
- シグナル時刻と遅延: 足の確定確認後も計算・送信・受付に時間がかかります。手動は数秒、自動はシステム・業者次第です。測定または明示モデル化します。突破ではゼロ遅延が重要でも、証拠なしに費用の一定割合と決められません。
- 窓開け: 通常のストップ成行は存在しない価格で約定できません。遅延・失敗も含め注文規則で次の約定可能気配を使います。常に正確なストップ価格なら、特に休止・発表前後の裾損失を過小評価します。
- 分割約定: 最初の価格だけでなく数量加重平均を使います。他条件同じなら一部約定は通常小さい保有ですが、価格・費用で比較は変わり得ます。本記録では注文前の元のR₀を保ち、未約定比率を別記します。別実装で約定分の配賦リスクを使うなら、後から変えず別指標とします。一開始の部分決済は一取引のままで、別観測と数えると重みが変わり勝率を歪め得ます。
- 再提示と拒否: 過去シグナルが実約定になるとは限りません。要求結果を保存し拒否確認と不明状態を区別します。候補五十・約定41はシグナル九件の欠落でなく執行九件の失敗かもしれず、同種同士を照合します。
重要仮定を遅延増加、不利な滑り、曖昧足の不利処理でストレス確認します。妥当な変更で優位性が消えるなら感応度と不足実装証拠を報告します。保守的だから全悲観例が現実的とはしません。全参照価格で即時全量を仮定するなら明記します。MAE/MFE診断と標本化方式は、 記事15.9で扱います。。
検証スクリプトの合算費用台帳
次の実行可能な教材は、本例の疑似コードを拡張します。 全要素をペアのピップ単位にします。 小さな幅・手数料表は合成で業者データではありません。UTC帯は意図的に単純化し、夏時間・発表衝撃は表しません。実研究には日付付き気配か適切な条件モデルを使います。
資金調達イベントは買い・売りの別費用と該当倍率を与え、逆率や夜数だけからの三倍推測はしません。フラグで検証損益に計上済みの要素を示します。結果は、 まだ差し引く追加調整で、台帳全額を再課金する許可ではありません。
import math
def total_cost_per_trade(pair, hour_utc, atr_pips, direction,
financing_events=(), *, spread_in_fills=False,
slippage_in_fills=False, commission_in_result=False,
financing_in_result=False):
"""ピップ単位の追加費用。正 = 費用、負 = 純受取。
各資金調達イベントには、'long'と'short'それぞれ独立した日次の
ピップ換算費用と、適用する'multiplier'が含まれます。受取は負の値です。
実際の保有期間と料率に基づき、日付付きイベントを外部で入力します。
"""
spread_table = {
"EURUSD": {"low": 1.5, "normal": 0.7, "peak": 0.3},
"GBPJPY": {"low": 4.0, "normal": 2.0, "peak": 1.2},
}
commission_table = {"EURUSD": 0.6, "GBPJPY": 0.8} # 合成の往復ピップ。
if pair not in spread_table:
raise ValueError("未対応ペア:明示的な費用モデルを指定")
if direction not in ("long", "short"):
raise ValueError("directionはlongまたはshortが必要")
if isinstance(hour_utc, bool) or not isinstance(hour_utc, int):
raise ValueError("hour_utcは0から23の整数が必要")
if not 0 <= hour_utc <= 23:
raise ValueError("hour_utcは0から23の整数が必要")
if not math.isfinite(atr_pips) or atr_pips < 0:
raise ValueError("atr_pipsは有限かつ非負が必要")
regime = "low" if hour_utc >= 22 or hour_utc <= 6 else (
"peak" if 8 <= hour_utc <= 16 else "normal"
)
spread = 0.0 if spread_in_fills else spread_table[pair][regime]
slippage = 0.0 if slippage_in_fills else 2 * 0.1 * atr_pips
commission = 0.0 if commission_in_result else commission_table[pair]
financing = 0.0
for event in financing_events:
rate = float(event[direction])
multiplier = float(event["multiplier"])
if not math.isfinite(rate) or not math.isfinite(multiplier) or multiplier < 0:
raise ValueError("無効な資金調達イベント")
if not financing_in_result:
financing += rate * multiplier
return spread + slippage + commission + financing
# 合成例:別の率で、逆符号の仮定ではない。
events = [{"long": 0.3, "short": 0.1, "multiplier": 3}]
print(total_cost_per_trade("EURUSD", 10, 5.0, "long", events)) # 2.8ピップ
print(total_cost_per_trade("EURUSD", 10, 5.0, "long", events,
spread_in_fills=True)) # 2.5ピップ
簡単な確認では追加費用前+0.4Rが、費用0.2Rなら+0.2R、0.5Rなら−0.1Rです。当初リスク幅と通貨方式でピップ台帳を換算します。明示台帳と約定モデルなしでは、過去報告がどの純結果か分かりません。
8. 都合の良い抽出とシグナル選択
正当な事前選択規則なく一部シグナルを除き良い残りを示すと、意図的・無意識の選別になります。不利観測が消え、全実装は損失なのに利益に見え得ます。
三つの選別形態
1.「良さそうでないシグナルは見送る」 有効な過去シグナルを状況が違うと除外します。後の足が見える・記憶にあるなら、「良くない」が当時の規則でなく損失と相関し得ます。裁量も研究できますが、定義した盲検・先行分類と結果前判断の保存が必要です。
2.「損失を見てフィルターを足す」 火曜朝の損失群で火曜除外を追加すれば、同期間は構造上改善しますが、火曜の特殊性は示しません。新仮説として理由を記録し、選択標本を確認証拠とせず独立検証します。
3.「きれいな期間だけ使う」 2020年三月、2008金融危機、2018末の売りなどを除いて残りを代表的と報告します。Lehman破綻は2008年九月、テーパー・タントラムは2013で2018年十二月ではなく、正確に名付けます。事前規則で観測条件を除外できても、不都合だから予想外の危機を後から除けません。ストレス期を残し、当時情報で何をしたはずか示します。
選択的なシグナル処理を検出する
- 候補・適格シグナル・約定を別々に数える。 手動見送り10%・30%は例示監査基準で、選別が起きた確率ではありません。少数の結果選択でも偏り、高い規則除外率でも正当な場合があります。
- 除外理由と時刻を残す。 事前フィルターと結果後の即興判断は違います。意図した裁量は機械的フィルターと装わず、判断時の評価を保存します。
- 全期間を再構成する。 難条件も含め全適格シグナルと選択した約定を比べます。成績差は選択・執行失敗・本当の事前フィルター効果などを診断し、差だけでは原因は分かりません。
シグナル一覧という具体的管理
自動生成または記録照合の一覧で全候補に状態を付けます。選んだ水準で相互排他的にし、実行へ進む場合は要求・約定を別保存します。
| 状態 | 定義 | 見直し方式の例 |
|---|---|---|
taken | 指定規則で実行した適格シグナル。 | 90%超の目標は適格かつ約定可能なシグナルの遵守率で、全未処理候補ではない。 |
skipped_by_rule | カレンダー・相関・時間等の固定事前規則で除外。 | 一律比率限度なし。規則・実測入力・理由を保存して監査可能に。 |
skipped_manual | 本来適格なシグナルをモデル外裁量で見送ったもの。 | 例では10%で対応を強めるが、結果に導かれた省略はそれ未満でも調査。 |
invalid_data | 判断時に必要入力が欠落・無効・利用不能。 | 5%警告は例。問題の種類と時刻を診断し、通常規則の除外として隠さない。 |
有効シグナル後の業者・設備障害には、次のような追加執行状態が必要です。 order_rejected, order_state_unknown や partial_fill。市場データが自動的に無効なのではありません。誤り率の分母を明示しないと、無制限の規則除外でtaken目標が数学的に誤解を招きます。
例では手動見送り10%超で、差を理解するまで進行停止です。妥当な理由を新規則として新版を評価するか、今の工程では再現実行できないと認めます。新フィルターが当時あったかのように旧裁量を付け替えません。数値は工程の選択で、その未満なら偏りが消える境界ではありません。
EA販売説明の都合の良い選別
購入基準は、自分のデータ・費用仮定で関連検証を再現し、制約を理解できることです。ソース公開なら深く調べられますが、非公開が不正とは限らず、方針上許容できない検証限界がある場合があります。高価、滑らかな曲線、高評価でも埋まりません。一選択報告の説得力だけで購入・稼働しません。
9. よくある検証の誤り
誤り1:全データで最適化
五年で200組を試し+180%を選び、未使用評価なしとします。最大値の大きさだけで優位性は示せません。時系列設計で項目4に分割、7に全200試行を記録します。70/30は一例です。先行段階は有用でも、過去の選別を独立検証へ変えません。
誤り2:小さい過去標本で決着
六か月24取引も過去検証ですが、広い長期主張には弱い証拠かもしれません。平均に比べ不確実性が大きく、一局面だけかもしれません。目的範囲に合う履歴と実観測局面を示します。数年というだけで網羅は保証されません。200・500は例で、精度は分布・依存・判断基準から評価します。
誤り3:片側気配だけで反対側を省く
買いの開始・決済を両方ビッドにすると開始アスクが抜け、単純な対応価格比較では幅程度かさ上げし得ます。買いはアスク開始・ビッド決済、売りは逆です。妥当なアスク・約定モデルを明示追加すればビッド履歴も使えます。MT5記録ティックや適切なMT4工程は検討候補で、完全な現実性の証明ではありません。[6] 項目3に気配側・仲値・生成/記録データ方式を記録。
誤り4:局面の違いを無視
一つの政策・変動率・流動性環境の結果は移らない場合があります。途中で変化した多年を一律に低金利・高金利・QE・QTと名付けません。ローリングは差を示せても、局面優位性には十分な証拠と当時情報で認識する規則が必要です。好期間を見て作ったフィルターは新変種で自動稼働規則ではありません。
誤り5:検証せず移植性を主張
EUR/USDの好結果だけで他通貨へ移せません。横断主張なら、例えば五〜八ペアの事前集合を適切な費用・依存処理で評価します。元がEUR/USD限定なら、他ペアの失敗だけでは反証や曲線適合の証明にはなりません。結論範囲を証拠に合わせます。
誤り6:収益とリスク調整成績を混同
同期間でAの年率35%・最大下落22%、Bは25%・8%なら、単純Calmar型比較は、
- A: 35 / 22 ≈ 1.6.
- B: 25 / 8 ≈ 3.1.
です。その定義ではBが収益対実測下落で高くても、安定性・将来リスクの全側面は分かりません。二数だけでSharpeは計算できず、頻度付き収益系列、対応基準、年率化方式が必要です。 (平均期間収益 - 基準収益) / 期間収益標準偏差。期間数の平方根による年率化にも仮定の裏付けが必要です。
年収益を月標準偏差で単位をそろえず割るのは適切ではありません。入力欠落は算出不能で、概算を作る許可ではありません。 記事15.9 でSharpe・Sortino・Calmarと各未測定部分を扱います。
誤り7:稼働後に測定停止
過去・デモ・限定試行を通っても増配後に測定を止めてはいけません。実装照合と、仮定・不確実性・シナリオ限度との比較を続けます。新標本にも不確実性があり、旧区間内の新平均だけでは不十分です。 記事15.10 が見直し周期と維持・観察・縮小・停止を定義します。本記事は定義、元区間、費用、模擬下落分位点の比較記録を提供します。
誤り8:連敗のたびに変更
五〜十敗後の週次変更は、各版の情報到来より速くなり得ます。独立結果・勝率52%なら、五連敗が一つの、 事前指定ブロック に起こる確率は、 0.485 ≈ 2.5%です。一度以上の同じ連敗が、 100取引のどこか に起こるのは約、 75%です。後者には重複する機会が多く、独立窓と仮定する、 1 - (1 - q^k)^(N-k+1) では、本例の正確な連敗確率を過大評価します。
モデル計算で、実取引の独立性の主張ではありません。破綻宣言前に正しい確率を問います。直近週の印象でなく事前基準を使います。運用障害、限度超過、実証データ欠陥は即停止の理由で、保護前に統計的有意な期待値低下を待つ必要はありません。改訂は新版と独自評価を要します。
変更前に層を順番に確認
戦略欠陥と実装・データ問題を混同せず、編集前に結果が何を測るか確かめます。
- データと約定。 業者記録と照合し版と逸脱数を確認します。汚染期を戦略の純粋な成績とは読めなくても、運用障害の証拠にはなり得ます。
- 費用。 実幅・滑り・手数料をカードと比べます。費用増0.15Rと期待値減0.15Rで差を説明できるかもしれません。開始機構が同じでも費用は成立条件の一部です。
- 局面。 想定条件が実際に起こり、適格フィルターを正しく使ったか確認。
- 優位性。 その後に損益分布と不確実性を事前規則と評価し、直近十数件の平均だけでは判断しません。
「システムか執行を変えるか」の全表、格下げ、見直し工程は、 記事15.10です。開始・決済論理へ帰属する前に最初の三層を解消します。本当の変更は版付き検証へ戻り、旧証拠の見えない修正ではありません。
10. チェックリスト――実判断の二関門
一覧は、 五区分の20項目で、統計評価、方法管理、費用、先行検証、運用規律です。項目17は実観測を要し初回限定実研究の前提にはできないため、関門を二つにします。別途承認試行を考える前は、 1〜16、19、20 を確認し、後の規模判断前は、 全20項目 を確認します。項目20の継続測定計画は試行前から必要で、後だけではありません。
点数で必須要件の欠落は埋められません。「該当なし」には理由を記録します。期間・件数・数値方針は例で市場標準ではなく、完了は収益性認定・注文権限ではありません。
回答を送信せず、研究記録として意図的に保存もしません。再訪時に復元されても確認済みの証拠ではありません。見直し済み一覧を日付付きの検証保管物と保存します。
必要保管物:十一要素
稼働見直しには監査履歴が必要です。なければ半年後、元の結果を生んだ規則・データ・仮定を再構成できないかもしれません。
- 十二項目の検証カード: 評価前に1〜9、その後に結果と制約、再現目録を完成・確認。
- 過去入力: 市場・カレンダーの元データ、提供元、取得日、許可、ハッシュ、洗浄版、変換コード、欠落・重複・改定記録。
- 戦略仕様・実装: 読める規則、コード、値、依存・端末版、固定時刻、正確なコマンド。OOS後でなく前に固定。
- IS・検証・OOS報告: 分割境界、全履歴、資産曲線、期待値区間、各期間の収益係数・下落、比較可能な基準結果。
- 模擬・ストレス報告: 例では1,000以上の経路にシード、コード、ブロック、期間、数量、収益・下落分位点、超過率、制約。経路増加は市場観測増加ではない。
- 費用・口座モデル: 時間帯・ティック幅、滑り仮定、別資金調達率・倍率、手数料、換算、証拠金、銘柄制約。
- デモ・模擬記録出力: 例示30日の全予定観察を、元シグナル時刻・状態・過去照合付きで保存。
- 承認・完了した限定実記録: 例示90日の予定期間。各R₀、純R、MAE/MFE方式、実費、要求、約定、事故、必要なら前後画面。
- シグナル一覧: 全候補と除外・手動見送り・無効データ・執行失敗の理由、再現可能な逸脱率分母。
- 業者設定記録: 検証日の口座種別、銘柄条件、レバレッジ、最低数量、ストップ、費用。認証情報を出さず、約定紛争の調査証拠を保持。
- 復旧可能なバックアップと判断記録: 固定EA・スクリプト・ひな型、確認済み結論、未解決制約、担当、復旧先、停止・再開条件。
ディレクトリー例は、 strategy_X/2026-Q2/{01_data,02_IS,03_OOS_locked,04_montecarlo,05_demo,06_micro_live,07_artefacts}です。適切な媒体へ復旧可能に保存し機密出力を守ります。クラウドは方針上の選択で義務ではありません。ハッシュはファイル差を示し、元気配の正しさは証明しません。
第一関門の完了で可能になるのは、 承認するかの見直し であり、限定実研究の自動注文ではありません。二十完了で後の稼働・規模見直しが可能です。重要条件不足なら未解決段階へ戻します。稼働しない結論も同じく正当です。
よくある質問
過去検証から実試行の見直しまでどれくらいかかりますか。
例は過去作業四〜八週、デモ30日、別承認の限定実試行90日で148〜176日、約五〜六か月です。複雑な複数資産・時間軸なら過去段階だけで八〜十六週もあり得ます。計画仮定で業界標準・証拠保証ではなく、稀なシグナルは長い観察を要します。不合格候補は未承認のままで、経過時間は基準引下げの理由になりません。任意の紙段階、停止、改訂は日程に黙って吸収せず追加します。
MT4 Strategy Testerで十分に検証できますか。
戦略・データ・設定によります。始値だけでは表現しない足内順序を確定できません。幅に敏感なら固定スプレッドは不足し、全ローリングWFAには期間・記録管理が必要です。TDS等で不足機能を補えても、99%品質表示は正しさの認定ではありません。記録/生成ティック、気配側、費用、時刻、標本取引を確認します。MT5の過去Forwardは保留分割で、実データの先行観察ではありません。[6] 端末名で正当になると考えず、必要証拠から道具を選びます。
過去検証が50取引しかなければどうしますか。
五年でなく十年など長い関連履歴、本当に移せるなら事前のペア横断研究、ブロック長5・10・20の感応度を検討します。履歴が延びても観測は一定率で増えるとは限らず、五〜八ペアで独立証拠が五〜八倍になるわけではありません。再標本化は市場観測を一つも作りません。区間が基準をまたぐなら未決・頻度制約と記録します。妥当な仕組みも不足証拠の代わりや小口実取引の許可ではありません。計画に従い研究継続か稼働辞退です。
良い過去検証後にデモを飛ばせますか。
良い過去結果でも、通知、起動、配信、注文状態、操作者の工程が到来観測で働くかは分かりません。デモ等で資金リスク前に欠陥を見つけられます。模擬約定は実際の滑り・流動性を完全測定しないので、後の実約定研究は別の明示承認です。端末の儀式ではなく、過去検証が問わない運用問題を飛ばさないことが目的です。
個人戦略の現実的な年収益率はどれくらいですか。
「典型的に利益を出す個人の収益率」一つを支える信頼データはありません。監督当局の損失口座率は利益口座の収益分布ではありません。高収益ならレバレッジ、リスク、分母、現金フロー、選別、費用、好期間の長さを点検します。プロップ表示の分母が自己資金と違うなら説明が必要です。50%・200%・500%は調査する主張で、不正・不可能性の証明基準ではありません。宣伝年率でなく、不確実性付きの検証可能な純R基準を定めます。
局面変化と戦略悪化はどう区別しますか。
データ、実装、費用から始め、想定条件の発生を確認します。本当に未閲覧の最近期間は固定規則の新証拠でも、数と局面範囲に制約され、六か月なら十分とは限りません。同日付の過去再構成と実行が違えば、すべて市場のせいにせず照合します。新期間で局面フィルターを設計したらその版の開発データです。維持・観察・縮小・停止は、 記事15.10の手順と、即時の運用問題への別安全管理に従います。
先行観察を過去検証より先にできますか。
特に当時の入力や裁量分類がないなら可能ですが、制約を示します。週五取引で30日約21、半年約130、二年約520です。精度は件数だけでなくばらつき・依存で決まります。一日50取引なら月1,000超でも共通イベントで強く依存し得ます。過去は範囲・背景、先行は実際に知り得たこと・行動の記録を加えます。名称は推論十分性を保証せず、過去データ不足が実資金実験を強制することもありません。
十分に検証された戦略でも、証拠金請求や強制決済は起こり得ますか。
はい。未観測の流動性ショックや政策ショック、配分の拡大、業者の証拠金条件の変更、設備障害は、検証で表された条件を超え得ます。観測した取引を再標本化しても、未観測のあらゆる事象を生成できるわけではありません。計画のリスク限度、記録された拡大・巻き戻し基準、事故手順については、 記事15.8を使ってください。 記事15.11 は規模の変更を扱います。一部の障害はストレスモデルで表せますが、どのモデルもその深刻さを余すところなく保証しません。証拠金警告と自動強制決済も業者ごとの仕組みであり、互換性のある世界共通の事象ではありません。好調な四半期は計画外でリスクを増やす許可ではありません。
戦略を作る代わりにEAを買えますか。
購入した実装も評価できますが、その価格、評価点、選んで提示されたバックテストは、十分な精査の代わりにはなりません。試行とバージョンの履歴、再現可能なデータと費用の仮定、実運用成績を主張するなら十分な情報を含む実記録を求めます。この例では、選別上の希望条件として少なくとも三年の公開実運用記録を挙げていますが、保証ではありません。第三者による追跡でも、出所と入出金の確認は必要です。ソースコードがあれば、より深い検証が可能です。自分の方針でその提供を必須とする場合、提供の拒否は製品がその方針を満たさないことを意味するだけで、販売者が不誠実である証拠ではありません。選択の偏り、隠された変種、生存者バイアス、現在の実行可能性、執行費用を考慮してください。本記事は、マーケットプレイスのEA全体について信頼できる成功率を示すものでも、購入が自作より一律に経済的に有利だと結論づけるものでもありません。
手動検証は自動化より本質的に劣りますか。
いいえ。手動には固定抽出・判断手順、完全記録、後知恵対策、自動には正しいコード、当時入力、妥当な約定モデルが必要です。両方とも誤りを反復し得ます。裁量部分を示し結果前判断を保存します。
標本外期間を再実行できますか。
変更なしの再現・監査は可能です。結果で変更・選択すれば、その仮説の開発情報になります。元結果を残し後利用を正直に示します。新ファイル名でも未閲覧には戻りません。
同じ足にストップと目標がある場合は。
OHLCだけでは順序は不明です。適切な詳細データと気配側を使うか、悲観的ストップ先・楽観的目標先の感応度を示します。ティック順でも全約定可能数量や、気配前の注文存在は保証しません。
高勝率なら正の優位性が分かりますか。
いいえ。47取引例は勝率57.4%でも平均損失が大きく合計−5.1Rです。当初リスクを分母に実純損益を検証します。勝率の二項検定は純R平均の検定ではありません。
モンテカルロは最大可能下落を示しますか。
いいえ。分位点は指定模擬分布の記述で硬い境界ではなく、入力、抽出法、ブロック長、期間、数量に依存します。未観測衝撃、取引中変動、流動性障害は経路増加で自動生成されません。
書き出した全取引からスプレッドを引きますか。
未計上の場合だけです。実ビッド・アスク開始・決済には通常幅と実現した滑りが含まれます。通貨・数量をそろえて不足費用だけを加え、手数料・資金調達を照合し二重控除しません。
未決なら半分の数量で取引できますか。
それだけでは許可されません。証拠不足は不足です。限定実約定研究には別の目的、権限、実行可能最低量、受け入れた損失予算が必要です。稼働せず観察継続も正当です。
出典・確認注記
最初の六件は方法の読書一覧で、合成戦略の成績や普遍的な件数・リスク・稼働基準は支えません。端末資料はその機能の説明で、全業者・執行場所の説明ではありません。
ポーランド語版の読書一覧
- Robert Pardo、 The Evaluation and Optimization of Trading Strategies、Wiley、2008。戦略開発・最適化・先行期間評価。
- David Aronson、 Evidence-Based Technical Analysis、Wiley、2007。仮説検定、データ探索、戦略評価の統計推論。
- Marcos López de Prado、 Advances in Financial Machine Learning、Wiley、2018。研究選択、過去検証の過剰適合、依存観測の検証。
- Howard B. Bandy、 Quantitative Technical Analysis、Blue Owl Press、2015。システム評価、再標本化、数量、下落。
- Van K. Tharp、 The Definitive Guide to Position Sizing、International Institute of Trading Mastery、2008。R損益、数量、システム評価。R統計は稼働承認ではない。
- MetaQuotes、取引戦略の検証、および MetaTrader 5、戦略検証。過去方式、先行分割、モデル設定。過去の先行分割は到来実データの観察ではない。
以前の英語版の追加技術資料を以下に維持します。数値例は教材シナリオで独立検証した市場成績研究ではありません。正確な二項区間は数値照合し、NumPyと費用台帳は仲介口座とは別に確認されています。
- TradingView、戦略、および 描き換え:業者模擬、合成チャート、情報時点。その端末の説明で共通取引所規則ではない。
- Baileyほか、The Probability of Backtest Overfitting、および The Deflated Sharpe Ratio:成績評価の選択と非正規性。
- MetaTrader 5、取引の実行、および MQL5、銘柄属性:端末の注文処理、契約固有の数量・資金調達・約定設定。
- MetaTrader 5、戦略検証:過去分割、ティック方式、遅延、口座・費用設定、ピップ損益計算の制約。
- Global Foreign Exchange Committee、The Use of Last Look in FX Markets:ホールセールFXのラストルック定義と開示。
- NIST/SEMATECH、比率の信頼区間:区間構成と仮定。
- SciPy、binomtest、および ttest_1samp:二項確率と母平均の別々の検定。