В процессе загрузки ресурсов... загрузка...

Волновая стратегия FiboBuLL на основе прорыва полос Боллинджера

Автор:Чао Чжан, Дата: 2023-12-01 14:11:56
Тэги:

img

Обзор

Стратегия FiboBuLL Wave адаптирована из фильтрованной версии исследования Bollinger Bands, которое можно найти на странице моих сценариев.

Bollinger Bands - классический индикатор, который использует простую скользящую среднюю из 20 периодов, а также графики верхних и нижних полос, которые находятся в 2 стандартных отклонениях от средней полосы.

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

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

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

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

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

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

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

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

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

Стратегия FiboBuLL Wave имеет некоторые преимущества:

  1. Простая логика, основанная на взрыве BB, легко понять
  2. Чувствительность прорыва может контролироваться путем регулирования параметров
  3. BB-диапазоны визуализируют колебания и тенденции цен
  4. Может комбинироваться с другими показателями, повышать точность
  5. Применяется для нескольких временных рамок

Риски

Существуют также некоторые риски, которые следует отметить для стратегии FiboBuLL Wave:

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

Оптимизация может быть сделана в следующих аспектах:

  1. Добавить фильтры с использованием других индикаторов, чтобы избежать ложных сигналов
  2. Оптимизировать параметры на основе исторических данных
  3. Установка стоп-потери для ограничения максимальной потери
  4. Подумайте о добавлении факторов обратного действия для определения стойкости

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

Основные направления оптимизации для стратегии FiboBuLL Wave:

  1. Добавить показатели объема, например, линию A/D, чтобы избежать слабого прорыва
  2. Комбинировать показатели перекупленности/перепроданности, например, RSI для повышения точности
  3. Оптимизировать параметры, такие как период и множитель отклонения на основе результатов обратного теста
  4. Установите стоп-лосс и принимайте прибыль, чтобы контролировать риск и блокировать прибыль
  5. Рассмотрим фильтры тренда и обратного движения для определения направленной стойкости
  6. Испытание оптимальных параметров для различных продуктов и временных рамок

С помощью вышеуказанных улучшений стабильность и рентабельность стратегии FiboBuLL Wave могут быть значительно улучшены.

Резюме

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

Однако, полагаясь исключительно на прорыв, как правило, генерируются ложные сигналы и срывы. Следовательно, подтверждения с использованием объема, тенденций, индикаторов и т. Д. должны быть включены для определения надежности прорыва, при этом применяется стоп-лосс / take profit для контроля рисков, чтобы максимизировать полезность стратегии.

Стратегия FiboBuLL Wave обеспечивает базовую основу для разработки сделок, основанных на ценовом действии.


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

//@version=5
//@FiboBuLL

strategy(shorttitle='FB Wave', title='FiboBuLL Wave (A version of Bollinger Bands Breakout Strategy By Trade Chartist)', 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(21, minval=1, title='SMA 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')


// === 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')




















Больше