Стратегия торговли по тренду, основанная на линейной регрессии и скользящих средних


Дата создания: 2023-12-18 17:34:29 Последнее изменение: 2023-12-18 17:34:29
Копировать: 4 Количество просмотров: 890
1
Подписаться
1621
Подписчики

Стратегия торговли по тренду, основанная на линейной регрессии и скользящих средних

Обзор

Эта стратегия основана на линейной регрессии и движущихся средних. Она создает простую систему отслеживания тренда. При пересечении движущейся средней на линейной регрессии делается больше, а при пересечении движущейся средней ниже линейной регрессии делается меньше.

Название стратегии

Trend Following Regression Trading Strategy (Стратегия торговли с регрессией)

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

Стратегия включает в себя следующие ключевые элементы:

  1. Вычислите N-дневную простую скользящую среднюю (SMA)
  2. Вычислить линейную регрессию последних N дней
  3. Если цена пересекает SMA и находится выше линии регрессии, то нужно сделать больше.
  4. Провести позицию, когда конечная цена пересекает SMA и находится ниже линии регрессии
  5. Установка стоп-лосса и стоп-приза

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

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

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

Эта стратегия имеет следующие преимущества:

  1. Сочетание трендовых и прорывных индикаторов, предотвращение ложных прорывов, улучшение качества сигнала
  2. Используйте линейную регрессию, чтобы определить направление тренда, фильтруйте тренд, делайте больше только в случае повышения тренда, делайте пустоту в случае снижения тренда
  3. Для управления рисками внедрены механизмы остановки и сдерживания
  4. Правила четкие, понятные и простые в применении
  5. Это не так сложно, как просто изменить несколько параметров.

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

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

  1. В условиях шока может быть больше ошибочных торговых сигналов.
  2. Настройки для движущихся средних и циклов регрессии требуют повторного тестирования и оптимизации, неправильные настройки могут повлиять на эффективность стратегии
  3. В экстремальных ситуациях отключение может привести к значительным потерям.
  4. Основываясь только на технических показателях, без учета фундаментальных факторов

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

  1. Подумайте о стратегии приостановки или фильтрации с помощью других индикаторов на рынке во время колебаний
  2. Проверяйте параметры снова и снова, чтобы найти оптимальный параметр
  3. Оптимизация и динамическая коррекция стоп-позиции
  4. Основные факторы, такие как экономические данные

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

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

  1. Добавление других вспомогательных показателей для оценки состояния рынка, чтобы избежать торговли в условиях потрясений
  2. Оптимизация комбинаций типа движущихся средних, таких как двойные движущиеся средние, тройные движущиеся средние
  3. Дальнейший анализ наклонности регрессионной линии, добавление правил для определения наклонности
  4. В сочетании с показателем волатильности, устанавливается динамическая стоп-стоп-позиция
  5. Автоматическая оптимизация параметров с использованием методов машинного обучения

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

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

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

//@version=4
strategy(title="Regression Trading Strategy", shorttitle="RTS", overlay=true)

// Input parameters
n = input(14, title="SMA Period")
stop_loss_percentage = input(2, title="Stop Loss Percentage")
take_profit_percentage = input(2, title="Take Profit Percentage")

// Calculate the SMA
sma = sma(close, n)

// Linear regression function
linear_regression(src, length) =>
    sumX = 0.0
    sumY = 0.0
    sumXY = 0.0
    sumX2 = 0.0
    for i = 0 to length - 1
        sumX := sumX + i
        sumY := sumY + src[i]
        sumXY := sumXY + i * src[i]
        sumX2 := sumX2 + i * i
    slope = (length * sumXY - sumX * sumY) / (length * sumX2 - sumX * sumX)
    intercept = (sumY - slope * sumX) / length
    line = slope * length + intercept
    line

// Calculate the linear regression
regression_line = linear_regression(close, n)

// Plot the SMA and regression line
plot(sma, title="SMA", color=color.blue)
plot(regression_line, title="Regression Line", color=color.red)

// Trading strategy conditions
long_condition = crossover(close, sma) and close > regression_line
short_condition = crossunder(close, sma) and close < regression_line

// Exit conditions
stop_loss_price = close * (1 - stop_loss_percentage / 100)
take_profit_price = close * (1 + take_profit_percentage / 100)

// Plot entry and exit points on the chart
plotshape(series=long_condition, title="Long Entry", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(series=short_condition, title="Short Entry", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)
plotshape(series=crossunder(close, stop_loss_price), title="Stop Loss", location=location.abovebar, color=color.red, style=shape.labeldown, text="SL")
plotshape(series=crossover(close, take_profit_price), title="Take Profit", location=location.belowbar, color=color.green, style=shape.labelup, text="TP")

// Strategy orders
strategy.entry("Long", strategy.long, when = long_condition)
strategy.entry("Short", strategy.short, when = short_condition)
strategy.exit("Exit", from_entry = "Long", when = crossover(close, stop_loss_price) or crossover(close, take_profit_price))
strategy.exit("Exit", from_entry = "Short", when = crossunder(close, stop_loss_price) or crossunder(close, take_profit_price))