最近のシステムトレードの定番ツールは「イザナミ」……
ではなく、クラウド型のチャートツール「TradingView(トレーディングビュー)」
あらゆる金融商品・銘柄を網羅しており作ったストラテジーをビットコインや為替、FXなどに適用してバックテスト、自動売買までがが簡単にできる。
無料利用には制限があるものの、分足まで扱える。
FXユーザはテクニカル分析が大好きなので、ネット上に公開されている情報が非常に多いのが特徴だ。
このサイトの訪問者の中にも、TradingView用にストラテジー拝借が目的の人もいることだろう。
QuantX……とは一体何だったのだろうか。
昔は多くのシステムトレーダーが手法を公開していたが、今ではサイトの閉鎖が相次いでいる。
既に閉鎖している事実が
システムトレードでは勝てない
事を証明している気がするが、私は今後も淡々とバックテスト結果を公開していく予定。
でも、多くのサイト閉鎖が原因でストラテジーが公開されておらずネタが尽きてきた……。
もし、検証して欲しい手法があれば喜んでやってみる。
ネタが尽きてきたので初心に戻って簡単な手法を確認してみる。
前日の高値を越えたら買い、翌日寄り付きで決済、これをバックテストする方法はありますか?
回答数:1 閲覧数:80 共感した:0
Yahoo掲示板「教えて! お金の先生」に上記のような投稿を見つけた。2015年び投稿だ。
シェアウェアの「株羅針盤」の開発者「スペース西」氏が返答しているが、とてもトンチンカンだ。
6年経過してしまったが、OSSの「Protra」を使ってバックテストを試みる。
前日の高値を越えたら買い、翌日寄り付きで決済の期待値の検証
【仕掛け】
- 当日の始値が、前日の高値を越えたら買い
【手仕舞い】
- 翌日寄り付きで手仕舞い
凄く実装は簡単そうだね。
バックテスト結果
計算時間は東証一部で7分。過去最速。
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 |
株価データ: 日足 銘柄リスト: 東証1部 2000/01/04~2021/05/26における成績です。 ---------------------------------------- 全トレード数 11637 勝ちトレード数(勝率) 3479(29.90%) 負けトレード数(負率) 8158(70.10%) 全トレード平均利率 -0.44% 勝ちトレード平均利率 1.38% 負けトレード平均損率 -1.22% 勝ちトレード最大利率 19.79% 負けトレード最大損率 -22.75% 全トレード平均期間 1.49 勝ちトレード平均期間 1.55 負けトレード平均期間 1.46 ---------------------------------------- 必要資金 ¥24,351,150 最大ポジション(簿価) ¥2,994,000 最大ポジション(時価) ¥3,117,000 純利益 -¥21,799,450 勝ちトレード総利益 ¥20,349,450 負けトレード総損失 -¥42,148,900 全トレード平均利益 -¥1,873 勝ちトレード平均利益 ¥5,849 負けトレード平均損失 -¥5,167 勝ちトレード最大利益 ¥96,000 負けトレード最大損失 -¥110,400 プロフィットファクター 0.48 最大ドローダウン(簿価) -¥21,799,450 最大ドローダウン(時価) -¥21,817,950 ---------------------------------------- 現在進行中のトレード数 6 ---------------------------------------- 平均年利 -4.07% 平均年利(直近5年) -3.68% 最大連勝 9回 最大連敗 23回 ---------------------------------------- [年度別レポート] 年度 取引回数 運用損益 年利 勝率 PF 最大DD 2021年 198回 -¥285,200円 -1.17% 39.90% 0.38倍 -4.43% 2020年 489回 -¥1,415,700円 -5.81% 32.92% 0.34倍 -16.50% 2019年 499回 -¥894,400円 -3.67% 37.88% 0.37倍 -6.19% 2018年 510回 -¥1,114,950円 -4.58% 33.73% 0.34倍 -7.06% 2017年 579回 -¥772,420円 -3.17% 36.79% 0.34倍 -3.80% 2016年 570回 -¥1,111,020円 -4.56% 41.05% 0.39倍 -9.19% 2015年 588回 -¥1,186,280円 -4.87% 38.61% 0.30倍 -18.01% 2014年 560回 -¥883,355円 -3.63% 43.93% 0.42倍 -7.47% 2013年 535回 -¥690,230円 -2.83% 47.29% 0.57倍 -10.15% 2012年 520回 -¥575,012円 -2.36% 53.65% 0.63倍 -8.46% 2011年 516回 -¥787,074円 -3.23% 55.62% 0.53倍 -22.75% 2010年 518回 -¥1,096,550円 -4.50% 49.03% 0.43倍 -8.09% 2009年 519回 -¥1,010,600円 -4.15% 53.95% 0.54倍 -14.66% 2008年 551回 -¥2,064,790円 -8.48% 48.46% 0.40倍 -19.49% 2007年 574回 -¥918,770円 -3.77% 47.04% 0.51倍 -11.75% 2006年 574回 -¥1,065,730円 -4.38% 46.52% 0.45倍 -6.97% 2005年 549回 -¥458,350円 -1.88% 50.27% 0.69倍 -8.70% 2004年 547回 -¥587,810円 -2.41% 53.02% 0.64倍 -12.50% 2003年 540回 -¥922,750円 -3.79% 52.78% 0.55倍 -7.47% 2002年 546回 -¥1,026,490円 -4.22% 52.56% 0.61倍 -9.52% 2001年 585回 -¥866,470円 -3.56% 54.02% 0.64倍 -14.52% 2000年 570回 -¥2,065,500円 -8.48% 49.82% 0.46倍 -20.00% |
利益曲線は次のとおり。
まさかの単調減少。
だったら売りの戦略にすりゃ良いじゃん。
売りのルールに変えてみる
今度は借貸銘柄だけでバックテスト。計算時間は6分。
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 |
株価データ: 日足 銘柄リスト: 借貸(東一)20190805 2000/01/04~2021/05/26における成績です。 ---------------------------------------- 全トレード数 11784 勝ちトレード数(勝率) 6229(52.86%) 負けトレード数(負率) 5555(47.14%) 全トレード平均利率 0.45% 勝ちトレード平均利率 1.62% 負けトレード平均損率 -0.86% 勝ちトレード最大利率 23.55% 負けトレード最大損率 -19.79% 全トレード平均期間 1.49 勝ちトレード平均期間 1.47 負けトレード平均期間 1.51 ---------------------------------------- 必要資金 ¥2,969,500 最大ポジション(簿価) ¥2,969,500 最大ポジション(時価) ¥2,938,100 純利益 ¥22,484,200 勝ちトレード総利益 ¥42,621,700 負けトレード総損失 -¥20,137,500 全トレード平均利益 ¥1,908 勝ちトレード平均利益 ¥6,842 負けトレード平均損失 -¥3,625 勝ちトレード最大利益 ¥114,000 負けトレード最大損失 -¥76,000 プロフィットファクター 2.12 最大ドローダウン(簿価) -¥198,500 最大ドローダウン(時価) -¥203,500 ---------------------------------------- 現在進行中のトレード数 6 ---------------------------------------- 平均年利 34.42% 平均年利(直近5年) 38.95% 最大連勝 19回 最大連敗 19回 ---------------------------------------- [年度別レポート] 年度 取引回数 運用損益 年利 勝率 PF 最大DD 2021年 229回 ¥474,500円 15.98% 69.43% 3.99倍 -3.22% 2020年 565回 ¥1,598,100円 53.82% 67.96% 2.72倍 -15.70% 2019年 559回 ¥1,173,500円 39.52% 69.41% 3.34倍 -6.04% 2018年 566回 ¥1,565,600円 52.72% 73.85% 3.98倍 -9.38% 2017年 577回 ¥971,700円 32.72% 75.04% 3.86倍 -6.00% 2016年 559回 ¥1,106,800円 37.27% 70.13% 2.80倍 -6.21% 2015年 579回 ¥898,200円 30.25% 67.88% 2.35倍 -10.81% 2014年 552回 ¥810,000円 27.28% 69.02% 2.32倍 -5.82% 2013年 528回 ¥554,900円 18.69% 66.10% 1.57倍 -9.00% 2012年 518回 ¥471,500円 15.88% 67.76% 1.52倍 -8.63% 2011年 504回 ¥712,100円 23.98% 72.02% 1.80倍 -7.85% 2010年 510回 ¥852,500円 28.71% 72.94% 1.98倍 -10.20% 2009年 517回 ¥841,000円 28.32% 67.12% 1.75倍 -7.85% 2008年 546回 ¥2,057,800円 69.30% 69.05% 2.71倍 -9.61% 2007年 566回 ¥1,020,200円 34.36% 71.38% 2.05倍 -17.85% 2006年 576回 ¥956,900円 32.22% 69.97% 1.96倍 -8.21% 2005年 549回 ¥353,400円 11.90% 65.21% 1.32倍 -14.86% 2004年 542回 ¥690,000円 23.24% 71.40% 1.79倍 -11.74% 2003年 538回 ¥694,500円 23.39% 70.82% 1.60倍 -15.09% 2002年 547回 ¥1,198,400円 40.36% 72.03% 1.82倍 -12.50% 2001年 582回 ¥1,263,200円 42.54% 70.79% 1.82倍 -11.48% 2000年 575回 ¥2,219,400円 74.74% 75.13% 2.31倍 -19.79% |
利益曲線は次のとおり。
おー、単調増加!!
こんな簡単な手法で良かったじゃん。RSIとかMACDとか何だよ糞。
まとめ
単調増加だが「ぬか喜び」はできない。
実際に売買するには「前日高値による寄付き指値注文」になる。これは可能。
さらに、前日までの銘柄選定が全く無いないので、2000件以上の銘柄を9時の寄り付けからチェックする必要がある。
これは現実的な方法では無いので、本気で利用するには銘柄選定の指標追加が必要だろう。
ソースコード
バックテストには無料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 |
# loop-type: date-only //============================== require "TIlib" require "Utility" require "TrendCheck" // ====================================== // 前日の高値を越えたら売り、翌日寄り付きで買い戻し // ====================================== 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 = 1 // 空売り戦略 Yes(1)/No(0) $Interest = 1 // 無制限(0) / 単利(1) / 複利(2) $reverse = 0 // 購入順序 昇順(0) / 降順(1) $udcount = 0 // 騰落レシオ利用数 Init() //------------------------------------------------ //------------------------------------------------ InitDone() // 騰落レシオ初期化 $__INIT__ = 1 end def Main(i) //================================================== // 条件(買条件, 売条件共通部分) //================================================== //まだ上場していない銘柄は株価データがないためnullが返る if (Index == null) return end if ($order[(int)Code] == -1) $order[(int)Code] = i //銘柄ごとのグローバル変数を初期化する $hold[i] = 0 end //================================================== // 保有してない→購入 //================================================== if (! $hold[i]) if ! ({-1}High && Open) return end //================================================== // 売買(買い) //================================================== flag = Open > {-1}High if (flag) $buyflag[i][0] = 1 $buyflag[i][1] = Volume $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 Buying2(i) BuyingLimitedPrice(i, 0, Open) end //==================== // 買い処理([当日引け]で[売り]を仕掛ける) //==================== def SortBuy() if ! (HasPricedata(Close)) return end $long = 0 $long = Num($buyUnit, Close) codeset = $order[(int)Code] Buying2(codeset) end //==================== // 売り処理( [当日引け]で手仕舞いする) //==================== def Sell_(i) if ($sellflag[i]) if (HasPricedata({-1}Open)) SellingLimitedPrice(i, -1, {-1}Open) $sellflag[i] = 0 $buyflag[i][2] = 0 else SellingLimitedPrice(i, -1, {-2}Close) $sellflag[i] = 0 $buyflag[i][2] = 0 end end // 使用した$buyflag 配列を初期化 if ($buyflag[i][0]) $buyflag[i][0] = 0 $buyflag[i][1] = 0 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) sortList = SelectionSort(10, 0) cnt = $buyCnt if ($buyCnt > 10) cnt = 10 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 |