O sistema Double EMA Crossover é um sistema de negociação baseado em duas médias móveis exponenciais (EMA). Ele usa duas EMAs com períodos diferentes para determinar a direção da tendência atual e gerar sinais de negociação em conformidade. Com sua lógica simples e implementação fácil, este sistema pode capturar as tendências do mercado de forma eficaz e é adequado para os traders de médio a longo prazo.
O núcleo deste sistema depende de duas EMAs, uma EMA mais rápida e uma EMA mais lenta.
Com base na relação entre os preços e as duas EMAs, as barras podem ser categorizadas em diferentes zonas de negociação:
Quando a EMA rápida está acima da EMA lenta e o preço está acima da EMA rápida (G1), é uma zona de compra forte, uma posição longa pode ser tomada aqui.
Quando a EMA rápida está abaixo da EMA lenta e o preço está abaixo da EMA rápida (R1), é uma zona de venda forte, uma posição curta pode ser tomada aqui.
Quando as duas EMA se cruzam, as zonas de alerta (amarelo) e de transição (laranja) são determinadas com base na relação entre os preços e as duas EMA. Estas zonas indicam potenciais mudanças de tendência e as transacções devem ser tomadas com cautela utilizando indicadores adicionais.
Os sinais de negociação são gerados quando o preço se move através de diferentes zonas. Nas zonas fortes G1 e R1, os sinais podem ser tomados diretamente.
As leituras de sobrevenda e sobrecompra do StochRSI podem fornecer sinais adicionais de compra e venda.
Lógica simples e limpa que seja fácil de entender e implementar
Capta eficazmente as tendências a médio e longo prazo
Distingue as zonas fortes das zonas de alerta/transição, produzindo sinais comerciais fiáveis
A inclusão do StochRSI melhora ainda mais o calendário de entrada e saída
Como um sistema puramente de tendência, o desempenho pode sofrer em mercados não tendência
As configurações inadequadas dos períodos da EMA podem causar sinais falsos
As zonas de alerta e de transição apresentam riscos comerciais mais elevados e devem ser tratadas com cautela
A ausência de stop loss pode levar a perdas acentuadas
Os riscos podem ser reduzidos:
Seleção de instrumentos com tendência forte e pausa da negociação quando a tendência for fraca
Otimizar os períodos de EMA para minimizar os falsos sinais
Introdução de indicadores adicionais de confirmação nas zonas de alerta/transição
Implementação de stop loss para controlar a perda por transação
O sistema pode ser melhorado nos seguintes domínios:
Incorporar mais indicadores como MACD, KDJ para confirmação de sinal
Adicionar filtros como a expansão do volume nas zonas comerciais para melhorar a taxa de sucesso do comércio
Ajustar dinamicamente os períodos de EMA com base nas condições de mercado para parâmetros otimizados
Implementar estratégias de stop loss para sair das negociações a determinadas percentagens de perda
Otimizar o dimensionamento das posições e a gestão do dinheiro
Teste e ajuste fino de parâmetros em diferentes instrumentos para encontrar as melhores configurações
Ao introduzir mais confirmação de sinal, otimização de parâmetros dinâmicos, stop loss e gestão adequada do dinheiro, a robustez do sistema pode ser melhorada e os riscos reduzidos para melhores resultados.
O sistema Double EMA Crossover é um sistema de acompanhamento de tendências baseado na comparação de duas EMAs. Identifica diferentes zonas de negociação com base na relação do preço com as EMAs para determinar a direção da tendência e gerar sinais de negociação. Como um sistema com lógica clara e implementação fácil, ele pode capturar efetivamente as tendências. Enquanto existem riscos, eles podem ser reduzidos por meio de indicadores auxiliares, otimização dinâmica, stop loss e gerenciamento de dinheiro.
/*backtest start: 2023-01-01 00:00:00 end: 2023-10-25 00:00:00 period: 1d basePeriod: 1h 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/ // © Vvaz_ //base-on CDC ActionZone By Piriya a simple 2EMA and is most suitable for use with medium volatility market //@version=4 strategy(title="Vin's Playzone" ,shorttitle="VPz", overlay=true, margin_long=4, margin_short=2) //variable srcf = input(title="Source",type=input.source,defval=close) tffix = input(title="Fixed Timeframe",type=input.bool,defval=true) tfn = input(title="Timeframe in",type=input.resolution,defval="D") ema1 = input(title="Fast EMA",type=input.integer,defval=12) ema2 = input(title="Slow EMA",type=input.integer,defval=26) ema3 = input(title="EMA 100",type=input.bool,defval=true) smooter =input(title="Smoothing period (1 = no smoothing)",type=input.integer,defval=2) fillbar =input(title="Fill Bar Color",type=input.bool,defval=true) emasw = input(title="Show EMA",type=input.bool,defval=true) bssw = input(title="Show Buy-Sell signal",type=input.bool,defval=true) plotmm = input(title="Show Buy-Sell Momentum",type=input.bool,defval=true) plotmmsm = input(title="RSI Smoothing",type=input.integer,defval=0,minval=0,maxval=2) //math xcross =ema(srcf,smooter) efast = tffix ? ema(security(syminfo.tickerid,tfn,ema(srcf,ema1), gaps = barmerge.gaps_off,lookahead = barmerge.lookahead_on),smooter) :ema(xcross,ema1) eslow = tffix ? ema(security(syminfo.tickerid,tfn,ema(srcf,ema2), gaps = barmerge.gaps_off,lookahead = barmerge.lookahead_on),smooter) :ema(xcross,ema2) ema3x = ema(xcross,100) //Zone Bull = efast > eslow Bear = efast < eslow G1 = Bull and xcross > efast //buy G2 = Bear and xcross > efast and xcross > eslow //pre-buy1 G3 = Bear and xcross > efast and xcross < eslow //pre-buy2 R1 = Bear and xcross < efast //sell R2 = Bull and xcross < efast and xcross < eslow //pre-sell1 R3 = Bull and xcross < efast and xcross > eslow //pre-sell2 //color bcl = G1 ? color.green : G2 ? color.yellow : G3 ? color.orange :R1 ? color.red :R2 ? color.orange : R3 ? color.yellow : color.black barcolor(color=fillbar ? bcl : na ) //plots line1 = plot(ema3 ? ema3x : na ,"EMA100",color=color.white) line2 = plot(emasw ? efast : na ,"Fast EMA",color=color.green) line3 = plot(emasw ? eslow : na ,"Slow EMA",color=color.red) fillcl = Bull ? color.green : Bear ? color.red : color.black fill(line2,line3,fillcl) //actions buywhen = G1 and G1[1]==0 sellwhen = R1 and R1[1]==0 bullish = barssince(buywhen) < barssince(sellwhen) bearish = barssince(sellwhen) < barssince(buywhen) buy = bearish[1] and buywhen sell = bullish[1] and sellwhen bullbearcl = bullish ? color.green : bearish ? color.red : color.black //plot trend plotshape(bssw ? buy : na ,style=shape.arrowup,title="BUY",location=location.belowbar,color=color.green) plotshape( bssw ? sell : na ,style=shape.arrowdown ,title="Sell",location=location.abovebar,color=color.red) // Momentum Signal using StochRSI smoothK = input(5,"StochRSI smooth K",type=input.integer,minval=1) smoothD = input(4,"StochRSI smooth D",type=input.integer,minval=1) RSIlen = input(14,"RSI length",type=input.integer,minval=1) STOlen = input(14,"Stochastic length",type=input.integer,minval=1) SRsrc = input(close,"Source for StochasticRSI",type=input.source) OSlel = input(20,"Oversold Threshold",type=input.float,minval=0.00) OBlel = input(80,"Oversold Threshold",type=input.float,minval=0.00) rsil = rsi(SRsrc,RSIlen) K = sma(stoch(rsil,rsil,rsil,STOlen),smoothK) D = sma(K,smoothD) buymore = iff( bullish ,iff(D < OSlel and crossover(K,D), 2, iff(D > OSlel and crossover(K,D), 1,0)),0) sellmore = iff( bearish,iff(D > OBlel and crossunder(K,D), 2, iff(D < OBlel and crossunder(K,D), 1,0)),0) //plot momentum plotshape(plotmm ? buymore > plotmmsm ? buymore : na : na ,"Buy More!" ,style=shape.triangleup,location=location.belowbar,color=color.green) plotshape(plotmm ? sellmore > plotmmsm ? sellmore : na : na ,"Sell More!" ,style=shape.triangledown,location=location.abovebar,color=color.red) // === INPUT BACKTEST RANGE === FromYear = input(defval = 2009, title = "From Year", minval = 2009) FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2009) ToMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => time >= start and time <= finish ? true : false // create function "within window of time" //stratgy excuter strategy.entry("Long",true,when=window() and buy or buymore) strategy.close("Long",when=window() and sell or sellmore,comment="TP Long") strategy.entry("Short",false,when=window() and sell or sellmore) strategy.close("Short",when=window() and buy or buymore,comment="TP Short")