Стратегия отслеживания тренда - это стратегия торговли трендом, основанная на скользящих средних и ценовых экстремалах. Стратегия использует две скользящие средние для отслеживания ценовых тенденций и открывает обратные позиции при обратном тренде. В то же время она также рассчитывает ценовой канал, основанный на самых высоких и самых низких ценах последних K-линий, чтобы остановить потерю, когда цены приближаются к границам канала, дополнительно контролируя риски.
Для отслеживания ценовых тенденций стратегия использует 3-периодические высокие и низкие скользящие средние отметки HMA и LMA. Когда цены пересекают HMA, она интерпретируется как быстрая; когда цены падают ниже LMA, она интерпретируется как медвежий.
Стратегия также рассчитывает верхние и нижние рельсы (uplevel и dnlevel) ценового канала на основе самых высоких и самых низких цен в пределах последних строк K-линий. uplevel - это самая высокая цена в последних строк K-линий плюс коэффициент ретрекшера вверх; dnlevel - это самая низкая цена в последних строк K-линий минус коэффициент ретрекшера вниз. Это составляет диапазон ценового канала.
При открытии длинных позиций цена стоп-лосса устанавливается на верхней рельсе канала; при открытии коротких позиций цена стоп-лосса устанавливается на нижней рельсе канала.
Когда появляется обратный сигнал, стратегия немедленно отменяет открытые позиции, чтобы отслеживать новую ценовую тенденцию.
Улучшения:
Есть возможности для дальнейшей оптимизации:
Другие индикаторы могут быть введены для фильтрации некоторых недействительных сигналов, таких как MACD, KD и т. д.
Для дальнейшего контроля рисков может быть добавлена адаптивная логика стоп-лосса, такая как перемещение стоп-лосса, баланс стоп-лосса и т.д.
Испытать влияние различных параметров на эффективность стратегии и оптимизировать комбинации параметров, такие как длины циклов MA, размеры коэффициентов ретрассемента и т. д.
Стратегия в настоящее время торгуется в срочные сессии. Она также может быть скорректирована на весь день торговли. Это может потребовать дополнительных правил фильтрации.
В целом, это стратегия обратного тренда, объединяющая ценовые каналы и скользящие средние. Отслеживая тенденции и своевременно отражая открывающиеся позиции, он может эффективно отслеживать движение цен. В то же время меры контроля риска ценовых каналов и обратного открытия также позволяют эффективно контролировать единичные потери. Идея стратегии проста и ясна, и стоит дальнейшего тестирования и оптимизации в живой торговле.
/*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"}] */ //Noro //2019 //@version=3 strategy(title = "Noro's 3Bars Strategy by Larry Williams", shorttitle = "3Bars", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %") corr = input(0.0, title = "Correction, %") bars = input(1, minval = 1) revers = input(false, defval = false, title = "revers") showll = input(true, defval = true, title = "Show Levels") showos = input(true, defval = true, title = "Show Levels one side") showcl = input(false, defval = false, title = "Show Levels continuous line") showbg = input(false, defval = false, title = "Show Background") showar = input(false, defval = false, title = "Show Arrows") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") len = input(3) hma = sma(high, len) lma = sma(low, len) plot(hma) plot(lma) //Levels hbar = 0 hbar := high > high[1] ? 1 : high < high[1] ? -1 : 0 lbar = 0 lbar := low > low[1] ? 1 : low < low[1] ? -1 : 0 uplevel = 0.0 dnlevel = 0.0 hh = highest(high, bars + 1) ll = lowest(low, bars + 1) uplevel := hbar == -1 and sma(hbar, bars)[1] == 1 ? hh + ((hh / 100) * corr) : uplevel[1] dnlevel := lbar == 1 and sma(lbar, bars)[1] == -1 ? ll - ((ll / 100) * corr) : dnlevel[1] //Background size = strategy.position_size trend = 0 trend := size > 0 ? 1 : size < 0 ? -1 : high >= uplevel ? 1 : low <= dnlevel ? -1 : trend[1] col = showbg == false ? na : trend == 1 ? lime : trend == -1 ? red : na bgcolor(col) //Lines upcol = na upcol := showll == false ? na : uplevel != uplevel[1] and showcl == false ? na : showos and trend[1] == 1 ? na : lime plot(uplevel, color = upcol, linewidth = 2) dncol = na dncol := showll == false ? na : dnlevel != dnlevel[1] and showcl == false ? na : showos and trend[1] == -1 ? na : red plot(dnlevel, color = dncol, linewidth = 2) //Arrows longsignal = false shortsignal = false longsignal := size > size[1] shortsignal := size < size[1] plotarrow(longsignal and showar and needlong ? 1 : na, colorup = blue, colordown = blue, transp = 0) plotarrow(shortsignal and showar and needshort ? -1 : na, colorup = blue, colordown = blue, transp = 0) //Trading lot = 0.0 lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1] if uplevel > 0 and dnlevel > 0 and revers == false strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = uplevel) strategy.entry("Long stop", strategy.short, 0, stop = lma) strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = dnlevel) strategy.entry("Short stop", strategy.long, 0, stop = hma) // if time > timestamp(toyear, tomonth, today, 23, 59) // strategy.close_all()