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.
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.
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.
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.
Esta estratégia pode ser melhorada nos seguintes aspectos:
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)