世の中では「米国株を積立投信で長期投資」が投資の主流。
だけど今年に入り仮想通貨は大暴落し、株価は下落し、新興企業は成長への取り組みを縮小している。
そんな状況では長期投資は資金効率の観点ではデメリットにしかならず、今のような相場の大暴落では
耐える
以外の対策がない。
© 吾峠呼世晴/鬼滅の刃/集英社
暴落時こそ買い相場にも関わらず……。
それが嫌なら個別株投資の研究の手を止めてはいけない。
人生をかけて研究する価値はある。
なぜなら株取引はギャンブルと違い期待値はプラスだから。
投資・ギャンブル | 期待値 |
---|---|
競輪、競艇 | 0.75 |
中央・地方競馬 | 0.70~0.80 |
オートレース | 0.70 |
パチンコ、スロット | 0.80~0.95 |
宝くじ | 0.45 |
スポーツくじ | 0.50 |
ルーレット | 0.95 |
ブラックジャック | 0.96~1.02 |
FX | 0.98 |
株(短期売買) | 0.98 |
株(長期売買) | 1.05 |
研究結果が出る前に人生が終わるかもしれないけどね。
なお市場にはプロも含む、あなたよりも知識や経験やスキルや良い環境にいる
「相手」
がいるということを忘れてはいけない。
個別株投資に「初心者向け」なんてものは存在しない。
高掴みしないトレード(RCIとEMA)の期待値検証
「揉み合い時は特に威力発揮」として、ちぇりおう氏がnoteに100円の有料記事を書いていた。
テクニカルを主に経済情勢を取り入れながらチャート分析をされている方らしい。
無料で見える範囲しか確認してないけど、次のように書いてある。
1)RCIが −70%を下回ったらチェック
2)RCIが 下から上へ突き抜けたら準備(RCI:9)
3)RCIが 上へ抜けたら、5EMAと20EMAを見る
4)5EMAが20EMAをGC(ゴールデンクロス)したら買う
5)利確は、RCIが 90〜100%で張り付いている間に売る!
ここの売タイミングは難しいですね、好調の時は張り付きが続きます
深追いしないで(頭と尻尾はくれてやれ)トレンドラインを引いたり
平均足でみたり、自分でこの辺いいかな、と思う時に売って良いです【補足:重要】
5EMAが20EMAの下にあり下降トレンドの時は、RCIが下から上がってきても触らない(全体的に弱いからです)
上記を踏まえて次のようなルールで、バックテストをしてみよう。
特に期待はしていないが、ネタも枯渇しているからね。
【仕掛けのルール】
- 1) 前日のRCI(9)が-70%を下回っている場合
- 2) RCI(9)が下から上へ突き抜けた場合
- 3) EMA(5)がEMA(20)をGC(ゴールデンクロス)した場合
【手仕舞いのルール】
- 1) RCIが 90%~100%で張り付いている場合
- 2) 利食い:5%以上の含み益が出た場合
- 3) 損切り:5%以上の含み損が出た場合
- 4) 損切り:10日以上持っていた場合
特に実装的に難しい部分は無い。
バックテスト結果
プライム市場だけでバックテストに約1時間かかった。
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 |
株価データ: 日足 銘柄リスト: プライム市場20220403 2000/01/12~2022/06/16における成績です。 ---------------------------------------- 全トレード数 4524 勝ちトレード数(勝率) 2254(49.82%) 負けトレード数(負率) 2270(50.18%) 全トレード平均利率 0.18% 勝ちトレード平均利率 4.66% 負けトレード平均損率 -4.26% 勝ちトレード最大利率 70.81% 負けトレード最大損率 -23.16% 全トレード平均期間 7.90 勝ちトレード平均期間 7.61 負けトレード平均期間 8.19 ---------------------------------------- 必要資金 ¥3,740,400 最大ポジション(簿価) ¥3,405,800 最大ポジション(時価) ¥3,484,200 純利益 ¥3,508,100 勝ちトレード総利益 ¥46,392,500 負けトレード総損失 -¥42,884,400 全トレード平均利益 ¥775 勝ちトレード平均利益 ¥20,582 負けトレード平均損失 -¥18,892 勝ちトレード最大利益 ¥342,000 負けトレード最大損失 -¥139,400 プロフィットファクター 1.08 最大ドローダウン(簿価) -¥1,955,000 最大ドローダウン(時価) -¥1,960,800 ---------------------------------------- 現在進行中のトレード数 7 ---------------------------------------- 平均年利 4.08% 平均年利(直近5年) 1.51% 最大連勝 14回 最大連敗 15回 ---------------------------------------- [年度別レポート] 年度 取引回数 運用損益 年利 勝率 PF 最大DD 2022年 79回 ¥159,800円 4.27% 50.63% 1.24倍 -11.78% 2021年 220回 ¥149,700円 4.00% 50.00% 1.09倍 -11.05% 2020年 208回 ¥201,100円 5.38% 47.60% 1.10倍 -12.31% 2019年 217回 ¥163,000円 4.36% 52.53% 1.09倍 -16.31% 2018年 210回 -¥391,600円 -10.47% 47.62% 0.83倍 -15.68% 2017年 212回 ¥1,326,500円 35.46% 62.26% 2.28倍 -8.08% 2016年 198回 -¥110,500円 -2.95% 52.02% 0.94倍 -15.57% 2015年 207回 ¥219,100円 5.86% 60.39% 1.12倍 -21.88% 2014年 196回 ¥195,700円 5.23% 50.51% 1.10倍 -23.16% 2013年 208回 ¥1,421,100円 37.99% 59.13% 1.89倍 -12.26% 2012年 195回 ¥438,600円 11.73% 51.79% 1.25倍 -22.58% 2011年 198回 -¥414,600円 -11.08% 45.45% 0.81倍 -17.62% 2010年 190回 -¥82,000円 -2.19% 52.11% 0.95倍 -15.59% 2009年 215回 ¥171,700円 4.59% 46.05% 1.07倍 -14.46% 2008年 196回 -¥993,500円 -26.56% 40.31% 0.62倍 -18.43% 2007年 207回 -¥276,200円 -7.38% 51.21% 0.85倍 -13.27% 2006年 174回 -¥20,200円 -0.54% 52.87% 0.99倍 -19.47% 2005年 209回 ¥1,506,500円 40.28% 65.55% 2.29倍 -18.58% 2004年 203回 -¥88,500円 -2.37% 49.75% 0.96倍 -18.43% 2003年 202回 ¥453,800円 12.13% 52.97% 1.25倍 -22.06% 2002年 183回 ¥301,900円 8.07% 52.46% 1.17倍 -13.79% 2001年 185回 -¥611,800円 -16.36% 42.70% 0.75倍 -20.14% 2000年 212回 -¥211,500円 -5.65% 49.53% 0.92倍 -15.15% |
利益曲線は次の通り。
うーん……、平凡な結果だ。
そしてトレード平均利益が775円だから、手数料負けするかもしれない。
まとめ
テクニカル分析が有効といわれる理由は
「マーケットの値動きにはある程度の法則性が見られる」
という点に基づいている。
要するに株価の決定自体が群集心理(人気投票)のため、次のような理由で利用する人が耐えないからだ。
- 1、その分析を盲目的に信じる人(自身の勉強、他人からの干渉)
- 2、金融機関の運用者(責任逃れの理由付け)
- 3、本心では信用しないが、信じる人が多いから株価が動くと定義し先回りで買いを入れる人
書き出せば書き出すほどオカルトの世界だね……。
いつも同じ事言ってるけどさ……。
ソースコード
バックテストには無料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 |
# loop-type: date-only //============================== require "TIlib" require "Utility" require "TrendCheck" // ====================================== // 高掴みしないでトレードする方法 // ====================================== // //【仕掛けのルール】 // 1) RCIが-70%を下回ったらチェック // 2) RCIが下から上へ突き抜けたら準備(RCI:9) // 3) RCIが上へ抜けたら、5EMAと20EMAを見る // 4) 5EMAが20EMAをGC(ゴールデンクロス)したら買う // //【手仕舞いのルール】 // 1) RCIが 90%~100%で張り付いている間に売る 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 = 7 // 最大保有日数 $shortSelling = 0 // 空売り戦略 Yes(1)/No(0) $Interest = 1 // 無制限(0) / 単利(1) / 複利(2) $reverse = 0 // 購入順序 昇順(0) / 降順(1) $udcount = 0 // 騰落レシオ利用数 Init() //------------------------------------------------ $RCI = [$code_num] $RCI_1 = [$code_num] $EMA5 = [$code_num] $EMA20 = [$code_num] $EMA5_1 = [$code_num] $EMA20_1 = [$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 ! ($RCI[i]) // 銘柄ごとのグローバル変数を初期化する $RCI[i] = RCI_new(9) $EMA5[i] = EMA_new(5) $EMA20[i] = EMA_new(20) $RCI_1[i] = {-1}RCI_new(9) $EMA5_1[i] = {-1}EMA_new(5) $EMA20_1[i] = {-1}EMA_new(20) $hold[i] = 0 return end //指標の計算を1日進める RCI_next($RCI[i]) EMA_next($EMA5[i]) EMA_next($EMA20[i]) RCI_next($RCI_1[i]) EMA_next($EMA5_1[i]) EMA_next($EMA20_1[i]) //================================================== // 保有してない→購入 //================================================== if (! $hold[i]) rci = RCI_value($RCI[i]) ema5 = EMA_value($EMA5[i]) ema20 = EMA_value($EMA20[i]) rci_1 = RCI_value($RCI_1[i]) ema5_1 = EMA_value($EMA5_1[i]) ema20_1 = EMA_value($EMA20_1[i]) if ! (rci && ema5 && ema20 && rci_1 && ema5_1 && ema20_1 && Close) return end //================================================== // 売買(買い) //================================================== // 1) 前日のRCIが-70%を下回っている flag1 = rci_1 < -70 if ! (flag1) return end // 2) RCIが下から上へ突き抜けたら準備(RCI:9) flag2 = rci_1 < rci if ! (flag2) return end // 3) 5EMAが20EMAをGC(ゴールデンクロス)したら買う flag3 = ema5_1 < ema5 && ema5_1 < ema20_1 && ema20 < ema5 if ! (flag3) return end if (1) $buyflag[i][0] = 1 $buyflag[i][1] = ema5 $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) RCIが 90%~100%で張り付いている間に売る rci = RCI_value($RCI[i]) if ! (rci) return end if (rci >= 90) PrintLog("利食い") $sellflag[i] = 1 $set[i] = 0 // 2) 利食い:5%以上の含み益が出た場合 elsif (Close >= 1.05 * $buy[i]) PrintLog("利食い") $sellflag[i] = 1 $set[i] = 0 // 3) 損切り:5%以上の含み損が出た場合 elsif (Close <= 0.95 * $buy[i]) PrintLog("損切り") $sellflag[i] = 1 $set[i] = 0 // 4) 損切り:10日以上持っていた場合 elsif ($set[i] >= $MaxHoldDay) PrintLog("損切り") $sellflag[i] = 1 $set[i] = 0 end end end //==================== // 買い処理 //==================== def SortBuy() if ! (HasPricedata({1}Open)) return end $long = 0 $long = Num($buyUnit, Close) codeset = $order[(int)Code] Buying(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(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 |