
A estratégia de negociação de cruzamento de ouro EMA é feita calculando a média dos EMAs de diferentes períodos e julgando o cruzamento deles para emitir sinais de compra e venda. Quando o EMA de curto período atravessa o EMA de longo período, gera um sinal de compra; Quando o EMA de curto período atravessa o EMA de longo período, gera um sinal de venda.
O núcleo da estratégia é calcular a média EMA de dois períodos diferentes, incluindo uma média EMA de um período mais curto, com um período padrão de 9; e uma média EMA de um período mais longo, com um período padrão de 20. O código calcula essas duas linhas separadamente chamando a função embutida em em em em no script pine. Em seguida, a transação é gerada julgando se as duas linhas EMA se cruzam.
O julgamento do sinal de cruzamento é realizado através de duas funções embutidas no script pine, crossover e crossunder. A função crossover determina se a linha rápida atravessa a linha lenta de baixo para baixo e retorna o valor de Boole; a função crossunder determina se a linha rápida atravessa a linha lenta de cima para baixo e retorna o valor de Boole. De acordo com o valor de retorno dessas duas funções, o código envia a instrução de compra ou venda correspondente.
Além disso, o código também fornece algumas condições auxiliares, como definir datas de início e término, limitar apenas o excesso ou apenas o vazio, etc., o que ajuda a fazer uma avaliação ou otimização mais precisa.
A maior vantagem da estratégia é que é muito simples, direta, fácil de entender e implementar, adequada para os iniciantes. Além disso, a própria média móvel, como um indicador de acompanhamento de tendências, pode acompanhar de forma eficaz as tendências do mercado, aproveitando as tendências para gerar receita adicional. Finalmente, a estratégia tem poucos parâmetros e é fácil de ajustar, o que também é uma de suas vantagens.
A estratégia enfrenta principalmente o risco de negociação de ruído e de reversão de tendência. A linha EMA é vulnerável a flutuações de mercado de curto prazo, podendo produzir sinais errados, resultando em negociações desnecessárias, o que aumenta a frequência e o custo das negociações. Por outro lado, o risco de negociação é maior quando o sinal de cruzamento é emitido, quando a tendência pode estar perto do ponto de reversão.
Pode-se reduzir o ruído de negociação através de métodos como o ajuste do ciclo de EMA, ou adicionar outras condições de filtragem. Ao mesmo tempo, a configuração de stop loss para controlar a perda individual. Os parâmetros de otimização podem tornar a estratégia mais estável.
A estratégia pode ser otimizada em várias direções:
O cruzamento de ouro EMA é uma estratégia de acompanhamento de tendências simples e eficaz. Utiliza o cruzamento de EMA para gerar sinais de negociação e pode capturar automaticamente as tendências de preços. A estratégia é fácil de entender e ajustar, ideal para os iniciantes, mas também pode ser integrada como um módulo em estratégias mais complexas.
/*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)