Estrategia de seguimiento de tendencias basado en promedios móviles

El autor:¿ Qué pasa?, Fecha: 2023-11-23 15:54:37
Las etiquetas:

img

Resumen general

Esta estrategia se basa en el cuerpo de la vela, combinado con el indicador EMA para juzgar la dirección de la tendencia del mercado, para lograr el efecto ORIGINAL PRIMITIVO TREND TRACKING.

Principio de la estrategia

  1. Calcular la longitud media del cuerpo sbody de los últimos 30 velas de línea K
  2. Cuando la última línea K es una línea yang y la longitud del cuerpo es mayor que sbody/2, ir largo
  3. Cuando ya largo, si la última línea K es una línea yin, la longitud del cuerpo es mayor que sbody/2, y la posición actual es rentable, a continuación, cierre la posición larga
  4. Cuando la última línea K es una línea yin y la longitud del cuerpo es mayor que sbody/2, ir corto
  5. Cuando ya sea corto, si la última línea K es una línea yang, la longitud del cuerpo es mayor que sbody/2, y la posición actual es rentable, luego cierre la posición corta

Análisis de ventajas

Esta estrategia tiene las siguientes ventajas:

  1. Original y sencillo, fácil de entender e implementar
  2. Basado en el juicio de la estructura de la vela, tiene algún efecto en la captura de los brotes
  3. Rastrear tendencias, puede capturar movimientos más grandes
  4. Detener pérdidas rápidamente cuando es rentable, ayuda a bloquear las ganancias

Análisis de riesgos

Esta estrategia también tiene algunos riesgos:

  1. Incapaz de filtrar eficazmente las fallas, puede causar pérdidas innecesarias
  2. Juzgar sólo por las velas es susceptible al deslizamiento y la influencia de la brecha
  3. No consideró el problema de la frecuencia excesiva de las operaciones

Los riesgos pueden reducirse:

  1. Combinar con otros indicadores para filtrar las señales
  2. Establecer la estrategia de pérdida de pérdida
  3. Optimizar los parámetros para controlar la frecuencia de las operaciones

Direcciones de optimización

Esta estrategia puede optimizarse en los siguientes aspectos:

  1. Añadir indicadores de ruptura para filtrar las rupturas falsas
  2. Añadir una estrategia de stop loss para reducir la pérdida única
  3. Incorporar indicadores de tendencia para verificar la dirección de la tendencia
  4. Optimización de parámetros para encontrar la mejor combinación de parámetros

Resumen de las actividades

Esta estrategia pertenece a la estrategia original de seguimiento de tendencias simple. Al juzgar las estructuras de las velas, puede rastrear efectivamente las direcciones de la tendencia. Al mismo tiempo, establecer un mecanismo de stop loss rápido puede bloquear las ganancias. Esta estrategia puede complementar la cartera de seguimiento de tendencias, pero aún necesita ser optimizada para reducir los riesgos. Vale la pena investigar más el efecto de combinar con otros indicadores en el futuro.


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

//@version=3
strategy(title = "Noro's Primitive Strategy v1.0", shorttitle = "Primitive str 1.0", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 10)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usebody = input(true, defval = true, title = "Use body")
useus = input(true, defval = true, title = "Use UUP")
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(01, defval = 01, 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")

//Logic
body = abs(close - open)
sbody = ema(body, 30) / 2
bar = close > open ? 1 : close < open ? -1 : 0

//Signals
up = bar == -1 and (body > sbody or usebody == false) and (close < strategy.position_avg_price or strategy.position_size <= 0 or useus == false)
dn = bar == 1 and (body > sbody or usebody == false) and (close > strategy.position_avg_price or strategy.position_size >= 0 or useus == false)

//Trading
if up
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)))

if dn
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)))
    
if time > timestamp(toyear, tomonth, today, 00, 00)
    strategy.close_all()

Más.