strategy

FX検証とバックテストの本質:単一の聖杯は存在しないが、理論上の“勝ち構造”は作れる

ByRyujiro Tsuji
公開日
読了時間10

数学と統計学上の観点からトレードでの勝ち構造を分析し、説明していく。単一の聖杯は存在しないかもしれないが、数学的に限りなく期待値が高いエントリーは存在する

はじめに

FXや株式トレードで「聖杯」という言葉は度々耳にすることが多いと思うが、それらは大抵の場合、「絶対に勝てる手法」「そのタイミングで勝てる手法」などを表すことが多い。
それらは実際にあるのかもしれないが、私は見たことも納得したこともないので、それらが存在するかどうかは割愛する。
今回は検証やバックテストにおいて、なにを目的とし、どのように検証すればその検証が意味あるものになるかを説明していく。


検証の目的とは

FXや株式での検証と聞くと、おそらく手動でチャートを巻き戻しながら検証するものや、プログラムを書いて実行するもの、そしてEAなどを購入して自動売買してそれがどういう実績になるかを検証するものがあるだろう。
様々なバックテストのやり方があ存在するが、今回はそれらをまとめて「検証」と呼ぶことにするが、そもそも検証の目的は何だろうか?
皆が考える検証というのは、「その手法が正しいのか?」を確かめることだ。
だが、それでは不十分だ。

勝てる条件を探す

先程の勝てる手法を検証すると一緒ではないか?と思うかもしれないが、全くこれは違う。
これはつまり、勝っている曜日や時間帯、または特定の通貨ペアや相場環境など、「どの条件で勝てるのか?」を探すことが重要なのだ。
勝てる条件を探せなかったら、その検証はなんのためにやっているのかわからなくなる。

負ける条件を探す

これも非常に大切だ。
なんなら、検証において最も大切なことだ。
負ける条件を知ることができたら、その条件下でトレードをすることは一生しなくなるからだ。
つまり、理論上多くの負ける条件を知ることができたら、その分だけ負けなくなる
当然のことを言ってるように聞こえるだろうが、トレードで負けている人の多くは同じ負けパターンを繰り返しているだろう。
私も何度も繰り返してきた。

再現性があるのかを確認する

再現性がないトレードはギャンブルだ。
まだパチンコで期待値のある台を探している方が再現性はあり理性的とも言える。
例えば、バックテストを実行して、ある手法で総利益がプラスになったとする。
もしそうであれば、それらの共通点を探すのだ。
複数のフィルターがサインを出しているときにエントリーしたものが勝っているのであればそのフィルターを今後の実践に採用する勝ちはあるだろう。
それらのフィルターすべてがサインを出しているときに勝っているのであればまさに再現性を発見したとも言える。

ドリップする

前項で話した内容を踏まえると、つまり検証とはあらゆるフィルターを重ねて、そこからドリップして出てきた成果を得ることだと言える。
この作業は感覚論ではなく、後述する条件付き確率の最適化そのものである。
ただ移動平均線でゴールデンクロスが出たら買いというような単純なルールでは少しもったいない

曜日と時間帯でフィルタリング

これらは非常に重要な要素だ。
よく言われているのは、金曜日や月曜日は相場が荒れやすいからトレードはリスキーだ。という考え方は広がっている。
実際に除外してトレードして検証するには非常に良いテーマだ。

プライスアクションやチャートパターンによる多層フィルタリング

インジケーターによる数値的フィルタリングに加え、形状(パターン)によるフィルタリングは極めて有効だ。
ただし、これらを厳密に検証できる環境は限られている。
個人のトレーダーであれば、Delverのパターン認識エンジンを活用するのが最も効率的だろう。もし君がPythonを扱い、より高度な次元で形状の類似性を追求したいのであれば、 FAISS(Facebook AI Similarity Search) などのベクトル検索ライブラリを用いて、数百万件のデータから特定のチャート形状を高速に抽出するという道もある。

金利との相関関係を調べる

これらも非常に良いフィルターだ。
例えば、日本の金利よりも米国の金利のほうが高い場合はショート禁止で検証してみるなども非常に良いテーマだ。

複数のインジケータを使い、エントリー数は少ないが勝率が高そうなことを検証してみる

例えば、RSI、GMMA、MACD、ボリンジャーバンドなどを組み合わせて、すべてのインジケーターが特定の条件を満たしたときのみエントリーするようにする。
こうすることによって、多くのサインが出しているのであればかなり期待値の高いエントリーになる可能性が高い。

など、様々なフィルターをかけることによって、より精度の高いエントリーを実現し、なにより再現性が高いトレードを実現できる。
とにかく、多くのフィルターを重ねてドリップし、不純物の入っていないピュアでクリーンな条件、環境を探すことを意識することが重要だ。

ドリップの正体:条件付き確率という数学的背景

なぜ「単体のインジケーター」では勝てないのか。その答えは、統計学における**「条件付き確率(Conditional Probability)」**にある。単なるゴールデンクロスの勝率を $P(A)$ としよう。ここに「上位足が上昇トレンドである」というフィルター $B$ と、「RSIが売られすぎではない」というフィルター $C$ を重ねる。このとき、我々が知るべきは以下の数式だ。

P(A | B ∩ C) =

P(A ∩ B ∩ C)

P(B ∩ C)

つまり、 「条件BとCが同時に満たされたときに、事象A(勝利)が起こる確率」 である。トレードの検証とは、単にサインを追いかけることではない。この数式における「フィルター(条件)」の組み合わせを最適化し、不純物をドリップすることで、期待値を最大化させるポイントを特定する作業に他ならない。「期待値が低いポイントをドリップ(濾過)して捨てる」この数学的プロセスを経ていない手法は、ただの「願い」であり、戦略ではない。

手動で検証する場合

これはtradingviewのリプレイモードだ。
手動検証の画面
前述のように、多要素をフィルタリングしていくことが重要だが、手動で検証する場合はどうすれば良いのか?
ここまでの多くのフィルターを手動で巻き戻しながら検証するにはかなり大変だ。
しかし、実践では行うしかない。ではどうすればいいのか?
ここでは裁量か自動売買どっちのほうが有利か?については触れないでおく。
しかし、手動で検証ではどのように検証するかについては触れておきたい。

トレードに慣れる

これは手動で検証する最大のメリットだ。
なんでもそうだが、 練習しないと上手くならない。
例えば、スポーツで世界チャンピオンから勝てるロジックを聞いてそれを実践したからといって世界チャンピオンになれるわけではない。
ビジネスでも同じく、起業のやり方を聞いてそれを実行したからといって億り人になれるわけでもない。
つまりトレードに慣れる必要は必ずあるのだ。

実践に限りなく近づける

これも大きなメリットだ。
裁量トレードのメリットはその場の過熱感やファンダメンタルズを考慮しながらトレードを行うことができる。
手動で検証する場合も過去のニュースを遡ったりチャートの動きを読みながら人間にしかできない判断でトレードをすることが可能になる。
しかし、これだと先程の再現性がないトレードになるのではないか?と思われてしまうかもしれないが、ファンダメンタルズに関しては不可逆的で再現性は存在しない世界なのでその指摘はナンセンスだろう。
そして、ファンダメンタルズだとしても似たような事件、ニュースが起きれば似たような傾向になるという見解も存在する。

自動で検証する場合

こちら手動で検証する際とは違い、意識する点がある。
前述のバックテストや検証の本質の旨味を最大限活かせる手段だ。

正確性を重視

MT4やPythonで自動バックテスを実行する場合、まずは値動きデータの取得から必要だ。
まずはデータの欠損値や外れ値などをクリーニングし、エントリーとExitプログラムを組む必要がある。
熟練したエンジニアであれば正確に組めるだろうが、プログラミングに触れたことがない人がAIを使いプログラミングをしたとしても、それでデータを得て実践に転用するのは少々リスキーだ。
DelverなどのSaaSであれば入力フォームに条件を入力するだけですでに用意されたデータで正確性を担保できるため非エンジニアは正確性を重視するべきになってくる。

結果の可視化

例えばこのようなDelverの結果サマリーを見てみよう
結果サマリーの見方には注意が必要だ。
カーブフィッティングがあるかまず疑う、そして勝率が高いがドローダウンが高いか?などの見方には少々コツが必要だ。
Delverの結果画面

最悪の選択肢

ここまでは検証に対する考え方を紹介してきたが、絶対にやっては行けないことも存在する。
検証をしてデータを得られたのは良いが、それらが間違っていたらたまったものではない。

カーブフィッティングを疑う

これは、カーブフィッティングを疑えというものではない。
そもそも、データがある以上、カーブフィッティングなんてものは存在しないのだ。
一歩引いて考えてみてほしいのだが、 

  • エントリー条件を入力して
  • 条件通りにエントリーして
  • 条件通りにExitした結果
    であるのだから、それはその結果として真実である。
    偏った結果などではない。
    また、「この期間だけしかこの手法は通用しないからカーブフィッティング!!」などという意見も存在するが、それなら25年分を検証すればいいだけである。
    そして、その期間にその手法が通用したというのは非常に貴重なデータなので、ぜひ大切にしてほしい。
    その期間と似た条件の日に、その手法でエントリーすれば勝率は高いと考えることも可能だ。

検証しないという「緩やかな自殺」

練習をせずに試合に臨むスポーツ選手はいない。だが、ことトレードになると、多くの者が「直感」という名のギャンブルに全財産を投じる。
検証をしないメリットは何一つない。それは、目隠しをして地雷原を全力疾走するのと同じ、統計的な自殺行為である。

検証をして無駄なエントリーを減らそう

トレーダーにとって、お金は在庫だ。
それも、大変な思いをして稼いだお金を無情でカオスな市場に無闇に投げ入れるのはあまりにも虚しいことだろう。
せめて、そんな無駄なエントリーをしないためにも検証はしておくべきだ。
なによりも、自分の今までの経験よりも、25年分のデータを検証し、 数値で裏付けられた手法 でトレードするほうが理にかなっているのは明確だろう。
なにも裸の王様になる必要はない。
無料で使える検証ツールもたくさんあるので、それらを比較し自分にあった検証ツールを利用してトレードすることによって、 数10万、数100万円の損失を防げると考えたら、1日に30分だけでも検証するのが良いのは明白ではないだろうか。

[会員登録不要・無料] Delverで検証する

再現性のあるバックテストを、プログラミング不要で実行可能です。Delverを使って、あなたのトレード戦略を今すぐ検証しましょう。

Delverで検証する

タップして詳細を確認