Estratégia de cruzamento da média móvel exponencial

Autora:ChaoZhang, Data: 2024-01-08 11:30:21
Tags:

img

Resumo

A estratégia de cruzamento da média móvel exponencial é uma estratégia de negociação quantitativa simples que rastreia as tendências de preços. Ela usa cruzes de duas médias móveis exponenciais com configurações de parâmetros diferentes como sinais de compra e venda. Quando a EMA de curto prazo cruza acima da EMA de longo prazo, um sinal de compra é gerado. Quando a EMA de curto prazo cruza abaixo da EMA de longo prazo, um sinal de venda é gerado.

Estratégia lógica

A lógica central desta estratégia é baseada na teoria da EMA. As médias móveis exponenciais podem efetivamente suavizar as flutuações de preços e determinar a direção da tendência de preços. A EMA rápida responde rapidamente às mudanças de preço, enquanto a EMA lenta fornece uma referência para a direção da tendência de preço. Quando a EMA rápida cruza acima da EMA lenta, indica que os preços começaram a subir e um sinal de compra é gerado. Quando a EMA rápida cruza abaixo da EMA lenta, indica que os preços começaram a cair e um sinal de venda é gerado.

Especificamente, esta estratégia primeiro define duas médias móveis exponenciais: fib_level e fib_price. fib_level é definido pela entrada do usuário, e fib_price é calculado com base nos preços mais altos e mais baixos dos 100 bares mais recentes. Quando o preço de fechamento cruza acima ou abaixo do fib_price, são gerados sinais de compra e venda, respectivamente. Ao mesmo tempo, o stop loss é definido para os preços mais altos e mais baixos dos 10 bares mais recentes.

Análise das vantagens

  • Utilize o sistema EMA duplo para determinar a direção da tendência de preços e evitar sinais errados
  • Estratégia personalizável com parâmetros definidos pelo utilizador
  • A definição de stop loss é benéfica para o controlo do risco

Análise de riscos

  • O atraso da EMA pode perder os pontos de reversão dos preços
  • Os cruzes frequentes da EMA aumentam os custos de transacção e as perdas de deslizamento
  • A configuração inadequada de stop loss pode causar stop loss prematuros ou perdas excessivas

Os riscos podem ser reduzidos pela otimização dos parâmetros da EMA, usando o sistema de EMA triplo, ou combinando com outros indicadores para confirmação de sinal.

Orientações de otimização

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

  1. Otimizar os parâmetros do período EMA. Testar diferentes combinações de períodos para encontrar os melhores parâmetros.

  2. Gerar sinais de compra quando o volume sobe e sinais de venda quando o volume cai para evitar sinais errados durante picos acentuados de preços.

  3. Utilize algoritmos de aprendizagem de máquina para otimizar automaticamente parâmetros com base em dados históricos.

  4. Adicionar o mecanismo de stop de trail para parar a colocação de perda.

Resumo

A estratégia de cruzamento da média móvel exponencial é uma estratégia quantitativa de negociação fácil de usar. Ela aproveita os pontos fortes das EMAs para determinar as tendências de preços e estabelece paradas para controlar riscos. A estratégia é fácil de entender, flexível em parâmetros e aplicável à negociação quantitativa em diferentes produtos.


/*backtest
start: 2023-12-08 00:00:00
end: 2024-01-07 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Fibonacci Strategy", overlay=true)

// Define Fibonacci 0.5 level
fib_level = input(0.5, title="Fibonacci Level")

// Calculate Fibonacci 0.5 level price
fib_price = ta.lowest(low, 100) + (ta.highest(high, 100) - ta.lowest(low, 100)) * fib_level

// Define entry and exit conditions
long_condition = ta.crossover(close, fib_price)
short_condition = ta.crossunder(close, fib_price)

// Set exit points (using previous high or low)
long_exit = ta.highest(high, 10)
short_exit = ta.lowest(low, 10)

// Plot Fibonacci 0.5 level
plot(fib_price, "Fib 0.5", color=color.blue, linewidth=1, style=plot.style_circles)

// Initialize variables
var inLong = false
var inShort = false

// Set trading signals
if (long_condition)
    if not inLong
        strategy.entry("Buy", strategy.long)
        inLong := true
    strategy.exit("Exit", "Buy", limit=long_exit)

if (short_condition)
    if not inShort
        strategy.entry("Sell", strategy.short)
        inShort := true
    strategy.exit("Exit", "Sell", limit=short_exit)

if (ta.crossover(close, long_exit) or ta.crossunder(close, short_exit))
    inLong := false
    inShort := false


Mais.