本番で崩れる理由は、ほかにもあります。スプレッド・滑り・手数料などの費用がバックテストと違うこと(取引の費用の数え方)や、相場の動き方そのものが変わることです。この記事では、そのうちの過剰最適化を見ていきます。
過剰最適化とは
バックテストは、過去の値動きで「この決まりで売買していたらどうなったか」を計算するものです。期間・損切りの幅・インジケーターの設定などを変えながら何度も試すと、その中には、たまたま過去の値動きにぴったり合ったものが出てきます。
そうした設定は、過去のその期間の「偶然の形」に合わせただけのことがあります。その場合、別の期間や本番では、同じように伸びるとは限りません。
図の決まりはどれも、コインを投げて買いか売りかを決めているだけで、実力はありません。それでも、200通りの中で一番良いものを選ぶと、前半だけを見れば「良い決まり」に見えます。
研究で示されていること
バックテストの過剰最適化を数学で調べた論文では、次のようなことが示されています。[1]
- 10通り試すだけでも: どの決まりにも本当は実力がない(平均の成績が0)という前提で、1年分のデータで10通り試すと、一番良く見える決まりのシャープレシオ(成績をぶれの大きさで割った目安)は、平均で1.57になります。使っていない期間での成績は、平均で0のままです
- データの長さと試す数: 同じ前提で、5年分のデータしかないなら、互いに関係のない設定は45通りまでにしないと、使っていない期間では0なのに、バックテストではシャープレシオが1(1年あたり)に見える決まりがほぼ確実に出てしまう、としています
- でたらめな値動きでも: 論文の例では、でたらめに作った1000日分(約4年)の値動きで、入る日・持つ期間・損切り・買いか売りかの組み合わせを選ぶと、シャープレシオ1.27の決まりが見つかりました
- 試した数を書く: 著者たちは、何通り試したかを書かないと、過剰最適化の危険を見積もれない、と述べています
これらは、値動きを単純な形と仮定した計算です。実際の相場がこの前提どおりとは限りません。ただ、「たくさん試して一番良いものを選ぶ」こと自体が、成績を良く見せる方向に働くという点は、覚えておく価値があります。
MT5 でできる確かめ方
MT5 のストラテジーテスターには、設定を変えながら何度も走らせる「最適化」と、別の期間で走らせ直す「フォワードテスト」があります。MT5 のヘルプでは、フォワードテストは、過去のデータの特定の部分に設定を合わせすぎるのを避けるための機能と説明されています。テスターの設定の「フォワード」で、指定した期間のうち半分・3分の1・4分の1をフォワードテストに回すか、フォワードの開始日を自分で決められます。[2] ほかの検証の道具にも、別の期間で確かめる方法があります(名前や手順は道具によって違います)。
ただし、フォワードの期間で良かったとしても、それは確かめの1つで、これからの結果を約束するものではありません。フォワードの結果を見て設定を直し、また試す、をくり返すと、フォワードの期間にも合わせ込んでいくことになります。
自分でできること(決めるのはご自身)
どの手法や設定を使うかは、この記事では決めません。バックテストの結果を見る時に、次のことを記録しておくと、過剰最適化に気づきやすくなります。
- 試した数: 何通りの設定・決まりを試したか
- 期間を分けたか: 選ぶのに使った期間と、使っていない期間の両方の結果
- 取引の数: 取引の数が少ないと、成績は偶然で大きくぶれます
- 本番の結果: 本番で動かした後の結果を、バックテストと並べる
損益の一覧は取引履歴の統計で、勝率・平均の損益・最長の連敗にまとめられます。勝率がそのままでも連敗がどれくらい起きるかは連敗の確率で確かめられます。費用の引き忘れや足の中の順番など、測り方の間違いで「勝ち」が見える例は、バックテストで「勝てそう」に見える時の落とし穴にまとめています。
参考文献
- Bailey, D. H., Borwein, J. M., López de Prado, M., & Zhu, Q. J. (2014). Pseudo-Mathematics and Financial Charlatanism: The Effects of Backtest Overfitting on Out-of-Sample Performance. Notices of the American Mathematical Society, 61(5), 458. https://doi.org/10.1090/noti1105(著者の公開版: https://www.davidhbailey.com/dhbpapers/backtest-pseudo.pdf)
- MetaQuotes. Strategy Testing(MetaTrader 5 ヘルプ). https://www.metatrader5.com/en/terminal/help/algotrading/testing