Estrategia de negociación basada en la media móvil de Hull y el cruce de WT

El autor:¿ Qué pasa?, Fecha: 2023-09-26 20:00:32
Las etiquetas:

Resumen general

Esta estrategia combina principalmente las señales cruzadas de la media móvil de Hull y WT para aprovechar las ventajas de cada indicador para un juicio de tendencia y un calendario de entrada más precisos.

Estrategia lógica

La estrategia consiste en las señales cruzadas de la media móvil de Hull y WT.

La parte del promedio móvil de Hull calcula los MAs de Hull a corto y largo plazo y llena de color para determinar la dirección de la tendencia.

El buque corto MA = WMA ((2*WMA ((n/2) - WMA ((n), cuadrado ((n))

El buque de buque largo MA = WMA ((WMA)) n/3) *3 - WMA ((n/2), n/2)

Donde WMA es el promedio móvil ponderado. Cuando el MA corto cruza el MA largo, es una señal alcista, de lo contrario una señal bajista.

La parte WT calcula las líneas WT y observa sus cruces para determinar las entradas.

El TCI = (Cerca - EMA(Cerca,n1)) / (k * STD(Cerca - EMA(Cerca,n1),n1))

WT1 = EMA (TCI,n2)

WT2 = SMA ((WT1,m)

Donde TCI es el índice compuesto de tendencia, que refleja la desviación del precio de la EMA; WT1 es la EMA de TCI, WT2 es la SMA de WT1, m es generalmente 4. El cruce de WT1 sobre WT2 indica una señal alcista, mientras que el cruce de WT1 bajo WT2 indica una señal bajista.

Al combinar el juicio de tendencia de Hull MA y las señales de cruce WT, podemos entrar en el mercado en la dirección correcta.

Análisis de ventajas

Las ventajas de esta estrategia son:

  1. Hull MA captura los cambios de precios más rápidamente modificando el cálculo y filtra el ruido del mercado de manera efectiva para un juicio fiable de la tendencia.

  2. WT utiliza la fluctuación de precios dentro del canal para capturar rápidamente los puntos de inflexión y generar señales comerciales relativamente precisas.

  3. La combinación considera tanto la tendencia como el cruce para un mejor control del riesgo cuando la tendencia se alinea.

  4. Los parámetros Hull MA y WT son personalizables para su ajuste y optimización en función de las características de los símbolos y las preferencias comerciales.

  5. Las señales MA y WT del casco pueden utilizarse solas o juntas tanto para la validación de la tendencia como para la validación de los cruces.

  6. Se puede establecer el stop loss y el take profit para controlar eficazmente los riesgos comerciales únicos.

Análisis de riesgos

Los principales riesgos de esta estrategia son:

  1. Tanto Hull MA como WT suavizan los precios hasta cierto punto, lo que puede causar señales de entrada atrasadas.

  2. El WT puede generar falsas señales de divergencia alcista/bajista sin una tendencia clara.

  3. La configuración inadecuada de los parámetros puede afectar al rendimiento de las operaciones y requerir una optimización continua.

  4. El stop loss puede activarse con frecuencia durante las consolidaciones de tendencia, causando alguna pérdida.

Los riesgos pueden abordarse y optimizarse de la siguiente manera:

  1. Ajustar los parámetros MA y WT del casco para encontrar el equilibrio óptimo.

  2. Añadir mecanismos de validación de tendencias para evitar señales falsas de WT sin una tendencia confirmada.

  3. Optimizar los parámetros a través de backtesting y comercio de demostración, y establecer rangos razonables de stop loss.

  4. Reducir el tamaño de las posiciones o dejar de operar cuando la tendencia no está clara.

Direcciones de optimización

La estrategia se puede optimizar aún más en los siguientes aspectos:

  1. Prueba diferentes medias móviles combinadas con WT, para encontrar un mejor equilibrio, por ejemplo, KAMA, TEMA, etc.

  2. Añadir otros indicadores como osciladores, bandas de Bollinger para mejorar la precisión de la decisión.

  3. Optimiza los parámetros a través de backtesting y comercio de demostración.

  4. Optimizar las estrategias de stop loss, por ejemplo, trailing stop, stop basado en la volatilidad, moverse de cerca a lejos, etc., para reducir el desencadenamiento no deseado.

  5. Optimizar las estrategias de dimensionamiento de posiciones, reducir los tamaños y las frecuencias en tendencias poco claras para reducir los riesgos.

  6. Introducir el aprendizaje automático y otras técnicas avanzadas para decisiones comerciales más inteligentes y parámetros adaptativos.

Resumen de las actividades

Esta estrategia combina las fortalezas de suavizado de Hull MA y cruce de WT tanto para el juicio de tendencia como para la validación. El comercio con dirección confirmada ayuda a controlar los riesgos. Se pueden hacer mejoras adicionales en la optimización de parámetros, estrategias de stop loss, dimensionamiento de posiciones, etc. La integración de otros indicadores y técnicas inteligentes también son direcciones de optimización futuras. En general, esta es una tendencia práctica después de la estrategia con simplicidad, confiabilidad y facilidad de optimización.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// WT CROSS @author [© LazyBear]
// © pigsq
// @version=5

strategy("Kahlman HullMA / WT Cross Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100)

_1 = input(false, '───────── SP/TP SETTINGS ─────────')

stoploss1 = input(title='Stop Loss On/Off?', defval=true)
stoploss = input.float(5, "Stop Loss", minval = 1, step = 1)/100
takeprofit1 = input(title='Take Profit On/Off?', defval=true)
takeprofit = input.float(10, "Take Profit", minval = 1, step = 1)/100

_2 = input(false, '──────── WT CROSS SETTINGS ────────')

wtcross = input(title='WT Cross On/Off?', defval=true)
wtcross2 = input(title='Change WT Cross Method ( If WT Cross ON )', defval=false)

/// WT CROSS ///

n1 = input(10, 'Channel Length')
n2 = input(21, 'Average Length')

ap = hlc3
esa = ta.ema(ap, n1)
r = ta.ema(math.abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * r)
tci = ta.ema(ci, n2)

wt1 = tci
wt2 = ta.sma(wt1, 4)

/// WT CROSS ///

/// HULL TREND WITH KAHLMAN ///

_3 = input(false, '──────── HULLMA SETTINGS ────────')

srchull = input(hl2, 'Source')
lengthhull = input(24, 'Lookback')
gain = input(10000, 'Gain')
kh = input(true, 'Use Kahlman')

hma(_srchull, _lengthhull) =>
    ta.wma((2 * ta.wma(_srchull, _lengthhull / 2)) - ta.wma(_srchull, _lengthhull), math.round(math.sqrt(_lengthhull)))

hma3(_srchull, _lengthhull) =>
    p = lengthhull / 2
    ta.wma(ta.wma(close, p / 3) * 3 - ta.wma(close, p / 2) - ta.wma(close, p), p)

kahlman(x, g) =>
    kf = 0.0
    dk = x - nz(kf[1], x)
    smooth = nz(kf[1], x) + dk * math.sqrt(g / 10000 * 2)
    velo = 0.0
    velo := nz(velo[1], 0) + g / 10000 * dk
    kf := smooth + velo
    kf

a = kh ? kahlman(hma(srchull, lengthhull), gain) : hma(srchull, lengthhull)
b = kh ? kahlman(hma3(srchull, lengthhull), gain) : hma3(srchull, lengthhull)
c = b > a ? color.lime : color.red
crossdn = a > b and a[1] < b[1]
crossup = b > a and b[1] < a[1]

p1hma = plot(a, color=c, linewidth=1, title='Long Plot', transp=75)
p2hma = plot(b, color=c, linewidth=1, title='Short Plot', transp=75)
fill(p1hma, p2hma, color=c, title='Fill', transp=55)

/// HULL TREND WITH KAHLMAN ///

/// DATE ///

_4 = input(false, '───────── DATE SETTINGS ─────────')

FromMonth = input.int(defval=1, title='From Month', minval=1, maxval=12)
FromDay = input.int(defval=1, title='From Day', minval=1, maxval=31)
FromYear = input.int(defval=999, title='From Year', minval=999)
ToMonth = input.int(defval=1, title='To Month', minval=1, maxval=12)
ToDay = input.int(defval=1, title='To Day', minval=1, maxval=31)
ToYear = input.int(defval=9999, title='To Year', minval=999)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)
window() =>
    time >= start and time <= finish ? true : false

/// DATE ///

/// LONG/SHORT CONDITION ///

longCondition = crossup and ta.crossover(wt1,wt2)
longCondition1 = crossup
longCondition2 = crossup and wt1 > wt2

if (wtcross == true ? longCondition : wtcross == false ? longCondition1:na)
    strategy.entry("LONG", strategy.long, when=window(), comment="Enter Long")
else if (wtcross2 == true ? longCondition2 : wtcross2 == false ? longCondition:na)
    strategy.entry("LONG", strategy.long, when=window(), comment="Enter Long")
    
shortCondition = crossdn and ta.crossunder(wt1,wt2)
shortCondition1 = crossdn
shortCondition2 = crossdn and wt1 < wt2

if (wtcross == true ? shortCondition : wtcross == false ? shortCondition1:na)
    strategy.entry("SHORT", strategy.short, when=window(), comment="Enter Short")
else if (wtcross2 == true ? shortCondition2 : wtcross2 == false ? shortCondition:na)
    strategy.entry("LONG", strategy.long, when=window(), comment="Enter Short")

/// LONG/SHORT CONDITION ///

/// CLOSE STRATEGY ///

strategy.close("LONG", when=wtcross == true ? shortCondition : wtcross == false ? shortCondition1:na, comment = "Close Long")
strategy.close("SHORT", when=wtcross == true ? longCondition : wtcross == false ? longCondition1:na, comment = "Close Short")

/// EXIT STRATEGY ///

strategy.exit("LONG", when=strategy.position_size > 0, stop=stoploss1 == true ? strategy.position_avg_price * (1 - stoploss):na, limit=takeprofit1 == true ? strategy.position_avg_price * (1 + takeprofit):na, comment="Exit Long")
strategy.exit("SHORT", when=strategy.position_size < 0, stop=stoploss1 == true ? strategy.position_avg_price * (1 + stoploss):na, limit=takeprofit1 == true ? strategy.position_avg_price * (1 - takeprofit):na, comment ="Exit Short")

/// LONG SL/TP LINE ///

plot(strategy.position_size > 0 ? strategy.position_avg_price * (1 - stoploss) : na, title='Long Stop Loss', color=stoploss1 == true ? color.new(color.red, 0):na, style=plot.style_linebr)
plot(strategy.position_size > 0 ? strategy.position_avg_price * (1 + takeprofit) : na, title='Long Take Profit', color=takeprofit1 == true ? color.new(color.green, 0):na, style=plot.style_linebr)

/// LONG SL/TP LINE ///

/// SHORT SL/TP LINE ///

plot(strategy.position_size < 0 ? strategy.position_avg_price * (1 + stoploss) : na, title='Short Stop Loss', color=stoploss1 == true ? color.new(color.red, 0):na, style=plot.style_linebr)
plot(strategy.position_size < 0 ? strategy.position_avg_price * (1 - takeprofit) : na, title='Short Take Profit', color=takeprofit1 == true ? color.new(color.green, 0):na, style=plot.style_linebr)

/// SHORT SL/TP LINE ///


Más.