RSI インディケーターをベースにしたスカルピング戦略

作者: リン・ハーンチャオチャン開催日:2023年12月12日 15:46:49
タグ:

img

概要

この戦略は,RSIインディケーターとトライリングストップロスのベースでスカルピング戦略と呼ばれています.これは,RSIインディケーターを使用してオーバーバイトとオーバーセール条件を決定し,トレンド方向を決定するために速いおよび遅い移動平均値 (MA) と組み合わせ,エントリー条件を設定します.また,ポジションを終了するために百分比トライリングストップロスのメカニズムを使用します.

戦略の論理

この戦略のエントリーシグナルは主にRSIインジケーターとMAクロスオーバーによって決定される.RSIパラメータは,2つの期間で設定され,逆転機会のために急激な買い過ぎと売り過ぎの状況を迅速に把握する.急速なMAと遅いMAはそれぞれ50および200期に設定され,トレンド方向性を特定する.具体的には,エントリーロジックは:

長期入場:高速MAは緩やかなMAを超越し,価格は緩やかなMAを超越し,RSIは過売値を下回る (デフォルト10%). 短いエントリー: 急速なMAは緩やかなMAを下回り,価格は緩やかなMAを下回り,RSIは過剰購入レベル (デフォルト90%) を上回る.

また,戦略にはオプションの波動性フィルターがあります. これは,速いMAsと遅いMAsの傾斜間の差を計算します.差が限界を超えるとのみポジションが開かれます.この目的は,市場の変動中に明確な方向性がないときのポジション開設を避けるためです.

出口側では,ストップロスの割合を使用する.入力パーセントに基づいて,ストップロスの価格をティックのサイズと組み合わせて計算し,ストップロスを動的に調整する.

利点分析

この戦略の主な利点は以下の通りです.

  1. 2つの期間に設定されたRSIは,逆転の機会のために過剰購入と過剰販売の状況を迅速に捉えることができます.
  2. 速くて遅いMAsは,トレンド方向とターニングポイントを効果的に特定することができます.
  3. RSIとMAの二重指標の組み合わせは,誤ったブレイクを回避します.
  4. 波動性フィルターは波動中に明確な方向性がないときのポジション開設を避ける.
  5. リスクを効果的に制御するために,ストップ損失を保持する割合は,市場の変動に基づいてストップ損失レベルを調整できます.

リスク分析

この戦略にはいくつかのリスクもあります:

  1. RSIとMAインジケーターには 遅延効果があり 逆転の機会を逃す可能性があります
  2. 低値減少で停止損失の割合が引き起こす可能性が高い.
  3. 市場前の価格変動や一夜間価格変動は 効率的に処理されない.

リスクの最適化方向は次のとおりです.

  1. RSIパラメータを 1 期に調整して遅延効果を減らす.
  2. シンボルの特徴に基づいて MA 期間を最適化する.
  3. ストップ・ロスの割合をストップ・ロスのバランスと波動容量に調整する.

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

この戦略の最適化方向は以下の通りである.

  1. 誤ったブレイク信号を避けるため,ボリュームなどの他の指標判断を追加します.
  2. 意思決定に役立つ機械学習モデルの予測を追加します
  3. ピラミッドの時間と位置のサイズを最適化して 収益をさらに向上させる
  4. 一日の価格変動と市場前の価格変動のフィルターを設定します.変動に基づいて次の取引日に参加するかどうかを決定します.

結論

一般的に,これは戦略をフォローする比較的安定したトレンドである.ダブルRSIとMA指標を組み合わせることで,より明確なトレンド逆転機会を把握しながら一定の安定性を確保する.波動性フィルターはいくつかのリスクを回避し,百分比ストップロスはシングルトレード損失を効果的に制御する.この戦略はマルチシンボルの一般的な戦略として使用され,より良い結果を達成するために特定のシンボルのパラメータとモデルに最適化することもできます.


/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-11 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// Scalping strategy
// © Lukescream and Ninorigo
// (original version by Lukescream - lastest versions by Ninorigo) - v1.3
//

//@version=4
strategy(title="Scalping using RSI 2 indicator", shorttitle="RSI 2 Strategy", overlay=true, pyramiding=0, process_orders_on_close=false)

var bool ConditionEntryL = false
var bool ConditionEntryS = false


//***********
// Costants
//***********
def_start_date = timestamp("01 Jan 2021 07:30 +0000")
def_end_date   = timestamp("01 Dec 2024 07:30 +0000")

def_rsi_length = 2
def_overbought_value = 90
def_oversold_value   = 10

def_slow_ma_length = 200
def_fast_ma_length = 50
def_ma_choice      = "EMA"

def_tick   = 0.5
def_filter = true

def_trailing_stop = 1


//***********
// Change the optional parameters
//***********
start_time  = input(title="Start date", defval=def_start_date, type=input.time)
end_time    = input(title="End date", defval=def_end_date, type=input.time)
// RSI
src         = input(title="Source", defval=close, type=input.source)
rsi_length  = input(title="RSI Length", defval=def_rsi_length, minval=1, type=input.integer)
overbought_threshold = input(title="Overbought threshold", defval=def_overbought_value, type=input.float)
oversold_threshold   = input(title="Oversold threshold", defval=def_oversold_value, type=input.float)
// Moving average
slow_ma_length = input(title="Slow MA length", defval=def_slow_ma_length, type=input.integer)
fast_ma_length = input(title="Fast MA length", defval=def_fast_ma_length, type=input.integer)
ma_choice = input(title="MA choice", defval="EMA", options=["SMA", "EMA"])
// Input ticker
tick   = input(title="Ticker size", defval=def_tick, type=input.float)
filter = input(title="Trend Filter", defval=def_filter, type=input.bool)
// Trailing stop (%)
ts_rate = input(title="Trailing Stop %", defval=def_trailing_stop, type=input.float)


//***********
// RSI
//***********
// Calculate RSI
up   = rma(max(change(src), 0), rsi_length)
down = rma(-min(change(src), 0), rsi_length)
rsi = (down == 0 ? 100 : (up == 0 ? 0 : 100-100/(1+up/down)))


//***********
// Moving averages
//***********
slow_ma = (ma_choice == "SMA" ? sma(close, slow_ma_length) : ema(close, slow_ma_length))
fast_ma = (ma_choice == "SMA" ? sma(close, fast_ma_length) : ema(close, fast_ma_length))
// Show the moving averages
plot(slow_ma, color=color.white,  title="Slow MA")
plot(fast_ma, color=color.yellow, title="Fast MA")


//***********
// Strategy
//***********
if true
    // Determine the entry conditions (only market entry and market exit conditions)
    // Long position
    ConditionEntryL := (filter == true ? (fast_ma > slow_ma and close > slow_ma and rsi < oversold_threshold) : (fast_ma > slow_ma and rsi < oversold_threshold))
    // Short position
    ConditionEntryS := (filter == true ? (fast_ma < slow_ma and close < slow_ma and rsi > overbought_threshold) : (fast_ma < slow_ma and rsi > overbought_threshold))
   
    // Calculate the trailing stop
    ts_calc = close * (1/tick) * ts_rate * 0.01

    // Submit the entry orders and the exit orders
    // Long position
    if ConditionEntryL
        strategy.entry("RSI Long", strategy.long)
    // Exit from a long position
    strategy.exit("Exit Long", "RSI Long", trail_points=0, trail_offset=ts_calc)

    // Short position 
    if ConditionEntryS
        strategy.entry("RSI Short", strategy.short)
    // Exit from a short position
    strategy.exit("Exit Short", "RSI Short", trail_points=0, trail_offset=ts_calc)

// Highlights long conditions
bgcolor (ConditionEntryL ? color.navy : na, transp=60, offset=1, editable=true, title="Long position band")
// Highlights short conditions
bgcolor (ConditionEntryS ? color.olive : na, transp=60, offset=1, editable=true, title="Short position band")


もっと