
A estratégia usa 7 diferentes períodos de RSI para avaliar a tendência do mercado, estabelecendo posições de grade em caso de oscilação do RSI, permitindo uma negociação de grade eficiente. O nome da estratégia é o Multi-Period RSI Grid Trading Strategy, ou MPRSI Grid Strategy.
A estratégia usa indicadores RSI de 7 períodos diferentes: 1 minuto, 5 minutos, 15 minutos, 30 minutos, 1 hora, 2 horas e 1 dia. Um sinal de compra é gerado quando todos os 7 indicadores RSI estão abaixo da linha de superaquecimento ao mesmo tempo. Um sinal de venda é gerado quando todos os 7 indicadores RSI estão acima da linha de superaquecimento ao mesmo tempo.
De acordo com os sinais de compra e venda, estabeleça 20 pedidos com um intervalo de preço porcentual fixo próximo ao preço atual. Por exemplo, com um preço de construção de estoque de US \( 100 e um intervalo de pedidos de 2%, o preço do pedido é de US \) 98, US \( 96 ... até US \) 60.
Quando o preço toca um determinado preço de pedido, a troca cria uma posição. Quando é lucrativo, o bloqueio é bloqueado com a porcentagem de bloqueio definida.
A combinação de indicadores múltiplos julga as tendências do mercado, evita distorções. Os 7 ciclos cobrem as mudanças de tendências de curto e médio prazo, julgando com precisão.
O indicador RSI tem a capacidade de julgar de forma confiável sobre compras e vendas, evitando a construção de posições que perseguem a alta e a baixa.
O pedido de grade é eficiente para a construção de armazéns, evitando a queda da procura.
A instalação de um Stop Loss para ajudar na gestão de fundos e reduzir o risco de perdas em situações extremas.
A solução é estabelecer um intervalo razoável entre as grades e adicionar fundos em circulação.
A aproximação do ponto de parada pode aumentar o deslizamento desnecessário. A solução é definir um ponto de parada razoável com base na volatilidade do mercado.
Alguns indicadores RSI podem gerar sinais de erro. A solução é filtrar alguns indicadores RSI de determinados períodos.
É possível testar diferentes combinações de parâmetros e outros indicadores para julgar a lógica e otimizar a estratégia de construção de posições e stop loss.
Pode ser combinado com o indicador de taxa de flutuação para ajustar automaticamente o intervalo da grade. Aumente o intervalo quando há alta flutuação e reduza o intervalo quando há baixa flutuação.
Pode ser adicionado um módulo de gestão de fundos, para ajustar o tamanho máximo de posse de acordo com a dinâmica dos fundos da conta, o intervalo entre as grades e outros parâmetros.
A estratégia integra um indicador RSI de vários períodos de tempo para determinar a tendência do mercado e efetivamente estabelecer posições de grade em situações de turbulência. A estratégia possui múltiplos benefícios, como otimização de custos, stop loss e controle de risco.
/*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))