
La estrategia de retroalimentación de alta y baja brecha es una estrategia de seguimiento de tendencias que utiliza los altos y bajos históricos de las acciones para determinar si los precios han superado estos altos y bajos. Se produce una señal de compra al calcular los máximos y mínimos de un período determinado, cuando el precio del ciclo actual supera el precio más alto del período más reciente; cuando el precio cae por debajo del precio más bajo del período más reciente, se produce una venta.
La lógica central de esta estrategia es calcular los precios más altos y más bajos en un período determinado (la línea K de 50 valores por defecto). Para calcular los precios más altos y más bajos, se puede elegir el precio de cierre o el precio más alto y más bajo (el precio más alto y más bajo por defecto). Luego, se determina si el precio de cierre o el precio más alto de la línea K actual supera el precio más alto de un período determinado.
Cuando se genera una señal de compra, la estrategia compra a ese precio y establece un precio de stop loss y un precio de stop loss. Cuando el precio toca el precio de stop loss, la estrategia se detiene y se retira; cuando el precio toca el precio de stop loss, la estrategia se detiene y se retira. La lógica de la señal de venta es similar.
Esta estrategia de retroalimentación de alto y bajo nivel tiene las siguientes ventajas:
La estrategia también tiene sus riesgos:
Para controlar estos riesgos, se puede optimizar en los siguientes aspectos:
La estrategia de retroalimentación de la brecha alta y baja se puede optimizar en los siguientes aspectos:
Optimización de parámetros. Se puede encontrar el parámetro óptimo probando más sistemáticamente diferentes combinaciones de parámetros.
En combinación con otros indicadores se puede filtrar la señal de compra. Por ejemplo, se puede combinar con el indicador de promedios móviles, que solo genera una señal de compra cuando el precio supera el precio más alto y atraviesa el promedio móvil a largo plazo en el promedio móvil a corto plazo.
Tenga en cuenta la frecuencia de fluctuación de los precios de las acciones. Por ejemplo, se puede combinar con el indicador ATR, con la amplitud adecuada de la ruptura cuando los precios de las acciones aumentan.
Distinguir entre mercados de tendencia y mercados de crisis. En las fases en que la tendencia es evidente, flexibilizar adecuadamente los parámetros para seguir la tendencia. En los mercados de crisis, apretar adecuadamente los parámetros.
Aumentar los mecanismos de gestión de posiciones, por ejemplo, detener la apertura de posiciones cuando se alcanza una cierta proporción de pérdidas.
En general, la estrategia de retroalimentación de brechas altas y bajas es una estrategia de seguimiento de tendencias sencilla y práctica. Determina las señales de negociación al determinar si los precios superan los máximos y mínimos de un período determinado. La estrategia tiene ventajas como la simplicidad, el seguimiento de tendencias y la optimización parametrizada, pero también existe el riesgo de generar exceso de operaciones y no poder manejar mercados oscilantes.
/*backtest
start: 2023-11-25 00:00:00
end: 2023-11-26 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("High/Low Breaker Backtest 1.0", overlay=true, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, max_bars_back=700)
// Strategy Settings
takeProfitPercentageLong = input(.1, title='Take Profit Percentage Long', type=float)/100
stopLossPercentageLong = input(0.15, title='Stop Loss Percentage Long', type=float)/100
takeProfitPercentageShort = input(.1, title='Take Profit Percentage Short', type=float)/100
stopLossPercentageShort = input(0.15, title='Stop Loss Percentage Short', type=float)/100
candlesBack = input(title="Number of candles back", defval=50)
useHighAndLows = input(true, title="Use high and lows (uncheck to use close)", defval=true)
lastBarsBackMinimum = input(title="Number of candles back to ignore for last high/low", defval=30)
showHighsAndLows = input(true, title="Show high/low lines", defval=true)
getIndexOfLowestInSeries(series, period) =>
index = 0
current = series
for i = 1 to period
if series[i] <= current
index := i
current := series[i]
index
getIndexOfHighestInSeries(series, period) =>
index = 0
current = series
for i = 1 to period
if series[i] >= current
index := i
current := series[i]
index
indexOfHighestInRange = getIndexOfHighestInSeries(useHighAndLows ? high : close, candlesBack)
indexOfLowestInRange = getIndexOfLowestInSeries(useHighAndLows ? low : close, candlesBack)
max = useHighAndLows ? high[indexOfHighestInRange] : close[indexOfHighestInRange]
min = useHighAndLows ? low[indexOfLowestInRange] : close[indexOfLowestInRange]
barsSinceLastHigh = indexOfHighestInRange
barsSinceLastLow = indexOfLowestInRange
isNewHigh = (useHighAndLows ? high > max[1] : close > max[1]) and (barsSinceLastHigh[1] + 1 > lastBarsBackMinimum)
isNewLow = (useHighAndLows ? low < min[1] : close < min[1]) and (barsSinceLastLow[1] + 1 > lastBarsBackMinimum)
alertcondition(condition=isNewHigh, title="New High", message="Last High Broken")
alertcondition(condition=isNewLow, title="New Low", message="Last Low Broken")
if high > max
max := high
barsSinceLastHigh := 0
if low < min
min := low
barsSinceLastLow := 0
plot( showHighsAndLows ? max : na, color=red, style=line, title="High", linewidth=3)
plot( showHighsAndLows ? min : na, color=green, style=line, title="Low", linewidth=3)
// Strategy Entry/Exit Logic
goLong =isNewHigh
longStopLevel = strategy.position_avg_price * (1 - stopLossPercentageLong)
longTakeProfitLevel = strategy.position_avg_price * (1 + takeProfitPercentageLong)
goShort = isNewLow
shortStopLevel = strategy.position_avg_price * (1 + stopLossPercentageShort)
shortTakeProfitLevel = strategy.position_avg_price * (1 - takeProfitPercentageShort)
strategy.entry("Long", strategy.long, when=goLong)
strategy.exit("Long Exit", "Long", stop=longStopLevel, limit=longTakeProfitLevel)
strategy.entry("Short", strategy.short, when=goShort)
strategy.exit("Short Exit", "Short", stop=shortStopLevel, limit=shortTakeProfitLevel)
plot(goShort ? shortStopLevel : na, color=yellow, style=linebr, linewidth=2)
plot(goShort ? shortTakeProfitLevel : na, color=blue, style=linebr, linewidth=2)
plot(goLong ? longStopLevel : na, color=yellow, style=linebr, linewidth=2)
plot(goLong ? longTakeProfitLevel : na, color=blue, style=linebr, linewidth=2)