Эта стратегия сочетает в себе 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)