Esta estratégia é baseada no conceito de Bandas de Bollinger, estabelecendo trilhos superiores e inferiores para o canal de preços e usá-los para julgamento de tendências e geração de sinais comerciais. Especificamente, calcula o desvio absoluto médio do preço como a largura de banda do canal. O trilho médio do canal é a média móvel simples do preço, e os trilhos superiores e inferiores são o trilho médio mais ou menos 1 ou 2 vezes a largura de banda do canal.
Os principais pontos desta estratégia incluem:
Calcule o trilho médio do preço, que é a média móvel simples do preço.
Calcular a média móvel simples do desvio absoluto do preço como largura de banda do canal.
Determine os trilhos superior e inferior de acordo com o trilho do meio e largura de banda. O trilho superior é o trilho do meio mais 1 ou 2 vezes a largura de banda. O trilho inferior é o trilho do meio menos 1 ou 2 vezes a largura de banda.
Calcule o indicador de julgamento de tendência para longo e curto. Quando o preço está acima do trilho superior 2, é longo. Quando o preço está abaixo do trilho inferior 2, é curto.
Gerar sinais de negociação. Quando o preço cruza acima da linha superior 2, vá longo. Quando cruza abaixo da linha inferior 2, vá curto.
Defina a linha de stop loss. A linha de stop loss para ordens longas é o trilho inferior 1, e para ordens curtas é o trilho superior 1.
Calcular o tamanho da posição de acordo com os requisitos de gestão de capital.
A estratégia integra as idéias de usar médias móveis para julgar tendências, Bandas de Bollinger para julgar sobrecompras e sobrevendas, e breakouts para fazer reversões.
As principais vantagens desta estratégia são:
O sistema de trilhos duplos pode avaliar melhor a força da tendência.
As bandas de Bollinger possuem uma forte função de regressão para evitar efetivamente falhas.
A diferença entre os binários combinada com a regressão das bandas de Bollinger forma sinais de negociação relativamente estáveis.
Existe uma lógica de stop loss/exit clara para controlar os riscos.
O dimensionamento das posições segue os requisitos de gestão de capital, evitando a sobreleverage.
A ideia de estratégia é clara e fácil de entender e otimizar.
As configurações flexíveis dos parâmetros tornam-no adaptável a diferentes mercados.
A estratégia apresenta também alguns riscos:
Os parâmetros de Bollinger Bands incorretos podem causar efeitos de abandono, não conseguindo rastrear efetivamente os preços.
A diferença entre binários não pode evitar completamente julgamentos errôneos da tendência.
Pode gerar mais sinais inválidos nos mercados de gama.
As perdas podem ocorrer em situações de fuga falsa.
Há algum atraso de tempo, possivelmente faltando pontos de viragem do ciclo.
O rácio risco/recompensa é limitado pelo ponto de stop loss, incapaz de perseguir tendências ilimitadamente.
Medidas de gestão de riscos correspondentes:
Otimizar os parâmetros para tornar as Bandas de Bollinger adaptáveis a diferentes ciclos.
Combine outros indicadores de confirmação para evitar erros de julgamento.
Reduzir o tamanho da posição para controlar a perda única.
Otimizar os pontos de stop loss para garantir a relação risco/recompensa.
Reduzir adequadamente o ciclo para reduzir o atraso.
O controlo dos riscos deve ser robusto, sem perseguições ilimitadas.
A estratégia pode ser otimizada nas seguintes direcções:
Otimizar os parâmetros das bandas de Bollinger para um melhor acompanhamento dos preços.
Tente diferentes médias móveis como EMA, DWMA, etc.
Adicionar filtragem de tendências para evitar a negociação em mercados de intervalo.
Adicione métodos de saída agressivos para capturar mais lucros da tendência.
Introduzir vários prazos para a combinação, adequados a diferentes condições de mercado.
Adicione condições adicionais como aumentos de volume para evitar falhas.
Considere Bandas de Bollinger invertidas, vendendo banda superior, comprando banda inferior.
Realizar a otimização dos parâmetros para obter as melhores combinações de parâmetros.
A ideia geral desta estratégia é clara e estável. Há também espaço para melhoria através de otimização de parâmetros, aprimoramento de lógica, gestão de risco, etc. para refiná-lo ainda mais em uma estratégia de negociação quantitativa muito prática.
/*backtest start: 2022-11-09 00:00:00 end: 2023-11-15 00:00:00 period: 1d basePeriod: 1h 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/ // © noro //@version=4 strategy(title = "Noro's Bands Strategy", shorttitle = "Bands", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0, commission_value = 0.1) //Sattings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %") len = input(20, defval = 20, minval = 1, maxval = 1000, title = "Length") src = input(ohlc4, title = "Source") showbb = input(true, title = "Show Bands") showof = input(true, title = "Show Offset") showbg = input(false, title = "Show Background") 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") //PriceChannel lasthigh = highest(src, len) lastlow = lowest(src, len) center = (lasthigh + lastlow) / 2 //Distance dist = abs(src - center) distsma = sma(dist, len) hd = center + distsma ld = center - distsma hd2 = center + distsma * 2 ld2 = center - distsma * 2 //Trend trend = 0 trend := high > hd2 ? 1 : low < ld2 ? -1 : trend[1] bgcol = showbg == false ? na : trend == 1 ? color.lime : color.red bgcolor(bgcol, transp = 70) //Lines colo = showbb == false ? na : color.black offset = showof ? 1 : 0 plot(hd2, color = colo, linewidth = 1, transp = 0, offset = offset, title = "High band 2") plot(hd, color = colo, linewidth = 1, transp = 0, offset = offset, title = "High band 1") plot(center, color = colo, linewidth = 1, transp = 0, offset = offset, title = "center") plot(ld, color = colo, linewidth = 1, transp = 0, offset = offset, title = "Low band 1") plot(ld2, color = colo, linewidth = 1, transp = 0, offset = offset, title = "Low band 2") //Trading size = strategy.position_size needstop = needlong == false or needshort == false truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59) lot = 0.0 lot := size != size[1] ? strategy.equity / close * lotsize / 100 : lot[1] if distsma > 0 strategy.entry("Long", strategy.long, lot, stop = hd2, when = truetime and needlong) strategy.entry("Short", strategy.short, lot, stop = ld2, when = truetime and needshort) sl = size > 0 ? ld2 : size < 0 ? hd2 : na if size > 0 and needstop strategy.exit("Stop Long", "Long", stop = sl) if size < 0 and needstop strategy.exit("Stop Short", "Short", stop = sl) if time > timestamp(toyear, tomonth, today, 23, 59) strategy.close_all() strategy.cancel("Long") strategy.cancel("Short")