
Стратегия линейного регрессивного канала является количественной торговой стратегией, основанной на анализе линейной регрессии. Стратегия формирует верхний и нижний канал, рассчитывая уравнение линейной регрессии цены ценных бумаг в течение определенного периода времени, и использует верхний и нижний путь канала в качестве торгового сигнала для промежуточной торговли или отслеживания тенденций.
В основе адаптивной стратегии линейного возврата лежит вычисление линейного возврата к закрытию цены на некоторое количество линий корня K, образующих среднюю линию, представляющую средние цифры цены, верхнюю линию, представляющую верхнюю линию цены, и нижнюю линию, представляющую нижнюю линию цены. Конкретный процесс вычисления выглядит следующим образом:
Собираем входные параметры для независимых переменных x и y, обозначенных как корень K из линии K. Здесь x - целое число от 1 до length, а y - конечная цена соответствующей линии K.
Расчет коэффициента регрессии:
Вычислить линейную регрессию y’ для каждой K-линии, стандартная разница STDDEV
Центральная линия является уравнением регрессии y’ = mx + b, и верхние и нижние колеи плавают вверх и вниз по центральной линии в пределах стандартного размера.
По мере прибытия новой K-линии, вышеперечисленные прокрутки обновляются, образуя верхний и нижний адаптивные каналы. В соответствии с перекрестками верхних и нижних полос каналов делается дополнительная подзарядка, остановка убытков около средней линии.
Стратегия адаптивного линейного регрессивного канала имеет следующие преимущества по сравнению с традиционной среднелинейной стратегией:
Более научная, логичная, регрессионная модель анализа имеет большее статистическое значение, чем средняя линия
Более гибкий и адаптируемый к изменениям цены
Лучшая эффективность отслеживания, значительно лучше, чем среднелинейная стратегия для некоторых сортов
Опыт работы в реальном пространстве показал хорошие результаты.
Основные риски этой стратегии:
Слишком большие колебания цен приводят к огромным потерям. Решение заключается в установке стоп-лосса и оптимизации параметров.
Потерянный канал приводит к плохой эффективности отслеживания. Решение заключается в корректировке параметров в сочетании с другими техническими показателями.
Результаты отслеживания кажутся хорошими, но результаты на диске не очень хороши. Решение заключается в корректировке параметров и полной проверке.
Эта стратегия может быть оптимизирована в следующих аспектах:
Поиск оптимальных параметров для тестирования большего числа комбинаций
Сигналы в сочетании с другими техническими показателями, чтобы избежать сильного движения
Увеличение стратегии по удержанию убытков, снижение риска потерь и защита капитала
Добавление модуля управления позициями, изменение размеров позиций в зависимости от рыночных условий
В целом, стратегия линейного пути регрессии является хорошей количественной стратегией. Она имеет прочную теоретическую основу, хорошую практическую эффективность, заслуживает дальнейшего изучения и оптимизации и может стать эффективной составляющей системы количественных торгов. Но также необходимо признать ее ограничения, предотвратить риски и тщательно практиковать.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("Stealthy 7 Linear Regression Channel Strategy", overlay=true)
source = open
length = input(100, minval=1)
mult1 = input(1, minval=0.001, maxval=50)
mult2 = input(1, minval=0.001, maxval=50)
DayTrader = input(title="Range Mode", type=bool, defval=false)
//Making the first least squares line
sum_x = length * (length + 1) / 2
sum_y = 0
sum_xy = 0
xyproductsum = 0
sum_xx = 0
for i = 1 to length
sum_y := sum_y + close[i]
sum_xy := i * close[i] + sum_xy
sum_xx := i * i + sum_xx
m = (length*sum_xy - (sum_x * sum_y)) / (length * sum_xx - (sum_x * sum_x))
b = sum_y / length - (m * sum_x / length)
//Finding the first standard deviation from the line
difference = 0
for i = 1 to length
y = i * m + b
difference := pow(abs(close[i] - y),2) + difference
STDDEV = sqrt(difference / length)
//Creating trading zones
dev = mult1 * STDDEV
dev2 = mult2 * STDDEV
upper = b + dev
lower = b - dev2
middle = b
if DayTrader == false
if crossover(source, upper)
strategy.entry("RGLONG", strategy.long, oca_name="RegChannel", comment="RegLong")
else
strategy.cancel(id="RGLONG")
if crossunder(source, lower)
strategy.entry("RGSHORT", strategy.short, oca_name="RegChannel", comment="RegShort")
else
strategy.cancel(id="RGSHORT")
if crossover(source, middle) and strategy.position_size < 0
strategy.close_all()
if crossunder(source,middle) and strategy.position_size > 0
strategy.close_all()
if DayTrader == true
if crossover(source, lower)
strategy.entry("RGLONG", strategy.long, oca_name="RegChannel", comment="RegLong")
else
strategy.cancel(id="RGLONG")
if crossunder(source, upper)
strategy.entry("RGSHORT", strategy.short, oca_name="RegChannel", comment="RegShort")
else
strategy.cancel(id="RGSHORT")
plot(upper, title="UpperBand", color=purple, linewidth=1, style=line)
plot(lower, title="LowerBand", color=purple, linewidth=1, style=line)
plot(middle, title="MiddleBand", color=black, linewidth=1, style=line)