Esta estratégia identifica condições de mercado de sobrecompra e sobrevenda usando o indicador RSI para ficar curto em crossovers de baixa em zonas de sobrecompra e ficar longo em crossovers de alta em zonas de sobrevenda.
Os sinais de negociação desta estratégia são gerados com base em cruzamentos de alta / baixa do indicador RSI. O indicador RSI normalmente usa 30 como a linha de sobrevenda e 70 como a linha de sobrecompra. Quando a linha RSI cruza acima da linha de sobrevenda, um sinal de compra é gerado. Quando a linha RSI cruza abaixo da linha de sobrecompra, um sinal de venda é gerado. Com base nessa lógica, a estratégia identifica zonas de sobrecompra e sobrevenda e gera os sinais longos / curtos correspondentes.
Após a entrada de uma posição, a estratégia usa paradas percentual de trailing, atualizando continuamente o preço mais alto / mais baixo alcançado e trailing uma porcentagem fixa longe disso como o stop loss.
As vantagens desta estratégia incluem:
A utilização do RSI para identificar os níveis de sobrecompra/supervenda é uma técnica de negociação madura para capturar de forma fiável os pontos de virada do mercado.
O uso de crossovers bullish/bearish filtra alguns sinais falsos e torna a negociação mais confiável.
As paradas de tendência bloqueiam os lucros tanto quanto possível, enquanto também têm paradas rápidas para conter perdas por negociação.
Os níveis fixos de TP/SL também controlam eficazmente o risco por transacção.
No geral, a lógica é simples e clara, fácil de entender e implementar, adequada para iniciantes.
Os riscos desta estratégia incluem:
Os sinais RSI podem ser falsos, com alta chance de falha do padrão, levando ao gatilho de stop loss.
O TP/SL fixo não pode adaptar-se à volatilidade do mercado, pode reduzir os lucros ou permitir perdas.
Percentagem de atraso apenas segue o preço mais alto / mais baixo, pode ser muito agressivo deixando lucros para trás.
O risco de sobreajuste como parâmetros poderia ser otimizado apenas para dados históricos.
Frequência elevada de transacções aumentando os custos de transacções e o deslizamento.
Possíveis formas de melhorar a estratégia:
Otimizar os parâmetros do RSI para melhores resultados.
Adicionar indicadores de filtro para maior precisão do sinal.
Previsão de prejuízos/benefícios adaptativos baseados na volatilidade do mercado.
Limitar a frequência do comércio para reduzir os custos de transacção.
Adicionar o tamanho da posição para limitar as perdas por transação.
Testes de regresso num período de tempo mais longo para testar a estabilidade.
Em resumo, esta é uma estratégia de reversão típica que usa o RSI para identificar sobrecompra/supervenda, com cruzamento touro/urso como sinais. Paradas de tendência e TP/SL fixos gerenciam o risco. A lógica é simples e fácil de implementar, adequada para iniciantes.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // LOVE JOY PEACE PATIENCE KINDNESS GOODNESS FAITHFULNESS GENTLENESS SELF-CONTROL // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // Author: © JoshuaMcGowan // Taken from https://www.tradingview.com/script/GbZGYi6l-Adding-some-essential-components-to-a-prebuilt-RSI-strategy/ // Just updated to compile in version 4. //@version=4 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(2100, "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=input.bool, defval=true) testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na bgcolor(testPeriodBackgroundColor, transp=97) testPeriod() => true /////////////// Component Code Stop /////////////// // Replace RSI Component, Long/Short, and Long Signal/Short Signal conditions with your trade setup components. ///////////// 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 // Update this with your setup. long = notna and crossover(vrsi, overSold) short = notna and crossunder(vrsi, overBought) last_long = 0 last_short = 0 last_long := long ? time : nz(last_long[1]) last_short := short ? time : nz(last_short[1]) // Update this to reflect your setup. long_signal = crossover(last_long, last_short) short_signal = crossover(last_short, last_long) float last_open_long_signal = 0 float last_open_short_signal = 0 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 = 0 last_short_signal = 0 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 float last_high = 0 float last_low = 0 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=color.red) // plot(short_call, color=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)