
La estrategia opera sobre la base de señales cruzadas de dos medias móviles de índices (EMA). Se abre más posiciones cuando el EMA corto atraviesa el EMA largo; se cierra menos posiciones cuando el EMA corto atraviesa el EMA largo. La estrategia también introduce un mecanismo de stop loss y un filtro de tiempo de negociación para controlar el riesgo y optimizar el rendimiento de la estrategia.
La estrategia utiliza dos EMA de diferentes períodos como base para juzgar la tendencia. La EMA es más rápida que la media móvil simple (SMA) para responder a los cambios en los precios y la distribución de peso es más racional. Cuando el EMA a corto plazo atraviesa el EMA a largo plazo, significa que el precio puede formar una tendencia alcista y abrir más posiciones; por el contrario, cuando el EMA a corto plazo atraviesa el EMA a largo plazo, significa que la tendencia alcista puede terminar y cerrar posiciones.
Además de las señales de cruce de línea media, la estrategia también introduce un mecanismo de stop loss. Por un lado, se establece un stop loss porcentual fijo, es decir, se obliga a cerrar una posición para controlar la pérdida cuando el precio de la posición abierta cae por encima de un determinado porcentaje en relación con el precio; por otro lado, también se puede optar por cerrar una posición cuando el precio de cierre de la posición es inferior al precio de cierre de la línea K anterior.
Además, la estrategia también introduce un filtro de tiempo de transacción. El usuario puede configurar las horas de inicio y finalización permitidas para las transacciones, evitando así realizar transacciones en períodos de tiempo específicos (como vacaciones, horas de no negociación, etc.).
Sencilla y fácil de usar: La lógica de la estrategia es clara, con solo dos EMA como señal de negociación, fácil de entender e implementar.
Seguimiento de tendencias: la capacidad de la EMA para responder rápidamente a los cambios en los precios permite a la estrategia capturar la formación y el final de las tendencias a tiempo, lo que genera beneficios de seguimiento de tendencias.
Control de riesgos: Introducción de paros porcentual fijo y paros basados en el precio de cierre de la línea K anterior, que permiten controlar eficazmente las pérdidas y retiros de una sola operación.
Flexibilidad de parámetros: el usuario puede ajustar el ciclo EMA, el porcentaje de pérdida, si se utiliza el precio de cierre de la pérdida de la línea K anterior, el período de tiempo de negociación, etc., según sus necesidades, para optimizar el rendimiento de la estrategia.
Riesgo de optimización de parámetros: el rendimiento de la estrategia depende de la elección de parámetros como el ciclo EMA, el porcentaje de parada, etc. Los parámetros inadecuados pueden causar un mal rendimiento de la estrategia. Por lo tanto, es necesario realizar una optimización de parámetros y un retraso en los datos históricos para seleccionar los parámetros óptimos.
Riesgo de mercado: Esta estrategia se aplica principalmente en mercados tendenciales, donde el comercio frecuente puede provocar un retiro mayor en un mercado convulso o una reversión de la tendencia. Por lo tanto, es necesario ajustar los parámetros de la estrategia según la situación del mercado o dejar de usarla.
Riesgo de costos: Esta estrategia puede generar un mayor número de transacciones, lo que aumenta el costo de las transacciones. Por lo tanto, es necesario elegir el patrón y el volumen de transacciones adecuados y controlar el costo de cada transacción.
Introducción de más indicadores técnicos: Sobre la base de las señales cruzadas de EMA, la introducción de otros indicadores técnicos, como RSI, MACD, etc., forma una señal de negociación multifactorial y mejora la precisión de las tendencias.
Detención dinámica: ajuste dinámico de la posición de detención de acuerdo con la volatilidad del mercado, ATR, etc., mientras se controla el riesgo y se minimiza la pérdida de ganancias de la detención.
Gestión de posiciones: ajuste dinámico del tamaño de la posición según la intensidad de la tendencia del mercado, el grado de desviación de los precios y la línea media, etc. Aumente la posición cuando la tendencia es fuerte y reduzca la posición cuando la tendencia se debilita o no es clara.
Optimización de aprendizaje automático: utiliza algoritmos de aprendizaje automático para optimizar los parámetros de la estrategia, seleccionar automáticamente la combinación de parámetros óptima, aumentar los beneficios de la estrategia y reducir el riesgo de sobreajuste.
Esta estrategia de cuantificación de cruce de doble línea determina la tendencia a través de la señal de cruce de dos EMA, al mismo tiempo que introduce un mecanismo de parada de pérdidas y un filtro de tiempo de negociación, logrando un buen equilibrio entre la capacidad de seguimiento de tendencias y el control de riesgos. Aunque la lógica de la estrategia es simple, se pueden obtener ganancias estables en un mercado de tendencias con una optimización razonable de los parámetros y el control de riesgos.
/*backtest
start: 2023-03-02 00:00:00
end: 2024-03-07 00:00:00
period: 1d
basePeriod: 1h
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/
// © ZenAndTheArtOfTrading / www.PineScriptMastery.com
// @version=5
strategy("EMA strategy",
overlay=true,
initial_capital=50000,
default_qty_type=strategy.percent_of_equity,
default_qty_value=100, // 100% of balance invested on each trade
commission_type=strategy.commission.cash_per_contract,
commission_value=0.005) // Interactive Brokers rate
// Get user input
i_ma1 = input.int(title="MA 1 Length", defval=200, step=10, group="Strategy Parameters", tooltip="Long-term MA")
i_ma2 = input.int(title="MA 2 Length", defval=10, step=10, group="Strategy Parameters", tooltip="Short-term MA")
i_stopPercent = input.float(title="Stop Loss Percent", defval=0.10, step=0.1, group="Strategy Parameters", tooltip="Failsafe Stop Loss Percent Decline")
i_lowerClose = input.bool(title="Exit On Lower Close", defval=false, group="Strategy Parameters", tooltip="Wait for a lower-close before exiting above MA2")
i_startTime = input(title="Start Filter", defval=timestamp("01 Jan 1995 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime = input(title="End Filter", defval=timestamp("1 Jan 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups")
// Get indicator values
ma1 = ta.ema(close, i_ma1)
ma2 = ta.ema(close, i_ma2)
// Check filter(s)
f_dateFilter = true
// Check buy/sell conditions
var float buyPrice = 0
buyCondition = close > ma1 and strategy.position_size == 0 and f_dateFilter
sellCondition = close < ma2 and strategy.position_size > 0 //and (not i_lowerClose or close < low[1])
stopDistance = strategy.position_size > 0 ? ((buyPrice - close) / close) : na
stopPrice = strategy.position_size > 0 ? buyPrice - (buyPrice * i_stopPercent) : na
stopCondition = strategy.position_size > 0 and stopDistance > i_stopPercent
// Enter positions
if buyCondition
strategy.entry(id="Long", direction=strategy.long)
if buyCondition[1]
buyPrice := open
// Exit positions
if sellCondition or stopCondition
strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : ""))
buyPrice := na
// Draw pretty colors
plot(buyPrice, color=color.lime, style=plot.style_linebr)
plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1)
plot(ma1, color=color.blue)
plot(ma2, color=color.orange)