大型台風 15号(ファクサイ)が猛威を奮い、10時頃に改札口まで行くと電車が15時まで動かないとのアナウンスがありました。
待っている人の列も長蛇です。
仕方ないので、今日はお休みです★
公園近くの工事現場の柵も破壊されていました。
P.S 「ねとらぼ」より
「千葉から出られない」「社畜の参勤交代」 千葉県・津田沼駅の入場待機列がヤバすぎると話題に
凄すぎ・・・・、1時間の通常出社に4時間かかった人もいるとか・・・。。
cosisin氏のブログのスイング戦略+騰落レシオの有効性検証
cosisin氏のブログに「スイング監視用戦略に東証1部騰落レシオを使った相場判定」が掲載されています。
もうリンクに飛んでもストラテジーの画像も表示されません。
2012年8月4日の日記ですから・・・・。
ですが、web.archiveで画像を入手し記載してみると次のとおりです。
【買いルール】
次を満たす時、[翌日逆指(終値)][終値(+5.00%)]で[買い]を仕掛ける
- [期間高値(高値)(3)]が[終値(+10.00%)]より[小さい]
- [前日比(率)]が[-5]と[5]の[範囲内]
- [移動平均乖離率(終値)(25)]が[-20]と[20]の[範囲外]
- [東証1部騰落レシオ(25)]が[100]より[小さい]
- [東証1部騰落レシオ(3)]が[東証1部騰落レシオ(5)]より[大きい(同じ含む)]
【手仕舞いルール】
次を満たす時、[翌日寄付]で手仕舞いする
- [東証1部騰落レシオ(3)]が[東証1部騰落レシオ(5)]より[小さい(同じ含む)]
- [前日比(率)]が[0]より[小さい]
- [保有日数]が[3]より[大きい(同じ含む)]
先週公開したスイングストラテジーに相場環境を取り入れました。東証1部騰落レシオ25日です。
100以上のときはだいたいどんなストラテジーでも安定していいので、100未満のときについて調べました。中期で弱い場合、どういったタイミングで突入するのがいいのか調べました。
結果は東証1部騰落レシオ3日が東証1部騰落レシオ5日以上のときに参加するのがいいみたいです。
反発気配を見せたら参入する感じです。手仕舞いは逆で反発気配が弱ったら即売却。
さて、今回は新しい指標はありません。
そして、もはや「騰落レシオ」を実装済の私が恐れるものは何もないです!
・・・
・・・
・・・
騰落レシオ・・・3つ・・・!
ソースコード
全面的な作り変えが必要です・・・・。
また下位互換はありません。ソースコードは次のようになります。
TIlib、Utility、TrendCheckライブラリはGitHubに置いています(日記の公開日に合わせたバージョンを利用下さい)
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 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 |
# loop-type: date-only //============================== require "TIlib" require "Utility" require "TrendCheck" // ====================================== // cosisin氏の乖離率スイング戦略+騰落レシオ // ====================================== // //【基本設定】 // 1) 株価の低い場合はランキングしない[50]万円以下 // 2) 売買代金の少ない場合はランキングしない(売買代金の[3]日間平均が[5]千万円以下の場合) // 3) 単利利用、通年 // //【買いルール】 // [翌日逆指(終値)][終値(+5.00%)]で[買い]を仕掛ける // 1) [前日比(率)]が[-5]と[5]の[範囲内] // 2) [移動平均乖離率(終値)(25)]が[-20]と[20]の[範囲外] // 3) [期間高値(高値)(3)]が[終値(+10.00%)]より[小さい] // 4) [東証1部騰落レシオ(25)]が[100]より[小さい] // 5) [東証1部騰落レシオ(3)]が[東証1部騰落レシオ(5)]より[大きい(同じ含む)] // //【手仕舞い】 // 1) [東証1部騰落レシオ(3)]が[東証1部騰落レシオ(5)]より[小さい(同じ含む)] // 2) [前日比(率)]が[0]より[小さい] // 3) [保有日数]が[3]より[大きい(同じ含む)] codes = CodeList if ($code_num && $code_num != Length(codes)) Print("前回と異なる銘柄リストでは実行できません。") Dummy end $code_num = Length(codes) //グローバル変数を初期化 if (!$__INIT__) $budgetIni = 10000000 // 投資総額 (1000万円) $buyUnit = 1000000 // 1回の購入資金 (100万円) $MaxHoldDay = 2 // 最大保有日数 $Interest = 1 // 無制限(0) / 単利(1) / 複利(2) $reverse = 0 // 購入順序 昇順(0) / 降順(1) $udcount = 3 // 騰落レシオ利用数 / 不要(0) Init() // 指標初期化 // テクニカル指標初期化 -------------------------- $HLB = [$code_num] $BB = [$code_num] // 騰落レシオ初期値代入($udcountの数) ---------- $ratiodate[0] = 25 // 騰落レシオ日数 $ratiodate[1] = 3 // 騰落レシオ日数 $ratiodate[2] = 5 // 騰落レシオ日数 //------------------------------------------------ InitDone() // 騰落レシオ初期化 $__INIT__ = 1 end //================================================== // メイン関数 //================================================== def Main(i) //================================================== // 条件(買条件, 売条件共通部分) //================================================== //まだ上場していない銘柄は株価データがないためnullが返る if (Index == null) return end if ! ($order[(int)Code]) $order[(int)Code] = i end if ! ($HLB[i]) //Tilibのオブジェクト生成 $HLB[i] = HLBand_new(3) $BB[i] = BB_new(100) //銘柄ごとのグローバル変数を初期化する $hold[i] = 0 return end //指標の計算を1日進める HLBand_next($HLB[i]) BB_next($BB[i]) //================================================== // 保有してない→購入 //================================================== if (! $hold[i]) if ! ($HLB[i][1] && $BB[i] && Close && {-1}Close && {-2}Close && {-3}Close && $ratio) return end if ! (Volume && {-1}Volume && {-2}Volume) return end ma = BB_value($BB[i]) if ! (ma) return end r = 100*(Close - ma)/ma //================================================== // 売買(買い) //================================================== // 1) 株価の低い場合はランキングしない[50]万円以下 // 2) 売買代金の少ない場合はランキングしない(売買代金の[3]日間平均が[5]千万円以下の場合) if ! (SalesValue()/3 + {-1}SalesValue()/3 + {-2}SalesValue()/3 > 50000 && Close > 50)//&& stpflg == 1) return end // [前日比(率)]が[-5]と[5]の[範囲内] day = 5 > Abs((Close - {-1}Close) / {-1}Close * 100) // [東証1部騰落レシオ(25)]が[100]より[小さい] // [東証1部騰落レシオ(3)]が[東証1部騰落レシオ(5)]より[大きい(同じ含む)] updown = 100 > $ratio[0] && $ratio[1] >= $ratio[2] // [期間高値(高値)(3)]が[終値(+10.00%)]より[小さい] // [移動平均乖離率(終値)(25)]が[-20]と[20]の[範囲外] check = Close*1.1 > $HLB[i][1] && Abs(r) > 20 if (day && updown && check) PrintLog("購入予定") $buyflag[i][0] = 1 // 好きなパラメータをもとにソート $buyflag[i][1] = r $buyCnt = $buyCnt + 1 end //================================================== // 保有している→売却 //================================================== elsif ($hold[i]) if ($set[i] < 1) $set[i] = 1 return end $set[i] = $set[i] + 1 if ! ({-1}Close && Close) return end //================================================== // 売買(売り) //================================================== // [東証1部騰落レシオ(3)]が[東証1部騰落レシオ(5)]より[小さい(同じ含む)] day1 = (Close - High) > ({-1}Close - {-1}High) if ($ratio[1] <= $ratio[2]) PrintLog("売り1") $sellflag[i] = 1 $set[i] = 0 // [前日比(率)]が[0]より[小さい] elsif (0 > Abs((Close - {-1}Close) / {-1}Close * 100)) PrintLog("売り2") $sellflag[i] = 1 $set[i] = 0 // 2) [保有日数]が[3]より[大きい(同じ含む)] elsif ($set[i] >= $MaxHoldDay) PrintLog("手仕舞い") $sellflag[i] = 1 $set[i] = 0 end end end //================================================== // [翌日逆指値(終日)][終値(+5.00%)]で[買い]を仕掛ける //================================================== def BuyingLimitedPrice(i,d) //資金が不足している場合は何もしない if ($long == 0) return end t = Close*1.05 if ! ({1}High > t && t > {1}Low) return end //予算を超えない場合だけ買う if ($long * t <= $budget) if ($Interest == 1 || $Interest == 2) $budget = $budget - $long * t end $hold[i] = $long $buy[i] = t Print("buy =" + t + " $hold[i] =" + $hold[i]) {1}Buy((int)t, $hold[i]) Print("B 予算残り =" + $budget) $set[i] = 0 else PrintLog("予算を超過しています") end end //================================================== // 買い(共通条件) //================================================== def Buying2(i) if (0 == PricedataExistCheck({1}Open)) BuyingLimitedPrice(i,1) end end //==================== // 買い処理 //==================== def SortBuy(i) if (PricedataExistCheck(Close)) return end $long = 0 $long = Num($buyUnit, Close) codeset = $order[(int)Code] Buying2(codeset) end //==================== // 売り処理 //==================== def Sell_(i) if ($sellflag[i]) Selling(i) $sellflag[i] = 0 end end //==================== // 銘柄コードを変えながらMain関数,BuySell関数を実行 //==================== Print("-------------------------------------------------") Print("日付 = "+ Year + "/" + Month + "/" + Day) UpDownRatio() // 騰落レシオ計算 SortInit() // ソート初期化 i = -1 while (i + 1 < $code_num) i = i + 1 {codes[i]}Main(i) end i = -1 while i + 1 < $code_num i = i + 1 {codes[i]}Sort(i) end i = -1 if ($buyCnt) while i + 1 < $buyCnt i = i + 1 {$sortList2[i]}SortBuy(i) end end i = -1 while i + 1 < $code_num i = i + 1 {codes[i]}Sell_(i) end |
バックテスト結果
実行時間は東証一部だけで実行して、3時間程度です。
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 |
株価データ: 日足 銘柄リスト: 東証1部 1998/01/05~2019/09/04における成績です。 ---------------------------------------- 全トレード数 5055 勝ちトレード数(勝率) 2570(50.84%) 負けトレード数(負率) 2485(49.16%) 全トレード平均利率 0.70% 勝ちトレード平均利率 5.40% 負けトレード平均損率 -4.16% 勝ちトレード最大利率 54.01% 負けトレード最大損率 -37.97% 全トレード平均期間 3.00 勝ちトレード平均期間 3.06 負けトレード平均期間 2.94 ---------------------------------------- 必要資金 ¥9,698,700 最大ポジション(簿価) ¥9,996,500 最大ポジション(時価) ¥11,869,500 純利益 ¥36,050,540 勝ちトレード総利益 ¥135,439,800 負けトレード総損失 -¥99,389,260 全トレード平均利益 ¥7,132 勝ちトレード平均利益 ¥52,700 負けトレード平均損失 -¥39,996 勝ちトレード最大利益 ¥537,600 負けトレード最大損失 -¥343,500 プロフィットファクター 1.36 最大ドローダウン(簿価) -¥2,262,400 最大ドローダウン(時価) -¥2,419,500 ---------------------------------------- 現在進行中のトレード数 1 ---------------------------------------- 平均年利 18.59% 平均年利(直近5年) 0.30% 最大連勝 10回 最大連敗 13回 ---------------------------------------- [年度別レポート] 年度 取引回数 運用損益 年利 勝率 PF 最大DD 2019年 197回 -¥412,400円 -4.25% 47.21% 0.90倍 -24.40% 2018年 314回 -¥323,100円 -3.33% 46.50% 0.95倍 -24.04% 2017年 140回 -¥130,500円 -1.35% 49.29% 0.96倍 -30.02% 2016年 218回 ¥818,600円 8.44% 53.21% 1.18倍 -34.66% 2015年 203回 ¥192,800円 1.99% 51.23% 1.05倍 -15.19% 2014年 223回 ¥255,400円 2.63% 52.91% 1.05倍 -37.97% 2013年 137回 -¥1,319,200円 -13.60% 43.07% 0.68倍 -24.17% 2012年 237回 ¥5,100,400円 52.59% 61.60% 2.42倍 -28.25% 2011年 271回 ¥3,040,500円 31.35% 56.46% 1.56倍 -24.31% 2010年 237回 ¥956,800円 9.87% 54.01% 1.23倍 -30.95% 2009年 243回 ¥2,690,726円 27.74% 54.32% 1.56倍 -14.98% 2008年 422回 ¥436,320円 4.50% 51.18% 1.04倍 -30.32% 2007年 350回 ¥4,362,700円 44.98% 52.86% 1.78倍 -24.53% 2006年 271回 -¥121,300円 -1.25% 46.49% 0.98倍 -17.35% 2005年 107回 ¥1,788,100円 18.44% 52.34% 2.02倍 -17.34% 2004年 236回 ¥810,700円 8.36% 43.64% 1.15倍 -18.23% 2003年 176回 ¥1,282,600円 13.22% 52.27% 1.40倍 -22.61% 2002年 279回 ¥6,133,700円 63.24% 56.63% 2.62倍 -22.36% 2001年 363回 ¥1,700,500円 17.53% 47.93% 1.23倍 -19.49% 2000年 431回 ¥8,787,200円 90.60% 56.61% 2.31倍 -17.54% |
利益曲線は次のとおりです。
利益曲線がまた寝ました。2013年からです。
このストラテジー公開は2012年なので、これを使って参戦した人はボロボロだったでしょう。
直近5年の年利は0.38%です。さすがに使うことはできません。
まとめ
未だに近年において単調増加する手法を見つけることができていません。
また過去の公開されている手法を実装する中で、何か学ぶことができるのでは?と思って行っていますが、まだ何も分かっていません。
とりあえず「2013年の壁」の謎を解明しないと分析も考察も出来ないです。