相対強度指数と移動平均のクロスオーバー戦略

作者: リン・ハーンチャオチャン開催日:2023年12月21日11時30分27秒
タグ:

img

概要

相対強度指数 (RSI) と移動平均クロスオーバー戦略は,RSI指標と移動平均を組み合わせて定量的な取引決定を行う.RSIが表示した過買いと過売レベルを使用して,RSIが移動平均線を横切ったときに発生する黄金十字と死亡十字信号とともに,エントリーと出口を決定する.

戦略の論理

  1. RSI指標の値を計算します.RSIは,資産が過買いまたは過売りされているかどうかを評価するために,最近の価格変動の大きさを測定します.

  2. RSIの移動平均線 (MA) を計算するには,指数的な移動平均線 (EMA) または単純な移動平均線 (SMA) を用いる.

  3. RSIがMAラインを突破すると,金色のクロス買い信号が生成される.RSIがMAラインを下回ると,デスクロスセール信号が起動する.

  4. RSI が過買い値を超えると,資産は過買い値とみなされ,ショートポジションが開始される.RSI が過売り値を下回ると,資産は過売り値とみなされ,ロングポジションが開始される.

利点分析

  1. インディケーター・クロスオーバー・シグナルとRSI・オーバー・バイト/オーバー・セール・レベルを組み合わせることで,取引決定の正確性が向上します.

  2. RSIの過剰購入と過剰販売の限界値が最適な入口と出口を決定します

  3. 指標のクロスオーバー信号に作用してトレンド逆転を捉える.

リスク分析

  1. RSIは不安定な市場や横向市場において誤った信号を生む可能性があります.

  2. 過剰購入または過剰販売の制限値の設定が正しくない場合,信号が過度に緩やかまたは過度に厳しくなる可能性があります.

  3. 移動平均は短期的な異常や波動性ピークに敏感で 早期に停止される可能性が高まります

オプティマイゼーションの方向性

  1. RSI パラメータを最適化するために,異なる長さの期間をテストします.

  2. 異なるMA長さを評価して最適な移動平均期を計算する.

  3. 入場信号を精査するために,多額の買い過ぎと多額の売り過ぎの 限界値をテストします.

  4. シグナルを検証し 偽取引を避けるために 追加のフィルターを組み込む

結論

RSIと移動平均クロスオーバー戦略は,市場転換点を特定し,逆転を捕捉するために,RSIオーバーバイト/オーバーセールレベルとMAクロスオーバー信号を組み合わせます. パラメータ最適化とシグナルフィルタリングを通じてパフォーマンスとリスク管理を向上させることができます.この中期取引戦略は,経験豊富な投資家に強力なアルファ生成可能性を提示します.


/*backtest
start: 2022-12-14 00:00:00
end: 2023-12-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//dfurrer45
strategy(title="Relative Strength Index", shorttitle="RSI", overlay=true)
src = close, len = input(13, minval=1, title="Length"), maLen = input(9, minval=1, title="MA Lenght"), exponential = input(false, title="Exponential")

// === BACKTEST RANGE ===
FromMonth = input(defval = 10, title = "From Month", minval = 1)
FromDay   = input(defval = 3, title = "From Day", minval = 1)
FromYear  = input(defval = 2017, title = "From Year", minval = 2014)
ToMonth   = input(defval = 1, title = "To Month", minval = 1)
ToDay     = input(defval = 1, title = "To Day", minval = 1)
ToYear    = input(defval = 9999, title = "To Year", minval = 2014)
// ===  BACKTEST END  ===
backtestdaterange = (time > timestamp(FromYear, FromMonth, FromDay, 00, 00))

rsioverbought = input(90, minval=1, title="RSI % start overbought")
rsioversold = input(10, minval=1, title="RSI % start oversold")
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
ma = exponential ? ema(rsi, maLen) : sma(rsi, maLen)
rsimacrossup = cross(rsi,ma) and rsi > ma
rsimacrossdown = cross(rsi,ma) and rsi < ma
plotchar(rsimacrossup, char='⇧', location = location.belowbar, color = green, text = "", textcolor = green, size=size.small)
plotchar(rsimacrossdown, char='⇩', location = location.abovebar, color = red, text = "", textcolor = red, size=size.small)
plotchar(rsi > rsioverbought, char='x', location = location.belowbar, color = aqua, text = "", textcolor = red, size=size.small)
plotchar(rsi < rsioversold, char='x', location = location.belowbar, color = aqua, text = "", textcolor = red, size=size.small)


closetrade = rsimacrossup or rsimacrossdown
strategy.close_all(closetrade)
strategy.close_all((rsi > rsioverbought) or (rsi < rsioversold))
strategy.entry("Short Overbought",strategy.short, when=(rsi > rsioverbought) and backtestdaterange)
strategy.entry("Buy Overbought",strategy.long, when=(rsi < rsioversold) and backtestdaterange)
strategy.entry("Long Cross", strategy.long, when=rsimacrossup and backtestdaterange)
strategy.entry("Short Cross", strategy.short, when=rsimacrossdown and backtestdaterange)


もっと