Estrategia de trading cuantitativo basada en las bandas de Bollinger y MACD


Fecha de creación: 2023-12-20 15:55:18 Última modificación: 2023-12-20 15:55:18
Copiar: 0 Número de Visitas: 943
1
Seguir
1621
Seguidores

Estrategia de trading cuantitativo basada en las bandas de Bollinger y MACD

Descripción general

La estrategia combina las bandas de Brin y el MACD para determinar oportunidades de sobreventa en el mercado y el MACD para determinar la reversión de la tendencia, para lograr una estrategia de comercio cuantitativa de venta baja y alta. El nombre de la estrategia se define como la estrategia de reversión de Brin MACD.

Principio de estrategia

La estrategia primero calcula las bandas de Brin de los 20 días, incluyendo el medio, el alto y el bajo. Cuando el precio toca el bajo, se considera que el mercado está sobrevendido. En este momento, se combina con el indicador MACD para determinar si la tendencia se invierte.

En concreto, el Brin produce una señal de compra cuando el toque de la vía descendente y el MACD de la diferencia se activan simultáneamente hacia la línea de señal de ruptura; y una señal de parada cuando el precio de cierre sube por encima del punto de parada.

Análisis de las ventajas estratégicas

La estrategia integra las bandas de Brin que juzgan las zonas de venta excesiva y las señales de cambio de tendencia que juzgan el MACD, logrando un precio de compra más bajo. Al mismo tiempo, la estrategia incorpora un método de parada que puede bloquear los beneficios y evitar pérdidas.

En concreto, las ventajas son:

  1. Combinación de las zonas de venta excesiva de la franja de Brin y el indicador MACD para lograr un punto de venta preferente
  2. Utiliza el indicador MACD para determinar el punto de reversión de la tendencia y reducir la probabilidad de falsas rupturas
  3. La adopción de un método de detención de pérdidas que permite controlar el riesgo de manera efectiva

Análisis de riesgos estratégicos

La estrategia también tiene ciertos riesgos, que se centran en:

  1. La probabilidad de que la franja de Brin haya sido violada podría desvirtuar el juicio sobre las zonas de venta excesiva
  2. Una ruptura del MACD también puede ser una ruptura falsa, lo que significa que existe una probabilidad de error.
  3. Posiciones de parada de pérdidas no razonables, que pueden ser demasiado laxas o estrictas, lo que lleva a una falta de protección o a una parada de pérdidas demasiado aguda.

Las medidas de prevención contra estos riesgos son las siguientes:

  1. Combinado con otros indicadores para validar la eficacia de la señal de ruptura de la banda de Brin
  2. Aumentar los indicadores de energía y otros filtros para evitar falsas brechas en el MACD
  3. Optimización y prueba de diferentes soluciones de pérdida de parámetros

Dirección de optimización de la estrategia

La estrategia tiene espacio para ser optimizada aún más, principalmente en lo que respecta a:

  1. Optimización de los parámetros de las franjas de Bryn para encontrar mejores soluciones para determinar las zonas de venta masiva
  2. Aumentar los indicadores de energía y otros filtros para mejorar la eficacia de los MACD
  3. Pruebas de pérdidas en indicadores como el ATR en busca de mejores parámetros
  4. Aumentar el módulo de evaluación de tendencias para evitar el comercio a la baja
  5. Modelos de entrenamiento de juicio combinados con métodos de aprendizaje automático para mejorar la efectividad general de las estrategias

Resumir

La estrategia integra el juicio de las zonas de venta excesiva de Brin y el indicador de reversión de la tendencia MACD, lo que permite una opción de punto de compra relativamente ventajosa. Al mismo tiempo, se establece un control de riesgo de stop loss stop stop. Esta es una estrategia de compra-venta baja que vale la pena tomar como ejemplo y optimizar.

Código Fuente de la Estrategia
/*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