前回記事(カーブフィッティングになりにくいシステムの作り方(1))の続きです。
基幹となる条件だけでバックテストをかけて期待値が1%を超えていれば私は有望とみています。取引回数も9000回を超えていますので、ここからシグナルを絞る作業になります。
これは「その他集計」→「ユーザー指定」の機能を使って行います。
主だった指標すべてでスクリーニングをかけるのが良いと思います。実際にはここに非常に多くの時間をかけていますが、今回は結果だけ表示します。まずは移動平均15日線よりある程度小さいという条件で絞れることがわかりました。
これは考えてみれば当たり前なのですが、サイコロジカルで3勝10敗といえどもその3勝が大きい上昇で10敗が小さな調整であれば、株価は上昇していてもおかしくありません。以下のようなチャートですね。
チャートの形は適当に作ったものですが、このような動きをしている銘柄は、投げ売りを狙うという今回のコンセプトに全く合致しませんので、除去してやる必要があります。
このようにその他集計で期待値に偏りがあるものを発見した後は、その原因が何なのかを探る必要があります。ここで良くわからないけど、偏っているから絞ろうというという風にしてしまうと、カーブフィッティングになる恐れがあるし、システムトレード技術の成長にもなりません。
こじつけでも良いから、ここで考えることがその後のシステムのメンテナンスや開発にも活きてくると思います。
さて、もう一つは前日比を見てみました。前日比はある程度下落しているものの方が、期待値が高くなっています。これも難しく考える必要はなく、それまで3勝9敗で来て「そろそろ反発してほしい」と思っているホルダーに対して、大き目の下落がくると「もうダメだ」と追い打ちをかける効果があると考えられます。明日の朝一で投げ売りをする人が多くなることが予想されます。
この2つの条件を加えてこんなルールにしてもう一度バックテストをかける事にしました。
その結果、以下のようになりました。
ここまで非常にスムーズにやっているように書いていますが、実際には、試行錯誤を繰り返しています。前日比だけでバックテストしたり、移動平均の集計日数を変えたり、それらの条件を組み合わせたり、仕掛けを変えたり、手仕舞いを変えたりしています。
それらの「データ」はエクセルに記載して記録しています。バックテストでは、「取引回数」「勝率」「平均利益」「平均損失」「期待値」です。そして最近は2013年から2015年までの年間平均期待値も記録するようにしています。
2013年以前と以後で逆張りは大きく成績が変わっているものが結構あります。勿論2013年以降に機能していることが重要です。
ちなみに順張りも2014年以降、どんどん変わってきているように感じています。
この結果で期待値は2.2%を超えて勝率も70%を超えているので、私の実力ではまずまずとなります。バックテストである程度満足の出来るものが出来たら、今度は最適分散をしてみます。私はいつも同条件、資金200万円レバレッジ1.5倍、仕掛けは300千円前後になるようにしています。今回の条件はこんな感じです。なお優先順位は移動平均(15日)の低い順にしました。
その結果が下の画像です。
バックテストよりも期待値がかなり低くなっています(逆に期待値が大きく上がっている場合も要注意です)。これはなぜでしょうか?逆張りにはこのような結果になるものが結構あります。
これはシグナル数が多いときの期待値が高く、それ以外の期待値があまり低くないために発生する現象です。期待値の高い取引が1日に集中しているのですが、その日に取引できる銘柄数には限りがあるので、ほとんどが取引されないままに過ぎてしまっているのです。
立ち戻って、その他集計で、シグナル数による期待値の分布を調べると、このようになっています。
今回私はシグナル数が少ないときでも使えるシステムを作りたく、実際にはシグナルが少ないときでも期待値が1に近いならば、使えると思っています。実際ここまで2年動かしてきたシステムで期待値が1以下ですが、勿論0より大きいので儲かっているわけで、本当に期待値1が確保されるなら運用できると思っています。それにはちょっと足りない感じです。
さらにこのシステムにはある問題がありました。詳しくお知りになりたければ、実際にこの条件で検証していただければわかるのですが、このシステムは暴落前にかなりの数の仕掛けをしてしまい、反発がとれる一番おいしい所で資金が残せないのです。保有日数が最大4日というものその一因となっています。
それなら、1日の最大仕掛け数を制限するような事をすれば良いのですが、保有日数を考えると相当仕掛け数を少なくする必要があり、そうすると日々のトレード数が相当に減ってしまって、資金を200万確保している割には得られる利益が小さくなりすぎる結果となってしまいます。
ここで潤沢に資金があるという仮定として1000万円で1日の仕掛け数を15銘柄にしてシステムを回すと以下のような結果になります。
期待値の高い日に多くトレードできるので、期待値は上がっているのですが、当然ながらトータルの利益率は相当に低くなってしまいます。15年で利益率が115%と言う事は年8%弱であり、税金を考えれば年間6%程度の運用益です。これはちょっとさびしいですね。
このシステムは今のように資金を最大限効率的に使用できている状況には適さず、もし将来大きな資金をもっていて運用できるシステムが足りず、資金が遊んでしまうような状況では活用できると思います(資金を遊ばすよりマシというだけですが)。
後は全体が暴落した時に回してみて、シグナル数が大きい所だけを裁量で狙ってみるという感じで利用してみようかなという感じです。実際8月末に実行して少しですが利益を得られました。これはシグナルフィルターをかけたやり方と言えると思います。
いかがでしたでしょうか?システムトレードの最大の難敵(と私は思っている)カーブフィッティングは貴重な資金を失うだけでなく、資金よりさらに貴重である時間も失いかねないので、出来るだけ避けたいものです。そのための参考になればうれしく思います。
いうまでもありませんが、今回公開したシステムを運用して損害をだしても私は責任を負えませんので、あらかじめご了承くださいね(そんな方はいないと思いますが…笑)。
本日も最後までお読みいただきありがとうございました。
同カテゴリーの前の記事⇒カーブフィッティングになりにくいシステムの作り方(1)
同カテゴリーの次の記事⇒事前フォワードテストを考える
いつもご覧いただきありがとうございます。このサイトが役立ったと思ったら、押してくださるとうれしいですm(_ _)m
うん、こりゃダメだw
没にしてるからサンドさんもわかったのだろうが、
コイツは暴落時に稼いで後はトントンタイプだ
暴落時を狙うならもっといいのが作れるから出番なし
あとカーブフィッティングになりにくい作り方ってタイトルだけど、
これはなりやすい作り方じゃないか?
私には人があまり使わない数値使ってるからカーブフィッティングになりにくいしか見えてこない
(有効といえば有効だけど、そこまでの効果はない。いい数値がでるからでやってるなら逆効果)
もっと細かく見るべし
こんにちは!
毎回参考になる記事を書いてくださいありがとうございます。
また先日はブログの方紹介してくださいありがとうございましたm(_ _)m
カーブフィッティングに関してなのですが、記事(1)の方で作成後最低3カ月は成績を確認したいと仰っておられましたが、ストラテジーを作るバックテスト期間を3カ月(自分の信頼できると思える期間を)少なく設定し作成し、完成後全期間で行う事で過剰最適化の判断が出来るのではないかと考えているのですが、Sandさんはこのような方法をどう思われますでしょうか?
うちが答えるのは変だが、それ自体はいい方法だぞ
だが、それで除去できるかはわからない
なぜなら、3ヶ月がダメだったら作り直す。結局3ヶ月がうまくいくまで手を入れるから
フォワードテストとはちょっと意味合いが異なるかなぁ
(やらないよりは除去できてるとは思うけどね)
みなちゃんさん、コメントありがとうございます。
出先にて返信が遅くなりました。
厳しいご意見ですね、今回は私のやり方をご紹介させていただきました。
参考にされる方も反面教師にされる方もおられると思います。
没にした理由はその通りだと思います。
やーくさん、コメントありがとうございます。
香港旅行記事も楽しく拝見しました。
ご質問の件は基本的には有効だと思いますが、少し違う考え方もあるのでまた
後日記事にしてみようと思います。ちょっとお待ちくださいね
みなちゃんさん
質問に答えてくださいありがとうございますm(_ _)m
Sandさん
ありがとうございます。
記事の方楽しみにしています!