EAのバックテストと運用までの8つのプロセス
EAなどシステムの開発は「EAを作って最適化。結果が良ければ実運用」というような簡単なものではありません。バックテストの結果だけよくて、いざリアルトレードをしてみると散々な結果になることはよくあります。
EA開発から実際に運用するまでの工程には、①システムトレーダーとしてのスキルと②正しい検証と評価をするためのリテラシーが必要であり、やみくもに最適化やアウトオブサンプルテストをするだけでは、システムを正しく評価することはできません。
この記事では開発したEAをリアルトレードで運用するまでにする検証、評価プロセスの1つの例を紹介します。
1.EAの動作確認、仕様調整
EAを検証していれば、「やっぱりロジックをすこし変更しよう」と考えることもあるかと思いますが、ロジックをいくつか試して良さそうなものを選ぶという作業は重大な問題点があるということに注意しましょう。
裁量トレードをやっていた期間がある人はわかるかもしれませんが、すでに出来上がったチャートを見て、後付けでトレードルールを作ってもリアルタイムで簡単に勝てるようにはなりません。システムトレードでも同じことが言えて、検証結果を見て後付けでロジックを変えても、リアルタイムではうまくいきません。
これはどちらも過去の値動きにだけ機能するルールを当てはめているだけだからです。これをカーブフィットといい、カーブフィットしすぎている状態をオーバーフィッテイングといいます。
カーブフィットをさけるため、基本的に一度ロジックを変更するとそれまでの過去チャートデータ(ヒストリカルデータ)は使えなくなると思っていてください。
このためロジックの変更はEAの検証の最も早い段階で行い、この後検証するためのヒストリカルデータを十分に残してする必要があります。
2.モンキーテスト
モンキーテストとは簡単に言うと「ランダムにトレードするEA(以下:モンキーEA)と結果を比較して、優位性があるかを確認するテスト」です。
EAが使えるものであるかを調べるために検証をしますが、そもそもモンキーEAより明らかに優れていなくては話になりません。開発したEAとモンキーEAを同じ条件で動作させ、モンキーEAに差をつけて結果を出し、その差が偶然に起きた差ではなくて有意差があることを証明する必要があります。
まず、トレードする頻度と買いと売りの割合を調整できるモンキーEAを用意し、EAと同じ条件で動作させる準備をします。
ロジックの変更時の注意点と同様にあとでウォークフォワードテストするための期間を残してアウトオブサンプルテストをする必要があります。また、一度最適化する場合、最適化した期間のバックテストデータはモンキーEAとの比較に使えないので注意してください。
※今回に限らず最適化したときのバックテストデータはEAの評価には使用できません。いかなる場合もフォワードテストの結果のみがEAの評価対象です。
フォワードテストの結果は合計100トレードくらい(最低でも30トレード)になるようにフォワードテストの期間を調整します。次にモンキーEAの結果を複数用意します。複数用意する方法は何でもいいのですが、1つMT5/MT4のストラテジーテスターで結果を出して、モンテカルロシミュレーターで100サンプルくらいに複製するのが手軽かと思います。
EAのフォワードテストがモンキーEAの結果の上位10%以上になれば、EAに優位性があると考えて次のテストに進みます。
またモンキーテストのおもしろいところとして、EAの①仕掛けロジックだけをモンキーEAに組み込む、または②手仕舞いロジックだけをモンキーEAに組み込むと、EAの仕掛けロジックに優位性があるか、手仕舞いロジック優位性があるかをそれぞれ分けて検証することができます。「仕掛けには優位性があったが手仕舞いには優位性はなかった」などということを発見できる可能性があります。
この「EAとモンキーEAに有意差があるかどうかを確認する方法」は1つの例です。モンキーEAのトレードの利益額/損失額に正規性があると仮定できるのであれば、モンキーEAの損失結果の平均と標準偏差をだして、「平均+1.96×標準偏差」を計算します。計算結果よりもEAのフォワードテストの結果が良ければ優位性がある可能性が高いと考えることができます。
3.ウォークフォワードテスト
ウォークフォワードテストとはアウトオブサンプルテストを複数回くりかえしてフォワードテストデータを集めサンプル数を確保し検証する方法です。各フォワードテストはだいたい100トレードくらいになるように(最低でも30以上)、最適化する期間とフォワードテストの期間を決めます。
単純に考えても各フォワードテストでそれぞれプラスの収益がでているのであればリアルトレードでもプラスの収益が期待できそうと思えるのではないでしょうか。
EAの検証で最も重要なプロセスはおそらくウォークフォワードテストでしょう。ここで大きくカーブフィットしまえば後の検証が無意味なものになるどころか、余計な損失を引き起こすかもしれません。特にポジションサイジングはウォークフォワードテストが良い結果であるほど大き目のポジションサイズを取るようになるため、オーバーフィッテイングしていれば最終的にリスクを取り過ぎてしまうことになってしまいます。
【オーバーフィッテイングを防ぐために①】最適化するパラメータはできるだけ少なく
EAの最適化したいパラメータが多いほど、システムは柔軟に過去データにカーブフィットしていってしまいます。最適化するパラメータが多いほど、バックテストの結果とリアルトレードの結果が乖離していくと覚えておいてください。
【オーバーフィッテイングを防ぐために②】最適化の期間はできるだけ長く
最適化する期間が短すぎるほど、その短い期間の値動きにピッタリ当てはまるEAの設定値が見つかりやすくなります。それだけカーブフィットしやすいということです。逆に最適化する期間が長いと、さまざまな値動きにフィットするEAの設定は絞り込まれ、その分カーブフィットを起こし難くなります。
最適化する期間をより多く確保するために開始位置を固定したタイプのウォークフォワードテストを紹介しておきます。
実際にこの方法でテストすると最適化する期間が増えていくにつれてパラメータが結果に及ぼす傾向を見つけやすくなると思います。
【オーバーフィッテイングを防ぐために③】堅牢なEAを選ぶ
良いEAはパラメータをすこし変更しても結果は大きくは変わらず安定しているものが多いです。
不安定なEAも最適化してしまえばどこかでプラスの結果がでるかもしれません。しかし、不安定であるがゆえに偶然プラスになったパラメータの設定値は、ほとんどの場合オーバーフィッテイングしているものだと思います。
堅牢なEAは多少パラメータの設定値を変えても大きく結果は変わらず最適化結果のほとんどがプラスの結果になっています。設定値を変えても結果に影響が少ないということは、多少相場環境が違っても大きく結果は変わらない可能性が高く、バックテストとリアルトレードの結果も大きくは違わないことに期待が持てます。
ウォークフォワードテストで出した合算フォワード結果のトレード損益は、以降のテストで使用します。
ウォークフォワードテストに関しては言いたいこと、大事な技術がたくさんあるのですが長くなりすぎるので、ここでは簡単な説明だけにして、今度別でnote記事を書こうと思います。
4.従属性のチェック
従属性とはトレード損益のパターンの傾向です。具体的には、「一度勝てば何度か連続で勝ちが続き、一度負ければ何度か連続で負けが続く傾向」であったり、逆に「勝ちと負けが交互に起こり、連勝や連敗が続かない傾向」というようなものをいいます。
従属性をどうやって測るか
MT5を使っている人はバックテストの項目に Z-Score というものがあります。Zスコアが2.00以上なら高い負の従属性がある可能性を示し、Zスコアが-2.00以下なら高い正の従属性がある可能性を示しています。
MT5を使っていない場合はQuant AnalyzerにてZスコアを確認してください。
ほとんどのEAはZスコアが 2.00 ~ -2.00 の間に収まります。つまり従属性がないことが普通だということです。もっと詳しく従属性を調べたい人は損益の自己相関係数分析というものがあります。トレード損益をひとつ前のトレード損益と比べてそこに相関性があるかを調べます。相関係数が0.2以上であれば強い正相関を示し、-0.2以下であれば強い負相関を示します。
従属性があるEAはポジションサイジングのルール次第で飛躍的にパフォーマンスを伸ばすことができる可能性を秘めていると言えるでしょう。
4.モンテカルロシミュレーション
モンテカルロシミュレーションとは一つのウォークフォワードテスト結果を使って
① - トレード損益データから1トレード、ランダムで選ぶ
② - 再び1トレード、ランダムで選び①のトレードの下につなげる
③ - ①~②を繰り返し新たなトレード損益データを形成する
という作業をします。
作成された新たなトレード損益データはウォークフォワードテスト結果の別パターン、つまり「こんな結果になることもあり得たよね」という損益データが手に入ります。さらにこの「こんな結果になることもあり得たよね」という損益データを1000個作ってしまえば、この1000個の損益データはEAの評価において莫大な価値ある情報を与えてくれます。
例えば、トレード損益データが1000個あるということは「最大ドローダウン」も1000パターン存在します。その大量の最大ドローダウンから
・その期間での平均的な最大ドローダウン
・発生確率5%以下の運の悪かったパターンの最大ドローダウン
など一つの最大ドローダウンではわからなかった情報が手に入ります。もちろん最終損益やリカバリーファクタなどなど…他の評価指標も同様です。
モンテカルロシミュレーションはQuant Analyzerを使えば簡易的に行うことができます。
注意するべき点は、モンテカルロシミュレーションは損益データが並び変わるため従属性があるEAでは使えないことです。従属性がある場合はウォークフォワードテストの分割回数を増やしてできるだけ多くのフォワード結果を集め、フォワード結果をランダム抽出することで、複数の合算フォワード結果を作成しEAを評価します。
システムトレーダーのよくある間違いとしてバックテストのトレード回数を増やしてバックテスト精度を上げようと考えることです。この考えをしているトレーダーはおそらくサンプルサイズとサンプル数の違いを理解できていません。
バックテストのトレード回数はサンプルサイズです。1組のトレード損益データをモンテカルロシミュレーションで複製してサンプル数を稼ぎます。EAを評価するときには多くのサンプルサイズと多くのサンプル数が必要です。なのでサンプル数を稼ぐためのモンテカルロシミュレーションはEA開発において必須の工程なのです。
6.ポジションサイジング
ポジションサイジングも従属性があるEAとないEAとでアプローチが異なります。通常の従属性がないEAは固定比率ルールというポジションサイジングルールを適応します。これはすでに別のnote記事で紹介していますのでそちらを確認してください。
従属性があるポジションサイジングルールはEA毎にルールを組み立てる必要があるため一概には言えません。唯一、共通して言えることは従属性の傾向から期待値が高くなる条件を見つけて、期待値が高いところでロット数を増やし、低いところでロット数を減らすことです。これも資金管理の記事Part2、Part3…と作っていくつもりです。
ポジションサイジングルールが決まればEAのプログラムに組み込んでおくことをおすすめします。その場の裁量判断でロット数を操作してもメリットはほとんどないと思います。
7.ポートフォリオの構成比の決定
通常EAは単体では運用しません。いくつかの互いに相関性のないEAを組み合わせてポートフォリオを組みます。相関性のない組み合わせというのが重要なポイントです。相関性のないEAの組み合わせは互いにドローダウンを打ち消し合い、リスクを分散させる効果があります。システムトレーダー、ケビン・J ・ダービーは著書で「唯一、トレードに聖杯があるとすれば分散である」と語っています。システムトレーダーにとってポートフォリオを組んでリスクを分散させることは非常に重要なことであると理解してください。
ここでは3つのEAで解説します。
Excelで乱数を使って、構成比(どのEAに何%の資金を運用させるか)を作成します。できた構成比ごとにリターンとリスクを計算します。
・リターンの定義:ポートフォリオ全体の平均損益
・リスクの定義:ポートフォリオ全体の損益の標準偏差
リターンとリスクをグラフに書き出します。
さて、どの構成比のポートフォリオを選ぶと効率的に利益を上げれるでしょうか。
リスクに対して効率的にリターンを得られる比率にしようという考えから、この赤いラインに接している構成比を選ぶべきです。この赤のラインを効率的フロンティアと呼びます。
ここでポートフォリオ全体のシャープレシオを計算すると
このような形でグラフに描かれます。「ポートフォリオ全体のシャープレシオが最大になるように構成比を変化させてやる」これがポートフォリオの構成比の決定する一つの答えになります。
ちなみに、リスクの定義をポートフォリオ全体の損益の下方偏差とすると
シャープレシオに代わって「ポートフォリオ全体のソルティノレシオが最大になるように構成比を変化させてやる」これがポートフォリオの構成比の決定する一つの答えになります。
8.EAの稼働/停止のルール決め
EAを実際に稼働させる前に運用ルールを決める必要があります。
・どのくらい負け込んだら運用を停止するのか
・経済指標のときはどのタイミングで一時停止させるのか
・祝日や年末年始はどうするのか
これらのルールをあらかじめ決めておきます。これを決めずに運用を始めて、その場の裁量判断でEAを稼働させたり、停止させたりするのは基本的にデメリットしかありません。
どのくらい負け込んだら運用を停止するのか。というのはモンテカルロシミュレーションで出した「発生確率5%以下の運の悪かったパターンの最大ドローダウン」などが参考になると思います。ただしモンテカルロシミュレーション時のロット数と実際に運用しているときのロット数は違うと思うので注意してください。
以上8つのプロセスでした。慎重な人はデモトレードで様子見をすると思いますが、バックテストと同時進行ですることをオススメします。各工程できるだけ簡潔に書きましたので説明が不足しているところは、あとからnote記事を新たに作成するつもりです。(モチベーションがあれば)
この記事が気に入ったらサポートをしてみませんか?