Sumber dimuat naik... memuat...

Pemecahan Struktur dengan Pengesahan Volume Multi-Kondisi Strategi Dagangan Pintar

Penulis:ChaoZhang, Tarikh: 2024-12-20 16:15:43
Tag:BOSSMAATRTPSL

img

Ringkasan

Ini adalah strategi dagangan pintar berdasarkan Break of Structure (BOS) dan pengesahan jumlah. Strategi ini menghasilkan isyarat dagangan dengan mengesan penembusan harga dari paras tertinggi atau terendah sebelumnya, digabungkan dengan pengesahan pengembangan jumlah. Ia menggunakan pelbagai mekanisme pengesahan keadaan, termasuk keperluan pengesahan berturut-turut dan tetapan mengambil keuntungan / berhenti rugi dinamik, untuk meningkatkan kebolehpercayaan dagangan dan keupayaan kawalan risiko.

Prinsip Strategi

Logik teras merangkumi elemen utama berikut:

  1. Mengenali harga tertinggi dan terendah struktural dengan mengira harga tertinggi dan terendah dalam tempoh tertentu
  2. Menggunakan purata bergerak untuk mengira garis asas jumlah dan menentukan pengembangan jumlah yang signifikan
  3. Mengumpul bilangan pengesahan menaik apabila harga memecahkan di atas tinggi sebelumnya dengan peningkatan jumlah
  4. Mengumpul pengesahan penurunan apabila harga memecahkan di bawah paras rendah sebelumnya dengan peningkatan jumlah
  5. Isyarat dagangan hanya dicetuskan selepas mencapai jumlah pengesahan yang ditetapkan
  6. Menetapkan tahap keuntungan dan stop-loss berasaskan peratusan selepas kemasukan kedudukan

Kelebihan Strategi

  1. Mekanisme pengesahan pelbagai keadaan meningkatkan kebolehpercayaan isyarat
  2. Integrasi penunjuk jumlah membantu mengelakkan isyarat pecah palsu
  3. Mekanisme pengesahan berturut-turut mengurangkan kekerapan perdagangan dan meningkatkan kadar kemenangan
  4. Tetapan mengambil keuntungan/berhenti kerugian dinamik menyesuaikan kedudukan keluar secara automatik berdasarkan harga masuk
  5. Logik strategi yang jelas dengan parameter yang boleh diselaraskan menawarkan kesesuaian yang baik

Risiko Strategi

  1. Penembusan palsu yang kerap di pasaran yang berbeza boleh membawa kepada kerugian berturut-turut
  2. Posisi stop-loss mungkin tidak cukup tepat pada masa di pasaran yang tidak menentu
  3. Mekanisme pengesahan mungkin melambatkan penyertaan, kehilangan titik harga optimum
  4. Kriteria penilaian jumlah tetap mungkin tidak menyesuaikan dengan baik dengan keadaan pasaran yang berubah Penyelesaian:
  • Memperkenalkan penunjuk turun naik pasaran untuk pelarasan parameter dinamik
  • Tambah penapis trend untuk mengurangkan isyarat palsu di pasaran pelbagai
  • Mengoptimumkan logik stop-loss untuk meningkatkan fleksibiliti
  • Reka bentuk kaedah pengiraan ambang jumlah penyesuaian

Arahan Pengoptimuman Strategi

  1. Tambah penunjuk pengenalan trend, seperti sistem purata bergerak, untuk berdagang hanya ke arah trend
  2. Memasukkan penunjuk ATR untuk pelarasan jarak stop-loss dinamik
  3. Mekanisme penilaian ambang volum yang disesuaikan dengan turun naik
  4. Sertakan penapis masa untuk mengelakkan tempoh berisiko tinggi
  5. Mengoptimumkan mekanisme pengesahan untuk meningkatkan masa kemasukan sambil mengekalkan kebolehpercayaan

Ringkasan

Ini adalah sistem strategi yang menggabungkan teori analisis teknikal klasik dengan kaedah perdagangan kuantitatif moden. Melalui pengesahan pelbagai keadaan dan kawalan risiko yang ketat, strategi menunjukkan kestabilan dan kebolehpercayaan yang baik. Walaupun terdapat aspek yang memerlukan pengoptimuman, reka bentuk kerangka keseluruhan adalah munasabah dan mempunyai nilai aplikasi praktikal. Prestasi strategi dapat ditingkatkan lagi melalui arah pengoptimuman yang dicadangkan.


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

//@version=5
strategy("BOS and Volume Strategy with Confirmation", overlay=true)

// Parameters
swingLength = input.int(20, title="Swing Length", minval=1)
volumeMultiplier = input.float(1.1, title="Volume Multiplier", step=0.1)
volumeSMA_length = input.int(10, title="Volume SMA Length", minval=1)
takeProfitPercentage = input.float(0.02, title="Take Profit Percentage", step=0.01)
stopLossPercentage = input.float(0.15, title="Stop Loss Percentage", step=0.01)  // New parameter for stop loss
atrLength = input.int(14, title="ATR Length")
confirmationBars = input.int(2, title="Confirmation Bars", minval=1)

// Calculate Swing Highs and Lows
swingHigh = ta.highest(high, swingLength)[1]
swingLow = ta.lowest(low, swingLength)[1]

// Calculate Volume Moving Average
volumeSMA = ta.sma(volume, volumeSMA_length)
highVolume = volume > (volumeSMA * volumeMultiplier)

// Break of Structure Detection with Confirmation
var int bullishCount = 0
var int bearishCount = 0

if (close > swingHigh and highVolume)
    bullishCount := bullishCount + 1
    bearishCount := 0
else if (close < swingLow and highVolume)
    bearishCount := bearishCount + 1
    bullishCount := 0
else
    bullishCount := 0
    bearishCount := 0

bullishBOSConfirmed = (bullishCount >= confirmationBars)
bearishBOSConfirmed = (bearishCount >= confirmationBars)

// Entry and Exit Conditions
var float entryPrice = na  // Declare entryPrice as a variable

if (bullishBOSConfirmed and strategy.position_size <= 0)
    entryPrice := close  // Use ':=' for assignment
    strategy.entry("Long", strategy.long)

if (strategy.position_size > 0)
    // Calculate stop loss price
    stopLossPrice = entryPrice * (1 - stopLossPercentage)
    strategy.exit("Take Profit Long", from_entry="Long", limit=entryPrice * (1 + takeProfitPercentage), stop=stopLossPrice)

if (bearishBOSConfirmed and strategy.position_size >= 0)
    entryPrice := close  // Use ':=' for assignment
    strategy.entry("Short", strategy.short)

if (strategy.position_size < 0)
    // Calculate stop loss price
    stopLossPrice = entryPrice * (1 + stopLossPercentage)
    strategy.exit("Take Profit Short", from_entry="Short", limit=entryPrice * (1 - takeProfitPercentage), stop=stopLossPrice)

// Plot Swing Highs and Lows for Visualization
plot(swingHigh, title="Swing High", color=color.green, linewidth=1)
plot(swingLow, title="Swing Low", color=color.red, linewidth=1)

Berkaitan

Lebih lanjut