Strategi Jangka Panjang Lanjutan dengan Breakout Garis Tren Dinamis

SMA TP SL ATR VOL
Tanggal Pembuatan: 2024-12-11 14:54:06 Akhirnya memodifikasi: 2024-12-11 14:54:06
menyalin: 0 Jumlah klik: 440
1
fokus pada
1617
Pengikut

Strategi Jangka Panjang Lanjutan dengan Breakout Garis Tren Dinamis

Ringkasan

Ini adalah strategi perdagangan breakout multihead yang didasarkan pada garis tren yang dinamis dan konfirmasi volume transaksi. Strategi ini mengidentifikasi titik tinggi yang kritis dengan melacak pergerakan harga secara real-time, dan menggunakan titik-titik ini secara dinamis untuk membangun garis tren. Strategi ini masuk ke posisi multihead ketika harga disertai dengan kenaikan yang signifikan dari garis tren ke atas, sambil menggunakan stop loss persentase dan tracking stop loss untuk mengelola risiko.

Prinsip Strategi

Logika inti dari strategi ini dibangun di atas tiga pilar utama: pembentukan garis tren dinamis, pengakuan volume transaksi, dan sistem manajemen risiko. Pertama, strategi ini menggunakan fungsi ta.pivothigh untuk secara dinamis mengidentifikasi titik tinggi harga yang bergoyang, dan menghitung kemiringan dan intersection berdasarkan dua titik tinggi yang bergoyang terakhir untuk membangun garis tren ke atas. Kedua, strategi ini mengharuskan sinyal masuk harus disertai dengan volume transaksi lebih dari 1,5 kali rata-rata 20 siklus untuk memastikan efektivitas terobosan.

Keunggulan Strategis

  1. Adaptif secara dinamis: garis tren diperbarui secara otomatis dengan munculnya titik tinggi baru, sehingga strategi dapat beradaptasi dengan lingkungan pasar yang berbeda.
  2. Multiple confirmation mechanism (MCM): Mengurangi sinyal palsu secara signifikan dengan kombinasi dari harga terobosan dan konfirmasi volume transaksi.
  3. Manajemen risiko yang baik: Menggunakan kombinasi dari stop loss yang tetap dan stop loss yang dilacak, untuk mengendalikan risiko dan tidak melewatkan tren besar.
  4. Kode logis yang jelas: Desain modular membuat strategi mudah dipahami dan dipertahankan.
  5. Efisiensi komputasi tinggi: Menggunakan indikator teknologi dasar, beban operasi rendah.

Risiko Strategis

  1. Risiko volatilitas pasar: kemungkinan pemicu stop loss yang sering terjadi di pasar yang bergejolak.
  2. Tergantung pada tren: Strategi mungkin tidak bekerja dengan baik di pasar horizontal.
  3. Risiko slippage: Dalam pasar yang kurang likuid, harga transaksi aktual mungkin memiliki deviasi yang signifikan dari harga sinyal.
  4. Sensitivitas parameter: Pengaturan parameter garis tren dan ambang batas volume transaksi memiliki pengaruh besar terhadap kinerja strategi.

Arah optimasi strategi

  1. Filter lingkungan pasar: memperkenalkan indikator volatilitas (seperti ATR) untuk menyesuaikan parameter atau memfilter sinyal perdagangan.
  2. Optimasi parameter dinamis: Stop loss ratio disesuaikan secara dinamis berdasarkan kondisi pasar.
  3. Konfirmasi multi-siklus: Tambah konfirmasi tren dengan periode waktu yang lebih lama untuk meningkatkan akurasi.
  4. Manajemen Posisi Cerdas: Mengatur ukuran posisi berdasarkan dinamika volatilitas pasar dan intensitas sinyal.
  5. Meningkatkan indikator sentimen pasar: Mengintegrasikan indikator seperti RSI atau MACD untuk meningkatkan keandalan sinyal

Meringkaskan

Ini adalah strategi pelacakan tren yang dirancang secara rasional dan logis. Strategi ini memiliki kemampuan adaptasi dan keandalan yang lebih baik dengan kombinasi garis tren dinamis dan konfirmasi volume transaksi, serta sistem manajemen risiko yang baik. Meskipun ada ketergantungan pasar tertentu, strategi ini masih memiliki ruang untuk peningkatan yang lebih besar melalui arah optimasi yang disarankan.

Kode Sumber Strategi
/*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")