
La estrategia de ruptura de la oscilación es una estrategia de compra y venta que utiliza una forma de oscilación de los precios para realizar operaciones de compra y venta cuando los precios rompen un soporte o resistencia clave. La estrategia combina varios indicadores técnicos para identificar oportunidades de negociación clave.
La estrategia se basa en cuatro indicadores técnicos: la línea media de la banda de Brin, el promedio móvil simple de 48 días (SMA), el MACD y el ADX. La lógica específica es:
Tenga en cuenta las oportunidades de negociación cuando el precio de cierre se cierre por encima o por debajo de la SMA de 48 días;
Cuando el precio de cierre cruza la línea media de la banda de Bryn, sirve como señal de entrada;
El MACD es mayor o menor que 0 como indicador auxiliar para determinar la dirección de la tendencia;
El ADX debe ser mayor que 25 para filtrar las tendencias no tendenciales.
Cuando se cumplen las cuatro condiciones anteriores, hay que hacer más o menos.
Se trata de una estrategia que combina indicadores de tendencia y oscilación. Sus principales ventajas son:
El SMA de 48 días filtra las operaciones excesivamente frecuentes y bloquea la tendencia de la línea media-larga.
La brecha de la línea media de la banda de Brin capta los puntos de ruptura de resistencia de soporte clave y tiene una función de deterioro muy fuerte.
El MACD determina la dirección de las grandes tendencias y evita el comercio en contra.
El ADX filtra los mercados fuera de tendencia y mejora las probabilidades de éxito de la estrategia.
En resumen, la estrategia se ha optimizado en varios aspectos, como el control de la frecuencia de las transacciones, la captura de puntos clave, el juicio de las tendencias y el filtrado de las situaciones ineficaces.
El principal riesgo de esta estrategia es:
En los mercados convulsionados, la línea media de la banda de Brin frecuentemente desencadena oportunidades de negociación, que pueden ser excesivas.
El índice ADX también presenta ciertos errores en su evaluación de tendencias e ineficiencias.
El retiro es más arriesgado y adecuado para inversores con cierta capacidad de asumir riesgos.
La estrategia puede ser mejorada en los siguientes aspectos:
Aumentar los indicadores de ATR, establecer los puntos de parada y reducir los puntos de parada individuales;
Optimización de los parámetros de la banda de Brin para reducir la frecuencia de activación de la línea media.
Aumentar el volumen de operaciones o el indicador de la fuerza de la tendencia para determinar si la tendencia es fuerte o débil y evitar que la debilidad se revierta.
En resumen, la estrategia de ruptura convulsiva en su conjunto es más madura y capta eficazmente los puntos de negociación clave en la situación de la convulsión. Combina la tendencia y los indicadores de la convulsión para captar el equilibrio entre el riesgo y los beneficios.
/*backtest
start: 2023-12-11 00:00:00
end: 2023-12-12 00:00:00
period: 10m
basePeriod: 1m
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/
// © 03.freeman
//Volatility Traders Minds Strategy (VTM Strategy)
//I found this startegy on internet, with a video explaingin how it works.
//Conditions for entry:
//1 - Candles must to be above or bellow the 48 MA (Yellow line)
//2 - Candles must to break the middle of bollinger bands
//3 - Macd must to be above or bellow zero level;
//4 - ADX must to be above 25 level
//@version=4
strategy("Volatility Traders Minds Strategy (VTM Strategy)", shorttitle="VTM",overlay=true)
source = input(close)
//MA
ma48 = sma(source,48)
//MACD
fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)
MACD = ema(source, fastLength) - ema(source, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD
//BB
length = input(20, minval=1)
mult = input(2.0, minval=0.001, maxval=50)
basis = sma(source, length)
dev = mult * stdev(source, length)
upper = basis + dev
lower = basis - dev
//ADX
adxThreshold = input(title="ADX Threshold", type=input.integer, defval=25, minval=1)
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
up = change(high)
down = -change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
truerange = rma(tr, len)
plus = fixnan(100 * rma(plusDM, len) / truerange)
minus = fixnan(100 * rma(minusDM, len) / truerange)
[plus, minus]
adx(dilen, adxlen) =>
[plus, minus] = dirmov(dilen)
sum = plus + minus
adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
// Strategy: (Thanks to JayRogers)
// === STRATEGY RELATED INPUTS ===
//tradeInvert = input(defval = false, title = "Invert Trade Direction?")
// the risk management inputs
inpTakeProfit = input(defval = 0, title = "Take Profit Points", minval = 0)
inpStopLoss = input(defval = 0, title = "Stop Loss Points", minval = 0)
inpTrailStop = input(defval = 0, title = "Trailing Stop Loss Points", minval = 0)
inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset Points", 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
useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na
useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na
// === STRATEGY - LONG POSITION EXECUTION ===
enterLong() => close>ma48 and close>basis and delta>0 and sig>adxThreshold // functions can be used to wrap up and work out complex conditions
//exitLong() => jaw>teeth or jaw>lips or teeth>lips
strategy.entry(id = "Buy", long = true, when = enterLong() ) // use function or simple condition to decide when to get in
//strategy.close(id = "Buy", when = exitLong() ) // ...and when to get out
// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort() => close<ma48 and close<basis and delta<0 and sig>adxThreshold
//exitShort() => jaw<teeth or jaw<lips or teeth<lips
strategy.entry(id = "Sell", long = false, when = enterShort())
//strategy.close(id = "Sell", when = exitShort() )
// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
strategy.exit("Exit Buy", from_entry = "Buy", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Sell", from_entry = "Sell", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
// === Backtesting Dates === thanks to Trost
testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2020, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testStopHour = input(23, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = testPeriodSwitch == true ? testPeriod() : true
// === /END
if not isPeriod
strategy.cancel_all()
strategy.close_all()