9回目では、テクニカルインジケーターのひとつRSIを学んでいきましょう!今回はstrategyでRSIの効果を見ていきます!

RSIとは
RSIとはRelative Strength Indexの略で価格の動きの速さと強さが視覚化されたオシレーターです。
値は0~100を取ります。終値ベースで上昇と下落の変動のどちらに勢いがあるのかがわかります。
計算式は
RSI(n=期間) = n陽線実体合計 / n実体合計 ×100
実体合計は陰線と陽線のローソク部分という事です。ヒゲは含みません。
良くある解説
RSIは70以上で買われすぎている、30以下で売られすぎているなどと解釈されることがあります。
それ自体は間違っていないのですが、設定期間によって解釈が異なることが予想されます。
つまり、7などの短期間で見てみると、売られすぎていても50程度の期間では買われすぎているという事が起こりえます。
試しに3つの期間を設定したRSIを書いてみましょう。まだindicatorで書いていきます。
// © FP嶋
//@version=5
indicator("マルチRSI")
len1 = input.int(7,"length1")
len2 = input.int(13,"length2")
len3 = input.int(31,"length3")
rsi1 = ta.rsi(close,len1)
rsi2 = ta.rsi(close,len2)
rsi3 = ta.rsi(close,len3)
hline(30)
hline(70)
plot(rsi1,color= color.new(color.blue,0))
plot(rsi2,color= color.new(color.yellow,0))
plot(rsi3,color= color.new(color.red,0))

短期が青、中期が黄色、長期が赤になっています。価格が上昇中で、長期RSIが50以上であっても、短期のRSIは30位まで行くことがあるのがわかると思います。
逆に考えたら、上昇中の短期売られすぎは押し目ポイントと呼べるのかもしれません。
ta.rsi()関数
さて、関数について見ていきましょう。テクニカルの関数は頭にta.がつきました。したがって、RSIの関数はta.rsi()です。
引数は(値、期間)です。今回は終値で、7-13-31としました。特に理由はありません。
lenという値に期間をいじれるように設定してありますので、上述のコードを利用して、自分の好きな値に期間を変えてみてください。
hline()関数
値の水平線を書くことが出来る関数です。ここでは、30と70で指定しましたので、サブチャートに30と70の値に点線が書かれています。
引数は(値,”名前”,色,ラインのスタイル,設定可否)です。ご覧の通り、値だけ入れれば機能します。その場合、色は白、ラインのスタイルはドット(点線)です。
strategyで確認してみよう!
RSIの効果について見てみましょう。ここでは、30以下売られすぎ、70以上買われすぎと考えて、30をRSIがゴールデンクロスした時にロング、70をデッドクロスした時にショートするように設定してみます。
// © FP嶋
//@version=5
strategy("マルチRSI",overlay = false)
len1 = input.int(7,"length1")
len2 = input.int(13,"length2")
len3 = input.int(31,"length3")
rsi1 = ta.rsi(close,len1)
rsi2 = ta.rsi(close,len2)
rsi3 = ta.rsi(close,len3)
plot(rsi1,color= color.new(color.blue,0))
plot(rsi2,color= color.new(color.yellow,0))
plot(rsi3,color= color.new(color.red,0))
if ta.crossover(rsi1,30)
strategy.entry("long",strategy.long)
if ta.crossunder(rsi1,70)
strategy.entry("short",strategy.short)
まずは短期の期間7での結果です

短期7期間RSIの30、70のエントリーでは負けるようです。
続いて、中期13、長期31の期間で見てましょう


結果が悪くなりましたね… このままでは使えないという事がわかりました。しかし、これはユーロ円の1分足の結果なので、時間軸によっては結果が違うと想像できます。
strategyを使ってみよう!
それでは、実際にトレード条件を設定してみましょう。ここでは私がチャートに入れている、SMA25-75-200を利用して、SMAの並びが75MA>200MAの時に、25MAが75MAをゴールデンクロス、75MA<200MAの時に、25MAが75MAをデッドクロスしたらエントリーするような条件にしてみます。
また、目標利益、損失も設定で変更できるようにしてみます。
// © FP嶋
//@version=5
strategy("マルチMA", overlay=true, margin_long=100, margin_short=100)
len1 = input.int(25,"sma1")
len2 = input.int(75,"sma2")
len3 = input.int(200,"sma3")
pro = input.int(200,"profit",minval = 1)
sl = input.int(200,"stop loss",minval =1)
sma1 = ta.sma(close,len1)
sma2 = ta.sma(close,len2)
sma3 = ta.sma(close,len3)
POL = sma2 > sma3
POS = sma2 < sma3
plot(sma1,color = color.new(color.red,0))
plot(sma2,color = color.new(color.yellow,0))
plot(sma3,color = color.new(color.lime,0))
longCondition = ta.crossover(sma1, sma2)
if POL
if (longCondition)
strategy.entry("My Long Entry Id", strategy.long)
strategy.exit("exit Long","My Long Entry Id",profit = pro, loss = sl )
shortCondition = ta.crossunder(sma1, sma2)
if POS
if (shortCondition)
strategy.entry("My Short Entry Id", strategy.short)
strategy.exit("exit Short","My Short Entry Id",profit = pro, loss = sl )
少し長くなっています。pro、slで損益の値を外部で入力可能にしています。
また、POL,POS(パーフェクトオーダー、ロングとショートのつもり)という条件を付けました。この条件がtrueのときのゴールデンクロス、またはデッドクロスが発注条件です。
発注の条件は変数として定義してあります。それぞれ、longCondition、shortConditionとなっています。こちらは空のストラテジーに入っているものを流用しました。
エントリー条件は、sma1がsma2をゴールデンクロス、またはデッドクロスした時です。(ta.crossover(sma1,sma2)・ta.crossunder(sma1,sma2))
エントリーは条件を満たした時に成行で、決済は、反対方向のエントリーが行われるか、profit= またはloss=が条件を満たした時に行われます。それぞれ、pro、slで定義しています。
この値は0.1pip単位で設定されますが、int(整数)扱いなので、20pipsは200と書く必要があります。
さて、チャートに追加してみましょう。

MAと損益の値を設定することが可能です。とりあえずこのままドル円5分足の結果を見てみます。

なんとこのままでも問題なく黒字になっちゃいました。PF1.244とそんなに悪くありません。ただ、勝率は51.81なので、スプレッド次第ではそう簡単には勝てなさそうです。
外部で設定をいじることが出来ますので、SMAの期間を変えてみたり、利益、損失のpipsを変えてみてください。あなたの良くトレードする通貨ペアでもきっと良いストラテジーが出来ると思います。ただ、それはあくまでも過去のデータでの話ですので、将来的に必ず利益が保証されるわけではありません。
しかしながら、過去で利益が出るのであれば、将来も利益を生む可能性は高いと言えるでしょう。

今回はこのへんで!
おすすめFXアイテム
過去検証や分析はMT4かFT4、Trading viewがおすすめです。
無料が良い人はMT4で、MT4を使わせてくれる口座を使用すると良いです。おすすめはFXTF
チャート分析に毎月課金してもいいよって人はTrading viewがおすすめです。無料もあります

