A estratégia é denominada
A lógica central desta estratégia é usar os indicadores RSI e ZigZag para determinar a tendência do preço. Especificamente, o indicador RSI julga se o preço está sobrecomprado ou sobrevendido. O indicador ZigZag detecta se o preço tem um pico percentual significativo. Quando ambos os indicadores dão sinais de negociação simultaneamente, determinamos que há uma inversão de tendência para uma posição de contrapartida.
Para o indicador RSI, definimos a linha de supercompra em 75 e a linha de supervenda em 25. Quando o RSI sobe de abaixo de 25 para acima de 25, é considerado uma reversão de supervenda para alta. Quando o RSI cai de acima de 75 para abaixo de 75, indica uma reversão de alta para supervenda.
Para o indicador ZigZag, definimos o limiar do pico de preço para 1% em mudança percentual. Quando o preço faz um pico superior a 1% em amplitude, a linha ZigZag dará um sinal. Combinado com o julgamento da tendência, podemos identificar inversões de tendência.
Quando ambos os indicadores dão sinais, se a tendência anterior é otimista e agora o RSI é sobrecomprado enquanto o ZigZag mostra picos de preços, determinamos que o preço está em cima e pode considerar o curto.
A maior vantagem desta estratégia é a melhoria da qualidade do sinal através da combinação de dois indicadores. Um único indicador tende a dar muitos sinais falsos. Mas esta estratégia usa RSI e ZigZag para verificação, filtrando muitos sinais falsos e melhorando a taxa de vitória.
Outro ponto forte é o ajuste flexível de parâmetros. Os parâmetros RSI e ZigZag são personalizáveis de acordo com diferentes condições de mercado para melhores resultados. Isso traz grande adaptabilidade à estratégia.
O principal risco são os sinais incorretos dos indicadores. Apesar da validação de indicadores duplos, ainda pode haver falhas durante a alta volatilidade levando a erros de negociação.
Para reduzir os riscos, podemos encurtar o período de detenção da posição para uma parada de perda oportuna. A otimização de parâmetros também é muito importante, atendendo às características do mercado. A intervenção manual pode ser necessária quando confrontado com condições anormais do mercado.
A estratégia pode ser melhorada pelos seguintes aspectos:
Adicione mais indicadores como KDJ e MACD para julgamento combinado para filtrar mais sinais.
Introduzir algoritmos de aprendizagem automática para otimização automática de parâmetros adaptados às alterações do mercado.
Construir um mecanismo adaptativo de stop loss com proteção dinâmica baseada na volatilidade do mercado.
Otimizar o dimensionamento das posições com base nos pontos fortes da tendência.
Estabelecer estratégias alternativas para alternar automaticamente em mercados não comuns.
Em resumo, esta é uma estratégia típica de tendência. A ideia central é identificar inversões de tendência usando indicadores RSI e ZigZag em combinação. A vantagem reside na melhoria da qualidade do sinal através da filtragem de indicadores duplos. Os riscos de falha do indicador precisam ser totalmente considerados e a estratégia deve ser continuamente melhorada através de ajuste de parâmetros, otimização de stop loss, dimensionamento de posição e assim por diante.
/*backtest start: 2024-01-22 00:00:00 end: 2024-02-21 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © SoftKill21 //@version=4 strategy("Crypto ZigZag RSI strategy 15min",overlay=true) length =input(5, title="RSI Length") overSold = input(25) overBought= input(75) p =close vrsi = rsi(p, length) var bool long = na var bool short = na long :=crossover(vrsi,overSold) short := crossunder(vrsi,overBought) var float last_open_long = na var float last_open_short = na last_open_long := long ? close : nz(last_open_long[1]) last_open_short := short ? close : nz(last_open_short[1]) entry_value =last_open_long entry_value1=last_open_short // ZZPercent = input(1, title="Minimum % Change", type=input.float) r1Level=entry_value s1Level=entry_value1 trend = 0 trend := na(trend[1]) ? 1 : trend[1] LL = 0.0 LL := na(LL[1]) ? s1Level : LL[1] HH = 0.0 HH := na(HH[1]) ?r1Level : HH[1] Pi = ZZPercent * 0.01 zigzag = float(na) if trend > 0 if r1Level >= HH HH := r1Level HH else if s1Level < HH * (1 - Pi) zigzag :=r1Level[1] trend := -1 LL := s1Level LL else if s1Level <= LL LL := s1Level LL else if r1Level > LL * (1 + Pi) zigzag := s1Level[1] trend := 1 HH := s1Level HH shortc=crossunder(trend,0) longc=crossover(trend,0) longa =input(true) shorta=input(false) if(longa) strategy.entry("long",1,when=longc) strategy.close("long",when=shortc) if(shorta) strategy.entry("short",0,when=shortc) strategy.close("long",when=longc)