Esta estratégia utiliza médias móveis adaptativas multicíclicas e indicadores de avaliação de risco em ziguezague, combinados com pontos de faseamento na operação do mercado, para prever tendências e sinais de negociação de saída.
A lógica principal da estratégia é dividida em duas linhas principais. A primeira linha principal utiliza médias móveis adaptativas nAMA com diferentes parâmetros para construir um sistema de julgamento de filtragem de ciclo múltiplo. A segunda linha principal utiliza o sistema de avaliação de risco zigzag com diferentes parâmetros para construir um sistema de avaliação de risco de ciclo múltiplo. Finalmente, as duas linhas principais são combinadas. Quando a linha de ciclo curto excede a linha de ciclo longo, um sinal de compra é gerado. Quando a linha de ciclo curto está abaixo da linha de ciclo longo, um sinal de venda é gerado.
Especificamente, a primeira linha principal define médias móveis adaptativas de 10 ciclos e 4, 24 parâmetros, respectivamente. A segunda linha principal define linhas de avaliação de risco em ziguezague de 7 ciclos e 4, 300 parâmetros, respectivamente. Finalmente, a linha de 10 ciclos na primeira linha principal é comparada com a linha de 31 ciclos na segunda linha principal para formar um sinal de negociação. Quando a linha de 10 ciclos sobe acima da linha de 31 ciclos, um sinal de compra é gerado. Quando a linha de 10 ciclos cai abaixo da linha de 31 ciclos, um sinal de venda é gerado.
Além disso, a estratégia também define um módulo de confirmação de volume-preço. Os sinais de negociação só são válidos quando o volume de negociação é maior que o volume médio de negociação de 6 ciclos. Isso pode filtrar sinais falsos até certo ponto. Finalmente, a estratégia desenha pontos de fase de diferentes níveis de ciclo como sinais de referência.
A maior vantagem desta estratégia é a aplicação de estruturas adaptativas multiciclos, que podem ajustar de forma adaptativa os ciclos de acordo com as condições do mercado para ajustar dinamicamente os ciclos.
Além disso, a estratégia utiliza uma filtragem conjunta de vários ciclos de sistemas de avaliação de risco em ziguezague para controlar efetivamente os riscos de negociação e evitar o estabelecimento de posições durante as fases de alto risco.
O maior risco desta estratégia é que requer o mesmo julgamento direcional de várias linhas de ciclo, de modo que a capacidade de capturar mercados de reversão de curto prazo é pobre.
Além disso, a fase do ciclo principal do sistema de avaliação do risco da média móvel adaptativa e do zigzag é relativamente curta em comparação com o mercado mais amplo e há algum atraso devido ao impulso de níveis mais longos.
Encurtar os principais parâmetros de ciclo da linha de avaliação de risco da média móvel adaptativa e da linha de avaliação de risco em ziguezague para 5 ciclos e 20 ciclos, a fim de aumentar a captação da inversão de mercado a curto prazo.
Aumentar os parâmetros dos ciclos principais para 20 ciclos e 50 ciclos, a fim de reduzir o atraso devido a fatores de mercado mais nítidos.
Otimizar os parâmetros do canal de negociação para 0,5 vezes o canal ATR para reduzir a possibilidade de negociação ruidosa.
Adicionar indicadores de verificação de resultados, como o MACD, para melhorar a fiabilidade do sinal.
Esta estratégia usa de forma abrangente vários indicadores técnicos, como médias móveis adaptativas, avaliações de risco em ziguezague e análise de volume-preço para construir um sistema de decisão de negociação adaptativo de vários ciclos. Através da otimização e ajuste de parâmetros, pode ser aplicada a diferentes tipos de mercados, identificando automaticamente tendências e intervalos. A lógica da estratégia é clara e valiosa para se aprofundar, o que é um método quantitativo recomendado.
/*backtest start: 2023-01-25 00:00:00 end: 2024-01-31 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("Best Rabbit Strategy", shorttitle="Rabbit God",overlay=true) Length = input(10, minval=1) xPrice = close xvnoise = abs(xPrice - xPrice[1]) Fastend = input(2) Slowend = input(30) nfastend = 2/(Fastend + 1) nslowend = 2/(Slowend + 1) nsignal = abs(xPrice - xPrice[Length]) nnoise = sum(xvnoise, Length) nefratio = iff(nnoise != 0, nsignal / nnoise, 0) nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2) nAMA = nz(nAMA[1]) + nsmooth * (xPrice - nz(nAMA[1])) Length2 = input(10, minval=1) xPrice2 = close xvnoise2 = abs(xPrice2 - xPrice2[1]) Fastend2 = input(4) Slowend2 = input(24) nfastend2 = 2/(Fastend2 + 1) nslowend2 = 2/(Slowend2 + 1) nsignal2 = abs(xPrice2 - xPrice2[Length2]) nnoise2 = sum(xvnoise, Length2) nefratio2 = iff(nnoise2 != 0, nsignal2 / nnoise2, 0) nsmooth2 = pow(nefratio2 * (nfastend2 - nslowend2) + nslowend2, 2) nAMA2 = nz(nAMA2[1]) + nsmooth2 * (xPrice2 - nz(nAMA2[1])) price = input(hl2) len = input(defval=7,minval=1) FC = input(defval=4,minval=1) SC = input(defval=300,minval=1) len1 = len/2 w = log(2/(SC+1)) H1 = highest(high,len1) L1 = lowest(low,len1) N1 = (H1-L1)/len1 H2 = highest(high,len)[len1] L2 = lowest(low,len)[len1] N2 = (H2-L2)/len1 H3 = highest(high,len) L3 = lowest(low,len) N3 = (H3-L3)/len dimen1 = (log(N1+N2)-log(N3))/log(2) dimen = iff(N1>0 and N2>0 and N3>0,dimen1,nz(dimen1[1])) alpha1 = exp(w*(dimen-1)) oldalpha = alpha1>1?1:(alpha1<0.01?0.01:alpha1) oldN = (2-oldalpha)/oldalpha N = (((SC-FC)*(oldN-1))/(SC-1))+FC alpha_ = 2/(N+1) alpha = alpha_<2/(SC+1)?2/(SC+1):(alpha_>1?1:alpha_) out = (1-alpha)*nz(out[1]) + alpha*price price2 = input(hl2) len2 = input(defval=31,minval=1) FC2 = input(defval=40,minval=1) SC2 = input(defval=300,minval=1) len12 = len2/2 w2 = log(2/(SC2+1)) H12 = highest(high,len12) L12 = lowest(low,len12) N12 = (H1-L1)/len12 H22 = highest(high,len2)[len12] L22 = lowest(low,len2)[len12] N22 = (H22-L22)/len12 H32 = highest(high,len2) L32 = lowest(low,len2) N32 = (H32-L32)/len2 dimen12 = (log(N12+N22)-log(N32))/log(2) dimen2 = iff(N12>0 and N22>0 and N32>0,dimen12,nz(dimen12[1])) alpha12 = exp(w*(dimen2-1)) oldalpha2 = alpha12>1?1:(alpha12<0.01?0.01:alpha12) oldN2 = (2-oldalpha2)/oldalpha2 N4 = (((SC2-FC2)*(oldN2-1))/(SC2-1))+FC2 alpha_2 = 2/(N4+1) alpha2 = alpha_2<2/(SC2+1)?2/(SC2+1):(alpha_2>1?1:alpha_2) out2 = (1-alpha2)*nz(out2[1]) + alpha2*price2 tf = input(title="Resolution", defval = "current") vamp = input(title="VolumeMA", defval=6) vam = sma(volume, vamp) up = high[3]>high[4] and high[4]>high[5] and high[2]<high[3] and high[1]<high[2] and volume[3]>vam[3] down = low[3]<low[4] and low[4]<low[5] and low[2]>low[3] and low[1]>low[2] and volume[3]>vam[3] fractalup = up ? high[3] : fractalup[1] fractaldown = down ? low[3] : fractaldown[1] fuptf = request.security(syminfo.tickerid,tf == "current" ? timeframe.period : tf, fractalup) fdowntf = request.security(syminfo.tickerid,tf == "current" ? timeframe.period : tf, fractaldown) plot(fuptf, "FractalUp", color=lime, linewidth=1, style=cross, transp=0, offset =-3, join=false) plot(fdowntf, "FractalDown", color=red, linewidth=1, style=cross, transp=0, offset=-3, join=false) buyEntry= nAMA[0]>nAMA2[0] and out[0]>out2[0] sellEntry= nAMA[0]<nAMA2[0] and out[0]<out2[0] if (buyEntry) strategy.entry("Buy", strategy.long, comment="Long Position Entry") if (sellEntry) strategy.entry("Sell", strategy.short, comment="Short Position Entry")