Esta estrategia utiliza 7 indicadores de RSI con diferentes marcos de tiempo para determinar las tendencias del mercado y establecer posiciones de red para el comercio de red eficiente cuando los indicadores de RSI están fluctuando.
La estrategia utiliza 7 indicadores RSI con diferentes marcos de tiempo (1 minuto, 5 minutos, 15 minutos, 30 minutos, 1 hora, 2 horas y 1 día). Cuando todos los 7 indicadores RSI son simultáneamente más bajos que la línea de sobrecompra, se genera una señal de compra. Cuando todos los 7 indicadores RSI son simultáneamente más altos que la línea de sobreventa, se genera una señal de venta.
Basándose en las señales de compra y venta, 20 órdenes con intervalos de precio porcentual fijos se colocan alrededor del precio actual. Por ejemplo, si el precio de entrada es de $100 y el intervalo entre las órdenes es de 2%, los precios de la orden serían de $98, $96... hasta $60.
Cuando el precio alcanza uno de los precios de la orden, se cumple una orden y se establece una posición.
El uso de múltiples indicadores evita una interpretación errónea de la tendencia del mercado. Los 7 marcos de tiempo cubren los cambios de tendencia a corto y mediano plazo para juicios precisos.
El indicador RSI identifica con fiabilidad los niveles de sobrecompra y sobreventa, evitando los máximos de compra y los mínimos de venta.
Las órdenes de la red entran en posiciones de manera eficiente, evitando perseguir los alzas y declives.
Los ajustes de toma de ganancias y stop loss ayudan a gestionar el riesgo y reducen la exposición a pérdidas durante movimientos extremos.
Los movimientos bruscos de los precios podrían penetrar en la cuadrícula. Esto puede abordarse estableciendo razonablemente intervalos de cuadrícula y agregando márgenes.
Las pérdidas de parada colocadas demasiado cerca pueden incurrir en costos de deslizamiento innecesarios.
Algunos indicadores de RSI pueden generar señales incorrectas.
Se pueden probar diferentes combinaciones de parámetros y lógicas de juicio alternativas para refinar las estrategias de entrada y salida.
Incorporar métricas de volatilidad para ajustar automáticamente los intervalos de la red, con intervalos más amplios durante entornos de mayor volatilidad.
Añadir módulos de gestión de capital para alterar dinámicamente el tamaño máximo de las posiciones, los intervalos de la red, etc., en función del patrimonio de la cuenta.
Esta estrategia combina indicadores de RSI de varios marcos de tiempo para determinar las tendencias del mercado, estableciendo de manera eficiente posiciones de red durante los mercados de rango. Las ventajas de la optimización de costos, la obtención de ganancias, la reducción de pérdidas y el control de riesgos lo hacen adecuado para los operadores que buscan capitalizar en los mercados de rango mientras toleran riesgos definidos.
/*backtest start: 2023-11-15 00:00:00 end: 2023-11-22 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] args: [["MinLot",0.001,358374]] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © rrolik66 //@version=4 strategy(title="7-RSI strategy", overlay=true) // inputs src = input(close, "Source RSI", type = input.source) bot_res = input(title="Bot period", type=input.resolution, defval="1") srcin_bot = input(ohlc4, "Source Bot", type = input.source) src_bot = security(syminfo.tickerid, bot_res, srcin_bot) tradeDirection = input(title="Trade Direction", type=input.string, options=["Long Bot", "Short Bot"], defval="Long Bot") rsi1_res = input(title="RSI-1 period", type=input.resolution, defval="1", group="indicators") rsi1_Len = input(14, minval=1, title="RSI-1 Length", group="indicators") rsi2_res = input(title="RSI-2 period", type=input.resolution, defval="5", group="indicators") rsi2_Len = input(14, minval=1, title="RSI-2 Length", group="indicators") rsi3_res = input(title="RSI-3 period", type=input.resolution, defval="15", group="indicators") rsi3_Len = input(14, minval=1, title="RSI-3 Length", group="indicators") rsi4_res = input(title="RSI-4 period", type=input.resolution, defval="30", group="indicators") rsi4_Len = input(14, minval=1, title="RSI-4 Length", group="indicators") rsi5_res = input(title="RSI-5 period", type=input.resolution, defval="60", group="indicators") rsi5_Len = input(14, minval=1, title="RSI-5 Length", group="indicators") rsi6_res = input(title="RSI-6 period", type=input.resolution, defval="120", group="indicators") rsi6_Len = input(14, minval=1, title="RSI-6 Length", group="indicators") rsi7_res = input(title="RSI-7 period", type=input.resolution, defval="1D", group="indicators") rsi7_Len = input(14, minval=1, title="RSI-7 Length", group="indicators") longProfitPerc = input(title="Long Bot Take Profit (%)", type=input.float, minval=0.0, step=0.05, defval=0.5, group="Long Bot") * 0.01 st_long_orders = input(title="Long Bot Step orders (%)", type=input.float, minval=0.0, step=0.1, defval=2.0, group="Long Bot") * 0.01 rsi1_low = input(100, title="RSI-1 <", group="Long Bot") rsi2_low = input(100, title="RSI-2 <", group="Long Bot") rsi3_low = input(100, title="RSI-3 <", group="Long Bot") rsi4_low = input(100, title="RSI-4 <", group="Long Bot") rsi5_low = input(100, title="RSI-5 <", group="Long Bot") rsi6_low = input(100, title="RSI-6 <", group="Long Bot") rsi7_low = input(100, title="RSI-7 <", group="Long Bot") shortProfitPerc = input(title="Short Bot Take Profit (%)", type=input.float, minval=0.0, step=0.05, defval=0.5, group="Short Bot") * 0.01 st_short_orders = input(title="Short Bot Step orders (%)", type=input.float, minval=0.0, step=0.1, defval=2.0, group="Short Bot") * 0.01 rsi1_up = input(0, title="RSI-1 >", group="Short Bot") rsi2_up = input(0, title="RSI-2 >", group="Short Bot") rsi3_up = input(0, title="RSI-3 >", group="Short Bot") rsi4_up = input(0, title="RSI-4 >", group="Short Bot") rsi5_up = input(0, title="RSI-5 >", group="Short Bot") rsi6_up = input(0, title="RSI-6 >", group="Short Bot") rsi7_up = input(0, title="RSI-7 >", group="Short Bot") //indicators rsi1 = rsi(src, rsi1_Len) rsi1_sec = security(syminfo.tickerid, rsi1_res, rsi1) rsi2 = rsi(src, rsi2_Len) rsi2_sec = security(syminfo.tickerid, rsi2_res, rsi2) rsi3 = rsi(src, rsi3_Len) rsi3_sec = security(syminfo.tickerid, rsi3_res, rsi3) rsi4 = rsi(src, rsi4_Len) rsi4_sec = security(syminfo.tickerid, rsi4_res, rsi4) rsi5 = rsi(src, rsi5_Len) rsi5_sec = security(syminfo.tickerid, rsi5_res, rsi5) rsi6 = rsi(src, rsi6_Len) rsi6_sec = security(syminfo.tickerid, rsi6_res, rsi6) rsi7 = rsi(src, rsi7_Len) rsi7_sec = security(syminfo.tickerid, rsi7_res, rsi7) //RSI rsi1_up_signal = rsi1_sec > rsi1_up rsi1_low_signal = rsi1_sec < rsi1_low rsi2_up_signal = rsi2_sec > rsi2_up rsi2_low_signal = rsi2_sec < rsi2_low rsi3_up_signal = rsi3_sec > rsi3_up rsi3_low_signal = rsi3_sec < rsi3_low rsi4_up_signal = rsi4_sec > rsi4_up rsi4_low_signal = rsi4_sec < rsi4_low rsi5_up_signal = rsi5_sec > rsi5_up rsi5_low_signal = rsi5_sec < rsi5_low rsi6_up_signal = rsi6_sec > rsi6_up rsi6_low_signal = rsi6_sec < rsi6_low rsi7_up_signal = rsi7_sec > rsi7_up rsi7_low_signal = rsi7_sec < rsi7_low //Buy & Sell Buy = rsi1_low_signal and rsi2_low_signal and rsi3_low_signal and rsi4_low_signal and rsi5_low_signal and rsi6_low_signal and rsi7_low_signal Sell = rsi1_up_signal and rsi2_up_signal and rsi3_up_signal and rsi4_up_signal and rsi5_up_signal and rsi6_up_signal and rsi7_up_signal // input into trading conditions longOK = (tradeDirection == "Long Bot") shortOK = (tradeDirection == "Short Bot") // in entry orders price longEntryPrice1 = src_bot * (1 - (st_long_orders)) longEntryPrice2 = src_bot * (1 - (st_long_orders*2)) longEntryPrice3 = src_bot * (1 - (st_long_orders*3)) longEntryPrice4 = src_bot * (1 - (st_long_orders*4)) longEntryPrice5 = src_bot * (1 - (st_long_orders*5)) longEntryPrice6 = src_bot * (1 - (st_long_orders*6)) longEntryPrice7 = src_bot * (1 - (st_long_orders*7)) longEntryPrice8 = src_bot * (1 - (st_long_orders*8)) longEntryPrice9 = src_bot * (1 - (st_long_orders*9)) longEntryPrice10 = src_bot * (1 - (st_long_orders*10)) longEntryPrice11 = src_bot * (1 - (st_long_orders*11)) longEntryPrice12 = src_bot * (1 - (st_long_orders*12)) longEntryPrice13 = src_bot * (1 - (st_long_orders*13)) longEntryPrice14 = src_bot * (1 - (st_long_orders*14)) longEntryPrice15 = src_bot * (1 - (st_long_orders*15)) longEntryPrice16 = src_bot * (1 - (st_long_orders*16)) longEntryPrice17 = src_bot * (1 - (st_long_orders*17)) longEntryPrice18 = src_bot * (1 - (st_long_orders*18)) longEntryPrice19 = src_bot * (1 - (st_long_orders*19)) shortEntryPrice1 = src_bot * (1 + st_short_orders) shortEntryPrice2 = src_bot * (1 + (st_short_orders*2)) shortEntryPrice3 = src_bot * (1 + (st_short_orders*3)) shortEntryPrice4 = src_bot * (1 + (st_short_orders*4)) shortEntryPrice5 = src_bot * (1 + (st_short_orders*5)) shortEntryPrice6 = src_bot * (1 + (st_short_orders*6)) shortEntryPrice7 = src_bot * (1 + (st_short_orders*7)) shortEntryPrice8 = src_bot * (1 + (st_short_orders*8)) shortEntryPrice9 = src_bot * (1 + (st_short_orders*9)) shortEntryPrice10 = src_bot * (1 + (st_short_orders*10)) shortEntryPrice11 = src_bot * (1 + (st_short_orders*11)) shortEntryPrice12 = src_bot * (1 + (st_short_orders*12)) shortEntryPrice13 = src_bot * (1 + (st_short_orders*13)) shortEntryPrice14 = src_bot * (1 + (st_short_orders*14)) shortEntryPrice15 = src_bot * (1 + (st_short_orders*15)) shortEntryPrice16 = src_bot * (1 + (st_short_orders*16)) shortEntryPrice17 = src_bot * (1 + (st_short_orders*17)) shortEntryPrice18 = src_bot * (1 + (st_short_orders*18)) shortEntryPrice19 = src_bot * (1 + (st_short_orders*19)) // take profit price longExitPrice = strategy.position_avg_price * (1 + longProfitPerc) shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc) // take profit values for confirmation plot(series=(strategy.position_size > 0) ? longExitPrice : na, color=color.green, style=plot.style_circles, linewidth=3, title="Long Take Profit") plot(series=(strategy.position_size < 0) ? shortExitPrice : na, color=color.red, style=plot.style_circles, linewidth=3, title="Short Take Profit") // entry orders if (strategy.position_size == 0) strategy.order(id="Long0", long=true, limit=src_bot, when=longOK and Buy) strategy.order(id="Long1", long=true, limit=longEntryPrice1, when=longOK and Buy) strategy.order(id="Long2", long=true, limit=longEntryPrice2, when=longOK and Buy) strategy.order(id="Long3", long=true, limit=longEntryPrice3, when=longOK and Buy) strategy.order(id="Long4", long=true, limit=longEntryPrice4, when=longOK and Buy) strategy.order(id="Long5", long=true, limit=longEntryPrice5, when=longOK and Buy) strategy.order(id="Long6", long=true, limit=longEntryPrice6, when=longOK and Buy) strategy.order(id="Long7", long=true, limit=longEntryPrice7, when=longOK and Buy) strategy.order(id="Long8", long=true, limit=longEntryPrice8, when=longOK and Buy) strategy.order(id="Long9", long=true, limit=longEntryPrice9, when=longOK and Buy) strategy.order(id="Long10", long=true, limit=longEntryPrice10, when=longOK and Buy) strategy.order(id="Long11", long=true, limit=longEntryPrice11, when=longOK and Buy) strategy.order(id="Long12", long=true, limit=longEntryPrice12, when=longOK and Buy) strategy.order(id="Long13", long=true, limit=longEntryPrice13, when=longOK and Buy) strategy.order(id="Long14", long=true, limit=longEntryPrice14, when=longOK and Buy) strategy.order(id="Long15", long=true, limit=longEntryPrice15, when=longOK and Buy) strategy.order(id="Long16", long=true, limit=longEntryPrice16, when=longOK and Buy) strategy.order(id="Long17", long=true, limit=longEntryPrice17, when=longOK and Buy) strategy.order(id="Long18", long=true, limit=longEntryPrice18, when=longOK and Buy) strategy.order(id="Long19", long=true, limit=longEntryPrice19, when=longOK and Buy) if (strategy.position_size == 0) strategy.order(id="Short0", long=false, limit=src_bot, when=shortOK and Sell) strategy.order(id="Short1", long=false, limit=shortEntryPrice1, when=shortOK and Sell) strategy.order(id="Short2", long=false, limit=shortEntryPrice2, when=shortOK and Sell) strategy.order(id="Short3", long=false, limit=shortEntryPrice3, when=shortOK and Sell) strategy.order(id="Short4", long=false, limit=shortEntryPrice4, when=shortOK and Sell) strategy.order(id="Short5", long=false, limit=shortEntryPrice5, when=shortOK and Sell) strategy.order(id="Short6", long=false, limit=shortEntryPrice6, when=shortOK and Sell) strategy.order(id="Short7", long=false, limit=shortEntryPrice7, when=shortOK and Sell) strategy.order(id="Short8", long=false, limit=shortEntryPrice8, when=shortOK and Sell) strategy.order(id="Short9", long=false, limit=shortEntryPrice9, when=shortOK and Sell) strategy.order(id="Short10", long=false, limit=shortEntryPrice10, when=shortOK and Sell) strategy.order(id="Short11", long=false, limit=shortEntryPrice11, when=shortOK and Sell) strategy.order(id="Short12", long=false, limit=shortEntryPrice12, when=shortOK and Sell) strategy.order(id="Short13", long=false, limit=shortEntryPrice13, when=shortOK and Sell) strategy.order(id="Short14", long=false, limit=shortEntryPrice14, when=shortOK and Sell) strategy.order(id="Short15", long=false, limit=shortEntryPrice15, when=shortOK and Sell) strategy.order(id="Short16", long=false, limit=shortEntryPrice16, when=shortOK and Sell) strategy.order(id="Short17", long=false, limit=shortEntryPrice17, when=shortOK and Sell) strategy.order(id="Short18", long=false, limit=shortEntryPrice18, when=shortOK and Sell) strategy.order(id="Short19", long=false, limit=shortEntryPrice19, when=shortOK and Sell) // exit position based on take profit price if (strategy.position_size > 0) strategy.order(id="exit_Long", long=false, limit=longExitPrice, qty=strategy.position_size) if (strategy.position_size < 0) strategy.order(id="exit_Short", long=true, limit=shortExitPrice, qty=abs(strategy.position_size))