双ボリンガー帯波動性追跡戦略

作者: リン・ハーンチャオチャン, 日付: 2023-12-25 11:49:41
タグ:

img

概要

ダブルボリンガーバンド・ボラティリティ・トラッキング戦略 (Dual Bollinger Band Volatility Tracking strategy) は,トラッキングのためにダブルボリンガーバンドを構築することによって価格波動性を捕捉する定量的な取引戦略である.この戦略は,ボリンガーバンドの上下レールを活用して,リアルタイムで市場の波動性機会を捕捉する.

戦略原則

この戦略は,まずN日移動平均をベースラインとして計算し,次にボリンジャーバンドを構築するために標準偏差の倍数に基づいて上下線を計算する.この戦略は,上下線の両方が標準偏差の倍数であるダブルボリンジャーバンドを使用する.ダブルボリンジャーバンドが形成されると,価格は上下線を突破すると購入信号が起動し,価格が下下線を突破すると販売信号が起動し,ボリンジャーバンドの価格変動機会を捕捉する.

この戦略は,バックテストをよりTARGET化し,早期データによるテスト結果に影響を防ぐための時間窓を設定する. 戦略のワークフロー全体は:ダブルボリンジャーバンド,価格とレールのクロスオーバーを貿易信号として構築し,早期データからの影響を避けるための時間窓を設定する.

利点分析

この戦略の最大の利点は,オペレーション方向を決定するためにボリンジャーバンドの上下線を突破することで,リアルタイムで価格変動を把握できるということです.他の指標と比較して,ボリンジャーバンドは市場に対してより敏感に反応し,より短い時間以内に取引信号を形成することができます.また,ダブルボリンジャーバンドは,価格ブレイクの可能性がより大きいようにより広いチャネルを設定し,戦略によりより多くの取引機会を把握することができます.

リスク分析

この戦略の主なリスクは,ボリンジャーバンドを構成するN日間のパラメータ設定と標準偏差倍数にあります.パラメータが適切に設定されていない場合,ボリンジャーバンドが幅が幅が広いか狭すぎたりして,取引機会を逃したり,誤った信号を生成したりします.また,双方向取引にはストップロスは設定されていません.これは損失を拡大させることがあります.

解決策は,パラメータを最適化し,ボリンジャー帯の形をリアルタイムで評価すること.また,単一の損失を制御するために,歴史的なデータに基づいてストップ損失戦略を設定することです.

オプティマイゼーションの方向性

この戦略を最適化するための主な側面:

  1. ボリンジャー・バンドのパラメータを最適化し,N日間の期間と標準偏差の倍数を調整し,異なる市場の特徴に適したものにします.

  2. オーダー更新のメカニズムを増やし,元のオーダーから利益の一部が獲得された後に追加オーダーを出すため,利益空間を拡大する.

  3. ストップ・ロスの戦略を設定して,価格がボリンジャー・バンドの上下線を不向きに突破し,損失を制御するときにポジションを退場する.

  4. 他の指標を組み込み,シグナルをスクリーニングし,不安定な市場で誤ったシグナルを避ける.

結論

ダブル・ボリンガーバンド・ボラティリティ・トラッキング戦略は,二面ボリンガーバンドを構築することで,より短期間の取引機会を把握できるよう,リアルタイムで価格の波動性を捕捉する.この戦略の利点は,市場の変化に敏感性と高速な信号生成である.主なリスクは,不適切なパラメータ設定とストップロスの欠如から生じる.我々は多次元最適化によって戦略をより安定かつ効率的にすることができる.


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

//@version=3
strategy("BB_BB", overlay=true,default_qty_type=strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)
length = input(20, minval=1)
src = input(close, title="Source")
mult = input(2.0, minval=0.001, maxval=50)
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) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window
window() => true // create function "within window of time"


basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
plot(basis, color=red)
p1 = plot(upper, color=blue)
p2 = plot(lower, color=blue)
fill(p1, p2)

buy = crossover(sma(close,1), upper) or crossover(sma(close,1), lower)
sell = crossunder(sma(close,1), upper) or crossunder(sma(close,1), lower)

if(buy)
    strategy.entry("BUY", strategy.long, when = window())
if(sell)
    strategy.entry("SELL", strategy.short, when = window()) 

もっと