今回は、テクニカル指標 RSIを検証してみたいと思います。
・投資予算に制限を加える
・共通コードを関数化して可読性を向上させる その2
・共通コードを関数化して可読性を向上させる その3
・本ブログの内容において、正当性を保証するものではありません。
・本ブログを利用して損失を被った場合でも一切の責任を負いません。
・最終的な決定は、ご自身の判断(自己責任)でお願い致します。
RSIを活用した売買ポイントの検証
RSI売買のシグナルは、一般に以下とされます。
■買い:30%以下が株価の反転上昇の目安
■売り:70%以上が株価の反転降下の目安
しかし、全ての局面で有効とは言えず、比較的 安定したトレンドを形成しているときに機能することが知られています。
早速ProtraでRSIを検証してみましょう。
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 |
#loop-type: date-only #================================================== # RSI.pt #-------------------------------------------------- # written by グコウ, 2018/10/28 #================================================== require "TIlib" require "Utility" codes = CodeList if $code_num && $code_num != Length(codes) Print("前回と異なる銘柄リストでは実行できません。") Dummy end $code_num = Length(codes) #グローバル変数を初期化 if ! $__INIT__ $budgetIni = 10000000 $budget = $budgetIni #投資総額 (1000万円) $buyUnit = 1000000 #1回の購入資金 (100万円) $MaxHoldDay = 30 #最大保有日数 $Interest = 0 #無制限(0) / 単利(1) / 複利(2) #------------------------------------------------ $set = [$code_num] $buy = [$code_num] $hold = [$code_num] #------------------------------------------------ $RSI = [$code_num] #------------------------------------------------ $__INIT__ = 1 end def Main(i) #================================================== # 条件(買条件, 売条件共通部分) #================================================== if Index == null return end if ! $RSI[i] $RSI[i] = RSI_new(14,0) $hold[i] = 0 return end #指標の計算を1日進める RSI_next($RSI[i]) rsi14 = RSI_value($RSI[i]) #計算 -------------------------------------------- #指標の計算に必要な日数を経過していない場合は何もしない if !rsi14 return end # 条件1 #================================================== if PricedataExistCheck(Close) return end #エントリーの条件を判定 if (!$hold[i] && rsi14 <= 25 && Close > 50) Buying(i) //買い # 条件2 #================================================== elsif $hold[i] if PricedataExistCheck(Close) return end if $set[i] < 1 $set[i] = $set[i] + 1 return end $set[i] = $set[i] + 1 if (Close > $buy[i]*1.1 || $set[i] > $MaxHoldDay) Selling(i) //売り end end end #===== ループ処理 ===== i = -1 while i + 1 < $code_num i = i + 1 {codes[i]}Main(i) end |
■買い条件:14日間のRSIが25%以下,かつ終値が50円より高値
■売り条件:10%の利益 or 30日経過
◆対象銘柄:日経平均構成銘柄,買付け金100万円
としました。
結果は以下の通り。
右肩上がりとはなるものの、平均ドローダウンが大きいですね。
勝率は約58%と勝ち越してはいます。持ち期間は長めです。
RSIは小さい方が良いのか
以前紹介した「優先順位を付けて購入する方法」を用い、予算を制限して RSIが小さい順に購入するとどうなるでしょう。
総予算を1,000万円で固定 つまり一度にもてる銘柄数が約10となるように制限します。
買いシグナルが出た銘柄を、RSIが小さい順に購入すると以下のようになりました。
逆に、RSIが大きい順に購入した結果がこちら。
あまり差異がないようにも見えますが、RSIが小さい順(前者)の方が 最大ドローダウンが大きく、平均利益も低いです。
小さければ小さいほど良い、というものでもありません。
2008年のリーマンショック時に顕著ですね。強力なトレンドが形成されているときには、RSIが買い水準でも 株価は下落を続けることがあります。
上でも述べたように、比較的安定している局面で有効な指標のようです。
おまけ
売り条件を変えると、一直線に右肩上がりの利益線となります。リーマンショック時,好景気時でも安定しています。
ところどころ急落,決して小さくないドローダウンがあるので、もう少しブラッシュアップが必要でしょうが、研究してみる価値はあるかも。