RSI 傾向 戦略 を フォロー する

作者: リン・ハーンチャオチャン, 日付: 2023年11月7日 16:33:43
タグ:

img

概要

この戦略は,過剰購入と過剰販売の状況を特定し,トレンドを追跡するために,相対強度指数 (RSI) 指標に基づいて設計されています.RSIが過剰販売線を下回るときはロングになり,RSIが過剰購入線上回るときはショートになり,市場の主要なトレンドに従うことで利益を得ることを目指します.

戦略の論理

この戦略は,RSIインジケーターを使用して,市場における過剰購入および過剰販売状態を特定する.RSIは,一定の期間における価格変動に基づいて計算される.30未満のRSIは過売りとみなされ,70を超えるRSIは過買いとみなされる.

具体的には,この戦略は,まずRSIパラメータの長さ=14,オーバーボールド=70,オーバーセール=30を定義し,その後,閉じる価格に基づいてRSI値vrsiを計算します. vrsiがオーバーボールドライン以上またはオーバーセールライン以下を横切ると,それに応じてロングまたはショートトレードをトリガーします.トレードに入ると,etoroStopTicksのストップロスは設定されます.トレードウィンドウ内でストップロスがトリガーされるとポジションは閉鎖されます.

この方法により,戦略は市場の主要な傾向 - 過売り状況でロング,過買い状況でショート - に従うことができます.

利点

  • RSI を利用して,トレンドを捉えるために過買い/過売りの市場状況を特定する
  • 柔軟なバックテスト 窓
  • 単一の取引損失を制御するための合理的なストップ損失設定

リスク

  • RSIの差異は誤った信号を生む可能性があります.
  • 静的ストップ損失は市場の変動に適応できない
  • トレンドの逆転を特定するのは困難で,逆転トレードにつながる可能性があります

解決策:

  • 誤ったRSI信号に基づいて誤ったエントリを避けるためにフィルターインジケーターを追加します
  • ダイナミックストップ・ロスは,市場動きをリアルタイムで追跡します.
  • トレンド判断ツールを追加して逆取引を防ぐ

改善

戦略は以下の側面で最適化できます.

  1. 最良のパフォーマンスのために RSI パラメータを最適化

異なるRSI期間と過買い/過売りレベルをテストし,最適なパラメータを見つけ,誤った信号を減らす.

  1. 逆トレンド取引を避けるためにトレンド判断ツールを追加する

MAとMACDを加えると,トレンド方向を判断し,ターニングポイントで間違った信号を避ける.

  1. ダイナミックストップ損失

ATR を使って,適応型ストップ損失を設定し,市場の変動をよりよく追跡する.

  1. 入国規則の改善

RSI信号にブレイクアウトやボリューム増加などの条件を追加して 入力精度を向上します

結論

この戦略は,RSIを使用して過買い・過売り状況を特定することによってトレンドを把握する.従来の追跡ストップ戦略と比較して,市場を指標でタイミングする利点があります.しかし,RSIのダイバージェンスやトレンド逆転を検出できないような問題は解決する必要があります.パラメータ最適化,トレンド判断,ダイナミックストップ損失のさらなる改善は安定性と収益性を向上させることができます.


/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3

strategy("RSI Etoro Strategy", overlay=true, max_bars_back=2000)
// To use:
// Capital = capital * leverage
// Slippage Ticks: 3, 5 ? (Mainly for spread)
// etoroStopTicks: Set it accordingly to the stock (to corresponds to etoro default of 50 % for exemple...)

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 12, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 1995)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 1995)


// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

length = input( 14 )
overSold = input( 30 )
overBought = input( 70 )
etoroStopTicks = input( 120 )
// 120 because it is approximatively the number of ticks for default SL of 50% at x5 leverage for copper (no fee)...
price = close

vrsi = rsi(price, length)

if (not na(vrsi))
    if (crossover(vrsi, overSold))
        strategy.entry("RsiLE", strategy.long, comment="RsiLE", when = window())
    if (crossunder(vrsi, overBought))
        strategy.entry("RsiSE", strategy.short, comment="RsiSE", when = window())
strategy.exit("exit SE", "RsiSE", loss=etoroStopTicks, when = window())
strategy.exit("exit LE", "RsiLE", loss=etoroStopTicks, when = window())

//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)

もっと