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

Автор:Чао Чжан, Дата: 2024-01-05 12:27:02
Тэги:

img

Обзор

Эта стратегия строит ценовой канал на основе индикатора Bollinger Bands и индикатора Momentum Oscillating Moving Average, генерируя торговые сигналы, когда цена проходит через верхнюю или нижнюю границу канала. Объединяя адаптивность Bollinger Bands и гибкость импульсных осцилляторов, он может своевременно реагировать на изменения рыночных тенденций.

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

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

В частности, средняя полоса Боллинджера рассчитывается как:

Middle Band = Moving Average of N-period closing price

Верхняя и нижняя полосы рассчитываются как:

Upper Band = Middle Band + WidthDev * N-period Bollinger standard deviation 
Lower Band = Middle Band - WidthDev * N-period Bollinger standard deviation

Где WidthDev представляет собой расширенный процентный диапазон вверх и вниз.

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

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

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

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

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

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

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

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

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

  3. Задержка обращения
    Когда рынок колеблется или не имеет тенденции, торговые сигналы от BB и Momentum Oscillating Moving Average могут отставать, не отражая изменения цен во времени, что вызывает риск задержки реверсии.

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

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

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

  3. Добавить условия фильтра Добавьте фильтры, такие как объемы торговли, основанные на перекрестных сигналах, чтобы исключить неэффективные торговые сигналы.

  4. Сочетание стратегий Комбинировать эту стратегию с другими стратегиями стоп-лосса или стратегиями машинного обучения для дальнейшего контроля рисков и повышения стабильности.

Резюме

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


/*backtest
start: 2022-12-29 00:00:00
end: 2024-01-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//                               Hull Cloud v2 by SEASIDE420
strategy("Hull Moving Average Cloud v2", shorttitle="hull_cloud_v2", overlay=true, commission_type=strategy.commission.percent, commission_value=0.075, default_qty_type=strategy.percent_of_equity, max_bars_back=200, default_qty_value=100, calc_on_order_fills= true, calc_on_every_tick=true, pyramiding=0)
hullperiod=input(title="HullMA Period",defval=210, minval=1)
Width=input(title="Cloud Width",defval=200, minval=2)
price=input(ohlc4,title="Price data")
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) 
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) 
FromYear = input(defval = 2017, title = "From Year", minval = 2017) 
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) 
ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) 
ToYear = input(defval = 9999, title = "To Year", minval = 2017)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) 
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) 
window() => true
n2ma=2*wma(price,round(hullperiod/2))
nma=wma(price,hullperiod)
diff=n2ma-nma
sqn=round(sqrt(hullperiod))
n2ma1=2*wma(price[1],round(hullperiod/2))
nma1=wma(price[1],hullperiod)
diff1=n2ma1-nma1
n1=wma(diff,sqn)
n2=wma(diff1,sqn)
Hull_Line=n1-n1[1]/n2[1]
Hull_retracted=if(n1>n2)
    Hull_retracted=Hull_Line-Width
else
    Hull_retracted=Hull_Line+Width
c1=(Hull_retracted*n1)/price[1] 
c2=(Hull_retracted*n2)/price[1]
c4=c1>c2?green:red
c2p=plot(c2, color=black, linewidth=1)
c3p=plot(price, color=black, linewidth=1)
fill(c3p, c2p, color=c4, transp=75)
plot(cross(c1, c2) ? c1 : na, style = circles,color=c4, linewidth = 4) 
if (price<c2)
    strategy.close("BUY", when=window())
if (price>c2)                       
    strategy.close("SELL", when=window())
if (price[1]>c2 and price[1]>c1)             
    strategy.entry("BUY",strategy.long, when=window())
if (price[1]<c1 and price[1]<c2)            
    strategy.entry("SELL",strategy.short, when=window())//           /L'-, 
//                               ,'-.      `   ````                 /  L '-, 
//     .                    _,--dMMMM\        `   ` ` '`..         /       '-, 
//     :             _,--,  )MMMMMMMMM),.      `     ,<>          /_      '-,' 
//     ;     ___,--. \MM(    `-'   )M//MM\          ,',.;      .-'* ;     .' 
//     |     \MMMMMM) \MM\       ,dM//MMM/     ___ < ,; `.      )`--'    / 
//     |      \MM()M   MMM)__   /MM(/MP'  ___, \  \ `  `. `.   /__,    ,' 
//     |       MMMM/   MMMMMM( /MMMMP'__, \     | /      `. `-,_\     / 
//     |       MM     /MMM---' `--'_ \     |-'  |/         `./ .\----.___ 
//     |      /MM'   `--' __,-  \""   |-'  |_,               `.__) . .F. )-. 
//     |     `--'       \   \    |-'  |_,     _,-/            J . . . J-'-. `-., 
//     |         __  \`. |   |   |         \    / _           |. . . . \   `-.  F 
//     |   ___  /  \  | `|   '      __  \   |  /-'            F . . . . \     '` 
//     |   \  \ \  /  |        __  /  \  |  |,-'        __,- J . . . . . \ 
//     |    | /  |/     __,-  \  ) \  /  |_,-     __,--'     |. .__.----,' 
//     |    |/    ___     \    |'.  |/      __,--'           `.-;;;;;;;;;\ 
//     |     ___  \  \     |   |  `   __,--'                  /;;;;;;;;;;;;. 
//     |     \  \  |-'\    '    __,--'                       /;;;;;;;;;;;;;;\ 
// \   |      | /  |      __,--'                             `--;;/     \;-'\ 
//  \  |      |/    __,--'                                   /  /         \  \ 
//   \ |      __,--'                                        /  /           \  \ 
//    \|__,--'                                          _,-;M-K,           ,;-;\ 
//                                                     <;;;;;;;;           '-;;;; 
//                                                                                  :D

Больше