Estrategia de ruptura de canal oscilante

El autor:¿ Qué pasa?, Fecha: 2023-11-15 16:01:09
Las etiquetas:

img

Resumen general

Esta es una estrategia de negociación de ruptura basada en indicadores de canal. Utiliza la característica de oscilación de las bandas de canal para ir largo cuando el precio se rompe por encima de la banda superior y ir corto cuando se rompe por debajo de la banda inferior. Pertenece a la categoría de estrategia de tendencia siguiente.

Estrategia lógica

La estrategia utiliza primero SMA para calcular la línea media del canal. La banda superior se establece como línea media más un valor de parámetro, y la banda inferior es línea media menos el valor del parámetro, formando un canal de precios. Luego juzga si el precio se rompe de las bandas superior o inferior, combinado con un aumento en el volumen de operaciones como señal de apertura. Cuando el precio cae de nuevo en el canal, sirve como señal de cierre.

En concreto, la lógica de negociación es la siguiente:

  1. Calcular la línea media: SMA (cerca de N)

  2. Banda superior: línea media + valor del parámetro

  3. Banda inferior: línea media - valor del parámetro

  4. Cuando el precio se rompe por encima de la banda superior, si el volumen de negociación es mayor que 2x del período anterior, ir largo.

  5. Cuando el precio vuelve a caer en el canal, cierre la posición larga.

  6. Cuando el precio se rompe por debajo de la banda inferior, si el volumen de negociación es mayor a 2x del período anterior, sea corto.

  7. Cuando el precio cae de nuevo en el canal, cierre la posición corta.

Análisis de ventajas

Las ventajas de esta estrategia son:

  1. El uso del indicador de canal puede rastrear eficazmente las tendencias de los precios.

  2. Combinado con el aumento en el volumen de negociación filtra bien las falsas rupturas.

  3. La caída de nuevo en el canal sirve como mecanismo de stop loss y limita la pérdida por operación.

  4. Las características de oscilación se ajustan a las tendencias a medio plazo.

  5. La lógica simple hace que sea fácil de entender y aplicar.

Análisis de riesgos

También hay algunos riesgos:

  1. Negociaciones consecutivas en la misma dirección cuando el precio se mantiene en un lado del canal durante mucho tiempo, aumentando el riesgo de pérdida.

  2. La configuración incorrecta de los parámetros del canal puede causar señales falsas excesivas.

  3. Los criterios erróneos para el aumento del volumen de negociación pueden perder las verdaderas señales de ruptura.

  4. El mecanismo de stop loss puede ser demasiado conservador, perdiendo movimientos más grandes.

Direcciones de optimización

La estrategia se puede optimizar en los siguientes aspectos:

  1. Optimizar los parámetros del canal para adaptarse a las diferentes características del mercado.

  2. Mejorar los criterios de posición abierta, como considerar el cruce de MA o los patrones de candlestick, para evitar fallas falsas.

  3. Optimice el mecanismo de stop loss, permita un rango de stop loss más amplio para evitar una salida prematura.

  4. Añadir reglas de dimensionamiento de posiciones para ajustar el tamaño de las posiciones y la utilización del capital en función de las condiciones del mercado.

  5. Incorporar más indicadores para determinar la dirección general de la tendencia, evitando el comercio contra la tendencia principal.

Resumen de las actividades

En resumen, esta es una estrategia de seguimiento de tendencias simple y práctica. Al utilizar la oscilación del canal, puede capturar de manera efectiva las tendencias a mediano plazo. Pero se necesita ajustar los parámetros para adaptarse a diferentes mercados y se deben monitorear los riesgos.


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

//Copyright, 2022, Cache_that_pass.  You are free to use this script however you see fit and reproduce it in any manner.

//@version=5

            //////  Name the strategy between the 2 quotation marks.  Consider setting commission type and value in strategy header to match exchanges rates. //////

strategy("Oscillating SSL Channel Strategy", "O-SSL Strat", overlay=true, pyramiding=1, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 100, calc_on_order_fills=true)



            //////  Inputs and calculations used by script  //////

period = input(title='Period', defval=25)
len = input(title='Period', defval=25)
smaHigh = ta.sma(high, len)
smaLow = ta.sma(low, len)
Hlv = int(na)
Hlv := close > smaHigh ? 1 : close < smaLow ? -1 : Hlv[1]
sslDown = Hlv < 0 ? smaHigh : smaLow
sslUp = Hlv < 0 ? smaLow : smaHigh

            //////  Show me the money  //////

plot(sslDown, linewidth=2, color=color.new(color.red, 0))
plot(sslUp, linewidth=2, color=color.new(color.lime, 0))


            //////  Trade execution logic  //////  
            
//pseudo-code//
        //Go long when high (or maybe close) breaks above the sslUp and volume is 2x or > Volume[1] and sslUp > sslDown
        //Close the above longs when sslUp crosses under sslDown (or set takeprofit and stop loss exits)
        //
        //Go short when low is lower than the sslUp and volume is 2x or > Volume[1] and sslDown > sslUp
        //Close shorts when sslDown crosses under sslUp

longCondition1 = (sslUp > sslDown)
longCondition2 = ta.crossover(high, sslUp)
//longCondition3 = (volume >= (volume[1]*1.89))
longCondition = ((longCondition1) and (longCondition2))// and (longCondition3))

longExit = ta.crossunder(sslUp, sslDown)

            //////  Bring It  //////
if (longCondition)
    strategy.entry("Bring It", strategy.long)

            //////  Sling It  //////
if (longExit)
    strategy.close("Bring It", comment="Sling It")


shortCondition1 = (sslDown) > (sslUp)
shortCondition2 = ta.crossunder(low, sslUp)
//shortCondition3 = (volume >= (volume[1]*1.89))
shortCondition = ((shortCondition1) and (shortCondition2))// and (shortCondition3))

shortExit = ta.crossunder(sslDown, sslUp)

            //////  Bring It  //////
if (shortCondition)
    strategy.entry("Bring It", strategy.long)

            //////  Sling It  //////
if (shortExit)
    strategy.close("Bring It", comment="Sling It")

            //////  Sling It  //////
if (shortCondition)
    strategy.entry("Sling It", strategy.short)

            //////  Bling It  //////
if (shortExit)
    strategy.close("Sling It", comment="Bring It")



Más.