Стратегия ценового канала Noro
Стратегия сначала рассчитывает среднее значение самых высоких и самых низких цен за определенный период, чтобы построить средний ценовой канал. Когда цена выходит за канал снизу, это считается длинным сигналом. Когда цена выходит за канал сверху, это считается коротким сигналом.
В то же время стратегия включает в себя два вспомогательных правила: быстрый RSI и цвет свечи. Когда быстрый RSI ниже 25%, это указывает на статус перепроданности, и цены могут восстановиться. В сочетании с прорывом выше канала, это создает более сильный длинный сигнал. Напротив, когда быстрый RSI выше 75%, это указывает на статус перекупленности, и цены могут упасть. В сочетании с разрывом ниже канала, это создает более сильный короткий сигнал. Кроме того, стратегия отслеживает изменения цвета свечи за последние две свечи. Две последовательные красные свечи усиливают короткий сигнал, а две последовательные зеленые свечи усиливают длинный сигнал.
Комбинируя эти три индикатора сигнала, стратегия может эффективно идентифицировать средне- и долгосрочные тенденции и соответственно устанавливать позиции.
Наибольшее преимущество этой стратегии заключается в том, что она включает в себя несколько индикаторов для определения направления тренда и избежания шума от краткосрочных колебаний рынка.
Канал цен четко определяет направление и силу тренда.
Быстрый РСИ оценивает условия перекупленности/перепроданности, чтобы избежать преследования тенденций в переломные моменты.
Проверка цвета свечи подтверждает стойкость тренда.
Стратегия включает только две последовательные свечи одного цвета, нарушающие канал, избегая ложных сигналов от краткосрочных колебаний.
Простой средний стоп-лосс закрывает позиции после изменения цвета свечи, эффективно минимизируя потери.
Для этой стратегии также существуют некоторые риски:
Неправильное настройка параметров ценового канала может привести к тому, что каналы будут слишком широкими или слишком узкими, отсутствуют точки изменения тренда или генерируют чрезмерные ложные сигналы.
Неправильные настройки быстрого параметра RSI могут не позволить точно определить условия перекупления/перепродажи, что приводит к отсутствию возможностей для реверсии.
Простой механизм стоп-лосса может быть слишком чувствительным к колеблющимся тенденциям, вызывая чрезмерное открытие и закрытие позиции.
Он не может предсказать продолжение фактической тенденции после прорыва ценового канала, что приводит к увеличению потерь.
Она не может адаптироваться к черным лебедям с внезапным влиянием на рынок, что приводит к огромным потерям.
Некоторые основные возможности для совершенствования стратегии включают:
Динамически корректировать параметры ценового канала, чтобы лучше адаптироваться к волатильности в разные периоды и рынки.
Включить меры волатильности для корректировки параметров RSI, снижая чувствительность при высокой волатильности и увеличивая чувствительность при низкой волатильности.
Добавить механизмы отставания с уровнем остановки, основанным на волатильности тренда, чтобы избежать чрезмерно чувствительных остановок.
Улучшить определение силы прорыва и медвежьей/бычьей дивергенции для предотвращения ложных прорывов.
Включить модели обучения историческим данным, чтобы помочь в оценке поворотных точек тренда с высокой вероятностью и улучшить точность ввода.
Оптимизировать модели размещения позиций для динамической корректировки распределения на основе условий риска.
В целом, стратегия ценового канала Noro
/*backtest start: 2023-09-23 00:00:00 end: 2023-10-23 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy(title = "Noro's Price Channel Strategy v1.1", shorttitle = "Price Channel str 1.1", 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") usecol = input(true, defval = true, title = "Use color strategy") usersi = input(true, defval = true, title = "Use RSI strategy") lev = input(1, defval = 1, minval = 1, maxval = 100, title = "leverage") pch = input(30, defval = 30, minval = 2, maxval = 200, title = "Price Channel") showcl = input(true, defval = true, title = "Show center-line") 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 //Price channel lasthigh = highest(src, pch) lastlow = lowest(src, pch) center = (lasthigh + lastlow) / 2 trend = low > center ? 1 : high < center ? -1 : trend[1] col = showcl ? blue : na plot(center, color = col, linewidth = 2) //Bars bar = close > open ? 1 : close < open ? -1 : 0 rbars = sma(bar, 2) == -1 gbars = sma(bar, 2) == 1 //Fast RSI fastup = rma(max(change(src), 0), 2) fastdown = rma(-min(change(src), 0), 2) fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown)) //Signals body = abs(close - open) abody = sma(body, 10) up1 = rbars and close > center and usecol dn1 = gbars and close < center and usecol up2 = fastrsi < 25 and close > center and usersi dn2 = fastrsi > 75 and close < center and usersi exit = (((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2) lot = strategy.equity / close * lev //Trading if up1 or up2 if strategy.position_size < 0 strategy.close_all() strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if dn1 or dn2 if strategy.position_size > 0 strategy.close_all() strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if time > timestamp(toyear, tomonth, today, 23, 59) or exit strategy.close_all()