Эта стратегия представляет собой количественный торговый подход, основанный на перекрестном взаимодействии между Detrended Price Oscillator (DPO) и его 4-периодической экспоненциальной скользящей средней (EMA).
Основная логика включает следующие ключевые шаги: Вычислить 24-периодическую простую скользящую среднюю (SMA) в качестве базовой 2. Переместить SMA вперед на (длина/2+1) периоды, чтобы получить смещенное значение SMA 3. Вычесть смещенный SMA от цены закрытия, чтобы получить значение DPO 4. Вычислить 4-периодный EMA DPO 5. генерировать сигнал покупки, когда DPO пересекает пределы своей 4-периодической EMA 6. генерировать сигнал продажи, когда DPO пересекает ниже 4-периодного EMA
Стратегия DPO-EMA Trend Crossover является структурно простой, но эффективной количественной торговой стратегией. Объединяя детеррентный осциллятор с скользящими средними, стратегия эффективно улавливает изменения тренда рынка. Хотя существуют присущие риски, стратегия сохраняет практическую ценность благодаря надлежащей оптимизации и мерам управления рисками. Для средне- и долгосрочных трейдеров эта стратегия представляет собой жизнеспособный торговый подход, который стоит рассмотреть.
/*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")