[EA・バックテスト] 一見同じに見えてどこか異なるテスト結果
こんにちは。2payです。
今回はちょっとした小話ですが、知っていて損のない程度の内容になります。
私はEA開発の為に他の方が作成されたEAを見に行ったり文献を漁りに行くことがあるのですが、時々気になる内容を目にします。
そんな気になる内容の中からピックしたテーマは、「バックテストのモデルが "始値のみ" でも大丈夫なのか?」です。
足の確定タイミング、または翌足の始値が寄り付いたタイミングのみの操作で事足りる "時間エントリー・時間決済型EA" というものがあります。
ゴトー日EA等は、決められたタイミングで売買を繰り返すだけなので、このタイプのEAになります。
(実際のゴトー日EAで始値のみのテストが許されるケースは条件付きになりますが、それについては後で話します)
今回もモデルEAを作成したので、検証してみます。
売買ルールは、
・日足を使用
・①保有中のポジションを決済
・②偶数日はbuy, 奇数日はsell
①と②は始値(寄り付いたら)で1回だけ実行されます。
ランダムウォークだと毎回結果が変わるので、偶数日と奇数日で必ず同じ日に同じアクションを取るように変更しました。
実運用を目的としたEAではないので計測は簡単に1年2カ月だけ取得しました。違いを確認するには十分な期間です。
計測の所要時間は、「始値のみ」が3秒、「全Tick」が1分21秒でした。
開発側とすれば非常に効率的で、特に最適化等は捗りそうですよね。
モデルの「始値のみ」と「全Tick」以外、条件を変えずにテストした結果を以下に示します。
純益、勝ち数負け数、勝率、PF等、殆どの項目が完全一致しています。
大方のパフォーマンスを見る分には十分ですね。
ただし、ドローダウン(以下DD)関係の項目に違いがあることにお気づきでしょうか?
最大DDがそれぞれ、7234円と8712円で、全Tickの方が1.2倍大きい値を示しています。
なぜこのような事が起こるのでしょうか?
それにはバックテストの仕組みを理解する必要があります。
モデル「始値のみ」というのは、文字通り始値だけでテストを行った場合の結果になります。
ラインチャートに対して分析するようなイメージです。(あちらは終値ですが)
そこには高値・安値・終値の概念がなく、ヒゲや実体を認識できないことを指します。
USDJPY等であれば一日で5円落ちて引ける頃には半分戻しているような値動きも起こりますが、そういった事情は始値だけのヒストリカルデータでは無かったことになります。
滑らかな資産成長曲線で堅調に推移しているようなEAでも、認識できない大きな含み損を抱えている可能性がある訳です。
今回のモデルは単ポジで最低Lotしか打たせてないのでDDが極小になっていますが、実運用の場合は証拠金あたりのLot比率はずっと大きくなります。
「始値のみ」では相対DDが30.0%で済んでいたのに、「全Tick」で改めてテストした結果100.0%を超過し、口座が破綻したというケースは決して珍しくありません。
「全Tick」だけ破綻した場合、破綻ポイント以降も「始値のみ」のデータは推移していたら資産成長曲線グラフはフェイクになります。
DDを気にしない人であれば、DD以外の項目の信頼性は確保できているため、パフォーマンスを信用しても良いと思います。
「始値のみ」のデメリットとして、もう一つ言及しなければならないのは、SL・TPや、DDカットラインを設置できないことにあります。
始値自体は価格ですが、実際の運用としては "価格" ではなく "足" としてみなされます、それは通常、時間(タイミング)を計るために使用されます。
"新しい始値を付けた" 事がトレードのイベントタイミングになるからです。
"価格" として使用する場面は、エントリーや決済の際に参照するリクエスト価格としての適用です。
SL・TP、DDカットライン等をロジックに含めたものをテストすること自体は可能です。
ただし前述したように、高値・安値・終値が存在せず、「始値のみ」のテスト上では 前足始値→当足始値→翌足始値 と、高値や安値を経由することなく直線的に価格が推移していきます。
そのため本来ならSL・TPにひっかかるような場面でも決済されず、始値で何れかの決済ラインに到達することではじめて決済が成立します。
検証用に先ほどのEAに手を加えます。
エントリー条件はそのまま、偶数日と奇数日でエントリー方向を決定します。
エントリーに合わせてSL・TPをそれぞれ20.0pips設定します。
SL・TPだけで決済を完結させるために、時間決済は削除します。
以下は「始値のみ」と「全Tick」の比較です。
今度は顕著に違いが出ました。説明不要ですね。
エントリーが始値でも決済が始値以外のタイミングで発動するものには「始値のみ」のテストは使えないということです。
裏を返せば「始値のみ」でテストが完結するEAにはSL・TP (同様にDDカットも) を設定することができないのです。
利益も損失も青天井で、破綻に対する備えがありません。
資金管理・玉管理されていない状態って結構ヤバいですよね。
もしSLやDDカットの備えがあるならば、「始値のみ」で正しいスコアを計測することはできません。
そもそも「全Tick」機能があるにも関わらず、最終テストですら解像度の低い仮想シミュレートを適用することに疑問を感じています。
その手のEAを買ってはいけないと言うつもりはありませんが、開発者側が資金管理に無頓着である可能性に留意してください。
複数のEAを組み合わせて盤石なポートフォリオを組んだとしても、1つの綻びで簡単に瓦解します。
今回のような内容はプログラム組んでシミュレートしなくても思考実験で結論が出ます。(麻雀の捨て牌読みのようなものです)
疑問に思う設定や数値を見つけたとき、そのままにせずきちんと疑問を解決することが重要です。
今回のお話は以上になります。
読んで頂きありがとうございました。
Is it OK?