Estrategia de combinación de patrones de velas de varios modelos

El autor:¿ Qué pasa?, Fecha: 2023-10-17 15:53:06
Las etiquetas:

img

Resumen general

Esta estrategia combina múltiples modelos de patrón de vela para operar con acciones. Incorpora patrón de engulfing, patrón harami y patrón cruzado harami para capturar oportunidades comerciales en diferentes condiciones de mercado.

Principio

La lógica central de esta estrategia es construir varias reglas de reconocimiento de patrones de velas y luego generar señales comerciales combinando estas reglas.

En primer lugar, define algunas variables básicas para describir las propiedades del candelabro como el tamaño del cuerpo de la vela, el precio de apertura, el precio de cierre, etc.

Luego, basándose en la relación entre el precio de cierre y el precio de apertura, define 3 tipos de barras de negociación: 1 para subir, -1 para bajar y 0 para no cambiar.

Sobre esta base, se construyen 3 reglas de reconocimiento de patrones de velas:

  1. Patrón de engullida: la vela actual engulle a la anterior, generando señales de compra o venta.

  2. Patrón Harami: la vela anterior engulle la actual, generando señales de compra o venta.

  3. Harami Cross Pattern: combinación de Harami y Doji, generando señales de compra o venta.

Según estos patrones de velas, se puede determinar el momento de compra y venta.

La lógica de negociación comprueba primero la posición existente. Si contradice con la dirección de la señal, cerrará primero la posición actual, luego abrirá una nueva posición de acuerdo con la señal.

Ventajas

  • La combinación mejora la estabilidad, el patrón único es propenso a condiciones específicas del mercado, la combinación puede mejorar la confiabilidad.

  • La confirmación mejora la precisión, los patrones diferentes se verifican entre sí, se pueden evitar señales falsas.

  • Flexibilidad: los usuarios pueden combinar libremente modelos y ajustar parámetros para diferentes dinámicas del mercado.

  • Control de riesgos: la lógica de stop loss y manejo de posiciones gestiona los riesgos de manera efectiva.

Los riesgos

  • Más parámetros significan más complejidad. Una combinación incorrecta puede socavar el rendimiento.

  • El ajuste de parámetros requiere experiencia.

  • El riesgo de tenencia unilateral. Largo o corto sólo limita el potencial de ganancia. Permitir tanto largo como corto puede ayudar.

  • Falta de puntos de reversión. Centrarse en los patrones pierde de vista las señales de reversión de tendencia. Agregar otros indicadores puede ayudar a identificar puntos de reversión potenciales.

Mejoramiento

  • Añadir un stop loss para reducir el riesgo de tenencia.

  • Incorporar otros indicadores técnicos para determinar la tendencia general, evitando el comercio contra la tendencia principal. por ejemplo, MACD, banda de Bollinger, etc.

  • Los parámetros del modelo de ensayo en diferentes productos, establecer conjuntos óptimos de parámetros que se ajusten a cada producto.

  • Introducir el aprendizaje automático para ayudar a optimizar los parámetros y el reconocimiento de patrones utilizando IA.

Conclusión

Esta estrategia construye un sistema comercial relativamente estable a corto plazo mediante la combinación de múltiples patrones de velas. Pero el ajuste de parámetros y el control de riesgos aún necesitan mejoras para adaptarse a mercados más complejos. En general, tiene una lógica sólida y tiene un gran potencial después de acumular suficientes datos y experiencia, y aprovechar el aprendizaje automático para la optimización inteligente.


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

//Noro
//2018

//@version=3
strategy(title = "Noro's CandleModels Tests", shorttitle = "CandleModels tests", 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")

eng = input(true, defval = true, title = "Model Engulfing")
har = input(true, defval = true, title = "Model Harami")
harc = input(true, defval = true, title = "Model Harami Cross")

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")
rev = input(false, defval = false, title = "Reversive trading")

//Body
body = abs(close - open)
abody = sma(body, 10)

//MinMax Bars
min = min(close, open)
max = max(close, open)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
doji = body < abody / 10
up1 = eng and bar == 1 and bar[1] == -1 and min <= min[1] and max >= max[1]
dn1 = eng and bar == -1 and bar[1] == 1 and min <= min[1] and max >= max[1]
up2 = har and bar == 1 and bar[1] == -1 and min >= min[1] and max <= max[1]
dn2 = har and bar == -1 and bar[1] == 1 and min >= min[1] and max <= max[1]
up3 = harc and doji and bar[1] == -1 and low >= min[1] and high <= max[1]
dn3 = harc and doji and bar[1] == 1 and low >= min[1] and high <= max[1]
exit = ((strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1)) and body > abody / 2 and rev == false

//Trading
if up1 or up2 or up3
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn1 or dn2 or dn3
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Más.