なぜバックテストすると近年は資産曲線が寝る(横ばい)なストラテジーが多いのか?
前回、イザナミのサンプルストラテジーを実装してバックテストをしてみると、次のような結果になりました。
この結果を見ると「2013年」ぐらいから、曲線が寝ています。
理由は分かっていません。
2013年と言えばアベノミクスが始まった頃です。
ネコも杓子も株を買うようになり、テクニカル分析が通用しなくなった?
もしくは・・・・
日銀が日経平均を下げまいとETFを買い続けて、テクニカル指標が役に立たなくなった
と思ってます。
本当かな?。
要するに、理由が全く分かってないです。
多くの人が同じテクニカル指標・ストラテジーを使うようになった
を理由にしている人もいますが、外国人株保有比率の高い日本株に大きな影響があるとは思えません。
加えて、マイナーな篠原レシオなどが使えなくなる理由も分かりません。
先人達の情報を読み漁る
同じく悩んでいる人はいないかな?と調べたところ・・・・
全シ連というシステムトレード専門の漫画が公開されており、第29話「シストレあるあるの”資産横ばい”を脱出せよ!」によれば、同じように悩んでいるようです。
似たようなことが書いてあります。
具体的な資産曲線もありました。
第38話「噂の真相!【高ボラ相場が儲かる】を示すデータがこれだ!」に掲載されています。
著者の坂本タクマに言わせれば、彼の運用資産は2011年9月より落ちているらしいです。
原因が分からないと、よい施策は生まれません。
ですが、原因を調査する前に、現状把握が重要です。
まずは、「平均年利(直近5年)」など、近年に特化した検証結果を表示することから始めます。
・・・、あれ、そもそもの目的ってなんだっけ?
最大連勝・最大連敗・平均年利などを追加する
他のサイトで何の結果に注目すべきかを調査しました。
株のシステムで重要なことは、期待値でもなければ勝率でもなく、ましてや平均年利や最大DDなどでもない。トレード数でもPFでもPRでもない
トータル系
・総損益 まったく気にしない
・総トレード数 ちょっとは気にする最大最小系
・最大連勝 まあまあ気にする
・最大連敗 かなり気にする
・最大ドローダウン期間 あまり気にしない
・最大ドローダウン あまり気にしない平均、分散系
・平均損益(期待値) かなり気にする
・平均保有期間 作る時点でわかっているから気にしない
・損益標準偏差 ある理由からまったく気にしない
・(平均損失) おおいに気にする比率系
・勝率 かなり気にするが作る前からある程度は意図している
・ペイオフレシオ ちょっとは気にするが平均損失だけを知れば済むこと
・平均損益÷損益標準偏差 シャープレシオのことだろうがまったく気にしない
・プロフィットファクター 株ではまったく気にしない、期待値で十分代用可能だから[引用] hamaseven氏のブログ
「最大連勝」「最大連敗」が何の役に立つのか全く分かりません。
ですが出力は可能なので追加してみました。
ソースコード
サイト上で紹介するにはソースコードが長過ぎです。
なので「GitHub」にコードを公開しました。
部分的に抜粋すると次のような修正などが入ってます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
// Dictionaryの内容をコピーして、List List<KeyValuePair<int, float>> list = new List<KeyValuePair<int, float>>(_allTradesYear); list.Sort((a, b) => b.Key - a.Key); //降順 var j = 0; var _total = 0; var _ave = 5; // 直近○年の平均年利を求める foreach (KeyValuePair<int, float> pair in list) { j += 1; _total += (int)_totalProfitYear[pair.Key]; if (j >= _ave) { break; } } appendText(string.Format( "----------------------------------------\n" + "平均年利\t\t{0:p}\n" + "平均年利(直近{1:d}年)\t{2:p}\n" + "最大連勝\t\t{3:d}回\n" + "最大連敗\t\t{4:d}回\n", (_totalProfit / _allTradesYear.Count) / _budget, _ave, (_total / _ave) / _budget, _maxwinCount, _maxloseCount )); appendText(string.Format( "----------------------------------------\n" + "[年度別レポート]\n")); |
独自拡張が増えすぎだね。
表示結果
次のように「平均年利」「最大連勝」「最大連敗」だけでなく、「最大ドローダウン(時価)(簿価)」なども表示してみました。
更に、近年に着目したいので年度のソートを降順に変えています。
色々と表示され過ぎですね。
なお、最大ドローダウン(簿価)の額表示は、まだ不具合があると思ってます。不具合見つけたら、掲示板などで連絡をお願いします。
まとめ
2017年から拡張・バックテストしたいと思っていた機能は、ある程度用意できました。
理論上は、今の拡張Protraで資産曲線が単調増加するストラテジーを作るのは可能のはずなので、ストラテジー検証を頑張ります。