
波リンガー帯の突破と波動率のフィルタリング戦略は,波リンガー帯の指標に基づいた取引戦略である.それは,波リンガーをもたらす移動平均の位置と波動性に対する価格の判断を利用して,ポジションの開設と開設を決定する.この戦略の独特な点は,それが波動率のフィルタを採用し,連続したK線の落を検知することで,市場波動が大きいときに入場取引を避けるという点である.さらに,この戦略は,利益を保護し,リスクを制御するために,停止と損失の条件を設定している.
この戦略の核心は,ポリンガー帯の指標を計算することである.ポリンガー帯は3つの線で構成される:中軌は単純な移動平均であり,上軌と下軌はそれぞれ中軌の基礎に一定の標準差を加減する.標準差の大きさは,パラメータmultによって制御される.
策略の開設条件は,閉盤価格がポーリング帯に対する位置に基づいています.取引方向が多値に設定され (tradeDirection>=0),閉盤価格が下落した一定比率 (lower_breakout_pct) があれば,多ポジションを開設します.取引方向が空値に設定され (tradeDirection<=0),閉盤価格が上落した一定比率 (upper_breakout_pct) があれば,空ポジションを開設します.ここでの突破比率パラメータは,価格がポーリング帯をわずかに突破することを許可して,トレンドを確認します.
一方,連続した2つのK線の落が予測される変動率の値 ((Volatility)) を超えた場合,現在の市場の波動が大きいと判断し,戦略は新規ポジションを開かない.この変動率フィルターは,激しく波動する市場環境を一定程度に回避することができる.
平仓では,多頭ポジションの閉盘価格が上線近くに触れた場合,*long_win_pct),または空頭ポジションのクローズオフ価格が下線近くに触れた場合*short_win_pct),戦略は,相応のポジションを平らにして利益を得て終了する.さらに,ポジションの浮動損失が,既定の最大引き下げ比率 (max_drawdown_percent) を超える場合,戦略は平らしてポジションを停止する.
ポーリング帯は,成熟し,広く使用されている技術指標で,移動平均と価格の変動性の情報を融合している.ポーリング帯を使用して,トレード戦略を策定し,傾向と変動の変化を捉えることができます.
この戦略は,開多と開空の論理を同時に含み,多空の双方向市場での機会を柔軟に把握することができる.ポーリング帯の突破点の設定は,戦略のエントリーポイントをより肯定的にする.
波動率のフィルターは,激しい波動の市場の下でのポジション開設を避け,頻繁に取引とレバレッジのリスクを一定程度軽減します.
戦略は,ストップ・ストップ・ストップ・メカニズムを採用し,ポジションを主動的にコントロールし,価格が重要な位置に逆戻りしたときに平仓する.これは,利益を保護し,逆戻り制御するのに役立ちます.
ボリンガー帯は本質的に後退指数であり,市場の反応に一定の遅れがある.トレンド転換またはトレンドの変化の重要な瞬間に,戦略は最適な入場時間を逃す可能性があります.
策略のパラメータ設定は,異なる市場状況に必ずしも適用されるわけではない.例えば,波動率フィルターの値設定は,トレンド型と震動型の状況で違いが必要になるかもしれない.固定パラメータは,策略が特定の状況でポジションを開くことができないか,またはポジションを開く頻度があまりにも高い原因になるかもしれない.
ストップ・ロスの策略があるが,市場が空飛ぶ隙間が発生すると,策略は既定の価格で取引できない可能性があり,さらに大きな損失を招く.
戦略は,ポジション開設後,移動ストップまたは追跡ストップを設定していないため,利益の一部を回転させる可能性があります.
戦略のフィルタリング条件として,ポジション開設の質とタイミングを向上させるために,より多くの技術指標や市場状況判断,例えばATR,トレンド指標,波動率指標などの導入を検討することができます.
波動率フィルターについては,動的値を採用し,異なる品種または異なる時間周期に応じて自律的に調整して,フィルタリングの効果を向上させることができます.
ストップ・ストップの側面では,移動ストップまたはストップを追跡するメカニズムを導入することができ,戦略がトレンドが継続するときにポジションを保持するようにし,早々に平仓をしないようにする.また,異なるストップ・ストップの比率を設定し,リスク・利益比率を最適化することも考えることができます.
ポジション管理をさらに最適化して,トレンドの強さ,波動率,リスク度などの指標の動向に応じてポジション開設比率を調整し,撤収を制御することができる.さらに,ポジション加減などの操作によって資金のよりよい利用が可能である.
ボリンガー帯のブレイクと波動率フィルタリング戦略は,価格位置と波動性のボリンガー帯の図を描き,双方向取引戦略を構築する.この戦略のユニークな点は,波動率フィルタは,急激に波動する市場での取引を避け,比較的単純なストップ・ロスの条件を設定していることである.全体的に見ると,この戦略は,開拓ポジションの論理とリスク管理をより完全に含んでいるが,市場変化,パラメータの適用性,ストップ・ロスの効果などに関してさらなる最適化の余地がある.
/*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")