Estrategia de seguimiento de la media móvil de ruptura de canal


Fecha de creación: 2024-01-15 12:25:26 Última modificación: 2024-01-15 12:25:26
Copiar: 0 Número de Visitas: 639
1
Seguir
1617
Seguidores

Estrategia de seguimiento de la media móvil de ruptura de canal

Descripción general

La estrategia es una estrategia de ruptura basada en el precio del canal, que combina el indicador de la línea de paridad y el seguimiento de los paros / paradas para entrar y salir. Utiliza la línea de paridad de precios altos y bajos para construir un canal de precios, entrar en el canal de más / vacío cuando el precio rompe el canal, y usar paros fijos o paradas de trailing para controlar el riesgo.

Principio de estrategia

Esta estrategia se basa en la medición de precios altos y bajos para formar un canal de precios. En concreto, se calcula una medición de precios altos y bajos de SMA de longitud 10 para formar el tren superior y el tren inferior del canal.

Después de la entrada, la estrategia utiliza una parada fija o trailing stop para salir de la posición. El trailing stop incluye dos parámetros: el stop fijo y el offset de activación. Cuando el precio alcanza el desplazamiento de activación, el stop se trail para seguir el precio. Esto puede bloquear las ganancias, mientras se mantiene el espacio para obtener beneficios.

La estrategia combina un filtro por períodos de tiempo y sólo se realiza un retrospectivo dentro de las fechas históricas designadas para probar el rendimiento de las diferentes etapas del mercado.

Análisis de las ventajas

La estrategia utiliza un canal de precios y un stop loss de seguimiento de tendencias para capturar la dirección de las tendencias de la línea media y larga. En comparación con la simple estrategia de la línea media móvil, reduce las transacciones no válidas causadas por la oscilación de los precios.

En general, la estrategia tiene una lógica clara, utiliza menos indicadores y parámetros, es fácil de rastrear, es adecuada para el comercio de tendencias de medio y largo plazo y puede obtener ganancias en condiciones de fortaleza.

Análisis de riesgos

Esta estrategia es susceptible de ser bloqueada y retirada en situaciones de crisis y no puede generar ganancias permanentes. Además, en situaciones extremas, el precio puede romper directamente los límites de pérdidas y causar grandes pérdidas.

La configuración de los parámetros es más subjetiva, ya que los parámetros deben ajustarse en diferentes fases del mercado. Los parámetros de parálisis fijos y el desplazamiento de activación no pueden ajustarse según la volatilidad del mercado.

Dirección de optimización

Se puede considerar la posibilidad de combinar otros indicadores para filtrar las señales de entrada, como el volumen de transacciones, las bandas de Brin, etc., para evitar la captura. O se puede usar un stop loss dinámico para establecer un stop loss en función del ATR o la volatilidad del precio.

Las reglas de salida se pueden optimizar para un stop móvil o una salida de candelabro. También se puede considerar una salida parcial cuando el precio vuelve a entrar en el canal. La optimización de las reglas de entrada y salida puede mejorar considerablemente la estabilidad de la estrategia.

Resumir

La estrategia en su conjunto es una estrategia cuantitativa basada en el canal de precios, el seguimiento de tendencias y la gestión de paradas y pérdidas. Tiene una estructura lógica clara, una estructura de parámetros simple, fácil de entender y de retroceder, adecuada para el aprendizaje de operaciones cuantitativas. La estrategia puede optimizarse de varias maneras para mejorar la estabilidad y la rentabilidad.

Código Fuente de la Estrategia
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-21 23:59:59
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Generalized SSL Backtest w/ TSSL", shorttitle="GSSL Backtest", overlay=true )
// Generalized SSL:
//  This is the very first time the SSL indicator, whose acronym I ignore, is on Tradingview. 
//  It is based on moving averages of the highs and lows. 
//  Similar channel indicators can be found, whereas 
//  this one implements the persistency inside the channel, which is rather tricky.
//  The green line is the base line which decides entries and exits, possibly with trailing stops.
//  With respect to the original version, here one can play with different moving averages.
//  The default settings are (10,SMA)
//
// Vitelot/Yanez/Vts March 2019

lb = input(10, title="Lb", minval=1)
maType = input( defval="SMA", title="MA Type", options=["SMA","EMA","HMA","McG","WMA","Tenkan"])

fixedSL = input(title="SL Activation", defval=300)
trailSL = input(title="SL Trigger", defval=1)
fixedTP = input(title="TP Activation", defval=150)
trailTP = input(title="TP Trigger", defval=1)

FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2019, title = "From Year", minval = 2017)
ToMonth   = input(defval = 6, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 19, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2020, title = "To Year", minval = 2017)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
startTimeOk()  => true // create function "within window of time" if statement true
// QUANDL:BCHAIN/ETRVU is USD-denominated daily transaction value on BTC blockchain
// QUANDL:BCHAIN/MKTCP is USD-denominated Bitcoin marketcap

hma(sig, n) => // Hull moving average definition
    wma( 2*wma(sig,round(n/2))-wma(sig,n), round(sqrt(n)))

mcg(sig,length) => // Mc Ginley MA definition
    mg = 0.0
    mg := na(mg[1]) ? ema(sig, length) : mg[1] + (sig - mg[1]) / (length * pow(sig/mg[1], 4))

tenkan(sig,len) =>
    0.5*(highest(sig,len)+lowest(sig,len))

ma(t,sig,len) =>
    sss=na
    if t =="SMA"
        sss := sma(sig,len)
    if t == "EMA"
        sss := ema(sig,len)
    if t == "HMA"
        sss := hma(sig,len)
    if t == "McG" // Mc Ginley
        sss := mcg(sig,len)
    if t == "Tenkan"
        sss := tenkan(sig,len)
    if t == "WMA"
        sss := wma(sig,len)
    sss

base(mah, mal) =>
    bbb = na
    inChannel = close<mah and close>mal
    belowChannel = close<mah and close<mal
    bbb := inChannel? bbb[1]: belowChannel? -1: 1
    uuu = bbb==1? mal: mah
    ddd = bbb==1? mah: mal
    [uuu, ddd]

maH = ma(maType, high, lb)
maL = ma(maType, low, lb)

[up, dn] = base(maH,maL)

plot(up, title="High MA", color=lime, linewidth=3)
plot(dn, title="Low MA", color=orange, linewidth=3)

long = crossover(dn,up)
short = crossover(up,dn)

// === STRATEGY - LONG POSITION EXECUTION ===
strategy.entry("Long", strategy.long, when= long and startTimeOk())
strategy.exit("Exit", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP) 
strategy.exit("Exit", when= short)
// === STRATEGY - SHORT POSITION EXECUTION ===
strategy.entry("Short", strategy.short, when= short and startTimeOk())
strategy.exit("Exit", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP)
strategy.exit("Exit", when= long)