Esta estratégia utiliza o cruzamento das inclinações de duas EMAs com comprimentos diferentes para gerar tendências seguindo sinais.
As condições que fazem com que a estratégia entre no mercado são:
Quando as inclinações simples se cruzam na direção oposta, fecha a posição.
A estratégia tem melhor desempenho no Bitcoin e nas altcoins mais líquidas e capitalizadas, mas também funciona muito em ativos voláteis, especialmente se eles frequentemente entrarem em tendência. Funciona melhor no período de 4 horas.
Há também um filtro de Volatilidade opcional, que abre a posição apenas se a diferença entre as duas inclinações for superior a um valor específico.
Aproveita!
O núcleo desta estratégia consiste em comparar as inclinações de dois EMA de comprimentos diferentes.
Em primeiro lugar, são calculadas EMAs com comprimentos de 130 e 400, em seguida, as inclinações de cada uma são calculadas, em seguida, são calculadas EMAs de comprimento 3 em cada inclinação para obter curvas de inclinação suavizadas.
Quando a inclinação da EMA rápida cruza acima da inclinação da EMA lenta, um sinal de compra é gerado.
Para filtrar o ruído, uma EMA de 200 períodos pode ser usada como um filtro de tendência, considerando sinais longos apenas quando o preço está acima da EMA e sinais curtos apenas quando abaixo.
Além disso, pode utilizar-se um filtro de volatilidade, gerando sinais apenas quando a diferença entre as duas inclinações for superior a um limiar, para evitar casos em que as inclinações se cruzam mas a volatilidade é insuficiente.
Quando as inclinações rápidas e lentas se cruzam inversamente, as posições são fechadas para parar os lucros/perdas.
Usando cruzes de inclinação para gerar sinais pode efetivamente rastrear tendências
Ajustar as combinações de períodos da EMA pode adaptar-se a diferentes condições de mercado
O filtro de tendência evita ser enganado pela ação de preços instável
O filtro de volatilidade filtra sinais falsos
Lógica simples e clara, fácil de compreender e implementar
Pode ser utilizado em vários prazos
Podem ocorrer aberturas e fechamentos frequentes em mercados de grande amplitude
Períodos EMA inadequados podem perder pontos de virada da tendência
Os parâmetros devem ser ajustados para se adaptarem às condições de mercado em evolução
Tal como os sistemas de MA, grandes tendências podem inverter-se em situações extremas
Tente diferentes combinações de períodos EMA para encontrar parâmetros ideais
Escolher parâmetros de acordo com as características dos ativos e as condições do mercado
Considerar a adição de estratégias de stop loss para controlar o risco
Considerar o ajustamento dinâmico dos períodos da EMA
Teste diferentes valores limiares de volatilidade
Eficácia dos ensaios em diferentes prazos
A estratégia tem uma lógica clara e fácil de entender, usando cruzes de inclinação da EMA para gerar sinais e rastrear efetivamente as tendências. Os filtros de tendência e volatilidade reduzem as negociações ruidosas.
/*backtest start: 2023-10-09 00:00:00 end: 2023-10-16 00:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // strategy(title="Slopes",initial_capital=1000, default_qty_type=strategy.percent_of_equity, commission_type=strategy.commission.percent, commission_value=0.06, slippage = 2, default_qty_value=30, overlay=false) //definizione input start = timestamp(input(2018, "start year"), input(1, "start month"), input(1, "start day"), 00, 00) end = timestamp(input(2020, "end year"), input(1, "end month"), input(1, "end day"), 00, 00) average = input (title="Source MA Type", type=input.string, defval="EMA",options=["EMA","SMA"]) len1=input(130,title="Fast MA Length") len2=input(400,title="Slow MA Length") smoothingavg = input (title="Smoothing MAs Type", type=input.string, defval="EMA",options=["EMA","SMA"]) smoothingavglen = input (3,title="Smoothing MAs Length") trendfilter=input(true,title="Trend Filter") trendfilterperiod=input(200,title="Trend Filter MA Period") trendfiltertype=input (title="Trend Filter MA Type", type=input.string, defval="EMA",options=["EMA","SMA"]) volatilityfilter=input(false,title="Volatility Filter") volatilitydelta=input(0.0003,step=0.0001,title="Delta Slopes EMA") //variabili m1 = if average == "EMA" ema(close,len1) else sma(close,len1) m2=if average == "EMA" ema(close,len2) else sma(close,len2) slp1=(m1-m1[1])/m1 slp2=(m2-m2[1])/m2 e1=if smoothingavg == "EMA" ema(slp1,smoothingavglen) else sma(slp1,smoothingavglen) e2=if smoothingavg == "EMA" ema(slp2,smoothingavglen) else sma(slp2,smoothingavglen) plot(e1,color=color.yellow) plot(e2,color=color.red) //plot (abs(e1-e2),color=color.white) //plot (ema(e1-e2,9),color=color.yellow) //variabili accessorie e condizioni TrendConditionL=if trendfiltertype =="EMA" close>ema(close,trendfilterperiod) else close>sma(close,trendfilterperiod) TrendConditionS=if trendfiltertype =="EMA" close<ema(close,trendfilterperiod) else close<sma(close,trendfilterperiod) VolatilityCondition = abs(e1-e2) > volatilitydelta ConditionEntryL= if trendfilter == true if volatilityfilter == true e1>e2 and TrendConditionL and VolatilityCondition else e1>e2 and TrendConditionL else if volatilityfilter == true e1>e2 and VolatilityCondition else e1>e2 ConditionEntryS= if trendfilter == true if volatilityfilter == true e1<e2 and TrendConditionS and VolatilityCondition else e1<e2 and TrendConditionS else if volatilityfilter == true e1<e2 and VolatilityCondition else e1<e2 ConditionExitL=crossunder(e1,e2) ConditionExitS=crossover(e1,e2) if true if ConditionExitS if strategy.position_size < 0 strategy.close("SLPShort") if true if ConditionExitL if strategy.position_size > 0 strategy.close("SLPLong") if true if ConditionEntryL strategy.entry ("SLPLong",long=true) if true if ConditionEntryS strategy.entry("SLPShort",long=false)