Стратегия следования за трендом с двойной линейной регрессией


Дата создания: 2023-11-17 16:51:33 Последнее изменение: 2023-11-17 16:51:33
Копировать: 0 Количество просмотров: 616
1
Подписаться
1617
Подписчики

Стратегия следования за трендом с двойной линейной регрессией

Обзор

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

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

Эта стратегия сначала рассчитывает линейную регрессионную кривую с двумя различными циклами: быстрый линейный регресс с более короткими циклами и медленный линейный регресс с более длительными циклами. Затем рассчитывается разница между двумя линейными регрессиями. Если быстрая линейная регрессия выше медленной линейной регрессии, разница больше 0, то цена находится в восходящей тенденции.

Стратегия использует дифференциальную линию, которая пересекает порог, в качестве сигнала покупки, и дифференциальную линию, которая пересекает порог, в качестве сигнала закрытия. В то же время, требуется, чтобы цена была выше 200 циклов EMA, чтобы отфильтровать нетрадиционную ситуацию.

Анализ преимуществ

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

  2. Добавление фильтра EMA, который отфильтровывает некоторые не трендовые явления и предотвращает ошибочные сигналы.

  3. Стратегическая логика проста и понятна, легко понятна и реализуема.

Анализ рисков

  1. Неправильная настройка линейного цикла регрессии может привести к созданию большого количества шума.

  2. При сильных тенденциях EMA-фильтр может упустить некоторые возможности.

  3. В условиях кризиса часто происходят сделки и убытки.

Решение проблемы:

  1. Оптимизация параметров линейного цикла регрессии, снижение шума.

  2. В зависимости от рыночных условий можно динамично корректировать цикл EMA.

  3. Увеличение стоп-лосса для контроля убытков

Оптимизация стратегии

Эта стратегия может быть оптимизирована в следующих аспектах:

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

  2. Попробуйте использовать другие фильтрующие показатели вместо EMA, такие как Brinband, KDJ и т.д., чтобы увидеть, можно ли улучшить эффективность стратегии.

  3. Увеличение динамического стоп-убытка для контроля риска и предотвращения расширения убытков.

  4. Торговля акциями, связанными с механизмом выбора акций, с выбором более тенденциозных акций.

  5. Разработка параметров с возможностью самостоятельной адаптации и автоматической корректировки параметров в зависимости от состояния рынка.

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

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

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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © TradingAmmo

//@version=4
strategy("Linear trend", overlay=false, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075, currency='USD')
startP = timestamp(input(2017, "Start Year"), input(12, "Month"), input(17, "Day"), 0, 0)
end   = timestamp(input(9999, "End Year"),   input(1, "Month"),   input(1, "Day"),   0, 0)
_testPeriod() =>
    iff(time >= startP and time <= end, true, false)

src = close
len1 = input(defval=13, minval=1, title="Fast LR")
len2 = input(defval=55, minval=1, title="Slow LR")

lag1 = input(0, title="Lag for fast")
lag2 = input(0, title="Lag for slow")

threshold  = input(0,step=0.5, title="Threshold")

fast_lr = linreg(src, len1, lag1)
slow_lr = linreg(src, len2, lag2)
lr = fast_lr - slow_lr
plot_fast = plot(lr, color = lr > 0 ? color.green : color.red)
plot(threshold, color=color.purple)

long_condition = crossover(lr, threshold) and close > ema(close, 200) and _testPeriod()
strategy.entry('BUY', strategy.long, when=long_condition) 

short_condition = crossunder(lr, threshold) 
strategy.close('BUY', when=short_condition)