La estrategia de breakout escalable genera señales comerciales cuando el precio rompe los niveles clave de soporte y resistencia identificados por los cambios de precios. Es una estrategia de breakout altamente flexible y extensible. La estrategia se puede adaptar a diferentes marcos de tiempo ajustando parámetros y puede integrar fácilmente filtros adicionales y mecanismos de gestión de riesgos para la optimización.
La estrategia utiliza en primer lugar elswings()
La función para calcular los máximos y mínimos de oscilación basados en el período de retroceso.swingLookback
Las señales largas se activan cuando el precio se rompe por encima del máximo de oscilación, y las señales cortas se activan cuando el precio se rompe por debajo del mínimo de oscilación.
Específicamente, una señal larga se activa cuando el precio de cierre es mayor o igual al precio alto de swing. Una señal corta se activa cuando el precio de cierre es menor o igual al precio bajo de swing.
La estrategia también fija un objetivo de detención basado en lastopTargetPercent
Parámetro para definir el nivel de stop loss. Por ejemplo, el stop loss largo se puede establecer en un 5% por debajo del máximo de swing, y el stop loss corto se puede establecer en un 5% por encima del mínimo de swing.
La ventaja de esta estrategia es la flexibilidad para ajustar el período de retroceso para controlar la frecuencia del comercio. Un período de retroceso más corto lo hace más sensible a las rupturas y aumenta la frecuencia del comercio. Un período de retroceso más largo disminuye la sensibilidad y la frecuencia del comercio pero puede perder oportunidades.
Mitigantes:
La estrategia puede mejorarse de varias maneras:
Prueba diferentes valores del período de observación para encontrar parámetros óptimos.
Prueba diferentes plazos como 5m, 15m, 1h para determinar el mejor plazo.
Optimizar el porcentaje de stop loss para equilibrar el potencial de ganancia frente a la gestión de riesgos.
Añadir filtros como volumen, volatilidad para reducir las configuraciones inferiores.
Integrar más mecanismos de gestión de riesgos como la parada de trailing, la toma de beneficios.
Optimización de parámetros a través del análisis avanzado y el aprendizaje automático.
Introducir la inteligencia artificial y el aprendizaje automático para la optimización automática de los parámetros.
La estrategia de negociación de breakout escalable es un sistema de breakout robusto y personalizable. Es simple de usar y altamente adaptable al ajustar la retroalimentación y agregar filtros. Puede integrar fácilmente la gestión de riesgos para el control de riesgos. Con la optimización de parámetros e integración de aprendizaje automático, la estrategia puede evolucionar con el tiempo para adaptarse a los mercados cambiantes. En general, es una estrategia de breakout universal recomendada.
/*backtest start: 2023-09-29 00:00:00 end: 2023-10-29 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © deperp //@version=5 // strategy("Range Breaker", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.07, pyramiding=0) // Backtest Time Period useDateFilter = input.bool(true, title="Begin Backtest at Start Date", group="Backtest Time Period") backtestStartDate = input(timestamp("1 Jan 2020"), title="Start Date", group="Backtest Time Period", tooltip="This start date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " + "zone of the chart or of your computer.") inTradeWindow = true swingLookback = input.int(20, title="Swing Lookback", minval=3) stopTargetPercent = input.float(5, title="Stop Target Percentage", step=0.1) // Calculate lockback swings swings(len) => var highIndex = bar_index var lowIndex = bar_index var swingHigh = float(na) var swingLow = float(na) upper = ta.highest(len) lower = ta.lowest(len) if high[len] > upper highIndex := bar_index[len] swingHigh := high[len] if low[len] < lower lowIndex := bar_index[len] swingLow := low[len] [swingHigh, swingLow, highIndex, lowIndex] // Strategy logic [swingHigh, swingLow, highIndex, lowIndex] = swings(swingLookback) longCondition = inTradeWindow and (ta.crossover(close, swingHigh)) shortCondition = inTradeWindow and (ta.crossunder(close, swingLow)) if longCondition strategy.entry("Long", strategy.long) if shortCondition strategy.entry("Short", strategy.short) longStopTarget = close * (1 + stopTargetPercent / 100) shortStopTarget = close * (1 - stopTargetPercent / 100) strategy.exit("Long Stop Target", "Long", limit=longStopTarget) strategy.exit("Short Stop Target", "Short", limit=shortStopTarget) // Plot break lines // line.new(x1=highIndex, y1=swingHigh, x2=bar_index, y2=swingHigh, color=color.rgb(255, 82, 82, 48), width=3, xloc=xloc.bar_index, extend=extend.right) // line.new(x1=lowIndex, y1=swingLow, x2=bar_index, y2=swingLow, color=color.rgb(76, 175, 79, 47), width=3, xloc=xloc.bar_index, extend=extend.right) // Alert conditions for entry and exit longEntryCondition = inTradeWindow and (ta.crossover(close, swingHigh)) shortEntryCondition = inTradeWindow and (ta.crossunder(close, swingLow)) longExitCondition = close >= longStopTarget shortExitCondition = close <= shortStopTarget alertcondition(longEntryCondition, title="Long Entry Alert", message="Enter Long Position") alertcondition(shortEntryCondition, title="Short Entry Alert", message="Enter Short Position") alertcondition(longExitCondition, title="Long Exit Alert", message="Exit Long Position") alertcondition(shortExitCondition, title="Short Exit Alert", message="Exit Short Position")