Количественная стратегия торговли, основанная на эмпирическом режиме разложения

Автор:Чао Чжан, Дата: 2023-12-22 14:41:34
Тэги:

img

Обзор

Эта стратегия основана на методе эмпирического расщепления режима (EMD) для расщепления серий цен и извлечения характеристик из различных частотных диапазонов в сочетании со средним для генерации торговых сигналов.

Логика стратегии

  1. Используйте метод EMD для прохождения фильтрации цены и извлечения колебаний цен
  2. Вычислить скользящую среднюю последовательности пика и дна
  3. Создавать торговые сигналы, когда средняя линия превышает определенный процент линий пика и минимума
  4. Длинный или короткий на основе торговых сигналов

Анализ преимуществ

  1. Метод EMD может эффективно расщепить серии цен и извлечь полезные особенности
  2. Линии пика и порога контролируют стратегию торговли только тогда, когда колебания цены превышают определенную амплитуду
  3. В сочетании со средней линией, она может эффективно отфильтровать ложные прорывы

Анализ рисков

  1. Неправильный выбор параметров метода ЭМД может привести к переподключению
  2. Для формирования транзакционного сигнала требуется длительный цикл и он не может адаптироваться к высокочастотной торговле.
  3. Неспособность справиться с рыночными условиями с резкими колебаниями цен

Руководство по оптимизации

  1. Оптимизация параметров модели EMD для повышения адаптивности к рынку
  2. Комбинировать другие индикаторы как сигналы стоп-лосса и прибыли
  3. Попробуйте различные серии цен в качестве ввода стратегии

Резюме

Эта стратегия использует метод декомпозиции эмпирического режима для извлечения особенностей из серии цен и генерирует торговые сигналы на основе извлеченных особенностей, реализуя стабильную средне- и долгосрочную торговую стратегию. Преимущество этой стратегии заключается в том, что она может эффективно идентифицировать периодические особенности цен и выдавать торговые ордера во время больших колебаний.


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

Больше