ボリンジャー・バンド・ブレークアウト戦略 VWAP ベース

作者: リン・ハーンチャオチャン, 日付: 2024-02-06 14:36:26
タグ:

img

概要

この戦略は,ボリンジャーバンドを使用してVWAPを追跡する.VWAPが中間帯を超えるとロングポジションを採用し,VWAPが下帯を超えるとポジションを閉じる.ピボットポイントは,誤ったブレイクを避けるためにエントリーのための補助信号としても使用される.

戦略の論理

  1. VWAPを計算する
  2. ローナンス・レジスタンス (ローナンス・レジスタンス)
  3. VWAPが中間帯を突破し,価格がピボットポイントを上回るとロングポジションを取ります
  4. ストップロスを 5%に設定します
  5. VWAPが下帯を下回る場合は,ロングポジションを閉じる.ストップ・ロスは起動すると,退場する.

利点分析

  1. VWAPは強いトレンド追跡能力を持っています.BBではトレンド開始を正確に識別します.
  2. ピボットポイントを追加することで 誤ったブレイクをフィルタリングして 不必要な損失を回避できます
  3. 部分的な出口 利益のロックとリスクのコントロール
  4. バックテストは,良い安定性のある牛市で優れたパフォーマンスを示しています.

リスク分析

  1. 範囲限定市場での偽のブレイクによる損失に易しい.
  2. ピボット・ポイントは 偽信号を完全に回避できない.より多くのフィルターが必要です.
  3. 取引頻度が増加すると 取引コストが上がります
  4. 負債市場ではうまくいかない リスク管理が要る

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

  1. MACD,KDJのような指標をシグナルにフィルターします.
  2. バックテストで BB パラメータを最適化
  3. BBパラメータを動的に最適化するために 機械学習を使用します
  4. 最適値を見つけるために 異なるストップ損失レベルをテストします
  5. 市場波動に基づいて 適応的な利益を取ること

結論

アルゴリズム取引に適した安定したブレークアウトシステム.リスク管理に注意が必要です.さらなる研究と最適化により,優れたブレークアウト戦略になり得ます.


/*backtest
start: 2024-01-06 00:00:00
end: 2024-02-05 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ediks123

//@version=4
strategy("BBofVWAP with entry at Pivot Point", overlay=false, pyramiding=1,   default_qty_type=strategy.percent_of_equity,  default_qty_value=20, initial_capital=10000, currency=currency.USD)  //default_qty_value=10, default_qty_type=strategy.fixed,

// Function outputs 1 when it's the first bar of the D/W/M/Y
is_newbar(res) =>
    ch = 0
    if(res == 'Y')
        t  = year(time('D'))
        ch := change(t) != 0 ? 1 : 0
    else
        t = time(res)
        ch := change(t) != 0 ? 1 : 0
    ch


//variables BEGIN
//smaLength=input(200,title="Slow MA Length")

bbLength=input(50,title="BB Length")  
//bbsrc = input(close, title="BB Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)

pp_period = input(title = "Pivot Period", type=input.string, defval="Week", options = ['Day', 'Week'])

pp_res = pp_period == 'Day' ? 'D' : pp_period == 'Week' ? 'W' : pp_period == 'Month' ? 'M' : 'Y' 

riskCapital = input(title="Risk % of capital", defval=10, minval=1)
stopLoss=input(5,title="Stop Loss",minval=1)



//sma200=sma(close,smaLength)
//plot(sma200, title="SMA 200", color=color.orange)

myVwap=vwap(hlc3)

//bollinger calculation
basis = sma(myVwap, bbLength)
dev = mult * stdev(myVwap, bbLength)
upperBand = basis + dev
lowerBand = basis - dev

//plot bb
plot(basis, "Basis", color=color.teal, style=plot.style_circles , offset = offset)
p1 = plot(upperBand, "Upper", color=color.teal, offset = offset)
p2 = plot(lowerBand, "Lower", color=color.teal, offset = offset)
fill(p1, p2, title = "Background", color=color.teal, transp=95)

plot(myVwap, title="VWAP", color=color.purple)


//pivot points 


// Calc High
high_cur = 0.0
high_cur := is_newbar(pp_res) ? high : max(high_cur[1], high)

phigh = 0.0
phigh := is_newbar(pp_res) ? high_cur[1] : phigh[1]

// Calc Low
low_cur = 0.0
low_cur := is_newbar(pp_res) ? low : min(low_cur[1], low)

plow = 0.0
plow := is_newbar(pp_res) ? low_cur[1] : plow[1]

// Calc Close
pclose = 0.0
pclose := is_newbar(pp_res) ? close[1] : pclose[1]


vPP = (phigh + plow + pclose) / 3

//pivot points


//Entry--
//Echeck how many units can be purchased based on risk manage ment and stop loss
qty1 = (strategy.equity  * riskCapital / 100 ) /  (close*stopLoss/100)  

//check if cash is sufficient  to buy qty1  , if capital not available use the available capital only
qty1:= (qty1 * close >= strategy.equity ) ? (strategy.equity / close) : qty1


strategy.entry(id="BB_VWAP_PP",long=true, qty=qty1, when=   crossover(myVwap,basis)  and close>=vPP  )

bgcolor(strategy.position_size>=1?color.blue:na, transp=75)
barcolor(strategy.position_size>=1?color.green:na)

stopLossVal=  strategy.position_size>=1 ?  close * (1 - (stopLoss*0.01) ) : 0.00

//partial exit
//strategy.close(id="BBofVwap", qty=strategy.position_size/3, when=crossunder(myVwap,upperBand) and strategy.position_size>=1 )  //and close>strategy.position_avg_price)



//exit on lowerband or stoploss 
strategy.close(id="BB_VWAP_PP", comment="P" , qty=strategy.position_size/3, when= crossunder(myVwap,upperBand) and strategy.position_size>=1 and close>strategy.position_avg_price)  //
strategy.close(id="BB_VWAP_PP", comment="Exit All", when=crossunder(myVwap,lowerBand) and strategy.position_size>=1 )
//strategy.close(id="BBofVwapWithFibPivot", comment="Exit All", when=crossunder(close,vPP) and strategy.position_size>=1 )

strategy.close(id="BB_VWAP_PP", comment="Stop Loss Exit", when=crossunder(close,stopLossVal) and strategy.position_size>=1 )

もっと