Стратегия двойной торговой стратегии Bollinger Band Momentum

Автор:Чао Чжан, Дата: 2023-11-16 17:36:00
Тэги:

img

Обзор

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

Принцип

Основные пункты этой стратегии включают:

  1. Вычислите среднюю рельсу цены, которая представляет собой простую скользящую среднюю цену.

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

  3. Определите верхние и нижние рельсы в соответствии со средней рельсой и полосой пропускания. Верхняя рельса - это средняя рельса плюс 1 или 2 раза полосой пропускания. Нижняя рельса - это средняя рельса минус 1 или 2 раза полосой пропускания.

  4. Вычислить индикатор оценки тренда для длинного и короткого. Когда цена выше верхней рельсы 2, она длинная. Когда цена ниже нижней рельсы 2, она короткая.

  5. Когда цена пересекает верхний рельс 2, перейдите в длинный, когда пересекает нижний рельс 2, перейдите в короткий.

  6. Установите линию стоп-лосса. Линия стоп-лосса для длинных ордеров является нижней рельсой 1, а для коротких ордеров - верхней рельсой 1.

  7. Расчет размера позиции согласно требованиям управления капиталом.

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

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

Основными преимуществами этой стратегии являются:

  1. Система с двумя рельсами может лучше оценить силу тенденции.

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

  3. Разница между двойными рельсами в сочетании с регрессией полос Боллинджера формирует относительно стабильные торговые сигналы.

  4. Для контроля рисков существует четкая логика стоп-лосса/экзит.

  5. Размер позиций соответствует требованиям управления капиталом, избегая чрезмерного использования кредитного плеча.

  6. Идея стратегии ясна и легко понять и оптимизировать.

  7. Гибкие параметры позволяют адаптироваться к различным рынкам.

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

Стратегия также сопряжена с некоторыми рисками:

  1. Неправильные параметры полос Боллинджера могут вызвать эффект отрыва, не способный эффективно отслеживать цены.

  2. Разница между двумя рельсами не может полностью избежать ошибочных суждений о тенденции.

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

  4. Потери могут возникнуть в случае ложного выхода.

  5. Есть некоторая задержка, возможно, отсутствуют повороты цикла.

  6. Соотношение риск/вознаграждение ограничено точкой остановки потери, не способной неограниченно преследовать тенденции.

Соответствующие меры управления рисками:

  1. Оптимизировать параметры, чтобы сделать полосы Боллинджера адаптивными к различным циклам.

  2. Чтобы избежать ошибочного суждения, объедините другие показатели для подтверждения.

  3. Уменьшить размер позиции, чтобы контролировать однократные потери.

  4. Оптимизировать точки остановки потери для обеспечения соотношения риск/вознаграждение.

  5. Соответственно сократить цикл, чтобы уменьшить задержку.

  6. Контроль рисков должен быть надежным, без неограниченного преследования.

Руководство по оптимизации

Стратегия может быть оптимизирована в следующих направлениях:

  1. Оптимизировать параметры полос Боллинджера для лучшего отслеживания цен.

  2. Попробуйте различные скользящие средние, такие как EMA, DWMA и т.д.

  3. Добавьте фильтрацию трендов, чтобы избежать торговли на рынках с диапазоном.

  4. Добавьте агрессивные методы выхода, чтобы получить больше прибыли от тренда.

  5. Ввести несколько временных рамок для комбинации, подходящих для различных рыночных условий.

  6. Добавьте дополнительные условия, такие как увеличение объема, чтобы избежать ложных прорывов.

  7. Рассмотрим обратные полосы Боллинджера, продажа верхней полосы, покупка нижней полосы.

  8. Оптимизация параметров для лучших комбинаций параметров.

Резюме

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


/*backtest
start: 2022-11-09 00:00:00
end: 2023-11-15 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © noro

//@version=4
strategy(title = "Noro's Bands Strategy", shorttitle = "Bands", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0, commission_value = 0.1)

//Sattings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
len = input(20, defval = 20, minval = 1, maxval = 1000, title = "Length")
src = input(ohlc4, title = "Source")
showbb = input(true, title = "Show Bands")
showof = input(true, title = "Show Offset")
showbg = input(false, title = "Show 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")

//PriceChannel
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
hd2 = center + distsma * 2
ld2 = center - distsma * 2

//Trend
trend = 0
trend := high > hd2 ? 1 : low < ld2 ? -1 : trend[1]
bgcol = showbg == false ? na : trend == 1 ? color.lime : color.red
bgcolor(bgcol, transp = 70)

//Lines
colo = showbb == false ? na : color.black
offset = showof ? 1 : 0
plot(hd2, color = colo, linewidth = 1, transp = 0, offset = offset, title = "High band 2")
plot(hd, color = colo, linewidth = 1, transp = 0, offset = offset, title = "High band 1")
plot(center, color = colo, linewidth = 1, transp = 0, offset = offset, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, offset = offset, title = "Low band 1")
plot(ld2, color = colo, linewidth = 1, transp = 0, offset = offset, title = "Low band 2")

//Trading
size = strategy.position_size
needstop = needlong == false or needshort == false
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
lot = 0.0
lot := size != size[1] ? strategy.equity / close * lotsize / 100 : lot[1]
if distsma > 0
    strategy.entry("Long", strategy.long, lot, stop = hd2, when = truetime and needlong)
    strategy.entry("Short", strategy.short, lot, stop = ld2, when = truetime and needshort)
sl = size > 0 ? ld2 : size < 0 ? hd2 : na
if size > 0 and needstop
    strategy.exit("Stop Long", "Long", stop = sl)
if size < 0 and needstop
    strategy.exit("Stop Short", "Short", stop = sl)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")

Больше