Estratégia de negociação cruzada da EMA

Autora:ChaoZhang, Data: 2024-02-22 17:48:09
Tags:

img

Resumo

A estratégia de negociação EMA Crossover gera sinais de compra e venda calculadores de linhas EMA de diferentes períodos e detectando suas situações de cruzamento. Quando a EMA mais rápida cruza acima da EMA mais lenta, um sinal de compra é gerado.

Estratégia lógica

O núcleo desta estratégia é calcular duas linhas EMA com períodos diferentes, incluindo uma EMA mais rápida com um período padrão de 9 e uma EMA mais lenta com um período padrão de 20. O código calcula essas duas linhas chamando a função ema embutida no Pine Script. Em seguida, gera sinais de negociação detectando se as duas linhas EMA se cruzam. Especificamente, se a EMA mais rápida cruzar acima da EMA mais lenta, um sinal de compra é acionado. Se a EMA mais rápida cruzar abaixo da EMA mais lenta, um sinal de venda é acionado.

As situações de crossover são detectadas usando as funções crossover e crossunder embutidas no Pine Script. A função crossover verifica se a EMA mais rápida cruza acima da EMA mais lenta e retorna um valor booleano. A função crossunder verifica se a EMA mais rápida cruza abaixo da EMA mais lenta e retorna um valor booleano. Com base nos valores de retorno dessas duas funções, o código envia ordens de compra ou venda correspondentes.

Além disso, o código fornece algumas condições auxiliares, tais como a definição de datas de início / fim, restringindo apenas as negociações longas ou curtas, etc. Esses recursos ajudam a realizar backtests ou otimizações mais sofisticadas.

Análise das vantagens

A maior vantagem desta estratégia é que é muito simples e direta, fácil de entender e implementar, tornando-a adequada para os iniciantes aprenderem. Além disso, como um indicador de tendência, as médias móveis podem rastrear efetivamente as tendências do mercado e gerar lucros adicionais explorando o impulso.

Análise de riscos

Os principais riscos que esta estratégia enfrenta são as negociações de serras e inversões de tendência. As linhas EMA são suscetíveis a flutuações de mercado de curto prazo, que podem gerar sinais falsos e desencadear negociações desnecessárias, aumentando a frequência e os custos de negociação. Por outro lado, quando os sinais cruzados são desencadeados, a tendência pode estar perto de seu ponto de reversão, tornando as negociações mais arriscadas.

Métodos como ajustar os períodos de EMA, adicionar filtros podem ajudar a reduzir os whipsaws. As ordens de stop loss controlam a perda de uma única negociação. A otimização de parâmetros melhora a robustez. No entanto, nenhuma estratégia de negociação pode evitar completamente as perdas, por isso deve-se estar pronto para assumir riscos.

Oportunidades de otimização

Esta estratégia pode ser melhorada nos seguintes aspectos:

  1. Otimizar os períodos de EMA para encontrar os melhores conjuntos de parâmetros
  2. Adicionar indicadores como MACD, RSI como filtros para reduzir falsos sinais
  3. Incorporar métricas de tendência para evitar inversões de tendência
  4. Selecionar ações com base em elementos fundamentais
  5. Ajustar o dimensionamento da posição, definir paradas com base no ATR

Conclusão

O crossover da EMA é uma estratégia simples, mas eficaz, de seguir tendências. Ele usa cruzes da EMA para gerar sinais de negociação, capturando automaticamente as tendências de preços. Esta estratégia fácil de entender e ajustável é perfeita para iniciantes aprenderem. Também pode ser integrada em estratégias mais complexas. No entanto, todas as estratégias carregam riscos e precisam de gestão prudente. Melhorias contínuas em termos de otimização e enriquecimento das condições de mercado podem tornar esta estratégia mais robusta.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// This strategy has been created for illustration purposes only and should not be relied upon as a basis for buying, selling, or holding any asset or security.
// © kirilov

//@version=4
strategy(
     "EMA Cross Strategy",
     overlay=true,
     calc_on_every_tick=true,
     currency=currency.USD
     )

// INPUT:

// Options to enter fast and slow Exponential Moving Average (EMA) values
emaFast = input(title="Fast EMA", type=input.integer, defval=9, minval=1, maxval=9999)
emaSlow = input(title="Slow EMA", type=input.integer, defval=20, minval=1, maxval=9999)

// Option to select trade directions
tradeDirection = input(title="Trade Direction", options=["Long", "Short", "Both"], defval="Both")

// Options that configure the backtest date range
startDate = input(title="Start Date", type=input.time, defval=timestamp("01 Jan 1970 00:00"))
endDate = input(title="End Date", type=input.time, defval=timestamp("31 Dec 2170 23:59"))


// CALCULATIONS:

// Use the built-in function to calculate two EMA lines
fastEMA = ema(close, emaFast)
slowEMA = ema(close, emaSlow)


// PLOT:

// Draw the EMA lines on the chart
plot(series=fastEMA, color=color.black, linewidth=2)
plot(series=slowEMA, color=color.red, linewidth=2)


// CONDITIONS:

// Check if the close time of the current bar falls inside the date range
inDateRange = true

// Translate input into trading conditions
longOK  = (tradeDirection == "Long") or (tradeDirection == "Both")
shortOK = (tradeDirection == "Short") or (tradeDirection == "Both")

// Decide if we should go long or short using the built-in functions
longCondition = crossover(fastEMA, slowEMA)
shortCondition = crossunder(fastEMA, slowEMA)


// ORDERS:

// Submit entry (or reverse) orders
if (longCondition and inDateRange)
    strategy.entry(id="long", long=true, when = longOK)
if (shortCondition and inDateRange)
    strategy.entry(id="short", long=false, when = shortOK)
    
// Submit exit orders in the cases where we trade only long or only short
if (strategy.position_size > 0 and shortCondition)
    strategy.exit(id="exit long", stop=close)
if (strategy.position_size < 0 and longCondition)
    strategy.exit(id="exit short", stop=close)



Mais.