Strategi perdagangan turun naik dinamik berdasarkan Bollinger Bands dan corak candlestick

BB SMA ATR RSI ROC MTF
Tarikh penciptaan: 2024-11-29 16:29:01 Akhirnya diubah suai: 2024-11-29 16:29:01
Salin: 0 Bilangan klik: 497
1
fokus pada
1617
Pengikut

Strategi perdagangan turun naik dinamik berdasarkan Bollinger Bands dan corak candlestick

Gambaran keseluruhan

Strategi ini adalah sistem perdagangan yang berdasarkan analisis borin dan grafik grafik yang menangkap peluang untuk membalikkan pasaran dengan menganalisis pergerakan harga dan ciri-ciri grafik pada tahap garis matahari. Inti strategi ini adalah hubungan rasio antara saluran kadar turun naik dalam borin dan garis bawah dan entiti pada grafik untuk mencari isyarat pembalikan yang berpotensi apabila harga menyentuh sempadan borin. Sistem ini menyokong analisis jangka masa berbilang dan dapat melakukan perdagangan pada jangka masa yang lebih kecil sambil mengekalkan analisis tahap garis matahari.

Prinsip Strategi

Strategi ini menggunakan 20 kitaran Brin Belt sebagai petunjuk teknikal utama, dengan standard deviasi ganda 2.0. Dengan mengira nisbah garis atas dan bawah yang dipaparkan dalam grafik dan nisbah entiti, sistem akan mengeluarkan isyarat perdagangan apabila nisbah tersebut melebihi nilai set (default 1.0) dan harga menyentuh sempadan Brin Belt. Waktu masuk boleh dipilih secara fleksibel pada harga pengambilan hari, harga pembukaan hari berikutnya, tinggi atau rendah dalam hari.

Kelebihan Strategik

  1. Analisis pelbagai dimensi: menggabungkan indikator teknikal dan analisis bentuk harga, meningkatkan kebolehpercayaan isyarat.
  2. Mekanisme kemasukan yang fleksibel: menawarkan pelbagai pilihan masa kemasukan yang sesuai dengan gaya dagangan yang berbeza.
  3. Pengurusan risiko yang baik: mengawal risiko dengan skala pegangan yang dinamik dan hentian kerugian automatik.
  4. Kompatibiliti pelbagai kitaran masa: boleh menjalankan perdagangan pada kitaran masa yang lebih kecil sambil mengekalkan analisis garis matahari.
  5. Tingkat automasi yang tinggi: Automasi dari pengenalan isyarat hingga pengurusan kedudukan.

Risiko Strategik

  1. Risiko turun naik pasaran: Ia boleh menghasilkan isyarat palsu dalam pasaran yang bergolak.
  2. Risiko keterlambatan: Mungkin tidak dapat bertindak balas dalam pasaran yang pantas kerana data garis matahari digunakan.
  3. Sensitiviti parameter: Pilihan parameter Brinband dan nilai terendah nisbah garis bayangan akan mempengaruhi prestasi strategi secara ketara.
  4. Risiko kecairan: Ia mungkin sukar untuk berdagang pada harga yang dijangkakan di pasaran yang kurang kecairan.

Arah pengoptimuman strategi

  1. Pengenalan analisis kuantiti pertukaran: data pertukaran gabungan untuk mengesahkan keberkesanan pembalikan harga.
  2. Menambah penapis keadaan pasaran: Tambah penunjuk kekuatan trend untuk menapis keadaan pasaran yang tidak menguntungkan.
  3. Parameter pengoptimuman menyesuaikan diri: menyesuaikan parameter Brin dan nilai terhad nisbah garis bayangan mengikut kadar turun naik pasaran.
  4. Meningkatkan kawalan risiko: meningkatkan kawalan penarikan balik dan mekanisme pemantauan kurva hak dan kepentingan.
  5. Pengesahan isyarat yang dipertingkatkan: pengenalan penunjuk teknikal lain sebagai alat pengesahan tambahan.

ringkaskan

Ini adalah sistem perdagangan yang lengkap yang menggabungkan analisis Brinband dan Pivot Chart untuk menangkap peluang pembalikan pasaran melalui analisis pelbagai dimensi. Kelebihan strategi adalah kerangka analisis yang komprehensif dan sistem pengurusan risiko yang baik, tetapi juga perlu memperhatikan kesan persekitaran pasaran dan pilihan parameter terhadap prestasi strategi. Dengan arah pengoptimuman yang disyorkan, kestabilan dan kebolehpercayaan strategi dijangka meningkat lebih lanjut. Dalam aplikasi di tempat, disarankan untuk melakukan pengesanan dan pengoptimuman parameter yang mencukupi terlebih dahulu dan melakukan penyesuaian yang sesuai mengikut ciri-ciri jenis perdagangan tertentu.

Kod sumber strategi
/*backtest
start: 2023-11-29 00:00:00
end: 2024-11-28 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Trade Entry Detector, based on Wick to Body Ratio when price tests Bollinger Bands", overlay=true, default_qty_type=strategy.fixed)

// Input for primary analysis time frame
timeFrame = "D"  // Daily time frame

// Bollinger Band settings
length = input.int(20, title="Bollinger Band Length", minval=1)
mult = input.float(2.0, title="Standard Deviation Multiplier", minval=0.1)
source = input(close, title="Source")

// Entry ratio settings
wickToBodyRatio = input.float(1.0, title="Minimum Wick-to-Body Ratio", minval=0)

// Order Fill Timing Option
fillOption = input.string("Daily Close", title="Order Fill Timing", options=["Daily Close", "Daily Open", "HOD", "LOD"])

// Account and risk settings
accountBalance = 100000  // Account balance in dollars
riskPercentage = 1.0     // Risk percentage per trade
riskAmount = (riskPercentage / 100) * accountBalance // Fixed 1% risk amount

// Request daily data for calculations
dailyHigh = request.security(syminfo.tickerid, timeFrame, high)
dailyLow = request.security(syminfo.tickerid, timeFrame, low)
dailyClose = request.security(syminfo.tickerid, timeFrame, close)
dailyOpen = request.security(syminfo.tickerid, timeFrame, open)

// Calculate Bollinger Bands on the daily time frame
dailyBasis = request.security(syminfo.tickerid, timeFrame, ta.sma(source, length))
dailyDev = mult * request.security(syminfo.tickerid, timeFrame, ta.stdev(source, length))
dailyUpperBand = dailyBasis + dailyDev
dailyLowerBand = dailyBasis - dailyDev

// Calculate the body and wick sizes on the daily time frame
dailyBodySize = math.abs(dailyOpen - dailyClose)
dailyUpperWickSize = dailyHigh - math.max(dailyOpen, dailyClose)
dailyLowerWickSize = math.min(dailyOpen, dailyClose) - dailyLow

// Conditions for a candle with an upper wick or lower wick that touches the Bollinger Bands
upperWickCondition = (dailyUpperWickSize / dailyBodySize >= wickToBodyRatio) and (dailyHigh > dailyUpperBand)
lowerWickCondition = (dailyLowerWickSize / dailyBodySize >= wickToBodyRatio) and (dailyLow < dailyLowerBand)

// Define the swing high and swing low for stop loss placement
var float swingLow = na
var float swingHigh = na

if (ta.pivothigh(dailyHigh, 5, 5))
    swingHigh := dailyHigh[5]

if (ta.pivotlow(dailyLow, 5, 5))
    swingLow := dailyLow[5]

// Determine entry price based on chosen fill option
var float longEntryPrice = na
var float shortEntryPrice = na

if lowerWickCondition
    longEntryPrice := fillOption == "Daily Close" ? dailyClose :
                      fillOption == "Daily Open" ? dailyOpen :
                      fillOption == "HOD" ? dailyHigh : dailyLow

if upperWickCondition
    shortEntryPrice := fillOption == "Daily Close" ? dailyClose :
                       fillOption == "Daily Open" ? dailyOpen :
                       fillOption == "HOD" ? dailyHigh : dailyLow

// Execute the long and short entries with expiration
var int longOrderExpiry = na
var int shortOrderExpiry = na

if not na(longEntryPrice)
    longOrderExpiry := bar_index + 2  // Order expires after 2 days

if not na(shortEntryPrice)
    shortOrderExpiry := bar_index + 2  // Order expires after 2 days

// Check expiration and execute orders
if (longEntryPrice and bar_index <= longOrderExpiry and high >= longEntryPrice)
    longStopDistance = close - nz(swingLow, close)
    longPositionSize = longStopDistance > 0 ? riskAmount / longStopDistance : na
    if (not na(longPositionSize))
        strategy.entry("Long", strategy.long, qty=longPositionSize)
    longEntryPrice := na  // Reset after entry

if (shortEntryPrice and bar_index <= shortOrderExpiry and low <= shortEntryPrice)
    shortStopDistance = nz(swingHigh, close) - close
    shortPositionSize = shortStopDistance > 0 ? riskAmount / shortStopDistance : na
    if (not na(shortPositionSize))
        strategy.entry("Short", strategy.short, qty=shortPositionSize)
    shortEntryPrice := na  // Reset after entry

// Exit logic: hit the opposing Bollinger Band
if (strategy.position_size > 0) // Long position
    strategy.exit("Exit Long", "Long", limit=dailyUpperBand)
else if (strategy.position_size < 0) // Short position
    strategy.exit("Exit Short", "Short", limit=dailyLowerBand)

if (strategy.position_size > 0) // Long position
    strategy.exit("Stop Loss Long", "Long", stop=swingLow)
else if (strategy.position_size < 0) // Short position
    strategy.exit("Stop Loss Short", "Short", stop=swingHigh)

// Plot daily Bollinger Bands and levels on the chosen time frame
plot(dailyUpperBand, color=color.blue, linewidth=1, title="Daily Upper Bollinger Band")
plot(dailyLowerBand, color=color.blue, linewidth=1, title="Daily Lower Bollinger Band")
plot(dailyBasis, color=color.gray, linewidth=1, title="Daily Middle Bollinger Band")