Estratégia de rastreamento de tendências da grade de Bollinger Fibonacci

Autora:ChaoZhang, Data: 2023-12-13 17:12:38
Tags:

img

Resumo

Esta estratégia usa o indicador Bollinger Bands para desenhar canais de preços baseados em ATR e retracements de Fibonacci como grades. Combinando com linhas EMA duplas para determinar a direção geral da tendência, seletivamente definir grades de stop-loss de rastreamento nas bandas de preços de Bollinger na direção da tendência para alcançar a arbitragem de rastreamento de tendência.

Princípio da estratégia

  1. Utilize a linha média das Bandas de Bollinger e os trilhos superior e inferior construídos a partir das linhas de retracementos ATR e 4 Fibonacci para construir as bandas de onda de preços.

  2. A linha rápida EMA e a linha lenta SMA formam uma média móvel dupla para determinar a direção geral da tendência.

  3. Em um mercado de alta, apenas vá longo, escolha preços perto do trilho inferior das Bandas de Bollinger para atravessar a parte inferior do canal para abrir posições longas; em um mercado de baixa, apenas vá curto, escolha preços perto do trilho superior das Bandas de Bollinger para atravessar a parte superior do canal para abrir posições curtas.

  4. Configurar condições de stop loss: sair das posições direcionais correntes quando aparecer uma barra de reversão grande.

Análise das vantagens

  1. Usar médias móveis duplas para determinar tendências de mega-nível para evitar a negociação contra-tendência.

  2. A grelha de canais Bollinger ATR define preços de abertura múltiplos para aumentar a probabilidade de abertura de posições com sucesso.

  3. As bandas de onda de retração de Fibonacci definem a volatilidade dos preços, com diferentes números de posições em diferentes bandas, alcançando a dispersão do capital.

  4. As condições de stop loss em tempo real facilitam a realização de stop losses rápidos e reduzem a recuperação dos lucros.

Análise de riscos

  1. Ajustar adequadamente os parâmetros da média móvel ou adicionar outros indicadores para julgamento auxiliar.

  2. Quando a volatilidade é muito grande, os preços podem atravessar a área da grade diretamente, incapazes de abrir posições.

  3. As condições de stop loss são mais subjetivas e os critérios de reconhecimento podem diferir entre os traders.

Orientações de otimização

  1. Adicionar o indicador APO para análise auxiliar dos julgamentos da tendência da média móvel dupla.

  2. Usar indicadores de volatilidade do mercado para otimizar os parâmetros da banda de ondas de Bollinger para melhor se adaptar às mudanças dinâmicas do mercado.

  3. Reduzir a amplitude de perda de parada e adicionar outra forma de definir as condições de perda de parada para reduzir os erros.

Resumo

A ideia geral desta estratégia é clara, combinando o canal Bollinger ATR e médias móveis duplas para alcançar um julgamento abrangente dos sinais de negociação da estratégia, maximizando a redução do risco de erro de julgamento. As vantagens da estratégia são óbvias e podem ser aplicadas na negociação real; mas ainda há espaço para otimização em detalhes como configurações de parâmetros e condições de stop loss, que precisam ser melhoradas. Acredita-se que, com a otimização contínua, a lucratividade e a estabilidade desta estratégia continuarão a aumentar.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Aayonga

//@version=5
strategy("fib trend grid@Aa", overlay=true,initial_capital=2000, default_qty_type=strategy.fixed, default_qty_value=1)

//回测时间
useDateFilter=input.bool(true,title = "启用回测时间范围限定(backtest)", group = "回测范围(backtest)")
backtesStarDate=input(timestamp("1 Jan 2015"),title = "开始时间(Start)", group = "回测范围(backtest)")
backtestEndDate=input(timestamp("1 Jan 2040"),title = "结束时间(finish)",group = "回测范围(backtest)")
inTradeWindow=true


//入场位 entry
bolllen=input.int(defval=20,minval=1,title="布林长度,(boll length)",group = "入场位(entry)")
sma=ta.sma(close,bolllen)
avg=ta.atr(bolllen)
fib1=input(defval=1.236,title="Fib 1",group = "入场位(entry)")
fib2=input(defval=2.382,title="Fib 2",group = "入场位(entry)")
fib3=input(defval=3.618,title="fib 3",group = "入场位(entry)")
fib4=input(defval=4.236,title="Fib 4",group = "入场位(entry)")
r1=avg*fib1
r2=avg*fib2
r3=avg*fib3
r4=avg*fib4
top4=sma+r4
top3=sma+r3
top2=sma+r2
top1=sma+r1
bott1=sma-r1
bott2=sma-r2
bott3=sma-r3
bott4=sma-r4



//趋势 trend

t4=plot(top4,title="卖 (sell)4",color=color.rgb(244, 9, 9))
t3=plot(top3,title = "卖(sell) 3",color=color.rgb(211, 8, 8))
t2=plot(top2,title="卖 (sell)2",color=color.rgb(146, 13, 13))
t1=plot(top1,title="卖(sell) 1",color=color.rgb(100, 3, 3))

b1=plot(bott1,title="买(buy)1",color=color.rgb(4, 81, 40))
b2=plot(bott2,title="买(buy)2",color=color.rgb(15, 117, 46))
b3=plot(bott3,title = "买(buy)3",color =color.rgb(8, 176, 42) )
b4=plot(bott4,title="买(buy)4",color=color.rgb(15, 226, 103))
plot(sma,style=plot.style_cross,title="SMA",color=color.rgb(47, 16, 225))

//趋势
LengthF=input(defval = 25,title = "快线长度(fastlength)")
LengthS=input(defval=200,title = "慢线长度(slowlength)")
emaF=ta.ema(close,LengthF)
smaS=ta.sma(close,LengthS)
longTrend=emaF>smaS
longb=ta.crossover(emaF,smaS)
bgcolor(longb ? color.new(color.green,40):na,title = "多头强势(bull trend)")
shortTrend=smaS>emaF
shortb=ta.crossunder(emaF,smaS)
bgcolor(shortb ? color.new(#951313, 40):na,title = "空头强势(bear trend)")

//pinbar
bullPinBar = ((close > open) and ((open - low) > 0.6* (high - low))) or ((close < open) and ((close - low) > 0.9 * (high - low)))
//plotshape(bullPinBar  , text ="pinbar", textcolor=color.rgb(9, 168, 144),location=location.belowbar, color=color.rgb(29, 103, 67), size=size.tiny)
bearPinBar = ((close > open) and ((high - close) > 0.7 * (high - low))) or ((close < open) and ((high - open) > 0.7 * (high - low)))
//plotshape(bearPinBar  , text ="pinbar", textcolor=color.rgb(219, 12, 12),location=location.abovebar, color=color.rgb(146, 7, 7), size=size.tiny)

buy1=ta.crossunder(close,bott1) and longTrend and close>ta.ema(close,100)
buy2=ta.crossunder(close,bott2) and longTrend and close>ta.ema(close,80)
buy3=ta.crossunder(close,bott3) and longTrend and close>ta.ema(close,80)
buy4=ta.crossunder(close,bott4) and longTrend and close>ta.ema(close,80)
buyclose=bearPinBar or ta.crossunder(close,smaS)




if buy2 or buy3 or buy4 or buy1 and inTradeWindow
    strategy.order("多(buy)",strategy.long)

if buyclose  and inTradeWindow
    strategy.close("多(buy)")

sell1=ta.crossover(close,top1) and shortTrend and close<ta.ema(close,200)
sell2=ta.crossover(close,top2) and shortTrend and close<ta.ema(close,200)
sell3=ta.crossover(close,top3) and shortTrend and close<ta.ema(close,200)
sell4=ta.crossover(close,top4) and shortTrend and close<ta.ema(close,200)
sellclose=bullPinBar or ta.crossover(close,ta.sma(close,220))

if  sell1 or sell2 or sell3 or sell4 and inTradeWindow
    strategy.order("空(sell)",strategy.short)

if sellclose  and inTradeWindow
    strategy.close("空(sell)")
     

Mais.