Strategi target multilevel dan trailing stop loss

HEIKIN ASHI HA TARGET ZONE Trailing Stop PYRAMIDING BREAK-EVEN risk management
Tanggal Pembuatan: 2025-03-31 16:20:21 Akhirnya memodifikasi: 2025-03-31 16:20:21
menyalin: 1 Jumlah klik: 309
2
fokus pada
319
Pengikut

Strategi target multilevel dan trailing stop loss Strategi target multilevel dan trailing stop loss

Ringkasan

Strategi target dan stop loss multi-tingkat adalah sistem pelacakan tren yang didasarkan pada model grafik Heineken dan dirancang untuk menangkap pergerakan pasar dan melindungi keuntungan. Strategi ini memungkinkan masuk awal dan masuk kedua (pyramidal overlay), dengan target keuntungan dan pengaturan stop loss yang independen untuk setiap masuk.

Prinsip Strategi

Strategi ini didasarkan pada beberapa prinsip utama:

  1. Sinyal peta Heinz Ansi: Gunakan grafik Heinz Ansi untuk menyaring kebisingan pasar dan mengidentifikasi tren. Sinyal multihead dipicu ketika harga penutupan HA saat ini lebih tinggi dari harga pembukaan HA dan lebih tinggi dari harga penutupan HA sebelumnya; Sinyal kosong sebaliknya.

  2. Sistem Masuk Dua Tingkat:

    • Pertama kali masuk: Berdasarkan sinyal HA awal, atur target dan level stop loss yang telah ditentukan sebelumnya
    • Masuk kedua: Masuk tambahan diizinkan jika pasar terus menunjukkan sinyal HA yang menguntungkan setelah target pertama tercapai
  3. Menembus perlindungan neraca kerugian: Ketika target pertama tercapai, strategi secara otomatis memindahkan level stop loss ke harga masuk (titik keseimbangan untung-rugi) untuk memastikan bahwa perdagangan tidak mengalami kerugian

  4. Konsep target areaKetika harga mendekati level target (dalam batas defisit yang telah ditentukan), strategi memulai “area target”, meningkatkan level target untuk menangkap lebih banyak potensi keuntungan

  5. Mekanisme Stop Loss:

    • Pelacakan masuk pertama: Setelah mencapai target awal, stop loss akan mengikuti pergerakan harga tertinggi/terendah, dengan jarak tetap
    • Pelacakan entri kedua: memiliki parameter stop loss pelacakan terpisah untuk bagian penarikan
  6. Pelacakan statusStrategi: Mempertahankan beberapa variabel untuk melacak arah transaksi, titik tertinggi harga, apakah target pertama tercapai, dan apakah saat ini berada di area target

Keunggulan Strategis

  1. Manajemen risiko yang komprehensifStrategi ini menyediakan manajemen risiko multi-lapisan untuk melindungi modal dari dampak penurunan yang signifikan dengan menetapkan Stop Loss, Loss Balance Protection, dan Trailing Stop Loss.

  2. Peluang Pertambahan Nilai PiramidaDengan memungkinkan entri kedua, strategi dapat meningkatkan posisi dalam tren yang telah dikonfirmasi, meningkatkan potensi keuntungan, dan tidak meningkatkan risiko keseluruhan karena perdagangan pertama telah terkunci pada titik keseimbangan untung-rugi.

  3. Penangkapan keuntungan dinamisTarget area dan target augmentasi memungkinkan strategi untuk secara otomatis memperluas target keuntungan di pasar yang kuat, bukan keluar dari tren yang kuat lebih awal.

  4. Ketinggian dapat disesuaikanStrategi menawarkan pengaturan parameter yang luas, yang memungkinkan pedagang untuk beradaptasi dengan kondisi pasar, karakteristik varietas perdagangan, dan preferensi risiko pribadi.

  5. Pelaksanaan otomatis: Setelah pengaturan parameter selesai, strategi melakukan semua entry, exit dan stop loss adjustment, menghilangkan efek perdagangan emosi.

  6. Umpan balik visualStrategi terdiri dari komponen visual yang jelas yang menampilkan level target, level stop loss, dan indikator status saat ini, sehingga pedagang dapat dengan mudah memantau kemajuan perdagangan.

Risiko Strategis

  1. Parameter SensitivitasKinerja strategi sangat bergantung pada pengaturan parameter. Target atau parameter stop loss yang tidak tepat dapat menyebabkan keluar dari perdagangan yang baik terlalu dini atau menanggung risiko penurunan yang terlalu besar. Risiko ini dapat dikurangi dengan mengevaluasi sejarah dan mengoptimalkan parameter khusus pasar.

  2. Risiko Tergelincir: Terutama selama eksekusi penutupan trailing, celah pasar atau kurangnya likuiditas dapat menyebabkan harga eksekusi yang sebenarnya berbeda dari tingkat penutupan yang ideal. Pertimbangan untuk meningkatkan buffer slippage atau menggunakan parameter trailing yang lebih konservatif dapat mengurangi risiko ini.

  3. Terjadinya overtrading kembali: Mengaktifkan entri kedua dapat menyebabkan perdagangan berlebihan di pasar yang tidak stabil. Menerapkan kondisi penyaringan tambahan atau pembatasan waktu masuk kedua dapat mengurangi hal tersebut.

  4. Risiko perpindahan pasarMeskipun strategi bekerja dengan baik di pasar tren, namun mungkin tidak bekerja dengan baik di pasar yang bergejolak atau bergeser secara tiba-tiba. Menggabungkan strategi dengan filter status pasar dapat meningkatkan efektivitas keseluruhan.

  5. Intensitas komputasi: Strategi untuk melacak beberapa variabel dan status yang dapat menyebabkan keterlambatan eksekusi pada beberapa platform. Mengoptimalkan kode dan menyederhanakan beberapa perhitungan dapat meningkatkan kinerja.

Arah optimasi strategi

  1. Menambahkan filter tren: Integrasi indikator tren (seperti Moving Average, ADX atau Indikator Kekuatan Tren) dapat meningkatkan kualitas masuk, hanya berdagang di arah tren yang dikonfirmasi.

  2. Masukkan kondisi penyaringan waktu: Menambahkan jendela waktu atau periode pendinginan untuk entri kedua, untuk mencegah overtrading dalam waktu singkat atau sering masuk dan keluar dari tren yang sama.

  3. Adaptasi volatilitasDengan menyesuaikan target dan parameter stop loss secara dinamis berdasarkan volatilitas pasar (misalnya ATR), strategi dapat disesuaikan dengan kondisi pasar yang berbeda. Ini akan membuat level stop loss dan target lebih sesuai dengan karakteristik pasar saat ini.

  4. Peningkatan Logika Heinz-AnsiPengadilan HA saat ini relatif sederhana, dan kualitas sinyal dapat ditingkatkan dengan mempertimbangkan banyak bentuk grafik HA atau indikator dinamika HA.

  5. Menambahkan sebagian dari profit lockImplementasi fitur penguncian keuntungan bertahap, yang memungkinkan untuk melunasi sebagian posisi ketika tingkat keuntungan tertentu tercapai, sementara membiarkan sisa tetap beroperasi, menyeimbangkan perlindungan keuntungan dan memaksimalkan potensi keuntungan.

  6. Mengoptimalkan target area logika: Target area saat ini menggunakan langkah-langkah tambahan yang tetap. Algoritma penyesuaian target yang dinamis dapat dipertimbangkan berdasarkan volatilitas pasar atau pergerakan harga baru-baru ini, agar lebih sesuai dengan perubahan kondisi pasar.

Meringkaskan

Multi-level target dan strategi stop-loss adalah sistem perdagangan yang komprehensif yang menggabungkan identifikasi tren Heinz Ansi, manajemen target dinamis, kesempatan masuk kedua, dan kontrol risiko multi-level. Keunggulan utama dari strategi ini adalah mekanisme ekspansi keuntungan yang fleksibel dan kerangka manajemen risiko yang ketat, yang membuatnya cocok untuk menangkap pergerakan yang signifikan di pasar yang sedang tren.

Meskipun strategi ini memberikan kerangka kerja yang kuat, keefektifan strategi ini masih tergantung pada penyesuaian parameter dan kondisi pasar yang tepat. Strategi ini dapat ditingkatkan lebih lanjut untuk stabilitas dan adaptasi dengan menambahkan filter kondisi pasar, mekanisme penyesuaian volatilitas, dan logika konfirmasi masuk yang lebih kompleks.

Kode Sumber Strategi
/*backtest
start: 2024-03-31 00:00:00
end: 2025-03-29 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Algo Trading v1 | SUNNY GUHA By OIESU", overlay=true, margin_long=100, margin_short=100, pyramiding=100)

// ———— USER INPUTS ———— //
// First Entry Settings
float initialTarget  = input.float(10000, "First Entry: Target ($)", minval=1, tooltip="First target level")
float initialStopLoss = input.float(3000, "First Entry: Stop Loss ($)", minval=1, tooltip="Initial stop loss distance")
bool  useTrailFirst = input.bool(true, "First Entry: Enable Trail", tooltip="Enable trailing features after first target hit")
float profitTrailStepFirst = input.float(1500, "First Entry: Trail Amount ($)", minval=1, tooltip="Trail amount after first target hit")
bool  useTargetZoneFirst = input.bool(true, "First Entry: Enable Target Zone", tooltip="Enable target zone feature")
float targetZoneThresholdFirst = input.float(1000, "First Entry: Target Zone Threshold ($)", minval=1, tooltip="Distance to activate target zone")
float targetIncreaseStepFirst = input.float(2000, "First Entry: Target Increase ($)", minval=1, tooltip="Amount to increase target")

// Second Entry Settings
bool  enableSecondEntries = input.bool(true, "Enable Second Entries", tooltip="Allow re-entries after first target hit")
float secondTarget = input.float(5000, "Second Entry: Target ($)", minval=1, tooltip="Target for second entries")
float secondStopLoss = input.float(2000, "Second Entry: Stop Loss ($)", minval=1, tooltip="Stop loss for second entries")
bool  useTrailSecond = input.bool(true, "Second Entry: Enable Trail", tooltip="Enable trailing for second entries")
float profitTrailStepSecond = input.float(1500, "Second Entry: Trail Amount ($)", minval=1, tooltip="Trail amount for second entries")
bool  useTargetZoneSecond = input.bool(true, "Second Entry: Enable Target Zone", tooltip="Enable target zone")
float targetZoneThresholdSecond = input.float(1000, "Second Entry: Target Zone Threshold ($)", minval=1)
float targetIncreaseStepSecond = input.float(2000, "Second Entry: Target Increase ($)", minval=1)

// ———— HEIKIN-ASHI CALCULATIONS ———— //
var float haOpen   = na
var float haClose  = na
var float haHigh   = na
var float haLow    = na

haClose := (open + high + low + close)/4
haOpen  := na(haOpen[1]) ? (open + close)/2 : (haOpen[1] + haClose[1])/2
haHigh  := math.max(high, math.max(haOpen, haClose))
haLow   := math.min(low, math.min(haOpen, haClose))

// ———— TRACKING VARIABLES ———— //
var float highestPrice     = na  // Tracks highest price for long positions
var float lowestPrice      = na  // Tracks lowest price for short positions
var float basePrice        = na  // Entry price for position
var float targetLevel      = na  // Current target level
var float stopLevel        = na  // Current stop level
var bool  firstTargetHit   = false  // Indicates if first target was hit
var string tradeDirection  = "none"  // Current trade direction
var bool   isSecondEntry   = false   // Tracks if current position is a second entry
var bool   inTargetZone    = false   // Tracks if price is in target zone

// ———— SIGNAL DETECTION ———— //
bullish = haClose > haOpen and haClose > haClose[1]
bearish = haClose < haOpen and haClose < haClose[1]

// Entry conditions - only allow second entries if enabled and after first target hit
longCondition  = bullish and (tradeDirection != "long" or (enableSecondEntries and firstTargetHit))
shortCondition = bearish and (tradeDirection != "short" or (enableSecondEntries and firstTargetHit))

// Position Management - Long Positions
if strategy.position_size > 0
    highestPrice := math.max(high, nz(highestPrice, high))

    if isSecondEntry
        // Second Entry Management
        inTargetZone := useTargetZoneSecond and high >= targetLevel - targetZoneThresholdSecond

        if inTargetZone and useTargetZoneSecond
            targetLevel := targetLevel + targetIncreaseStepSecond

        if useTrailSecond
            stopLevel := math.max(stopLevel, highestPrice - profitTrailStepSecond)

        if low <= stopLevel
            strategy.close_all("Second Entry Stop")
            basePrice := na
            targetLevel := na
            stopLevel := na
            highestPrice := na
            lowestPrice := na
            firstTargetHit := false
            isSecondEntry := false
            inTargetZone := false
            tradeDirection := "none"
    else
        // First Entry Management - improved profit locking
        if not firstTargetHit and high >= basePrice + initialTarget
            // First target hit - ALWAYS lock profit at break-even
            firstTargetHit := true
            stopLevel := basePrice  // Move stop to break-even
            targetLevel := useTrailFirst ? high + targetIncreaseStepFirst : basePrice + initialTarget
        else if firstTargetHit
            // Only modify target if trailing is enabled
            if useTrailFirst
                inTargetZone := useTargetZoneFirst and high >= targetLevel - targetZoneThresholdFirst
                if inTargetZone and useTargetZoneFirst
                    targetLevel := targetLevel + targetIncreaseStepFirst
                // Trail stop-loss but never below break-even
                stopLevel := math.max(basePrice, highestPrice - profitTrailStepFirst)
        else
            // Before first target hit
            targetLevel := basePrice + initialTarget
            stopLevel := basePrice - initialStopLoss

        // Exit on stop hit - this could only be at break-even or better after first target
        if low <= stopLevel
            strategy.close_all("First Entry Stop")
            basePrice := na
            targetLevel := na
            stopLevel := na
            highestPrice := na
            lowestPrice := na
            firstTargetHit := false
            isSecondEntry := false
            inTargetZone := false
            tradeDirection := "none"

// Position Management - Short Positions
if strategy.position_size < 0
    lowestPrice := math.min(low, nz(lowestPrice, low))

    if isSecondEntry
        // Second Entry Management
        inTargetZone := useTargetZoneSecond and low <= targetLevel + targetZoneThresholdSecond

        if inTargetZone and useTargetZoneSecond
            targetLevel := targetLevel - targetIncreaseStepSecond

        if useTrailSecond
            stopLevel := math.min(stopLevel, lowestPrice + profitTrailStepSecond)

        if high >= stopLevel
            strategy.close_all("Second Entry Stop")
            basePrice := na
            targetLevel := na
            stopLevel := na
            highestPrice := na
            lowestPrice := na
            firstTargetHit := false
            isSecondEntry := false
            inTargetZone := false
            tradeDirection := "none"
    else
        // First Entry Management - improved profit locking
        if not firstTargetHit and low <= basePrice - initialTarget
            // First target hit - ALWAYS lock profit at break-even
            firstTargetHit := true
            stopLevel := basePrice  // Move stop to break-even
            targetLevel := useTrailFirst ? low - targetIncreaseStepFirst : basePrice - initialTarget
        else if firstTargetHit
            // Only modify target if trailing is enabled
            if useTrailFirst
                inTargetZone := useTargetZoneFirst and low <= targetLevel + targetZoneThresholdFirst
                if inTargetZone and useTargetZoneFirst
                    targetLevel := targetLevel - targetIncreaseStepFirst
                // Trail stop-loss but never above break-even
                stopLevel := math.min(basePrice, lowestPrice + profitTrailStepFirst)
        else
            // Before first target hit
            targetLevel := basePrice - initialTarget
            stopLevel := basePrice + initialStopLoss

        // Exit on stop hit - this could only be at break-even or better after first target
        if high >= stopLevel
            strategy.close_all("First Entry Stop")
            basePrice := na
            targetLevel := na
            stopLevel := na
            highestPrice := na
            lowestPrice := na
            firstTargetHit := false
            isSecondEntry := false
            inTargetZone := false
            tradeDirection := "none"

// New Position Entry
if strategy.position_size == 0
    if longCondition
        tradeDirection := "long"
        basePrice := close
        targetLevel := basePrice + (firstTargetHit ? secondTarget : initialTarget)
        stopLevel := basePrice - (firstTargetHit ? secondStopLoss : initialStopLoss)
        highestPrice := high
        isSecondEntry := firstTargetHit
        strategy.entry("Long", strategy.long)
    else if shortCondition
        tradeDirection := "short"
        basePrice := close
        targetLevel := basePrice - (firstTargetHit ? secondTarget : initialTarget)
        stopLevel := basePrice + (firstTargetHit ? secondStopLoss : initialStopLoss)
        lowestPrice := low
        isSecondEntry := firstTargetHit
        strategy.entry("Short", strategy.short)

// ———— VISUALIZATION ———— //
// Entry signals
plotshape(longCondition and (strategy.position_size == 0),     title="Buy", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)

plotshape(shortCondition and (strategy.position_size == 0),     title="Sell", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)

// Target and stop levels with clearer colors
plot(targetLevel, title="Target Level", color=color.orange, linewidth=2)
plot(stopLevel, title="Stop Level", color=color.red, linewidth=2)

// Break-even level - shown prominently after first target hit
plot(strategy.position_size != 0 and firstTargetHit ? basePrice : na,     title="Break-Even Level", color=color.green, linewidth=2, style=plot.style_linebr)

// Debug plots for state tracking
plotchar(firstTargetHit, title="First Target Hit", char="T", location=location.top, color=color.yellow, size=size.tiny)
plotchar(isSecondEntry, title="Second Entry", char="2", location=location.top, color=color.white, size=size.tiny)
plotchar(useTrailFirst and firstTargetHit, title="Trail Active", char="→", location=location.top, color=color.blue, size=size.tiny)
plotchar(inTargetZone, title="Target Zone", char="Z", location=location.top, color=color.fuchsia, size=size.tiny)