
A estratégia usa a interseção de duas longitudes diferentes de EMA para gerar um sinal de seguimento de tendência. A combinação dos dois parâmetros funciona muito bem com EMAs de 130 e 400 de comprimento por defeito.
Faça mais quando a linha rápida EMA inclinada atravessa a linha lenta EMA inclinada e o preço é superior a 200 ciclos de EMA; Faça um vazio quando a linha rápida EMA inclinada abaixo atravessa a linha lenta EMA inclinada e o preço é inferior a 200 ciclos de EMA.
A posição de equilíbrio é travada na direção oposta da inclinação.
A estratégia funciona melhor com o Bitcoin e altcoins de alta liquidez e valor de mercado, mas também funciona bem com ativos mais voláteis, especialmente quando esses ativos estão em tendência.
O melhor é um intervalo de 4 horas.
Um filtro de taxa de flutuação opcional também é fornecido para abrir uma posição somente quando a diferença entre as duas inclinações é maior do que um determinado limiar, a fim de evitar que a posição seja aberta quando o ruído é muito maior do que o sinal quando o preço oscila na lateral.
O resultado é incrível, aproveite!
O núcleo da estratégia é comparar a inclinação de duas médias móveis do EMA de diferentes comprimentos.
Primeiro, calculem-se os EMAs de comprimento 130 e 400, depois os respectivos gradientes, e depois, para os respectivos gradientes, calculem-se os EMAs de comprimento 3 e obtêm-se a curva de gradiente suavizada.
Um sinal de compra é gerado quando a linha curta atravessa a linha curta acima da inclinação da EMA; um sinal de venda é gerado quando a linha curta atravessa a linha curta abaixo da inclinação da EMA.
Para filtrar oscilações, você pode escolher um EMA de 200 ciclos como um filtro de tendência, apenas quando o preço é superior a esse EMA, considere o sinal de mais, e quando é inferior, considere o sinal de menos.
Além disso, é possível optar por um filtro de taxa de flutuação, que produz um sinal apenas quando a diferença entre as duas inclinações é maior do que o limite predefinido, filtrando assim as situações em que as inclinações se cruzam, mas a taxa de flutuação é insuficiente.
Quando a inclinação inversa cruza rapidamente, a liquidação da posição pára de ganhar ou perder.
O uso de cruzamentos de inclinação gera sinais que permitem o acompanhamento eficaz de tendências
Ajustar a combinação de parâmetros do ciclo EMA para se adaptar a diferentes condições de mercado
Os filtros de tendências evitam ser enganados por eventos perturbadores
Os filtros de taxa de flutuação filtram os falsos sinais
Regras simples, claras e fáceis de entender
Pode ser usado em vários tempos
Em situações de grandes perturbações, pode haver frequentes aberturas e fechamentos.
Parâmetros do ciclo EMA impróprios podem perder o ponto de viragem da tendência
A combinação de parâmetros deve ser adequadamente adaptada a mudanças no ambiente de mercado
Semelhante ao sistema MA, no final de uma grande tendência, os prejuízos podem ser revertidos
Experimentar com diferentes parâmetros de combinação de EMAs para encontrar o melhor parâmetro
Parâmetros de seleção de acordo com as características de diferentes moedas e o ambiente de mercado
Pode considerar-se a inclusão de estratégias de controle de risco de stop loss
Parâmetros de EMA de ajuste dinâmico podem ser considerados
Tente diferentes parâmetros de variação de taxa de flutuação
Teste de eficácia em diferentes prazos
O conceito geral da estratégia é claro e fácil de entender, e utiliza a EMA para criar sinais de cruzamento de inclinação, para rastrear a tendência de forma eficaz; o filtro de tendência e o filtro de taxa de flutuação combinados reduzem o ruído de negociação. A combinação de parâmetros do ciclo EMA pode ser adaptada a diferentes ambientes de mercado.
/*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)