В процессе загрузки ресурсов... загрузка...

Долгосрочная тенденционная квантитативная стратегия перекрестного SMA

Автор:Чао Чжан, Дата: 2025-01-06 17:01:08
Тэги:SMAЕМА

img

Обзор

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

Принципы стратегии

Основная логика включает в себя несколько ключевых компонентов:

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

Преимущества стратегии

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

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

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

Руководство по оптимизации

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

Резюме

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


/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Long-Term Growing Stock Strategy", overlay=true)
// Date Range
// STEP 1. Create inputs that configure the backtest's date range
useDateFilter = input.bool(true, title="Filter Date Range of Backtest",group="Backtest Time Period")
backtestStartDate = input(timestamp("1 Jan 2014"),title="Start Date", group="Backtest Time Period",tooltip="This start date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " +"zone of the chart or of your computer.")
backtestEndDate = input(timestamp("31 Dec 2024"), title="End Date", group="Backtest Time Period")
// STEP 2. See if current bar falls inside the date range
inTradeWindow = true


// Calculate EMAs
// ema20 = ta.ema(close, ema20_length)
// ema60 = ta.ema(close, ema60_length)
// ema120 = ta.ema(close, ema120_length)
sma5 = ta.sma(close, 5)
sma10 = ta.sma(close, 10)
sma20 = ta.sma(close, 20)
sma60 = ta.sma(close, 60)
sma120 = ta.sma(close, 120)

// Long-term growth condition: EMA 20 > EMA 60 > EMA 120
longTermGrowth = sma20 > sma60
//  and ema60 > ema120

// Entry condition: Stock closes below EMA 20 and then rises back above EMA 10

// entryCondition = ta.crossover(close, ema20) or (close[1] < ema20[1] and close > ema20)
entryCondition =  sma5[1] <= sma20[1] and sma5 > sma20
// ta.crossover(sma5, sma20)

// Exit condition: EMA 20 drops below EMA 60
// exitCondition = ema5 < ema60 or (year == 2024 and month == 12 and dayofmonth == 30)
exitCondition = ta.crossover(sma20, sma5)

// Execute trades
if entryCondition and inTradeWindow
    strategy.entry("Long Entry", strategy.long)

if exitCondition and inTradeWindow
    strategy.close("Long Entry")
// plotchar(true, char="sma5: " + str.tostring(sma5))
// plotchar(true, char="sma5: " + sma20)
// label.new(x=bar_index, y=high + 10, text="SMA 5: " + str.tostring(sma5), color=color.blue, style=label.style_label_down, textcolor=color.white, size=size.small)
// label.new(x=bar_index, y=low, text="SMA 20: " + str.tostring(sma20), color=color.red, style=label.style_label_down, textcolor=color.white, size=size.small)


// x = time + (time - time[1]) * offset_x

//     var label lab = na
//     label.delete(lab)
//     lab := label.new(x=x, y=0, text=txt, xloc=xloc.bar_time, yloc=yloc.belowbar, color=color.red, textcolor=color.black, size=size.normal, style=label.style_label_up)
//     label.set_x(lab, x)



// Plot EMAs for visualization
// plot(ema20, color=color.red, title="EMA 20")
// plot(ema60, color=color.green, title="EMA 60")
// plot(ema120, color=color.blue, title="EMA 120")

Связанные

Больше