Стратегия FiboBuLL Wave адаптирована из фильтрованной версии исследования Bollinger Bands, которое можно найти на странице моих сценариев.
Bollinger Bands - классический индикатор, который использует простую скользящую среднюю из 20 периодов, а также графики верхних и нижних полос, которые находятся в 2 стандартных отклонениях от средней полосы.
Стратегия не учитывает никаких других параметров, таких как объем / RSI / фундаментальные и т. д., поэтому пользователь должен использовать свое усмотрение на основе подтверждений от других индикаторов или фундаментальных показателей.
Это работает лучше всего, когда есть продолжение бар после того, как цена закрывается выше / ниже верхних / нижних полос.
Стратегия может использоваться на свечах Хайкина Аши для выявления тенденций, но свечи HA не рекомендуются для записей в торговые записи, поскольку они не отражают истинную цену актива.
Основная логика стратегии FiboBuLL Wave заключается в том, чтобы торговать на основе прорыва полос Боллинджера. Полосы Боллинджера состоят из средней полосы, верхней полосы и нижней полосы. Средняя полоса представляет собой 21-периодную простую скользящую среднюю цену закрытия; верхняя полоса рассчитывается путем добавления 1 стандартного отклонения выше средней полосы, отражающего верхний диапазон колебаний цен; нижняя полоса получена путем вычитания 1 стандартного отклонения ниже средней полосы, отражающего нижний диапазон движения цен.
Долгий сигнал генерируется, когда цена закрытия превышает верхнюю полосу; короткий сигнал запускается, когда цена закрытия превышает нижнюю полосу. После занятия длинных или коротких позиций существующие сделки будут закрыты, когда цена снова превышает противоположную полосу.
Стратегия использует функцию barssince для отслеживания прорыва цены относительно верхней и нижней полос. Длинный сигнал генерируется, когда количество баров с момента прорыва верхней полосы меньше, чем число нижней полосы. Короткий сигнал запускается, когда количество баров с момента прорыва нижней полосы меньше, чем число верхней полосы.
С помощью корректировки среднего периода диапазона и параметров множителя стандартного отклонения может быть изменена чувствительность прорыва диапазонов Боллинджера, что позволяет скорректировать время входа.
Стратегия FiboBuLL Wave имеет некоторые преимущества:
Существуют также некоторые риски, которые следует отметить для стратегии FiboBuLL Wave:
Оптимизация может быть сделана в следующих аспектах:
Основные направления оптимизации для стратегии FiboBuLL Wave:
С помощью вышеуказанных улучшений стабильность и рентабельность стратегии 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')