
La estrategia de ruptura dinámica se basa en el concepto planteado por Richard Buchstaber en 1984 de que los mercados tienden a seguir en esa dirección una vez que se producen grandes fluctuaciones. Por lo tanto, la estrategia utiliza el ATR para medir la volatilidad y emite una señal de negociación cuando los cambios en los precios de cierre superan el umbral de varios ATR.
La estrategia primero calcula el indicador ATR para medir la volatilidad del mercado. Luego calcula el valor absoluto de los cambios diarios en el precio de cierre. Se genera una señal de negociación cuando el precio de cierre varía varias veces más que el valor del indicador ATR. En concreto, si el aumento en el precio de cierre es mayor que el aumento en el ATR, haga más; si la caída en el precio de cierre es mayor que el aumento en el ATR, haga vacío.
La estrategia utiliza el indicador ATR para determinar dinámicamente los breakouts. Cuando la volatilidad del mercado aumenta, los breakouts se elevan, lo que reduce las transacciones erróneas. Cuando el mercado se reduce, los breakouts bajan, lo que permite capturar oportunamente las oportunidades de breakout.
Se puede considerar combinar otros indicadores para seleccionar el momento de la negociación y mejorar la eficiencia. También se pueden elegir parámetros más favorables para las características de la variedad. El uso de tecnologías como el algoritmo de Martingale para controlar la frecuencia de las transacciones.
La estrategia de ruptura dinámica es simple y directa, utiliza la ruptura para generar señales de negociación. La parada de ATR permite adaptarse a la volatilidad del mercado. La estrategia depende de la optimización de los parámetros para obtener buenos resultados.
/*backtest
start: 2022-10-26 00:00:00
end: 2023-11-01 00:00:00
period: 1d
basePeriod: 1h
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/
// © EduardoMattje
//@version=5
strategy("Volatility System", overlay=false, margin_long=0, margin_short=0, default_qty_type=strategy.percent_of_equity,
default_qty_value=100, process_orders_on_close=true, initial_capital=20000)
// Inputs
var averageLength = input.int(14, "Average length", 2)
var multiplier = input.float(2.0, "Multiplier", 0.0, step=0.1)
// Calculations
atr = ta.atr(averageLength) * multiplier
closingChange = ta.change(close, 1)
atrPenetration(int signal) =>
res = closingChange * signal > atr[1]
longCondition = atrPenetration(1)
shortCondition = atrPenetration(-1)
// Order calls
if (longCondition)
strategy.entry(strategy.direction.long, strategy.long)
if (shortCondition)
strategy.entry(strategy.direction.short, strategy.short)
// Visuals
plot(atr, "ATR", color.white, 2)
plot(math.abs(closingChange), "Absolute close change", color.red)