Эта стратегия использует адаптивную скользящую среднюю (KAMA) Кауфмана для определения направления тренда для улавливания средне- и долгосрочных тенденций. Она длинна, когда линия KAMA движется вверх, и коротка, когда линия KAMA движется вниз. Стратегия сочетает в себе возможность отслеживания тренда скользящих средних и динамическую функцию корректировки KAMA для улучшения качества торговых сигналов.
Основным показателем этой стратегии является адаптивная скользящая средняя Кауфмана (KAMA). KAMA динамически корректирует свой весовой фактор на основе величины волатильности рынка, тем самым улучшая чувствительность кривой. В частности, когда волатильность рынка увеличивается, кривая KAMA становится более плавной; когда волатильность рынка снижается, кривая KAMA становится более чувствительной. Это фильтрует некоторое количество шума, одновременно своевременно фиксируя новые изменения тренда.
Стратегия сначала рассчитывает стоимость KAMA. Затем она определяет длинное / короткое состояние линии KAMA: сигнал покупки генерируется, когда цена закрытия пересекает линию KAMA, и сигнал продажи генерируется, когда цена закрытия пересекает линию KAMA. Позиции открываются на основе этих торговых сигналов.
Наибольшее преимущество этой стратегии заключается в использовании индикатора KAMA для определения тренда. Сам индикатор KAMA имеет очень сильную способность отслеживания тренда. Он может динамически регулировать параметры для адаптации к рыночным условиям, тем самым создавая более надежные торговые сигналы по сравнению с простыми скользящими средними и экспоненциальными скользящими средними.
Кроме того, для определения направления тренда стратегия использует только длинное/короткое состояние KAMA. Дополнительные фильтры отсутствуют, что упрощает логику стратегии и уменьшает количество параметров, снижая риск перенапряжения и улучшая стабильность и адаптивность на рынках.
Основной риск этой стратегии заключается в том, что KAMA является отстающим индикатором, поэтому к моменту создания торговых сигналов рыночная тенденция может уже измениться, что приводит к рискам остановки потерь.
Для смягчения рисков для подтверждения торговых сигналов могут быть объединены другие индикаторы, такие как индикаторы волатильности, индикаторы объема и т. д. Параметры также могут быть скорректированы, чтобы сделать кривую KAMA более плавной.
По-прежнему существует большое пространство для оптимизации этой стратегии, главным образом в следующих аспектах:
Для улучшения качества сигналов комбинируют другие индикаторы для фильтрации сигналов, такие как MACD, осцилляторы и т.д.
Добавьте стратегии остановки потери, такие как перемещение остановки потери или остановки, основанные на кривой собственности, чтобы контролировать однократную потерю.
Оптимизируйте параметры, чтобы сделать KAMA более эффективным в обнаружении тенденций.
Добавьте многочасовой анализ для определения основного направления тренда с использованием более длительных временных рамок.
Использовать методы машинного обучения для автоматической оптимизации параметров для адаптации между инструментами.
Общая логика этой стратегии ясна, используя индикатор KAMA для определения направления тренда. У нее есть такие преимущества, как сильная способность отслеживания тренда, простая логика и меньше параметров. Но у нее также есть риск отставания в выявлении обратных тенденций. Стратегию можно улучшить во многих отношениях, чтобы сделать ее более эффективной и адаптивной.
/*backtest start: 2022-12-06 00:00:00 end: 2023-12-12 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2019 //@version=3 strategy(title = "Noro's KAMA Strategy", shorttitle="KAMA str", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot") length = input(3, minval = 1) fast = input(2, minval = 1) slow = input(30, minval = 1) src = input(title = "Source", defval = close) type = input(defval = "Trend", options = ["Trend", "Crossing"], title = "Type") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //KAMA volatility = sum(abs(src-src[1]), length) change = abs(src[1]-src[length]) er = iff(volatility != 0, change/volatility, 0) fastSC = 2/(fast+1) slowSC = 2/(slow+1) sc = pow((er*(fastSC-slowSC))+slowSC, 2) bid = hl2 kama = 0.0 kama := nz(kama[1])+(sc*(bid-nz(kama[1]))) plot(kama, color = black, title = "KAMA", trackprice = false, style = line, linewidth = 3) //Signals up = false dn = false up := (type == "Crossing" and kama > kama[1]) or (type == "Trend" and close > kama) dn := (type == "Crossing" and kama < kama[1]) or (type == "Trend" and close < kama) //Trading size = strategy.position_size lot = 0.0 lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1] if up strategy.entry("L", strategy.long, needlong ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if dn strategy.entry("S", strategy.short, needshort ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))