Estratégia de negociação de oscilação de breakout Bollinger Bands

Autora:ChaoZhang, Data: 2024-02-21 14:39:14
Tags:

img

Resumo

A Estratégia de Negociação de Oscilação de Bandas de Bollinger é uma estratégia de negociação para quando o mercado está em um estado oscilante. Esta estratégia usa o indicador de Bandas de Bollinger para julgar a condição oscilante do mercado e envia sinais de negociação quando o preço toca os trilhos superiores ou inferiores das Bandas de Bollinger.

Estratégia lógica

Esta estratégia é implementada principalmente com base no indicador Bollinger Bands. As Bandas de Bollinger consistem em um trilho médio, trilho superior e trilho inferior. Quando o preço se aproxima do trilho superior ou inferior, ele representa otimismo excessivo ou pessimismo excessivo no mercado, o que significa uma probabilidade relativamente alta de reversão.

Especificamente, esta estratégia usa primeiro o indicador DMI para determinar se o mercado está em um estado oscilante. Quando a diferença entre +DMI e -DMI é menor que 20, o mercado é considerado variando lateralmente. Sob esta condição, vá longo quando o preço quebra acima do trilho inferior e vá curto quando o preço quebra abaixo do trilho superior. O ponto de stop loss é definido perto do trilho oposto.

Vantagens

Em comparação com as estratégias de seguimento de tendências, esta estratégia é mais adequada para ambientes de mercado de intervalo e não perderá dinheiro perseguindo tendências.

Riscos

Esta estratégia depende principalmente das Bandas de Bollinger para determinar a oscilação do mercado e as condições de sobrecompra / sobrevenda. Quando as Bandas de Bollinger divergem ou contraem anormalmente, isso pode levar a sinais errados. Além disso, o ponto de stop loss é próximo, então uma única perda de stop pode ser relativamente grande.

Optimização

Podemos considerar a combinação de outros indicadores para filtrar os sinais de entrada, como o RSI e outros osciladores, para melhorar a precisão de entrada. Além disso, a otimização da estratégia de stop loss também é muito importante para evitar uma única grande stop loss. Também podemos escolher variedades de negociação que são mais adequadas para essa estratégia, como moedas de baixa capitalização de mercado.

Conclusão

Em geral, esta estratégia é adequada para oscilação de mercados e pode ser usada quando as estratégias de tendência falham. Mas ainda há espaço para melhorar sua eficácia julgando os estados do mercado com indicadores. Podemos melhorar ainda mais esta estratégia por métodos como combinações de múltiplos indicadores, gerenciamento de dinheiro, etc. para torná-la mais estável e lucrativa.


/*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)))


Mais.