Стратегия сигнала флуктуации полосы Бора


Дата создания: 2024-01-15 15:16:27 Последнее изменение: 2024-01-15 15:16:27
Копировать: 0 Количество просмотров: 553
1
Подписаться
1617
Подписчики

Стратегия сигнала флуктуации полосы Бора

Обзор

Bollinger Wave Strategy - это количественная торговая стратегия, которая объединяет в себе Bollinger Wave и движущуюся среднюю. Она создает торговый сигнал, рассчитывая стандартную разницу в Bollinger Wave и перекрестный сигнал движущейся средней, чтобы определить рыночные тенденции и зоны сверхпокупок и сверхпродаж.

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

Эта стратегия сначала рассчитывает индексную движущуюся среднюю ((EMA) в течение заданного периода в качестве базовой линии. Затем на основе этой EMA рассчитывается верхняя линия ((EMA + n-кратная стандартная разница) и нижняя линия ((EMA - n-кратная стандартная разница).

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

В частности, правила определения торговых сигналов в этой стратегии следующие:

  1. Многоголовый сигнал: закрытие цены> верхняя линия и RSI ((14)> 60
  2. Пустой сигнал: закрытие цены < нижняя линия и RSI ((14) < 40

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

Стратегические преимущества

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

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

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

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

Основные риски, связанные с этой стратегией:

  1. Риск оптимизации параметров. Если параметры скользящей средней или кратность стандартной разницы установлены неправильно, это приводит к более шумным сделкам или пропущенным торговым возможностям. Эти параметры требуют повторного тестирования и оптимизации.

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

  3. Риск частоты сделок. Если разрыв между верхней и нижней линиями рельсов слишком мал, то увеличивается количество сделок и выплата комиссий. Это может иметь определенное влияние на конечную прибыль.

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

Однако есть еще много возможностей для дальнейшей оптимизации этой стратегии:

  1. Увеличение механизма остановки убытков. Создание подвижного или временного остановки убытков, помогающего своевременному остановке убытков и контролю одиночных убытков.

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

  3. В сочетании с другими показателями фильтруют сигналы. Такие показатели, как KDJ, MACD и другие, могут быть использованы в качестве вспомогательных сигналов для суждения. Это способствует дальнейшему повышению доходности стратегии.

  4. Оптимизация параметров. Можно использовать более системные методы, такие как генетические алгоритмы для тестирования комбинаций параметров, чтобы найти лучшие параметры.

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

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

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

//@version=5
//@FiboBuLL

strategy(shorttitle='FB Wave', title='FiboBuLL Wave', overlay=true, pyramiding=1, currency=currency.NONE, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

src = input(close, title='Source')
length = input.int(55, minval=1, title='EMA length')  // 20 for classis Bollinger Bands SMA line (basis)


mult = input.float(1., minval=0.236, maxval=2, title='Standard Deviation')  //2 for Classic Bollinger Bands //Maxval = 2 as higher the deviation, higher the risk
basis = ta.sma(src, length)
dev = mult * ta.stdev(src, length)

Show = input.string('Both', options=['Longs Only', 'Shorts Only', 'Both'], title='Trade Type')
CC = input(true, 'Color Bars')

upper = basis + dev
lower = basis - dev

//Conditions for Long and Short - Extra filter condition can be used such as RSI or CCI etc.

short = src < lower  // and rsi(close,14)<40
long = src > upper  // and rsi(close,14)>60

L1 = ta.barssince(long)
S1 = ta.barssince(short)

longSignal = L1 < S1 and not (L1 < S1)[1]
shortSignal = S1 < L1 and not (S1 < L1)[1]

//Plots and Fills


////Long/Short shapes with text
// plotshape(S1<L1 and not (S1<L1)[1]?close:na, text = "sᴇʟʟ", textcolor=#ff0100, color=#ff0100, style=shape.triangledown, size=size.small, location=location.abovebar, transp=0, title = "SELL", editable = true)
// plotshape(L1<S1 and not (L1<S1)[1]?close:na, text = "ʙᴜʏ", textcolor = #008000, color=#008000, style=shape.triangleup, size=size.small, location=location.belowbar, transp=0, title = "BUY", editable = true)  

// plotshape(shortSignal?close:na, color=#ff0100, style=shape.triangledown, size=size.small, location=location.abovebar, transp=0, title = "Short Signal", editable = true)
// plotshape(longSignal?close:na, color=#008000, style=shape.triangleup, size=size.small, location=location.belowbar, transp=0, title = "Long Signal", editable = true)  


p1 = plot(upper, color=color.new(#ff0000, 75), display=display.all, title='Upper Band')
p2 = plot(lower, color=color.new(#008000, 75), display=display.all, title='Lower Band')

p = plot(basis, color=L1 < S1 ? #008000 : S1 < L1 ? #ff0000 : na, linewidth=2, editable=false, title='Basis')

fill(p, p1, color=color.new(color.teal, 85), title='Top Fill')  //fill for basis-upper
fill(p, p2, color=color.rgb(217, 161, 161), title='Bottom Fill', transp=85)  //fill for basis-lower

//Barcolor

bcol = src > upper ? color.new(#8ceb07, 0) : src < lower ? color.new(#ff0000, 0) : src > basis ? color.green : src < basis ? color.red : na

barcolor(CC ? bcol : na, editable=false, title='Color Bars')


// //Alerts ----  // Use 'Once per bar close'

// alertcondition(condition=longSignal, title="Long - BB Filter", message='BB Filter Long @ {{close}}') // Use 'Once per bar close'
// alertcondition(condition=shortSignal, title="Short - BB Filter", message='BB Filter Short @ {{close}}')  // Use 'Once per bar close'

Notestart1 = input(true, '╔═══ Time Range to BackTest ═══╗')

// === INPUT BACKTEST RANGE ===
FromMonth = input.int(defval=1, title='From Month', minval=1, maxval=12)
FromDay = input.int(defval=1, title='From Day', minval=1, maxval=31)
FromYear = input.int(defval=2018, title='From Year', minval=2015)
ToMonth = input.int(defval=1, title='To Month', minval=1, maxval=12)
ToDay = input.int(defval=1, title='To Day', minval=1, maxval=31)
ToYear = input.int(defval=9999, title='To Year', minval=2010)

// === FUNCTION EXAMPLE === 
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)  // backtest finish window
window() =>
    time >= start and time <= finish ? true : false

if window() and (Show == 'Longs Only' or Show == 'Both')
    strategy.entry('AL', direction=strategy.long, when=longSignal)
    strategy.close('LongAL', when=shortSignal, comment='AL KAPA')

if window() and (Show == 'Shorts Only' or Show == 'Both')
    strategy.entry('SAT', direction=strategy.short, when=shortSignal)
    strategy.close('SAT', when=longSignal, comment='SAT KAPA')