個人で多くの時間を費やしても、販売されてるシストレ手法の精度を出すのは至難の業。
でも、例えばシストレ手法の仲介業者は手法が丸見えだ。
- その日のランキング一位、二位の手法を選択する
- 明日買うシグナルあるか確認する
- シグナルがあれば購入
たったこれだけで、常に勝ち組シストレ手法に更新しつつ、自動で安定に利益を出し続けられる。
そこで、仲介業者に上のロジックで儲かるか質問してみた。
確かに手法は見れるが、シストレしてる人はいない。
裁量をしてる人はいる。シストレの手法売買で儲ける商売をしているが、シストレが儲かるとは思ってない。
根本からの否定キターーーー(゜∀゜)ーーーー!!!
前回、cosisin氏のスイング逆張り手法の有効性を検証しました。
この時は、指値実装は行っていません(現実では指値で必ず株が買えないので)。
ただ、あまりにイザナミの結果と差が大きいので、指値も実装してみました。
売買ルール
再度、まとめます。
【基本設定】
- 1) 株価の低い場合はランキングしない[50]万円以下
- 2) 売買代金の少ない場合はランキングしない(売買代金の[3]日間平均が[5]千万円以下の場合)
- 3) 単利利用、通年
- 4) 全ての銘柄対象
【ランキング条件】
- 1) [期間高値(3)]が[終値(+10%)]より小さい
- 2) 過去[3]日間に、[前日比(率)]が[-8]と[8]の[範囲外]の日が[1]日以上[存在しない]
- 3) [東証一部 騰落レシオ(10)]が[90]より[大きい(同じ含む)]
【買いルール】
- 1) [デイトレサンプルスイング改良版(順位)]が[10]より[小さい(同じ含む)]
- 2) [翌日逆指値(終日)][終値(+5.00%)]で[買い]を仕掛ける
【手仕舞いのルール】
- 1) [前日比(率)]が[0]より[小さい]
- 2) [保有日数]が[3]より[大きい(同じ含む)]
【優先順設定】
- 1) 移動平均乖離率(終値)(100) 小さい順
今回は、赤字の部分が増えただけです。
ソースコード
Utility、TrendCheckライブラリはGitHubに置いています。
気持ち的にHLBand()が遅い気がしたので書き換えましたが、計算時間は、後半遅くなり9時間程度です。
指値部分の実装は再利用性がありません(今後、指値を使うことがある場合には共通コード化を考えます)。
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 251 252 253 254 255 256 257 258 259 260 |
# loop-type: date-only //============================== require "TIlib" require "Utility" require "TrendCheck" // ====================================== // デイトレサンプルをスイングに改良(cosisinのブログ) // ====================================== // http://blog.livedoor.jp/cosisin/archives/10669019.html // //【基本設定】 // 1) 株価の低い場合はランキングしない[50]万円以下 // 2) 売買代金の少ない場合はランキングしない(売買代金の[3]日間平均が[5]千万円以下の場合) // 3) 単利利用、通年 // 4) 全ての銘柄対象 // //【ランキング条件】 // 1) [期間高値(3)]が[終値(+10%)]より小さい // 2) 過去[3]日間に、[前日比(率)]が[-8]と[8]の[範囲外]の日が[1]日以上[存在しない] // 3) [東証一部 騰落レシオ(10)]が[90]より[大きい(同じ含む)] // //【買いルール】 // 1) [デイトレサンプルスイング改良版(順位)]が[10]より[小さい(同じ含む)] // 2) [翌日逆指値(終日)][終値(+5.00%)]で[買い]を仕掛ける // //【手仕舞いのルール】 // 1) [前日比(率)]が[0]より[小さい] // 2) [保有日数]が[3]より[大きい(同じ含む)] // //【優先順設定】 // 1) 移動平均乖離率(終値)(100) 小さい順 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 = 3 // 最大保有日数 $Interest = 1 // 無制限(0) / 単利(1) / 複利(2) $reverse = 0 // 購入順序 昇順(0) / 降順(1) $ratiodate = 10 // 騰落レシオ日数 //------------------------------------------------ $BB = [$code_num] //------------------------------------------------ Init() $__INIT__ = 1 end def Main(i) //================================================== // 条件(買条件, 売条件共通部分) //================================================== //まだ上場していない銘柄は株価データがないためnullが返る if (Index == null) return end if ! ($order[(int)Code]) $order[(int)Code] = i end if ! ($BB[i]) //Tilibのオブジェクト生成 $BB[i] = BB_new(100) //銘柄ごとのグローバル変数を初期化する $hold[i] = 0 return end //指標の計算を1日進める BB_next($BB[i]) // ここまで ======================================== if (1 == PricedataExistCheck(Close)) return end //================================================== // 保有してない→購入 //================================================== if (! $hold[i]) if ! ($BB[i] && Close && {-1}Close && {-2}Close && {-3}Close && High && {-1}High && {-2}High && $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 //================================================== // 売買(買い) //================================================== // 1) [期間高値(3)]が[終値(+10%)]より小さい // 2) 過去[3]日間に、[前日比(率)]が[-8]と[8]の[範囲外]の日が[1]日以上[存在しない] // 3) [東証一部 騰落レシオ(10)]が[90]より[大きい(同じ含む)] // 前日比(率) = (終値 - 1日前の終値) ÷ 1日前の終値 × 100 day1 = (Close - {-1}Close) / {-1}Close * 100 day2 = ({-1}Close - {-2}Close) / {-2}Close * 100 day3 = ({-2}Close - {-3}Close) / {-3}Close * 100 t = High if ({-1}High > High && {-1}High > {-2}High) t = {-1}High elsif ({-2}High > {-1}High && {-2}High > High) t = {-2}High end if (Close*1.1 > t && 8 > Abs(day1) && 8 > Abs(day2) && 8 > Abs(day3) && $ratio >= 90) 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) [前日比(率)]が[0]より[小さい] // 前日比(率) = (終値 - 1日前の終値) ÷ 1日前の終値 × 100 day1 = (Close - {-1}Close) / {-1}Close * 100 if (day1 < 0) PrintLog("前日比売り") $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) //PrintLog(Year + " " + Month +" " + Day + " i = " + i ) 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 (PricedataExistCheck(Close)) return end if ($sellflag[i]) Selling(i) //Print($set[i]) $sellflag[i] = 0 end end //==================== // 銘柄コードを変えながらMain関数,BuySell関数を実行 //==================== SortInit() // ソート初期化 UpDownRatio() // 騰落レシオ計算 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 >= 1) // 1) [デイトレサンプルスイング改良版(順位)]が[10]より[小さい(同じ含む)] $buyCnt = $buyCnt % 10 + 1 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 |
バックテスト結果
結果は前回とは大きく異なりました。
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 |
株価データ: 日足 銘柄リスト: 全銘柄 1998/01/05~2019/07/23における成績です。 ---------------------------------------- 全トレード数 2214 勝ちトレード数(勝率) 1152(52.03%) 負けトレード数(負率) 1062(47.97%) 全トレード平均利率 2.26% 勝ちトレード平均利率 9.52% 負けトレード平均損率 -5.61% 勝ちトレード最大利率 71.57% 負けトレード最大損率 -71.25% 全トレード平均期間 4.43 勝ちトレード平均期間 4.48 負けトレード平均期間 4.36 ---------------------------------------- 必要資金 ¥8,510,400 最大ポジション(簿価) ¥9,943,900 最大ポジション(時価) ¥11,802,000 純利益 ¥50,148,990 勝ちトレード総利益 ¥108,636,200 負けトレード総損失 -¥58,487,180 全トレード平均利益 ¥22,651 勝ちトレード平均利益 ¥94,302 負けトレード平均損失 -¥55,073 勝ちトレード最大利益 ¥730,300 負けトレード最大損失 -¥735,300 プロフィットファクター 1.86 最大ドローダウン(簿価) -¥3,324,024 最大ドローダウン(時価) -¥3,343,624 ---------------------------------------- 現在進行中のトレード数 0 ---------------------------------------- [年度別レポート] 年度 取引回数 運用損益 勝率 最大DD PF 2000年 115回 ¥2,026,900円 57.39% -32.25% 1.56倍 2001年 108回 ¥4,964,500円 65.74% -17.01% 4.01倍 2002年 86回 ¥3,490,400円 65.12% -23.91% 3.00倍 2003年 108回 ¥3,514,800円 55.56% -15.69% 2.67倍 2004年 101回 ¥2,629,300円 52.48% -17.31% 2.39倍 2005年 116回 ¥3,931,500円 61.21% -24.44% 3.33倍 2006年 124回 ¥3,369,300円 50.81% -22.63% 1.83倍 2007年 133回 ¥4,338,920円 51.88% -20.21% 2.26倍 2008年 133回 ¥6,709,242円 59.40% -37.55% 2.47倍 2009年 107回 ¥4,283,490円 52.34% -36.27% 2.38倍 2010年 86回 ¥1,371,700円 59.30% -20.00% 1.67倍 2011年 91回 ¥1,947,800円 63.74% -15.19% 2.03倍 2012年 132回 ¥2,014,990円 50.76% -33.92% 1.67倍 2013年 134回 ¥5,129,830円 61.19% -16.34% 3.26倍 2014年 125回 -¥144,490円 41.60% -29.51% 0.97倍 2015年 108回 ¥2,674,277円 50.00% -19.11% 1.95倍 2016年 110回 ¥472,725円 47.27% -22.26% 1.16倍 2017年 109回 -¥1,278,770円 33.03% -66.36% 0.68倍 2018年 107回 -¥435,924円 38.32% -39.76% 0.89倍 2019年 81回 -¥861,500円 46.91% -71.25% 0.71倍 |
利益曲線は次のとおりです。
寝ました。
cosisin氏は、2012年に手法を発表していますが、見事に検証されてない2014年頃からマイナスが増えています。
これが、いわゆるカーブフィッティングか!!
とはいえ、綺麗なカーブです。私が作った手法なら、こうはならないな・・・・。
ただ、何故かドローダウンが大きく、cosisin氏の結果とは大きく違います・・・・。
参考)cosisin氏の結果