Двойной канал скользящей средней с стратегией отслеживания тренда

Автор:Чао Чжан, Дата: 2023-11-06 15:41:23
Тэги:

img

Обзор

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

Логика торговли

  1. Быстрые и медленные средние движущиеся составляют двойную систему каналов. Когда быстрый MA пересекает медленный MA, это является золотым крестом входного сигнала надолго. Когда быстрый MA пересекает ниже медленного MA, это является смертным крестом выходного сигнала.

  2. ADX оценивает существование и силу тренда. Когда ADX выше ключевого уровня, он указывает на то, что тренд существует и силен. Торговые сигналы генерируются только тогда, когда тренд силен.

  3. DI+ DMI определяет направление тренда. Когда DI+ положительный, он указывает на тенденцию к росту. Когда DI+ отрицательный, он указывает на тенденцию к снижению. Торговые сигналы генерируются только тогда, когда направление тренда совпадает.

  4. Проверка временных интервалов позволяет проверить эффективность стратегии в течение различных периодов времени для проверки.

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

  1. Система с двумя рельсами фильтрует прорывы, чтобы избежать ложных сигналов.

  2. ADX избегает чрезмерной торговли во время консолидации, требуя тенденции.

  3. DMI обеспечивает соответствие торговли направлению тренда, предотвращая контратендерные сделки.

  4. Проверка временного интервала проверяет параметры и оптимизирует настройки.

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

  1. Каналами могут образовываться ловушки, которые требуют остановок, чтобы избежать ударов.

  2. Задержка ADX может привести к потере ранних возможностей, требующих более низкого ключевого уровня.

  3. ДМИ также может пропустить ранние тенденции, требуя более короткие периоды.

  4. Параметры могут нуждаться в корректировке в разных временных интервалах.

Оптимизация

  1. Испытать комбинации параметров для поиска оптимальных настроек.

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

  3. Включить стоп-лосс для ограничения потерь.

  4. Автооптимизируйте параметры с помощью машинного обучения.

  5. Включите больше факторов, таких как настроения и новости.

Заключение

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


/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 23:59:59
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// author: codachang0726
strategy(title = "(S)MA+ADX+DI+time", shorttitle = "(S)MA+ADX+DI+time", overlay = true)

// === INPUT MA LENGTHS ===
fastMA    = input(defval = 7,   title = "FastMA",          minval = 1, step = 1)
slowMA    = input(defval = 14,   title = "SlowMA",          minval = 1, step = 1)

// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 9,    title = "From Month",      minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        minval = 1, maxval = 31)
fromYear  = input(defval = 2020, title = "From Year",       minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        minval = 1, maxval = 31)
thruYear  = input(defval = 2022, title = "Thru Year",       minval = 1970)

// === INPUT SHOW PLOT ===
showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

// === FUNCTION EXAMPLE ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true       // create function "within window of time"

// === MA LOGIC ===
crossOv   =  sma(close, fastMA) > sma(close, slowMA)     // true when fastMA over slowMA
crossUn   =  sma(close, fastMA) < sma(close, slowMA)     // true when fastMA under slowMA

// DI+ADX
adxlen      = input(14, title="ADX Smoothing")
dilen       = input(14, title="DI Period")
keyLevel    = input(20, title="Keylevel for ADX")
[diplus, diminus, adx] = dmi(dilen, adxlen)
di = (diplus - diminus)

buy = di > 0 and crossOv and adx > keyLevel
sell = di < 0 and crossUn and adx > keyLevel

buy_time = buy and not buy[1]
sell_time = sell and not sell[1]

// === EXECUTION ===
strategy.entry("L", strategy.long, when = window() and buy_time)    // enter long when "within window of time" AND crossover
strategy.close("L", when = window() and sell_time)                   // exit long when "within window of time" AND crossunder         

// === PLOTTING ===
bgcolor(color = showDate and window() ? color.gray : na, transp = 90)                                     // plot "within window of time"
plot(sma(close, fastMA), title = 'FastMA', color = color.yellow, linewidth = 2, style = plot.style_line)  // plot FastMA
plot(sma(close, slowMA), title = 'SlowMA', color = color.aqua,   linewidth = 2, style = plot.style_line)  // plot SlowMA


Больше