Estratégia de negociação quantitativa baseada na decomposição do modo empírico

Autora:ChaoZhang, Data: 2023-12-22 14:41:34
Tags:

img

Resumo

Esta estratégia baseia-se no método Empirical Mode Decomposition (EMD) para decompor as séries de preços e extrair características de diferentes faixas de frequência, combinado com a média para gerar sinais de negociação.

Estratégia lógica

  1. Usar o método EMD para filtrar o preço e extrair flutuações de preços
  2. Calcule a média móvel das seqüências de picos e valas
  3. Gerenciar sinais de negociação quando a linha média exceder uma certa percentagem das linhas de pico e de limite
  4. Long ou short com base em sinais de negociação

Análise das vantagens

  1. O método EMD pode decompor eficazmente as séries de preços e extrair características úteis
  2. As linhas de pico e de declínio controlam a estratégia de negociação apenas quando a flutuação de preços é maior do que uma certa amplitude
  3. Combinado com a linha média, ele pode filtrar efetivamente falsas rupturas

Análise de riscos

  1. A selecção inadequada dos parâmetros do método EMD pode conduzir a um sobreajuste
  2. É necessário um longo ciclo para formar um sinal de transação e não pode adaptar-se à negociação de alta frequência
  3. Incapacidade de lidar com as condições de mercado com flutuações dramáticas dos preços

Orientações de otimização

  1. Otimizar os parâmetros do modelo EMD para melhorar a adaptabilidade ao mercado
  2. Combinar outros indicadores como sinais de stop loss e take profit
  3. Tente diferentes séries de preços como entrada de estratégia

Resumo

Esta estratégia usa o método de decomposição do modo empírico para extrair características da série de preços e gera sinais de negociação com base nas características extraídas, realizando uma estratégia de negociação estável de médio e longo prazo. A vantagem desta estratégia é que pode identificar efetivamente características periódicas nos preços e emitir ordens de negociação durante grandes flutuações. Mas também há certos riscos e é necessária uma otimização adicional para se adaptar a ambientes de mercado mais complexos.


/*backtest
start: 2022-12-15 00:00:00
end: 2023-12-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 12/04/2017
// 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="Empirical Mode Decomposition")
Length = input(20, minval=1)
Delta = input(0.5)
Fraction = input(0.1)
reverse = input(false, title="Trade reverse")
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)
xPeak =  iff (xBandpassFilter[1] > xBandpassFilter and xBandpassFilter[1] > xBandpassFilter[2], xBandpassFilter[1], nz(xPeak[1])) 
xValley =  iff (xBandpassFilter[1] < xBandpassFilter and xBandpassFilter[1] < xBandpassFilter[2], xBandpassFilter[1], nz(xValley[1])) 
xAvrPeak = sma(xPeak, 50)
xAvrValley = sma(xValley, 50)
nAvrPeak = Fraction * xAvrPeak
nAvrValley = Fraction * xAvrValley
pos = iff(xMean > nAvrPeak and xMean > nAvrValley, 1,
	     iff(xMean < nAvrPeak and xMean < nAvrValley, -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="Mean")
plot(nAvrPeak, color=blue, title="Peak")
plot(nAvrValley, color=blue, title="Valley")

Mais.