Tráfico de tendências com sistema duplo de cruzamento da EMA

Autora:ChaoZhang, Data: 2023-10-26 17:15:46
Tags:

img

Resumo

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.

Como funciona

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.

Vantagens

  • 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

Riscos

  • 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:

  1. Seleção de instrumentos com tendência forte e pausa da negociação quando a tendência for fraca

  2. Otimizar os períodos de EMA para minimizar os falsos sinais

  3. Introdução de indicadores adicionais de confirmação nas zonas de alerta/transição

  4. Implementação de stop loss para controlar a perda por transação

Oportunidades de melhoria

O sistema pode ser melhorado nos seguintes domínios:

  1. Incorporar mais indicadores como MACD, KDJ para confirmação de sinal

  2. Adicionar filtros como a expansão do volume nas zonas comerciais para melhorar a taxa de sucesso do comércio

  3. Ajustar dinamicamente os períodos de EMA com base nas condições de mercado para parâmetros otimizados

  4. Implementar estratégias de stop loss para sair das negociações a determinadas percentagens de perda

  5. Otimizar o dimensionamento das posições e a gestão do dinheiro

  6. 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.

Conclusão

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")




        

Mais.