Estratégia de negociação quantitativa combinando EMA e super tendência

EMA
Data de criação: 2024-06-17 16:52:17 última modificação: 2024-06-17 16:52:17
cópia: 1 Cliques: 773
1
focar em
1617
Seguidores

Estratégia de negociação quantitativa combinando EMA e super tendência

Visão geral

Esta estratégia combina a média móvel do índice (EMA) e o indicador de tendência super (Supertrend) para gerar um sinal de compra e venda. Um sinal de compra é gerado quando o preço supera a 20a EMA de cima e o indicador de tendência super está em uma tendência de baixa.

Princípio da estratégia

  1. Calcule a EMA de 20 dias como condição de filtragem para o julgamento da tendência.
  2. Calcule o indicador de tendência super, que se baseia na média real de alcance (ATR) e na tendência de pluralidade para traçar o ascendente e o descendente.
  3. A direção da tendência do indicador de tendência super e a posição do preço em relação à EMA do dia 20 geram sinais de compra e venda:
    • Um sinal de compra é gerado quando o preço ultrapassa a EMA de 20 dias de cima e o indicador de tendência super está em uma tendência de baixa.
    • Quando o preço cai abaixo da EMA de 20 dias e o indicador de tendência super está em uma tendência de baixa, gera um sinal de venda.
  4. A estratégia é abrir mais posições de acordo com o sinal de compra e fechar menos posições de acordo com o sinal de venda.

Vantagens estratégicas

  1. A combinação de EMAs com indicadores de super tendências permite capturar efetivamente as tendências e reduzir os falsos sinais.
  2. O indicador de tendência super é baseado no ATR e pode ser dinamicamente ajustado para a distância entre as ondas de alta e baixa, adaptando-se a diferentes taxas de flutuação do mercado.
  3. A EMA é um filtro para o julgamento de tendências, garantindo que as posições sejam abertas na direção da tendência e aumentando a probabilidade de vitória da estratégia.
  4. A lógica da estratégia é simples, clara, fácil de entender e de implementar.

Risco estratégico

  1. Em mercados turbulentos, essa estratégia pode gerar sinais de compra e venda frequentes, resultando em excesso de transações e perda de comissões.
  2. A estratégia depende dos EMAs e dos indicadores de tendência super, que podem falhar ou ficar para trás em certas condições de mercado.
  3. A estratégia não leva em conta a gestão de riscos, como a gestão de stop loss e posições, o que pode levar a grandes retrações em momentos de forte volatilidade do mercado.

Direção de otimização da estratégia

  1. Adicionar um mecanismo de stop loss, como um stop loss dinâmico de acordo com a configuração do ATR, para controlar a perda máxima de uma única transação.
  2. Optimizar os parâmetros dos EMAs e dos supertrends, como encontrar a melhor combinação de parâmetros usando métodos de otimização de parâmetros, para melhorar a adaptabilidade e a estabilidade da estratégia.
  3. Introdução de gerenciamento de posições, ajustando dinamicamente o tamanho das posições de acordo com a volatilidade do mercado ou a perda de contas para controlar o risco geral.
  4. Considere a inclusão de outros filtros, como volume de transações, volatilidade, etc., para reduzir ainda mais os sinais falsos.

Resumir

A estratégia é usada para gerar sinais de compra e venda através da combinação de EMA de 20 dias e indicadores de tendência super, com o objetivo de capturar comportamentos tendenciais. A vantagem da estratégia é a simplicidade da lógica, a combinação de EMA e indicadores de tendência super pode efetivamente reduzir os falsos sinais. No entanto, em mercados turbulentos, a estratégia pode ser negociada com frequência e a falta de medidas de gestão de risco.

Código-fonte da estratégia
/*backtest
start: 2023-06-11 00:00:00
end: 2024-06-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("20 EMA and Supertrend Strategy", overlay=true)

// Inputs
emaLength = input(20, title="EMA Length")
supertrendMultiplier = input.float(3.0, title="Supertrend Multiplier")
supertrendPeriod = input(10, title="Supertrend Period")

// EMA Calculation
ema = ta.ema(close, emaLength)

// Supertrend Calculation
Periods = supertrendPeriod
src = hl2
Multiplier = supertrendMultiplier
changeATR= input.bool(true, title="Change ATR Calculation Method?")
showsignals = input.bool(true, title="Show Buy/Sell Signals?")
highlighting = input.bool(true, title="Highlighter On/Off?")
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2
up = src - (Multiplier * atr)
up1 = na(up[1]) ? up : up[1]
up := close[1] > up1 ? math.max(up, up1) : up
dn = src + (Multiplier * atr)
dn1 = na(dn[1]) ? dn : dn[1]
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := na(trend[1]) ? trend : trend[1]
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1
plotshape(series=buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 0))
plotshape(series=buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.white)
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(series=sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0))
plotshape(series=sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.white)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=1)
longFillColor = highlighting ? (trend == 1 ? color.new(color.green, 90) : color.new(color.white, 0)) : color.new(color.white, 0)
shortFillColor = highlighting ? (trend == -1 ? color.new(color.red, 90) : color.new(color.white, 0)) : color.new(color.white, 0)
fill(mPlot, upPlot, title="UpTrend Highlighter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highlighter", color=shortFillColor)
alertcondition(buySignal, title="SuperTrend Buy", message="SuperTrend Buy!")
alertcondition(sellSignal, title="SuperTrend Sell", message="SuperTrend Sell!")
changeCond = trend != trend[1]
alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!")

// Buy and Sell Signals based on EMA and Supertrend
buySignalEMA = ta.crossover(close, ema) and trend == 1
sellSignalEMA = ta.crossunder(close, ema) and trend == -1

// Plot EMA
plot(ema, color=color.blue, title="20 EMA")

// Plot Buy and Sell Signals
plotshape(series=buySignalEMA, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal", text="BUY")
plotshape(series=sellSignalEMA, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal", text="SELL")

// Strategy Entries and Exits
if (buySignalEMA)
    strategy.entry("Buy", strategy.long)

if (sellSignalEMA)
    strategy.close("Buy")