Стратегия обратного движения цены, руководствующаяся ценовым каналом, рассчитывает центральную линию ценового канала, чтобы определить направление тренда колебаний цен. Она генерирует длинные и короткие сигналы, когда цена приближается к центральной линии канала. Эта стратегия сочетает в себе несколько условий фильтрации для поиска высоковероятных торговых возможностей.
Основным показателем этой стратегии является центральная линия ценового канала. Она рассчитывается как средняя от самой высокой цены и самой низкой цены из последних 30 свечей. Когда низкий уровень выше центральной линии, он считается восходящим. Когда высокий уровень ниже центральной линии, он считается нисходящим.
Стратегия генерирует торговые сигналы только тогда, когда изменяется фон тренда. То есть, в фоне восходящего тренда, она становится короткой только тогда, когда свеча становится красной. В фоне нисходящего тренда, она становится длинной только тогда, когда свеча становится зеленой.
Кроме того, стратегия также устанавливает условия двойного фильтра: фильтр тела свечи и фильтр бары ценового канала. Сигналы запускаются только тогда, когда объем тела свечи превышает 20% среднего значения, и для открытия позиций должны быть последовательные сигналы тренда в цикле фильтра.
Эта стратегия сочетает в себе тренд, зону стоимости и шаблоны свечей, что является эффективной стратегией обратной торговли.
Основными рисками этой стратегии являются отсутствие точек переворота цен и ненужное ожидание сигналов.
Эта стратегия может быть оптимизирована в следующих аспектах:
Стратегия обратного ценообразования, основанная на ценовом канале, определяет точки обратного движения через ценовые каналы и устанавливает условия двойного фильтра для получения высококачественных сигналов.
/*backtest start: 2023-11-19 00:00:00 end: 2023-11-26 00:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy(title = "Noro's PriceChannel for D1 v1.0", shorttitle = "PriceChannel D1", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0) //Settings needlong = input(true, "long") needshort = input(true, "short") slowlen = input(30, defval = 30, minval = 2, maxval = 200, title = "PriceChannel Period") pcbars = input(1, defval = 1, minval = 1, maxval = 20, title = "PriceChannel Bars") usecol = input(true, "Use color-filter") usebod = input(true, "Use body-filter") needbg = input(false, defval = false, title = "Need trend Background?") 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") src = close //PriceChannel lasthigh = highest(src, slowlen) lastlow = lowest(src, slowlen) center = (lasthigh + lastlow) / 2 //Trend ub = low > center ? 1 : 0 db = high < center ? 1 : 0 trend = sma(ub, pcbars) == 1 ? 1 : sma(db, pcbars) == 1 ? -1 : trend[1] //Body body = abs(close - open) abody = sma(body, 10) //Signals up = trend == 1 and (close < open or usecol == false) and (body > abody / 5 or usebod == false) dn = trend == -1 and (close > open or usecol == false) and (body > abody / 5 or usebod == false) //Lines plot(center, color = blue, linewidth = 3, transp = 0, title = "PriceChannel Center") //Background col = needbg == false ? na : trend == 1 ? lime : red bgcolor(col, transp = 80) //Trading if up strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if dn strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if time > timestamp(toyear, tomonth, today, 23, 59) strategy.close_all()