Estrategia de cruce de la media móvil exponencial

El autor:¿ Qué pasa?, Fecha: 2023-10-17 16:55:10
Las etiquetas:

img

Resumen general

Esta es una estrategia de trading automática que va larga o corta basada en el cruce de dos promedios móviles exponenciales (EMA) con diferentes períodos de tiempo.

Principio

La estrategia utiliza dos EMA, una es la EMA en un marco de tiempo más grande, y la otra es la EMA en el marco de tiempo actual.

En concreto, la estrategia define primero dos parámetros de la EMA:

  1. tf - el marco de tiempo más grande, por defecto diario.
  2. len - La duración del período de la EMA, por defecto 3.

Luego calcula dos EMA:

  1. Ma1 - EMA de 3 días en el marco de tiempo diario.
  2. Ma2 - EMA de 3 días en el marco temporal actual.

Por último, realiza operaciones basadas en:

  • Cuando ma2 > ma1, es largo.
  • Cuando ma2 < ma1, se queda corto.

Al juzgar la dirección de la tendencia a través de cruces entre dos EMA de períodos diferentes, automatiza el comercio.

Ventajas

La estrategia tiene las siguientes ventajas:

  1. El principio es simple, fácil de entender e implementar, muy adecuado para principiantes.
  2. Siguiendo la tendencia, obedeciendo la tendencia, se pueden obtener ganancias decentes.
  3. El uso de EMA, más sensibles a los cambios de precios, puede capturar oportunamente las inversiones de tendencia.
  4. La combinación de EMA de diferentes períodos puede utilizar sus respectivas fortalezas y mejorar la estabilidad del sistema.
  5. No hay necesidad de demasiados parámetros, fácil de probar y optimizar, conveniente para el comercio en vivo.

Los riesgos

La estrategia también tiene algunos riesgos:

  1. Tendencia débil de la capacidad, puede ser golpeado en los mercados variados.
  2. Al retrasarse en el doble cruce de EMA, puede perder algunas oportunidades.
  3. No puede filtrar eficazmente los cruces desordenados entre dos EMA.
  4. Se basa únicamente en EMAs simples, difíciles de adaptar a mercados complejos.

Los riesgos pueden reducirse estableciendo un stop loss, optimizando los parámetros, añadiendo otros indicadores, etc.

Optimización

La estrategia se puede optimizar en los siguientes aspectos:

  1. Prueba diferentes parámetros de EMA de período grande para encontrar la combinación óptima.
  2. Añadir filtro de volumen para evitar señales falsas.
  3. Incorporar indicadores de tendencia para aumentar el tamaño y la eficiencia de las posiciones.
  4. Configurar el stop loss adaptativo para controlar la pérdida de una sola operación.
  5. Optimizar el tamaño de las posiciones de acuerdo con las condiciones del mercado.
  6. Añadir modelos de aprendizaje automático para hacer la estrategia más inteligente.

Conclusión

La estrategia de cruce de la EMA captura las tendencias con indicadores simples, adecuados para que los principiantes aprendan y practiquen.


/*backtest
start: 2023-09-16 00:00:00
end: 2023-10-16 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Noro's Singapore Strategy", shorttitle = "Singapore str", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
tf = input("D", title = "Big Timeframe")
len = input(3, minval = 1, title = "MA length")
src = input(close, title = "MA Source")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//MAs
ma1 = request.security(syminfo.tickerid, tf, sma(src, len))
ma2 = sma(src, len)
plot(ma1, linewidth = 2, color = blue, title = "Big TF MA")
plot(ma2, linewidth = 2, color = red, title = "MA")

//Trading
size = strategy.position_size
lot = 0.0
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]

if ma2 > ma1
    strategy.entry("L", strategy.long, needlong ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if ma2 < ma1
    strategy.entry("S", strategy.short, needshort ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

Más.