Estrategia de negociación de oscilación de bandas de Bollinger de ruptura

El autor:¿ Qué pasa?, Fecha: 2024-02-21 14:39:14
Las etiquetas:

img

Resumen general

La Breakout Bollinger Bands Oscillation Trading Strategy es una estrategia de negociación para cuando el mercado está en un estado oscilante. Esta estrategia utiliza el indicador Bollinger Bands para juzgar la condición oscilante del mercado y envía señales comerciales cuando el precio toca los rieles superiores o inferiores de las Bandas de Bollinger. A diferencia de las estrategias tradicionales de seguimiento de tendencias, esta estrategia es más adecuada para mercados laterales de rango.

Estrategia lógica

Esta estrategia se implementa principalmente en base al indicador de Bollinger Bands. Las bandas de Bollinger consisten en un tren medio, un tren superior y un tren inferior. Cuando el precio se acerca al tren superior o inferior, representa un exceso de optimismo o pesimismo en el mercado, lo que significa una probabilidad relativamente alta de reversión.

Específicamente, esta estrategia utiliza primero el indicador DMI para determinar si el mercado está en un estado oscilante. Cuando la diferencia entre +DMI y -DMI es menor a 20, se considera que el mercado está variando hacia los lados. Bajo esta condición, vaya largo cuando el precio se rompe por encima del rieles inferior, y vaya corto cuando el precio se rompe por debajo del rieles superior. El punto de stop loss se establece cerca del rieles opuesto.

Ventajas

En comparación con las estrategias de seguimiento de tendencias, esta estrategia es más adecuada para entornos de mercado de rango y no perderá dinero persiguiendo tendencias.

Los riesgos

Esta estrategia se basa principalmente en las bandas de Bollinger para determinar la oscilación del mercado y las condiciones de sobrecompra / sobreventa. Cuando las bandas de Bollinger divergen o se contraen anormalmente, puede conducir a señales erróneas. Además, el punto de stop loss está cerca, por lo que una sola stop loss podría ser relativamente grande. Se recomienda optimizar la estrategia de stop loss con la gestión de dinero.

Optimización

Podemos considerar combinar otros indicadores para filtrar las señales de entrada, como el RSI y otros osciladores, para mejorar la precisión de entrada. Además, optimizar la estrategia de stop loss también es muy importante para evitar una sola gran stop loss. También podemos elegir variedades comerciales que sean más adecuadas para esta estrategia, como las monedas de baja capitalización de mercado.

Conclusión

En general, esta estrategia es adecuada para los mercados oscilantes y se puede utilizar cuando las estrategias de tendencia fallan. Pero todavía hay espacio para mejorar su eficacia al juzgar los estados del mercado con indicadores. Podemos mejorar aún más esta estrategia mediante métodos como combos de múltiples indicadores, gestión de dinero, etc. para que sea más estable y rentable.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(shorttitle='Sideways Strategy DMI + Bollinger Bands',title='Sideways Strategy DMI + Bollinger Bands (by Coinrule)', overlay=true, initial_capital = 100, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.1)

// Works on ETHUSD 3h, 1h, 2h, 4h

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2021, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 12,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 31,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2022, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true

[pos_dm, neg_dm, adx] = dmi(14, 14)


lengthBB = input(20, minval=1)
src = input(close, title="Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
basis = sma(src, lengthBB)
dev = mult * stdev(src, lengthBB)
upper = basis + dev
lower = basis - dev
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)

sideways = (abs(pos_dm - neg_dm) < 20)



//Stop_loss= ((input (3))/100)
//Take_profit= ((input (2))/100)

//longStopPrice  = strategy.position_avg_price * (1 - Stop_loss)
//longTakeProfit = strategy.position_avg_price * (1 + Take_profit)

//closeLong = close < longStopPrice or close > longTakeProfit or StopRSI


//Entry 
strategy.entry(id="long", long = true, when = sideways and (crossover(close, lower)) and window())


//Exit
strategy.close("long", when = (crossunder(close, upper)))


Más.