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


Дата создания: 2023-12-22 14:41:34 Последнее изменение: 2023-12-22 14:41:34
Копировать: 0 Количество просмотров: 871
1
Подписаться
1623
Подписчики

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

Обзор

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

Стратегический принцип

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

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

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

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

  1. Неправильно выбранные параметры метода EMD могут привести к пересчёту
  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")