Sumber daya yang dimuat... Pemuatan...

Strategi Breakout Trendline Dinamis Lang-Only Advanced

Penulis:ChaoZhang, Tanggal: 2024-12-11 14:54:06
Tag:SMATPSLATRVOL

img

Gambaran umum

Ini adalah strategi perdagangan long-only breakout berdasarkan garis tren dinamis dan konfirmasi volume. Strategi ini mengidentifikasi swing high utama dengan melacak pergerakan harga secara real-time dan secara dinamis membangun trendline. Ketika harga melanggar di atas garis tren atas dengan volume yang signifikan, strategi memasuki posisi panjang sambil mengelola risiko melalui mekanisme take-profit, stop-loss, dan trailing stop berbasis persentase.

Prinsip Strategi

Logika inti dibangun di atas tiga pilar utama: konstruksi garis tren dinamis, konfirmasi volume, dan sistem manajemen risiko. Pertama, strategi menggunakan fungsi ta.pivothigh untuk secara dinamis mengidentifikasi swing harga tertinggi dan membangun garis tren atas berdasarkan kemiringan dan intersepsi yang dihitung dari dua swing tertinggi terbaru. Kedua, sinyal masuk harus disertai oleh volume 1,5 kali lebih tinggi dari rata-rata 20 periode untuk memastikan validitas breakout. Akhirnya, strategi menggunakan persentase tetap take-profit (2%) dan stop-loss (1%), dengan stop trailing 1% untuk mengunci keuntungan.

Keuntungan Strategi

  1. Adaptabilitas Dinamis yang Kuat: Trendline secara otomatis diperbarui dengan swing high baru, memungkinkan strategi untuk beradaptasi dengan kondisi pasar yang berbeda.
  2. Mekanisme Konfirmasi Berbagai: Mengkombinasikan price breakout dan konfirmasi volume untuk secara signifikan mengurangi sinyal palsu.
  3. Manajemen Risiko yang Komprehensif: Menggunakan kombinasi stop tetap dan trailing untuk mengendalikan risiko sambil menangkap tren.
  4. Logika Kode yang Jelas: Desain modular membuat strategi mudah dipahami dan dipertahankan.
  5. Efisiensi komputasi tinggi: Menggunakan indikator teknis dasar dengan overhead komputasi rendah.

Risiko Strategi

  1. Risiko Volatilitas Pasar: Dapat memicu seringnya berhenti di pasar yang sangat volatile.
  2. Trend Dependency: Strategi dapat berkinerja buruk di pasar yang berbeda.
  3. Risiko tergelincir: Harga eksekusi yang sebenarnya dapat sangat berbeda dari harga sinyal di pasar yang kurang likuid.
  4. Sensitivitas Parameter: Parameter garis tren dan ambang volume berdampak signifikan pada kinerja strategi.

Arah Optimasi Strategi

  1. Filter Lingkungan Pasar: Memperkenalkan indikator volatilitas (seperti ATR) untuk menyesuaikan parameter atau menyaring sinyal perdagangan.
  2. Optimasi Parameter Dinamis: Sesuaikan rasio laba/rugi berdasarkan kondisi pasar.
  3. Konfirmasi multi-timeframe: Tambahkan konfirmasi tren jangka waktu yang lebih lama untuk meningkatkan akurasi.
  4. Pengukuran Posisi Cerdas: Sesuaikan ukuran posisi secara dinamis berdasarkan volatilitas pasar dan kekuatan sinyal.
  5. Integrasi Sentimen Pasar: Menggabungkan indikator seperti RSI atau MACD untuk meningkatkan keandalan sinyal.

Ringkasan

Ini adalah strategi trend-mengikuti yang dirancang dengan baik dengan logika yang kuat. Melalui kombinasi garis tren dinamis dan konfirmasi volume, bersama dengan sistem manajemen risiko yang komprehensif, strategi menunjukkan kemampuan beradaptasi dan keandalan yang baik. Meskipun memiliki beberapa ketergantungan pasar, ada ruang yang signifikan untuk perbaikan melalui arah optimasi yang disarankan. Pedagang disarankan untuk melakukan optimasi parameter menyeluruh dan backtesting sebelum implementasi langsung.


/*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("Long Only Strategy with Dynamic Trend Lines, Fixed TP/SL, and Trailing SL+", overlay=true, 
         default_qty_type=strategy.percent_of_equity, default_qty_value=10, 
         pyramiding=0, // Prevent multiple entries
         calc_on_order_fills=true, 
         calc_on_every_tick=true)

// === Parameters ===
swingThreshold = input.int(5, title="Swing Detection Threshold")
tpPercent = input.float(2.0, title="Take Profit (%)")
slPercent = input.float(1.0, title="Stop Loss (%)")
trailPercent = input.float(1.0, title="Trailing Stop (%)")
volumeThresholdMultiplier = input.float(1.5, title="Volume Spike Threshold (x MA)")

// === Volume Indicator ===
avgVolume = ta.sma(volume, 20)
volumeSpike = volume > (avgVolume * volumeThresholdMultiplier)

// === Detect Swing High ===
isSwingHigh = ta.pivothigh(high, swingThreshold, swingThreshold)

// Variables to store swing highs
var float swingHigh1 = na
var float swingHigh2 = na
var int swingHighBar1 = na
var int swingHighBar2 = na

// Update swing highs
if (isSwingHigh)
    swingHigh2 := swingHigh1
    swingHighBar2 := swingHighBar1
    swingHigh1 := high[swingThreshold]
    swingHighBar1 := bar_index - swingThreshold

// === Calculate Upper Trend Line ===
var float upperSlope = na
var float upperIntercept = na

// Calculate slope and intercept for upper trend line if there are two swing highs
if (not na(swingHigh1) and not na(swingHigh2))
    deltaX = swingHighBar1 - swingHighBar2
    if (deltaX != 0)
        upperSlope := (swingHigh1 - swingHigh2) / deltaX
        upperIntercept := swingHigh1 - (upperSlope * swingHighBar1)
    else
        upperSlope := 0
        upperIntercept := swingHigh1

// Calculate trend line price for the current bar
var float upperTrendPrice = na
if (not na(upperSlope) and not na(upperIntercept))
    upperTrendPrice := upperSlope * bar_index + upperIntercept

// Calculate trend line price for the previous bar
var float upperTrendPrice_prev = na
if (not na(upperSlope) and not na(upperIntercept))
    upperTrendPrice_prev := upperSlope * (bar_index - 1) + upperIntercept

// === Buy Condition Based on Trend Line Breakout ===

// Buy Signal: Price breaks above Upper Trend Line with volume spike
breakoutBuyCondition = (not na(upperTrendPrice)) and 
                       (close > upperTrendPrice) and 
                       (not na(upperTrendPrice_prev)) and 
                       (close[1] <= upperTrendPrice_prev) and 
                       volumeSpike

// === Manage Single Position ===

// Calculate Take Profit and Stop Loss levels based on percentage
longTakeProfit = close * (1 + tpPercent / 100)
longStopLoss = close * (1 - slPercent / 100)

// Calculate Trailing Stop as trail_offset (in price)
trail_offset = close * (trailPercent / 100)

// Execute Trade with Single Position Management
if (breakoutBuyCondition)
    // Close existing short position if any
    if (strategy.position_size < 0)
        strategy.close("Sell")
    // Open long position
    strategy.entry("Buy", strategy.long)
    // Set Take Profit, Stop Loss, and Trailing Stop Loss for long position
    strategy.exit("Take Profit Buy", from_entry="Buy", limit=longTakeProfit, stop=longStopLoss, trail_offset=trail_offset)

// Plot Buy Signal
plotshape(breakoutBuyCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")


Berkaitan

Lebih banyak