Адаптивная количественная торговая стратегия с экспоненциальной скользящей средней и нулевым запаздыванием


Дата создания: 2024-02-19 15:38:02 Последнее изменение: 2024-02-19 15:38:02
Копировать: 0 Количество просмотров: 841
1
Подписаться
1617
Подписчики

Адаптивная количественная торговая стратегия с экспоненциальной скользящей средней и нулевым запаздыванием

Обзор

Adaptive Zero Lag Exponential Moving Average Quantitative Trading Strategy - это количественная торговая стратегия, основанная на концепции Zero Lag Exponential Moving Average, разработанной Эхлером. Стратегия использует индикаторные скользящие средние как базовые показатели и добавляет адаптивный метод измерения мгновенной частоты, чтобы динамически оптимизировать параметры цикличности индикаторных скользящих средних.

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

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

В стратегии EMA с адаптивным нулевым отставанием мы используем методы измерения частоты в реальном времени, чтобы адаптироваться к оптимизации циклических параметров для нулевой отсталой скользящей средней. Измерение частоты в реальном времени делится на два вида: ассигнования и позитивная сигнала, которые позволяют измерить ведущие циклы изменения ценовой последовательности. Мы отслеживаем в реальном времени наилучшие циклы, вычисленные этими двумя методами измерений, и динамически устанавливаем циклические параметры для нулевой отсталой скользящей средней, чтобы они были более соответствующими текущей рыночной среде.

Когда быстрая линия (нулевая отсталая скользящая средняя) проходит медленную линию (обычная скользящая средняя), делая больше, когда она проходит, делая пустоту, когда она проходит, таким образом формируя торговый сигнал, похожий на пересечение скользящей средней.

Стратегические преимущества

Стратегия EMA с нулевой задержкой адаптации сочетает в себе фильтры с нулевой задержкой и методы оптимизации цикла адаптации, имеющие следующие преимущества:

  1. Устранение задержек, повышение чувствительности и надежности сигнала
  2. Приспосабливание к циклическим параметрам, адаптация к более широкой рыночной среде
  3. Меньше параметров стратегии, легче тестировать и оптимизировать
  4. Конфигурируемая фиксированная остановка убытков, легко контролируемая опасность

Стратегический риск

Стратегии EMA с нулевой отсталостью также имеют определенные риски, которые проявляются в следующем:

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

Чтобы контролировать эти риски, нам необходимо тщательно протестировать параметры в различных рыночных условиях, адекватным образом скорректировать стоп-стоп, а также проверить, насколько это возможно, моделируя реальную среду в обратном измерении.

Направление оптимизации стратегии

Стратегия EMA по адаптации к нулевой отсталости имеет широкий простор для оптимизации, основные направления включают:

  1. Попробуйте различные методы измерения адаптивных циклов, такие как адаптивные МА для частоты колебаний
  2. Добавление дополнительных фильтров, таких как объем сделок, пары скользящих средних и т. д.
  3. Оптимизация стратегий стоп-стоп, таких как trailing stop, Chandelier Exit и т.д.
  4. Динамическая корректировка размеров позиций с учетом управления рисками
  5. Подтверждение с несколькими временными циклами, улучшение качества сигнала

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

Подвести итог

Стратегия EMA с нулевой задержкой, успешно объединенная с фильтром с нулевой задержкой и идеей оптимизации динамического цикла, является количественной торговой стратегией с меньшим количеством параметров, легкой в использовании и оптимизации. Она обладает высокой чувствительностью к реакции, обладает высокой адаптивностью и хорошо работает на трендовых рынках.

Исходный код стратегии
/*backtest
start: 2024-01-19 00:00:00
end: 2024-02-18 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="Adaptive Zero Lag EMA v2", shorttitle="AZLEMA", overlay = true)

src = input(title="Source",  defval=close)
Period = input(title="Period",  defval = 20)
adaptive = input(title="Adaptive Method", options=["Off", "Cos IFM", "I-Q IFM", "Average"], defval="Off")
GainLimit = input(title="Gain Limit",  defval = 10)
Threshold = input(title="Threshold", type = float, defval=0.05, step=0.01)
fixedSL = input(title="SL Points", defval=70)
fixedTP = input(title="TP Points", defval=5)
risk = input(title='Risk', defval=0.01, step=0.01)

//##############################################################################
//I-Q IFM
//#############################################################################
range = input(title="Max Period",  defval=60, minval=8, maxval=100)

PI = 3.14159265359
imult = 0.635
qmult = 0.338
inphase = 0.0
quadrature = 0.0
re = 0.0
im = 0.0
deltaIQ = 0.0
instIQ = 0.0
lenIQ = 0.0
V = 0.0

P = src - src[7]
inphase := 1.25*(P[4] - imult*P[2]) + imult*nz(inphase[3])
quadrature := P[2] - qmult*P + qmult*nz(quadrature[2])
re := 0.2*(inphase*inphase[1] + quadrature*quadrature[1]) + 0.8*nz(re[1])
im := 0.2*(inphase*quadrature[1] - inphase[1]*quadrature) + 0.8*nz(im[1])
if (re!= 0.0)
    deltaIQ := atan(im/re)
for i=0 to range
    V := V + deltaIQ[i]
    if (V > 2*PI and instIQ == 0.0)
        instIQ := i
if (instIQ == 0.0)
    instIQ := nz(instIQ[1])
lenIQ := 0.25*instIQ + 0.75*nz(lenIQ[1])

//##############################################################################
//COSINE IFM
//#############################################################################
s2 = 0.0
s3 = 0.0
deltaC = 0.0
instC = 0.0
lenC = 0.0
v1 = 0.0
v2 = 0.0
v4 = 0.0

v1 := src - src[7]
s2 := 0.2*(v1[1] + v1)*(v1[1] + v1) + 0.8*nz(s2[1])
s3 := 0.2*(v1[1] - v1)*(v1[1] - v1) + 0.8*nz(s3[1])
if (s2 != 0)
    v2 := sqrt(s3/s2)
if (s3 != 0)
    deltaC := 2*atan(v2)
for i = 0 to range
    v4 := v4 + deltaC[i]
    if (v4 > 2*PI and instC == 0.0)
        instC := i - 1
if (instC == 0.0)
    instC := instC[1]
lenC := 0.25*instC + 0.75*nz(lenC[1])

if (adaptive == "Cos IFM")
    Period := round(lenC)
if (adaptive == "I-Q IFM")
    Period := round(lenIQ)
if (adaptive == "Average")
    Period := round((lenC + lenIQ)/2)

//##############################################################################
//ZERO LAG EXPONENTIAL MOVING AVERAGE
//##############################################################################
LeastError = 1000000.0
EC = 0.0
Gain = 0.0
EMA = 0.0
Error = 0.0
BestGain = 0.0

alpha =2/(Period + 1)
EMA := alpha*src + (1-alpha)*nz(EMA[1])

for i = -GainLimit to GainLimit
    Gain := i/10
    EC := alpha*(EMA + Gain*(src - nz(EC[1]))) + (1 - alpha)*nz(EC[1])
    Error := src - EC
    if(abs(Error)<LeastError)
        LeastError := abs(Error)
        BestGain := Gain

EC := alpha*(EMA + BestGain*(src - nz(EC[1]))) + (1-alpha)*nz(EC[1])

plot(EC, title="EC", color=orange, linewidth=2)
plot(EMA, title="EMA", color=red, linewidth=2)

buy = crossover(EC,EMA) and 100*LeastError/src > Threshold
sell = crossunder(EC,EMA) and 100*LeastError/src > Threshold
strategy.initial_capital = 50000
if (time>timestamp(2016, 1, 1 , 0, 0))
    //LONG
    balance = strategy.initial_capital + strategy.netprofit
    lots = ((risk * balance)/fixedSL)*1
    strategy.entry("BUY", strategy.long, qty=lots, oca_name="BUY",  when=buy)
    strategy.exit("B.Exit", "BUY", qty_percent = 100, loss=fixedSL, trail_offset=15, trail_points=fixedTP)
    //SHORT
    strategy.entry("SELL", strategy.short, qty=lots, oca_name="SELL", when=sell)
    strategy.exit("S.Exit", "SELL", qty_percent = 100, loss=fixedSL, trail_offset=15, trail_points=fixedTP)