Estratégia de acompanhamento de tendência de cruzamento de inclinação da média móvel


Data de criação: 2023-10-17 17:02:30 última modificação: 2023-10-17 17:02:30
cópia: 0 Cliques: 848
1
focar em
1617
Seguidores

Estratégia de acompanhamento de tendência de cruzamento de inclinação da média móvel

Visão geral

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!

Princípio da estratégia

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.

Análise de vantagens

  1. O uso de cruzamentos de inclinação gera sinais que permitem o acompanhamento eficaz de tendências

  2. Ajustar a combinação de parâmetros do ciclo EMA para se adaptar a diferentes condições de mercado

  3. Os filtros de tendências evitam ser enganados por eventos perturbadores

  4. Os filtros de taxa de flutuação filtram os falsos sinais

  5. Regras simples, claras e fáceis de entender

  6. Pode ser usado em vários tempos

Análise de Riscos

  1. Em situações de grandes perturbações, pode haver frequentes aberturas e fechamentos.

  2. Parâmetros do ciclo EMA impróprios podem perder o ponto de viragem da tendência

  3. A combinação de parâmetros deve ser adequadamente adaptada a mudanças no ambiente de mercado

  4. Semelhante ao sistema MA, no final de uma grande tendência, os prejuízos podem ser revertidos

Direção de otimização

  1. Experimentar com diferentes parâmetros de combinação de EMAs para encontrar o melhor parâmetro

  2. Parâmetros de seleção de acordo com as características de diferentes moedas e o ambiente de mercado

  3. Pode considerar-se a inclusão de estratégias de controle de risco de stop loss

  4. Parâmetros de EMA de ajuste dinâmico podem ser considerados

  5. Tente diferentes parâmetros de variação de taxa de flutuação

  6. Teste de eficácia em diferentes prazos

Resumir

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.

Código-fonte da estratégia
/*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)