Esta estrategia es modificada de SoftKill21
La estrategia utiliza tres EMA con diferentes períodos: EMA rápida de 25 períodos, EMA estándar de 50 períodos y EMA lenta de 100 períodos. Cuando la EMA rápida cruza la EMA estándar y la EMA lenta, genera una señal de compra. Cuando la EMA rápida cruza por debajo de la EMA estándar y la EMA lenta, genera una señal de venta. Para reducir el retraso, las EMA se calculan utilizando la técnica de suavizado exponencial doble. La estrategia también verifica si los tiempos de mercado abierto de las sesiones de Londres o Nueva York coinciden con las condiciones de entrada. Además, el tamaño de la posición de cada orden se determina dinámicamente utilizando un porcentaje fijo del capital de la cuenta para controlar el riesgo.
Específicamente, la estrategia primero calcula las tres líneas EMA, luego comprueba si la EMA rápida forma una cruz de oro o una cruz de muerte con la EMA estándar y la EMA lenta. Si la condición también coincide con los horarios de mercado abierto de Londres o Nueva York, se generan señales de compra o venta. Al determinar el tamaño de la posición, la estrategia calcula un porcentaje fijo del capital de la cuenta como exposición al riesgo, luego lo convierte en tamaño de contrato y lotes redondos para ajustar la posición dinámicamente para cada orden.
La estrategia tiene las siguientes ventajas:
Las EMA triples pueden suavizar eficazmente los datos de precios e identificar la dirección de la tendencia. Las EMA rápidas son sensibles a los cambios de precios, las EMA estándar siguen una trayectoria constante y las EMA lentas filtran el ruido.
El uso de doble suavización exponencial reduce el retraso y hace que las señales sean más sensibles.
La inclusión de las principales sesiones de negociación evita señales engañosas durante las horas no pico.
El enfoque de gestión del riesgo ajusta el tamaño de la posición en función del capital de la cuenta, evitando pérdidas excesivas en operaciones individuales.
La lógica es simple y clara, fácil de entender e implementar, adecuada para principiantes.
La estrategia se puede optimizar y ajustar para diferentes pares de divisas y plazos de tiempo, con una amplia aplicabilidad.
La estrategia también tiene algunos riesgos potenciales:
Las EMA no pueden filtrar eficazmente las fallas falsas a corto plazo causadas por eventos repentinos, que pueden generar señales erróneas.
El dimensionamiento de las posiciones por porcentaje fijo no puede ajustarse dinámicamente a la volatilidad del mercado, lo que conduce a posiciones de tamaño excesivo o insuficiente.
Solo se consideran dos sesiones principales, que pueden perder oportunidades comerciales en otras sesiones.
La falta de un mecanismo de stop loss resulta en la incapacidad de controlar eficazmente la pérdida unilateral.
Los cruces de la EMA tienen cierto retraso y pueden perder el mejor momento de entrada.
El rendimiento puede verse afectado por los costes de transacción, por lo que los niveles de stop loss y take profit deben ajustarse en consecuencia.
La estrategia se puede optimizar en los siguientes aspectos:
Prueba diferentes parámetros de período EMA para encontrar combinaciones óptimas.
Agregue otros indicadores de filtrado como RSI, Bandas de Bollinger para mejorar la calidad de la señal.
Introducir un dimensionamiento dinámico de las posiciones basado en la volatilidad y la rentabilidad del mercado.
Añadir movimiento o tiempo de parada de pérdida para limitar las pérdidas.
Prueba diferentes sesiones de negociación para encontrar los momentos óptimos.
Optimizar los niveles de toma de ganancias y de stop loss para equilibrar el tamaño de las ganancias y la tasa de ganancias.
Intenta modificar el cálculo de la EMA como una EMA ponderada lineal para reducir el retraso.
Utilice el aprendizaje automático para encontrar parámetros óptimos.
Modelo de costes de transacción y sistema de ajuste para obtener el máximo beneficio neto.
A través de las optimizaciones anteriores, se puede mejorar la rentabilidad del sistema, controlar las reducciones, ampliar la aplicabilidad, para obtener una estrategia comercial más poderosa y robusta.
La lógica general de esta estrategia es clara, utilizando EMA triples para identificar tendencias, combinando con las sesiones principales para la ejecución y adoptando el tamaño de posición basado en el porcentaje de la cuenta. Pertenece a un sistema típico de seguimiento de tendencias. Hay un amplio margen de optimización a través de ajuste de parámetros, mejoras de mecanismos, introducción de tecnología, etc. para ampliar aún más su aplicabilidad en más mercados y mejorar la robustez.
/*backtest start: 2023-09-19 00:00:00 end: 2023-09-26 00:00:00 period: 15m basePeriod: 5m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // original author SoftKill21 //@version=4 //@capam strategy(title="Triple EMA Scalper low lag strat", shorttitle="3EMA scalper", overlay=true) strategy.initial_capital = 50000 len1 = input(25, minval=1, title="Length") len2 = input(50, minval=1, title="Length") len3 = input(100, minval=1, title="Length") src = input(close, title="Source") tmp1 = ema(src, len1) tmp2 = ema(src, len2) tmp3 = ema(src, len3) fastemaOut = 2*tmp1 - ema(tmp1, len1) standardemaOut = 2*tmp2 - ema(tmp2, len2) slowemaOut = 2*tmp3 - ema(tmp3, len3) //fastemaOut = sma(src, len1) //standardemaOut = sma(src, len2) //slowemaOut = sma(src, len3) plot(fastemaOut, color=color.black, title="First EMA") plot(standardemaOut, color=color.yellow, title="Second EMA") plot(slowemaOut, color=color.blue, title="Third EMA") timeinrange(res, sess) => time(res, sess) != 0 londopen = timeinrange(timeframe.period, "0300-1100") nyopen = timeinrange(timeframe.period, "0800-1600") longCondition = crossover(fastemaOut,standardemaOut) and crossover(fastemaOut,slowemaOut) and londopen //or nyopen) shortCondition = crossunder(fastemaOut,standardemaOut) and crossunder(fastemaOut,slowemaOut) and londopen// or nyopen) longCondition2 = crossover(fastemaOut,standardemaOut) and crossover(fastemaOut,slowemaOut) and nyopen shortCondition2 = crossunder(fastemaOut,standardemaOut) and crossunder(fastemaOut,slowemaOut) and nyopen tp = input(50,title="TP") sl = input(100, title="SL") tradeLondon = input(title="Trade london session?", type=input.bool, defval=true) tradeNewyork = input(title="Trade new york session?", type=input.bool, defval=true) //MONEY MANAGEMENT-------------------------------------------------------------- balance = strategy.netprofit + strategy.initial_capital //current balance floating = strategy.openprofit //floating profit/loss risk = input(1,type=input.float,title="Risk % of equity ")/100 //risk % per trade temp01 = balance * risk //Risk in USD temp02 = temp01/sl //Risk in lots temp03 = temp02*100000 //Convert to contracts size = temp03 - temp03%1000 //Normalize to 1000s (Trade size) if(size < 1000) size := 1000 if(tradeLondon==true) strategy.entry("long",1,when=longCondition) strategy.exit("tp/sl","long",profit=tp,loss=sl) strategy.entry("short",0,when=shortCondition) strategy.exit("tp/sl","short",profit=tp,loss=sl) if(tradeNewyork==true) strategy.entry("long",1,when=longCondition2) strategy.exit("tp/sl","long",profit=tp,loss=sl) strategy.entry("short",0,when=shortCondition2) strategy.exit("tp/sl","short",profit=tp,loss=sl) // strategy.risk.max_intraday_filled_orders(2)