
Esta estrategia se llama estrategia de seguimiento de la tendencia de stop loss basada en el indicador RSI. Utiliza el indicador RSI para determinar la situación de sobreventa y sobreventa, en combinación con el indicador MA rápido y lento para determinar la dirección de la tendencia y establecer las condiciones de entrada.
La estrategia se basa principalmente en el RSI y el MA para determinar el momento de entrada. El parámetro del RSI se establece en 2 períodos para determinar la superación de la superación. El MA lento se establece en 50 períodos y 200 períodos respectivamente para determinar la dirección de la tendencia. La lógica de entrada específica es:
Entrada múltiple: hacer más en el MA rápido que en el MA lento, y el precio es más alto que el MA lento, mientras que el RSI está por debajo de la zona de sobreventa (el 10% por defecto);
Entrada en blanco: baja el MA bajo el MA rápido y baja el MA lento, mientras que el RSI está por encima de la zona de sobrecompra (default 90%) y queda vacío.
Además, la estrategia también establece un filtro de fluctuación opcional. El filtro calcula el diferencial de pendiente de la MA a gran velocidad y abre las posiciones solo cuando el diferencial supera el umbral establecido. Su objetivo es evitar abrir posiciones sin una dirección clara durante los períodos de oscilación de los precios.
En la salida, la estrategia utiliza el porcentaje de seguimiento de la parada. De acuerdo con el porcentaje de la parada de la entrada, se calcula el precio de parada combinado con cada diferencia de salto, para lograr una parada de ajuste dinámico.
La estrategia tiene las siguientes ventajas:
La estrategia también tiene ciertos riesgos, que se reflejan en:
En relación con los riesgos mencionados, se puede optimizar en los siguientes aspectos:
La estrategia se puede optimizar en los siguientes aspectos:
Esta estrategia es una estrategia de seguimiento de tendencias más estable en general. Combina el juicio de los indicadores dobles RSI y MA, garantizando cierta estabilidad, al mismo tiempo que captura oportunidades de reversión de tendencias más claras. Al mismo tiempo, la configuración de filtros de volatilidad evita parte del riesgo y el método de parada porcentual también puede controlar eficazmente las pérdidas individuales.
/*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")