La estrategia de ruptura de la tendencia de miel ATR es una estrategia de ruptura a mediano plazo basada en el indicador ATR y las bandas de Bollinger para la generación de señales comerciales.
La estrategia consta de tres partes principales:
Canal ATR: Calcula el rango de fluctuación de los precios de las acciones a través del indicador ATR y forma un canal hacia arriba y hacia abajo dentro de este rango.
Línea de la abeja: toma la línea media de los precios de las acciones como línea de base.
Filtración de tendencias: Calcula la tendencia de precios a través del indicador DMI y establece el ciclo de señal. Cuando los precios sig
La lógica específica para generar señales comerciales es:
Señal largo: pricesig
Señal corto: pricesig
No hay intercambio en otras situaciones.
La estrategia también establece condiciones de stop profit y stop loss para controlar los riesgos comerciales.
La estrategia de ruptura de la tendencia de miel ATR tiene las siguientes ventajas:
utilizar el indicador ATR para calcular el rango de fluctuación de los precios de las acciones, que puede capturar dinámicamente los cambios del mercado;
Combinar la línea media para evaluar los precios de las acciones y establecer los puntos de negociación de ruptura del canal para evitar perseguir máximos y matar mínimos;
El indicador DMI se utiliza para determinar la tendencia y evitar el comercio en contra de la tendencia, mejorando la tasa de ganancia;
Establecer condiciones de detención de ganancias y de detención de pérdidas para controlar el riesgo del comercio único;
Los parámetros de la estrategia son lo suficientemente flexibles como para optimizar la estrategia ajustando el ancho del canal, el ciclo ATR y otros factores.
La estrategia también tiene algunos riesgos:
El comercio a medio plazo presenta fluctuaciones relativamente grandes y riesgos elevados.
El cálculo del rango de canales ATR puede ser inexacto cuando los precios de las acciones fluctúan bruscamente, lo que conduce fácilmente a operaciones erróneas.
El indicador DMI también puede cometer errores en el juicio de la tendencia, lo que afecta a la precisión de las señales de negociación.
En respuesta a los riesgos anteriores, se pueden ajustar parámetros como el canal ATR y aumentar los ciclos de señal para optimizar y mejorar.
La estrategia se puede optimizar en los siguientes aspectos:
Ajustar el ancho del canal ATR modificando el atrDivisor hacia arriba o hacia abajo para comprimir o ampliar el rango del canal.
Ajustar el parámetro del ciclo de retroalimentación ATR para cambiar la sensibilidad del canal a las fluctuaciones recientes.
Ajustar el parámetro del ciclo de la señal de tendencia para mejorar la precisión de los juicios de tendencia alcista y bajista.
Añadir otros indicadores para la verificación multifactorial para mejorar la calidad de la señal.
Optimizar los algoritmos de stop profit y stop loss para mejorar el control de riesgos.
La estrategia de breakout de la tendencia de la miel integra el análisis del rango de fluctuación de precios y los indicadores de juicio de tendencia. Al tiempo que captura los puntos calientes del mercado, también controla los riesgos comerciales. Es una estrategia cuantitativa flexible y adaptable. Esta estrategia puede mejorarse continuamente a través del ajuste de parámetros y la optimización de señales, con amplias perspectivas de aplicación.
/*backtest start: 2023-11-01 00:00:00 end: 2023-11-30 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy(title="Strategy - Bobo PATR Swing", overlay=true, default_qty_type = strategy.fixed, default_qty_value = 1, initial_capital = 10000) // === STRATEGY RELATED INPUTS AND LOGIC === PivottimeFrame = input(title="Pivot Timeframe", defval="D") ATRSDtimeFrame = input(title="ATR Band Timeframe (Lower timeframe = wider bands)", defval="D") len = input(title="ATR lookback (Lower = bands more responsive to recent price action)", defval=13) myatr = atr(len) dailyatr = request.security(syminfo.tickerid, ATRSDtimeFrame, myatr[1]) atrdiv = input(title="ATR divisor (Lower = wider bands)", type=float, defval=2) pivot0 = (high[1] + low[1] + close[1]) / 3 pivot = request.security(syminfo.tickerid, PivottimeFrame, pivot0) upperband1 = (dailyatr / atrdiv) + pivot lowerband1 = pivot - (dailyatr / atrdiv) middleband = pivot // == TREND CALC === i1=input(2, "Momentum Period", minval=1) //Keep at 2 usually i2=input(20, "Slow Period", minval=1) i3=input(5, "Fast Period", minval=1) i4=input(3, "Smoothing Period", minval=1) i5=input(4, "Signal Period", minval=1) i6=input(50, "Extreme Value", minval=1) hiDif = high - high[1] loDif = low[1] - low uDM = hiDif > loDif and hiDif > 0 ? hiDif : 0 dDM = loDif > hiDif and loDif > 0 ? loDif : 0 ATR = rma(tr(true), i1) DIu = 100 * rma(uDM, i1) / ATR DId = 100 * rma(dDM, i1) / ATR HLM2 = DIu - DId DTI = (100 * ema(ema(ema(HLM2, i2), i3), i4)) / ema(ema(ema(abs(HLM2), i2), i3), i4) signal = ema(DTI, i5) // === RISK MANAGEMENT INPUTS === inpTakeProfit = input(defval = 0, title = "Take Profit (In Market MinTick Value)", minval = 0) inpStopLoss = input(defval = 100, title = "Stop Loss (In Market MinTick Value)", minval = 0) // === RISK MANAGEMENT VALUE PREP === // if an input is less than 1, assuming not wanted so we assign 'na' value to disable it. useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na // === STRATEGY - LONG POSITION EXECUTION === enterLong = (((low<=lowerband1) and (close >lowerband1)) or ((open <= lowerband1) and (close > lowerband1))) and (strategy.opentrades <1) and (atr(3) > atr(50)) and (signal>signal[3]) exitLong = (high > middleband) strategy.entry(id = "Long", long = true, when = enterLong) strategy.close(id = "Long", when = exitLong) // === STRATEGY - SHORT POSITION EXECUTION === enterShort = (((high>=upperband1) and (close < upperband1)) or ((open >= upperband1) and (close < upperband1))) and (strategy.opentrades <1) and (atr(3) > atr(50)) and (signal<signal[3]) exitShort = (low < middleband) strategy.entry(id = "Short", long = false, when = enterShort) strategy.close(id = "Short", when = exitShort) // === STRATEGY RISK MANAGEMENT EXECUTION === strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss) strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss) // === CHART OVERLAY === plot(upperband1, color=#C10C00, linewidth=3) plot(lowerband1, color=#23E019, linewidth=3) plot(middleband, color=#00E2E2, linewidth=3) //plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)