そのバックテストのPFは、本物のエッジですか
自分で作ったEAのバックテストで PF 1.17 という数字が出たとします。20年分、年52取引、勝率44.7%。悪くない数字に見えます。
これは私が実際に得た数字です。そして、使い物になりませんでした。
理由はこれです。全トレードを「買い」と「売り」に分け、さらに期間で割ったものです。
単位はR(1トレードで許容した損失を1とした倍数)です。
買い・売りとも黒字だった期間は、6期間中1期間だけでした。符号が期間ごとに入れ替わっています。通算の PF 1.17 は、これを平均しただけの数字でした。
ゴールドは2010年の1,209ドルから2026年の4,563ドルまで、16年で3.8倍になっています。この期間で買い寄りになりやすい戦略を作れば、ロジックの良し悪しとは無関係に良い成績が出ます。バックテストの結果画面には、それが書かれていません。
この検査を8つのエントリー型に当てました![]()
7つが落ちました。残ったひとつも母数が足りず判定できなかっただけです。
XAUUSD・M5で1,492,396本(22年分)。初期SL 6水準 × トレール有無 × 保有時間5水準 × 時間足4つ × 時間帯4区分 × 期間2通り × スプレッド3水準。組み合わせは数百通りあります。その全部の数字を、丸めずに載せています。
原因はスプレッドではありませんでした。0.35ドルを0.10ドルまで下げても、PFは 1.129 から 1.154 にしか動きません。
厳しすぎる検査ではないことも書いています
通る例を対照実験として載せています。別の通貨ペアで同じ検査を同じ手順で通すと、買い +0.099R / 売り +0.078R でほぼ対称、4期間のうち3期間で買い・売りとも黒字になります。
同じ検査で、片方は落ちて片方は通ります。
収録内容
第1巻 実装と診断 ― EAのバグは、数字に出る(44ページ)
USDJPY・M30のEAを1本、設計から実装、20年分の検証までやりきった記録です。20年分・2,685取引を全部R倍数に直して分解しています。
- 第0章 はじめに ― この本の読み方
- 第1章 作ったものの全体像
- 第2章 設計で最初に決めた5つのこと
- 第3章 MQL4の実装でハマる12の罠
- 第4章 バックテストの読み方
- 第5章 R倍数で考える
- 第6章 二重検証 ― Pythonで同じEAをもう一度書く
- 第7章 事件 ― 初期値ひとつで純益が2.2倍になった
- 第8章 効かなかったこと、全部
- 第9章 フォワードテストの設計
- 第10章 運用に出す前に固めること
- 付録A 開発チェックリスト/付録B MQL4の罠 早見表/付録C 用語集/付録D 数字の出どころ
図版13点。第3章の罠12個は、すべて実際に踏んだものです。iATRがWilderの平均ではないこと、iHighest/iLowestの開始位置、IsTesting()がビジュアルモードを切っていてもtrueになること、トレール幅を初期SLより小さくすると建玉直後にSLが詰まること。どれも、気づくまでは「なぜか成績が悪い」という形でしか現れません。
第7章は、ロジックを1行も変えずに設定値をひとつ直しただけで純益が2.2倍になった話です。エントリー条件を疑っていたら見つからなかったもので、取引を保有時間別に割ったときに初めて姿を現しました。
第2巻 分割検証 ― そのバックテストが本物か見抜く(27ページ)
2本目を作ろうとして、8つの手法を全部落とした記録です。
- 第0章 はじめに ― この本の立ち位置
- 第1章 なぜ2本目を作ろうとしたか(「6か月で利益が乗る」を数式にする/同じPFなら勝率はほとんど効かない)
- 第2章 検証環境を作る ― .hstを直接読む(フォーマット/サーバ時刻の特定/時間帯別のボラティリティ)
- 第3章 シミュレータを信じる前に検算する
- 第4章 素のエッジを測る ― 8つの型
- 第5章 分割検証 ― ここで全部落ちた
- 第6章 決済を付けると何が起きるか
- 第7章 原因はスプレッドではなかった
- 第8章 撤退の判断
- 付録A 検証コード全文/付録B 合格ライン23項目/付録C 数字の出どころ
第1章では「6か月で利益が乗る」を数式に直しています。結論だけ書くと、これは取引数とPFで決まり、勝率はほとんど効きません。同じPFなら勝率55%あたりが最良で、40〜75%はほぼ横ばい、80%を超えると逆に悪くなります。
動くPythonコード2本
| goldlab.py | MT4の.hstを直接読む/サーバ時刻を特定する/時間帯別のボラを測る/素のエッジを測る |
| fastsim.py | 決済シミュレータ(149万本を0.3秒)/分割検証/合格ライン判定 |
Python 3 と NumPy だけで動きます。外部ライブラリは不要です。お手元のヒストリーにそのまま当てられます。
.hstのタイムスタンプはUTCではなくサーバ時刻です。ここを取り違えると時間帯フィルタが1時間ずれます。データ自体からサーバ時刻を特定する手順も書いています。
こんな方に
- 自分でEAを検証していて、出てきたPFをどこまで信じてよいか判断できない
- パラメータを掃くと良い数字が出るが、それが何なのか分からない
- バックテストと実運用が合わない理由を突き止めたい
- MT4のヒストリーを自分で読んで分析したい
こんな方には向きません
- すぐ使える設定値が欲しい方 ― この本に設定値の答えはありません。私が見つけられなかったからです
- Pythonをまったく書いたことがない方 ― 付録のコードは動かせる前提で書いています
書いていないこと
勝てるロジックは書いていません。書いてあるのは、8つの候補を落とした手順と、その全部の数字です。
第1巻で扱っているEAは今も配布しているため、エントリー条件の具体値(レンジを何本で取るか、収縮のしきい値をいくつにするか)の2つだけ伏せています。決済の設計と検証の手順は全部公開しています。第2巻のゴールドの検証は落ちた検証なので、全数値を公開しています。
ご注意
- 本書は過去データの検証記録です。将来の成績を保証するものではありません。
- 投資助言を目的とするものではありません。取引の結果について著者は責任を負いません。
- 付属コードの計算結果は、お使いのヒストリーに依存します。銘柄が同じでも業者が違えば数字は変わります。
- 無断転載・再配布を禁じます。
提供形式:PDF 2冊(合計71ページ)+ Pythonコード2本(zip)
●Payment
For those using GogoJungle for the first time Easy 3 steps to use the product!
At GogoJungle, we provide services to enrich your investment life for our members. In addition, product purchases are limited to members. Why not register as a member now and make use of GogoJungle!
