A ideia central desta estratégia é adicionar algumas regras de gerenciamento de negociação chave com base na estratégia RSI, incluindo stop loss, take profit, trailing stop loss e leverage tracking stop loss. Isso permite que a estratégia obtenha retornos mais altos durante os mercados de tendência e minimize as perdas durante os mercados variáveis em backtest.
A estratégia primeiro calcula o indicador RSI. Vai longo quando o RSI está abaixo do nível de sobrevenda e vai curto quando o RSI está acima do nível de sobrecompra.
Após um sinal longo ser acionado, o preço mais alto naquele momento é registrado como o ponto de referência de stop loss.
Após um sinal curto ser acionado, o preço mais baixo naquele momento é registrado como o ponto de referência de stop loss.
Ao mesmo tempo, são definidas distâncias fixas de take profit e stop loss. Se o preço atingir a distância take profit, take profit para fechar a posição. Se atingir a distância stop loss, feche a posição por stop loss.
Além disso, uma linha de stop loss de rastreamento de alavancagem é definida com base na alavancagem.
Ao seguir o preço mais alto durante as tendências de alta e o preço mais baixo durante as tendências de baixa, combinado com distâncias fixas de take profit e stop loss, podem ser alcançados retornos mais altos em mercados de tendência.
A maior vantagem desta estratégia é a introdução de múltiplas regras de gestão de negociação que controlam melhor os riscos, ao mesmo tempo em que aproveitam os pontos fortes da estratégia RSI.
Especificamente, as vantagens são:
O trailing stop loss pode seguir continuamente a tendência para obter lucros mais elevados durante os mercados de tendência.
Fixed take profit e stop loss bloqueiam alguns lucros e evitam que os lucros completos sejam eliminados quando a tendência se inverte.
O rastreamento de perdas de parada de alavancagem ajuda a evitar a expansão de perdas e controla o risco.
A combinação de vários métodos de stop loss pode exercer os seus pontos fortes em diferentes ambientes de mercado, melhorando a estabilidade geral da estratégia.
O ajustamento flexível dos parâmetros da estratégia adapta-se a diferentes instrumentos de negociação e ambientes de mercado.
A lógica fácil de entender facilita a verificação, otimização e aplicação.
Os principais riscos desta estratégia são:
A estratégia RSI em si tem alguns riscos, que podem desencadear stop loss.
Oscilações em torno de pontos de stop loss podem frequentemente desencadear stop loss.
A distância de lucro não pode bloquear completamente os lucros durante os mercados de tendência.
A distância fixa de stop loss pode ser muito pequena para evitar completamente as perdas.
A alavancagem excessiva leva a que a perda de parada esteja demasiado próxima do preço de entrada.
O período de ensaio posterior pode não representar plenamente as condições futuras do mercado, devendo ser implementado um controlo adequado dos riscos e testados diferentes períodos.
Os riscos acima podem ser mitigados através do ajuste de parâmetros, otimização de mecanismos de stop loss, controle de risco, etc. Mas nenhuma estratégia pode evitar completamente os riscos de mercado.
A estratégia pode ser ainda melhorada nos seguintes aspectos:
Otimizar os parâmetros do RSI para reduzir os negócios de serras e testar parâmetros ideais para diferentes mercados.
Tente outros indicadores como KD, MACD combinados com RSI para filtrar entradas.
Usar aprendizado de máquina para otimizar dinamicamente parâmetros de stop loss e take profit.
Teste mecanismos de stop loss mais complexos, como stop loss oscilante, stop loss médio, stop loss dinâmico, etc.
Otimizar a definição da alavancagem e estudar os impactos no controlo dos lucros e dos riscos.
Ajustar automaticamente os parâmetros com base nas mudanças do regime de mercado, como α-Dual Thrust.
Incorporar outros fatores para determinar a persistência da tendência, por exemplo, energia de volume.
Usar modelos de aprendizagem profunda para desenvolver formas de stop loss mais robustas e interpretáveis.
Testar dados de diferentes instrumentos e períodos de tempo para avaliar a robustez da estratégia.
Esta estratégia complementa a estratégia RSI com vários métodos de stop loss, dando pleno jogo aos efeitos duplos da stop loss em lucrar com tendências e controlar riscos. Ainda há um grande espaço para otimização. As ideias podem ser estendidas a mais estratégias e instrumentos de negociação.
/*backtest start: 2022-11-06 00:00:00 end: 2023-11-06 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("Adding some essential components to a prebuilt RSI strategy", overlay=true) /////////////// Component Code Start /////////////// testStartYear = input(2011, "Backtest Start Year") testStartMonth = input(8, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testStopYear = input(2016, "Backtest Stop Year") testStopMonth = input(9, "Backtest Stop Month") testStopDay = input(29, "Backtest Stop Day") // testStopDay = testStartDay + 1 testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0) // A switch to control background coloring of the test period testPeriodBackground = input(title="Color Background?", type=bool, defval=true) testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na bgcolor(testPeriodBackgroundColor, transp=97) testPeriod() => true /////////////// Component Code Stop /////////////// ///////////// RSI component ///////////// length = input( 14 ) overSold = input( 30 ) overBought = input( 70 ) price = close vrsi = rsi(price, length) notna = not na(vrsi) /////////////// STRATEGY /////////////// ts = input(99999, "Trailing Stop") / 100 tp = input(99999, "Take Profit") / 100 sl = input(99999, "Stop Loss") / 100 long = notna and crossover(vrsi, overSold) short = notna and crossunder(vrsi, overBought) last_long = long ? time : nz(last_long[1]) last_short = short ? time : nz(last_short[1]) long_signal = crossover(last_long, last_short) short_signal = crossover(last_short, last_long) last_open_long_signal = long_signal ? open : nz(last_open_long_signal[1]) last_open_short_signal = short_signal ? open : nz(last_open_short_signal[1]) last_long_signal = long_signal ? time : nz(last_long_signal[1]) last_short_signal = short_signal ? time : nz(last_short_signal[1]) in_long_signal = last_long_signal > last_short_signal in_short_signal = last_short_signal > last_long_signal last_high = not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1]) last_low = not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1]) long_ts = not na(last_high) and high <= (last_high - ts) //and high >= last_open_long_signal short_ts = not na(last_low) and low >= (last_low + ts) //and low <= last_open_short_signal long_tp = high >= (last_open_long_signal + tp) short_tp = low <= (last_open_short_signal - tp) long_sl = low <= (last_open_long_signal - sl) short_sl = high >= (last_open_short_signal + sl) leverage = input(200, "Leverage") long_call = last_open_long_signal - (0.8 + 0.2 * (1/leverage)) / leverage * last_open_long_signal short_call = last_open_short_signal + (0.78 + 0.2 * (1/leverage)) / leverage * last_open_short_signal long_call_signal = low <= long_call short_call_signal = high >= short_call if testPeriod() strategy.entry("Long", strategy.long, when=long_signal) strategy.entry("Short", strategy.short, when=short_signal) // plot(long_call, color=red) // plot(short_call, color=green) strategy.close("Long", when=long_call_signal) strategy.close("Short", when=short_call_signal) strategy.close("Long", when=long_tp) strategy.close("Short", when=short_tp) strategy.close("Long", when=long_sl) strategy.close("Short", when=short_sl) strategy.close("Long", when=long_ts) strategy.close("Short", when=short_ts)