日経225におけるシステムトレード(移動平均線 編)
こんにちは。
久しく更新していませんが、現在トレードステーションで1321-TS(日経225連動型上場投資信託)の分析を行っています。
最近は裁量トレードではなくシステムトレードを構築することに余念がありません。
VPSでトレードステーション、またはpythonなどのbotで株、仮想通貨などの自動売買環境を作り安定したパフォーマンスを出していくことが当面の目的です。
今回は移動平均線のゴールデンクロス、デッドクロスは本当にトレードエッジがあるのか??という分析を簡単にしていこうと思います。
<条件>
- 足種:60分足
- トレード方法:単純移動平均線3本がすべてゴールデンクロスで買い、すべてデッドクロスで売り
- 取引は1単位のみでピラミッディングは行わない
- 手数料:400円/1回とする
- スリッページ:0円とする
- 期間:2012/01/01~2019/09/19
ちなみにトレードステーションでストラテジー(売買の法則)を設定すると、チャート上に売り買いの位置がプロットされます。
このように過去のデータ(ヒストリカルデータ)を元にしてこの条件を当てはめた場合利益が出たか?ということを分析することができます。
ヒストリカルデータを用いた分析をする際、過剰最適化(カーブフィッティング)により将来的なパフォーマンスとは程遠い分析をしてしまうのが懸念されます。
今回、過去のデータとして2012/01/01~2019/09/19を使用することとしました。
この全てに対して最適化をしてみると、
買いのストラテジー
売りのストラテジー
とパラメーターが出てきました。なおこれは総当り方式での最適化ではなく遺伝的アルゴリズムでの最適化のため、総当たり方式であれば別のパラメータが出ると思われます。
パフォーマンスは以下の通りとなります。
プロフィットファクター(損失に対する利益の率)は1.4と、ぱっと見だと利益が出そうな雰囲気がしますね。
しかしこの方法はよくありません。
過去データに対してたまたま良かったパラメータの組み合わせをしているに過ぎないためです。
これを使用するのであれば、少なくとも将来1年~2年程度に渡って同じ方法で利益が出るかをテストする(リアルタイムテスト)必要があると思われます。
少し試してみたのですが、実は単純な全期間バックテストの場合、最適化で過去データに対して右肩上がりのパフォーマンスは割と簡単に作ることができます。
逆に言うと単純な全期間バックテストでは将来のパフォーマンスを予測できるとは言い難いと思われます。
実際にパフォーマンスを検討する際はウォークフォワード分析というものを行うと良いようです。
ヒストリカルデータを、一定期間ごとにインサンプル期間(最適化パラメータを決定する期間)とアウトオブサンプル期間(インサンプル期間で求めたパラメータで成績を求める期間)に分け、アウトオブサンプル期間をつなげることで過去の成績を求めます。
これにより単純なバックテストでは表現されなかったストラテジー戦略の堅牢性を検討することができるようです。
今回、ウォークフォワード分析においてインサンプル期間を2年、アウトオブサンプル期間をその後の1年としてパフォーマンスを見てみます。
先ほどとは異なるデータとなりました。
プロフィットファクターは1.1となり、一応トレードエッジはありそうですがもっといい戦略がありそうな気がします。
今回はトレードエッジが少なそうなのでここまでとしますが、もっと詳細に検討する場合は最適化の方法は「総当り」方式にする、さらに「モンテカルロ分析」でパフォーマンスのばらつきを予測するなどをしていく必要があると思われます。
また、今回プロフィットファクターだけしか言及していませんが、総利益、ドローダウン、取引回数など他の重要項目も良いかどうか検討する必要があります。