この戦略は,RSIインディケーターとトライリングストップロスのベースで
この戦略のエントリーシグナルは主にRSIインジケーターとMAクロスオーバーによって決定される.RSIパラメータは,2つの期間で設定され,逆転機会のために急激な買い過ぎと売り過ぎの状況を迅速に把握する.急速なMAと遅いMAはそれぞれ50および200期に設定され,トレンド方向性を特定する.具体的には,エントリーロジックは:
長期入場:高速MAは緩やかなMAを超越し,価格は緩やかなMAを超越し,RSIは過売値を下回る (デフォルト10%). 短いエントリー: 急速なMAは緩やかなMAを下回り,価格は緩やかなMAを下回り,RSIは過剰購入レベル (デフォルト90%) を上回る.
また,戦略にはオプションの波動性フィルターがあります. これは,速いMAsと遅いMAsの傾斜間の差を計算します.差が限界を超えるとのみポジションが開かれます.この目的は,市場の変動中に明確な方向性がないときのポジション開設を避けるためです.
出口側では,ストップロスの割合を使用する.入力パーセントに基づいて,ストップロスの価格をティックのサイズと組み合わせて計算し,ストップロスを動的に調整する.
この戦略の主な利点は以下の通りです.
この戦略にはいくつかのリスクもあります:
リスクの最適化方向は次のとおりです.
この戦略の最適化方向は以下の通りである.
一般的に,これは戦略をフォローする比較的安定したトレンドである.ダブル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")