La estrategia es un sistema comercial de seguimiento del impulso basado en el indicador de bandas de Bollinger. Identifica posibles oportunidades de ruptura monitoreando la relación entre el precio y la Banda de Bollinger superior y cierra la posición cuando el precio cae por debajo de la Banda de Bollinger inferior. Las bandas de Bollinger constan de tres líneas: la banda media (promedio móvil), la banda superior y la banda inferior (calculada a partir de la desviación estándar). La estrategia admite múltiples tipos de promedios móviles y puede ajustar los parámetros según las preferencias del operador.
La lógica central de la estrategia se basa en los siguientes puntos:
Esta es una estrategia de seguimiento de tendencias basada en las Bandas de Bollinger, que captura las tendencias del mercado observando la relación entre el precio y las Bandas de Bollinger. La estrategia está razonablemente diseñada y tiene un buen mecanismo de ajuste y gestión de riesgos. A través de las direcciones de optimización recomendadas, se puede mejorar aún más la estabilidad y la rentabilidad de la estrategia. La estrategia es especialmente adecuada para mercados con mayor volatilidad, pero los operadores deben ajustar los parámetros y las medidas de control de riesgos en función de las condiciones reales.
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title="Demo GPT - Bollinger Bands Strategy", overlay=true, initial_capital=100000, commission_type=strategy.commission.percent, commission_value=0.1, slippage=3)
// Inputs
length = input.int(20, minval=1, title="Length")
maType = input.string("SMA", "Basis MA Type", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
src = input(close, title="Source")
mult = input.float(2.0, minval=0.001, maxval=50, title="StdDev")
offset = input.int(0, "Offset", minval=-500, maxval=500)
startDate = input(timestamp('01 Jan 2018 00:00 +0000'), title="Start Date")
endDate = input(timestamp('31 Dec 2069 23:59 +0000'), title="End Date")
// Moving Average Function
ma(source, length, _type) =>
switch _type
"SMA" => ta.sma(source, length)
"EMA" => ta.ema(source, length)
"SMMA (RMA)" => ta.rma(source, length)
"WMA" => ta.wma(source, length)
"VWMA" => ta.vwma(source, length)
// Calculations
basis = ma(src, length, maType)
dev = mult * ta.stdev(src, length)
upper = basis + dev
lower = basis - dev
// Plotting
plot(basis, "Basis", color=#2962FF, offset=offset)
p1 = plot(upper, "Upper", color=#F23645, offset=offset)
p2 = plot(lower, "Lower", color=#089981, offset=offset)
fill(p1, p2, title="Background", color=color.rgb(33, 150, 243, 95))
// Strategy Logic
inTradeWindow = true
longCondition = close > upper and inTradeWindow
exitCondition = close < lower and inTradeWindow
if (longCondition)
strategy.entry("Long", strategy.long, qty=1)
if (exitCondition)
strategy.close("Long")