ボラティリティバンドの反転に基づくボリンジャー定量戦略


作成日: 2023-11-22 17:44:40 最終変更日: 2023-11-22 17:44:40
コピー: 0 クリック数: 673
1
フォロー
1617
フォロワー

ボラティリティバンドの反転に基づくボリンジャー定量戦略

概要

この策略は,波動帯の逆転に基づくボリンジャー定量策略と呼ばれています. この策略は,ボリンジャー帯の上下軌道を利用して,買入判断を行います. 株価が波動帯の下軌道近くにあり,下方突破の兆候があるとき,株価が逆転のタイミングにある可能性があることを示すとき,購入します. 株価が波動帯の上下軌道近くまで上昇すると,株価が逆転する可能性があることを示すとき,販売します.

戦略原則

この策略は,RSI指標を使用して購入のタイミングを判断する.具体的には,近年の1バーの閉盘価格が前6バーの最低価格より低いかどうかを判断し,ブリン帯域幅 (BBW) が設定の値より大きく,ブリン帯域比率 (BBR) が設定の範囲にあることを判断する.これらの条件を満たせば,株価が逆転するタイミングにある可能性があることを示す.

エクジットは,RSIが70を超えると,株価が過熱していることを示し,平仓を販売する.

優位分析

この戦略の最大の利点は,ボリンジャー帯の上下軌道を利用して判断することであり,ブリン帯が反転すると,買入と売却を行うことで,短期的な反転の機会を掴むことができる.単純なRSI戦略と比較して,この戦略は,買入のタイミングを判断する上でより厳格であり,誤った取引の確率を避けることができる.

また,この戦略はパラメータに敏感であり,BBW,BBRのパラメータを調整して,異なる品種に対して最適化することで,よりよい効果が得られます.

リスク分析

この戦略の主なリスクは,ブリン帯は価格の逆転を100%予測できないことであり,タイミングが不適切であると判断されれば,最適な買い時を逃したり,仮想的な損失が生じやすいことにある.

さらに,株価の短期的な波動は,戦略が頻繁にポジションを開け,ポジションを平らにする,取引コストとスライドポイントコストを増加させる可能性がある.逆転が十分に強くない場合,負債を平らにするリスクがある.

最適化の方向

この戦略は以下の点で最適化できます.

  1. 最適化パラメータ.BBW,BBRなどのパラメータを,より細かい方法でテストし,最適化することができ,異なる取引品種に対して最適なパラメータを選択できます.

  2. 増減メカニズム.最大損失を制御するために移動停止または時間停止を設定できます.

  3. 他の指標と組み合わせます. KDJ,MACDなどの他の指標と組み合わせて,購入信号をより正確で信頼できるようにします.

  4. オプティマイズされた退出メカニズム.現在の退出メカニズムは単純で,適切な移動ストップを設定したり,変動状況に合わせて退出したりなど,最適化できます.

要約する

この戦略は,価格が逆転する可能性のあるタイミングを判断するために,ブリンガー帯の特性を利用し,買いと売却を行う. RSIなどの単一の指標と比較して,この戦略のタイミングを判断することはより正確である.パラメータの最適化とストップ,ストップの設定により,戦略をより信頼性のあるものにすることができる.しかし,ブリンガー帯の予測は完璧ではないので,戦略の実現の効果には一定のランダム性がある.

ストラテジーソースコード
/*backtest
start: 2022-11-15 00:00:00
end: 2023-11-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

//study(title = "Bolinger strategy", overlay=true)
strategy("Bolinger strategy",currency="SEK",default_qty_value=10000,default_qty_type=strategy.cash,max_bars_back=50)
len = 5
src = close
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))


bbw3level = input(15, title="bbw3")
bbr3level = input(0.45, title="bbr3level")
bbrlower = input(0.4480, title="bbrlower")
bbrhigher = input(0.4560, title="bbrhigher")
sincelowestmin = input(7, title="sincelowestmin")
sincelowestmax = input(57, title="sincelowestmax")


length = input(20, minval=1)
mult = 20
src3 = close[3]
basis3 = sma(src3, length)
dev3 = mult * stdev(src3, length)
upper3 = basis3 + dev3
lower3 = basis3 - dev3
bbr3 = (src3 - lower3)/(upper3 - lower3)
bbw3 = (upper3-lower3)/basis3*100


basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
bbr = (src - lower)/(upper - lower)
bbw = (upper-lower)/basis*100

criteriamet = 0
crossUnderB0 = crossunder(bbr,0)

since_x_under = barssince(crossUnderB0)


sincelowest = barssince(close[6] > close[3] and close[5] > close[3] and close[4] > close[3] and close[2] > close[3] and close[1] > close[3] and close > close[3] and bbw3 > bbw3level and bbr3 < bbr3level) //  and bbr3 < 0 

if sincelowest > sincelowestmin and sincelowest < sincelowestmax and bbr > bbrlower and bbr < bbrhigher
	criteriamet := 1
else
	criteriamet := 0	
//plot (criteriamet)

//exit 
exitmet = 0
if rsi > 70
	exitmet := 1
else
	exitmet := 0

if criteriamet == 1
	strategy.entry("long", strategy.long)
if exitmet == 1
	strategy.close("long")