
Esta es una estrategia de tendencia de reversión basado en el canal de la banda de Brin. Utiliza el canal de la banda de Brin para determinar la tendencia y buscar oportunidades de reversión cuando el precio se acerca a la frontera del canal.
La estrategia utiliza el indicador de la banda de Brin como indicador técnico principal. La banda de Brin se compone de una media móvil de n días y su rango de fluctuación ascendente y descendente, la banda de Brin ascendente = una media móvil de n días + m × n días de diferencia estándar, y la banda de Brin descendente = una media móvil de n días - m × n días de diferencia estándar.
Cuando el precio está cerca de la subida, indica que se encuentra en una tendencia ascendente, pero puede llegar a la cima de la reversión; cuando el precio está cerca de la bajada, indica que se encuentra en una tendencia descendente, pero puede llegar a la parte inferior de la reversión. En este momento, si se rompe efectivamente la banda de Brin en la bajada, puede comenzar la reversión.
Las reglas específicas de esta estrategia son las siguientes:
Cuando el precio de cierre es mayor que el de la banda de Brin, se hace una entrada adicional; cuando el precio de cierre es menor que el de la banda de Brin, se hace una entrada en blanco.
La parada de pérdidas se señala con una media móvil de n días. La parada de pérdidas se ejecuta cuando el precio de cierre de la sencilla múltiple rompe la media diaria de n días; La parada de pérdidas se ejecuta cuando el precio de cierre de la sencilla vacía rompe la media diaria de n días.
Se utiliza un volumen fijo de transacciones, con un valor fijo por transacción.
La administración de fondos de tasa fija establece una tasa fija de ganancias y pérdidas y un margen de ajuste de los pedidos. Aumente la posición con una tasa fija de ganancias cuando logre una tasa fija de ganancias y reduzca la posición cuando tenga pérdidas.
La estrategia tiene las siguientes ventajas:
Utiliza el canal de la banda de Brin para determinar la dirección de la tendencia, adopta estrategias de negociación contracorriente, ingresa en momentos en que los precios pueden revertirse, evita la mayor parte de las sacudidas y mejora la tasa de ganancias.
Las medias móviles son más confiables como señales de stop loss y bloquean la mayor parte de las ganancias.
Las estrategias de volumen fijo son sencillas y fáciles de manejar y no requieren cálculos complejos.
Las estrategias de gestión de fondos de tasa fija permiten ampliar las ganancias y controlar el riesgo mediante la adaptación de las posiciones.
La estrategia también tiene ciertos riesgos:
Hay una probabilidad de que el juicio de las bandas de Bryn produzca una señal errónea, lo que podría dar lugar a pérdidas individuales al invertir la tendencia.
El retraso de las medias móviles puede causar que la parálisis no sea suficiente.
El volumen fijo de transacciones no permite ajustar la posición según las condiciones del mercado, y existe el problema de posiciones demasiado grandes o demasiado pequeñas.
El método de gestión de fondos de tasa fija expande las posiciones en gran medida, lo que puede provocar una expansión de las pérdidas.
Optimización de los parámetros de las bandas de Bryn para mejorar la precisión de la señal; en combinación con otros indicadores para juzgar la tendencia; reducción adecuada del tamaño de las posiciones fijas; reducción del margen de ajuste de las posiciones en la administración de fondos de proporción fija.
La estrategia puede ser optimizada en los siguientes aspectos:
Optimizar los parámetros de la banda de Bryn, como ajustar los valores de n y m, para mejorar la precisión de los juicios de la banda de Bryn.
Añadir otros indicadores de juicio, como MACD, KD, etc., para evitar señales erróneas de Bryn.
Ajuste el volumen de operaciones fijas a volumen de operaciones dinámicas y ajuste las posiciones con flexibilidad según las condiciones del mercado.
Reducir el margen de ajuste de posición de la ley de gestión de fondos de tasa fija y optimizar la curva de capital.
Añadir estrategias de stop loss, como stop loss móvil, stop loss de ruptura de rango, etc., para controlar aún más el riesgo.
Optimización de parámetros, optimización automática de combinaciones de parámetros, búsqueda de los mejores parámetros para optimizar la estrategia.
La estrategia en su conjunto es una estrategia de inversión más típica de la banda de Brin. Utiliza la banda de Brin para determinar el punto de inflexión de la tendencia, junto con la configuración de la media móvil para detener la pérdida, el volumen de transacciones fijos y el control de riesgos de la gestión de fondos de tasa fija. En comparación con la estrategia tradicional de la banda de Brin, la estrategia como una estrategia de inversión, en teoría puede evitar algunos temblores y mejorar la probabilidad de ganancias.
/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-30 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/
// © gsanson66
//This strategy uses the well-known Bollinger Bands Indicator
//@version=5
strategy("BOLLINGER BANDS BACKTESTING", shorttitle="BB BACKTESTING", overlay=true, initial_capital=1000, default_qty_type=strategy.cash, default_qty_value=950, commission_type=strategy.commission.percent, commission_value=0.18)
//----------------------------------------FUNCTIONS---------------------------------------//
//@function Displays text passed to `txt` when called.
debugLabel(txt, color) =>
label.new(bar_index, high, text = txt, color=color, style = label.style_label_lower_right, textcolor = color.black, size = size.small)
//@function which looks if the close date of the current bar falls inside the date range
inBacktestPeriod(start, end) => (time >= start) and (time <= end)
//---------------------------------------USER INPUTS--------------------------------------//
//Technical parameters
bbLength = input.int(defval=20, minval=1, title="BB Length", group="Technical Parameters")
mult = input.float(defval=2, minval=0.1, title="Standard Deviation Multipler", group="Technical Parameters")
smaLength = input.int(defval=20, minval=1, title="SMA Exit Signal Length", group="Technical Parameters")
//Money Management
fixedRatio = input.int(defval=400, minval=1, title="Fixed Ratio Value ($)", group="Money Management")
increasingOrderAmount = input.int(defval=200, minval=1, title="Increasing Order Amount ($)", group="Money Management")
//Backtesting period
startDate = input(title="Start Date", defval=timestamp("1 Jan 2020 00:00:00"), group="Backtesting Period")
endDate = input(title="End Date", defval=timestamp("1 July 2024 00:00:00"), group="Backtesting Period")
//----------------------------------VARIABLES INITIALISATION-----------------------------//
strategy.initial_capital = 50000
//Exit SMA
smaExit = ta.sma(close, smaLength)
//BB Calculation
basis = ta.sma(close, bbLength)
dev = mult * ta.stdev(close, bbLength)
upperBB = basis + dev
lowerBB = basis - dev
//Money management
equity = strategy.equity - strategy.openprofit
var float capital_ref = strategy.initial_capital
var float cashOrder = strategy.initial_capital * 0.95
//Backtesting period
bool inRange = na
//------------------------------CHECKING SOME CONDITIONS ON EACH SCRIPT EXECUTION-------------------------------//
//Checking if the date belong to the range
inRange := true
//Checking performances of the strategy
if equity > capital_ref + fixedRatio
spread = (equity - capital_ref)/fixedRatio
nb_level = int(spread)
increasingOrder = nb_level * increasingOrderAmount
cashOrder := cashOrder + increasingOrder
capital_ref := capital_ref + nb_level*fixedRatio
if equity < capital_ref - fixedRatio
spread = (capital_ref - equity)/fixedRatio
nb_level = int(spread)
decreasingOrder = nb_level * increasingOrderAmount
cashOrder := cashOrder - decreasingOrder
capital_ref := capital_ref - nb_level*fixedRatio
//Checking if we close all trades in case where we exit the backtesting period
if strategy.position_size!=0 and not inRange
strategy.close_all()
debugLabel("END OF BACKTESTING PERIOD : we close the trade", color=color.rgb(116, 116, 116))
//-----------------------------------EXIT SIGNAL------------------------------//
if strategy.position_size > 0 and close < smaExit
strategy.close("Long")
if strategy.position_size < 0 and close > smaExit
strategy.close("Short")
//----------------------------------LONG/SHORT CONDITION---------------------------//
//Long Condition
if close > upperBB and inRange
qty = cashOrder/close
strategy.entry("Long", strategy.long, qty)
//Short Condition
if close < lowerBB and inRange
qty = cashOrder/close
strategy.entry("Short", strategy.short, qty)
//---------------------------------PLOTTING ELEMENT----------------------------------//
plot(smaExit, color=color.orange)
upperBBPlot = plot(upperBB, color=color.blue)
lowerBBPlot = plot(lowerBB, color=color.blue)
fill(upperBBPlot, lowerBBPlot, title = "Background", color=strategy.position_size>0 ? color.rgb(0, 255, 0, 90) : strategy.position_size<0 ? color.rgb(255, 0, 0, 90) : color.rgb(33, 150, 243, 95))