Tendência transversal da EMA na sequência da estratégia

Autora:ChaoZhang, Data: 2023-12-27 16:31:15
Tags:

img

Resumo

Esta estratégia adota cruzamento da EMA para rastrear as tendências de preços. Ele vai longo quando a EMA rápida cruza acima da EMA lenta e fecha a posição quando a EMA rápida cruza abaixo da EMA lenta. Principalmente adequado para produtos com tendências óbvias, seguindo efetivamente as tendências e ganhando retornos excessivos.

Estratégia lógica

O principal indicador desta estratégia é a EMA, cuja fórmula é:

EMA (t) = C (t) ×2/ (n+1) + EMA (t-1) × (n-1) / (n+1)

onde t é o tick atual, C(t) é o preço de fechamento atual e n é o valor do parâmetro N. A EMA é uma técnica de média móvel com um fator ponderado, atribuindo mais peso aos preços recentes, reagindo assim mais rapidamente às últimas mudanças de preço.

A estratégia constrói EMAs rápidas e lentas e assume a travessia rápida da EMA acima da EMA lenta como sinal de compra e a travessia rápida da EMA abaixo da EMA lenta como sinal de venda.

Análise das vantagens

As vantagens desta estratégia são as seguintes:

  1. A lógica é simples e fácil de compreender e implementar;
  2. Utilizar a EMA simples e prática para avaliar as tendências de preços, evitando perder tendências importantes;
  3. Poucos parâmetros a ajustar e otimizar, baseando-se principalmente em EMAs rápidas e lentas;
  4. Capaz de acompanhar as tendências ascendentes após a compra;
  5. Capaz de evitar retiradas após venda, mitigando os riscos;
  6. Dados suficientes de backtest com elevada fiabilidade.

Análise de riscos

Os principais riscos são:

  1. Alta probabilidade de falsos sinais da EMA;
  2. Signalização frequente quando o mercado estiver em variação, uma vez que as EMA são facilmente cruzidas;
  3. Incapacidade de interromper a perda em tempo útil quando eventos súbitos provocam uma mudança brusca de direção;
  4. Espaço de otimização limitado que o desempenho real pode subperformar os resultados do backtest.

Para reduzir os riscos acima referidos, podem ser adoptadas as seguintes medidas de otimização:

  1. Adicionar condições de filtragem com outros indicadores para evitar falsos sinais;
  2. Ajuste de parâmetros para reduzir a frequência do sinal;
  3. Adicionar uma estratégia de stop loss para controlar perdas únicas;
  4. Testando diferentes parâmetros de período de tempo para encontrar o ideal.

Orientações de otimização

A estratégia pode ser otimizada a partir dos seguintes aspectos:

  1. Indicadores compostos em vários prazos, por exemplo, combinando tendências semanais ou mensais;
  2. Adição de condições de filtragem para evitar falsas rupturas, por exemplo, volume, bandas de Bollinger, etc.;
  3. Ajuste dinâmico dos parâmetros de acordo com as alterações do mercado em tempo real;
  4. Incorporação de outros indicadores para a construção de modelos, por exemplo, grelhas, algoritmos de regressão.

Resumo

Em resumo, esta é uma estratégia de tendência simples e prática que utiliza a EMA para julgar as tendências de preços. A lógica é clara e fácil de implementar. As vantagens estão na simplicidade de ajustar parâmetros e seguir as tendências efetivamente. As desvantagens são propensas a sinais falsos e o desempenho real pode ser inferior aos backtests. As próximas etapas de otimização podem se concentrar em adicionar filtros, parâmetros dinâmicos, construção de modelos para tornar a estratégia mais robusta.


/*backtest
start: 2022-12-20 00:00:00
end: 2023-12-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("EMA交叉策略by GPT",
     format = format.inherit,
     overlay = true,
     default_qty_type= strategy.percent_of_equity,
     default_qty_value = 100,
     currency = currency.USD,
     initial_capital = 1000000)


// 定義回測交易開始和結束時間的變數
start_time = input(title="開始時間", type=input.time, defval=timestamp("01 Jan 2020 00:00 +0000"))
end_time = input(title="結束時間", type=input.time, defval=timestamp("31 Dec 2050 23:59 +0000"))


// 判斷是否在回測交易時間範圍內
in_range = true


// Define input variables
fast_length = input(title="Fast EMA Length", type=input.integer, defval=5)
slow_length = input(title="Slow EMA Length", type=input.integer, defval=20)


// Define EMAs
fast_ema = ema(close, fast_length)
slow_ema = ema(close, slow_length)


// Define buy and sell signals
buy_signal = crossover(fast_ema, slow_ema)
sell_signal = crossunder(fast_ema, slow_ema)


// Buy signal
if in_range and buy_signal
    strategy.entry("Buy", strategy.long, when=in_range)
   
// Sell signal
if in_range and sell_signal
    strategy.close("Buy", when=sell_signal)

Mais.