テクニカル指標最強の組み合わせ。
指標を学べば、トレードの必勝(聖杯)を見つけることができる!
と思っていた時代が私にもありました。
研究熱心な人なら自分でチャートのパターンを検証して、自分だけの必勝法を探そうとする人もいるかもしれない。
RSIとかMACDとかADXとかエンベロープとかストキャス一目均衡表とかね。
分析手法 | テクニカル指標名 |
---|---|
トレンド分析 | 移動平均線、モメンタム、MACD、ボリンジャーバンド |
オシレーター分析 | RSI、ストキャスティクス、RCI、MACD |
フォーメーション分析 | トリプル(ダブル)トップ、トリプル(ダブル)ボトム、三角もち合い |
ローソク足分析 | 陽線、陰線、上(下)、ヒゲ、陽(陰)の坊主、十字足、陽(陰)のコマ、包み足、出会い線、行き違い線、かぶせ線、首つり線、トウバ、明けの明星、宵の明星、アイランドリバーサル |
出来高分析 | 出来高移動平均線、ボリュームレシオ、逆ウォッチ曲線、信用残/売買高レシオ |
サイクル分析 | ライト(レフト)、トランスレーション、コンドラチェフ、グズネッツ、ジュグラー、チキンサイクル |
その他 | 一目均衡表、ポイント&フィギュア、ダウ理論、エリオット波動理論、ギャン理論 |
まず多くの人が、各テクニカル指標の利益率を確認する。
1つで駄目だと分かり、2つを組み合わせてみる。
2つが駄目なら、3つを組み合わせ……。
3つが駄目なら、4つを組み合わせ……。
そして「聖杯」探しの旅に出た多くの投資家は道に迷う。
想像してみて下さい。
金融のプロがこんな取引をやってると思いますか?
- 2本の移動平均線が〇〇〇となったら「買い(又は売り)」
- ストキャスティクスとMACDが〇〇だったら「買い(又は売り)」
- 寄り付きから〇円以上上昇した後、〇円変動したら「買い(又は売り)」
- NYダウが〇〇で日経が〇〇だったら「買い(又は売り)」
- 移動平均乖離率が〇〇%以上だったら「買い(又は売り)」
「MACD」と「RSI」が最強ですよ!
いやいや「MACD」と「ストキャスティクス」が最強です!
「MACD」と「ボリンジャーバンド」の組み合わせが必勝法です!
こういうのが好きな人って「占い」とかオカルトが好きな人な気がするね。
組み合わせ最強対決「MACDとRSI」vs「RCIとBB」の期待値検証
「組み合わせ 最強 テクニカル 株」
で検索して出てきたサイトが2つあった。
【最強】勝率が変わるMACDとRSIの組み合わせ方とは?
【テクニカル最強の組み合わせ!】RCIとボリンジャーバンドを徹底解説
最強が2つあるよ?矛盾してるじゃん。
最強なのは、どっちでも無い気がするけど白黒つけてみるーー。
【主張1】MACDとRSIの組み合わせが最強説
MACDはトレンドに強く、レンジ相場に弱い。
対してRSIはトレンドに弱く、レンジ相場に強いという特徴を持ちます。両者の強みと弱みを上手く組み合わせることを目的としたのが、MACDとRSIの組み合わせ手法になります。
【買いルール】
- RSIが30以下
- シグナルが0以下の水準でMACD(26、12、9)を上抜ける
加えて 50円以下の銘柄は倒産する可能性があるので、その場合は買わない。
バックテスト結果
計算時間は東証一部だけで30分。
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/06~2021/06/07における成績です。 ---------------------------------------- 全トレード数 2221 勝ちトレード数(勝率) 1071(48.22%) 負けトレード数(負率) 1150(51.78%) 全トレード平均利率 0.22% 勝ちトレード平均利率 5.12% 負けトレード平均損率 -4.35% 勝ちトレード最大利率 30.43% 負けトレード最大損率 -43.19% 全トレード平均期間 6.92 勝ちトレード平均期間 6.37 負けトレード平均期間 7.43 ---------------------------------------- 必要資金 ¥3,406,300 最大ポジション(簿価) ¥3,450,650 最大ポジション(時価) ¥3,494,100 純利益 ¥2,501,597 勝ちトレード総利益 ¥24,684,110 負けトレード総損失 -¥22,182,510 全トレード平均利益 ¥1,126 勝ちトレード平均利益 ¥23,048 負けトレード平均損失 -¥19,289 勝ちトレード最大利益 ¥147,000 負けトレード最大損失 -¥208,000 プロフィットファクター 1.11 最大ドローダウン(簿価) -¥864,505 最大ドローダウン(時価) -¥893,705 ---------------------------------------- 現在進行中のトレード数 5 ---------------------------------------- 平均年利 3.34% 平均年利(直近5年) 5.57% 最大連勝 12回 最大連敗 9回 ---------------------------------------- [年度別レポート] 年度 取引回数 運用損益 年利 勝率 PF 最大DD 2021年 37回 ¥28,800円 0.85% 43.24% 1.16倍 -8.97% 2020年 96回 ¥258,100円 7.58% 53.13% 1.23倍 -26.09% 2019年 104回 ¥331,000円 9.72% 56.73% 1.91倍 -9.88% 2018年 167回 ¥112,000円 3.29% 46.11% 1.08倍 -18.56% 2017年 89回 ¥218,000円 6.40% 56.18% 1.65倍 -11.54% 2016年 94回 -¥137,200円 -4.03% 53.19% 0.87倍 -16.47% 2015年 100回 ¥266,200円 7.81% 50.00% 1.45倍 -10.56% 2014年 79回 ¥555,800円 16.32% 63.29% 2.91倍 -8.33% 2013年 36回 ¥308,400円 9.05% 61.11% 2.87倍 -7.61% 2012年 75回 ¥33,200円 0.97% 52.00% 1.06倍 -11.65% 2011年 90回 -¥20,598円 -0.60% 54.44% 0.98倍 -43.19% 2010年 133回 -¥143,900円 -4.22% 50.38% 0.88倍 -21.13% 2009年 121回 ¥166,900円 4.90% 50.41% 1.11倍 -23.19% 2008年 191回 -¥238,805円 -7.01% 48.17% 0.92倍 -27.38% 2007年 178回 -¥82,600円 -2.42% 50.00% 0.96倍 -19.28% 2006年 106回 ¥82,600円 2.42% 53.77% 1.07倍 -25.44% 2005年 59回 ¥167,900円 4.93% 45.76% 1.40倍 -17.13% 2004年 70回 ¥509,000円 14.94% 60.00% 2.12倍 -15.36% 2003年 66回 ¥281,000円 8.25% 62.12% 1.41倍 -17.58% 2002年 122回 -¥391,500円 -11.49% 44.26% 0.78倍 -20.80% 2001年 119回 ¥401,500円 11.79% 53.78% 1.23倍 -30.07% 2000年 89回 -¥204,200円 -5.99% 37.08% 0.81倍 -15.34% |
利益曲線は次のとおり。
マイナス時期はあるものの、テクニカル指標で選定して裁量判断するなら、まぁまぁ使えるかもね。
【主張2】RCIとボリンジャーバンドの組み合わせが最強
こちらはFXにて最強との記載のようだ。
その中でここテクニカルは非常に相性がいいと思ったのがRCIとボリンジャーバンドです。
もちらん単体でも機能はしやすいですが、この二つが組み合わさることでさらに優位性の高いトレードを実現させることができます。
【購入ルール】
- ボリンジャーバンドがエクスパンション(拡大)した時
- RCI(短期線:12、中期線:24、長期線:48)の3本線がすべて下向き(RCIの短・中・長期線も同じ方向に向いている)時
このタイミングで「売り」を仕掛ける。
全てがフィーリングでしか無い。人によって拡大の解釈は様々でありオカルトと呼ばれる所以だ。
RCIの3本利用は鳥居万友美氏の手法に似ている気がする。
バックテスト結果
計算時間は東証一部の貸借銘柄だけで3時間30分。
で、結果はこうなった。
売りだとボロボロ。
改めて「買い」でやってみる。
計算時間は東証一部だけで3時間30分。
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/06~2021/06/08における成績です。 ---------------------------------------- 全トレード数 6115 勝ちトレード数(勝率) 3040(49.71%) 負けトレード数(負率) 3075(50.29%) 全トレード平均利率 0.20% 勝ちトレード平均利率 3.93% 負けトレード平均損率 -3.49% 勝ちトレード最大利率 68.18% 負けトレード最大損率 -32.29% 全トレード平均期間 7.05 勝ちトレード平均期間 6.71 負けトレード平均期間 7.40 ---------------------------------------- 必要資金 ¥2,780,300 最大ポジション(簿価) ¥3,227,900 最大ポジション(時価) ¥3,337,800 純利益 ¥5,640,000 勝ちトレード総利益 ¥50,660,000 負けトレード総損失 -¥45,020,000 全トレード平均利益 ¥922 勝ちトレード平均利益 ¥16,664 負けトレード平均損失 -¥14,641 勝ちトレード最大利益 ¥360,000 負けトレード最大損失 -¥140,700 プロフィットファクター 1.13 最大ドローダウン(簿価) -¥2,786,900 最大ドローダウン(時価) -¥2,818,100 ---------------------------------------- 現在進行中のトレード数 6 ---------------------------------------- 平均年利 9.22% 平均年利(直近5年) 7.85% 最大連勝 13回 最大連敗 13回 ---------------------------------------- [年度別レポート] 年度 取引回数 運用損益 年利 勝率 PF 最大DD 2021年 89回 ¥259,800円 9.34% 52.81% 1.71倍 -8.12% 2020年 217回 ¥309,600円 11.14% 54.84% 1.20倍 -26.28% 2019年 288回 ¥366,300円 13.17% 53.47% 1.26倍 -10.21% 2018年 312回 -¥614,800円 -22.11% 47.76% 0.78倍 -22.70% 2017年 301回 ¥769,700円 27.68% 54.82% 1.62倍 -10.59% 2016年 294回 ¥350,600円 12.61% 55.78% 1.19倍 -15.94% 2015年 296回 ¥491,000円 17.66% 55.07% 1.27倍 -22.50% 2014年 290回 ¥297,600円 10.70% 57.93% 1.15倍 -19.45% 2013年 288回 ¥824,500円 29.66% 51.04% 1.40倍 -16.30% 2012年 278回 ¥494,600円 17.79% 57.55% 1.30倍 -16.48% 2011年 272回 ¥574,400円 20.66% 53.31% 1.28倍 -17.26% 2010年 274回 ¥281,700円 10.13% 55.11% 1.15倍 -25.86% 2009年 278回 -¥387,300円 -13.93% 50.72% 0.86倍 -23.81% 2008年 280回 -¥1,272,900円 -45.78% 46.79% 0.69倍 -31.03% 2007年 298回 -¥532,300円 -19.15% 42.95% 0.78倍 -21.65% 2006年 302回 ¥98,700円 3.55% 55.30% 1.04倍 -15.20% 2005年 301回 ¥709,300円 25.51% 58.80% 1.45倍 -12.79% 2004年 289回 ¥640,300円 23.03% 51.56% 1.34倍 -25.54% 2003年 292回 ¥1,624,400円 58.43% 58.90% 1.85倍 -22.86% 2002年 281回 -¥63,700円 -2.29% 51.25% 0.97倍 -22.58% 2001年 295回 -¥79,400円 -2.86% 49.49% 0.97倍 -21.71% 2000年 300回 ¥497,900円 17.91% 54.67% 1.20倍 -32.29% |
利益曲線は次のとおり。
こちらも2011年からバックテストしていたら有効性を感じてたかもなーー。
まとめ
白黒つけるつもりだったけど、
どっちも五十歩百歩。
全銘柄のバックテストをやる気も起きなかった。
ただ、3点チャージ法や斎藤氏の手法は利益曲線が2017年から横に寝るが、RSIやBBを使った方法は逆に最近は調子良いね。
この辺りの理由が分かれば良いストラテジーが作れるかもね。
ネタが無くなってきたので、知りたいバックテスト結果があれば受け付けます!
ソースコード
バックテストには無料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 |
# 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 = 5 // 最大保有日数 $shortSelling = 0 // 空売り戦略 Yes(1)/No(0) $Interest = 1 // 無制限(0) / 単利(1) / 複利(2) $reverse = 0 // 購入順序 昇順(0) / 降順(1) $udcount = 0 // 騰落レシオ利用数 Init() //------------------------------------------------ $RSI = [$code_num] $MACD = [$code_num] $MACD_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 ! ($RSI[i] && $MACD[i]) //Tilibのオブジェクト生成 $RSI[i] = RSI_new(40, 0) $MACD[i] = MACD_new(12, 26, 9) $MACD_1[i] = {-1}MACD_new(12, 26, 9) //銘柄ごとのグローバル変数を初期化する $hold[i] = 0 return end //指標の計算を1日進める RSI_next($RSI[i]) MACD_next($MACD[i]) MACD_next($MACD_1[i]) //================================================== // 保有してない→購入 //================================================== if ! ($hold[i]) if ! (Close && {-1}Close && Volume) return end macd = MACD_value($MACD[i]) signal = MACD_signal($MACD[i]) macd_1 = MACD_value($MACD_1[i]) signal_1 = MACD_signal($MACD_1[i]) rsi = RSI_value($RSI[i]) if ! (macd && macd_1 && signal && signal_1 && rsi) return end //================================================== // 売買(買い) //================================================== // シグナルが0以下の水準 flag1 = 0 >= signal // MACDを上抜ける flag2 = macd > signal && macd_1 < signal_1 // RSIが30以下 flag3 = 30 >= rsi if (flag1 && flag2 && flag3) $buyflag[i][0] = 1 $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 SortBuy() if ! (HasPricedata(Close)) return end $long = 0 $long = Num($buyUnit, Close) codeset = $order[(int)Code] Buying(codeset) end //==================== // 売り処理 //==================== def Sell_(i) if ($sellflag[i]) // 当日のCloseで売る 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 |