Sumber dimuat naik... memuat...

Strategi Stop Trailing Dinamik Berbilang Tahap Berbasis Bollinger Bands dan ATR

Penulis:ChaoZhang, Tarikh: 2024-12-11 14:52:24
Tag:BBATRMASMAEMASMMAWMAVWMASD

img

Ringkasan

Strategi ini adalah sistem dagangan pintar berdasarkan Bollinger Bands dan penunjuk ATR, menggabungkan mekanisme mengambil keuntungan dan menghentikan kerugian pelbagai peringkat. Strategi ini terutamanya memasuki kedudukan panjang dengan mengenal pasti isyarat pembalikan berhampiran Bollinger Band bawah dan menguruskan risiko menggunakan berhenti mengikuti dinamik. Sistem ini direka dengan sasaran keuntungan 20% dan tahap berhenti kehilangan 12%, sambil menggabungkan berhenti mengikuti dinamik berasaskan ATR untuk melindungi keuntungan sambil membolehkan trend ruang yang mencukupi untuk berkembang.

Prinsip Strategi

Logik teras merangkumi beberapa komponen utama:

  1. Syarat kemasukan: Memerlukan lilin hijau mengikuti lilin merah yang menyentuh Bollinger Band bawah, biasanya menunjukkan isyarat pembalikan yang berpotensi.
  2. Pemilihan purata bergerak: Menyokong pelbagai jenis (SMA, EMA, SMMA, WMA, VWMA), dengan SMA 20 tempoh lalai.
  3. Parameter Bollinger Bands: Menggunakan 1.5 penyimpangan standard untuk lebar jalur, lebih konservatif daripada penyimpangan standard 2 tradisional.
  4. Mekanisme mengambil keuntungan: Menetapkan sasaran keuntungan awal 20%.
  5. Mekanisme Stop Loss: Melaksanakan 12% Stop Loss tetap untuk melindungi modal.
  6. Hentikan pengangkutan dinamik:
    • Mengaktifkan ATR trailing stop selepas mencapai sasaran keuntungan
    • Memulakan hentian dinamik ATR selepas menyentuh Bollinger Band atas
    • Menggunakan pengganda ATR untuk menyesuaikan jarak berhenti belakang secara dinamik

Kelebihan Strategi

  1. Kawalan risiko pelbagai peringkat:
    • Stop-loss tetap melindungi pokok
    • Penguncian berhenti yang dinamik dalam keuntungan
    • Stop dinamik yang dicetuskan oleh Bollinger Band atas memberikan perlindungan tambahan
  2. Pilihan purata bergerak yang fleksibel membolehkan penyesuaian kepada keadaan pasaran yang berbeza
  3. Hentian pengangkut dinamik berasaskan ATR disesuaikan secara automatik berdasarkan turun naik pasaran, mengelakkan keluar awal
  4. Isyarat kemasukan menggabungkan corak harga dan penunjuk teknikal, meningkatkan kebolehpercayaan isyarat
  5. Menyokong pengurusan kedudukan dan tetapan kos urus niaga, lebih dekat dengan keadaan perdagangan sebenar

Risiko Strategi

  1. Pasaran yang berayun dengan cepat boleh membawa kepada perdagangan yang kerap, meningkatkan kos transaksi
  2. 12% stop loss tetap mungkin terlalu ketat di pasaran yang sangat tidak menentu
  3. Isyarat Bollinger Bands boleh menghasilkan isyarat palsu di pasaran trend
  4. Hentian trailing ATR boleh mengakibatkan pengeluaran yang lebih besar semasa turun naik yang teruk Langkah-langkah pengurangan:
  • Penggunaan yang disyorkan pada jangka masa yang lebih panjang (30min-1 jam)
  • Penyesuaian peratusan stop-loss berdasarkan ciri-ciri instrumen tertentu
  • Pertimbangkan menambah penapis trend untuk mengurangkan isyarat palsu
  • Sesuaikan secara dinamik pengganda ATR untuk persekitaran pasaran yang berbeza

Arahan Pengoptimuman Strategi

  1. Pengoptimuman kemasukan:
  • Tambah mekanisme pengesahan jumlah
  • Memasukkan penunjuk kekuatan trend untuk penapisan isyarat
  • Pertimbangkan untuk menambah penunjuk momentum untuk pengesahan
  1. Pengoptimuman Stop-Loss:
  • Mengubah stop-loss tetap kepada stop dinamik berasaskan ATR
  • Membangunkan algoritma stop-loss adaptif
  • Sesuaikan jarak henti secara dinamik berdasarkan turun naik
  1. Pengoptimuman purata bergerak:
  • Uji gabungan tempoh yang berbeza
  • Kaedah tempoh penyesuaian penyelidikan
  • Pertimbangkan untuk menggunakan tindakan harga dan bukannya purata bergerak
  1. Pengoptimuman pengurusan kedudukan:
  • Membangunkan sistem saiz kedudukan berasaskan turun naik
  • Melaksanakan mekanisme kemasukan dan keluar berskala
  • Tambah kawalan pendedahan risiko

Ringkasan

Strategi ini membina sistem perdagangan pelbagai peringkat menggunakan Bollinger Bands dan penunjuk ATR, menggunakan kaedah pengurusan dinamik untuk kemasukan, berhenti-kerugian, dan mengambil keuntungan. Kekuatannya terletak pada sistem kawalan risiko yang komprehensif dan keupayaan untuk menyesuaikan diri dengan turun naik pasaran. Melalui arah pengoptimuman yang dicadangkan, strategi ini mempunyai ruang yang signifikan untuk peningkatan. Ia sangat sesuai untuk digunakan pada jangka masa yang lebih besar dan dapat membantu pelabur yang memegang aset berkualiti mengoptimumkan masa masuk dan keluar mereka.


/*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


Berkaitan

Lebih lanjut