システムトレードのバックテストツールに「システムトレードの達人」という有料ソフトが存在する。
ネットで口コミを見ると
システムトレードの達人 評判が悪く2020年内で販売終了
システムトレードの達人(斉藤正章)の評判は自作自演だった?
酷いな最近のネットの酷評サイトは……。
負けるのはツールが原因では無いだろう。
ツールはあくまでツール。
包丁が悪いから料理が上手に作れませんでした。
と言ってるようにしか思えない。
こいつらは、何に関しても文句を言って訪問者を増やす癌だわ。そしてアフィリエイトで自分は儲かる。
このサイトでは10年前のOSSである「Protra」を使ってバックテストを行っている。
機能も計算速度も「イザナミ」や「システムトレードの達人」に劣るが、これらの高級なソフトで実現しているストラテジーは実現できている事を証明してきた。
まぁプログラミングできるので自由に書けるしね。
この「システムトレードの達人」の販売会社が「フェアトレード株式会社」。
その代表取締役が西村剛氏だ。
彼は、定期的にシステムトレードに関する記事を書いている。
でも、毎回紹介してるストラテジーが、
斉藤正章氏の逆張り手法
これで10年間記事を書き続けるって、ある意味凄いな……。
この人、本当に自分でも検証したり考察してるのかな?
西村剛氏の関連サイトは軒並み更新が止まってるけど、今は一体何で稼いでいるんだろう?
西村剛氏の日経平均採用銘柄の急落を狙った逆張り戦略
上記の記事に珍しく違う手法が紹介されていたのでバックテストしてみた。
株価急落後すぐにリバウンドしていることが分かります。
大型株は急落後のリバウンドのペースが速いことが分かります。
という説明が書かれている。
【買い(エントリー)ルール】
- 日経平均採用銘柄の 終値が前日終値と比べて5.00%以上小さい
- 上記を満たした銘柄をシグナル当日の終値 -5.00%の指値で買い付け
【売りルール】
- [利益確定を表す条件式] 含み益が5.00%以上
- もしくは、[期限切れを表す条件式]エントリーした日から7日以上経過
- シグナルの翌日に成行売り注文
難しくはない。
「システムトレードの達人」のGUIは初めて見たけど、イザナミと比べると自由度も低いし確かに使いづらいかもなーー。
バックテスト結果
バックテストの計算時間は7分。
日経225採用銘柄だけだからね。
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 |
株価データ: 日足 銘柄リスト: 日経225採用銘柄 2000/01/05~2021/05/24における成績です。 ---------------------------------------- 全トレード数 1369 勝ちトレード数(勝率) 852(62.24%) 負けトレード数(負率) 517(37.76%) 全トレード平均利率 2.25% 勝ちトレード平均利率 7.36% 負けトレード平均損率 -6.16% 勝ちトレード最大利率 55.03% 負けトレード最大損率 -49.06% 全トレード平均期間 5.91 勝ちトレード平均期間 5.07 負けトレード平均期間 7.29 ---------------------------------------- 必要資金 ¥2,418,700 最大ポジション(簿価) ¥2,997,300 最大ポジション(時価) ¥3,332,100 純利益 ¥12,580,600 勝ちトレード総利益 ¥25,670,800 負けトレード総損失 -¥13,090,200 全トレード平均利益 ¥9,190 勝ちトレード平均利益 ¥30,130 負けトレード平均損失 -¥25,320 勝ちトレード最大利益 ¥186,000 負けトレード最大損失 -¥221,000 プロフィットファクター 1.96 最大ドローダウン(簿価) -¥616,400 最大ドローダウン(時価) -¥867,700 ---------------------------------------- 現在進行中のトレード数 0 ---------------------------------------- 平均年利 23.64% 平均年利(直近5年) 4.98% 最大連勝 15回 最大連敗 7回 ---------------------------------------- [年度別レポート] 年度 取引回数 運用損益 年利 勝率 PF 最大DD 2021年 13回 ¥100,400円 4.15% 69.23% 2.97倍 -9.12% 2020年 65回 ¥486,000円 20.09% 60.00% 1.66倍 -17.70% 2019年 39回 -¥57,700円 -2.39% 35.90% 0.87倍 -12.15% 2018年 40回 ¥116,400円 4.81% 57.50% 1.30倍 -11.74% 2017年 6回 -¥43,300円 -1.79% 33.33% 0.32倍 -6.56% 2016年 51回 ¥231,600円 9.58% 62.75% 1.53倍 -25.78% 2015年 30回 ¥407,800円 16.86% 76.67% 8.46倍 -5.85% 2014年 18回 ¥253,800円 10.49% 72.22% 4.92倍 -5.16% 2013年 58回 ¥742,600円 30.70% 74.14% 4.03倍 -9.14% 2012年 39回 ¥297,200円 12.29% 66.67% 1.90倍 -15.76% 2011年 57回 -¥486,800円 -20.13% 47.37% 0.64倍 -49.06% 2010年 24回 ¥254,200円 10.51% 70.83% 3.01倍 -7.42% 2009年 101回 ¥962,900円 39.81% 62.38% 2.19倍 -29.07% 2008年 179回 ¥1,468,700円 60.72% 55.87% 1.80倍 -28.77% 2007年 58回 ¥217,100円 8.98% 50.00% 1.43倍 -21.09% 2006年 63回 ¥1,128,300円 46.65% 73.02% 4.14倍 -17.33% 2005年 10回 ¥257,200円 10.63% 90.00% 36.72倍 -1.71% 2004年 47回 ¥669,500円 27.68% 70.21% 3.25倍 -11.24% 2003年 85回 ¥1,937,000円 80.08% 76.47% 4.96倍 -15.98% 2002年 97回 ¥1,411,900円 58.37% 72.16% 2.96倍 -24.21% 2001年 132回 ¥1,235,100円 51.06% 65.15% 1.89倍 -27.93% 2000年 157回 ¥990,700円 40.96% 57.32% 1.41倍 -28.57% |
利益曲線は次の通り。
おお!
ほぼ単調増加するじゃん。
「システムトレードの達人」の達人モード「運用資産の推移」画面は次のようになるらしい。
結果は似ていると言えば似ている気はする。
ただ、2011年はProtraでは負けているけど「システムトレードの達人」では勝っているね。
小数点の扱いや「手仕舞い」の部分で微妙な差異が生まれている可能性はある。
まとめ
複雑な手法ばかりに目が行きがちだけど、シンプルな手法でも淡々と利益を得ているものもある。
ただ急落に対する対策が無いので、このまま利用できるのはよほどの強靭な心の持ち主だろう。
何年も同じ手法を紹介できるということは、それだけ普遍的な手法であるということ。
改めて研究の余地があるかもしれない。
ソースコード
バックテストには無料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 |
# loop-type: date-only //============================== require "TIlib" require "Utility" require "TrendCheck" // ====================================== // 日経平均採用銘柄の急落を狙った逆張り戦略 // ====================================== // 【買い(エントリー)ルール】 // // 日経平均採用銘柄の 終値が前日終値と比べて5.00%以上小さい // ⇒上記を満たした銘柄をシグナル当日の終値 -5.00%の指値で買い付け // // 【売りルール】 // // [利益確定を表す条件式]含み益が5.00%以上 // [期限切れを表す条件式]エントリーした日から7日以上経過 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 = 5 // 最大保有日数 $shortSelling = 0 // 空売り戦略 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 ! (Close && {-1}Close && Volume) return end //================================================== // 売買(買い) //================================================== // 日経平均採用銘柄の 終値が前日終値と比べて5.00%以上小さい flag1 = Close <= {-1}Close * 0.95 if (flag1) // シグナル当日の終値 -5.00%の指値で買い付け $buyflag[i][0] = Close * 0.95 $buyflag[i][1] = 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 //================================================== // 売買(売り) //================================================== // 1) 利食い:含み益が5%以上 if (Close >= 1.05 * $buy[i]) PrintLog("利食い") $sellflag[i] = 1 $set[i] = 0 // 2) 損切り:7日経過(営業日5日で近似) elsif ($set[i] >= $MaxHoldDay) $sellflag[i] = 1 $set[i] = 0 end end end //================================================== // 翌日指値チェック //================================================== def CheckHighLow2(t) if ! ({1}High > t && t > {1}Low) return 0 end if (t > {1}Open) return {1}Open else return t end end //================================================== // 買い(指値) //================================================== def Buying2(i) if (HasPricedata({1}Open)) t = 0 if ($buyflag[i][0]) PrintLog($buyflag[i][0] + "円で購入予定" + _ " 始値(" + {1}Open + ")" + _ " 高値(" + {1}High + ")" + _ " 安値(" + {1}Low + ")") t = CheckHighLow2($buyflag[i][0]) end if (t) BuyingLimitedPrice(i, 1, t) end end 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]) Selling(i) $sellflag[i] = 0 $buyflag[i][2] = 0 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($buyCnt, 0) while i < $buyCnt {sortList[i]}SortBuy() i = i + 1 end end //---------------------------------------------- i = -1 while (i + 1 < $code_num) i = i + 1 {codes[i]}Sell_(i) end |