バッファー付きボリンジャーバンドボリュームオシレーター移動平均取引戦略


作成日: 2024-01-05 12:27:02 最終変更日: 2024-01-05 12:27:02
コピー: 1 クリック数: 566
1
フォロー
1621
フォロワー

バッファー付きボリンジャーバンドボリュームオシレーター移動平均取引戦略

概要

この戦略はブリン帯の指数と振動移動平均の指数に基づいて,価格チャネルを構築し,チャネルの上下境界の突破によって取引信号を発信する.それはブリン帯の自己適応性と振動指標の柔軟性を融合し,市場動向の変化をタイムリーに捉えることができる.

戦略原則

この策略はブリン帯中軌道と振動移動平均を用いて価格通路を構築する.中軌道は21周期のブリン中軌道,上軌道,下軌道をそれぞれ上下1パーセントの区間で延長する.振動移動平均は中軌道に基づいており,超買超売り領域で伸張または収縮する.価格が上軌道に突入したとき,多めにする.価格が下軌道に突入したとき,空っぽにする.

具体的には,ブリン中軌道の計算式は次のとおりです.

中轨 = N日收盘价的移动平均线 

上線と下線の計算式は

上轨 = 中轨 + WidthDev * 布林带N日标准差  
下轨 = 中轨 - WidthDev * 布林带N日标准差  

WidthDevは,上下に広がる割合を表します.

振動移動平均は中軌を基に,一定のルールに従って伸張または収縮する.市場が超買いまたは超売り状態に入ると,中軌からさらに外れ,それによって多額の空調の機会を拡大する.市場が静かになると,中軌に収縮する.

全体として,この戦略はブリン帯を通して価格通路を描画し,波動移動平均指標を使用して入場タイミングを判断し,突破取引を実現した.価格が上から上へブリンを突破するときに多めに行われ,価格が上から下へブリンを突破するときに空になります.

優位分析

  1. 市場の変動を反映する ブリン帯は,市場の波動性や変化傾向をリアルタイムで反映し,上下線は波動率の変化に応じて自律的に調整する.

  2. 偽信号を減らすために 振動移動平均指標は,の伸縮効果を介して,ブリン帯から発生する偽信号を効果的に減らすことができます.それはブリン帯通路の幅を大きくし,ポジションの保持時間を延長し,より多くの利潤を得ることができます.

  3. タイムリーでトレンドの逆転を捉える ブリン帯の上下軌道と振動移動平均の交差は,取引信号を発信するための時間と価格の優位性を提供し,これは重要な多頭と空頭調整を効果的に捕捉し,市場トレンドの逆転を間に合うように把握することができる.

リスク分析

  1. ブリン帯のパラメータ設定 ブリン帯のパラメータ,計算周期や標準差倍数などの設定が不適切である場合,上下軌道の間隔が大きすぎたり小さすぎたりして,大量の偽信号を生じ,戦略の安定性に影響する.

  2. 震源は,地震の大きさに 振動移動平均の振動幅が大きすぎると,ストップポイントが遠すぎることになり,損失のリスクが増加する.

  3. 遅刻する 市場が揺れ動いているか,明確なトレンドがないとき,ブリン帯と揺れ動いた移動平均指標からの取引信号は遅れており,価格の変化をタイムリーに反映できず,タイムリーに反転しないリスクを引き起こす可能性があります.

最適化の方向

  1. ブリン帯のパラメータを最適化
    異なる周期パラメータ,標準差倍数をテストし,信号頻度が最適で偽信号が少ないパラメータの組み合わせを選択することができる.

  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