Estrategia de impulso de la EMA triple

El autor:¿ Qué pasa?, Fecha: 2023-09-27 17:19:26
Las etiquetas:

Resumen general

Esta estrategia es modificada de SoftKill21 Amazing scalper para mayores con gestión de riesgos mediante el uso de promedios móviles exponenciales triples en lugar de promedios móviles simples para reducir el retraso. Es adecuado para los principales pares de divisas en un plazo de 1 minuto, adoptando un enfoque de seguimiento de tendencias basado en la cruz de oro y la cruz de muerte de EMA rápida, EMA estándar y EMA lenta. También incorpora sesiones de Londres y Nueva York y principios de gestión de riesgos para determinar el tamaño de las posiciones.

Estrategia lógica

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.

Análisis de ventajas

La estrategia tiene las siguientes ventajas:

  1. 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.

  2. El uso de doble suavización exponencial reduce el retraso y hace que las señales sean más sensibles.

  3. La inclusión de las principales sesiones de negociación evita señales engañosas durante las horas no pico.

  4. 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.

  5. La lógica es simple y clara, fácil de entender e implementar, adecuada para principiantes.

  6. La estrategia se puede optimizar y ajustar para diferentes pares de divisas y plazos de tiempo, con una amplia aplicabilidad.

Análisis de riesgos

La estrategia también tiene algunos riesgos potenciales:

  1. Las EMA no pueden filtrar eficazmente las fallas falsas a corto plazo causadas por eventos repentinos, que pueden generar señales erróneas.

  2. 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.

  3. Solo se consideran dos sesiones principales, que pueden perder oportunidades comerciales en otras sesiones.

  4. La falta de un mecanismo de stop loss resulta en la incapacidad de controlar eficazmente la pérdida unilateral.

  5. Los cruces de la EMA tienen cierto retraso y pueden perder el mejor momento de entrada.

  6. 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.

Direcciones de optimización

La estrategia se puede optimizar en los siguientes aspectos:

  1. Prueba diferentes parámetros de período EMA para encontrar combinaciones óptimas.

  2. Agregue otros indicadores de filtrado como RSI, Bandas de Bollinger para mejorar la calidad de la señal.

  3. Introducir un dimensionamiento dinámico de las posiciones basado en la volatilidad y la rentabilidad del mercado.

  4. Añadir movimiento o tiempo de parada de pérdida para limitar las pérdidas.

  5. Prueba diferentes sesiones de negociación para encontrar los momentos óptimos.

  6. Optimizar los niveles de toma de ganancias y de stop loss para equilibrar el tamaño de las ganancias y la tasa de ganancias.

  7. Intenta modificar el cálculo de la EMA como una EMA ponderada lineal para reducir el retraso.

  8. Utilice el aprendizaje automático para encontrar parámetros óptimos.

  9. 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.

Resumen de las actividades

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) 

Más.