Estrategia de ruptura de Bollinger con la pirámide

El autor:¿ Qué pasa?, Fecha: 2023-11-23 14:01:57
Las etiquetas:

img

Resumen general

Esta estrategia entra en posiciones largas o cortas basadas en las rupturas de las bandas de Bollinger. Va largo cuando el precio se rompe por debajo de la banda inferior y va corto cuando el precio se rompe por encima de la banda superior.

Estrategia lógica

La estrategia utiliza 3 líneas de bandas de Bollinger - media, superior e inferior. La línea media es el promedio móvil de n días. La línea superior es la línea media + k * desviación estándar de n días. La línea inferior es la línea media - k * desviación estándar de n días. Por lo general n es 20 y k es 2.

Cuando el precio se rompe por encima de la línea superior, indica una tendencia a la baja y va corto. Cuando el precio se rompe por debajo de la línea inferior, indica una tendencia al alza y va largo.

Después de tomar posiciones, la estrategia mantiene la pirámide, lo que significa agregar más posiciones en la misma dirección.

Las pérdidas de detención para todas las posiciones también se actualizan en tiempo real en función de la diferencia entre el precio medio de tenencia actual y el precio de la banda.

Análisis de ventajas

Las ventajas de esta estrategia incluyen:

  1. Utilice las bandas de Bollinger para identificar con precisión las rupturas y los cambios de tendencia.
  2. Introduzca posiciones en cruz dorada y cruz muerta sistemáticamente.
  3. Ganar más ganancias con la pirámide.
  4. Actualización en tiempo real para evitar ser noqueado.

Análisis de riesgos

También existen algunos riesgos de esta estrategia:

  1. Las bandas de Bollinger son sensibles a la volatilidad del mercado y pueden incurrir en problemas.
  2. La pirámide aumenta la exposición y aprovecha la pérdida potencial.
  3. El stop loss no está garantizado y aún tiene la probabilidad de ser detenido.

Algunos métodos para hacer frente a los riesgos:

  1. Optimizar los parámetros de las bandas de Bollinger para diferentes ciclos.
  2. Ajusta la escala y la frecuencia de las pirámides.
  3. Añadir la línea media como una línea de stop loss adicional.

Direcciones de optimización

La estrategia se puede optimizar a partir de los siguientes aspectos:

  1. Optimizar los parámetros de las bandas de Bollinger para adaptar más regímenes de mercado.
  2. Mejorar la lógica de la pirámide para equilibrar el riesgo-recompensa.
  3. Agregue más líneas de stop loss como la línea media.
  4. Desarrollar un mecanismo de obtención de beneficios para fijar los beneficios de manera proactiva.
  5. Combinar otros indicadores para filtrar las entradas.
  6. Mejorar la gestión del riesgo para controlar las pérdidas por operación.

Conclusión

En conclusión, esta es una estrategia típica de seguimiento de tendencias. Se impulsa cuando surge la tendencia y obtiene ganancias en consecuencia. Mientras tanto, también contiene riesgos inherentes. Se necesitan más optimizaciones para adaptar más las condiciones del mercado y abordar el riesgo de la sierra.


/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5

strategy(title='Bollinger Band strategy with split, limit, stop', shorttitle='bb strategy', overlay=true,commission_type = strategy.commission.percent, commission_value = 0.01, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, pyramiding = 4)



//Summary: Going Long or Short when Entering after Breaking the Bollinger Bands\
//At this time, the stop-loss, profit-taking price, and pyramiding standard\
// are determined from the difference between the position average price and the band price.

//After entering the position, if the price crosses the mid-band line, the stop loss is adjusted to the mid-band line.



//each trade, entry position size = 10% of total cash
//max pyramiding is 4
//commission = 0.01%





in_period = true


bb_length = input.int(20)
bb_mult = input.int(2)

[middle, upper, lower] = ta.bb(close,bb_length, bb_mult)
plot(middle, color=color.aqua)
plot(upper, color=color.orange)
plot(lower, color=color.orange)
long_cond = ta.crossover(close,lower)
short_cond = ta.crossunder(close,upper)

var saved_ph = 0.0
if strategy.opentrades>0 and strategy.opentrades[1]==0 and strategy.position_size > 0
    saved_ph := upper[1]
var saved_pl = 0.0
if strategy.opentrades>0 and strategy.opentrades[1]==0 and strategy.position_size < 0
    saved_pl := lower[1]

avg = strategy.position_avg_price

long_diff = saved_ph-avg
short_diff = saved_pl-avg

long_stoploss = avg - 1*long_diff
short_stoploss = avg - 1*short_diff

long_avgdown = avg - 0.5*long_diff
short_avgup = avg - 0.5*short_diff

long_profit_price = avg + 0.5*long_diff
short_profit_price = avg + 0.5*short_diff

var label _label = na
if in_period
    if long_cond and strategy.opentrades==0
        strategy.entry("Long",strategy.long)
    if long_cond and strategy.opentrades >0 and (close[1]<long_avgdown or close[2]<long_avgdown)
        strategy.entry("Long",strategy.long)

    if short_cond and strategy.opentrades==0
        strategy.entry("Short", strategy.short)
    if short_cond and strategy.opentrades>0 and (close[1]>short_avgup or close[2]>short_avgup)
        strategy.entry("Short",strategy.short)

plot(avg, style=plot.style_linebr)


plot(strategy.position_size > 0? long_profit_price: na,color=color.green, style=plot.style_linebr)
plot(strategy.position_size > 0? long_avgdown: na,color=color.yellow, style=plot.style_linebr)
plot(strategy.position_size > 0? long_stoploss: na,color=color.red, style=plot.style_linebr)

plot(strategy.position_size < 0? short_profit_price: na,color=color.green, style=plot.style_linebr)
plot(strategy.position_size < 0? short_avgup: na,color=color.yellow, style=plot.style_linebr)
plot(strategy.position_size < 0? short_stoploss: na,color=color.red, style=plot.style_linebr)

if strategy.position_size > 0
    if ta.crossover(close, middle)
        strategy.exit("Long Exit", "Long", limit=long_profit_price, stop=middle)
    else
        strategy.exit("Long Exit", "Long", limit=long_profit_price, stop=long_stoploss)
if strategy.position_size < 0
    if ta.crossunder(close, middle)
        strategy.exit("Short Exit", "Short", limit=short_profit_price, stop=middle)
    else
        strategy.exit("Short Exit", "Short", limit=short_profit_price, stop=short_stoploss)

Más.