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


作成日: 2023-09-19 16:06:56 最終変更日: 2023-09-19 16:06:56
コピー: 2 クリック数: 821
1
フォロー
1617
フォロワー

概要

この戦略はブリン帯の指数に基づいている.価格がブリン帯を突破したときに多めにし,価格がブリン帯を触ったときに平仓する.この戦略は,ブリン帯の包含的原理を利用して,価格の異常突破を追跡し,低買い高売りを実現する.

戦略原則

  1. ブリン帯の中央線SMAを計算し,近期閉店価格のシンプル移動平均を取ります.

  2. 標準差はStdDevで,価格変動範囲を反映している.

  3. 中間線SMAと標準差の偏差で,ブリンが軌道に乗った.

  4. 中間線SMAを標準差下偏移で減算して,ブリンが軌道下に置かれた.

  5. 閉盤価格が下から上昇して下線を突破すると,多入場する.

  6. 価格が軌道に触れたとき,価格が異常であると判断し,平仓を離れる.

優位分析

この戦略の最大の利点は,ブリン帯の指標の統計的特性を利用し,市場異常波動を効果的に追跡し,トレンドキャプチャを実現することです.通常の移動平均戦略と比較して,ブリン帯戦略は優れている:

  1. ブリン・ベルトは,市場の波動に自動的に適応します.

  2. 突破は入口信号としてより信頼できる.

  3. 中枢軸への帰還は停止信号として合理的である.

  4. パラメータを最適化できるスペースがあり,異なる市場に対応して調整できます.

  5. ショートラインのトレンドも捉える.

リスク分析

この戦略の潜在的リスクは以下の通りです.

  1. ブリン帯は横盤市場ではあまり効果的ではないので,誤入を避けるように注意してください.

  2. 突破信号は偽突破である可能性があり,慎重に判断してください.

  3. ストップ位置は理想的であり,実用的な状況に最適化することができる.

  4. パラメータを正しく設定しない場合,取引が頻繁すぎたり保守的になる可能性があります.

  5. 合を避けるのに十分な回転周期が必要である.

対応するリスク対策:

  1. 取引量指数と組み合わせたフィルター信号.

  2. パラメータを最適化し,異なる市場でのデータ効果をテストする.

  3. モバイルストップ,回転ストップの位置を追加します.

  4. 評価信号は背を向けて 追いかけるのを避ける.

最適化の方向

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

  1. ブリン帯のパラメータを異なるサイズで試し,最適な組み合わせを探します.

  2. 平均線,MACDなどの指標をフィルターする突破信号を追加する.

  3. ブリン帯パラメータを最適化する機械学習アルゴリズムを適用する.

  4. 突破入場の同時,強弱を評価し,ポジションを調整する.

  5. より長い周期データ,テスト戦略の安定性.

  6. リスク管理のためのストップダストメカニズムを追加する.

要約する

ブリン帯戦略は,全体として信頼性の高いトレンド追跡戦略である.それは,価格の異常な変動を効果的に捕捉することができる.しかし,我々は,現実の状況との偏差を注意し,パラメータを常に最適化することも必要です.もし現場で使用されれば,厳格にリスク管理を行い,単一損失を制御する必要があります.

ストラテジーソースコード
/*backtest
start: 2023-09-11 00:00:00
end: 2023-09-12 04:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title="BB training No Repainting (OTS Mode)", overlay=true)


// Strategy Rules:
// 1. Enter trade when price crosses above the lower band
// 2. Exit trade when price touches the upper band
// 

// Chart Properties
testStartYear = input(2010, "Backtest Start Year")
testStartMonth = input(01, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0)

testStopYear = input(2030, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=input.bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and time >= testPeriodStart and time <= testPeriodStop ? #6c6f6c : na
bgcolor(testPeriodBackgroundColor, transp=97)

// User provided values
smaLength = input(title="SMA Length", type=input.integer, defval=20) // Middle band period length (moving average)
stdLength = input(title="StdDev Length", type=input.integer, defval=20) // Range to apply bands to
ubOffset = input(title="Upper Band Offset", type=input.float, defval=2.0, step=0.5) // Number of standard deviations above MA
lbOffset = input(title="Lower Band Offset", type=input.float, defval=2.0, step=0.5) // Number of standard deviation below MA

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false

smaValue = sma(close, smaLength) // Middle band
stdDev = stdev(close, stdLength)
upperBand = smaValue + stdDev * ubOffset // Top band
lowerBand = smaValue - stdDev * lbOffset // Bottom band

// Plot bands to chart
plot(series=smaValue, title="SMA", color=color.green)
plot(series=upperBand, title="UB", color=color.blue, linewidth=2)
plot(series=lowerBand, title="LB", color=color.blue, linewidth=2)

longCondition = (crossover(close, lowerBand))
closeLongCondition = (close >= upperBand)

if (longCondition and testPeriod())
    strategy.entry(id="CALL", long=true)

strategy.close(id="CALL", when=closeLongCondition)