今週、コロナの拡大に伴い東京都・小池知事が「酒類提供の原則停止」を国に再度要望した。
東京都によりますと、要望は西村経済再生担当大臣と田村厚生労働大臣あてに、きょう提出されました。現在の基本的対処方針では「一定の要件を満たせば可能」としている飲食店での酒類の提供について「原則停止」とし、より強力な措置内容にすることを求めています。
酒類提供は先月の6月20日に「2人以下」「滞在時間90分厳守」だけど解禁されたばかりなのにさ。
因みに炎上YouTuberの
「やってみた」
ネタのようだが、3人で、都内の鳥貴族に行ってみた。
案の定、店長がでてきて「入店お断り」との事で、2対1に分かれて座る事も原則禁止だってさ。
結局1名は遠く離れた席に分かれてしまい、会話も原則禁止、会計も完全に別。
要するに
「一人飲み」
となった。
管理体制がしっかりしてた、さすがだ!
因みに、個人経営の居酒屋は適当だったけどーーー。
前回、6,000PV/日を達成した際に、バックテスト記事も公開予定だった。
また閑古鳥が無くサイトに戻ってしまったけど、気にせずマイペースで進めていくか~。
バックテストのネタは既に枯渇してるけどさー。
因みに、この記事書いたのは5月の終わり……。
以前「ブレイクアウト」のストラテジーを実装したがイマイチだった。
だったら、cosisin氏のブレイクアウトの手法をバックテストしてみよう。
今回は2012年11月10日のcosisin氏の日記。
前日比を使わずに、出来高上昇率をメインにしてブレイクアウトストラテジーを作りました。ナノキャリアの発展版です
cosisin氏自身が作ったストラテジーの公開は多くあるが、大半が2017年頃から寝る。
ソート機能を一新したので、利益曲線の結果が良い/悪いに関係なく色々と試してみる。
ノー前日比ブレイクアウト手法の有効性検証
イザナミの画面を見る限り、手法は次のようになっている。
【基本設定】
- 1) 株価の低い場合はランキングしない[50]円以下
- 2) 売買代金の少ない場合はランキングしない(売買代金の[5]日間平均が[5]千万円以下の場合)
- 3) 単利利用、通年
- 4) 全ての銘柄対象
【ランキング条件(デイトレ逆張りサンプル)】
- 1) [出来高上昇率]が[50]より[小さい]
- 2) [期間高値(高値)(2)]が[期間安値(安値)(2)(+1.00%)]より[大きい(同じものを含む)]
- 3) [終値]が[期間高値(高値)(5)(1日前)]より[小さい]
【仕掛けのルール】
- 1) [出来高(順位)]が[30]より[小さい(同じ含む)]
- 2) [翌日逆指値(終日)][期間高値(高値)(6)(+1Tick)]で[買い]を仕掛ける
【手仕舞いのルール】
- 1) [Stop高(高値)]が[1]と[同じ]
- 1.1) [当日指定値][高値]で手仕舞いする
- 2) [保有日数]が[1]より[大きい(同じ含む)]
- 2.1) [当日引け]で手仕舞いする
【優先順設定】
- 1) 移動平均乖離率(終値)(75) 小さい順
知らない新たな指標は「出来高上昇率」。
これはイザナミ独自の指標だ。
当日出来高が前日出来高に対してどれくらい上昇しているかを測る指標のこと。
- 当日出来高と前日出来高が同じであれば、0%となります。
- 当日出来高が前日出来高より大きければ、+n%となります。
- 当日出来高が前日出来高より小さければ、-n%となります。
出来高が急増する銘柄は、何らかのニュースがある場合が多いので、出来高は重要度の高い指標といえます。
うん、難しくはないな。
でもProtraにはこのような指標がデフォルトでは存在しないし思いつかない。
バックテスト結果
計算時間は1時間53分……。まぁ…早いかな。
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 |
株価データ: 日足 銘柄リスト: 全銘柄 2000/01/06~2021/05/27における成績です。 ---------------------------------------- 全トレード数 7939 勝ちトレード数(勝率) 4037(50.85%) 負けトレード数(負率) 3902(49.15%) 全トレード平均利率 0.12% 勝ちトレード平均利率 1.11% 負けトレード平均損率 -0.90% 勝ちトレード最大利率 26.52% 負けトレード最大損率 -15.31% 全トレード平均期間 1.50 勝ちトレード平均期間 1.52 負けトレード平均期間 1.48 ---------------------------------------- 必要資金 ¥1,929,000 最大ポジション(簿価) ¥2,971,070 最大ポジション(時価) ¥3,045,000 純利益 ¥3,881,753 勝ちトレード総利益 ¥18,739,250 負けトレード総損失 -¥14,857,500 全トレード平均利益 ¥489 勝ちトレード平均利益 ¥4,642 負けトレード平均損失 -¥3,808 勝ちトレード最大利益 ¥122,000 負けトレード最大損失 -¥90,000 プロフィットファクター 1.26 最大ドローダウン(簿価) -¥1,045,512 最大ドローダウン(時価) -¥1,045,512 ---------------------------------------- 現在進行中のトレード数 4 ---------------------------------------- 平均年利 9.15% 平均年利(直近5年) -6.37% 最大連勝 20回 最大連敗 13回 ---------------------------------------- [年度別レポート] 年度 取引回数 運用損益 年利 勝率 PF 最大DD 2021年 171回 -¥90,935円 -4.71% 46.78% 0.70倍 -3.52% 2020年 390回 -¥339,565円 -17.60% 46.15% 0.62倍 -7.69% 2019年 436回 -¥9,270円 -0.48% 55.28% 0.98倍 -2.79% 2018年 424回 -¥213,260円 -11.06% 46.70% 0.62倍 -3.22% 2017年 389回 ¥38,490円 2.00% 54.24% 1.09倍 -2.80% 2016年 379回 -¥46,525円 -2.41% 49.60% 0.93倍 -6.79% 2015年 374回 -¥31,820円 -1.65% 50.53% 0.95倍 -3.77% 2014年 438回 ¥33,085円 1.72% 56.62% 1.06倍 -7.40% 2013年 379回 ¥91,300円 4.73% 58.31% 1.12倍 -9.55% 2012年 423回 ¥78,991円 4.09% 59.10% 1.13倍 -4.68% 2011年 340回 -¥267,484円 -13.87% 51.76% 0.68倍 -15.31% 2010年 429回 -¥98,592円 -5.11% 52.45% 0.89倍 -5.11% 2009年 377回 ¥199,491円 10.34% 52.52% 1.22倍 -5.49% 2008年 304回 -¥305,134円 -15.82% 50.33% 0.76倍 -7.54% 2007年 328回 ¥605,304円 31.38% 65.24% 2.02倍 -6.36% 2006年 394回 ¥284,331円 14.74% 63.20% 1.38倍 -10.53% 2005年 366回 ¥834,760円 43.27% 72.95% 3.42倍 -10.66% 2004年 363回 ¥635,571円 32.95% 61.43% 2.08倍 -4.99% 2003年 404回 ¥914,090円 47.39% 60.15% 2.24倍 -5.95% 2002年 311回 ¥637,725円 33.06% 65.59% 2.07倍 -6.47% 2001年 284回 ¥636,300円 32.99% 63.38% 1.88倍 -7.54% 2000年 236回 ¥294,900円 15.29% 58.47% 1.42倍 -8.00% |
利益曲線は次のとおり。
結果も全くドキドキしないなーーー。
いつもどおり利益曲線は寝てしまう。
ファンダメンタルズの長期保有の方が優れているのかな……。
まとめ
今まで何度も実装しているcosisin氏の手法なので難しくはない。
再掲だが、バックテストのネタ不足になってきたので、試して欲しい手法やストラテジーがあればやってみる。日足になるけどね。
ソースコード
バックテストには無料OSSの「Protra」を利用した。
TIlib、Utility、TrendCheck、TOPIXライブラリは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 251 252 253 |
# loop-type: date-only //============================== require "TIlib" require "Utility" require "TrendCheck" // ====================================== // cosisinのノー前日比ブレイクアウト手法 // ====================================== // //【基本設定】 //1) 株価の低い場合はランキングしない[50]円以下 //2) 売買代金の少ない場合はランキングしない(売買代金の[5]日間平均が[5]千万円以下の場合) //3) 単利利用、通年 //4) 全ての銘柄対象 // //【ランキング条件(デイトレ逆張りサンプル)】 //1) [出来高上昇率]が[50]より[小さい] //2) [期間高値(高値)(2)]が[期間安値(安値)(2)(+1.00%)]より[大きい(同じものを含む)] //3) [終値]が[期間高値(高値)(5)(1日前)]より[小さい] // //【仕掛けのルール】 //1) [出来高(順位)]が[30]より[小さい(同じ含む)] //2) [翌日逆指値(終日)][期間高値(高値)(6)(+1Tick)]で[買い]を仕掛ける // //【手仕舞いのルール】 //1) [Stop高(高値)]が[1]と[同じ] // 1.1) [当日指定値][高値]で手仕舞いする //2) [保有日数]が[1]より[大きい(同じ含む)] // 2.1) [当日引け]で手仕舞いする // //【優先順設定】 //1) 移動平均乖離率(終値)(75) 小さい順 codes = CodeList if ($code_num && $code_num != Length(codes)) Print("前回と異なる銘柄リストでは実行できません。") Dummy end $code_num = Length(codes) //グローバル変数を初期化 if (!$__INIT__) $budgetIni = 3000000 $buyUnit = 500000 // 1回の購入資金 (50万円) $MaxHoldDay = 0 // 最大保有日数 $shortSelling = 0 // 空売り戦略 Yes(1)/No(0) $Interest = 1 // 無制限(0) / 単利(1) / 複利(2) $reverse = 0 // 購入順序 昇順(0) / 降順(1) $udcount = 0 // 騰落レシオ利用数 Init() //------------------------------------------------ $HL2 = [$code_num] $HL5 = [$code_num] $HL6 = [$code_num] //------------------------------------------------ InitDone() // 騰落レシオ初期化 $__INIT__ = 1 end def Main(i) //================================================== // 条件(買条件, 売条件共通部分) //================================================== //まだ上場していない銘柄は株価データがないためnullが返る if (Index == null) return end if ($order[(int)Code] == -1) $order[(int)Code] = i end if ! ($HL2[i]) //Tilibのオブジェクト生成 $HL2[i] = HighLow_new(2) $HL5[i] = HighLow_new(5) $HL6[i] = HighLow_new(6) //銘柄ごとのグローバル変数を初期化する $hold[i] = 0 return end //指標の計算を1日進める HighLow_next($HL2[i]) HighLow_next($HL5[i]) HighLow_next($HL6[i]) //================================================== // 保有してない→購入 //================================================== if (! $hold[i]) if ! (Close && {-1}Close && {-2}Close && {-3}Close && {-4}Close && _ Volume && {-1}Volume && {-2}Volume && {-3}Volume && {-4}Volume) return end if ! ($HL2[i] && $HL5[i] && $HL6[i]) return end high2 = HighLow_high($HL2[i]) low2 = HighLow_low($HL2[i]) high5 = {-1}HighLow_high($HL5[i]) high6 = {-1}HighLow_high($HL6[i]) if ! (high2 && low2 && high5 && high6) return end //================================================== // 選定 //================================================== // 1) 株価の低い場合はランキングしない[50]円以下 if (Close <= 50) return end // 2) 売買代金の少ない場合はランキングしない(売買代金の[5]日間平均が[5]千万円以下の場合) if ((SalesValue() + {-1}SalesValue() + {-2}SalesValue() + {-3}SalesValue() + _ {-4}SalesValue())/3 <= 50000) return end //================================================== // 売買(買い) //================================================== // 1) [出来高上昇率]が[50]より[小さい] flag1 = 50 > {-1}Volume / Volume // 2) [期間高値(高値)(2)]が[期間安値(安値)(2)(+1.00%)]より[大きい(同じものを含む)] flag2 = high2 >= low2 * 1.01 // 3) [終値]が[期間高値(高値)(5)(1日前)]より[小さい] flag3 = Close < high5 if (flag1 && flag2 && flag3) $buyflag[i][0] = Yobine(high6, 0)// [期間高値(高値)(6)(+1Tick)] $buyflag[i][1] = Volume // 1) [出来高(順位)] $buyflag[i][2] = 1 // 売却額 $buyCnt = $buyCnt + 1 end //================================================== // 保有している→売却 //================================================== elsif ($hold[i]) if ($set[i] < 1) $set[i] = 1 return end $set[i] = $set[i] + 1 //================================================== // 売買(売り) //================================================== if ($set[i] >= $MaxHoldDay) PrintLog("利益確定") $sellflag[i] = 1 $set[i] = 0 end end end //================================================== // 翌日逆指値チェック //================================================== def CheckHighLow2(t) if ! ({1}High > t && t > {1}Low) return 0 end if ({1}Open > t) return {1}Open else return t end end //================================================== // 買い // 2) [翌日逆指値(終日)][期間高値(高値)(6)(+1Tick)]で[買い]を仕掛ける //================================================== def Buying2(i) if (HasPricedata({1}Open) && HasPricedata(Close)) t = 0 if ($buyflag[i][0]) t = CheckHighLow2($buyflag[i][0]) end if (t) BuyingLimitedPrice(i, 1, t) end end end //==================== // 買い処理 //==================== def SortBuy() PrintLog("購入予定") if ! (HasPricedata(Close)) return end $long = 0 $long = Num($buyUnit, Close) codeset = $order[(int)Code] Buying2(codeset) end //==================== // 売り処理(デイトレ模倣) //==================== def Sell_(i) if (HasPricedata(Open)) if ($sellflag[i]) if ({-1}Close) SellingLimitedPrice(i, 0, {-1}Close) else PrintLog("売れない") end $sellflag[i] = 0 $buyflag[i][2] = 0 end // 使用した$buyflag 配列を初期化 if ($buyflag[i][0]) $buyflag[i][0] = 0 $buyflag[i][1] = 0 end end end //==================== // 銘柄コードを変えながらMain関数,BuySell関数を実行 //==================== Print("-------------------------------------------------") Print("日付 = "+ Year + "/" + Month + "/" + Day) $buyCnt = 0 // 購入数初期化 i = -1 while (i + 1 < $code_num) i = i + 1 {codes[i]}Main(i) end i = 0 if ($buyCnt) // 1) [出来高(順位)]が[30]より[小さい(同じ含む)] sortList = SelectionSort(30, 0) cnt = $buyCnt if ($buyCnt > 30) cnt = 30 end while i < cnt {sortList[i]}SortBuy() i = i + 1 end end //---------------------------------------------- i = -1 while (i + 1 < $code_num) i = i + 1 {codes[i]}Sell_(i) end |