Chiến lược mục tiêu đa cấp và dừng lỗ theo sau

HEIKIN ASHI HA TARGET ZONE Trailing Stop PYRAMIDING BREAK-EVEN risk management
Ngày tạo: 2025-03-31 16:20:21 sửa đổi lần cuối: 2025-03-31 16:20:21
sao chép: 1 Số nhấp chuột: 309
2
tập trung vào
319
Người theo dõi

Chiến lược mục tiêu đa cấp và dừng lỗ theo sau Chiến lược mục tiêu đa cấp và dừng lỗ theo sau

Tổng quan

Chiến lược mục tiêu đa tầng và dừng chân theo dõi là một hệ thống theo dõi xu hướng dựa trên mô hình biểu đồ Heineken, được thiết kế để nắm bắt động lực thị trường và bảo vệ lợi nhuận. Chiến lược này cho phép nhập cảnh ban đầu và nhập cảnh thứ hai ((thanh số kim tự tháp), với mục tiêu lợi nhuận và dừng chân độc lập cho mỗi lần nhập.

Nguyên tắc chiến lược

Chiến lược này hoạt động dựa trên một số nguyên tắc quan trọng:

  1. Tín hiệu đồ thị Hynsi: Sử dụng biểu đồ Hyundai Ansi để lọc tiếng ồn thị trường và nhận biết xu hướng. Dấu hiệu đa đầu được kích hoạt khi giá đóng cửa HA hiện tại cao hơn giá mở cửa HA và cao hơn giá đóng cửa HA trước đó; Dấu hiệu đầu trống ngược lại.

  2. Hệ thống nhập cảnh hai tầng:

    • Lần đầu tiên vào: Đặt mục tiêu và mức dừng lỗ được xác định trước dựa trên tín hiệu HA ban đầu
    • Thêm vào lần thứ hai: Cho phép thêm vào nếu thị trường tiếp tục hiển thị tín hiệu HA thuận lợi sau khi mục tiêu đầu tiên được thực hiện
  3. Bị phá vỡ bảo vệ cân bằng lỗ hổng: Khi mục tiêu đầu tiên đạt được, chiến lược sẽ tự động di chuyển mức dừng lỗ đến mức giá nhập ((điểm cân bằng thua lỗ) để đảm bảo giao dịch không thua lỗ

  4. Khái niệm khu vực mục tiêu: Chiến lược khởi động “khu vực mục tiêu” khi giá gần mức mục tiêu (trong phạm vi giảm giá được xác định trước), tăng mức mục tiêu để nắm bắt nhiều lợi nhuận tiềm năng hơn

  5. Cơ chế dừng thua lỗ:

    • Theo dõi đầu tiên: Sau khi đạt được mục tiêu ban đầu, điểm dừng sẽ di chuyển theo giá cao nhất / thấp nhất, giữ khoảng cách cố định
    • Theo dõi lần đầu vào thứ hai: Có tham số theo dõi dừng lỗ riêng cho phần đặt cược
  6. Theo dõi trạng tháiChiến lược: duy trì nhiều biến để theo dõi hướng giao dịch, giá cực, đạt được mục tiêu đầu tiên và hiện đang ở trong khu vực mục tiêu

Lợi thế chiến lược

  1. Quản lý rủi ro toàn diệnChiến lược này cung cấp quản lý rủi ro đa tầng, bảo vệ vốn khỏi ảnh hưởng của sự sụt giảm mạnh mẽ bằng cách đặt trước lỗ hổng, bảo vệ cân bằng lỗ hổng và dừng lỗ theo dõi.

  2. Cơ hội tăng giá kim tự tháp: Bằng cách cho phép nhập lần thứ hai, chiến lược có thể tăng vị trí trong xu hướng đã xác nhận, tăng tiềm năng lợi nhuận, đồng thời không làm tăng rủi ro tổng thể vì giao dịch đầu tiên đã bị khóa ở điểm cân bằng lỗ hổng.

  3. Tiếp theo, các nhà đầu tư sẽ có thể bắt được lợi nhuận.: Khu vực mục tiêu và chức năng tăng mục tiêu cho phép chiến lược tự động mở rộng mục tiêu lợi nhuận trong thị trường mạnh, thay vì thoát khỏi xu hướng mạnh sớm.

  4. Độ cao tùy chỉnhChiến lược cung cấp các thiết lập tham số rộng rãi, cho phép các nhà giao dịch điều chỉnh tùy theo điều kiện thị trường, đặc điểm của các loại giao dịch và sở thích rủi ro cá nhân.

  5. Tự động thực hiện: Một khi thiết lập tham số được hoàn thành, chiến lược thực hiện tất cả các điều chỉnh vào, ra và dừng lỗ, loại bỏ tác động của giao dịch cảm xúc.

  6. Phản hồi trực quanChiến lược bao gồm các thành phần hiển thị rõ ràng, hiển thị các chỉ số mức mục tiêu, mức dừng và trạng thái hiện tại, cho phép thương nhân dễ dàng theo dõi tiến trình giao dịch.

Rủi ro chiến lược

  1. Độ nhạy tham sốHiệu suất chiến lược phụ thuộc rất nhiều vào thiết lập tham số. Mục tiêu hoặc tham số dừng lỗ không đúng có thể dẫn đến việc thoát khỏi giao dịch tốt sớm hoặc chịu rủi ro giảm quá nhiều.

  2. Rủi ro trượt giáĐặc biệt trong thời gian thực hiện lệnh dừng chân theo dõi, lỗ hổng thị trường hoặc thiếu hụt thanh khoản có thể dẫn đến việc giá thực hiện thực tế khác với mức dừng chân lý tưởng. Việc xem xét tăng độ đệm trượt hoặc sử dụng các tham số theo dõi thận trọng hơn có thể làm giảm rủi ro này.

  3. Thêm giao dịch quá mức: Cho phép nhập cảnh thứ hai có thể dẫn đến giao dịch quá mức trong thị trường bất ổn. Việc áp dụng các điều kiện lọc bổ sung hoặc giới hạn thời gian nhập cảnh thứ hai có thể làm giảm tình trạng này.

  4. Rủi ro chuyển đổi thị trường: Mặc dù chiến lược hoạt động tốt trong thị trường xu hướng, nhưng có thể hoạt động kém trong thị trường chấn động hoặc thị trường chuyển hướng đột ngột. Việc sử dụng chiến lược kết hợp với bộ lọc trạng thái thị trường có thể làm tăng hiệu quả tổng thể.

  5. Tính mật độ tính toán: Chiến lược theo dõi nhiều biến và trạng thái có thể gây ra sự chậm trễ trong thực hiện trên một số nền tảng. Tối ưu hóa mã và đơn giản hóa một số tính toán có thể cải thiện hiệu suất.

Hướng tối ưu hóa chiến lược

  1. Thêm bộ lọc xu hướng: Các chỉ số xu hướng tích hợp (như trung bình di chuyển, ADX hoặc chỉ số cường độ xu hướng) có thể cải thiện chất lượng nhập cảnh, chỉ giao dịch theo hướng xu hướng được xác nhận. Điều này sẽ giảm tín hiệu sai trong thị trường rung động.

  2. Thêm điều kiện lọc thời gian: Thêm một cửa sổ thời gian hoặc thời gian làm mát cho lần nhập lần thứ hai để ngăn chặn giao dịch quá mức trong một khoảng thời gian ngắn hoặc xuất hiện cùng một xu hướng thường xuyên.

  3. Điều chỉnh biến động: Bằng cách điều chỉnh động các tham số mục tiêu và dừng lỗ dựa trên biến động của thị trường (ví dụ như ATR), chiến lược có thể thích ứng với các điều kiện thị trường khác nhau. Điều này sẽ làm cho mức dừng và mục tiêu phù hợp hơn với đặc điểm thị trường hiện tại.

  4. Cải thiện logic Heinz-Ansi: Các phán đoán HA hiện tại tương đối đơn giản, có thể tăng cường chất lượng tín hiệu bằng cách xem xét nhiều hình dạng đồ thị HA hoặc chỉ số động lực HA.

  5. Thêm một phần lợi nhuận khóa: Thực hiện chức năng khóa lợi nhuận theo giai đoạn, cho phép thanh toán một số vị trí khi đạt đến mức lợi nhuận nhất định, trong khi cho phép phần còn lại tiếp tục hoạt động, cân bằng giữa bảo vệ lợi nhuận và tối đa hóa lợi nhuận tiềm năng.

  6. Tối ưu hóa logic khu vực mục tiêu: Khu vực mục tiêu hiện tại sử dụng bước tăng cố định. Các thuật toán điều chỉnh mục tiêu động dựa trên biến động thị trường hoặc biến động giá gần đây có thể được xem xét để thích ứng tốt hơn với các điều kiện thị trường thay đổi.

Tóm tắt

Chiến lược mục tiêu đa tầng và chiến lược dừng lỗ theo dõi là một hệ thống giao dịch toàn diện kết hợp với nhận dạng xu hướng của Hynesi, quản lý mục tiêu động, cơ hội nhập lần thứ hai và kiểm soát rủi ro đa tầng. Ưu điểm chính của chiến lược này nằm trong cơ chế mở rộng lợi nhuận linh hoạt và khung quản lý rủi ro nghiêm ngặt, làm cho nó phù hợp để nắm bắt chuyển động đáng kể trong thị trường có xu hướng.

Mặc dù chiến lược này cung cấp một khuôn khổ mạnh mẽ, nhưng hiệu quả của nó vẫn phụ thuộc vào điều chỉnh tham số và điều kiện thị trường thích hợp. Chiến lược này có thể được tăng cường thêm về sự ổn định và thích ứng của nó bằng cách thêm các bộ lọc trạng thái thị trường, cơ chế điều chỉnh biến động và logic xác nhận nhập cảnh phức tạp hơn. Cuối cùng, chiến lược này đại diện cho một loại kim cân bằng bảo vệ vốn giao dịch thông qua kiểm soát rủi ro có hệ thống trong khi cố gắng nắm bắt xu hướng tối đa.

Mã nguồn chiến lược
/*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)