A Estratégia de Extração de Tendências de Filtragem de Bandpass é uma estratégia de rastreamento de tendências de ações baseada em filtros de bandpass.
A estratégia primeiro constrói uma média móvel exponencial dupla ajustando os parâmetros de comprimento e delta para controlar o comprimento da média móvel e suavidade. Em seguida, usa um conjunto de transformações matemáticas para extrair o componente de tendência da série de preços e armazená-lo na variável xBandpassFilter. Finalmente, calcula a média móvel simples do xBandpassFilter, xMean, como o indicador para entradas e saídas.
A sensibilidade das entradas e saídas pode ser controlada ajustando o nível do gatilho.
A redução de comprimento pode melhorar os problemas de atraso.
A estratégia é relativamente estável com bom desempenho em mercados de forte tendência.
/*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")