Стратегия отслеживания тренда двойной скользящей средней полосы Боллинджера

Автор:Чао Чжан, Дата: 2023-12-22 14:54:20
Тэги:

img

Обзор

Эта стратегия использует комбинацию полос Боллинджера и скользящих средних для идентификации и входа в тренд. Она использует способность распознавания трендов полос Боллинджера и фильтрующий эффект скользящих средних для эффективного определения направлений тренда рынка для входа на трендовые рынки.

Логика стратегии

  1. Вычислить канал Боллинджера для определения направления тренда рынка

    • Использовать самый высокий и самый низкий уровень для расчета диапазонов каналов
    • Средний диапазон канала - это средний из высоких и низких
    • Определение направления тренда на основе местоположения цены в канале
  2. Вычислить размер тела бычьей свечи для сигналов остановки потерь и обратного движения

    • Тело бычьей свечи - абсолютное значение закрытия минус открытие
    • Вычислить среднее значение тела свечи за N периодов, сравнить с текущим телом для остановки потерь и реверсии
  3. Ввести сделки в направлении канала при подтверждении тренда

    • Длинные входы вблизи нижней полосы в восходящих тенденциях
    • Краткие входы вблизи верхней полосы при понижающемся тренде
  4. Использование скользящих средних для фильтрации, чтобы избежать ложных сигналов

    • Расчет скользящей средней за N периодов цены закрытия
    • Сгенерировать сигналы только при прорывах скользящих средних

Преимущества

  1. Систематическое определение тенденции, объединяющее диапазоны и скользящие средние

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

  2. Эффективное управление рисками посредством остановки потерь тела свечи

    Сравнение текущего тела свечи с исторической средней обнаруживает обратный тренд для остановки потерь и сокращения позиции.

  3. Ясные правила количественного ввода и стоп-лосса

    Строгие требования к движущейся средней и направлению канала для входа. Правило остановки потерь по размеру тела свечи. Заставляет всю систему входить и выходить ясной и систематической.

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

  1. Потенциальные убытки на рынках с ограниченным диапазоном

    Ценовые колебания по диапазонам могут привести к повторяющимся незначительным потерям.

  2. Преждевременный стоп-лосс в сильных тенденциях

    Краткосрочные ретрекции могут привести к остановкам в сильных восходящих/снижающихся тенденциях.

  3. Ошибочные сигналы от плохой настройки параметров

    Неоптимальные параметры скользящей средней и диапазонов могут вызывать ложные сигналы.

Возможности для расширения

  1. Оптимизировать перемещающийся средний период просмотра

    Настройка периода для уменьшения сглаживания для более быстрого обнаружения изменения тренда.

  2. Испытание альтернативных механизмов остановки потерь

    Оценить остановки отслеживания, остановки ATR и т.д. для поиска оптимальной системы.

  3. Включить модели машинного обучения

    Подготовка моделей на обширные исторические данные для увеличения тенденции и предсказания сигналов.

Заключение

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


/*backtest
start: 2023-12-14 00:00:00
end: 2023-12-21 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=2
strategy("Noro's Bands Scalper Strategy v1.3", shorttitle = "Scalper str 1.3", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
takepercent = input(0, defval = 0, minval = 0, maxval = 1000, title = "take, %")
needct = input(false, defval = false, title = "Counter-trend entry")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
needbb = input(true, defval = true, title = "Show Bands")
needbg = input(true, defval = true, title = "Show Background")
src = close

//PriceChannel 1
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

//Distance
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma
hd1 = center + distsma / 2
ld1 = center - distsma / 2

//Trend
trend = close < ld and high < center ? -1 : close > hd and low > center ? 1 : trend[1]

//Lines
colo = needbb == false ? na : black
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band")

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)

//Body
body = abs(close - open)
smabody = ema(body, 30)
candle = high - low

//Engulfing
min = min(open, close)
max = max(open, close)
bar = close > open ? 1 : close < open ? -1 : 0
upeng = bar == 1 and bar[1] == -1 and min >= min[1] and max <= max[1] ? 1 : 0
dneng = bar == -1 and bar[1] == 1 and min >= min[1] and max <= max[1] ? 1 : 0

//Signals
up7 = trend == 1 and ((bar == -1 and bar[1] == -1) or (body > smabody and close < open)) ? 1 : 0
dn7 = trend == 1 and bar == 1 and bar[1] == 1 and close > strategy.position_avg_price * (100 + takepercent) / 100 ? 1 : 0
up8 = trend == -1 and bar == -1 and bar[1] == -1 and close < strategy.position_avg_price * (100 - takepercent) / 100 ? 1 : 0
dn8 = trend == -1 and ((bar == 1 and bar[1] == 1) or (body > smabody and close > open)) ? 1 : 0

if up7 == 1 or up8 == 1 
    strategy.entry("Long", strategy.long, needlong == false ? 0 : trend == -1 and needct == false ? 0 : na)

if dn7 == 1 or dn8 == 1
    strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na)

Больше