考察とは名ばかりで感想?

最近は主にプログラミング(AIコーディング)と資産運用(FXで食ってくぞ!)

【株シストレ】売り戦略のフォワードテストをしました【自分ヘッジファンド】

システムトレードで目指せ!自分ヘッジファンド

再稼働を検討していた売り戦略で大いなる勘違いが発覚したのが昨年11月のこと

kurutto115.hatenablog.com

貸借銘柄に仕掛ければ良いと思っていましたが、実はそれ以外の銘柄こそが利益の源泉だったのです。でも貸借銘柄以外ってまともに売れるの? そこで一般信用取引を使ったデイトレなら十分実用的であることを確認

kurutto115.hatenablog.com

元のストラテジーがちゃんと使えることが分かったので、いよいよフォワードテストを行って、売り戦略の実力を確認しました(他で忙しくて数ヶ月放置してしまった)

f:id:kurutto115:20191214015140p:plain

フォワードテストとは

そもそもフォワードテストとは何か? ストラテジー作成のためのバックテストでたまたま利益が出ているだけの可能性があるので、バックテストに含まれない期間のデータを利用してストラテジーの実力を検証することを言います

フォワードテストには2つ方法があり、バックテストに使わないフォワードテスト用の期間を決めてその期間の過去データでテストすることをウォークフォワードテスト、バックテストを行って以降の言うなれば未来データでテストすることをリアルフォワードテストといいます

今回行ったのはリアルフォワードテストで、2020年3月9日~2021年12月3日がフォワードテスト期間となります*1

リアルフォワードテスト結果

それではデータから計算した結果をフォワード期間、バックテスト期間、全期間で比較してみましょう(用語については以前の記事を参照)

  フォワード期間 バックテスト期間 全期間
期待年間リターン 238.0% 371.3% 354.4%
予想最大ドローダウン 111.3% 91.9% 93.5%
実績最大ドローダウン 100.5% 135.2% 135.2%
予想カルマーレシオ 2.14 4.04 3.79
実績カルマーレシオ 1.76 2.75 2.62
元本保証期間 457.8日(1.87年) 242.2日(0.99年) 258.4日(1.06年)
実績最長ドローダウン期間 85日 81日 85日

※ 実績カルマーレシオは全期間での最大ドローダウンで計算

やっぱりというか何というか、フォワードだとバックテストほどの成績は出せませんねぇ(シストレあるある)。ドローダウンはそんなに増えないけど*2、リターンはバックテストの2/3。滅茶苦茶パラメータの堅牢性(ロバストネス)を考えて最適化してもこれが限界かー

まあそれでも十分利益は大きいですけどね。それにフォワードで平均リターン0%になっちゃうストラテジーも数多くあるわけで、むしろちゃんとストラテジーが機能すると分かり、ストラテジーの設計も成功していたと言えるでしょう

とはいえ元本保証期間が2年近くあるのは心配ですが…(バイ&ホールドとかと組み合わせて何とかするしかない!)

ウォークフォワードテストも実施

こうしてiTRADEを利用してフォワードテストを実施したわけですが、実はシス達ならもっと古いデータで検証できるんですよね~*3。これが貸借銘柄のみに仕掛けるんだったらシス達だと銘柄の変遷を追う必要があって難しいんですが、もう貸借銘柄に限る必要はないことが明らかになったので、全銘柄を対象にシス達で使える全期間でバック&フォワードテストを実施しました

  ウォークフォワード期間 バックテスト期間 リアルフォワード期間 全期間
期待年間リターン 257.1% 354.1% 298.6% 297.2%
予想最大ドローダウン 65.9% 90.3% 68.7% 77.4%
実績最大ドローダウン 79.5% 198.9% 62.5% 198.9%
予想カルマーレシオ 3.90 3.92 4.35 3.84
実績カルマーレシオ 1.29 1.78 1.50 1.50
元本保証期間 251.0日(1.03年) 249.7日(1.02年) 225.3日(0.92年) 255.1日(1.04年)
実績最長ドローダウン期間 140日 202日 127日 202日

(ウォークフォワード期間:1991年5月22日~2008年3月26日

 バックテスト期間:2008年3月27日~2020年3月6日

 リアルフォワード期間:2020年3月9日~2021年12月3日)

※ 実績カルマーレシオは全期間での最大ドローダウンで計算

せっかくなので全期間でのグラフを貼っておきます

f:id:kurutto115:20220413233016p:plain

グラフを見ると昔も今もちゃんと稼げてて安心な感じですが、何かバックテスト期間がやたらリターンもボラティリティも大きくて、それ以外の期間はそれほどでも無いって感じですね。それでもバックテスト期間の実績最大ドローダウンがやたら大きいのが困りものですが。前後の値動きを見るに不自然ではないのですが、iTRADEの場合と比べて違いすぎるんですよねぇ

ここで注意が必要なのは、iTRADEでの検証とシス達での検証とで仕掛け銘柄の範囲が変わってくること。まずiTRADEでは制度信用銘柄が対象なので、20銘柄ほどある非制度信用銘柄は入ってこない*4。次にiTRADEは新規建てが規制されてる銘柄を除外している。非制度信用銘柄は調べたところ一般信用でも取り扱いがないので、そっちはiTRADEの方がバックテストが正確になりますが、規制銘柄は結構一般信用で取引が可能なのでiTRADEの方が不正確になります。最後に、iTRADEではETFREITを除外してますが、シス達では過去の銘柄を網羅しつつETFREITを除外したリストを自分で作る羽目になるので、ETFREITを含んだ全銘柄でテストしてます。このETFREITの影響については↓で書きます

というわけで、シス達の方がiTRADEより結果を信用できそうな気がしますが、取引履歴を細かく確認してみると怪しいところがあるんですよねぇ(そのうち記事にします)。上記の差が出る要素があるとはいえ、それにしても結果が違いすぎる(下で述べる通りETFとかではこんなに差が出ませんし)。まあiTRADEもこれは実態を反映してないな…ってところを見つけちゃったので、どちらもほどほどにしか信用しない方がいいと思います(実運用ではシス達を使うので、そっちの方を重視した方がいい気もしますが)(そもそも古いデータだと上場廃止になった銘柄が入ってないとかで不正確になるだろうしなぁ)

空売り規制の影響は?

ここからずっとおまけ的に細かい話。iTRADEに空売り規制を考慮するための設定があったので、どう影響してくるのか気になって調べたんですよね

info.monex.co.jp

前日終値などから10%以上下落したら価格規制が発動。すると51単元以上は直近公表価格以下で売ってはならない(成行含む)…って50単元以下だったらOKっていう。価格規制発動しなかったら51単元以上でも大丈夫だし。1銘柄の仕掛け資金額を考えるとあんまり気にする必要ないなぁ

一応iTRADEの50単元以下に制限する項目にチェックを入れる*5とほんのわずかにリターンが減るんですけど最早誤差。一応51単元以上注文するときは規制で撥ねられないよう気を付けようってくらいですか(寄付直前の板を見て規制発動しそうだったら数量を50単元に修正する)

ETFREITについて

ETFREITは普通の株とは違う値動きをするのでシストレでは別扱いするのが普通ですが*6、先述の通りシス達でETFREITを除外するには自分でETFREIT抜きの銘柄リストを作って更新していく必要があるんですね。なので除外しない方が楽

そこでiTRADEでETFREITを仕掛け対象に加えると、ほんのわずかにリターンが減るだけの影響しかない。ETFREITだけでバックテストすると一応期待値プラスなので、大丈夫っぽい(ETFだけの場合とREITだけの場合をシス達で検証した方が良かったかも*7

というわけで普通にETFREITにも仕掛けることにしました。ETFREIT信用取引の手数料無料なのでその点有利でもありますしね

ところが実際にそれで運用していくと、同じ日に日経平均ベアETFを3、4種類売ることになったりして流石にどうなの?って思ってたら、東証再編でETFREITが別扱いになったので、シス達でも簡単に対象から除外することができるようになりました。じゃあ仕掛けなくていいや

貸借銘柄どうするかなぁ

先日貸借銘柄以外にも仕掛けないと駄目なことが発覚したわけですが、逆に言うと貸借銘柄からのリターンは冴えないんですよね。ただ一応期待値はプラスですし、貸借銘柄にコスト面で有利な点があるので、非貸借銘柄を優先すべきかというと何とも。貸借銘柄が信用取引手数料無料の証券会社でも確実に取引できる一方で、非制度信用銘柄は大抵一般信用で空売り料取られるので

非貸借銘柄、貸借銘柄、ETFREITのリストを作って、仕掛け対象別に違うストラテジー扱いにすれば、シス達でマルチストラテジーとして非貸借銘柄→貸借銘柄→ETFREITの優先順位で仕掛けることはできます。できますが、リストの中身が時期によって変わることを考えるとバックテストは難しく、有効性を確認できるかというと怪しいですね

まあこういう時はシンプルイズベストですよ。ストラテジーも単純なほど堅牢って言いますしね。↑のETFREITの件も含めてややこしいことは止めにします

ところでストラテジーのパラメータを変えれば貸借銘柄のみでももうちょっとまともにできたりしませんかね? 今更パラメータ再検討する気しないし、逆に非貸借銘柄に絞った検討は難しいんで、全部ひっくるめて同じパラメータでやるつもりですけど。やっぱり貸借銘柄はコスト面で有利なので、貸借銘柄だけでもまともに利益出せるようにするのは意義があるんですけれども

空売り料の影響

この売り戦略の取引1回の期待値って2千円くらいなんですけど、空売り料がそれ以上になることって結構あるんですよね。期待値マイナスじゃねーか!って話ですけど、空売り料が高いほど期待値上がる可能性があるんですよねぇ。何せ貸借銘柄と非貸借銘柄で後者の方が期待値高いので

取り敢えず検討を続けるということで、今のところは余計なことはしないという、↑と同じ結論を出しておきます

規制などの対応

全体の検討結果には大きく影響しないとは思いますが、やっぱり規制で取引できなかったり、一般信用売りの在庫がなかったり、地方の取引所の銘柄で信用売りの扱いがなかったりなどして、仕掛けられないこともたまにはあります

まあ仕掛けられないなら仕掛けないでもいいんですが、資金が余るなら別の銘柄に仕掛けた方がお得ですよね。期待値がないはずないので。資金をちょっと増やした設定でシグナルを出して、増えた銘柄に仕掛けることにします

パラメータの修正

こうして色々と検討していくうちに、もう大体完成しただろうと思っていたパラメータも、まだいじる余地があることに気付きました。とはいえほとんどが結局「これ以上いじる必要無し!」という結論で徒労に終わりましたが(まあいじってる間は滅茶苦茶楽しかったんですけれど)

こうして1ヶ所だけ微妙にパラメータを変更したのに加えて、先述のETFREITを仕掛け対象に追加し、念のため空売り規制に備えて50単元までに抑えた場合のバックテスト&フォワードテスト結果はこうなります

iTRADEでの結果 フォワード期間 バックテスト期間 全期間
期待年間リターン 255.1% 396.4% 378.4%
予想最大ドローダウン 120.0% 93.5% 95.8%
実績最大ドローダウン 113.3% 138.7% 138.7%
予想カルマーレシオ 2.13 4.24 3.95
実績カルマーレシオ 1.84 2.86 2.73
元本保証期間 460.5日(1.88年) 230.8日(0.94年) 247.7日(1.01年)
実績最長ドローダウン期間 79日 29日 79日
シス達での結果 ウォークフォワード期間 バックテスト期間 リアルフォワード期間 全期間
期待年間リターン 303.2% 384.7% 253.8% 332.2%
予想最大ドローダウン 60.2% 83.9% 92.7% 72.3%
実績最大ドローダウン 113.0% 178.6% 65.1% 178.6%
予想カルマーレシオ 5.04 4.59 2.74 4.59
実績カルマーレシオ 1.70 2.15 1.42 1.86
元本保証期間 194.3日(0.79年) 213.4日(0.87年) 357.8日(1.46年) 213.1日(0.87年)
実績最長ドローダウン期間 105日 124日 64日 124日

※ 実績カルマーレシオは全期間での最大ドローダウンで計算

※ 期間の区切りは改良前のストラテジーのもの

シス達の全期間グラフはこちら

うーん。普通に全期間で改めて最適化したんですが、リアルフォワード期間があんまり改善されてない感じですねぇ。特にシス達だとリアルフォワード期間でリターンが減っちゃってる。その分iTRADEと値が近いんで信用できる値になったのかもしれませんが。それとシス達の実績最大ドローダウンが減ってるのは良いですね。さらに実績最長ドローダウン期間は激減!(まあ予想値はそれほどでもないのでたまたまかもしれません)。これなら今までのままでいいかなぁ

*1:検証のため1ヶ月iTradeに金払ってた時期までのデータということです

*2:そもそも標準偏差フォワード期間の方が小さい

*3:まあ古いデータほど色々問題が出てくるのはシストレ界隈でよく指摘されますが

*4:ていうか非制度信用銘柄ってそんな少なかったのか

*5:ちなみにシス達は50単元以下への制限機能なし

*6:イザナミなんか取り扱ってない

*7:iTRADEだとここまで分けられない