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

作者: リン・ハーンチャオチャン開催日:2023年12月19日 14:08:45
タグ:

img

概要

この戦略は,ボリンジャーバンドの上下線をベースに,価格がボリンジャーバンドの上下線を突破してロング,下下線を突破してショートになるタイミングを決定する.これはトレンドトラッキングタイプの戦略に属します.

戦略の論理

この戦略は,極端な価格帯を決定するためにボリンジャーバンドの中部/上部/下部レールを利用する. 中部レールは過去25期間の閉じる価格の単純な移動平均である. 上部と下部レールは中部レールの上下の一つの標準偏差である.価格が上部または下部レールを破ると,ブレイクアウトと異常な価格行動があることを示し,取引決定に使用することができる.

価格が下のレールを下回る場合はロング.価格が上のレール上回る場合はショート.ロングする場合は,ストップロスをエントリー価格 × ストップロスの因数に設定し,エントリー価格 × テイクロブの因数に利益を取ります.

この戦略には,不要な取引を避けるために24時間あたり1つの信号のみを許可するなどの補助規則も含まれています.

戦略 の 利点

  1. 異常な価格帯を決定するためにボリンガー帯を使用することは,価格傾向を把握できるトレンド追跡戦略に属します.
  2. ストップ・ロストとテイク・プロフィートのパラメータは,単一の損失を制御するための原則に従って設定されます.
  3. 複製信号や不必要な取引を避けるため,いくつかの補助規則が追加されています.

戦略 の リスク

  1. ボリンジャー・バンドは価格動向を完全に表現できず,誤った信号がある可能性があります.
  2. 突破信号の誤ったタイミングで 損失が生じます
  3. トレンド市場や非トレンド市場の期間と勢いを予測するのは困難で,不必要なロングポジションにつながる可能性があります.

リスク管理

  1. ボリンジャー・バンドのパラメータを調整して 突破信号のタイミングを最適化します
  2. 主な傾向を決定するために他の指標を組み込む.
  3. ストップ・ロストを設定し 利益の範囲を設定します 異なる製品と市場状況に応じて

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

  1. 現在の市場状況に適したボリンジャー帯のパラメータを適応的に最適化することを検討する.
  2. 傾向信号の信頼性を判断し,誤った信号を避けるために他の指標を組み込む.
  3. 機械学習モデルを組み込み,最適の長時間と短時間を自動的に識別します

結論

概要すると,これは異常な価格とトレンドを追跡するためにボリンジャー帯を使用する単純なトレンド追跡戦略です.パラメータ最適化,リスク制御,シグナルフィルタリングの改善に余地がありますが,コアアイデアはシンプルで明確で,学習のための初心者戦略として適しています.


/*backtest
start: 2023-11-18 00:00:00
end: 2023-12-18 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("I11L OIL Bot",overlay=true, initial_capital=1000000,default_qty_value=1000000,default_qty_type=strategy.cash,commission_type=strategy.commission.percent,commission_value=0.00)

leverage = input.float(1,"Leverage (x)",step=1)
SL_Factor = 1 - input.float(1,"Risk Capital per Trade (%)", minval=0.1, maxval=100, step=0.05) / 100 / leverage
TP_Factor = input.float(2, step=0.1)
invertBuyLogic = input.bool(false)
 
lookbackDistance = input.int(25)
devMult = input.float(2,step=0.1)

var lastSellHour = 0
var disableAdditionalBuysThisDay = false


if(time > lastSellHour + 1000 * 60 * 60 * 6)
    disableAdditionalBuysThisDay := false
if(strategy.position_size != strategy.position_size[1])
    disableAdditionalBuysThisDay := true
    lastSellHour := time

source = close

//Trade Logic
basis = ta.sma(source, lookbackDistance)
dev = devMult * ta.stdev(source, lookbackDistance)
upper = basis + dev
lower = basis - dev
isBuy = ta.crossunder(source, upper)
isBuyInverted = ta.crossover(source, lower)

plot(upper, color=color.white)
plot(lower, color=color.white)

strategy.initial_capital = 50000

if((invertBuyLogic ? isBuyInverted : isBuy) and not(disableAdditionalBuysThisDay))
    strategy.entry("Long", strategy.long, (strategy.initial_capital / close) * leverage)

if(strategy.position_size > 0)
    strategy.exit("SL Long", "Long", stop=strategy.position_avg_price * SL_Factor)
    strategy.close("Long",  when=close > strategy.position_avg_price * (1 + (1 - SL_Factor) * TP_Factor), comment="TP Long")





もっと