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

Автор:Чао Чжан, Дата: 2023-11-01 17:10:49
Тэги:

img

Обзор

Эта стратегия сочетает в себе Hull Moving Average и Kalman Filter для выявления и отслеживания ценовых тенденций, относящихся к стратегиям отслеживания трендов.

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

  • Стратегия использует 24-периодическую скользящую среднюю Hull Moving Average (hma) и 24-периодическую тройную скользящую среднюю Hull Moving Average (hma3) для построения торговых сигналов.

  • Когда HMA пересекает HMA3, генерируется сигнал покупки. Когда HMA пересекает HMA3, генерируется сигнал продажи.

  • Кальман фильтр отключен по умолчанию. Когда он включен, он сглаживает hma и hma3 для фильтрации чрезмерного шума и улучшения качества сигнала.

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

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

Преимущества

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

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

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

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

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

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

Риски

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

  • Отставание скользящих средних может лишить возможности быстрого переворота цен.

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

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

  • Более длительные периоды имеют медленную реакцию, в то время как более короткие периоды уязвимы для шума.

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

Улучшение

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

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

  • Установите стоп-лосс, чтобы ограничить потери и улучшить контроль рисков.

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

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

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

Заключение

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


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


Больше