Estratégia de diminuição da tendência do índice percentual BB

Autora:ChaoZhang, Data: 2023-12-06 14:43:39
Tags:

img

Resumo

Esta estratégia baseia-se no índice percentual BB combinado com indicadores RSI e MFI. Ele toma decisões longas e curtas detectando quebras de preço do trilho superior e inferior das Bandas de Bollinger, juntamente com sinais de sobrevenda/supercompra do RSI e sinais de sobrevenda/supercompra do MFI. É uma típica estratégia de negociação de tendência que desaparece.

Estratégia lógica

  1. Calcular Bollinger Band Percentage (BB%). BB% representa o desvio padrão do preço em relação à banda média de Bollinger, que julga a direção do mercado através do canal de Bollinger.
  2. Incorporar indicadores RSI e MFI para determinar as condições de sobrecompra e sobrevenda. RSI compara o ganho médio e a perda média ao longo de um período de tempo para determinar os níveis de sobrecompra e sobrevenda.
  3. Quando o preço atravessa o trilho inferior de Bollinger para cima, vá longo; quando o preço atravessa o trilho superior de Bollinger para baixo, vá curto.

Vantagens

  1. A negociação de tendências decrescentes evita as tendências do mercado e reduz as flutuações dos rendimentos.
  2. A combinação de múltiplos indicadores filtra os sinais e melhora a precisão das decisões.
  3. As definições parametrizadas são flexíveis para ajustar as características de risco-retorno da estratégia.
  4. Aplicável a instrumentos altamente voláteis como commodities, forex, criptomoedas, etc.

Riscos e soluções

  1. Há uma alta probabilidade de falsos sinais de rupturas de Bollinger, exigindo uma combinação de múltiplos indicadores para filtragem.
  2. O julgamento do sinal de ruptura requer critérios adequadamente relaxados para evitar perder boas oportunidades.
  3. Ajustar as definições dos parâmetros para controlar os riscos, tais como o dimensionamento das posições, a elevação das linhas de stop loss, etc.

Orientações de otimização

  1. Incorporar mecanismos de stop loss baseados na volatilidade, como o indicador ATR.
  2. Introduzir modelos de aprendizagem de máquina para ajudar a avaliar a qualidade do sinal de ruptura.
  3. Otimizar os mecanismos de seleção de instrumentos para ajustar dinamicamente os instrumentos participantes.
  4. Incorporar mais fatores como indicadores de sentimento, notícias, etc. para melhorar o quadro de decisão.

Conclusão

Esta estratégia é aplicada principalmente a instrumentos não-trending de alta volatilidade. Implementa a negociação de tendência desbotada através de combinações de canal e indicadores de Bollinger. As características de risco-retorno podem ser controladas ajustando parâmetros. Melhorias adicionais podem ser feitas introduzindo mais indicadores e modelos auxiliares para otimizar a qualidade da decisão, alcançando assim um melhor desempenho da estratégia.


/*backtest
start: 2023-11-05 00:00:00
end: 2023-12-05 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "BB%/MFI/RSI", shorttitle = "BB%/MFI/RSI", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 100)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From Day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To Day")

source = hlc3
length = input(14, minval=1), mult = input(2.0, minval=0.001, maxval=50), bblength = input(50, minval=1, title="BB Period")
DrawRSI_f=input(true, title="Draw RSI?", type=bool)
DrawMFI_f=input(false, title="Draw MFI?", type=bool)
HighlightBreaches=input(true, title="Highlight Oversold/Overbought?", type=bool)

DrawMFI = (not DrawMFI_f) and (not DrawRSI_f) ? true : DrawMFI_f
DrawRSI = (DrawMFI_f and DrawRSI_f) ? false : DrawRSI_f
// RSI
rsi_s = DrawRSI ? rsi(source, length) : na
plot(DrawRSI ? rsi_s : na, color=maroon, linewidth=2)

// MFI
upper_s = DrawMFI ? sum(volume * (change(source) <= 0 ? 0 : source), length) : na
lower_s = DrawMFI ? sum(volume * (change(source) >= 0 ? 0 : source), length) : na
mf = DrawMFI ? rsi(upper_s, lower_s) : na
plot(DrawMFI ? mf : na, color=green, linewidth=2)

// Draw BB on indices
bb_s = DrawRSI ? rsi_s : DrawMFI ? mf : na
basis = sma(bb_s, length)
dev = mult * stdev(bb_s, bblength)
upper = basis + dev
lower = basis - dev
plot(basis, color=red)
p1 = plot(upper, color=blue)
p2 = plot(lower, color=blue)
fill(p1,p2, blue)

b_color = (bb_s > upper) ? red : (bb_s < lower) ? lime : na
bgcolor(HighlightBreaches ? b_color : na, transp = 0)

//Signals
up = bb_s < lower and close < open
dn = bb_s > upper and close > open
size = strategy.position_size
lp = size > 0 and close > open
sp = size < 0 and close < open
exit = (up == false and dn == false) and (lp or sp)

//Trading
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if up
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Mais.