規則のない相場を作る:実際のドル円と見分けられるか

まず、実験に使う「規則のない相場」を説明します。使うのはランダムウォークです。 ランダムウォークとは、次の値動きが上か下か、どれくらい動くかが、過去の値動きとまったく関係なく決まる値動きのことです。サイコロを振って1歩ずつ進むようなもので、過去のチャートから次の動きを当てる手がかりは何もありません(考え方は「効率的市場仮説とは:ランダムウォークと『勝てない』の誤解」で説明しています)。 この相場では、どんなルールを使っても、コスト前の期待値はゼロです。儲かるルールが1つでも見つかったら、それは偶然です。

ただし、でたらめに作ると、本物の相場とは見た目がかけ離れてしまいます。ドル円は、東京時間は比較的静かで、ロンドンやニューヨークの時間に大きく動きます。 Aさんのルールは「東京時間の値幅(レンジ)を、夕方に抜けたら入る」ものなので、時間帯ごとの値動きの大きさが本物と違うと、比べる意味がなくなります。そこで、次の条件で作りました。

こうして作った偽の相場は、どれくらい本物に似ているでしょうか。下の4枚のうち、1枚だけが実際のドル円の15分足(5日分)です。答えは図の下に書いてあるので、先に自分でどれが本物かを選んでから読んでください。

1枚だけ実際のドル円(15分足・5日分)。どれでしょうABCD
答えはC(2014年3月10〜14日のドル円)。A・B・Dは、時間帯ごとの値動きの大きさだけを本物に合わせた規則のない相場

当てられたでしょうか。多くの人は、当てられなかったか、当たっても自信がなかったはずです。 規則のない3枚にも、上昇トレンドに見える部分、レンジに見える部分、レンジを抜けて伸びたように見える部分があります。チャートの形は、規則がなくても自然に生まれるということです。 人はチャートの中に意味のある形を見つけるのが得意で、それが本物か偶然かを目で見分けることはほとんどできません(後から理由を付ける癖は、認知バイアスでも扱いました)。

この回の実験は、この「規則のない相場」を使って、次の問いに答えるものです。規則がまったくない相場に、Aさんと同じ最適化を当てたら、何が見つかるのか。 なお、第12回では、本物の値動きの順番を並べ替えて作る別の「規則のない相場」を使います。そちらは年ごとの円安・円高の流れを残すので、今回のランダムウォークとは答えられる問いが違います。

Aさんと同じ探索をノイズに当てる

Aさんは、実際のドル円(2005〜2016年)で、東京レンジの時間帯、ブレイクのバッファ、損切り、利確、決済時刻、売買の方向などの組み合わせ57,600通りを試しました(つまみの中身は第3回で詳しく見ます)。 200本の偽相場それぞれで57,600通りを計算すると重すぎるので、この実験ではバッファ・損切り・利確・決済時刻の選択肢を減らした縮小グリッド3,456通りを使いました。 選び方はAさんと同じで、総pipsが最大、ただし取引100回以上の案を「最良」とします。コストは入れず、約定の条件もAさんの最適化と同じにしています。

つまり200本の偽相場のそれぞれで、「3,456通りを試して一番良かった1つ」を選んだわけです。その200個の「最良案」の総pipsを並べたのが下の図です。

期待値ゼロの相場200本で「最良の案」が出した総pips分布 回数 20 10 0 ノイズ中央値:+3,866 実際のドル円最良案 +5,143 (81%tile) +1,000 +3,000 +5,000 +7,000 +9,000 pips 本物のドル円で出た +5,143 pips は、完全に規則のない相場で偶然出る範囲に普通に埋もれている
期待値ゼロの相場でも、最良案の総pipsは中央値 +3,866。実際のドル円の最良 +5,143 は81パーセンタイルで、目立たない(2005〜2016年と同じ日数、3,456通りから総pips最大・100取引以上を選択、コスト0)

規則のない相場で選んだ最良案の成績は、次のとおりでした。

12年間で数千pipsのプラスを出し、損益曲線は右肩上がりになる。報告書だけを見れば、それなりの戦略に見えます。しかし、この相場には規則が1つもありません。 ここで見つかった「最良ルール」は、ルールの工夫ではなく、3,456回のくじ引きの一番当たりです。

では、実際のドル円で同じ縮小グリッドを最適化するとどうなるか。最良案は +5,143 pips でした(Aさんのグリッド最良案と同じ案です)。 規則のない相場の中央値 +3,866 よりは上ですが、200本の分布の中では81パーセンタイル、つまり上位2割ほどの位置にすぎません。 総pipsで比べる限り、Aさんが実際のドル円で見つけた最良案は、規則のない相場で見つかる最良案と見分けがつかないのです。

全候補の平均が +376 pips になった理由

この実験には、もう1つ気づいてほしい数字があります。規則のない相場では、どのルールも期待値はゼロのはずなので、3,456通りすべての成績を平均すればゼロ付近になると予想できます。 ところが実際には、全候補の平均が +376 pips でした。

原因は、バックテストの計算で損切りの注文が、指定した価格ちょうどで約定すると仮定していたことです。現実の相場では、急に動いたときに損切りは指定価格より不利な価格で約定しますが、計算ではその分の損がなかったことになります。 この楽観は1取引あたり約0.19 pipsで、期待値ゼロの相場に小さなプラスを上乗せしていました。 Aさんのように1取引で数pips以上を狙う戦略なら小さな差ですが、1回の優位が小さい戦略では無視できません。約定の前提がどう成績を変えるかは、第9回で詳しく扱います。 ここでは、「規則のない相場でプラスが出たら、まず計算の前提を疑う」という点だけ覚えておいてください。

試行回数と「最良の成績」の関係

では、試す数を増やすと、最良の成績はどう変わるのでしょうか。規則のない相場の上で、3,456通りの中から無作為に1通り、3通り、10通り……と取り出し、その中の最良案の年率 Sharpe を平均しました。 年率 Sharpe は、リターンの平均を、そのぶれの大きさで割った値を1年あたりに直したものです。総pipsと違って、取引の回数や値動きの大きさが違うルールどうしでも比べやすい指標です。

試した数と「最良の案」の年率Sharpe(規則のない相場)00.20.40.60.8年率Sharpe1101001,000試した案の数(対数目盛)3,456通り → 0.721通り → 0.08
中身は同じ「規則のない相場」でも、試す数を増やすだけで最良の成績は上がる(ランダムウォーク上の縮小グリッド、各Nで無作為に取り出した案の最良値の平均)
試した数 N1310301003001,0003,456
最良案の年率 Sharpe0.080.270.420.510.590.650.690.72

1通りだけ試したときの年率 Sharpe は 0.08 で、ほぼゼロです。規則のない相場なので当然です。 ところが、同じ相場で試す数を増やすと、最良の値はどんどん上がり、3,456通りでは 0.72 に達しました。相場の中身は何も変わっていないのに、試した数だけで「最良の成績」が上がるのです。

曲線の形にも注目してください。最初の10通りで 0.08 から 0.42 まで大きく上がり、その後は上がり方がゆるやかになります。 試す数を10倍にするたびに、最良の値は少しずつ、しかし確実に上がっていきます。「100通りくらいなら大した数ではない」と思うかもしれませんが、100通りですでに 0.59 まで上がっています。 偶然の最良値が試行数とともにどう伸びるかは、統計学で式として求められます。導出は上級コースの「多数試行の期待最大Sharpe」で扱います。

David Aronson は著書『Evidence-Based Technical Analysis』(2006)で、たくさんのルールから最良を選んだときに成績が上ぶれする現象を「データマイニング・バイアス」と呼び、最良ルールの成績はそのまま将来の期待値にはならないと警告しています。 この実験は、その上ぶれを目で見える形にしたものです。

実際のドル円の最良は、偶然を超えたか

総pipsでは目立たなかった実際のドル円の最良案も、年率 Sharpe で比べると違う姿が見えます。

総pipsは値動きの大きい年に大きく勝てば増えますが、Sharpe は損益のぶれに対してどれだけ安定して増えたかを見ます。実際のドル円の最良案は、偶然の最良案よりも安定して増えていたということです。 つまり実際のドル円には、規則のない相場にはない「何か」があると言えます。

ただし、その「何か」がAさんのルール(東京レンジのブレイク)の実力だとは、まだ言えません。 第1回で見たとおり、Aさんの上位の案はすべて「買いのみ」で、2005〜2016年のドル円には円安の年がありました。今回のランダムウォークには、そうした年単位の流れも一切ありません。 「何か」が相場の流れ(ドル円が上がった年があったこと)なのか、ブレイクというルールの働きなのかは、この実験では切り分けられないのです。 年ごとの流れを残したまま規則だけを壊す置換検定で、この2つを切り分けるのが第12回です。

短いデータほど偶然が勝つ

試した数と並んで、偶然の成績の大きさを決めるもう1つの要素が、データの長さです。 コインを10回投げて表が7回出ることは珍しくありませんが、1,000回投げて700回表が出ることはまずありません。回数が少ないほど、偶然による偏りが大きく出ます。 バックテストも同じで、期間が短く取引が少ないほど、実力ゼロのルールでも、たまたま高い Sharpe を出しやすくなります。

実力ゼロのルールが偶然出す年率Sharpeの散らばり(模式図) データが短い(例:1年) 0 データが長い(例:12年) 0 本物の優位が、偶然の最良の内側に埋もれる 本物の優位が、偶然の最良の外に出る N通り試した中の最良(偶然) 本物の優位があるルールの成績
試す数が同じでも、データが短いほど偶然の散らばりが広く、偶然の最良値が遠くまで伸びる。数値のない模式図

図の灰色の山は、実力ゼロのルールが偶然出す年率 Sharpe の散らばりです。データが短いと山の裾が広がり、たくさん試したときの偶然の最良値(灰色の線)は右の遠くまで伸びます。 すると、本当に優位のあるルール(金茶の線)の成績は、偶然の最良値の内側に埋もれて見分けられません。データが長いと山が細くなり、偶然の最良値はゼロに近づくので、本物の優位が外に出て見えるようになります。

この関係を「どれだけの長さのデータがあれば足りるか」という形で示したのが、Bailey、Borwein、López de Prado、Zhu の論文「Pseudo-Mathematics and Financial Charlatanism」(Notices of the AMS, 2014)です。 この論文は最小バックテスト期間(Minimum Backtest Length)という考え方を示しました。試した数が多いほど、偶然の最良値を上回ったと言うために必要なデータの年数は長くなる、というものです。 論文の例では、5年分のデータしかないなら、互いに独立した設定を試してよいのは45通り程度までで、それより多く試すと、本当の Sharpe がゼロの戦略でも、探索期間の年率 Sharpe が1ほどの「最良案」がほぼ確実に見つかってしまいます。 式は使いませんが、読み方は単純です。試した数を増やすなら、それに見合った長さのデータが要る。逆に言えば、短いデータで多く試した成績は、どれだけ立派でも偶然と区別できません。

「互いに独立した」という条件にも注意してください。グリッドの隣り合う案(損切りが1段違うだけ、など)は成績が似ているので、57,600通りが57,600回分の独立したくじになるわけではありません。 それでも、1回分で済むわけでもありません。実質的に何回分のくじに当たるかの考え方は、上級コースで扱います。

2人を「試した数」と「データの長さ」で並べる

このコースの2人を、試した数とデータの長さで並べてみます。

やったこと(試した数・データの長さ)結果
Aさん12年の探索期間を中心に、検証期間での乗り換えも含めて合計57,662通りを試して選んだ今回の実験では、縮小グリッドの最良案の総pipsは規則のない相場の81パーセンタイル。Sharpe では偶然を超えたが、それがルールの実力かは第12回まで分からない
Bさん12年の探索期間で、データを見る前に決めた1通りだけを試したN=1 なので偶然の上ぶれがない。探索期間の成績(1取引 −0.14 pips、往復0.4pips込み)はゼロ付近で、その答えをそのまま受け取れる

なお、第9回で扱う高頻度スキャルEAの実験例のように、わずか1年のデータで3,456通りを試した場合、学習期間の DSR(試した数を考慮した合格度。0.95以上で合格)は 0.053 に留まります(N=1 と偽れば 0.976 に見えてしまいます)。 短いデータで数千通りを試すと、学習期間の成績はほとんど偶然と区別できません。 DSR の計算は第14回で扱いますが、ここでは「同じ成績でも、何通り試したかを正直に書くかどうかで、合格からほぼ不合格まで変わる」ことだけ押さえてください。

この実験から持ち帰ること

この回の実験から持ち帰ってほしいのは、成績の数字は、それだけでは読めないということです。 同じ「12年で +4,000 pips」でも、1通りだけ試して出たのか、3,456通りから選んで出たのかで、意味はまったく違います。規則のない相場でも、3,456通りから選べば中央値でそれくらい出るからです。

成績を読むときに、必ずセットで横に置く3つの数字 数字 1 成績 総pips・年率SR プロフィットファクター + 数字 2 何通り試したか(N) 比べて捨てた全案を含む 隠れた試行回数の台帳 + 数字 3 データの長さ 年数(1年 vs 10年以上) 総取引数(N件以上) 「偶然でどこまで出るか」と比べて初めて、成績に意味が生まれる 成績の数字だけを誇るバックテストは、統計的には何も言っていないのと同じ
成績の数字に、試した数とデータの長さが付いていなければ、それが偶然の範囲に入るかどうかを判断できない

実験の結果を、持ち帰る形にまとめます。

  1. 規則のない相場でも「聖杯」は見つかる:3,456通りから選べば、期待値ゼロの相場でも最良案は中央値 +3,866 pips、最も良い世界では +8,803 pips。
  2. 最良の成績は、試した数で上がる:1通りなら年率 Sharpe 0.08、3,456通りなら 0.72。相場の中身とは関係なく上がる。
  3. 短いデータほど、偶然の最良は大きくなる:試す数を増やすなら、それに見合った長さのデータが要る(最小バックテスト期間)。
  4. 本物の相場の成績は、偶然の最良と比べて読む:実際のドル円の最良案は、総pipsでは81パーセンタイルで目立たず、Sharpe では偶然の95%点 1.06 を超える 1.44 だった。ただし、それがルールの実力か相場の流れかは、別の検査で切り分ける。
  5. 規則のない相場でプラスが出たら、計算の前提を疑う:全候補の平均 +376 pips は、損切りを指定価格ちょうどで約定させた楽観だった。

次の第3回では、この「試した数」を正しく数える方法を扱います。Aさん本人は「1つのルール」と思っていたものが、実は何通りの中から選ばれていたのかを、決定を1つずつ書き出して数えます。

よくある間違い

「ランダムな相場なら、成績はゼロ付近に集まるはず」

半分は正しいです。規則のない相場では、1つ1つのルールの成績はゼロのまわりに散らばります。しかし、その中から最良の1つを選ぶと、選ばれるのは散らばりの右の端です。 散らばりの端は、ゼロ付近には集まりません。3,456通りから選んだ最良案は、200本すべてで大きなプラスでした。「最良の1つは必ず目立つ」のです。

「自分が見ているのは本物の相場だから、この実験は関係ない」

本物の相場にも、偶然の値動きは含まれています。本物の相場で最適化すれば、本物の規則性と一緒に、偶然の上ぶれも最良案に乗ります。 この実験が示すのは、偶然の上ぶれだけで、どれくらいの成績が出るかという目安です。本物の相場の成績がそれを大きく超えていなければ、規則性があるとは言えません。Aさんの最良案は、総pipsではその目安の中に収まっていました。

「総pipsが数千pipsもあれば、偶然ではない」

総pipsは、期間の長さと値動きの大きさでいくらでも大きくなります。12年間の規則のない相場で、最良案の中央値は +3,866 pips でした。 数字の大きさそのものではなく、偶然でどこまで出るかと比べて読みます。比べるときは、取引数やぶれの大きさを考えに入れた Sharpe のような指標のほうが、総pipsより見分ける力があります。

実戦課題

自分が最適化したルール(または、これから最適化するルール)を1つ選び、次の順に作業してください。

  1. 試した数を書く:パラメータの組み合わせの数を数えます。途中で足し引きした条件や、替えた期間も分かる範囲で足します(第3回で正式に数えます)。
  2. データの長さを書く:最適化に使った期間の年数と、最良案の取引数を書きます。
  3. 規則のない相場を作る:同じ期間・同じ時間足で、時間帯ごとの値動きの大きさだけを本物に合わせたランダムウォークを作ります。下のコードは考え方を示す最小の例です。
  4. 同じ最適化を当てる:ランダムウォークを少なくとも20本作り、それぞれで同じグリッド・同じ選び方(同じ物差し・同じ最低取引数)で最適化します。
  5. 並べて記録する:規則のない相場の「最良案の成績」の分布と、本物の相場の最良案の成績を並べ、本物が何パーセンタイルにあるかを研究ログに書きます。
Python
import numpy as np

rng = np.random.default_rng(1)

def random_walk(first_price, sig, n_days):
    """sig[k]: 本物の相場で測った、1日のk本目の足の対数変化の標準偏差。
    向きは平均0の乱数で決めるので、どのルールも期待値はゼロになる。"""
    z = rng.standard_normal((n_days, len(sig)))
    log_change = z * sig          # 大きさだけ本物の時間帯に合わせる
    return first_price * np.exp(np.cumsum(log_change.ravel()))

コードが書けない場合は、手順3〜4を省き、「自分の試した数なら、規則のない相場でもどれくらいの最良値が出そうか」を、この回の表(N と最良の年率 Sharpe)に当てはめて考えるだけでも構いません。 なお、ランダムウォークで全候補の平均がはっきりプラスになったら、損切りの約定や、シグナル足の終値での約定など、計算の前提に楽観が入っていないかを先に確認します。

やるべきこと/やるべきでないこと

やるべきことやるべきでないこと
成績の横に、試した数Nとデータの長さ(年数・取引数)を必ず書く最良案の総pipsや勝率だけを報告する
規則のない相場に同じ最適化を当てて、偶然の最良がどこまで出るかを見る「ランダムなら成績はゼロ付近」と思い込み、確かめない
本物の成績が、偶然の最良の分布の何パーセンタイルにあるかで読む総pipsが大きいことを、そのまま実力の証拠にする
試す数を増やすなら、それに見合った長さのデータを用意する1年程度の短いデータで、数千通りを試して最良を選ぶ
偶然を超えた成績でも、相場の流れかルールの実力かを別の検査で切り分ける偶然を超えたことを、そのまま「ルールが効いた」と言う
規則のない相場でプラスが出たら、約定の前提を点検する損切りは指定価格ちょうどで約定すると仮定したままにする

チェックリスト

次の回に進む前に、以下が自分の言葉で説明できるか確認してください。

ミニテスト

4問で確認します。不正解なら別の選択肢を選び直せます。正解すると解説が表示されます。

Q1. 期待値ゼロのランダムウォーク200本それぞれで3,456通りを試すと、最良案の総pipsは中央値 +3,866 pips でした。ここから言えることは?

この相場には規則が1つもありません。最良案の成績は、3,456回のくじ引きの一番当たりです。試す数を増やせば、最良の成績はさらに上がりますが、それは偶然の上ぶれが大きくなるだけです。

Q2. 規則のない相場で、試す数を1通りから3,456通りに増やすと、最良案の年率 Sharpe は 0.08 から 0.72 に上がりました。理由として正しいのは?

相場の中身は何も変わっていません。候補が増えるほど、偶然の散らばりのより遠い端が「最良」として選ばれます。だから成績は、何通り試したかと一緒に読む必要があります。

Q3. 実際のドル円の最良案は、年率 Sharpe が 1.44 で、規則のない相場の最良案の95%点 1.06 を超えました。正しい読み方は?

ランダムウォークには、年単位の円安・円高の流れもありません。実際のドル円の「何か」が、ドル円が上がった年があったことなのか、ブレイクというルールの働きなのかは、流れを残したまま規則だけを壊す置換検定(第12回)で切り分けます。

Q4. 最小バックテスト期間の考え方として正しいのは?

データが短いほど偶然の散らばりは広く、試す数が多いほど偶然の最良は遠くまで伸びます。Bailey らの論文の例では、5年分のデータなら、独立した設定を試してよいのは45通り程度まででした。1年のデータで3,456通りを試した高頻度スキャルEAの例では、学習期間の DSR は 0.053 でした。