Esta estratégia julga a tendência do preço calculando o cruzamento de médias móveis duplas e emite sinais de compra e venda com certas restrições de parâmetros.
O núcleo desta estratégia reside no cálculo de médias móveis rápidas e lentas. A média móvel rápida tem um período de metade do período da média móvel total, que é mais sensível às mudanças de preço; a média móvel lenta tem um período do período da média móvel total, que reflete as mudanças de preço de forma mais suave.
Além disso, a estratégia estabelece certos parâmetros para evitar trocas erradas. Por exemplo, o limiar de decisão é para garantir que os sinais sejam emitidos apenas quando a diferença entre as duas médias móveis exceder um certo nível; o parâmetro de confiança é usado para filtrar pequenas flutuações de preços.
Finalmente, o stop profit e o stop loss são empregados para controlar os riscos. Se o openprofit for menor que o ponto de stop loss ou maior que o ponto de stop profit, as posições serão fechadas. Isso limita efetivamente a perda de uma única negociação.
A maior vantagem desta estratégia é combinar o julgamento da tendência de preços e as características de volatilidade através de indicadores de média móvel. O cruzamento de médias móveis duplas é uma abordagem técnica clássica e eficaz para determinar as tendências de preços. Com a otimização de parâmetros, ele pode capturar com precisão as tendências. O parâmetro de confiança pode efetivamente filtrar mercados agitados e evitar negócios errados frequentes.
Além disso, parâmetros como o limiar de decisão, o stop profit e o stop loss também podem reduzir muito os riscos de negociação, evitando perseguir máximos e vender mínimos.
O principal risco desta estratégia é a possibilidade de sinais errados das médias móveis duplas. Tanto as médias móveis rápidas quanto as lentas são médias móveis ponderadas que reagem lentamente a eventos repentinos, perdendo assim inversões de preços de curto prazo. Neste momento, o parâmetro de confiança pode fornecer uma confirmação dupla.
Além disso, configurações inadequadas dos pontos de stop profit e stop loss também aumentam os riscos. O objetivo de lucro excessivamente alto e o ponto de stop loss baixo podem levar a perdas além das expectativas. Parâmetros razoáveis precisam ser definidos de acordo com as características de diferentes produtos de negociação e volatilidade.
A estratégia pode ser otimizada nos seguintes aspectos:
Otimizar os períodos de média móvel, definir médias móveis adaptativas para melhor modelar as flutuações de preços de diferentes ciclos;
Estabelecer mecanismos dinâmicos de acompanhamento para a obtenção de resultados e perdas, calcular a volatilidade em tempo real com base nas condições de mercado, de modo a que os pontos de parada possam mudar de forma dinâmica;
Aumentar os modelos de aprendizado de máquina para julgar as direções da tendência dos preços, utilizar mais dados históricos para determinar os movimentos atuais dos preços e reduzir sinais errados.
Em geral, esta é uma estratégia clássica de negociação de tendências simples e eficaz. Ele usa o cruzamento duplo da média móvel para determinar tendências, define parâmetros para controlar riscos e tem alta configurabilidade para negociação de múltiplos produtos.
/*backtest start: 2023-12-03 00:00:00 end: 2024-01-02 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 // Any timeFrame ok but good on 15 minute & 60 minute , Ichimoku + Daily-Candle_cross(DT) + HULL-MA_cross + MacD combination 420 special blend strategy("Trade Signal", shorttitle="Trade Alert", overlay=true ) keh=input(title="Double HullMA",defval=14, minval=1) dt = input(defval=0.0010, title="Decision Threshold (0.001)", type=float, step=0.0001) SL = input(defval=-10.00, title="Stop Loss in $", type=float, step=1) TP = input(defval=100.00, title="Target Point in $", type=float, step=1) ot=1 n2ma=2*wma(close,round(keh/2)) nma=wma(close,keh) diff=n2ma-nma sqn=round(sqrt(keh)) n2ma1=2*wma(close[1],round(keh/2)) nma1=wma(close[1],keh) diff1=n2ma1-nma1 sqn1=round(sqrt(keh)) n1=wma(diff,sqn) n2=wma(diff1,sqn) b=n1>n2?lime:red c=n1>n2?green:red d=n1>n2?red:green confidence=(request.security(syminfo.tickerid, '5', close[1])-request.security(syminfo.tickerid, '60', close[1]))/request.security(syminfo.tickerid, '60', close[1]) conversionPeriods = input(9, minval=1, title="Conversion Line Periods") basePeriods = input(26, minval=1, title="Base Line Periods") laggingSpan2Periods = input(52, minval=1, title="Lagging Span 2 Periods") displacement = input(26, minval=1, title="Displacement") donchian(len) => avg(lowest(len), highest(len)) conversionLine = donchian(conversionPeriods) baseLine = donchian(basePeriods) leadLine1 = avg(conversionLine, baseLine) leadLine2 = donchian(laggingSpan2Periods) LS=close, offset = -displacement MACD_Length = input(9) MACD_fastLength = input(12) MACD_slowLength = input(26) MACD = ema(close, MACD_fastLength) - ema(close, MACD_slowLength) aMACD = ema(MACD, MACD_Length) closelong = n1<n2 and close<n2 and confidence<dt or strategy.openprofit<SL or strategy.openprofit>TP if (closelong) strategy.close("Long") closeshort = n1>n2 and close>n2 and confidence>dt or strategy.openprofit<SL or strategy.openprofit>TP if (closeshort) strategy.close("Short") longCondition = n1>n2 and strategy.opentrades<ot and confidence>dt and close>n2 and leadLine1>leadLine2 and open<LS and MACD>aMACD if (longCondition) strategy.entry("Long",strategy.long) shortCondition = n1<n2 and strategy.opentrades<ot and confidence<dt and close<n2 and leadLine1<leadLine2 and open>LS and MACD<aMACD if (shortCondition) strategy.entry("Short",strategy.short) //alerts alertcondition(closelong, title='Close Buy Position', message='Close Buy Position') alertcondition(closeshort, title='Close Short Position', message='Close Short Position') alertcondition(longCondition, title='Buy Signal', message='Buy Signal Alert') alertcondition(shortCondition, title='Sell Signal', message='Sell Signal Alert') //a1=plot(n1,color=c) //a2=plot(n2,color=c)plot(cross(n1, n2) ? n1 : na, style = circles, color=b, linewidth = 4) //plot(cross(n1, n2) ? n1 : na, style = line, color=d, linewidth = 4) plot(conversionLine, color=#0496ff, title="Conversion Line") plot(baseLine, color=#991515, title="Base Line") plot(close, offset = -displacement, color=#459915, title="Lagging Span") p1=plot (leadLine1, offset = displacement, color=green, title="Lead 1") p2=plot (leadLine2, offset = displacement, color=red, title="Lead 2") fill(p1, p2, color = leadLine1 > leadLine2 ? green : red) // remove the "//" from before the plot script if want to see the indicators on chart