Estratégia de acompanhamento da tendência de dupla EMA cruzada

Autora:ChaoZhang, Data: 2024-02-29 11:45:42
Tags:

img

Resumo

A estratégia de rastreamento de tendência do duplo EMA é uma estratégia quantitativa de negociação que usa indicadores duplos de EMA para determinar a direção da tendência do preço. Esta estratégia calcula dois indicadores de EMA com parâmetros diferentes e combina sinais de cruz de ouro e cruz morta para julgar a tendência do preço.

Estratégia lógica

Os principais indicadores desta estratégia são dois conjuntos de EMAs, incluindo um ciclo mais longo EMA1 e um ciclo mais curto EMA2. O parâmetro EMA1 é 21 e o parâmetro EMA2 é 10. A estratégia calcula esses dois EMAs com base no ciclo de 4 horas.

Para filtrar os sinais errados, a estratégia define dois conjuntos de indicadores de cruz de ouro e cruz morta. Os sinais só são acionados quando ambos os conjuntos de indicadores emitem o mesmo sinal, o que pode reduzir efetivamente os erros causados por flutuações de preços.

Análise das vantagens

  • A estrutura dual da EMA pode capturar eficazmente as alterações das tendências de curto e médio prazo para determinar as tendências.

  • A filtragem adicional de dois conjuntos de indicadores de cruz de ouro e cruz morta pode reduzir os sinais errôneos e evitar transacções desnecessárias causadas por flutuações de preços.

  • A utilização de níveis de 4 horas para o cálculo dos indicadores pode fazer face a flutuações de preços de alta frequência.

  • A estrutura da estratégia é simples e clara, fácil de compreender e implementar e adequada para aplicações de negociação quantitativa.

Análise de riscos

  • A dupla estrutura da EMA é menos eficaz no julgamento dos mercados de consolidação, pois longos períodos de consolidação podem gerar falsos sinais.

  • Os indicadores de nível de 4 horas não são sensíveis o suficiente para responder a eventos repentinos.

  • A estratégia baseia-se exclusivamente em indicadores técnicos sem combinar a análise fundamental.

Estes riscos podem ser controlados por:

  1. Adicionar mais indicadores de EMA de ciclo temporal para estabelecer combinações de modelos.

  2. Use a análise do sentimento do texto para determinar grandes eventos repentinos e ajustar dinamicamente as posições.

  3. Associar alterações no ambiente económico, nas políticas e nos fundamentos da empresa para ajustar dinamicamente os parâmetros.

Optimização

A estratégia pode ser melhorada:

  1. Adicionar combinações de modelos: podem ser estabelecidas mais combinações de indicadores com diferentes parâmetros para melhorar a estabilidade da estratégia.

  2. Acrescente mecanismos de stop loss. Pontos de stop loss razoáveis podem controlar efetivamente perdas individuais.

  3. Optimização de parâmetros dinâmicos. Os parâmetros EMA podem ser otimizados automaticamente com base em diferentes ambientes de mercado.

  4. Incorporar técnicas de aprendizagem de máquina. Modelos como o Tensorflow podem ser treinados para categorizar tendências de preços em tempo real.

Conclusão


/*backtest
start: 2023-02-22 00:00:00
end: 2024-02-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3


/// Component Code Startt
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(01, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(1, "Backtest Stop Month")
testStopDay = input(1, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=false)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true
// Component Code Stop

strategy(title="Ema cross strat", overlay=true)
margin = input(true, title="Margin?")
Margin = margin  ? margin : false
resCustom = input(title="EMA Timeframe", defval="240" )
source = close,
len2 = input(21, minval=1, title="EMA1")
len3 = input(10, minval=1, title="EMA2")
ema2 = request.security(syminfo.tickerid,resCustom,ema(source,len2), lookahead=barmerge.lookahead_off)
ema3 = request.security(syminfo.tickerid,resCustom,ema(source,len3), lookahead=barmerge.lookahead_off)


mylong = crossover(ema3, ema2)
myshort = crossunder(ema3,ema2)

last_long = na
last_short = na
last_long := mylong ? time : nz(last_long[1])
last_short := myshort ? time : nz(last_short[1])

in_long = last_long > last_short ? 2 : 0
in_short = last_short > last_long ? 2 : 0

mylong2 = crossover(ema3, ema2)
myshort2 = crossunder(ema3, ema2)

last_long2 = na
last_short2 = na
last_long2 := mylong2 ? time : nz(last_long2[1])
last_short2 := myshort2 ? time : nz(last_short2[1])

in_long2 = last_long2 > last_short2 ? 0 : 0
in_short2 = last_short2 > last_long2 ? 0 : 0

condlongx =   in_long + in_long2
condlong = crossover(condlongx, 1.9)
condlongclose = crossunder(condlongx, 1.9)

condshortx =  in_short + in_short2
condshort = crossover(condshortx, 1.9)
condshortclose = crossover(condshortx, 1.9)




if crossover(condlongx, 1.9) and testPeriod() and strategy.position_size <= 0
    strategy.entry("Long", strategy.long, comment="Long")

if crossover(condshortx, 1.9) and testPeriod() and strategy.position_size > 0    
    strategy.close("Long",when = not Margin)
    
if crossover(condshortx, 1.9) and testPeriod() and strategy.position_size >= 0
    strategy.entry("Short", strategy.short, comment="Short", when = Margin)

Mais.