テクニカル分析は、株よりFXの方が盛んです。
今回はFXのテクニカル手法を東証一部に適用してみます。
今回は、次のようなテクニカル指標を用いた手法です。
- 相場の強弱を表すオシレーター系と呼ばれるものから「ストキャスティクス」と「RSI」
- さらにトレンド系の「ボリンジャーバンド」、ラインブレイク判定として「HLバンド」
斉藤学氏とは?
1980年神奈川県生まれ。
都内専門学校でパソコン講師を務めるかたわら、株やCFD、FXを取引。
さらに、テクニカル分析や経済指標を駆使したさまざまなFX必勝法を編み出し、わずか1年間で50万円を6900万円に増やす。
その経験から、投資情報サイト公式ブログを運営中。FXセミナーの講師や雑誌取材に加え、メールマガジンを毎日配信している。
・・・とのことです。
斉藤学氏の逆張りストラテジー(マナブ式)の有効性確認
「6900万円トレーダーに最強の逆張りストラテジーを依頼」のページに次のような手法が書いてありました。
ストキャスティクスでは「%K」が20%を割り、かつRSIが30%を割った水準で売られすぎと判断し、ボリンジャーバンドのアッパーライン突き抜けと、トレンドフォロー系のHLバンドで、高値が「Hバンドが上に抜けたとき」という条件を追加している。なお、リスク回避としてロスカットは150pips以上と設定した。以上のストラテジーを「マナブ式」と命名し、カブロフに記憶させた。
これだと、システムトレードの実装はできないので、次のように定義してみた。
【買い条件】
- 1) ストキャスティクス(14日,3日,3日)の「%K」が20%を割る
- 2) RSI(14日)が30%を割った
- 3) ボリンジャーバンド(20日)のアッパーライン(+2σ)突き抜け
- 4) HLバンド(20日)の高値が「Hバンド」より上に抜けた
【手仕舞い条件】
- 1) 利食い:含み益が10%を上回った
- 2) 損切り:実働10日(≒カレンダーで14日)経過
・・・で、作って実験したら分かりますが、、
「ストキャスティクス(14日,3日,3日)の「%K」が20%を割る」
「RSI(14日)が30%を割った」
と
「ボリンジャーバンド(20日)のアッパーライン(+2σ)突き抜け」
「HLバンド(20日)の高値が「Hバンド」より上に抜けた」
が同時に発生する銘柄など東証一部でありません。
しかたないので、
- 「ストキャスティクス(14日,3日,3日)の「%K」が20%を割る」
- 「RSI(14日)が30%を割った」
が発生して、7日以内に次の状態になった場合に翌日の寄り付けで購入しています。
- 「ボリンジャーバンド(20日)のアッパーライン(+2σ)突き抜け」
- 「HLバンド(20日)の高値が「Hバンド」より上に抜けた」
・・・、なんだか解釈が違う気がするなぁ。。。
ソースコード
Utility.ptは、「過去の日記」を参照してください。
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 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 |
# loop-type: date-only //============================== require "TIlib" require "Utility" // ====================================== // 斉藤学氏の逆張りストラテジー // https://news.livedoor.com/article/detail/6785227/ // ====================================== // // [買い条件] // 1) ストキャスティクス(14日,3日,3日)の「%K」が20%を割る // 2) RSI(14日)が30%を割った // 3) ボリンジャーバンド(20日)のアッパーライン(+2σ)突き抜け // 4) HLバンド(20日)の高値が「Hバンド」より上に抜けた // // [売り条件] // 1) 利食い:含み益が10%を上回った // 2) 損切り:実働10日(≒カレンダーで14日)経過 codes = CodeList if ($code_num && $code_num != Length(codes)) Print("前回と異なる銘柄リストでは実行できません。") Dummy end $code_num = Length(codes) //グローバル変数を初期化 if (!$__INIT__) $budgetIni = 10000000 $budget = $budgetIni // 投資総額 (1000万円) $buyUnit = 1000000 // 1回の購入資金 (100万円) $MaxHoldDay = 10 // 最大保有日数 $Interest = 0 // 無制限(0) / 単利(1) / 複利(2) //------------------------------------------------ $set = [$code_num] $buy = [$code_num] $hold = [$code_num] //------------------------------------------------ $ST_7 = [$code_num] $RSI_7 = [$code_num] $ST_5 = [$code_num] $RSI_5 = [$code_num] $ST_3 = [$code_num] $RSI_3 = [$code_num] $BB = [$code_num] $HLB = [$code_num] // 値上がり銘柄のカウント ------------------------ $buyflag = [$code_num] $sellflag = [$code_num] $__INIT__ = 1 end def Main(i) //================================================== // 条件(買条件, 売条件共通部分) //================================================== //まだ上場していない銘柄は株価データがないためnullが返る if (Index == null) return end if ! ($BB[i] && $HLB[i] && $RSI_7[i] && $ST_7[i] && $RSI_5[i] && $ST_5[i] && $RSI_3[i] && $ST_3[i]) //Tilibのオブジェクト生成 $ST_7[i] = {-7}Stoch_new(14,3,3) $RSI_7[i] = {-7}RSI_new(14,0) $ST_5[i] = {-5}Stoch_new(14,3,3) $RSI_5[i] = {-5}RSI_new(14,0) $ST_3[i] = {-3}Stoch_new(14,3,3) $RSI_3[i] = {-3}RSI_new(14,0) $HLB[i] = HLBand_new(20) $BB[i] = BB_new(20) //銘柄ごとのグローバル変数を初期化する $hold[i] = 0 return end //指標の計算を1日進める Stoch_next($ST_7[i]) RSI_next($RSI_7[i]) Stoch_next($ST_5[i]) RSI_next($RSI_5[i]) Stoch_next($ST_3[i]) RSI_next($RSI_3[i]) HLBand_next($HLB[i]) BB_next($BB[i]) // ここまで ======================================== if (1==PricedataExistCheck(Close)) return end //================================================== // 保有してない→購入 //================================================== if (! $hold[i]) // 1) ストキャスティクス(14日,3日,3日)の「%K」が20%を割る // 2) RSI(14日)が30%を割った // 3) ボリンジャーバンド(20日)のアッパーライン(+2σ)突き抜け // 4) HLバンド(20日)の高値が「Hバンド」より上に抜けた st_k_7 = Stoch_k($ST_7[i]) rsi_7 = RSI_value($RSI_7[i]) st_k_5 = Stoch_k($ST_5[i]) rsi_5 = RSI_value($RSI_5[i]) st_k_3 = Stoch_k($ST_3[i]) rsi_3 = RSI_value($RSI_3[i]) bb_v = BB_value($BB[i]) bb_d = BB_deviation($BB[i]) hl_h = $HLB[i][1] if ! (st_k_7 && rsi_7 && st_k_5 && rsi_5 && st_k_3 && rsi_3) return end if ! (bb_d && bb_v && hl_h) return end //================================================== // 売買(買い) //================================================== if (st_k_7 < 20 && rsi_7 < 30) || (st_k_5 < 20 && rsi_5 < 30) || (st_k_3 < 20 && rsi_3 < 30) if (High > hl_h && Close > bb_v + 2 * bb_d) $long = 0 $long = Num($buyUnit,Close) $buyflag[i] = 1 end end //================================================== // 保有している→売却 //================================================== elsif ($hold[i]) if ($set[i] < 1) $set[i] = 1 return end $set[i] = $set[i] + 1 //================================================== // 売買(売り) //================================================== // 1) 利食い:含み益が10%を上回った if (Close >= 1.10 * $buy[i]) PrintLog("利食い") $sellflag[i] = 1 $set[i] = 0 // 2) 損切り:実働10日(≒カレンダーで14日)経過 elsif ($set[i] > $MaxHoldDay) PrintLog("損切り="+$set[i]) $sellflag[i] = 1 $set[i] = 0 end end end //==================== // 売買関数 //==================== def BuySell(j) if (PricedataExistCheck(Close)) return end //4) 終値が過去50日間の終値の最高値を更新した銘柄が、市場全体で50銘柄以上ある場合 if ($buyflag[j]) $long = 0 $long = Num($buyUnit,Close) Buying(j) $buyflag[j] = 0 elsif ($sellflag[j]) Selling(j) //Print($set[j]) $sellflag[j] = 0 end end //==================== // 銘柄コードを変えながらMain関数,BuySell関数を実行 //==================== i = -1 j = -1 while (i + 1 < $code_num) i = i + 1 {codes[i]}Main(i) end while (j + 1 < $code_num) j = j + 1 {codes[j]}BuySell(j) end // PrintLog("=======>END ") |
バックテストの結果
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 |
株価データ: 日足 銘柄リスト: 東証1部 1998/01/05~2019/06/27における成績です。 ---------------------------------------- 全トレード数 6534 勝ちトレード数(勝率) 2992(45.79%) 負けトレード数(負率) 3542(54.21%) 全トレード平均利率 -0.17% 勝ちトレード平均利率 7.00% 負けトレード平均損率 -6.23% 勝ちトレード最大利率 75.10% 負けトレード最大損率 -60.19% 全トレード平均期間 15.34 勝ちトレード平均期間 14.18 負けトレード平均期間 16.32 ---------------------------------------- 必要資金 ¥160,591,300 最大ポジション(簿価) ¥156,246,700 最大ポジション(時価) ¥158,733,000 純利益 -¥8,004,185 勝ちトレード総利益 ¥196,570,900 負けトレード総損失 -¥204,575,100 全トレード平均利益 -¥1,225 勝ちトレード平均利益 ¥65,699 負けトレード平均損失 -¥57,757 勝ちトレード最大利益 ¥798,000 負けトレード最大損失 -¥843,200 プロフィットファクター 0.96 最大ドローダウン(簿価) -¥19,725,800 最大ドローダウン(時価) -¥19,274,900 ---------------------------------------- 現在進行中のトレード数 6 ---------------------------------------- 各毎の利益額 2000年 265 -¥6,184,700 2001年 224 -¥2,740,900 2002年 220 -¥3,430,900 2003年 255 ¥1,031,400 2004年 279 ¥2,216,600 2005年 426 ¥5,842,100 2006年 233 -¥608,400 2007年 435 -¥7,966,300 2008年 304 -¥5,232,600 2009年 338 ¥2,723,700 2010年 327 ¥2,266,900 2011年 310 -¥3,091,000 2012年 375 ¥3,308,400 2013年 269 ¥6,074,215 2014年 482 ¥9,008,000 2015年 311 -¥976,300 2016年 322 -¥4,651,000 2017年 550 ¥6,060,800 2018年 438 -¥10,597,500 2019年 171 -¥1,056,700 |
利益曲線は次の通り。
マイナスになってしまいました。
どうやら解釈が違うのかもしれません。
ただ、週足を使ったトレードの場合には勝率6割、PFが1.5程度となりました。
まとめ
Amazonのコメントでは「ボリバンだ、RSIだ!などとオシレーター系に頼るような手法では先が見えている」と書かれていました。
そうなんだよね・・・。
様々な手法を実験した先には、勝利が本当に待っているのかな・・・。