Стратегия торговли полосами Боллинджера с несколькими фильтрами


Дата создания: 2024-01-17 15:12:57 Последнее изменение: 2024-01-17 15:12:57
Копировать: 1 Количество просмотров: 592
1
Подписаться
1617
Подписчики

Стратегия торговли полосами Боллинджера с несколькими фильтрами

Обзор

Стратегия торговли с множественным отбором - это количественная торговая стратегия, которая использует множественный отбор условий в сочетании с индикаторами Брин, средней линейной индикатор, RSI и K-линейной графической характеристикой, чтобы подать торговый сигнал при выполнении условий. Это типичная стратегия отслеживания тенденций, чтобы получить прибыль, захватывая колебания ценовых тенденций на средней и длинной линиях.

Стратегический принцип

Расчет показателя

В этой стратегии используются три индикатора: булинская полоса, средняя линия и RSI. Средняя полоса булинской полосы представляет собой n-дневную простое движущееся среднее значение цены, а верхняя и нижняя полосы - средняя полоса + 2x стандартное расхождение и средняя полоса - 2x стандартное расхождение.

Торговые сигналы

Стратегия генерирует торговые сигналы с учетом следующих трех основных условий:

(1) Бурин с выходом из рельса и отклонением K-линии. Делайте больше, когда цена на закрытии проходит рельс, и цвет K-линии противоположен текущему тренду.

(2) Брин с прорывом на трассу & отклонение объекта K-линии. Сделать пустоту, когда цвет объекта K-линии, находящегося на трассе, противоположно направлению текущей тенденции.

(3) Субъект K-линии поворачивает. Если направление удержания позиции совпадает с цветом переворачивания субъекта K-линии, то позиция равнозначна.

Помимо этого, в стратегии также установлены вспомогательные условия, такие как однородное фильтрование, K-линейное фильтрование и RSI-фильтрование, чтобы строго контролировать вход.

Анализ преимуществ

  • Строгое регулирование множественных условий снижает риск ложных взломов
  • Применение метода отслеживания трендов снижает частоту торгов
  • RSI помогает избежать обратной ловушки

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

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

Риск может быть уменьшен путем корректировки параметров Брин-пояса и строгого контроля стоп-лосса.

Направление оптимизации

  • Поиск оптимальных параметров для тестирования эффективности стратегий с различными параметрами
  • Включение алгоритмов машинного обучения, позволяющих стратегии автоматически оптимизировать параметры
  • Добавление дополнительных факторов и фильтров для повышения стабильности стратегии

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2023-12-17 00:00:00
end: 2024-01-16 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy("Noro's Bollinger Strategy v1.4", shorttitle = "Bollinger str 1.4", overlay = true )

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")

length = input(20, defval = 20, minval = 1, maxval = 1000, title = "Bollinger Length")
mult = input(1, defval = 1, minval = 0.001, maxval = 50, title = "Bollinger Mult")
source = input(ohlc4, defval = ohlc4, title = "Bollinger Source")

usebf = input(true, defval = true, title = "Use body-filter")
usecf = input(true, defval = true, title = "Use color-filter")
userf = input(true, defval = true, title = "Use RSI-filter")

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")
showbands = input(true, defval = true, title = "Show Bollinger Bands")

//Bollinger Bands
basis = sma(source, length)
dev = mult * stdev(source, length)
upper = basis + dev
lower = basis - dev

//Lines
col = showbands ? black : na 
plot(upper, linewidth = 1, color = col)
plot(basis, linewidth = 1, color = col)
plot(lower, linewidth = 1, color = col)

//Body filter
nbody = abs(close - open)
abody = sma(nbody, 10)
body = nbody > abody / 2 or usebf == false

//Color filter
bar = close > open ? 1 : close < open ? -1 : 0 
gb = bar == 1 or usecf == false
rb = bar == -1 or usecf == false

//RSI Filter
fastup = rma(max(change(close), 0), 7)
fastdown = rma(-min(change(close), 0), 7)
rsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))
ursi = rsi > 70 or userf == false
drsi = rsi < 30 or userf == false

//Signals
up = close <= lower and rb and body and drsi and (close < strategy.position_avg_price or strategy.position_size == 0)
dn = close >= upper and gb and body and ursi and (close > strategy.position_avg_price or strategy.position_size == 0)
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body

//Trading
if up
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

if dn
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)
    
if  exit
    strategy.close_all()