Количественная стратегия торговли, основанная на SMA и Rolling Trendline

Автор:Чао Чжан, Дата: 2024-02-04 15:18:12
Тэги:

img

Обзор

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

Логика стратегии

Ключевые компоненты этой стратегии включают:

  1. SMA: Простая скользящая средняя, рассчитывающая среднюю цену закрытия за период (smaPeriod) как сигнальную линию.

  2. Rolling Trendline: Установка лучшей линейной регрессионной линии над окном (окно) в качестве сигнала тренда.

  3. Условие входа: перейти на длинный курс при закрытии цены > SMA и тренд-линии.

  4. Условия выхода: закрытие позиции, когда цена закрытия < SMA и линия тренда.

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

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

Эта стратегия объединяет двойной фильтр MA и линии тренда, который может эффективно уменьшить ложные сделки с прорывом.

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

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

В этой стратегии также есть некоторые риски:

  1. Неправильные параметры SMA и линии тренда могут привести к отсутствию сделок или слишком большому количеству ложных прорывов.
  2. На сильно волатильных рынках поддержка канала SMA и линии тренда может ослабеть.
  3. Неудачный прорыв может привести к потерям, требуется строгая стоп-лосс.

Некоторые направления оптимизации для этих рисков:

  1. Оптимизировать параметры для различных продуктов.
  2. Увеличьте диапазон остановки потери, чтобы уменьшить однократную потерю.
  3. Приостановить торговлю на волатильном рынке, чтобы избежать ловушки.

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

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

  1. Добавление динамических функций корректировки для периода SMA, параметров скольжения на основе рыночных режимов.

  2. Разработать эластичный механизм стоп-лосса.

  3. Добавить фильтр из других показателей, например, объем, RSI для улучшения точности решения.

  4. Разрабатывайте обратную версию. Идите длинные, когда цена приближается к дну и нарушает канал снижения.

Заключение

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


/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("SMA Strategy with Rolling Trendline", overlay=true)

// Input parameters
smaPeriod = input(14, title="SMA Period")
window = input(20, title="Trendline Window")
startDate = input(timestamp("2023-01-01"), title="Start Date")
endDate = input(timestamp("2023-12-31"), title="End Date")

// Calculating SMA
sma = sma(close, smaPeriod)

// Function to calculate linear regression trendline for a window
linreg_trendline(window) =>
    sumX = 0.0
    sumY = 0.0
    sumXY = 0.0
    sumX2 = 0.0
    for i = 0 to window - 1
        sumX := sumX + i
        sumY := sumY + close[i]
        sumXY := sumXY + i * close[i]
        sumX2 := sumX2 + i * i
    slope = (window * sumXY - sumX * sumY) / (window * sumX2 - sumX * sumX)
    intercept = (sumY - slope * sumX) / window
    slope * (window - 1) + intercept

// Calculating the trendline
trendline = linreg_trendline(window)

// Entry and Exit Conditions
longCondition = close > sma and close < trendline
exitLongCondition = close < sma and close > trendline

// Strategy logic
if (true)
    if (longCondition)
        strategy.entry("Long", strategy.long)
    if (exitLongCondition)
        strategy.close("Long")

// Plotting
plot(sma, title="Simple Moving Average", color=color.blue)
plot(trendline, title="Rolling Trendline", color=color.red)
plotshape(series=longCondition, title="Enter Trade", location=location.belowbar, color=color.green, style=shape.triangleup)
plotshape(series=exitLongCondition, title="Exit Trade", location=location.abovebar, color=color.red, style=shape.triangledown)


Больше