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.
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.
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.
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.
Integra múltiples indicadores para señales relativamente confiables, reduciendo las pérdidas por fallas.
Las líneas de tendencia lentas y las líneas de tendencia lentas siguen las tendencias a largo plazo para entradas y salidas constantes.
Estructura de código limpia con parámetros ajustables para la optimización en diferentes productos y plazos.
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.
Puede haber algunos riesgos de falsas rupturas, especialmente en escenarios de rango, que conducen a pérdidas.
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.
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.
Añadir filtros de volumen o RSI para confirmar cambios de tendencia confiables, estableciendo filtros estrictos para evitar pérdidas por fallas.
Ajuste de los parámetros MA y de los canales de los diferentes productos para que coincidan con sus características.
Agregue mecanismos de stop loss a través de trailing stop loss, stop limit orders para restringir las pérdidas por operación.
Adoptar enfoques adaptativos para operar con menos frecuencia durante los mercados de rango y con mayor frecuencia durante las tendencias establecidas.
Entrenar modelos de aprendizaje profundo para generar señales de compra / venta en lugar de solo usar indicadores técnicos, aprovechando las redes neuronales
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")