Стратегия отслеживания тренда на основе скользящей средней скорости Холла и фильтра Калмана


Дата создания: 2023-11-01 17:10:49 Последнее изменение: 2023-11-01 17:10:49
Копировать: 0 Количество просмотров: 1160
1
Подписаться
1617
Подписчики

Стратегия отслеживания тренда на основе скользящей средней скорости Холла и фильтра Калмана

Обзор

Эта стратегия использует движущуюся среднюю величину Холла и волну Кармана для определения и отслеживания ценовых тенденций. Она относится к стратегии отслеживания тенденций. Она использует движущуюся среднюю величину Холла для построения торговых сигналов на двух различных периодах, а также использует волну Кармана для плавной обработки, чтобы повысить качество сигналов и стабильность стратегии.

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

  • Стратегия строит торговый сигнал с использованием 24-циклического Холла HMA и 24-циклического Тройного Холла HMA3.

  • Когда хма наносит хма3, то создается сигнал покупать; когда хма наносит хма3, то создается сигнал продавать.

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

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

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

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

  • Двойные системы лучше распознают длительные тенденции, чем одиночные.

  • Увеличенный вес, используемый для подсчета скользящих средних, придает больший вес недавним ценам и позволяет более чувствительно улавливать изменения цен.

  • Кальман фильтр эффективно фильтрует случайный шум в сигнале, уменьшает ложные сигналы и улучшает качество сигнала.

  • Параметры стратегии могут быть скорректированы, длина цикла и увеличение волны Калмана могут быть скорректированы в зависимости от рынка, чтобы адаптироваться к различным ситуациям.

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

  • Визуальный интерфейс интуитивно отображает сигналы и состояние тренда, что облегчает работу.

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

  • Двойная подвижная средняя стратегия легко дает ошибочные сигналы в точке переворота тренда и не позволяет вовремя уловить переход.

  • В этом случае движущаяся средняя задерживается и может упустить возможность быстрого изменения цены.

  • Не подходит для интенсивных колебаний, следует избегать использования во время всплеска.

  • Параметры фильтра Калмана влияют на эффективность стратегии, а слишком большие прибыли могут отфильтровывать эффективные сигналы.

  • Долгоциклическая настройка не реагирует агрессивно, а короткоциклическая настройка подвержена воздействию шума и требует корректировки параметров в зависимости от рынка.

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

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

  • Можно попробовать использовать адаптивные параметры динамической оптимизации скользящих средних, корректируя длину цикла в зависимости от колебаний.

  • Используйте волатильные показатели для оценки состояния рынка, избегайте торговли в волатильных рынках и торгуйте только в тех случаях, когда тенденция ясна.

  • Можно установить стратегию остановки убытков, чтобы предотвратить увеличение убытков и повысить способность контролировать риск.

  • Оптимизация параметров фильтра Калмана, баланс чувствительности отслеживания и уровня фильтрации шума.

  • В сочетании с другими показателями, подтверждающими эффективность сигнала, такими как количественный показатель, Брин-пояса для определения устойчивости тренда и т. д.

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

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

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

Исходный код стратегии
/*backtest
start: 2022-10-25 00:00:00
end: 2023-10-31 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Hull Trend with Kahlman Strategy Backtest", shorttitle="HMA-Kahlman Trend Strat", overlay=true)

src       = input(hl2,   "Price Data")
length    = input(24,    "Lookback")
showcross = input(true,  "Show cross over/under")
gain      = input(10000, "Gain")
k         = input(true,  "Use Kahlman")

hma(_src, _length) =>
    wma((2 * wma(_src, _length / 2)) - wma(_src, _length), round(sqrt(_length)))
    
hma3(_src, _length) =>
    p = length/2
    wma(wma(close,p/3)*3 - wma(close,p/2) - wma(close,p),p)

kahlman(x, g) =>
    kf = 0.0
    dk = x - nz(kf[1], x)
    smooth = nz(kf[1],x)+dk*sqrt((g/10000)*2)
    velo = 0.0
    velo := nz(velo[1],0) + ((g/10000)*dk)
    kf := smooth+velo
  
a = k ? kahlman(hma(src, length), gain) : hma(src, length)
b = k ? kahlman(hma3(src, length), gain) : hma3(src, length)
c = b > a ? color.lime : color.red
crossdn = a > b and a[1] < b[1]
crossup = b > a and b[1] < a[1]

p1 = plot(a,color=c,linewidth=1,transp=75)
p2 = plot(b,color=c,linewidth=1,transp=75)
fill(p1,p2,color=c,transp=55)
plotshape(showcross and crossdn ? a : na, location=location.absolute, style=shape.labeldown, color=color.red, size=size.tiny, text="S", textcolor=color.white, transp=0, offset=-1)
plotshape(showcross and crossup ? a : na, location=location.absolute, style=shape.labelup, color=color.green, size=size.tiny, text="B", textcolor=color.white, transp=0, offset=-1)

longCondition = crossup
if (longCondition)
    strategy.entry("LE", strategy.long)

shortCondition = crossdn
if (shortCondition)
    strategy.entry("SE", strategy.short)