Esta estrategia se basa en la estrategia Amazing scalper for majors with risk management de SoftKill21 y se modifica para reducir el retraso con el uso de promedios móviles de índices triples en lugar de las promedios móviles simples originales. La estrategia se aplica al ciclo de 1 minuto de las principales pares de divisas y utiliza un método de seguimiento de tendencias para comprar y vender en función de los cruces y cruces de oro de las EMA rápidas, EMA estándar y EMA lentas.
La estrategia utiliza un índice de promedios móviles de tres períodos diferentes: 25 períodos de EMA rápida, 50 períodos de EMA estándar y 100 períodos de EMA lenta. Cuando la EMA rápida sube por encima de la EMA estándar y la EMA lenta, genera una señal de compra; cuando la EMA rápida baja por debajo de la EMA estándar y la EMA lenta, genera una señal de venta.
Concretamente, la estrategia primero calcula las tres líneas de EMA, y luego determina si la EMA rápida forma un cruce o un tenedor de oro con la EMA estándar y la EMA lenta, lo que genera una señal de compra o venta si se cumplen al mismo tiempo las condiciones para que coincida con la hora de apertura de Londres o Nueva York. Al determinar el tamaño de la posición, la estrategia primero calcula el porcentaje fijo de los intereses de la cuenta como un umbral de riesgo, y luego lo convierte en el número de contratos y el número de horas estándar, lo que ajusta dinámicamente la posición de cada orden.
La estrategia tiene las siguientes ventajas:
El uso de triple EMA, capaz de suavizar eficazmente los datos de precios, identificar la dirección de la tendencia. El EMA rápido es sensible a los cambios en los precios, el EMA estándar es un seguimiento estable, el EMA lento filtra el ruido. El uso de los tres en conjunto, puede filtrar las brechas falsas y determinar la dirección de la tendencia.
Aplicación de la técnica de suavizado de índice secundario para calcular el EMA, reduciendo el retraso y haciendo que la señal sea más sensible.
La combinación de las horas principales de la operación para evitar señales engañosas en las horas no principales de la operación.
La adopción de principios de gestión de riesgos para ajustar las posiciones en función de los intereses de la cuenta. Evite que una sola pérdida cause un impacto excesivo en la cuenta.
La lógica de la estrategia es simple, clara, fácil de entender y adecuada para los principiantes.
Se puede ajustar de manera óptima para diferentes pares de divisas y períodos de tiempo.
La estrategia también tiene algunos riesgos:
La EMA no puede filtrar eficazmente las brechas de brecha de corto plazo causadas por eventos repentinos, que pueden generar señales erróneas. Se recomienda analizar la filtración en combinación con otros indicadores.
El porcentaje fijo de posiciones no permite un ajuste dinámico a las fluctuaciones del mercado, existe un problema de posiciones demasiado grandes o demasiado pequeñas. Se puede considerar la introducción de indicadores de ajuste dinámico de posiciones como la volatilidad.
Teniendo en cuenta sólo dos de los principales períodos de negociación, es posible que se pierda la oportunidad de negociar en otros períodos. Se puede probar el efecto de los diferentes períodos de tiempo.
No tiene un mecanismo de parada de pérdidas y no puede controlar eficazmente las pérdidas unilaterales. Se puede configurar el parada móvil o el parada temporal.
El cruce EMA tiene un cierto atraso y puede perder el mejor momento de entrada. Se puede considerar reducir el ciclo EMA o combinarlo con otros indicadores previos.
El efecto puede verse afectado por los costos de transacción. Se recomienda ajustar adecuadamente las posiciones de stop loss y stop stop.
La estrategia puede ser optimizada en los siguientes aspectos:
Prueba diferentes parámetros de EMA para encontrar la combinación óptima de parámetros. Se pueden introducir técnicas de optimización dinámica de EMA, como la adaptación a EMA.
Añadir otros indicadores de filtración, como RSI, BRI, etc., para mejorar la calidad de la señal.
Introducción de un mecanismo de gestión de posiciones dinámicas para ajustar las posiciones en función de la volatilidad del mercado y la rentabilidad.
Añadir el stop móvil, el stop temporal para limitar la pérdida. Ajustar adecuadamente el punto de parada.
Prueba diferentes períodos de negociación para encontrar el mejor momento de negociación. Se puede combinar con el índice de filtración de períodos de tiempo como la volatilidad.
Optimización del nivel de paradas y pérdidas, equilibrio entre el tamaño de la ganancia y la tasa de ganancias. Introducción de paradas inteligentes como paradas de líneas de paralización.
Intentar modificar y mejorar el método de cálculo de EMA, como el EMA con ponderación lineal, para reducir el retraso.
Buscar los parámetros óptimos en combinación con el aprendizaje automático de la máquina.
Modelación de los costos de transacción y ajuste del sistema para maximizar las ganancias netas.
Con estas optimizaciones, se puede mejorar la rentabilidad del sistema, controlar el retroceso y ampliar el alcance de aplicación, lo que permite una estrategia de negociación más robusta y estable.
La estrategia tiene una concepción clara, utiliza el triple EMA para identificar tendencias, operar en función de los principales momentos de negociación y determinar posiciones con la proporción de la cuenta. Se trata de una estrategia típica de seguimiento de tendencias. La estrategia tiene un gran espacio para la optimización.
/*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)