
La estrategia utiliza el cruce de la línea EMA rápida y la línea EMA lenta como señales de compra y venta para realizar operaciones automáticas en función del cruce de la línea media. La línea EMA rápida aprieta los movimientos de precios y la línea EMA lenta suaviza los movimientos de precios.
La estrategia generó señales de negociación principalmente calculando las líneas EMA rápida y lenta y comparando la relación entre las dos líneas medias.
En primer lugar, se establece en los parámetros de entrada el cicloemaFast de la EMA rápida como 1, de modo que la EMA rápida pueda ajustarse a los cambios en el precio. Al mismo tiempo, se establece el cicloemaSlowBuy para generar una señal de compra yemaSlowSell para generar una señal de venta.
Luego, de acuerdo con el ciclo de la entrada, se calculan el EMA rápido y el EMA lento. El EMA rápido tiene un ciclo fijo de 1, seguido de los precios; el EMA lento es un parámetro ajustable que suaviza los datos de precios.
A continuación, compara la relación entre el tamaño de la EMA rápida y el de la EMA lenta para determinar el cruce. Si la EMA rápida atraviesa la EMA lenta desde abajo, se genera un tenedor, lo que satisface la condición de compra. Si la EMA rápida cae desde arriba y rompe la EMA lenta, se genera un tenedor muerto, lo que satisface la condición de venta.
Finalmente, cuando se cumplan las condiciones de compra y venta, ejecutar las instrucciones de apertura de posición y posición correspondientes para completar la transacción. Al mismo tiempo, comprobar si la hora actual está dentro del rango de tiempo de retracción para evitar transacciones erróneas fuera del rango de fechas.
Las siguientes medidas de optimización pueden considerarse en función de los riesgos:
En combinación con otros indicadores, se filtran las señales cruzadas de EMA para evitar señales erróneas
Ajuste de los parámetros de EMA en función de la volatilidad del mercado para reducir la frecuencia de las operaciones
Incrementar la consideración de las pérdidas y las paradas, y controlar el riesgo
Optimizar el ciclo de los EMA rápidos para usar parámetros más adecuados en condiciones de mercado específicas
Aumentar el conocimiento de las tendencias y evitar el exceso de comercio en mercados convulsionados
La estrategia puede ser optimizada aún más en las siguientes direcciones:
Se puede encontrar la combinación de parámetros que mejor se desempeña en el retroceso de datos históricos, recorriendo los diferentes parámetros de emaFast y emaSlow, utilizando métodos de optimización progresiva o de optimización aleatoria.
Por ejemplo, se puede combinar indicadores como MACD, KDJ y Brin Belt para evitar que las señales cruzadas de EMA produzcan señales erróneas.
Calcular el promedio real de las ondas, etc., para determinar si la tendencia es fuerte o débil, y evitar caer en un mercado convulso.
Estudiar los puntos de parada óptimos para controlar el riesgo de pérdidas y determinar los puntos de parada razonables para maximizar las ganancias.
No solo se puede probar una combinación de EMA rápida o lenta, sino también una combinación de EMA doble, triple o incluso multi-EMA para buscar un parámetro más favorable.
Para los mercados con una tendencia más fuerte, se puede acelerar el ciclo EMA adecuadamente, mientras que los mercados convulsivos pueden ralentizar el ciclo EMA.
La estrategia de cruce de la EMA es clara y fácil de entender, y utiliza indicadores técnicos para determinar el momento de comprar y vender. La estrategia es personalizable y se puede optimizar mediante la adaptación de los parámetros de la EMA para crear estrategias de negociación para diferentes entornos del 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")