
La estrategia de ruptura escalable es una estrategia de ruptura muy flexible y escalable que identifica las áreas clave de soporte y resistencia del precio y genera una señal de negociación cuando el precio supera estas áreas. La estrategia puede aplicarse a diferentes períodos de tiempo mediante la adaptación de los parámetros, y también puede integrarse fácilmente con una variedad de condiciones de filtración adicionales y mecanismos de gestión de riesgos para optimizarlos para un activo específico.
La estrategia comenzó conswings()La función calcula los máximos y mínimos de fluctuación de los precios actuales en función de la retrospectiva.swingLookbackLa configuración de los parámetros, que tiene por defecto 20 líneas K. Después de eso, cuando el precio rompa el punto más alto de la oscilación, haga más; cuando el precio cae el punto más bajo de la oscilación, haga un vacío.
La lógica concreta de hacer más señales es hacer más cuando el precio de cierre es mayor que el precio de fluctuación alto. La lógica concreta de señales de baja es hacer menos cuando el precio de cierre es menor que el precio de fluctuación bajo.
Además, la estrategia también establece un punto de parada, a través destopTargetPercentLos parámetros para configurar la amplitud de la parada de pérdidas. Por ejemplo, el precio de la parada de pérdidas se establece en menos del 5% del precio máximo y el precio de la parada de pérdidas se establece en más del 5% del precio mínimo.
La ventaja de esta estrategia es que se puede controlar la frecuencia de las operaciones mediante el ajuste de los períodos de retracción. Cuanto más corto sea el período de retracción, más sensible a las rupturas, mayor será la frecuencia de las operaciones. Por el contrario, el período de retracción demasiado largo disminuye la frecuencia de las operaciones pero puede perder oportunidades.
Respuesta:
La estrategia puede ser optimizada en los siguientes aspectos:
Prueba de diferentes parámetros de revisión para encontrar la combinación óptima de parámetros.
Probar diferentes ciclos de negociación, como 5 minutos, 15 minutos, 1 hora, etc., para seleccionar el mejor ciclo;
Optimización de los límites de pérdidas y equilibrio entre el margen de ganancias y el control de riesgos.
Aumentar las condiciones de filtración, tales como filtración de volumen de transacciones, filtración de fluctuaciones, etc., para reducir las señales de baja calidad;
La integración de más mecanismos de gestión de riesgos, como el stop loss móvil y el bloqueo de ganancias;
Optimización de parámetros, búsqueda de parámetros óptimos con optimización progresiva y búsqueda aleatoria;
Integración de la tecnología de aprendizaje automático para la optimización automática de parámetros mediante IA.
La estrategia de ruptura extensible es un sistema de ruptura muy práctico. Es simple y fácil de usar, se puede personalizar y se puede optimizar para diferentes activos ajustando el período de retrospección y la integración de diversas condiciones de filtración. Al mismo tiempo, se puede integrar fácilmente en todo tipo de mecanismos de gestión de riesgos para controlar el riesgo de las operaciones.
/*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")