Esta estrategia es un enfoque de negociación cuantitativo basado en el cruce entre el oscilador de precios deteriorado (DPO) y su promedio móvil exponencial de 4 períodos (EMA). El concepto central es capturar los cambios de tendencia del mercado comparando la relación entre el DPO y su EMA de 4 períodos para generar señales de compra y venta. La estrategia es particularmente efectiva en marcos de tiempo de 4 horas y más, especialmente cuando se utilizan velas Heikin Ashi.
La lógica central incluye los siguientes pasos clave: 1. Calcular la media móvil simple (SMA) de 24 períodos como línea de base 2. Mover la SMA hacia adelante por (longitud / 2 + 1) períodos para obtener el valor desplazado SMA 3. Sustraer la SMA desplazada del precio de cierre para obtener el valor DPO 4. Calcular la EMA de 4 períodos del DPO 5. Generar una señal de compra cuando el DPO cruce por encima de su EMA de 4 períodos 6. Generar una señal de venta cuando el DPO cruza por debajo de su EMA de 4 períodos
La estrategia de cruce de tendencias DPO-EMA es una estrategia de negociación cuantitativa estructuralmente simple pero efectiva. Al combinar el oscilador deteriorado con promedios móviles, la estrategia captura efectivamente los cambios de tendencia del mercado. Aunque existen riesgos inherentes, la estrategia mantiene un valor práctico a través de medidas adecuadas de optimización y gestión de riesgos.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-04 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("DPO 4,24 Strategy", shorttitle="DPO Strategy", overlay=true) // Define a fixed lookback period and EMA length length = 24 ema_length = 4 // Calculate the Simple Moving Average (SMA) of the closing prices sma = ta.sma(close, length) // Calculate the shifted SMA value shifted_sma = sma[length / 2 + 1] // Calculate the Detrended Price Oscillator (DPO) dpo = close - shifted_sma // Calculate the 4-period Exponential Moving Average (EMA) of the DPO dpo_ema = ta.ema(dpo, ema_length) // Generate buy and sell signals based on crossovers buy_signal = ta.crossover(dpo, dpo_ema) sell_signal = ta.crossunder(dpo, dpo_ema) // Overlay buy and sell signals on the candlestick chart plotshape(series=buy_signal, location=location.belowbar, color=color.green, style=shape.labelup, text="BUY") plotshape(series=sell_signal, location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL") // Strategy entry and exit conditions if (buy_signal) strategy.entry("Buy", strategy.long) if (sell_signal) strategy.close("Buy")