
A estratégia usa o cruzamento da linha EMA rápida e da linha EMA lenta como sinais de compra e venda para realizar negociações automáticas de acordo com o cruzamento da linha média. A linha EMA rápida aperta a mudança de preço e a linha EMA lenta suaviza a mudança de preço. Um sinal de compra é gerado quando a linha EMA rápida atravessa a linha EMA lenta da direção inferior; um sinal de venda é gerado quando a linha EMA rápida desce da direção superior e rompe a linha EMA lenta.
A estratégia gerou sinais de negociação principalmente através da contagem das linhas EMA rápida e EMA lenta e da comparação da relação entre as duas linhas médias.
Primeiro, configure o ciclo de EMAs rápidas em FAST para 1 no parâmetro de entrada, para que o EMA rápido possa acompanhar as mudanças de preço. Ao mesmo tempo, configure o ciclo de EMAs lentas, para gerar um sinal de compra, e para gerar um sinal de venda.
Em seguida, de acordo com o período de entrada, calcula-se o EMA rápido e o EMA lento. O EMA rápido é um período fixo de 1, acompanhando o preço; O EMA lento é um parâmetro ajustável, suavizando os dados do preço.
Em seguida, compare a relação de tamanho entre o EMA rápido e o EMA lento, para determinar a situação de cruzamento. Se o EMA rápido atravessar o EMA lento da direção inferior, produz um garfo de ouro, satisfazendo a condição de compra; Se o EMA rápido cair da direção superior e quebrar o EMA lento, produz um garfo morto, satisfazendo a condição de venda.
Finalmente, quando as condições de compra e venda são satisfeitas, execute as instruções correspondentes de abertura de posição e posição para concluir a transação. Ao mesmo tempo, verifique se o tempo atual está dentro do intervalo de tempo de retracção para evitar transações erradas fora do intervalo de datas.
Para os riscos, podem ser consideradas as seguintes medidas de otimização:
Combinação com outros indicadores para filtrar o sinal de cruzamento EMA e evitar sinais errados
Ajustar os parâmetros do EMA de acordo com a volatilidade do mercado, reduzindo a frequência de negociação
Aumentar a consideração de stop loss e de stop loss, controlar o risco
Otimização do ciclo de EMAs rápidas, com parâmetros mais adequados em determinadas condições de mercado
Aumentar o julgamento de tendências e evitar o excesso de negociação em mercados turbulentos
A estratégia pode ser melhorada em várias direções:
É possível encontrar a combinação de parâmetros com melhor desempenho em uma retrospectiva de dados históricos, através de percorrer os diferentes parâmetros de emaFast e emaSlow, usando o método de otimização por etapas ou otimização aleatória.
Por exemplo, pode ser combinado com MACD, KDJ, Brin e outros indicadores, evitando que o cruzamento de EMA produza um sinal falso.
Calcular indicadores como a amplitude real média para avaliar a força e a fraqueza da tendência e evitar cair em um mercado de turbulência.
Estudar os melhores pontos de parada para controlar o risco de perdas e determinar pontos de parada razoáveis para maximizar os lucros.
Teste não apenas combinações de EMAs rápidas e lentas, mas também combinações de EMAs duplas, triplos e até mesmo múltiplos, procurando o melhor parâmetro.
Os mercados mais tendenciosos podem acelerar o ciclo EMA de forma apropriada, enquanto os mercados mais agitados podem desacelerar o ciclo EMA.
A estratégia de EMA cruzada é clara e fácil de entender, usando indicadores técnicos maduros para determinar o momento de compra e venda. A estratégia é personalizável e pode ser otimizada ajustando os parâmetros do EMA para criar estratégias de negociação para diferentes condições de mercado.
/*backtest
start: 2023-10-10 00:00:00
end: 2023-11-09 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(
"EMA Cross Strategy with Custom Buy/Sell Conditions",
overlay=true
)
// INPUT:
// Options to enter fast Exponential Moving Average (EMA) value
emaFast = 1
// Options to enter slow EMAs for buy and sell signals
slowEMABuy = input(title="Slow EMA for Buy Signals", defval=20, minval=1, maxval=9999)
slowEMASell = input(title="Slow EMA for Sell Signals", defval=30, 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 2018 00:00"))
endDate = input(title="End Date", type=input.time, defval=timestamp("31 Dec 2025 23:59"))
// CALCULATIONS:
// Use a fixed fast EMA of 1 and calculate slow EMAs for buy and sell signals
fastEMA = ema(close, emaFast)
slowEMABuyValue = ema(close, slowEMABuy)
slowEMASellValue = ema(close, slowEMASell)
// PLOT:
// Draw the EMA lines on the chart
plot(series=fastEMA, color=color.orange, linewidth=2)
plot(series=slowEMABuyValue, color=color.blue, linewidth=2, title="Slow EMA for Buy Signals")
plot(series=slowEMASellValue, color=color.red, linewidth=2, title="Slow EMA for Sell Signals")
// CONDITIONS:
// Check if the close time of the current bar falls inside the date range
inDateRange = true
// Translate input into trading conditions for buy and sell signals
buyCondition = crossunder(slowEMABuyValue, fastEMA)
sellCondition = crossover(slowEMASellValue, fastEMA)
// Translate input into overall trading conditions
longOK = (tradeDirection == "Long") or (tradeDirection == "Both")
shortOK = (tradeDirection == "Short") or (tradeDirection == "Both")
// ORDERS:
// Submit entry (or reverse) orders based on buy and sell conditions
if (buyCondition and inDateRange)
strategy.entry("Buy", strategy.long)
if (sellCondition and inDateRange)
strategy.close("Buy")
// Submit exit orders based on opposite trade conditions
if (strategy.position_size > 0 and sellCondition)
strategy.close("Sell")
if (strategy.position_size < 0 and buyCondition)
strategy.close("Sell")