Esta estrategia se basa en las señales cruzadas de dos promedios móviles exponenciales (EMA) para la negociación. Cuando la EMA a corto plazo cruza por encima de la EMA a largo plazo, abre una posición larga; cuando la EMA a corto plazo cruza por debajo de la EMA a largo plazo, cierra la posición. La estrategia también introduce un mecanismo de stop-loss y un filtro de tiempo de negociación para controlar los riesgos y optimizar el rendimiento de la estrategia.
Esta estrategia utiliza dos EMA con períodos diferentes como base para el juicio de tendencia. En comparación con los promedios móviles simples (SMA), las EMA pueden responder a los cambios de precios más rápidamente y tienen una distribución de peso más razonable. Cuando la EMA a corto plazo cruza por encima de la EMA a largo plazo, indica que el precio puede formar una tendencia al alza y se abre una posición larga; por el contrario, cuando la EMA a corto plazo cruza por debajo de la EMA a largo plazo, indica que la tendencia al alza puede terminar y la posición se cierra.
Además de las señales cruzadas de la media móvil, la estrategia también introduce un mecanismo de stop-loss. Por un lado, se establece un stop-loss porcentual fijo, es decir, cuando el precio cae más de un porcentaje específico en relación con el precio de apertura, la posición se cierra a la fuerza para controlar las pérdidas; por otro lado, también es posible elegir cerrar la posición cuando el precio de cierre es menor que el precio de cierre de la vela anterior. Estos dos métodos de stop-loss pueden controlar efectivamente el descenso de la estrategia.
Por otra parte, la estrategia también introduce un filtro de tiempo de negociación. Los usuarios pueden establecer los horarios de inicio y final de la negociación permitida por sí mismos, evitando así la negociación durante períodos de tiempo específicos (como días festivos, horas de no negociación, etc.).
Simple y fácil de usar: La lógica de la estrategia es clara y utiliza sólo dos EMA como señales de negociación, que es fácil de entender e implementar.
Seguimiento de tendencias: Las EMA pueden responder rápidamente a los cambios de precios, lo que permite a la estrategia capturar la formación de tendencias y su finalización de manera oportuna, obteniendo así ganancias de seguimiento de tendencias.
Control de riesgos: la introducción de un porcentaje fijo de stop-loss y un stop-loss basado en el precio de cierre del candelero anterior puede controlar eficazmente las pérdidas y los retiros de una sola transacción.
Parámetros flexibles: Los usuarios pueden ajustar parámetros como el período EMA, el porcentaje de stop-loss, si utilizar el precio de cierre de la vela anterior para el stop-loss, el período de tiempo de negociación, etc., de acuerdo con sus propias necesidades, optimizando así el rendimiento de la estrategia.
Riesgo de optimización de parámetros: el rendimiento de la estrategia depende de la selección de parámetros como el período EMA y el porcentaje de stop-loss, y los parámetros inadecuados pueden conducir a un mal rendimiento de la estrategia.
Riesgo de mercado: La estrategia es principalmente aplicable a los mercados de tendencia. En un mercado volátil o una inversión de tendencia, la negociación frecuente puede conducir a grandes reducciones. Por lo tanto, es necesario ajustar los parámetros de la estrategia o dejar de usar la estrategia de acuerdo con las condiciones del mercado.
Riesgo de costes: la estrategia puede generar un gran número de operaciones, aumentando así los costes de transacción. Por lo tanto, es necesario seleccionar objetivos y volúmenes de operaciones adecuados y controlar el coste de cada operación.
Introducir más indicadores técnicos: sobre la base de las señales cruzadas de la EMA, introducir otros indicadores técnicos como el RSI y el MACD para formar señales de negociación multifactorial y mejorar la precisión del juicio de tendencia.
Posiciones de suspensión de pérdidas dinámicas: ajustar dinámicamente la posición de suspensión de pérdidas de acuerdo con indicadores como la volatilidad del mercado y el ATR, controlando al mismo tiempo los riesgos y minimizando la pérdida de beneficios causada por la suspensión de pérdidas en la medida de lo posible.
Gestión de la posición: ajustar dinámicamente el tamaño de la posición de acuerdo con la fuerza de la tendencia del mercado, el grado de desviación del precio de la media móvil, etc., aumentar la posición cuando la tendencia es fuerte y disminuir la posición cuando la tendencia se debilita o no está clara.
Optimización del aprendizaje automático: utilizar algoritmos de aprendizaje automático para optimizar los parámetros de la estrategia y seleccionar automáticamente la combinación óptima de parámetros, mejorar los rendimientos de la estrategia y reducir los riesgos de sobreajuste.
Esta estrategia cuantitativa cruzada de EMA utiliza las señales cruzadas de dos EMA para juzgar la tendencia, al tiempo que introduce un mecanismo de stop-loss 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, puede obtener retornos estables en los mercados de tendencias a través de una optimización razonable de parámetros y control de riesgos. En el futuro, la estrategia puede mejorarse desde aspectos como la introducción de más indicadores técnicos, stop-loss dinámico, gestión de posiciones y optimización de aprendizaje automático, para mejorar aún más el rendimiento y la robustez de la estrategia. En general, esta estrategia es una estrategia de negociación cuantitativa fácil de entender y fácil de implementar, adecuada para que los operadores cuantitativos de nivel de entrada aprendan y utilicen.
/*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)