Стратегия снижения тенденции BB процентного индекса

Автор:Чао Чжан, Дата: 2023-12-06 14:43:39
Тэги:

img

Обзор

Эта стратегия основана на процентном индексе BB в сочетании с индикаторами RSI и МФИ. Она принимает длинные и короткие решения путем обнаружения ценового прорыва верхней и нижней рельсов полос Боллинджера, а также сигналов перепроданности / перекупки RSI и сигналов перепроданности / перекупки МФИ. Это типичная стратегия торговли с ослаблением тренда.

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

  1. Расчет Bollinger Band Percentage (BB%). BB% представляет собой стандартное отклонение цены относительно средней полосы Боллинджера, которая определяет направление рынка через канал Боллинджера.
  2. Включить показатели РСИ и МФИ для определения условий перекупки и перепродажи. РСИ сравнивает среднюю прибыль и средний убыток за определенный период времени для определения уровня перекупки и перепродажи. МФИ сравнивает объем и объем снижения для определения уровня перекупки и перепродажи.
  3. Когда цена проходит через нижний рельс Боллинджера вверх, идите в длинный; когда цена проходит через верхний рельс Боллинджера вниз, идите в короткий.

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

  1. Торговля с уменьшением тренда позволяет избежать рыночных тенденций и уменьшить колебания прибыли.
  2. Сочетание нескольких индикаторов фильтрует сигналы и улучшает точность принятия решений.
  3. Параметризированные параметры являются гибкими для корректировки характеристик риска и доходности стратегии.
  4. Применимо к очень волатильным инструментам, таким как сырьевые товары, валюта, криптовалюты и т.д.

Риски и решения

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

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

  1. Включать механизмы остановки потерь, основанные на волатильности, такие как индикатор ATR.
  2. Внедрение моделей машинного обучения для оценки качества сигналов прорыва.
  3. Оптимизировать механизмы выбора инструментов для динамической корректировки участвующих инструментов.
  4. Включите больше факторов, таких как показатели настроения, новости и т. Д., Чтобы улучшить основу для принятия решений.

Заключение

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


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

//Noro
//2018

//@version=2
strategy(title = "BB%/MFI/RSI", shorttitle = "BB%/MFI/RSI", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 100)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
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")

source = hlc3
length = input(14, minval=1), mult = input(2.0, minval=0.001, maxval=50), bblength = input(50, minval=1, title="BB Period")
DrawRSI_f=input(true, title="Draw RSI?", type=bool)
DrawMFI_f=input(false, title="Draw MFI?", type=bool)
HighlightBreaches=input(true, title="Highlight Oversold/Overbought?", type=bool)

DrawMFI = (not DrawMFI_f) and (not DrawRSI_f) ? true : DrawMFI_f
DrawRSI = (DrawMFI_f and DrawRSI_f) ? false : DrawRSI_f
// RSI
rsi_s = DrawRSI ? rsi(source, length) : na
plot(DrawRSI ? rsi_s : na, color=maroon, linewidth=2)

// MFI
upper_s = DrawMFI ? sum(volume * (change(source) <= 0 ? 0 : source), length) : na
lower_s = DrawMFI ? sum(volume * (change(source) >= 0 ? 0 : source), length) : na
mf = DrawMFI ? rsi(upper_s, lower_s) : na
plot(DrawMFI ? mf : na, color=green, linewidth=2)

// Draw BB on indices
bb_s = DrawRSI ? rsi_s : DrawMFI ? mf : na
basis = sma(bb_s, length)
dev = mult * stdev(bb_s, bblength)
upper = basis + dev
lower = basis - dev
plot(basis, color=red)
p1 = plot(upper, color=blue)
p2 = plot(lower, color=blue)
fill(p1,p2, blue)

b_color = (bb_s > upper) ? red : (bb_s < lower) ? lime : na
bgcolor(HighlightBreaches ? b_color : na, transp = 0)

//Signals
up = bb_s < lower and close < open
dn = bb_s > upper and close > open
size = strategy.position_size
lp = size > 0 and close > open
sp = size < 0 and close < open
exit = (up == false and dn == false) and (lp or sp)

//Trading
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if up
    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 dn
    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()

Больше