資源の読み込みに... 荷物...

Bollinger Bands と ATR に基づく多レベルインテリジェント・ダイナミック・トレリングストップ戦略

作者: リン・ハーンチャオチャン,日付: 2024-12-11 14:52:24
タグ:BBATRマルチSMAエイマSMMAWMAVWMASD

img

概要

この戦略は,ボリンジャーバンドとATR指標に基づいたインテリジェントな取引システムで,多レベルの利益とストップ・ロスのメカニズムを組み込みます.この戦略は主に,ボリンジャーバンドの下部近くの逆転信号を特定してロングポジションに入り,ダイナミック・トレーリング・ストップを使用してリスクを管理します.このシステムは20%の利益目標と12%のストップ・ロスのレベルで設計されています.同時に,ATRベースのダイナミック・トレーリング・ストップを組み込み,トレンドに十分な余地を与えながら利益を保護します.

戦略の原則

基本的な論理にはいくつかの重要な要素が含まれます.

  1. 入場条件: 赤色のキャンドルが下のボリンジャーバンドに触れる後に緑色のキャンドルが表示され,通常は潜在的逆転信号を示します.
  2. 移動平均値選択: 複数のタイプ (SMA,EMA,SMMA,WMA,VWMA) をサポートし,デフォルトで20期間のSMAを使用する.
  3. ボリンガー帯のパラメータ:帯域幅に対して1.5標準偏差を使用し,従来の2標準偏差よりも保守的です.
  4. 利益の引き上げメカニズム: 20%の利益目標を設定する
  5. ストップ・ロスのメカニズム: 資本を保護するために 12%の固定ストップ・ロスを実施する.
  6. 動的追尾停止:
    • 利益目標に達した後にATRのトレーリングストップを起動する.
    • ATRの動的トレーリングストップを上部ボリンジャーバンドに触れた後に開始する.
    • ATR倍数を使用して,動的に追尾停止距離を調整

戦略 の 利点

  1. 複数のレベルのリスク管理
    • 固定ストップ・ロスは本金を保護する
    • 動的トレーリングストップロック
    • 上部ボリンジャー・バンドが動いたダイナミック・ストップは,追加の保護を提供します.
  2. 柔軟な移動平均の選択により,異なる市場条件に適応できます
  3. ATRベースの動的後継停止は,市場変動に基づいて自動的に調整され,早速の終了を防ぐ
  4. 入力信号は価格パターンと技術指標を組み合わせ,信号の信頼性を向上させる
  5. ポジション管理と取引コストの設定をサポートし,実際の取引条件に近い

戦略リスク

  1. 急速な振動市場は,取引コストを増加させる,頻繁な取引につながる可能性があります
  2. 高波動性のある市場では12%の固定ストップロスは狭すぎることがある
  3. ボリンジャー・バンドの信号は,トレンド市場の誤った信号を生む可能性があります.
  4. ATRの遅延停止は,過度の波動の際により大きな引き上げをもたらす可能性があります. 緩和措置
  • 長い時間枠 (30分~1時間) で使用することを推奨します.
  • ストップ・ロスの割合を,特定の楽器の特徴に基づいて調整する.
  • 誤った信号を減らすためにトレンドフィルターを追加することを検討します
  • 異なる市場環境のために動的にATR倍数調整

戦略の最適化方向

  1. エントリー最適化:
  • 音量確認メカニズムを追加する
  • 信号フィルタリングのための傾向強度指標を組み込む
  • 確認のために動力指標を追加することを検討してください
  1. ストップ・ロスの最適化
  • 固定ストップ損失をATRベースのダイナミックストップに変換する
  • 適応性のあるストップ・ロスのアルゴリズムを開発する
  • 動的停止距離を変動に基づいて調整する
  1. 移動平均の最適化:
  • 異なる期間の組み合わせをテストする
  • 研究適応期間の方法
  • 移動平均値の代わりに価格アクションを使用することを検討します
  1. ポジション管理の最適化
  • 波動性に基づくポジションサイズシステムを開発する
  • 拡大された入国・退出メカニズムの導入
  • リスクリスク管理を追加する

概要

この戦略は,ボリンジャーバンドとATRインジケーターを使用して,エントリー,ストップ・ロスト,および利益取得のためのダイナミックなマネジメント方法を採用した多レベル取引システムを構築している.その強みは,包括的なリスク管理システムと市場の変動に適応する能力にある.提案された最適化方向性を通じて,戦略には改善のための大きな余地がある.それは特に大きなタイムフレームで使用するのに適しており,質の高い資産を保有する投資家がエントリーと出口タイミングを最適化するのに役立ちます.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Demo GPT - Bollinger Bands Strategy with Tightened Trailing Stops", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_value=0.1, slippage=3)

// Input settings
length = input.int(20, minval=1)
maType = input.string("SMA", "Basis MA Type", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
src = input(close, title="Source")
mult = 1.5 // Standard deviation multiplier set to 1.5
offset = input.int(0, "Offset", minval=-500, maxval=500)
atrMultiplier = input.float(1.0, title="ATR Multiplier for Trailing Stop", minval=0.1) // ATR multiplier for trailing stop

// Time range filters
start_date = input(timestamp("2018-01-01 00:00"), title="Start Date")
end_date = input(timestamp("2069-12-31 23:59"), title="End Date")
in_date_range = true

// Moving average function
ma(source, length, _type) =>
    switch _type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

// Calculate Bollinger Bands
basis = ma(src, length, maType)
dev = mult * ta.stdev(src, length)
upper = basis + dev
lower = basis - dev

// ATR Calculation
atr = ta.atr(length) // Use ATR for trailing stop adjustments

// Plotting
plot(basis, "Basis", color=#2962FF, offset=offset)
p1 = plot(upper, "Upper", color=#F23645, offset=offset)
p2 = plot(lower, "Lower", color=#089981, offset=offset)
fill(p1, p2, title="Background", color=color.rgb(33, 150, 243, 95))

// Candle color detection
isGreen = close > open
isRed = close < open

// Flags for entry and exit conditions
var bool redTouchedLower = false
var float targetPrice = na
var float stopLossPrice = na
var float trailingStopPrice = na

if in_date_range
    // Entry Logic: First green candle after a red candle touches the lower band
    if close < lower and isRed
        redTouchedLower := true
    if redTouchedLower and isGreen
        strategy.entry("Long", strategy.long)
        targetPrice := close * 1.2       // Set the target price to 20% above the entry price
        stopLossPrice := close * 0.88   // Set the stop loss to 12% below the entry price
        trailingStopPrice := na         // Reset trailing stop on entry
        redTouchedLower := false

    // Exit Logic: Trailing stop after 20% price increase
    if strategy.position_size > 0 and not na(targetPrice) and close >= targetPrice
        if na(trailingStopPrice)
            trailingStopPrice := close - atr * atrMultiplier // Initialize trailing stop using ATR
        trailingStopPrice := math.max(trailingStopPrice, close - atr * atrMultiplier) // Tighten dynamically based on ATR

    // Exit if the price falls below the trailing stop after 20% increase
    if strategy.position_size > 0 and not na(trailingStopPrice) and close < trailingStopPrice
        strategy.close("Long", comment="Trailing Stop After 20% Increase")
        targetPrice := na // Reset the target price
        stopLossPrice := na // Reset the stop loss price
        trailingStopPrice := na // Reset trailing stop

    // Stop Loss: Exit if the price drops 12% below the entry price
    if strategy.position_size > 0 and not na(stopLossPrice) and close <= stopLossPrice
        strategy.close("Long", comment="Stop Loss Triggered")
        targetPrice := na // Reset the target price
        stopLossPrice := na // Reset the stop loss price
        trailingStopPrice := na // Reset trailing stop

    // Trailing Stop: Activate after touching the upper band
    if strategy.position_size > 0 and close >= upper and isGreen
        if na(trailingStopPrice)
            trailingStopPrice := close - atr * atrMultiplier // Initialize trailing stop using ATR
        trailingStopPrice := math.max(trailingStopPrice, close - atr * atrMultiplier) // Tighten dynamically based on ATR

    // Exit if the price falls below the trailing stop
    if strategy.position_size > 0 and not na(trailingStopPrice) and close < trailingStopPrice
        strategy.close("Long", comment="Trailing Stop Triggered")
        trailingStopPrice := na // Reset trailing stop
        targetPrice := na // Reset the target price
        stopLossPrice := na // Reset the stop loss price


関連性

もっと