Estrategia de ruptura de tendencia dual

El autor:¿ Qué pasa?, fecha: 2024-02-19 11:52:40
Las etiquetas:

img

Resumen general

La estrategia de ruptura de tendencia dual integra múltiples indicadores técnicos, incluyendo líneas de tendencia, cruces de promedio móvil y rupturas de canal de precios para identificar posibles puntos de inflexión en el mercado.

Estrategia lógica

Tendencias

La estrategia utiliza primero los máximos y mínimos de pivote para dividir las tendencias alcistas y bajistas. Cuando el precio rompe la línea de tendencia, señala una posible inversión de tendencia. La pendiente se calcula utilizando el método ATR para mantenerse al día con las fluctuaciones reales.

El cruce de la media móvil

La estrategia adopta un promedio móvil a corto plazo de 5 días y un promedio móvil a largo plazo de 34 días para el comercio cruzado rápido y lento. Un MA corto que cruza por encima del MA largo da señales de compra, mientras que cruzar por debajo da señales de venta. El MA rápido captura tendencias a corto plazo y el MA lento sigue tendencias a largo plazo.

Canal de precios

Un canal de precios de 5 días también está configurado en la estrategia. Romper por encima de la banda superior desencadena una entrada larga y romper por debajo de la banda inferior desencadena una entrada corta para capturar las rupturas de precios a corto plazo. Trabaja con el cruce MA para determinar la confiabilidad de las señales de ruptura.

Los tres tipos de indicadores técnicos se integran en una sola estrategia para formar un robusto mecanismo de doble confirmación, evitando las operaciones falsas.

Ventajas

  1. Integra múltiples indicadores para señales relativamente confiables, reduciendo las pérdidas por fallas.

  2. Las líneas de tendencia lentas y las líneas de tendencia lentas siguen las tendencias a largo plazo para entradas y salidas constantes.

  3. Estructura de código limpia con parámetros ajustables para la optimización en diferentes productos y plazos.

  4. Combina el seguimiento de tendencias y las señales de ruptura para obtener rentabilidad en tendencias fuertes y evitar cambios en los mercados de rango.

Los riesgos

  1. Puede haber algunos riesgos de falsas rupturas, especialmente en escenarios de rango, que conducen a pérdidas.

  2. La naturaleza retrasada de los cruces de la AM conlleva el riesgo de comprar los tops o vender los bottoms después de una inversión importante de la tendencia.

  3. Muchos indicadores integrados requieren pruebas y cálculos intensivos para ajustar los parámetros.

  • Se pueden añadir indicadores de volumen para la validación de las rupturas, por ejemplo, que requieren una expansión del volumen en las rupturas.

  • Los indicadores de sobreventa y sobrecompra evitan los escenarios de agotamiento de las compras y ventas.

  • Detener pérdidas para controlar pérdidas en operaciones falsas.

  • Aprendizaje automático para encontrar parámetros óptimos rápidamente a través de datos históricos masivos.

Mejoramiento

  1. Añadir filtros de volumen o RSI para confirmar cambios de tendencia confiables, estableciendo filtros estrictos para evitar pérdidas por fallas.

  2. Ajuste de los parámetros MA y de los canales de los diferentes productos para que coincidan con sus características.

  3. Agregue mecanismos de stop loss a través de trailing stop loss, stop limit orders para restringir las pérdidas por operación.

  4. Adoptar enfoques adaptativos para operar con menos frecuencia durante los mercados de rango y con mayor frecuencia durante las tendencias establecidas.

  5. Entrenar modelos de aprendizaje profundo para generar señales de compra / venta en lugar de solo usar indicadores técnicos, aprovechando las redes neuronales capacidades de reconocimiento de patrones para encontrar estrategias más predictivas.

Conclusión

Esta estrategia forma un sistema de doble confirmación mediante la combinación de múltiples indicadores técnicos populares, capaces de capturar eficazmente los cambios de tendencia con resultados de backtest relativamente estables.


/*backtest
start: 2024-02-11 00:00:00
end: 2024-02-18 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © FinanceUpPvtLtd

//@version=5
strategy("FINANCE UP FREE STRATEGY (+919665229664)", overlay=true)

// Script 01 - Trendlines
length_tl = input.int(14, 'Swing Detection Lookback')
mult_tl = input.float(1., 'Slope', minval=0, step=.1)
calcMethod_tl = input.string('Atr', 'Slope Calculation Method', options=['Atr', 'Stdev', 'Linreg'])
backpaint_tl = input(true, tooltip='Backpainting offset displayed elements in the past. Disable backpainting to see real-time information returned by the indicator.')
upCss_tl = input(color.teal, 'Up Trendline Color', group='Style')
dnCss_tl = input(color.red, 'Down Trendline Color', group='Style')
showExt_tl = input(true, 'Show Extended Lines')

var upper_tl = 0.
var lower_tl = 0.
var slope_ph_tl = 0.
var slope_pl_tl = 0.
var offset_tl = backpaint_tl ? length_tl : 0
n_tl = bar_index
src_tl = close
ph_tl = ta.pivothigh(length_tl, length_tl)
pl_tl = ta.pivotlow(length_tl, length_tl)
slope_tl = switch calcMethod_tl
    'Atr'    => ta.atr(length_tl) / length_tl * mult_tl
    'Stdev'  => ta.stdev(src_tl, length_tl) / length_tl * mult_tl
    'Linreg' => math.abs(ta.sma(src_tl * n_tl, length_tl) - ta.sma(src_tl, length_tl) * ta.sma(n_tl, length_tl)) / ta.variance(n_tl, length_tl) / 2 * mult_tl
slope_ph_tl := ph_tl ? slope_tl : slope_ph_tl
slope_pl_tl := pl_tl ? slope_tl : slope_pl_tl
upper_tl := ph_tl ? ph_tl : upper_tl - slope_ph_tl
lower_tl := pl_tl ? pl_tl : lower_tl + slope_pl_tl
var upos_tl = 0
var dnos_tl = 0
upos_tl := ph_tl ? 0 : close > upper_tl - slope_ph_tl * length_tl ? 1 : upos_tl
dnos_tl := pl_tl ? 0 : close < lower_tl + slope_pl_tl * length_tl ? 1 : dnos_tl

// var uptl_tl = line.new(na, na, na, na, color=upCss_tl, style=line.style_dashed, extend=extend.right)
// var dntl_tl = line.new(na, na, na, na, color=dnCss_tl, style=line.style_dashed, extend=extend.right)
// if ph_tl and showExt_tl
//     uptl_tl.set_xy1(n_tl - offset_tl, backpaint_tl ? ph_tl : upper_tl - slope_ph_tl * length_tl)
//     uptl_tl.set_xy2(n_tl - offset_tl + 1, backpaint_tl ? ph_tl - slope_tl : upper_tl - slope_ph_tl * (length_tl + 1))
// if pl_tl and showExt_tl
//     dntl_tl.set_xy1(n_tl - offset_tl, backpaint_tl ? pl_tl : lower_tl + slope_pl_tl * length_tl)
//     dntl_tl.set_xy2(n_tl - offset_tl + 1, backpaint_tl ? pl_tl + slope_tl : lower_tl + slope_pl_tl * (length_tl + 1))

plot(backpaint_tl ? upper_tl : upper_tl - slope_ph_tl * length_tl, 'Upper', color=ph_tl ? na : upCss_tl, offset=-offset_tl)
plot(backpaint_tl ? lower_tl : lower_tl + slope_pl_tl * length_tl, 'Lower', color=pl_tl ? na : dnCss_tl, offset=-offset_tl)

plotshape(upos_tl > upos_tl[1] ? low : na, "Upper Break", shape.labelup, location.absolute, upCss_tl, text="B", textcolor=color.white, size=size.tiny)
plotshape(dnos_tl > dnos_tl[1] ? high : na, "Lower Break", shape.labeldown, location.absolute, dnCss_tl, text="B", textcolor=color.white, size=size.tiny)

alertcondition(upos_tl > upos_tl[1], 'Upward Breakout', 'Price broke the down-trendline upward')
alertcondition(dnos_tl > dnos_tl[1], 'Downward Breakout', 'Price broke the up-trendline downward')

// Script 02 - Channel Breakout
length_channel = input.int(title="Channel Length", minval=1, maxval=1000, defval=5)
upBound_channel = ta.highest(high, length_channel)
downBound_channel = ta.lowest(low, length_channel)
if (not na(close[length_channel]))
    strategy.entry("LE-LE", strategy.long, stop=upBound_channel + syminfo.mintick, comment="LE-LE")
strategy.entry("BECH-DE", strategy.short, stop=downBound_channel - syminfo.mintick, comment="BECH-DE")

// Script 03 - MA Cross
shortlen_ma = input.int(5, "Short MA Length", minval=1)
longlen_ma = input.int(34, "Long MA Length", minval=1)
short_ma = ta.sma(close, shortlen_ma)
long_ma = ta.sma(close, longlen_ma)
plot(short_ma, color=#FF6D00, title="Short MA")
plot(long_ma, color=#43A047, title="Long MA")
plot(ta.cross(short_ma, long_ma) ? short_ma : na, color=#2962FF, style=plot.style_cross, linewidth=4, title="Cross")


Más.