Esta estrategia es una versión mejorada de la estrategia de negociación basada en el indicador MACD. Combina las características de seguimiento de tendencias del indicador MACD con las ideas de negociación de impulso, generando señales de negociación mediante el análisis de las diferencias entre los promedios móviles rápidos y lentos. Mientras tanto, la estrategia también introduce métodos de optimización como la confirmación de tendencia, confirmación de retraso de la señal, porcentaje fijo de stop-loss y take-profit, para mejorar la robustez y rentabilidad de la estrategia.
El núcleo de esta estrategia es el indicador MACD, que consiste en la diferencia entre la media móvil rápida (EMA) y la media móvil lenta (EMA). Cuando la EMA rápida cruza la EMA lenta, genera una señal de compra o venta. Específicamente, cuando la línea MACD atraviesa la línea de señal de abajo hacia arriba, genera una señal de compra; cuando la línea MACD cae por debajo de la línea de señal de arriba hacia abajo, genera una señal de venta.
Además de las señales de cruce MACD básicas, la estrategia también introduce un mecanismo de confirmación de tendencia. Se compara con el promedio móvil simple (SMA) para determinar si el mercado actual está en una tendencia alcista o bajista. Solo cuando una señal de compra aparezca en una tendencia alcista, o una señal de venta aparezca en una tendencia bajista, se ejecutará la operación comercial. Esto evita efectivamente las señales falsas generadas en un mercado oscilante.
Además, la estrategia extiende la ventana de tiempo de confirmación de la señal. Es decir, solo cuando el candelabro actual satisface las condiciones de compra o venta y el candelabro anterior también satisface las mismas condiciones, se ejecutará la transacción correspondiente. Esto mejora aún más la confiabilidad de las señales.
Finalmente, la estrategia establece niveles de stop-loss y take-profit porcentuales fijos. Una vez que se realiza una operación, los precios de stop-loss y take-profit se calcularán en función del precio de entrada, y la posición se cerrará automáticamente una vez que se alcancen estos precios. Esto ayuda a controlar el riesgo y el rendimiento de una sola transacción.
Esta estrategia es una estrategia de negociación mejorada basada en el indicador MACD. A través de la confirmación de tendencia, confirmación de retraso de la señal, stop-loss fijo y take-profit, y otros métodos, mejora la robustez y el potencial de ganancia de la estrategia. Sin embargo, también enfrenta riesgos en la optimización de parámetros, reconocimiento de tendencias, indicadores individuales, datos de backtesting y otros aspectos.
/*backtest start: 2023-05-08 00:00:00 end: 2024-05-13 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © sligetit //@version=5 strategy("Improved MACD_VXI Strategy", overlay=true) // Calculate MACD and Signal Line fastLength = input.int(13, title="Fast Length") slowLength = input.int(21, title="Slow Length") signalLength = input.int(8, title="Signal Length") fastMA = ta.ema(close, fastLength) slowMA = ta.ema(close, slowLength) macd = fastMA - slowMA signal = ta.sma(macd, signalLength) // Plot MACD and Signal Line plot(macd, color=color.red, linewidth=1) plot(signal, color=color.blue, linewidth=2) // Calculate Cross Signals with Trend Confirmation smaPeriod = input.int(50, title="SMA Period") sma = ta.sma(close, smaPeriod) trendUp = close > sma trendDown = close < sma crossOver = ta.crossover(signal, macd) crossUnder = ta.crossunder(signal, macd) buySignal = crossOver and trendUp sellSignal = crossUnder and trendDown // Execute Buy/Sell Operations if buySignal strategy.entry("Buy", strategy.long) if sellSignal strategy.entry("Sell", strategy.short) // Extend Signal Confirmation Time Window longSignal = crossOver[1] and trendUp[1] shortSignal = crossUnder[1] and trendDown[1] if longSignal strategy.entry("Buy", strategy.long) if shortSignal strategy.entry("Sell", strategy.short) // Set Fixed Percentage Stop Loss and Take Profit stopLossPercent = input.float(1, title="Stop Loss (%)") / 100 takeProfitPercent = input.float(2, title="Take Profit (%)") / 100 stopLossPrice = strategy.position_avg_price * (1 - stopLossPercent) takeProfitPrice = strategy.position_avg_price * (1 + takeProfitPercent) strategy.exit("Stop Loss/Profit", "Buy", stop=stopLossPrice, limit=takeProfitPrice) strategy.exit("Stop Loss/Profit", "Sell", stop=stopLossPrice, limit=takeProfitPrice)