O recurso está a ser carregado... Carregamento...

Estratégia de negociação quantitativa cruzada da EMA

Autora:ChaoZhangData: 2024-11-18 15:53:49
Tags:EMA

Resumo

Esta estratégia é um sistema de negociação quantitativo baseado em cruzamento de médias móveis combinado com mecanismos dinâmicos de take-profit e stop-loss. O núcleo da estratégia usa o cruzamento de médias móveis exponenciais (EMA) de 10 períodos e 26 períodos para identificar tendências de mercado e executar negociações durante retracements. O sistema emprega níveis fixos de take-profit e stop-loss para proteger o capital através de uma gestão de risco rigorosa. Esta estratégia é particularmente adequada para instrumentos de negociação de alta volatilidade, pois muitas vezes fornecem sinais mais claros de reversão do mercado e maior potencial de lucro.

Princípios de estratégia

A estratégia utiliza dois EMAs com períodos diferentes como indicadores principais: um EMA de curto prazo de 10 períodos e um EMA de longo prazo de 26 períodos. Um sinal de compra é gerado quando a EMA de curto prazo cruza acima da EMA de longo prazo, indicando uma tendência de alta; um sinal de venda é gerado quando a EMA de curto prazo cruza abaixo da EMA de longo prazo, indicando uma tendência de queda. O sistema entra em negociações durante os retraços de preços após a confirmação da tendência, com níveis de take-profit de 30 pontos e stop-loss de 15 pontos para controle de risco. A estratégia emprega um mecanismo de sinal único, permitindo apenas uma negociação direcional de cada vez, o que ajuda a reduzir a complexidade do sistema e melhorar a confiabilidade.

Vantagens da estratégia

  1. Signais claros: utiliza os crossovers da EMA como sinais de negociação, fornecendo regras simples e claras que são fáceis de executar e monitorizar
  2. Risco controlado: utiliza níveis fixos de take-profit e stop-loss para uma gestão eficaz do risco por transação
  3. Seguimento de tendências: Combina cruzamento da EMA e retracements de preços para capturar eficazmente mercados de tendências
  4. Alta automação: lógica estratégica clara que é fácil de implementar em sistemas de negociação automatizados
  5. Alta adaptabilidade: adequado para vários instrumentos de negociação, especialmente aqueles com alta volatilidade

Riscos estratégicos

  1. Risco de mercado perturbado: pode gerar sinais falsos frequentes em mercados limitados ao intervalo
  2. Risco de deslizamento: pode enfrentar um deslizamento significativo durante períodos de alta volatilidade
  3. Risco de stop-loss: os níveis fixos de stop-loss podem não ser suficientemente flexíveis em determinadas condições de mercado
  4. Lag de sinal: os sinais cruzados da EMA têm um lag inerente, potencialmente faltando pontos de entrada ideais
  5. Risco de gestão de fundos: requer um controlo adequado do dimensionamento das posições por transacção

Orientações de otimização

  1. O valor da posição em risco deve ser calculado de acordo com o método de classificação da posição em risco.
  2. Filtragem de sinais: adicionar volume, volatilidade ou outros indicadores auxiliares para filtrar falsos sinais
  3. Filtragem do tempo: aplicar filtros do tempo de negociação para evitar períodos altamente voláteis
  4. Gerenciamento de posições: adicionar mecanismos parciais de obtenção de lucros, permitindo que as posições restantes sigam as tendências
  5. Gestão de fundos: Implementar um dimensionamento dinâmico das posições com base no património da conta

Conclusão

Esta estratégia estabelece um sistema de negociação completo, combinando crossovers EMA com retracements de preços. O design da estratégia é simples e intuitivo, com controle de risco claro, adequado para instrumentos de negociação de alta volatilidade. Através de otimização adequada e ajuste de parâmetros, esta estratégia tem o potencial de alcançar retornos estáveis na negociação ao vivo.


/*backtest
start: 2023-11-18 00:00:00
end: 2024-11-17 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("30 Pips Target & 15 Pips Stop-Loss with One Signal at a Time", overlay=true)

// Define settings for target and stop-loss in pips
target_in_pips = 30
stoploss_in_pips = 10

// Convert pips to price value based on market (for forex, 1 pip = 0.0001 for major pairs like GBP/JPY)
pip_value = syminfo.mintick * 10  // For forex, 1 pip = 0.0001 or 0.01 for JPY pairs
target_value = target_in_pips * pip_value
stoploss_value = stoploss_in_pips * pip_value

// Define EMAs (10-EMA and 26-EMA) for the crossover strategy
ema10 = ta.ema(close, 10)
ema26 = ta.ema(close, 26)

// Buy signal: when 10 EMA crosses above 26 EMA
longCondition = ta.crossover(ema10, ema26)
// Sell signal: when 10 EMA crosses below 26 EMA
shortCondition = ta.crossunder(ema10, ema26)

// Define price levels with explicit type float
var float long_entry_price = na
var float long_take_profit = na
var float long_stop_loss = na
var float short_entry_price = na
var float short_take_profit = na
var float short_stop_loss = na

// Variable to track if a trade is active
var bool inTrade = false

// Check if the trade hit stop loss or take profit
if (inTrade)
    if (not na(long_take_profit) and close >= long_take_profit)
        inTrade := false  // Exit the trade after hitting target
        long_entry_price := na
        long_take_profit := na
        long_stop_loss := na
        strategy.close("Long")

    if (not na(long_stop_loss) and close <= long_stop_loss)
        inTrade := false  // Exit the trade after hitting stoploss
        long_entry_price := na
        long_take_profit := na
        long_stop_loss := na
        strategy.close("Long")

    if (not na(short_take_profit) and close <= short_take_profit)
        inTrade := false  // Exit the trade after hitting target
        short_entry_price := na
        short_take_profit := na
        short_stop_loss := na
        strategy.close("Short")

    if (not na(short_stop_loss) and close >= short_stop_loss)
        inTrade := false  // Exit the trade after hitting stoploss
        short_entry_price := na
        short_take_profit := na
        short_stop_loss := na
        strategy.close("Short")

// Only generate new signals if not already in a trade
if (not inTrade)
    if (longCondition)
        long_entry_price := close
        long_take_profit := close + target_value
        long_stop_loss := close - stoploss_value
        strategy.entry("Long", strategy.long)  // Enter a long trade
        strategy.exit("Take Profit/Stop Loss", "Long", limit=long_take_profit, stop=long_stop_loss)
        inTrade := true  // Mark trade as active

    if (shortCondition)
        short_entry_price := close
        short_take_profit := close - target_value
        short_stop_loss := close + stoploss_value
        strategy.entry("Short", strategy.short)  // Enter a short trade
        strategy.exit("Take Profit/Stop Loss", "Short", limit=short_take_profit, stop=short_stop_loss)
        inTrade := true  // Mark trade as active

// Plot the levels on the chart only when in a trade
plot(inTrade and not na(long_take_profit) ? long_take_profit : na, color=color.green, linewidth=2, style=plot.style_linebr, title="Take Profit (Long)")
plot(inTrade and not na(long_stop_loss) ? long_stop_loss : na, color=color.red, linewidth=2, style=plot.style_linebr, title="Stop Loss (Long)")

plot(inTrade and not na(short_take_profit) ? short_take_profit : na, color=color.green, linewidth=2, style=plot.style_linebr, title="Take Profit (Short)")
plot(inTrade and not na(short_stop_loss) ? short_stop_loss : na, color=color.red, linewidth=2, style=plot.style_linebr, title="Stop Loss (Short)")

plotshape(series=longCondition and not inTrade, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(series=shortCondition and not inTrade, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")


Relacionados

Mais.