グランビルの法則で勝てるのかをバックテストで検証してみました。
移動平均線をシグナルにするとはいえ、エントリーの判断基準は比較的曖昧です。主に裁量トレードにおいて用いられる手法であり、バックテストとは根本的に相性が良くありません(バックテストはプログラムが読める形で言語化する必要があります)。
そこで本記事では、グランビルの法則の定量化方式を提案し、その方式に基づいてバックテストを実施したいと思います。
目視による過去検証だと、統計的に信頼性のあるデータが揃うまでにどうしても時間がかかってしまいます。本記事ではその課題を解決することを目指します。
定量化方式
グランビルの法則とはそもそも何かに関しては、以下のサイトを参考にさせていただきました。
エントリーの判断基準の所を抜粋しますと、以下の通りです。「株価」は「チャート」にでも読み替えてください。
買い①:移動平均線が上向きになりつつ、株価が下から上に抜けた場合
買い②:移動平均線が上昇中で、株価が上がって移動平均線を上回った後、再度下回った場合
買い③:上昇中の移動平均線に向かって株価が下がって、移動平均線の手前で株価が上がった場合
買い④:株価が移動平均線から大きく下に乖離した場合
売り①:移動平均線が下向きになりつつ、株価が上から下に抜けた場合
売り②:移動平均線が下降中で、株価が下がって移動平均線を下回った後、再度上回った場合
売り③:下降中の移動平均線に向かって株価が上がって、移動平均線の手前で株価が下がった場合
売り④:株価が移動平均線から大きく上に乖離した場合
「グランビルの法則|金融・証券用語解説」『大和証券』
以下では、これらを1つずつバックテストが行えるよう定量化していきたいと思います。
買い①
これはあまり議論の余地がなさそうです。「移動平均線が上向き」かつ「株価が下から上に抜けた」を守ればよく、以下で定量化可能でしょう。
- 前回移動平均線<現在移動平均線
- 前回終値<前回移動平均線
- 現在移動平均線<現在終値
図にすると以下です。
買い②
「移動平均線が上向き」かつ「株価が上から下に抜けた」が条件かと思います。「株価が上がって移動平均線を上回った後」との文言がありますが、株価が上から下に抜けるためにはこの動きはマストのため、あえて組み込む必要はないと思われます。
- 前回移動平均線<現在移動平均線
- 前回移動平均線<前回終値
- 現在終値<現在移動平均線
図にすると以下です。
買い③
「移動平均線の手前」で「株価が下がって上がった」を守ればいいと思います。「手前」とは引用元の図を見る限り「価格が移動平均線以上の状態」と読み取れます。従って以下の通りです。
- 前回移動平均線<前回安値
- 前回安値<前前回安値
- 前回安値<現在安値
図にすると以下です。
「なぜ安値基準?」と思われるかも知れませんし、ここは議論の余地が本来はありますが、人が目視で「下がって上がった」を判断するとき、それは往々にして安値基準で行われると考えられます。
例えば下図において緑の四角内に着目しますと、これは終値ベースで考えれば「下がって上がった」ことになります。ですが下に尖ったチャートには見えないのではないでしょうか。
グランビルの法則が裁量トレードで主に使われることを想定すると、バックテストにおいてもここでエントリーするのは適切ではないと考えられるわけです。
買い④
「大きく乖離」の判断基準をどうするかに難しさがありますが、移動平均線からの乖離度合いは「乖離率」を用いれば良さそうです。後はそれがいくらで大きいとみなすかですが、具体的な基準は後述し、ここではそれを「閾値」と呼ぶことで条件のみ設定します。
- 現在移動平均線乖離率<-閾値
図にすると以下です。
買いの定量化は以上です、以下で売りの場合を定義しますが、全て買いの反対で考えればいいでしょう。
売り①
買い①の反対のため、以下となります。
- 現在移動平均線<前回移動平均線
- 前回移動平均線<前回終値
- 現在終値<現在移動平均線
売り②
買い②の反対のため、以下となります。
- 現在移動平均線<前回移動平均線
- 前回終値<前回移動平均線
- 現在移動平均線<現在終値
売り③
買い③の反対のため、以下となります。
- 前回高値<前回移動平均線
- 前前回高値<前回高値
- 現在高値<前回高値
売り④
買い④の反対のため、以下となります。
- 閾値<現在移動平均線乖離率
検証対象
前説でグランビルの法則を定量化しました。ここでは検証対象となる時間足、エントリー・手仕舞い、パラメータの3つに関して補足説明します。
時間足
15分足、1時間足、4時間足でそれぞれバックテストを行いたいと思います。15分足はスキャルピング、1時間足はデイトレード、4時間足はスイングトレードをそれぞれ意識しています。
エントリー・手仕舞い
基本は売りと買いをドテンで繰り返します。買いポジション保有中、売りの基準を満たせば、買いポジションを全て手仕舞いしますし、逆も然りになります。
一方、異なる買いあるいは売りパターンでのポジションの重複は許すこととします。例えば、買い①でポジショニングした後、買い②が起こった場合、買い①と買い②の両方のポジションを持ちます。
ただし買い①と買い①のように、パターンの重複は今回は許容しないこととします。
パラメータ
設定しないといけないパラメータは、移動平均線の期間Nと、保留していた乖離率の閾値です。
今回検証では、移動平均線の期間Nを5、20、75、200の4パターン用意し、乖離率の閾値として±0.75と±0.375の2パターンを用意します。
本稿では省略しますが、なぜこのような設定値を用意したかに関しては、以下2つのリンクをご参考ください。
検証結果
それでは実際に結果を見てみたいと思います。バックテストは以下の条件にて行いました。
通貨ペア | USD/JPY |
スプレッド | 0.3pips(0.3銭) |
検証期間 | 2013/1/1 ~ 2021/12/31 |
ポジション | 0.1Lot(10000通貨) |
資産 | 100万円 |
15分足
括弧の左の数字はプロフィットファクタです。そのため1より大きければ期待値はプラスで、1未満であれば期待値はマイナスです。括弧の中の数字は取引回数です。
±0.75 | ±0.375 | |
N=5 | 0.97(46764) | 0.97(47032) |
N=20 | 0.98(25354) | 0.98(27186) |
N=75 | 1.03(10263) | 0.99(14022) |
N=200 | 1.08(6392) | 1.01(9432) |
結果をみますと、移動平均線の期間Nは大きければ大きいほど良く、閾値も大きい方が(乖離が大きいときのみエントリーする方が)良いようです。ただしプロフィットファクタが1を超え始めるのはN=200からのようで、15分足との相性は微妙というところでしょうか。
下図は最も結果の良かったN=200、±0.75の組み合わせのバックテストの詳細です。ドローダウンも無くはないですが、遠目で見れば右肩上がりというところでしょうか。
1時間足
表の見方は15分足同様です。
±0.75 | ±0.375 | |
N=5 | 1.09(11574) | 1.06(12096) |
N=20 | 1.04(6252) | 1.01(7889) |
N=75 | 1.02(3470) | 1.01(4537) |
N=200 | 1.00(2513) | 0.90(2710) |
閾値は大きい方が良いようですが、一方のNは小さい方が良いという結果です。全体的にプロフィットファクタは1を超えており、1時間足との相性は良さそうです。
以下は最も結果の良かったN=5、±0.75のバックテストの詳細です。15分足のときより安定しているように見えますが、途中から上昇が鈍化しているようです。
4時間足
表の見方は15分足同様です。文字色が灰色の箇所がありますが、これは取引回数が1000回に満たない場合です。個人的には1000回に満たない結果は信用しない方がいいと考えてます。
±0.75 | ±0.375 | |
N=5 | 0.87(2835) | 0.87(3322) |
N=20 | 0.91(2031) | 0.93(2403) |
N=75 | 1.08(1276) | 1.13(1225) |
N=200 | 0.93(805) | 1.10(702) |
こちらは移動平均線の期間Nは大きければ大きいほど良く、閾値は逆に小さい方が良いという結果でした。
パラメータはN=75、±0.375のときにプロフィットファクタ最大のようですが、下図の通り資産曲線の上下動が激しく、安定しない動きとなってしまいます。
まとめ
本記事では、グランビルの法則の定量化方式を提案し、バックテストを用いてその有効性を検証しました。以下に結論となる重要なポイントを示します。
以上、最後まで読んでいただきありがとうございました。