チャート分析の中でも最も基本的でシンプル手法でありながら、絶大な効果のある「グランビルの法則」というのがあるそうです。
グランビルの法則とは?
グランビルの法則は、
- ローソク足
- 25日移動平均線
この2つのパターンから売買シグナルを見つける手法です。
【買いルール】
- 1. 移動平均線が下降を続けた後に、横ばい、もしくは上向きかけている状態で、価格が移動平均線を上回った時
- 2. 移動平均線が上昇している時に、価格が移動平均線を下回った場合
- 3. 価格が上昇基調の移動平均線の上にあり、移動平均線に向って下降してきたが、移動平均線を割り込むことなく再度上昇に転じた場合
- 4. 価格が下降しつつある移動平均線から、相場が大きくかけ離れて下落した場合(短期的自律反発)
・・・意味不明。
今の私には実装できません・・・。
他のサイトに「グランビルもどきの法則(Hiroさん版)」として紹介されていた手法で代用します。
- 1. 株価(終値)が3日間、連続して、前日より下がっている
- 2. 25日移動平均と75日平均が、上昇中である
- 3. 5日移動平均>25日移動平均>75日移動平均である
- 4. 終値は、25日移動平均より上にある
【手仕舞い条件】
- 1. 高値が買値+2%を越えた時、翌日の寄付きで売る
- 2. 実働10日(≒カレンダーで14日経過)で売る
ソースコード(2019.06.22訂正)
前回までの実装では「同日売り」が存在してエラーが発生して中断されたので修正しました。
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
require "TIlib" require "Nehori" if !$__INIT__ $BUDGET = 1000000 // 予算 $MHP = 10 // max holding period (business day) $EMA05 = EMA_new(5) $EMA25 = EMA_new(25) $EMA75 = EMA_new(75) $EMA25_1 = {-1}EMA_new(25) $EMA75_1 = {-1}EMA_new(75) $EMA25_5 = {-5}EMA_new(25) $EMA75_5 = {-5}EMA_new(75) $MA25 = EMA_new(25) $__INIT__ = 1 else EMA_next($EMA05) EMA_next($EMA25) EMA_next($EMA75) EMA_next($EMA25_1) EMA_next($EMA75_1) EMA_next($EMA25_5) EMA_next($EMA75_5) EMA_next($MA25) end def BuyCond if ! (Close && {-1}Close && {-2}Close && {-3}Close) return end ema05 = EMA_value($EMA05) ema25 = EMA_value($EMA25) ema75 = EMA_value($EMA75) if ! (ema05 && ema25 && ema75) return end ema25_1 = EMA_value($EMA25_1) ema75_1 = EMA_value($EMA75_1) ema25_v = EMA_value($MA25) if ! (ema25_1 && ema75_1 && ema25_v) return end ema25_5 = EMA_value($EMA25_5) ema75_5 = EMA_value($EMA75_5) if ! (ema25_5 && ema75_5) return end // 終値は、25日移動平均より上 hiro4 = Close > ema25_v // 株価(終値)が3日間、連続して前日より下 hiro1 = (Close < {-1}Close && {-1}Close < {-2}Close && {-2}Close < {-3}Close) // 25日移動平均と75日平均が上昇中 hiro2 = (ema25_5 < ema25 && ema25_1 < ema25 && ema75_1 < ema75 && ema75_5 < ema75) // 5日移動平均 > 25日移動平均 > 75日移動平均 hiro3 = (ema25 < ema05 && ema75 < ema25) if (hiro4 && hiro1 && hiro2 && hiro3) return (hiro1 && hiro2 && hiro3 && hiro4) end end def SellCond if ! High return end if 1.02 * $buy > High //高値が買値+2%を越えた return 1 end end Main() |
また、同一メソッドを別ファイルにしました(Nehori.ptという名前でProtra\libに保存)
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
// Common methods def HoldingPeriod() if $set <= 0 //0以下でも売り条件(期限切れ) return 1 end $set = $set - 1 //1日1回カウンタ減らしておく return end def Num(price) num = $BUDGET/price if num >= 1000 num = (num/1000)*1000 elsif num >= 100 num = (num/100)*100 elsif num == 0 num = 1 end return num end def Main() if ! $wait // 同日売買禁止 if ! $hold && BuyCond if {1}Open //翌日の始値で $hold = Num({1}Open) if $hold >= 1 $buy = {1}Open //買う {1}Buy(Open, $hold) $wait = 2 // 2日後まで売買しない $set = $MHP // 買ったとき最初のカウンタをセット end elsif Close //翌日の始値がないとき $hold = Num(Close) if $hold >= 1 $buy = Close //便宜上終値で買う Buy(Close, $hold) $wait = 1 // 翌日まで売買しない $set = $MHP // 買ったとき最初のカウンタをセット end end elsif $hold && (SellCond || HoldingPeriod) if {1}Open {1}Sell(Open, $hold) $wait = 2 // 2日後まで売買しない else //始値なし Sell(Close, $hold) $wait = 1 // 翌日まで売買しない end $hold = 0 end else $wait = $wait - 1 end end |
バックテスト結果(2019.06.22訂正)
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
株価データ: 日足 銘柄リスト: 日経225採用銘柄 1998/01/05~2019/06/19における成績です。 ---------------------------------------- 全トレード数 10576 勝ちトレード数(勝率) 4533(42.86%) 負けトレード数(負率) 6043(57.14%) 全トレード平均利率 0.58% 勝ちトレード平均利率 4.74% 負けトレード平均損率 -2.54% 勝ちトレード最大利率 100.43% 負けトレード最大損率 -36.59% 全トレード平均期間 8.15 勝ちトレード平均期間 11.35 負けトレード平均期間 5.76 ---------------------------------------- 必要資金 ¥29,466,020 最大ポジション(簿価) ¥64,028,000 最大ポジション(時価) ¥68,230,000 純利益 ¥51,522,250 勝ちトレード総利益 ¥180,941,400 負けトレード総損失 -¥129,419,200 全トレード平均利益 ¥4,872 勝ちトレード平均利益 ¥39,916 負けトレード平均損失 -¥21,416 勝ちトレード最大利益 ¥928,000 負けトレード最大損失 -¥322,000 プロフィットファクター 1.40 最大ドローダウン(簿価) -¥6,217,740 最大ドローダウン(時価) -¥7,776,904 ---------------------------------------- 現在進行中のトレード数 4 ---------------------------------------- 各毎の利益額 1998年 184 ¥151,890 1999年 468 ¥8,854,990 2000年 424 ¥3,172,505 2001年 321 ¥1,448,970 2002年 321 ¥633,220 2003年 603 ¥8,106,800 2004年 571 ¥1,173,000 2005年 743 ¥11,708,240 2006年 593 ¥1,280,615 2007年 488 ¥1,145,820 2008年 218 -¥818,670 2009年 462 ¥2,016,740 2010年 419 -¥465,610 2011年 355 -¥863,050 2012年 444 ¥1,673,250 2013年 777 ¥12,922,590 2014年 608 -¥684,175 2015年 669 ¥613,535 2016年 460 -¥729,755 2017年 781 ¥2,380,987 2018年 495 -¥1,414,855 2019年 172 -¥784,805 |
利益曲線は次の通り(2019.06.22訂正)。
(2019.06.22訂正)
勝率は低くマイナスの年が多いものの、グラフ的は増加傾向になっています。