En la carga de los recursos... Cargando...

Estrategia de negociación basada en bandas de Bollinger y MACD

El autor:¿ Qué pasa?, Fecha: 2023-12-20 15:55:18
Las etiquetas:

img

Resumen general

Esta estrategia combina las bandas de Bollinger y el indicador MACD para identificar oportunidades de sobreventa e inversiones de tendencia para el comercio cuantitativo.

Estrategia lógica

La estrategia primero calcula las bandas de Bollinger de 20 días, incluidas la banda media, la banda superior y la banda inferior. Cuando el precio toca la banda inferior, considera que el mercado está sobrevendido. En este punto, combina con el indicador MACD para juzgar si la tendencia se está revirtiendo. Si el histograma MACD cruza positivamente por encima de la línea de señal, determina el final de esta ronda de declive, que corresponde a la señal de compra.

Específicamente, tocar la banda inferior de Bollinger y la línea de señal de cruce del histograma MACD activa positivamente la señal de compra simultáneamente.

Análisis de ventajas

La estrategia integra bandas de Bollinger para juzgar la zona de sobreventa y el MACD para determinar las señales de inversión de tendencia, realizando un precio de entrada relativamente más bajo.

En particular, las ventajas son las siguientes:

  1. Combinando la zona de sobreventa de Bollinger Bands y el indicador MACD para lograr mejores puntos de entrada
  2. Utilizando el indicador MACD para determinar los puntos de inversión de tendencia, reduciendo las probabilidades de ruptura falsa
  3. Adopción de métodos de stop loss/take profit para controlar eficazmente los riesgos

Análisis de riesgos

Todavía existen algunos riesgos, principalmente en los siguientes aspectos:

  1. Existe la probabilidad de que las bandas de Bollinger se rompan, lo que puede causar un fracaso en el juicio de la zona de sobreventa.
  2. El cruce del histograma MACD también podría ser falso uno con probabilidad de error de juicio
  3. La configuración de la posición de stop loss puede ser incorrecta, demasiado flexible o estricta, lo que conduce a una defensa insuficiente o a una stop loss prematura

Para protegernos de los riesgos mencionados anteriormente, podemos tomar las siguientes medidas:

  1. Combinar con otros indicadores para verificar la validez de las señales de ruptura de Bollinger Bands
  2. Añadir indicadores de impulso, etc., como filtros para evitar el cruce falso del MACD
  3. Optimizar y probar diferentes parámetros de stop loss

Direcciones de optimización

Todavía hay espacio para una mayor optimización, incluida principalmente:

  1. Optimizar los parámetros de las bandas de Bollinger para encontrar mejores esquemas de evaluación de sobreventa
  2. Añadir filtros de indicadores de impulso para mejorar la validez del juicio del MACD
  3. Métodos de prueba de pérdida de parada como ATR para encontrar mejores parámetros
  4. Añadir un módulo de evaluación de tendencias para evitar la negociación contra tendencia
  5. Combinar métodos de aprendizaje automático para entrenar modelos de juicio y mejorar el rendimiento general de la estrategia

Conclusión

La estrategia integra el juicio de la zona de sobreventa de las bandas de Bollinger y el indicador de inversión de tendencia del MACD para lograr puntos de entrada relativamente mejores. También establece métodos de stop loss / take profit para controlar los riesgos. Esta es una estrategia de venta alta de compra baja que vale la pena para referirse y optimizar. Combinada con más filtros de indicadores y métodos de aprendizaje automático, todavía hay espacio para mejorar aún más su rendimiento.


/*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

Más.