ボリンジャーバンド ATR トレンドフォロー戦略

BB SMA ATR
作成日: 2024-05-15 10:50:14 最終変更日: 2024-05-15 10:50:14
コピー: 3 クリック数: 721
1
フォロー
1617
フォロワー

ボリンジャーバンド ATR トレンドフォロー戦略

概要

この戦略は,ブリン帯とATR指標に基づいて,ブリン帯を通して価格の波動範囲を捕捉し,価格がブリン帯を突破して下線を走るのをポジションの信号として使用し,ATRを移動ストップとして使用し,最後に価格が単純な移動平均線を突破してポジションの信号として使用します.この戦略は,トレンドの状況を捕捉し,トレンドの方向に沿ってポジションを構築し,トレンドが逆転するときに平衡状態にします.

戦略原則

  1. ブリン帯の計算: 閉盤価格の計算に,ブリン帯の中央線として単純移動平均 ((SMA) を使用し,波動率 ((標準差)) に基づいて上下線を計算する.
  2. ATRを計算する:移動停止の基礎として,実際の波長 ((TR)) の移動平均を用いてATRを計算する.
  3. トレードシグナルを生成する:価格がダウンしてブルイン帯を下線に突破すると多信号を生成し,上方してブルイン帯を上線に突破すると空き信号を生成する.価格が上方してATR移動ストップを突破すると多信号を生成し,下方してATR移動ストップを突破すると空き信号を生成する.
  4. 平仓:多ポジションの場合,価格が上向きにSMAを突破した場合平仓;空位の場合,価格が下向きにSMAを突破した場合,平空.

戦略的優位性

  1. トレンド追跡:ブリンバンドとATRの移動ストップでトレンドの動きを捉え,異なる市場環境に適応する.
  2. タイムリーストップ:ATRを移動ストップとして使用し,市場の波動に応じてストップポジションを動的に調整し,リスクを制御する.
  3. シンプルで使いやすい: 策略の論理が明確で,パラメータが少なく,理解し,適用しやすい.

戦略リスク

  1. パラメータに敏感である:ブリン帯とATRのパラメータ選択は,戦略のパフォーマンスに影響し,異なる市場と品種に応じて最適化する必要がある.
  2. 変動市場:変動市場では,頻繁に取引するシグナルにより,取引回数やコストが過剰に増加する可能性があります.
  3. トレンドの逆転: トレンドの逆転が起こると,戦略は大きな後退を起こす可能性があります.

戦略最適化の方向性

  1. パラメータ最適化: ブリン帯とATRのパラメータを最適化して,異なる市場と品種に適した最適なパラメータの組み合わせを見つける.
  2. フィルター:他の技術指標または価格行動パターンをフィルターとして追加し,誤判を軽減し,信号の質を向上させる.
  3. ポジション管理:市場変動や口座リスクに応じてポジションを動的に調整し,資金利用効率と収益リスク比率を向上させる.

要約する

ブリン帯ATRトレンド追跡戦略は,ブリン帯とATR指標を通じてトレンドの動きを捕捉し,トレンド追跡,タイムリーな止損,シンプルで使いやすいという利点があります.しかし,同時に,パラメータ感受性,震動市場,トレンド逆転などのリスクもあります.パラメータ最適化,フィルターを追加,ポジション管理などの方法で戦略のパフォーマンスをさらに最適化することができます.

ストラテジーソースコード
/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-30 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Bollinger Bands and ATR Strategy", overlay=true)

// Veri Çekme
symbol = "AAPL"
timeframe = "D"
src = close

// Bollinger Bantları Hesaplama
len = 20
mult = 2
sum1 = 0.0, sum2 = 0.0
for i = 0 to len - 1
    sum1 += src[i]
basis = sum1 / len
for i = 0 to len - 1
    diff = src[i] - basis
    sum2 += diff * diff
dev = math.sqrt(sum2 / len)
upper_band = basis + dev * mult
lower_band = basis - dev * mult

// ATR Hesaplama
atr_period = input(10, title="ATR Period")
atr_value = 0.0
for i = 0 to atr_period - 1
    atr_value += math.abs(src[i] - src[i + 1])
atr_value /= atr_period
loss = input(1, title="Key Value (Sensitivity)")
atr_trailing_stop = src[1]
if src > atr_trailing_stop[1]
    atr_trailing_stop := math.max(atr_trailing_stop[1], src - loss * atr_value)
else if src < atr_trailing_stop[1]
    atr_trailing_stop := math.min(atr_trailing_stop[1], src + loss * atr_value)
else
    atr_trailing_stop := src - loss * atr_value

// Sinyal Üretme
long_condition  = src < lower_band and src[1] >= lower_band[1]
short_condition = src > upper_band and src[1] <= upper_band[1]
close_long  = src > basis
close_short = src < basis
buy_signal = src > atr_trailing_stop[1] and src[1] <= atr_trailing_stop[1]
sell_signal = src < atr_trailing_stop[1] and src[1] >= atr_trailing_stop[1]

if (long_condition)
    strategy.entry("Long", strategy.long, comment="Long Signal")
if (short_condition)
    strategy.entry("Short", strategy.short, comment="Short Signal")
if (close_long)
    strategy.close("Long", comment="Close Long")
if (close_short)
    strategy.close("Short", comment="Close Short")
if (buy_signal)
    strategy.entry("Long", strategy.long, comment="Buy Signal")
if (sell_signal)
    strategy.entry("Short", strategy.short, comment="Sell Signal")

// Çizim
plot(upper_band, color=#0000FF, linewidth=2, title="Upper Band")
plot(lower_band, color=#0000FF, linewidth=2, title="Lower Band")
plot(basis, color=#808080, linewidth=2, title="SMA")
plot(atr_trailing_stop, color=#FFA500, linewidth=2, title="ATR Trailing Stop")
plot(src, color=#FFA500, linewidth=2, title="Price")

// Sinyal İşaretleri
plotshape(long_condition, style=shape.arrowup, color=#00FF00, location=location.belowbar, size=size.small, title="Long Signal")
plotshape(short_condition, style=shape.arrowdown, color=#FF0000, location=location.abovebar, size=size.small, title="Short Signal")
plotshape(buy_signal, style=shape.diamond, color=#00FF00, location=location.belowbar, size=size.small, title="Buy Signal")
plotshape(sell_signal, style=shape.diamond, color=#FF0000, location=location.abovebar, size=size.small, title="Sell Signal")