Estratégia de negociação quantitativa baseada em Bandas de Bollinger e MACD


Data de criação: 2023-12-20 15:55:18 última modificação: 2023-12-20 15:55:18
cópia: 0 Cliques: 943
1
focar em
1621
Seguidores

Estratégia de negociação quantitativa baseada em Bandas de Bollinger e MACD

Visão geral

A estratégia combina as faixas de Brin e o MACD para determinar oportunidades de superalimento do mercado e a MACD para determinar a reversão de tendência. A estratégia de negociação quantitativa de baixa compra e alta venda é denominada como a reversão de Brin MACD.

Princípio da estratégia

A estratégia primeiro calcula a faixa de Brin de 20 dias, incluindo o meio, o alto e o baixo. Quando o preço toca o baixo, o mercado é considerado superado.

Especificamente, um sinal de compra é gerado quando um toque de trajectória descendente e um MACD de diferença são acionados simultaneamente para a linha de sinal de ruptura; um sinal de parada é gerado quando o preço de fechamento sobe acima do ponto de parada.

Análise de vantagens estratégicas

A estratégia integra os sinais de reversão de tendência do MACD e os sinais de reversão de tendência de Brin, resultando em preços de compra mais baixos. Ao mesmo tempo, a estratégia inclui um método de parada que permite bloquear ganhos e evitar perdas.

O blogueiro também compartilhou algumas das vantagens:

  1. Combinação de supermercados de Brin e MACD para um melhor ponto de compra
  2. Utilizando o MACD para determinar pontos de reversão de tendências e reduzir a probabilidade de falsas rupturas
  3. A utilização de um método de suspensão de perdas permite controlar os riscos de forma eficaz

Análise de risco estratégico

A estratégia também apresenta alguns riscos, que se concentram nos seguintes aspectos:

  1. Probabilidade de ruptura da faixa de Brin, que pode fazer com que o julgamento de supermercado não seja válido
  2. A ruptura do MACD também pode ser uma ruptura falsa, ou seja, há uma probabilidade de erro.
  3. Posicionamento de parada não razoável, que pode ser muito relaxado ou rigoroso, resultando em defesa insuficiente ou parada de parada excessiva

Os riscos acima mencionados podem ser prevenidos com as seguintes medidas:

  1. Combinação de outros indicadores para verificar a eficácia do sinal de ruptura da faixa de Brin
  2. Aumentar os indicadores de quantidade de energia e filtros para evitar falsos MACDs
  3. Otimizar e testar diferentes soluções de parada de parâmetros

Direção de otimização da estratégia

A estratégia ainda tem espaço para melhorias adicionais, incluindo:

  1. Optimizar os parâmetros da faixa de Bryn para encontrar melhores soluções para o julgamento de supermercados
  2. Filtros como indicadores de energia aumentada para melhorar a eficácia dos julgamentos MACD
  3. Teste de stop loss em indicadores como o ATR para encontrar melhores parâmetros
  4. Aumentar o módulo de avaliação de tendências e evitar a negociação a jusante
  5. Modelos de julgamento treinados com métodos de aprendizagem de máquina para melhorar a eficácia geral da estratégia

Resumir

A estratégia integra o julgamento da zona de venda excessiva de Brin e o indicador de reversão de tendência MACD, permitindo uma escolha de ponto de compra relativamente favorável. Ao mesmo tempo, o controle de risco do método de parada de parada é configurado. Esta é uma estratégia de compra-venda de baixo preço que vale a pena aprender e otimizar.

Código-fonte da estratégia
/*backtest
start: 2023-11-19 00:00:00
end: 2023-12-19 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/
// © DojiEmoji

//@version=4
strategy("[KL] BOLL + MACD Strategy v2 (published)",overlay=true)

// BOLL bands {
BOLL_length = 20
BOLL_src = close
BOLL_mult = 2.0
BOLL_basis = sma(BOLL_src, BOLL_length)
BOLL_dev = BOLL_mult * stdev(BOLL_src, BOLL_length)
BOLL_upper = BOLL_basis + BOLL_dev
BOLL_lower = BOLL_basis - BOLL_dev
BOLL_offset = 0
plot(BOLL_basis, "Basis", color=#872323, offset = BOLL_offset)
BOLL_p1 = plot(BOLL_upper, "Upper", color=color.navy, offset = BOLL_offset, transp=50)
BOLL_p2 = plot(BOLL_lower, "Lower", color=color.navy, offset = BOLL_offset, transp=50)
fill(BOLL_p1, BOLL_p2, title = "Background", color=#198787, transp=85)
// }
// MACD signals {
MACD_fastLen = 12
MACD_slowLen = 26
MACD_Len = 9
MACD = ema(close, MACD_fastLen) - ema(close, MACD_slowLen)
aMACD = ema(MACD, MACD_Len)
MACD_delta = MACD - aMACD
// }
backtest_timeframe_start = input(defval = timestamp("01 Nov 2010 13:30 +0000"), title = "Backtest Start Time", type = input.time)
//backtest_timeframe_end = input(defval = timestamp("05 Mar 2021 19:30 +0000"), title = "Backtest End Time", type = input.time)
TARGET_PROFIT_MODE = input(false,title="Exit when Risk:Reward met")
REWARD_RATIO = input(3,title="Risk:[Reward] (i.e. 3) for exit")
// Trailing stop loss {
var entry_price = float(0)
ATR_multi_len = 26
ATR_multi = input(2, "ATR multiplier for stop loss")
ATR_buffer = atr(ATR_multi_len) * ATR_multi
risk_reward_buffer = (atr(ATR_multi_len) * ATR_multi) * REWARD_RATIO
take_profit_long = low > entry_price + risk_reward_buffer
take_profit_short = low < entry_price - risk_reward_buffer
var bar_count = 0 //number of bars since entry 
var trailing_SL_buffer = float(0)
var stop_loss_price = float(0)
stop_loss_price := max(stop_loss_price, close - trailing_SL_buffer)
// plot TSL line
trail_profit_line_color = color.green
if strategy.position_size == 0
    trail_profit_line_color := color.blue
    stop_loss_price := low
plot(stop_loss_price,color=trail_profit_line_color)
// } 

var touched_lower_bb = false

if true// and time <= backtest_timeframe_end
    if low <= BOLL_lower
        touched_lower_bb := true
    else if strategy.position_size > 0
        touched_lower_bb := false//reset state
    expected_rebound = MACD > MACD[1] and abs(MACD - aMACD) < abs(MACD[1] - aMACD[1])
    buy_condition = touched_lower_bb and MACD > aMACD or expected_rebound

    //ENTRY:
    if strategy.position_size == 0 and buy_condition
        entry_price := close
        trailing_SL_buffer := ATR_buffer
        stop_loss_price := close - ATR_buffer
        strategy.entry("Long",strategy.long, comment="buy")
        bar_count := 0
    else if strategy.position_size > 0
        bar_count := bar_count + 1

    //EXIT: 
    // Case (A) hits trailing stop
    if strategy.position_size > 0 and close <= stop_loss_price
        if close > entry_price
            strategy.close("Long", comment="take profit [trailing]")
            stop_loss_price := 0
        else if close <= entry_price and bar_count
            strategy.close("Long", comment="stop loss")
            stop_loss_price := 0
        bar_count := 0
    // Case (B) take targeted profit relative to risk 
    if strategy.position_size > 0 and TARGET_PROFIT_MODE
        if take_profit_long
            strategy.close("Long", comment="take profits [risk:reward]")
            stop_loss_price := 0
        bar_count := 0