ブレイクボリンガー帯振動取引戦略

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

img

概要

ブレイクアウトボリンジャーバンド振動トレード戦略 (Breakout Bollinger Bands Oscillation Trading Strategy) は,市場が振動状態にあるときの取引戦略である.この戦略は,ボリンジャーバンド指標を使用して市場の振動状態を判断し,価格がボリンジャーバンドの上下線線に触ると取引信号を送信する.この戦略は,伝統的なトレンドフォロー戦略とは異なり,範囲に限定された横向市場に適している.

戦略の論理

この戦略は主にボリンジャーバンド指標に基づいて実施される.ボリンジャーバンドは,中間レール,上部レール,下部レールで構成される.価格が上部レールまたは下部レールに近づくと,それは市場における過度の楽観主義または過度の悲観主義を表し,これは相対的に逆転の高い確率を意味します.

この戦略では,まず市場が振動状態にあるかどうかを判断するためにDMIインジケーターを使用します. +DMIと -DMIの差が20未満の場合,市場は横向に変動していると考えられます.この条件の下で,価格が下線を越えるとロング,上線を越えるとショートします.ストップ・ロストポイントは反対のレールの近くに設定されます.

利点

この戦略は,トレンドフォローする戦略と比較して,レンジ・バインド市場環境に適しており,トレンドを追いかけてお金を失うことはありません.この戦略は,ボリンジャー・バンド指標を使用して,従来の振動トレード戦略と比較して,市場の過剰購入および過剰販売状況をより正確に判断することができ,それによって市場への入入入の可能性を向上させます.

リスク

この戦略は,主にボリンジャーバンドに依存し,市場の振動と過買い/過売り状態を決定する.ボリンジャーバンドが異なったり,異常な収縮を起こしたりすると,間違った信号を引き起こす可能性があります.また,ストップ損失ポイントが近いため,単一のストップ損失は比較的大きい可能性があります.マネーマネジメントでストップ損失戦略を最適化することが推奨されます.

最適化

RSIなどのエントリー信号をフィルタリングするために他の指標を組み合わせることを検討し,エントリー精度を向上させることができます.また,ストップ損失戦略を最適化することは,単一の大きなストップ損失を避けるために非常に重要です.また,低市場キャップコインなどのこの戦略により適した取引品種を選択することもできます.

結論

一般的には,この戦略は変動する市場に適しており,トレンド戦略が失敗した場合に使用することができます.しかし,指標で市場の状態を判断することによって,その有効性を向上させる余地があります.我々は,この戦略をより安定し,収益性のあるものにするために,マルチインジケーターコンボ,マネーマネジメントなどの方法によってさらに改善することができます.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(shorttitle='Sideways Strategy DMI + Bollinger Bands',title='Sideways Strategy DMI + Bollinger Bands (by Coinrule)', overlay=true, initial_capital = 100, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.1)

// Works on ETHUSD 3h, 1h, 2h, 4h

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2021, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 12,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 31,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2022, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true

[pos_dm, neg_dm, adx] = dmi(14, 14)


lengthBB = input(20, minval=1)
src = input(close, title="Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
basis = sma(src, lengthBB)
dev = mult * stdev(src, lengthBB)
upper = basis + dev
lower = basis - dev
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)

sideways = (abs(pos_dm - neg_dm) < 20)



//Stop_loss= ((input (3))/100)
//Take_profit= ((input (2))/100)

//longStopPrice  = strategy.position_avg_price * (1 - Stop_loss)
//longTakeProfit = strategy.position_avg_price * (1 + Take_profit)

//closeLong = close < longStopPrice or close > longTakeProfit or StopRSI


//Entry 
strategy.entry(id="long", long = true, when = sideways and (crossover(close, lower)) and window())


//Exit
strategy.close("long", when = (crossunder(close, upper)))


もっと