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.
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.
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.
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.
Configurar condições de stop loss: sair das posições direcionais correntes quando aparecer uma barra de reversão grande.
Usar médias móveis duplas para determinar tendências de mega-nível para evitar a negociação contra-tendência.
A grelha de canais Bollinger ATR define preços de abertura múltiplos para aumentar a probabilidade de abertura de posições com sucesso.
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.
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.
Ajustar adequadamente os parâmetros da média móvel ou adicionar outros indicadores para julgamento auxiliar.
Quando a volatilidade é muito grande, os preços podem atravessar a área da grade diretamente, incapazes de abrir posições.
As condições de stop loss são mais subjetivas e os critérios de reconhecimento podem diferir entre os traders.
Adicionar o indicador APO para análise auxiliar dos julgamentos da tendência da média móvel dupla.
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.
Reduzir a amplitude de perda de parada e adicionar outra forma de definir as condições de perda de parada para reduzir os erros.
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)")