Estrategia de negociación cuantitativa basada en la descomposición del modo empírico

El autor:¿ Qué pasa?, Fecha: 2023-12-22 14:41:34
Las etiquetas:

img

Resumen general

Esta estrategia se basa en el método Empirical Mode Decomposition (EMD) para descomponer las series de precios y extraer características de diferentes bandas de frecuencia, combinado con la media para generar señales de negociación.

Estrategia lógica

  1. Utilice el método EMD para filtrar el precio y extraer las fluctuaciones de precios
  2. Calcular la media móvil de las secuencias de picos y mínimos
  3. Generar señales de negociación cuando la línea media excede un cierto porcentaje de las líneas pico y mínimo
  4. Largo o corto basado en señales de negociación

Análisis de ventajas

  1. El método EMD puede descomponer eficazmente las series de precios y extraer características útiles
  2. Las líneas de pico y de umbral controlan la estrategia de negociación solo cuando la fluctuación de precios es mayor que una cierta amplitud
  3. Combinado con la línea media, puede filtrar eficazmente las fallas

Análisis de riesgos

  1. La selección incorrecta de los parámetros del método EMD puede dar lugar a un sobreajuste
  2. Se necesita un ciclo largo para formar una señal de transacción y no se puede adaptar a la negociación de alta frecuencia
  3. Incapacidad para hacer frente a las condiciones del mercado con fluctuaciones dramáticas de precios

Direcciones de optimización

  1. Optimizar los parámetros del modelo de EMD para mejorar la adaptabilidad al mercado
  2. Combinar otros indicadores como señales de stop loss y take profit
  3. Pruebe diferentes series de precios como entrada de estrategia

Resumen de las actividades

Esta estrategia utiliza el método de descomposición del modo empírico para extraer características de la serie de precios y genera señales comerciales basadas en las características extraídas, realizando una estrategia comercial estable a mediano y largo plazo. La ventaja de esta estrategia es que puede identificar eficazmente características periódicas en los precios y emitir órdenes comerciales durante grandes fluctuaciones.


/*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")

Más.