Стратегия извлечения трендов с помощью фильтрации полосы пропускания (Bandpass Filtering Trend Extraction Strategy) - это стратегия отслеживания трендов акций, основанная на фильтрах с помощью полосы пропускания.
Стратегия сначала создает двойную экспоненциальную скользящую среднюю, настраивая параметры Длины и Дельты для управления длиной скользящей средней и плавностью. Затем она использует набор математических преобразований для извлечения компонента тренда из серии цен и сохраняет его в переменной xBandpassFilter. Наконец, она вычисляет простую скользящую среднюю xBandpassFilter, xMean, как индикатор для входов и выходов.
Он длинный, когда xMean пересекает уровень Trigger, и короткий, когда пересекает ниже.
Сокращение длины может улучшить проблемы с задержкой.
Стратегия относительно стабильна с хорошей производительностью на сильно развивающихся рынках. Дальнейшая оптимизация на нескольких рыночных условиях может сделать ее более надежной и прибыльной.
/*backtest start: 2022-12-27 00:00:00 end: 2024-01-02 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version = 2 //////////////////////////////////////////////////////////// // Copyright by HPotter v1.0 14/12/2016 // The related article is copyrighted material from Stocks & Commodities Mar 2010 // // You can use in the xPrice any series: Open, High, Low, Close, HL2, HLC3, OHLC4 and ect... // You can change long to short in the Input Settings // Please, use it only for learning or paper trading. Do not for real trading. //////////////////////////////////////////////////////////// strategy(title="Extracting The Trend Strategy Backtest") Length = input(20, minval=1) Delta = input(0.5) Trigger = input(0) reverse = input(false, title="Trade reverse") hline(Trigger, color=blue, linestyle=line) xPrice = hl2 beta = cos(3.1415 * (360 / Length) / 180) gamma = 1 / cos(3.1415 * (720 * Delta / Length) / 180) alpha = gamma - sqrt(gamma * gamma - 1) xBandpassFilter = 0.5 * (1 - alpha) * (xPrice - xPrice[2]) + beta * (1 + alpha) * nz(xBandpassFilter[1]) - alpha * nz(xBandpassFilter[2]) xMean = sma(xBandpassFilter, 2 * Length) pos = iff(xMean > Trigger, 1, iff(xMean < Trigger, -1, nz(pos[1], 0))) possig = iff(reverse and pos == 1, -1, iff(reverse and pos == -1, 1, pos)) if (possig == 1) strategy.entry("Long", strategy.long) if (possig == -1) strategy.entry("Short", strategy.short) barcolor(possig == -1 ? red: possig == 1 ? green : blue ) plot(xMean, color=red, title="ExTrend")