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


Дата создания: 2024-02-26 16:36:30 Последнее изменение: 2024-02-26 16:36:30
Копировать: 0 Количество просмотров: 666
1
Подписаться
1617
Подписчики

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

Обзор

Стратегия основана на Kaufman Adaptive Moving Average (KAMA) и позволяет динамически корректировать торговые позиции, автоматически отслеживая тенденции рынка. Основные функции стратегии включают в себя:

  1. Динамический расчет длины шага сделки (в точках), самостоятельное адаптация к рыночным колебаниям
  2. Сигналы покупки и продажи в зависимости от направления KAMA
  3. После появления сигнала устанавливается стоп-дистанция и корректируется с движением цены.
  4. Вариант ожидания сигнала подтверждения закрытия линии K, фильтрация ложного сигнала

Используя эти функции, стратегия пытается получить дополнительную прибыль от тренда, контролируя при этом риски.

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

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

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

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

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

По сравнению с традиционной стратегией скользящих средних, эта стратегия имеет следующие преимущества:

  1. Индекс KAMA более чувствителен и может быстрее улавливать ценовые тенденции.
  2. Динамический расчет стоп-ложа, который может быть скорректирован с учетом тенденции и закрепить более высокую прибыль;
  3. Имеется опционный K-линия закрытия подтверждения, может отфильтровывать ложные сигналы, уменьшить ненужное открытие позиции.

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

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

Однако эта стратегия также несет в себе некоторые риски:

  1. Риск обратного тренда. Индекс KAMA может быть гибким в отношении колебаний цен, но может не реагировать на внезапное изменение тренда.
  2. Слишком радикальный стоп-страх. Динамический стоп-страх может быть слишком радикальным, если он настроен слишком широко, и не позволяет прибыли зафиксироваться.
  3. Риск ложного сигнала. Включение подтверждения закрытия K-линии может уменьшить, но не полностью устранить ложный сигнал.

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

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

Оптимизируемые направления стратегии включают:

  1. Оптимизация параметров KAMA: корректировка средней длины, оптимизация гладкости;
  2. Оптимизация динамической остановки: тестирование оптимальных расстояний и шагов для остановки в зависимости от характеристик разных сортов;
  3. Добавление фильтров: в сочетании с другими трендовыми индикаторами, подтверждение торговых сигналов, повышение надежности сигналов.

Например, можно тестировать добавление MACD в качестве вспомогательного подтверждающего показателя, в то время как KAMA Gold Fork также требует, чтобы MACDDif также был положительным и расширенным. Это может отфильтровать некоторые ложные сигналы и избежать ненужного повторного открытия позиции.

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

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

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

//@version=5
strategy("THMA - Bharath Vc Improved", overlay=true, process_orders_on_close=true)

// Function to calculate pips with higher precision
getPips(price) =>
    difc = syminfo.mintick
    hlpips = price / difc
    math.round(hlpips / syminfo.mintick) * syminfo.mintick

// Inputs
buyMess = input.string("Buy Message","Buy Alert Message")
sellMess = input.string("Sell Message","Sell Alert Message")
buyExitMessage = input.string("Buy Exit","Buy Exit Alert Message" )
sellExitMessage = input.string("Sell Exit","Sell Exit Alert Message" )

tmf = input.timeframe("", "Timeframe")
length = input(title='Length', defval=14)
fastLength = input(title='Fast EMA Length', defval=2)
slowLength = input(title='Slow EMA Length', defval=30)
src = input(title='Source', defval=close)
highlight = input(title='Highlight ?', defval=true)
awaitBarConfirmation = input(title='Await Bar Confirmation ?', defval=true)

// Function to calculate the TMA
gettma() =>
    mom = math.abs(ta.change(src, length))
    volatility = math.sum(math.abs(ta.change(src)), length)
    er = volatility != 0 ? mom / volatility : 0
    fastAlpha = 2 / (fastLength + 1)
    slowAlpha = 2 / (slowLength + 1)
    alpha = math.pow(er * (fastAlpha - slowAlpha) + slowAlpha, 2)
    kama = 0.0
    kama := alpha * src + (1 - alpha) * nz(kama[1], src)
    await = awaitBarConfirmation ? barstate.isconfirmed : true
    maColor = highlight ? kama > kama[1] and await ? color.green : color.red : color.new(color.purple, 0)
    thma = kama
    hma_dif = (thma - thma[2])/2
    colour = hma_dif > 0 ? color.green : color.red
    isGreen = hma_dif > 0
    [thma, isGreen, colour]

// Dynamic pip size based on ATR to adapt better to smaller timeframes
pips = ta.atr(14) * 0.1

// Main execution logic
var float psl = na
var int lastSignal = 0
var float lastPsl = na

[thma, isGreen, colour] = request.security(syminfo.tickerid, tmf, gettma(), gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_off)

plot(thma, title='KAMA', linewidth=2, color=colour)

if ta.crossover(thma, psl) and strategy.position_size < 0
    strategy.exit("Sell Exit", stop=thma, alert_message=sellExitMessage)

if ta.crossunder(thma, psl) and strategy.position_size > 0
    strategy.exit("Buy Exit", stop=thma, alert_message=buyExitMessage)

if isGreen and strategy.position_size <= 0
    if na(psl)
        psl := close + getPips(pips)
    strategy.entry("Buy", strategy.long, alert_message=buyMess)
    lastSignal := 1

if not isGreen and strategy.position_size >= 0
    if na(psl)
        psl := close - getPips(pips)
    strategy.entry("Sell", strategy.short, alert_message=sellMess)
    lastSignal := -1

if (thma >= lastPsl or na(lastPsl)) and thma > psl
    psl := psl + getPips(pips)
    lastPsl := psl

if (thma <= lastPsl or na(lastPsl)) and thma < psl
    psl := psl - getPips(pips)
    lastPsl := psl

plot(psl, title="Position Stop Level", style=plot.style_stepline, color=color.blue)
plot(lastPsl, title="Last Position Stop Level", style=plot.style_cross, color=color.red)