Estratégia dupla de cruzamento da EMA

Autora:ChaoZhang, Data: 2023-10-16 16:15:38
Tags:

img

Resumo

Esta é uma estratégia de negociação dupla de crossover da EMA baseada em indicadores da EMA rápida e da EMA lenta. A estratégia gera sinais longos quando a EMA rápida cruza acima da EMA lenta e fecha posições longas quando a EMA rápida cruza abaixo da EMA lenta. A estratégia é simples e prática para negociação de médio prazo.

Estratégia lógica

A estratégia é implementada principalmente com os indicadores de EMA dupla. A EMA rápida tem um período mais curto para refletir sensivelmente as alterações de preços, enquanto a EMA lenta tem um período mais longo para indicar tendências de longo prazo.

Quando a EMA rápida cruza acima da EMA lenta, uma cruz de ouro é formada, indicando o impulso de preço ascendente no curto prazo para longo.

Em especial, a estratégia inclui:

  1. Parâmetros de entrada para a EMA rápida e lenta, incluindo período, fonte, etc.

  2. Calcule a EMA rápida e a EMA lenta.

  3. Definir cruz de ouro quando a EMA rápida cruza acima da EMA lenta.

  4. Definir cruz de morte quando a EMA rápida cruza abaixo da EMA lenta.

  5. Vai longe com cruzes de ouro.

  6. Posições próximas nas cruzes da morte.

  7. Opções de curto prazo e de suspensão de perdas/recuperação de lucros

  8. Notificações de compra e venda de saída.

Com este simples sistema duplo de cruzamento da EMA, a estratégia pode captar tendências de curto prazo para lucros.

Análise das vantagens

A estratégia apresenta as seguintes vantagens:

  1. A lógica é simples e clara, fácil de entender.

  2. Só usa EMA dupla, fácil de implementar.

  3. Pode detectar tendências de curto prazo para obter lucros.

  4. Períodos de EMA personalizáveis para diferentes mercados.

  5. Opção de curto-circuito para controlar riscos.

  6. Opção de stop loss/benefício.

  7. Notificações de compra/venda para controlo.

  8. Fácil de otimizar os parâmetros da EMA para melhores lucros.

Análise de riscos

Há também alguns riscos:

  1. A dupla EMA pode gerar sinais falsos que causem perdas desnecessárias.

  2. A configuração incorreta de stop loss pode aumentar as perdas.

  3. A alta frequência de negociação aumenta os custos e os riscos de deslizamento.

  4. Os parâmetros fixos da EMA não podem adaptar-se às alterações do mercado.

  5. Têm tendência para perseguir o momento, perdem o juízo calmo.

  6. Não é possível identificar a inversão da tendência, pode abrir posições inversas.

Medidas de gestão de riscos correspondentes:

  1. Otimizar os parâmetros da EMA para reduzir os falsos sinais.

  2. Definir o limite de stop loss adequado por perda de negociação.

  3. Otimizar os períodos de EMA para reduzir a frequência.

  4. Ajustar a EMA dinamicamente para diferentes fases do mercado.

  5. Adicione indicadores de tendência para evitar perseguir o impulso.

  6. Identificar as principais direcções de tendência com ferramentas de tendência.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Optimização dinâmica dos parâmetros da EMA para diferentes mercados.

  2. Adicionar filtros de estoque para melhorar a precisão.

  3. Incorporar um índice de volatilidade para reduzir a posição em ambientes de baixa volatilidade.

  4. Adicione confirmação de volume para sinais.

  5. Definir níveis de preços, como 20SMA breakout antes de receber sinais.

  6. Melhorar as estratégias de stop loss e take profit.

  7. Adicionar análise da tendência principal para evitar negociação contra a tendência.

  8. Otimizar continuamente a estratégia com algoritmos de aprendizagem de máquina.

Resumo

Em resumo, a estratégia de cruzamento dupla da EMA tem uma lógica simples e clara para capturar tendências de curto prazo, mas também tem alguns riscos de lucro. Podemos gerenciar os riscos otimizando parâmetros, implementando stop loss / take profit, filtrando ações, julgando as principais tendências, etc., para obter retornos satisfatórios de forma constante. A estratégia pode ser melhorada gradualmente com pesquisas e aprimoramentos contínuos.


/*backtest
start: 2023-09-15 00:00:00
end: 2023-10-15 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy("EMA Strategy", shorttitle="EMA Strategy", overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100)


// === Inputs ===
// short ma
maFastSource = input(defval=close, title="Fast MA Source")
maFastLength = input(defval=3, title="Fast MA Period", minval=1)

// long ma
maSlowSource = input(defval=close, title="Slow MA Source")
maSlowLength = input(defval=9, title="Slow MA Period", minval=1)

// invert trade direction
shorting = input(defval=false, title="Allow Shorting?")
// risk management
useStop = input(defval=false, title="Use Initial Stop Loss?")
slPoints = input(defval=25, title="Initial Stop Loss Points", minval=1)
useTS = input(defval=false, title="Use Trailing Stop?")
tslPoints = input(defval=120, title="Trail Points", minval=1)
useTSO = input(defval=false, title="Use Offset For Trailing Stop?")
tslOffset = input(defval=20, title="Trail Offset Points", minval=1)

// Messages for buy and sell
message_buy  = input("Buy message", title="Buy Alert Message")
message_sell   = input("Sell message", title="Sell Alert Message")

// Calculate start/end date and time condition
startDate  = input(timestamp("2021-01-01T00:00:00"), type = input.time)
finishDate = input(timestamp("2021-12-31T00:00:00"), type = input.time)
 
time_cond  = true

// === Vars and Series ===
fastMA = ema(maFastSource, maFastLength)
slowMA = ema(maSlowSource, maSlowLength)

plot(fastMA, color=color.blue)
plot(slowMA, color=color.purple)

goLong() =>
    crossover(fastMA, slowMA)
killLong() =>
    crossunder(fastMA, slowMA)
strategy.entry("Buy", strategy.long, when=goLong() and time_cond, alert_message = message_buy)
strategy.close("Buy", when=killLong() and time_cond, alert_message = message_sell)

// Shorting if using
if shorting
    strategy.entry("Sell", strategy.short, when=killLong() and time_cond, alert_message = message_sell)
    strategy.close("Sell", when=goLong() and time_cond, alert_message = message_buy)

if useStop
    strategy.exit("XLS", from_entry="Buy", stop=strategy.position_avg_price / 1.08)
    strategy.exit("XSS", from_entry="Sell", stop=strategy.position_avg_price * 1.08)



Mais.