Estratégia de criptografia de bandas de Bollinger de vários prazos

Autora:ChaoZhang, Data: 2024-02-27 14:13:39
Tags:

img

Resumo

Esta estratégia aplica o indicador Bollinger Bands em intervalos de tempo de 1 minuto, 3 minutos, 5 minutos e 15 minutos para analisar os movimentos de preços das criptomoedas, a fim de identificar oportunidades de compra e venda. Ele usa os preços de 5 minutos do Bitcoin como referência para o sentimento geral do mercado de criptomoedas. Quando o preço do Bitcoin ultrapassa a faixa superior, o mercado é considerado otimista. Quando o preço ultrapassa a faixa inferior, o mercado é considerado de baixa. A estratégia procura quebras de faixa superior ou inferior em diferentes criptos e intervalos de tempo. Esses padrões de ruptura geralmente significam mudanças no sentimento e tendências do mercado, fornecendo assim sinais de entrada e saída.

Estratégia lógica

A estratégia calcula as Bandas de Bollinger simultaneamente nos prazos de 1 minuto, 3 minutos, 5 minutos e 15 minutos. As Bandas de Bollinger consistem em uma média móvel de n dias (default 20 dias) e um número de desvios padrão (default 1.5x) acima e abaixo dela. A média móvel representa o preço médio da criptomoeda durante um período de tempo e o desvio padrão mede a volatilidade. Quando os preços se aproximam ou quebram acima da faixa superior, ele indica que o mercado está excedido e a volatilidade está se expandindo, sinalizando uma potencial reversão para baixo.

Aproveitando esse recurso das Bandas de Bollinger, a estratégia julga os mais recentes desenvolvimentos do mercado em diferentes horizontes de tempo - 1 minuto, 3 minutos, 5 minutos e 15 minutos. Quando há uma quebra de banda superior ou inferior nos intervalos de tempo de 3 minutos ou 5 minutos, além de sinais de confirmação nos intervalos de tempo de 1 minuto e 15 minutos, a estratégia determina se um último sinal de compra ou venda é acionado. Além disso, a estratégia também se refere aos preços de 5 minutos do Bitcoin para avaliar a tendência geral do mercado e o sentimento (bias alcista / baixa) em todo o mercado de criptomoedas. Com base nesses fatores, a estratégia decide se vai longo ou curto.

Após entrar em negociações, a estratégia também define as condições de take profit e stop loss. Se o preço de entrada subir ou cair 25%, o take profit será ativado. Se o preço se mover mais de 25% contra a direção de entrada, o stop loss será ativado.

Vantagens

  1. A estratégia inclui visões de mercado a curto e médio prazo - 1 minuto e 5 minutos para as últimas atualizações, 15 minutos para a tendência a médio prazo, evitando ser enganado por flutuações temporárias do mercado.

  2. A estratégia monitora as rupturas da banda média, banda superior e banda inferior, minimizando oportunidades perdidas.

  3. O Bitcoin serve como referência e barómetro para as condições e sentimentos globais do mercado, aumentando a precisão das decisões.

  4. Os mecanismos de captação de lucros e de stop loss controlam eficazmente os riscos.

Riscos

  1. As rupturas de Bandas de Bollinger têm alguns atributos atrasados e podem perder o melhor momento de entrada.

  2. A estratégia é vulnerável a riscos sistémicos em todo o mercado como as senhas eventos cisne negro.

  3. Apesar da tomada de lucro e do stop loss, as perdas ainda podem exceder a margem de stop loss em eventos extremos.

  4. Configurações de parâmetros inadequadas como período de tempo, multiplicador de desvio padrão podem levar a má qualidade do sinal.

Soluções correspondentes:

  1. Incorporar mais indicadores para determinar o melhor momento de entrada.

  2. Melhorar a avaliação dos riscos sistémicos a nível de mercado.

  3. Reduzir o tamanho da posição e a margem de stop loss para cada negociação.

  4. Otimizar as configurações dos parâmetros através de backtesting.

Oportunidades de melhoria

  1. Adicione mais prazos como Bandas de Bollinger de 30 ou 60 minutos.

  2. Selecionar parâmetros de Bollinger Bands mais adequados às características de cada criptomoeda.

  3. Incorporar o volume de negociação para verificação dos resultados, uma vez que os volumes de negociação validam a fiabilidade dos movimentos de preços.

  4. Combine outros indicadores como Stoch RSI, MACD para melhorar a precisão da decisão.

  5. Comparar os movimentos de preços e correlações entre criptos e escolher aqueles com mais espaço para manobra.

  6. Otimizar os mecanismos de obtenção de lucros e de suspensão de perdas através da análise estatística do desempenho histórico para determinar configurações ideais.

Conclusão

Esta é uma estratégia de negociação de criptomoedas com Bollinger Bands de vários prazos. Ela se concentra nos desenvolvimentos de preços em horizontes de curto e médio prazo, aproveitando as Bollinger Bands para avaliar o status MULTI bullish/bearish do mercado. Enquanto isso, usa os níveis de preço do Bitcoin como referência e referência para ajudar a determinar a tendência geral no mercado de criptomoedas mais amplo. Com sua versatilidade em incorporar vários prazos, além de robustos mecanismos de captação de lucro e stop loss, essa estratégia pode capitalizar efetivamente oportunidades e controlar riscos.


/*backtest
start: 2024-01-27 00:00:00
end: 2024-02-26 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(shorttitle="Crypto BB", title="Multi-Interval Bollinger Band Crypto Strategy", overlay=true)
length = input.int(20, minval=1)
maType = input.string("SMA", "Basis MA Type", options = ["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
src = input(close, title="Source")
mult = input.float(1.5, minval=0.001, maxval=50, title="StdDev")

interval1m = request.security(syminfo.tickerid, '1', src)
interval3m = request.security(syminfo.tickerid, '3', src)
interval5m = request.security(syminfo.tickerid, '5', src)
interval15m = request.security(syminfo.tickerid, '5', src)
btcinterval5m = request.security("BTC_USDT:swap", "5", src)
bitcoinSignal = 'flat'

var entryPrice = 0.000

ma(source, length, _type) =>
    switch _type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

bitcoinBasis = ma(btcinterval5m, length, maType)
bitcoinDev = ta.stdev(btcinterval5m, length)
bitcoinUpper = bitcoinBasis + bitcoinDev
bitcoinLower = bitcoinBasis - bitcoinDev

basis1m = ma(interval1m, length, maType)
basis3m = ma(interval3m, length, maType)
basis5m = ma(interval5m, length, maType)
basis15m = ma(interval5m, length, maType)
dev1m = mult * ta.stdev(interval1m, length)
dev3m = mult * ta.stdev(interval3m, length)
dev5m = mult * ta.stdev(interval5m, length)
upper1m = basis1m + dev1m
lower1m = basis1m - dev1m
upper3m = basis3m + dev3m
lower3m = basis3m - dev3m
upper5m = basis5m + dev5m
lower5m = basis5m - dev5m
offset = input.int(0, "Offset", minval = -500, maxval = 500)
plot(basis3m, "Basis 3 minute", color=#2962FF, offset = offset)
p3upper = plot(upper3m, "Upper", color=#2962FF, offset = offset)
p3lower = plot(lower3m, "Lower", color=#2962FF, offset = offset)

//Exit protocols
if strategy.opentrades != 0 and strategy.opentrades.entry_id(0) == 'Buy'
    entryPrice := strategy.opentrades.entry_price(0)
    if ((interval1m - entryPrice)/entryPrice) * 30 > .25
        strategy.close('Buy', comment='Take Profit on Buy')
    if ((interval1m - entryPrice)/entryPrice) * 30 < -.25
        strategy.close('Buy', comment='Stop Loss on Buy')

if strategy.opentrades != 0 and strategy.opentrades.entry_id(0) == 'Sell'
    entryPrice := strategy.opentrades.entry_price(0)
    if ((entryPrice - interval1m)/entryPrice) * 30 > .25
        strategy.close('Sell', comment='Take Profit on Sell')
    if ((entryPrice - interval1m)/entryPrice) * 30 < -.25
        strategy.close('Sell', comment='Stop Loss on Sell')

//Bitcoin Analysis
if (btcinterval5m < bitcoinUpper and btcinterval5m[1] > bitcoinUpper[1] and btcinterval5m[2] < bitcoinUpper[2] and btcinterval5m[3] < bitcoinUpper[3])
    bitcoinSignal := 'Bear'
if (btcinterval5m > bitcoinUpper and btcinterval5m[1] < bitcoinUpper[1] and btcinterval5m[2] > bitcoinUpper[2] and btcinterval5m[3] > bitcoinUpper[3])
    bitcoinSignal := 'Bull'

//Short protocols
if (interval3m < basis3m and interval3m[1] > basis3m[1] and interval3m[2] < basis3m[2] and interval3m[3] < basis3m[3]) or 
 (interval5m < basis5m and interval5m[1] > basis5m[1] and interval5m[2] < basis5m[2] and interval5m[3] < basis5m[3]) 
  and strategy.opentrades.entry_id(0) != 'Sell'
   and src < basis1m and src < basis15m
    if strategy.opentrades.entry_id(0) == 'Buy'
        strategy.close('Buy', 'Basis Band Bearish Reversal')
    //strategy.order('Sell', strategy.short, comment = 'Basis band fractal rejection', stop = (upper1m + basis1m)/2)

if (interval3m < upper3m and interval3m[1] > upper3m[1] and interval3m[2] < upper3m[2] and interval3m[3] < upper3m[3]) or 
 (interval5m < upper5m and interval5m[1] > upper5m[1] and interval5m[2] < upper5m[2] and interval5m[3] < upper5m[3]) 
  and strategy.opentrades.entry_id(0) != 'Sell' and bitcoinSignal == 'Bear' and src < upper1m  and src < basis15m
    if strategy.opentrades.entry_id(0) == 'Buy'
        strategy.close('Buy', 'Bearish Trend Reversal')
    strategy.order('Sell', strategy.short, comment = 'Upper band fractal rejection', stop = (upper1m + basis1m)/2)

if (interval3m > basis3m and interval3m[1] < basis3m[1] and interval3m[2] > basis3m[2] and interval3m[3] > basis3m[3]) or 
 (interval5m > basis5m and interval5m[1] < basis5m[1] and interval5m[2] > basis5m[2] and interval5m[3] > basis5m[3]) and strategy.opentrades.entry_id(0) != 'Buy' 
  and src > basis1m  and src > basis15m
    if strategy.opentrades.entry_id(0) == 'Sell'
        strategy.close('Sell', 'Basis Band Bullish Reversal')
    //strategy.order('Buy', strategy.long, comment = 'Basis band fractal rejection', stop = (lower1m + basis1m)/2)

if (interval3m > lower3m and interval3m[1] < lower3m[1] and interval3m[2] > lower3m[2] and interval3m[3] > lower3m[3]) or 
 (interval5m > lower5m and interval5m[1] < lower5m[1] and interval5m[2] > lower5m[2] and interval5m[3] > basis5m[3]) and strategy.opentrades.entry_id(0) != 'Buy' 
  and src > lower1m  and src > basis15m and bitcoinSignal == 'Bull' 
    if strategy.opentrades.entry_id(0) == 'Sell'
        strategy.close('Sell', 'Bullish Trend Reversal')
    strategy.order('Buy', strategy.long, comment = 'Lower band fractal rejection', stop = (lower1m + basis1m)/2)

Mais.