
La estrategia es un sistema de comercio cuantitativo basado en la teoría de la regresión de la media, combinando la banda de Brin, el indicador RSI y el mecanismo de stop loss dinámico ATR. La estrategia realiza operaciones mediante la identificación de situaciones extremas en las que los precios se desvían de la media, cuando los precios tocan la banda de Brin y el RSI se encuentra en la zona de sobreventa, y cuando los precios tocan la banda de Brin y el RSI se encuentra en la zona de sobreventa.
La estrategia utiliza 20 ciclos de la banda de Brin como indicador principal para determinar la tendencia, el múltiplo de diferencia estándar es de 2,0 para determinar el límite superior y inferior de la fluctuación de los precios. Al mismo tiempo, se introduce el RSI de 14 ciclos como indicador auxiliar, el RSI inferior a 30 es considerado como una venta excesiva y el RSI superior a 70 es considerado como una venta excesiva. Cuando el precio cae por debajo de la banda de Brin y el RSI es inferior a 30, el sistema emite una señal de venta excesiva, lo que indica que el mercado puede estar más vendido; cuando el precio se rompe en la banda de Brin y el RSI es superior a 70, el sistema emite una señal de venta excesiva.
La estrategia, a través de la aplicación combinada de las bandas de Brin y el RSI, construye un sistema de comercio de retorno de la media completa. La introducción del stop loss dinámico ATR controla el riesgo de manera efectiva, lo que hace que la estrategia tenga buenas características de ganancias de riesgo. Aunque hay cierto espacio para la optimización, la idea general del diseño es clara y práctica.
/*backtest
start: 2024-11-19 00:00:00
end: 2024-11-26 00:00:00
period: 15m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("SOL/USDT Mean Reversion Strategy", overlay=true)
// Input parameters
length = input(20, "Bollinger Band Length")
std_dev = input(2.0, "Standard Deviation")
rsi_length = input(14, "RSI Length")
rsi_oversold = input(30, "RSI Oversold")
rsi_overbought = input(70, "RSI Overbought")
// Calculate indicators
[middle, upper, lower] = ta.bb(close, length, std_dev)
rsi = ta.rsi(close, rsi_length)
// Entry conditions
long_entry = close < lower and rsi < rsi_oversold
short_entry = close > upper and rsi > rsi_overbought
// Exit conditions
long_exit = close > middle or rsi > rsi_overbought
short_exit = close < middle or rsi < rsi_oversold
// Strategy execution
if (long_entry)
strategy.entry("Long", strategy.long)
if (short_entry)
strategy.entry("Short", strategy.short)
if (long_exit)
strategy.close("Long")
if (short_exit)
strategy.close("Short")
// Stop loss and take profit
atr = ta.atr(14)
strategy.exit("Long SL/TP", "Long", stop=strategy.position_avg_price - 2*atr, limit=strategy.position_avg_price + 3*atr)
strategy.exit("Short SL/TP", "Short", stop=strategy.position_avg_price + 2*atr, limit=strategy.position_avg_price - 3*atr)
// Plot indicators
plot(middle, color=color.yellow, title="BB Middle")
plot(upper, color=color.red, title="BB Upper")
plot(lower, color=color.green, title="BB Lower")
// Plot entry and exit points
plotshape(long_entry, title="Long Entry", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(short_entry, title="Short Entry", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)
plotshape(long_exit, title="Long Exit", location=location.abovebar, color=color.orange, style=shape.circle, size=size.small)
plotshape(short_exit, title="Short Exit", location=location.belowbar, color=color.orange, style=shape.circle, size=size.small)