La estrategia de ruptura del rango de estocásticos del MACD combina los indicadores MACD y estocásticos en una estrategia de negociación cuantitativa.
Al tomar posiciones, esta estrategia considera las señales tanto del MACD como del Estocástico para mejorar la calidad de las entradas.
La estrategia de ruptura del intervalo del estocástico del MACD se basa principalmente en los siguientes principios:
Específicamente, la estrategia utiliza la línea MACDDIFF cruzando la línea DEA para determinar señales de tendencia alcista o bajista.
Mientras tanto, los cruces entre la línea K y la línea D de Stochastics alrededor de las áreas de sobrecompra/sobreventa (default 30 y 70) también producen señales comerciales.
Cuando el MACD y el Estocástico dan señales alineadas, la estrategia tomará una posición.
Después de ingresar, los puntos de stop loss y take profit se establecen para controlar racionalmente la pérdida de una sola operación y bloquear las ganancias.
La estrategia de ruptura del rango del estocástico del MACD tiene las siguientes fortalezas:
La combinación de indicadores mejora la calidad de la señal
Utilizando tanto el MACD como el Estocástico se filtran algunas señales falsas y permite una mejor calidad de entrada.
Captura de movimientos de ruptura y negociación de tendencias
La estrategia se especializa en atrapar movimientos de fuga significativos después de un rango.
Mecanismo de stop loss/take profit optimizado para controlar eficazmente los riesgos
La lógica de stop loss/take profit incorporada limita razonablemente las pérdidas de operaciones individuales y bloquea las ganancias a tiempo.
A pesar de su diseño cuidadoso, la estrategia de ruptura del rango del estocástico del MACD tiene algunos riesgos inherentes:
Falta el tiempo de entrada perfecto
Las breakouts falsas son comunes antes de que ocurran breakouts válidos.
Fracaso de la fuga
Si bien se realizan los preparativos adecuados antes de las entradas, aún son posibles las fugas fallidas, lo que conduce a pérdidas.
Optimización incorrecta de parámetros
Los parámetros inadecuados socavan gravemente el rendimiento de la estrategia.
Para hacer frente a los riesgos anteriores, pueden adoptarse las siguientes optimizaciones:
Añadir otros indicadores a las señales de filtro
Intervención manual para garantizar una ruptura válida
Pruebas rigurosas de optimización de parámetros de varios conjuntos
Queda margen para una mayor optimización de la estrategia de ruptura del rango del estocástico del MACD:
Optimice los parámetros MACD para encontrar la mejor combinación
Optimizar los parámetros estocásticos para encontrar la mejor combinación
Incorporar otros indicadores como KDJ, BOLL para mejorar la calidad de entrada
Prueba diferentes períodos de retención, optimiza el stop loss/take profit
Diferencias de parámetros entre los activos de ensayo
Introducir algoritmos de aprendizaje automático para la optimización automática de parámetros
La estrategia de ruptura de rango del Estocástico del MACD capitaliza las rupturas de rango al ingresar basándose en señales alineadas tanto del MACD como del Estocástico. El mecanismo de stop loss / take profit controla aún más los riesgos.
/*backtest start: 2022-12-04 00:00:00 end: 2023-12-10 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="macd stoch strategy", shorttitle="benzo MACD stoch",overlay=true) // Getting inputs fast_length = input(title = "Fast Length", defval = 180) slow_length = input(title = "Slow Length", defval = 390) src = input(title = "Source", defval = close) signal_length = input.int(title = "Signal Smoothing", minval = 1, maxval = 500, defval = 135) sma_source = input.string(title = "Oscillator MA Type", defval = "EMA", options = ["SMA", "EMA"]) sma_signal = input.string(title = "Signal Line MA Type", defval = "EMA", options = ["SMA", "EMA"]) // Calculating fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length) slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length) macd = fast_ma - slow_ma signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length) hist = macd - signal // hline(0, "Zero Line", color = color.new(#787B86, 50)) // plot(hist, title = "Histogram", style = plot.style_columns, color = (hist >= 0 ? (hist[1] < hist ? #26A69A : #B2DFDB) : (hist[1] < hist ? #FFCDD2 : #FF5252))) // plot(macd, title = "MACD", color = #2962FF) // plot(signal, title = "Signal", color = #FF6D00) periodK = input.int(14, title="%K Length", minval=1) smoothK = input.int(1, title="%K Smoothing", minval=1) periodD = input.int(3, title="%D Smoothing", minval=1) k = ta.sma(ta.stoch(close, high, low, periodK), smoothK) d = ta.sma(k, periodD) // plot(k, title="%K", color=#2962FF) // plot(d, title="%D", color=#FF6D00) // h0 = hline(80, "Upper Band", color=#787B86) // hline(50, "Middle Band", color=color.new(#787B86, 50)) // h1 = hline(20, "Lower Band", color=#787B86) // fill(h0, h1, color=color.rgb(33, 150, 243, 90), title="Background") // Make inputs that set the take profit % (optional) longProfitPerc = input.float(3, title="Long Take Profit (%)", minval=0.0, step=0.1) * 0.01 shortProfitPerc = input.float(3, title="Short Take Profit (%)",minval=0.0, step=0.1) * 0.01 // Calculate trading conditions enterLong = macd>signal and ta.crossover(k,30) enterShort = macd<signal and ta.crossunder(k,70) // Figure out take profit price longExitPrice = strategy.position_avg_price * (1 + longProfitPerc) shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc) // Plot take profit values for confirmation plot(strategy.position_size > 0 ? longExitPrice : na, color=color.green, style=plot.style_circles, linewidth=3, title="Long Take Profit") plot(strategy.position_size < 0 ? shortExitPrice : na, color=color.red, style=plot.style_circles, linewidth=3, title="Short Take Profit") // Submit entry orders if enterLong strategy.entry("long", strategy.long) if enterShort strategy.entry("short", strategy.short) // STEP 3: // Submit exit orders based on take profit price if strategy.position_size > 0 strategy.exit("long TP", limit=longExitPrice) if strategy.position_size < 0 strategy.exit("short TP", limit=shortExitPrice)