波動性フィルター戦略でボリンジャーバンドのブレイク

作者: リン・ハーンチャオチャン開催日:2024-03-08 15:28:05
タグ:

img

戦略の概要

ボリンジャーバンドス・ブレイクアウト・ウィズ・ボラティリティ・フィルター戦略 (Bollinger Bands Breakout with Volatility Filter Strategy) は,ボリンジャーバンドス・インジケーターをベースとした取引戦略である.ボリンジャーバンドスを利用して移動平均値との関係で価格の位置と変動を決定し,それによってエントリー・エグジット・ポイントを決定する.この戦略のユニークな側面は,波動性フィルターを採用することで,連続したキャンドルストークの変化率を検知することで,高い市場の波動性中に取引に入るのを避けることである.さらに,戦略は利益を保護し,リスクを制御するために利益を得たり損失を停止したりするための条件を設定する.

戦略の原則

戦略の核心はボリンジャーバンド指標の計算である.ボリンジャーバンドは3つの線で構成される.中間線は単純な移動平均線であり,上部と下部帯は,それぞれ中間線の上,下部で一定の標準偏差で設定されている.標準偏差の大きさはパラメーターマルトによって制御される.

戦略のエントリー条件は,ボリンジャーバンドに対する閉じる価格の位置に基づいています.取引方向がロング (tradeDirection>=0) に設定され,閉じる価格が下帯より一定パーセント (lower_breakout_pct) 弱くなると,ロングポジションが開かれます.取引方向がショート (tradeDirection<=0) に設定され,閉じる価格が上帯より一定パーセント (upper_breakout_pct) 弱くなると,ショートポジションが開かれます.ブレイクポイントパラメータにより,トレンドを確認するポジションに入る前に価格がボリンジャーバンドをわずかに突破できます.

一方,2つの連続したキャンドルスタイクの変動率が既定の変動値 (Volatility) を上回る場合,現在の市場の変動は高く考えられ,戦略は新しいポジションを開くことはできません.この変動フィルターは,非常に不安定な市場条件で取引を一定程度避けることができます.

ローングポジションの閉じる価格が上位帯 (上位領域) に近ければ,long_win_pct),またはショートポジションの閉じる価格が下帯 (lower+area) の近くに達します.short_win_pct),戦略は相応のポジションを閉じ,利益を得ます.さらに,ポジションの実現されていない損失が,事前に設定された最大引き下げパーセント (max_drawdown_percent) を超えると,戦略はまた,ポジションを閉じ,損失を停止します.

戦略 の 利点

  1. ボリンジャーバンドは,移動平均値と価格変動に関する情報を組み込む成熟し,広く使用されている技術指標である.ボリンジャーバンドを使用して取引戦略を策定することで,トレンドと変動の変化を把握することができます.

  2. この戦略には,長期と短期のエントリーロジックの両方が含まれており,バリーシードとベアシードの両方の市場における機会を柔軟に捉えることができます.ボリンジャーバンドのブレイクアウトポイントの設定により,戦略のエントリーポイントはより確認されます.

  3. 波動性フィルターは,非常に波動性の高い市場でポジションを開設することを避け,頻繁な取引とレバレッジに関連するリスクを一定程度削減します.

  4. この戦略は,ポジションを積極的に管理し,価格がキーレベルに戻ったときにそれらを閉鎖するために,利益とストップロスのメカニズムを使用します.これは利益を保護し,引き下げを制御するのに役立ちます.

戦略リスク

  1. ボリンジャー帯は本質的に遅れの指標であり,市場への反応に一定の遅れがあります.トレンドの逆転や市場の状況の変化の重要な瞬間に,戦略は最高のエントリータイミングを逃す可能性があります.

  2. 戦略のパラメータ設定は,異なる市場条件に普遍的に適用できない場合があります.例えば,トレンドと振動する市場で変動フィルターの値設定を差別する必要がある場合があります.固定パラメータは,戦略が特定の市場条件でポジションを開くことができず,または頻繁に開くことを引き起こします.

  3. ストップ・ロスの対策はありますが,市場がギャップすると,戦略は既定価格で実行できず,損失が増える可能性があります.

  4. この戦略では,ポジションを開いた後にストップ・ロスを設定したり,ブレイク・イベンス・ストップを設定したりしない.これは,一部の利益の返還につながる可能性がある.

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

  1. ATR,トレンド指標,波動性指標などより多くの技術指標や市場状況判断を導入することを検討し,エントリの質とタイミングを改善するための戦略のフィルタリング条件として.

  2. 波動性フィルターについては,フィルタリングの効率を向上させるために,異なるツールや時間枠に適応する動的値を採用してみてください.

  3. ストップ・ロストとテイク・プロフィートの観点から,トレンドが継続するときにポジションを保持する戦略を可能にするために,トレーリング・ストップまたはブレイク・イブン・ストップメカニズムを導入します.同時に,リスク・リターン比率を最適化するために異なるストップ・ロストとテイク・プロフィート比率を設定することを検討します.

  4. トレンド強度,変動,リスクレベル,および他の指標に基づいてエントリーサイズを動的に調整することで,ポジション管理をさらに最適化し,引き下げを制御します.さらに,ポジションを追加および削減などの操作を通じて資本をよりよく利用します.

概要

波動性フィルターストラテジーは,ボリンジャーバンドによる価格ポジションと波動性の特徴づけを活用し,双方向取引戦略を構築する.この戦略のユニークな側面は,非常に波動性の高い市場で取引を避ける波動性フィルターであり,比較的単純な利益とストップ・ロスの条件を設定する.全体として,戦略にはかなり包括的なエントリー&エグジットロジックとリスク制御が含まれていますが,市場の変化に適応する,パラメータ適用性,ストップ・ロスの有効性に関してさらなる最適化のための余地があります.より多くの技術指標,ダイナミックパラメーター,ポジション管理最適化が導入されれば,戦略の安定性と収益性が向上する可能性があります.


/*backtest
start: 2024-02-29 00:00:00
end: 2024-03-07 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("[Oppen Chow] Super BBS 1.0", default_qty_type = strategy.percent_of_equity, default_qty_value =100, initial_capital=500, commission_type=strategy.commission.percent, commission_value=0.08, pyramiding=2 )

// Input parameters
length = 20
mult = 2
max_drawdown_percent = input(5.5, "Maximum Acceptable Drawdown") / 100
upper_breakout_pct = input(50, "Short Entry Breakout Percentage") / 100
lower_breakout_pct = input(25, "Long Entry Breakout Percentage") / 100
tradeDirection = input(1, title="Trade Direction")
Volatility = input(0.5, title="Volatility") / 100
long_win_pct = input(-0.15, title = "Long Settlement Rate Near Boll Upper Limit")
short_win_pct = input(0.4, title = "Short Settlement Rate Near Boll Lower Limit")

// Bollinger Bands calculation
basis = ta.sma(close, length)
dev = mult * ta.stdev(close, length)
upper = basis + dev
lower = basis - dev
area = upper - lower

// Calculate the rate of change for two consecutive candlesticks
var float change1 = na
var float change2 = na
change1 := change2
change2 := ((close - open) / open) 

// Check for two or more consecutive candlesticks with a change rate greater than 0.5%
var bool highVolatility = false
highVolatility := change2 > Volatility

// Trading logic
var float highestPriceSinceOpen = na
var float lowestPriceSinceOpen = na
var int profitableDrawbackCount = 1


// Entry logic - In the absence of high volatility
if not highVolatility and strategy.position_size == 0
    if (tradeDirection >= 0) and (close < lower - area * lower_breakout_pct)
        strategy.entry("Long", strategy.long)
        highestPriceSinceOpen := close
        profitableDrawbackCount := 0
    if (tradeDirection <= 0) and (close > upper + area * upper_breakout_pct)
        strategy.entry("Short", strategy.short)
        lowestPriceSinceOpen := close
        profitableDrawbackCount := 0


if strategy.position_size > 0 and close > upper - area * long_win_pct
    strategy.close("Long", comment = "Take Profit")
if strategy.position_size < 0 and close < lower + area * short_win_pct
    strategy.close("Short", comment = "Take Profit")

// Stop loss logic - Based on drawdown percentage
if strategy.position_size > 0
    if (strategy.position_avg_price - close)/strategy.position_avg_price >= max_drawdown_percent
        strategy.close("Long", comment = "Drawdown Stop Loss")
else if strategy.position_size < 0
    if (close - strategy.position_avg_price)/strategy.position_avg_price >= max_drawdown_percent
        strategy.close("Short", comment = "Drawdown Stop Loss")


もっと