ダブルボリンジャーバンドオシレータートラッキング戦略


作成日: 2023-12-25 11:49:41 最終変更日: 2023-12-25 11:49:41
コピー: 0 クリック数: 661
1
フォロー
1623
フォロワー

ダブルボリンジャーバンドオシレータートラッキング戦略

概要

ダブルブリン帯の振動追跡戦略は,ダブルブリン帯を構成して,価格振動を追跡するための量化取引戦略である.この戦略は,ブリン帯の上下を活用して,市場の振動の機会をリアルタイムに捕捉する.

戦略原則

この戦略は,まずN日の均線を基準線として計算し,その後均線に基づいて標準差の数倍にしたがって上下線を計算してブリン帯を構成する.戦略は,上下線が標準差の数倍である二重ブリン帯を採用する.二重ブリン帯が形成された後,価格が上下線を突破したときに買入シグナルを発信し,価格が下下線を突破したときに売出シグナルを発信し,この方法でブリン帯の価格変動の機会を捕捉する.

この戦略は同時に時間窓を設定し,反測をより TARGET にし,前期データによるテストに影響を防ぐ.この戦略の全動作流程は,二重ブリンベルトを構成し,価格と軌道の交差を取引信号として設定し,前期データによる影響を防ぐために時間窓を設定する.

優位分析

この戦略の最大の利点は,価格の揺れをリアルタイムで捉え,ブリン帯の上下軌道突破によってOPERATIONの方向を判断できる点にある.他の指標と比較して,ブリン帯は市場に対する反応がより敏感であり,より短い時間で取引シグナルを形成することができる.さらに,ダブルブリン帯は,価格の突破の可能性が高く,より多くの取引機会を掴むことができるより広い通路を設けている.

リスク分析

この戦略の主なリスクは,ブリン帯を構成する依存のパラメータの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())