Эта стратегия называется "Стратегия прорыва ценового канала". Ее основная идея состоит в том, чтобы использовать ценовой канал для определения тенденции и направления рынка и установления позиций, когда цена выходит из канала. Он сначала нарисует диапазон ценового канала, а затем судит, есть ли две последовательные красные или зеленые линии K. Если последняя линия K проходит через половину ширины канала и закрывается за пределами канала, она генерирует сигналы купли или продажи.
Стратегия рассчитывает самый высокий и самый низкий минимум за определенный период в прошлом с использованием функций highest() и lowest() для определения верхних и нижних рельсов ценового канала. Средняя точка канала определяется как среднее значение верхних и нижних рельсов. Затем она рассчитывает размер корпуса K-линии и сглаживает его с помощью SMA, чтобы определить, является ли последнее тело K-линии больше половины среднего тела. Она также оценивает, являются ли последние две K-линии в одном направлении (два последовательных красных или зеленых). Когда эти условия выполняются, она генерирует сигналы покупки / продажи и закрывает позиции, когда цена возвращается в направление канала.
Это стратегия прорыва, которая использует канал цены для оценки общей тенденции.
Использование ценового канала для определения общего направления тренда может эффективно фильтровать рыночный шум.
Две последовательные K-линии, пробивающиеся через канал в одном направлении, указывают на более сильный импульс и более высокий уровень успеха прорыва.
Судя по K-линии тела больше половины среднего тела можно избежать заблуждения ложным прорывом.
Логика стратегии проста и легко внедряется.
Настраиваемые параметры, такие как период канала, продукты торговли, часы торговли и т. Д., делают его очень адаптивным.
Стратегия также сопряжена с некоторыми потенциальными рисками:
Есть вероятность неудачного прорыва, который может привести к потерям.
Ценный канал может потерпеть неудачу, когда рынок сильно колеблется.
Отсутствие механизма стоп-лосса не позволяет эффективно контролировать потери.
Простые правила торговли сопряжены с рисками избыточной адаптации.
Не в состоянии адаптироваться к более сложной рыночной среде.
Соответствующие решения:
Оптимизируйте параметры для улучшения успешности прорыва.
Добавьте индекс волатильности, чтобы избежать рыночных колебаний.
Добавьте мобильную стоп-лосс.
Провести тест сложности для проверки перенастройки.
Увеличить модели машинного обучения для улучшения адаптивности.
Основными направлениями оптимизации являются:
Добавьте механизм остановки потери для лучшего контроля рисков.
Оптимизируйте такие параметры, как период канала, порог прорыва и т. Д. Найдите оптимальные параметры с помощью генетического алгоритма, сетевого поиска и т. Д.
Добавьте условия фильтрации для повышения уверенности в прорыве, например, объедините объем торговли для подтверждения прорыва.
Добавьте модели машинного обучения, такие как LSTM, чтобы улучшить способность прогнозировать и адаптироваться, используя больше данных.
Провести оптимизацию портфеля, объединить различные типы стратегий выхода, чтобы достичь ортогональности и уменьшить сходство.
В заключение, это количественная стратегия, основанная на ценовом канале для определения тренда и обнаружения сигналов прорыва. Она имеет преимущество в оценке тренда и подтверждении прорыва, но также имеет определенные риски ложного прорыва. Мы можем улучшить стратегию путем оптимизации параметров, остановки потерь, добавления фильтров и т. Д. Для снижения рисков. Между тем, внедрение моделей машинного обучения может еще больше улучшить предсказательную способность. В целом, это перспективный количественный подход к стратегии, который стоит исследовать и улучшать.
/*backtest start: 2023-12-16 00:00:00 end: 2024-01-15 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.0", shorttitle = "Price Channel str 1.0", 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") 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 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 //Signals body = abs(close - open) abody = sma(body, 10) up = rbars and close > center and body > abody / 2 dn = gbars and close < center and body > abody / 2 exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2 //Trading if up if strategy.position_size < 0 strategy.close_all() strategy.entry("Long", strategy.long, needlong == false ? 0 : na) if dn if strategy.position_size > 0 strategy.close_all() strategy.entry("Short", strategy.short, needshort == false ? 0 : na) if exit strategy.close_all()