
La estrategia utiliza 7 indicadores RSI de diferentes períodos para juzgar la tendencia del mercado, para establecer posiciones en la cuadrícula en caso de que el indicador RSI se mueva, para lograr un comercio en la cuadrícula de alta eficiencia. El nombre de la estrategia se toma de la Cuadrícula de la Estrategia de Comercio de la Cuadrícula RSI de Multi-Periodo, abreviada como Cuadrícula de la Estrategia de Cuadrícula RSI de MPRSI.
La estrategia utiliza indicadores RSI de 7 períodos diferentes: 1 minuto, 5 minutos, 15 minutos, 30 minutos, 1 hora, 2 horas y 1 día. Se genera una señal de compra cuando los 7 indicadores RSI están a la vez por debajo de la línea de sobreventa; se genera una señal de venta cuando los 7 indicadores RSI están a la vez por encima de la línea de sobreventa.
De acuerdo con las señales de compra y venta, establezca 20 pedidos con un intervalo de precios porcentual fijo cerca del precio actual. Por ejemplo, si el precio de la construcción del almacén es de 100 dólares, el intervalo de pedidos es de 2%, el precio de los pedidos es de 98 dólares, 96 dólares … hasta 60 dólares.
Cuando el precio toque un precio de pedido, la operación establece una posición. Cuando es rentable, se detiene con el porcentaje de parada establecido.
La combinación de múltiples indicadores para juzgar las tendencias del mercado evita la distorsión. Los 7 ciclos cubren los cambios de tendencias a corto y mediano plazo y juzgan con precisión.
El indicador RSI tiene la capacidad de juzgar de forma fiable sobrecompra y venta, evitando que las posiciones sigan a los altos y bajos.
El pedido de la red es eficiente para la construcción de almacenes, evitando la caída de la persecución. En la composición de la situación, se optimizan los costos de construcción de almacenes en lotes.
La configuración de un Stop Loss para ayudar a la administración de fondos y reducir el riesgo de pérdidas en situaciones extremas.
Las fuertes fluctuaciones de los precios pueden penetrar en la red. La solución es establecer un espacio razonable entre la red y agregar capital de flujo.
El punto de parada demasiado cercano puede aumentar los puntos de deslizamiento innecesarios. La solución es establecer un punto de parada razonable en función de la volatilidad del mercado.
Algunos indicadores RSI pueden generar señales erróneas. La solución es filtrar algunos indicadores RSI de períodos específicos.
Se pueden probar diferentes combinaciones de parámetros y otros indicadores para juzgar la lógica, optimizar las estrategias de apertura de posición y de parada de pérdidas.
Se puede ajustar automáticamente el espacio de la rejilla en combinación con el indicador de frecuencia de oscilación. Amplía el espacio cuando hay una oscilación alta y reduce el espacio cuando hay una oscilación baja.
Se puede agregar un módulo de administración de fondos para ajustar la cantidad máxima de posesión, el espacio entre las rejillas y otros parámetros según la dinámica de los fondos de la cuenta.
La estrategia integra indicadores RSI de varios períodos de tiempo para determinar la tendencia del mercado y establecer posiciones de la red de manera eficiente en caso de movimientos de mercado. La estrategia tiene múltiples ventajas, como la optimización de costos, el stop loss y el control de riesgos, y es adecuada para aquellos inversores que desean aprovechar el arbitraje de los movimientos de mercado y tienen cierta capacidad de soportar el riesgo.
/*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))