Chiến lược thêm vị trí động theo phong bì giá tiến bộ thông minh

DCA MA SMA EMA Envelope TAKE PROFIT STOP LOSS risk management Moving Average Envelope
Ngày tạo: 2025-05-14 15:14:54 sửa đổi lần cuối: 2025-05-14 15:14:54
sao chép: 0 Số nhấp chuột: 330
2
tập trung vào
319
Người theo dõi

Chiến lược thêm vị trí động theo phong bì giá tiến bộ thông minh Chiến lược thêm vị trí động theo phong bì giá tiến bộ thông minh

Tổng quan

Chiến lược tăng giá động theo chu kỳ của Intelligent Progressive Price Packet (IPP) là một chiến lược giao dịch đường dài dựa trên chu kỳ của đường trung bình di chuyển, mua khi giá giảm xuống chu kỳ và kiểm soát rủi ro bằng cách tăng dần. Chiến lược này hỗ trợ tối đa 8 lần mua, có thời gian nguội giữa các lần mua và đặt dừng dựa trên giá nhập trung bình hoặc đặt dừng dựa trên kiểm soát rủi ro.

Ý tưởng cốt lõi của chiến lược là mua khi giá quay trở lại đường ray di chuyển, thường đại diện cho khu vực bán tháo ngắn hạn, sau đó thu lợi nhuận khi giá quay trở lại đường ray, đồng thời thiết lập lỗ hổng hợp lý để kiểm soát rủi ro. Chiến lược này tận dụng tối đa tính năng biến động giá, giảm chi phí trung bình bằng cách mua hàng loạt nhiều lần, phù hợp với môi trường thị trường biến động cao.

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

Các nguyên tắc cốt lõi của chiến lược này dựa trên một số thành phần quan trọng sau:

  1. Tính toán vòng tròn đường trung bình di chuyển:

    • Đầu tiên, tính toán đường viền (SMA hoặc EMA)
    • Vòng tròn trên = đường chuẩn * (1 + phần trăm lệch)
    • Dải lưới dưới bao bì = đường chuẩn * (1 - % lệch)
  2. Điều kiện nhập học:

    • Giá thấp hơn so với băng thông dưới bao bì
    • Từ lần mua cuối cùng đã qua thời gian làm mát.
    • Số lần mua hiện tại chưa vượt quá giới hạn tối đa (8 lần)
    • Giá thấp hơn giá nhập cảnh trung bình (hoặc trong xu hướng tăng)
    • Giá thấp hơn giá mua trước đó
  3. Điều kiện thi đấu:

    • Giá tăng lên trên tỷ lệ phần trăm dừng thiết lập của giá nhập cảnh trung bình
    • Hoặc giá giảm xuống dưới tỷ lệ dừng lỗ của giá nhập cảnh trung bình.
  4. Quản lý vị trí:

    • Mỗi lần mua, giá nhập cảnh trung bình được ghi lại và cập nhật.
    • Có thể mua tối đa 8 lần để tạo ra một khoản tăng giá theo thang.
    • Sau khi dừng hoặc dừng lỗ được kích hoạt, tất cả các vị trí sẽ được thanh toán một lần.
  5. Xác định xu hướng:

    • Xác định xu hướng lớn thông qua hướng của đường viền ((đường viền tăng lên là xu hướng tăng lên))
    • Trong xu hướng tăng, chiến lược nới lỏng một số điều kiện mua

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

  1. Kiểm soát rủi ro theo cấp độ: Chiến lược này sử dụng phương pháp gia tăng dần dần, thay vì mua tất cả các vị trí một lần, để phân tán rủi ro đầu vào một cách hiệu quả. Bằng cách gia tăng tối đa 8 lần, chi phí trung bình liên tục giảm trong xu hướng giảm, tăng khả năng lợi nhuận cuối cùng.

  2. Cơ chế nhập cảnh và xuất cảnh tự động: Chiến lược này dựa trên các chỉ số kỹ thuật rõ ràng, tự động đánh giá điểm vào và điểm ra, giảm quyết định giao dịch cảm xúc do đánh giá chủ quan.

  3. Điều chỉnh tham số linh hoạt: Chiến lược cung cấp nhiều tham số có thể điều chỉnh, bao gồm chiều dài đường dây bao bì, tỷ lệ lệ lệ lệch, tỷ lệ dừng lỗ và thời gian mua lạnh, có thể được tối ưu hóa cho các môi trường thị trường khác nhau.

  4. Khả năng nhận biết xu hướng: Chiến lược nhận diện xu hướng bằng cách đánh giá hướng của đường viền, giảm điều kiện mua thích hợp trong xu hướng tăng, tăng tính linh hoạt và thích ứng của chiến lược.

  5. Tận dụng biến động: Đặc biệt thích hợp cho các ứng dụng trong thị trường biến động cao, có thể sử dụng hiệu quả biến động giá để gia tăng và kiếm lợi nhuận, biến động lớn hơn, lợi nhuận tiềm năng của chiến lược cũng cao hơn.

Rủi ro chiến lược

  1. Rủi ro đảo ngược xu hướng: Trong một xu hướng giảm mạnh, giá có thể tiếp tục phá vỡ vòng tròn, dẫn đến tổn thất sau nhiều lần gia tăng. Mặc dù đã thiết lập cơ chế dừng lỗ, nhưng trong trường hợp cực đoan, có thể gây ra tổn thất lớn hơn.

  2. Độ nhạy tham số: Hiệu suất của chiến lược phụ thuộc rất nhiều vào thiết lập tham số, và các môi trường thị trường khác nhau có thể yêu cầu các kết hợp tham số khác nhau. Thiết lập tham số sai có thể dẫn đến giao dịch quá mức hoặc bỏ lỡ cơ hội giao dịch.

  3. Nhu cầu tài chính: Vì chiến lược cho phép tối đa 8 lần mua, nếu thị trường tiếp tục giảm, cần chuẩn bị đủ tiền để hỗ trợ nhiều lần đặt cược, điều này có thể vượt quá khả năng chịu đựng của tài khoản vốn nhỏ.

  4. Rủi ro trong quá trình làm mát: Việc thiết lập thời gian giảm giá không đúng cách có thể dẫn đến việc bỏ lỡ cơ hội mua hàng quan trọng, hoặc gia tăng quá sớm trong thời điểm không phù hợp.

  5. Cài đặt rủi ro: Nếu thiết lập tỷ lệ dừng quá cao, bạn có thể bỏ lỡ cơ hội kiếm tiền; nếu thiết lập quá thấp, bạn có thể hạn chế không gian kiếm tiền tiềm năng.

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

  1. Điều chỉnh các tham số liên kết: Có thể xem xét tỷ lệ lệ lệ lệch của dải bao bì tự động điều chỉnh theo biến động của thị trường, sử dụng lệch nhỏ hơn trong thị trường biến động thấp và lệch lớn hơn trong thị trường biến động cao. Như vậy, có thể thích ứng tốt hơn với các môi trường thị trường khác nhau.

  2. Thêm một bộ lọc xu hướng phức tạp hơn: Chiến lược hiện tại sử dụng một đường viền đơn giản để xác định xu hướng, bạn có thể xem xét thêm các chỉ số xu hướng phức tạp hơn (như MACD, ADX, v.v.) để cải thiện độ chính xác của phán đoán xu hướng và tránh mua quá sớm trong xu hướng giảm mạnh.

  3. Cơ chế dừng động: Có thể thay đổi Stop Loss tỷ lệ cố định thành cơ chế điều chỉnh động dựa trên biến động của thị trường, chẳng hạn như thiết lập mức Stop Loss dựa trên ATR.

  4. Tối ưu hóa quản lý tài chính: Có thể thực hiện phân bổ vị trí động, thay vì một số tiền cố định cho mỗi lần mua. Ví dụ, có thể sử dụng một tỷ lệ nhỏ tiền trong lần mua đầu tiên và dần dần tăng số tiền mua khi giá tiếp tục giảm.

  5. Thêm bộ lọc thời gian: Xem xét thêm các điều kiện lọc dựa trên thời gian, tránh giao dịch trong thời gian thị trường hoạt động thấp hoặc xác định thời gian giao dịch có lợi nhất dựa trên dữ liệu thống kê lịch sử.

Tóm tắt

Chiến lược gia tăng động của Intelligent Progressive Price Packet Lines là một phương pháp giao dịch có hệ thống kết hợp phân tích kỹ thuật và quản lý rủi ro. Chiến lược này xác định các cơ hội mua tiềm năng thông qua các gói trung bình di chuyển, sử dụng gia tăng dần để giảm chi phí trung bình và thiết lập các quy tắc dừng lỗ rõ ràng để kiểm soát rủi ro.

Chiến lược này đặc biệt phù hợp để sử dụng trong thị trường có tính biến động cao, có thể sử dụng hiệu quả biến động giá để tạo cơ hội lợi nhuận. Đồng thời, có rất nhiều chỗ để cải thiện chiến lược thông qua tối ưu hóa tham số và thêm bộ lọc bổ sung. Tuy nhiên, người sử dụng cần chú ý đến rủi ro của chiến lược, đặc biệt là rủi ro mất mát liên tục có thể xảy ra trong xu hướng giảm mạnh, đảm bảo có đủ tiền để hỗ trợ đặt nhiều lần và điều chỉnh các tham số tùy theo môi trường thị trường khác nhau.

Nhìn chung, chiến lược này cung cấp một khung giao dịch có hệ thống, kết hợp các yếu tố theo dõi xu hướng và giao dịch ngược, giảm quyết định cảm xúc thông qua các quy tắc rõ ràng, giúp nuôi dưỡng thói quen giao dịch có kỷ luật. Đây là một lựa chọn chiến lược đáng xem xét cho các nhà giao dịch tìm kiếm lợi nhuận ổn định trong thị trường biến động.

Mã nguồn chiến lược
/*backtest
start: 2024-05-14 00:00:00
end: 2025-05-12 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("SmartScale Envelope DCA", 
     overlay=true, 
     pyramiding=8, 
     default_qty_type=strategy.cash, 
     default_qty_value=25,         // Order size = $25 CAD
     initial_capital=200,          // Initial capital = $200 CAD
     currency=currency.CAD)        // Base currency = CAD

// === Inputs
len                = input.int(13, title="Envelope Length", minval=1)
percent            = input.float(6.6, title="Envelope % Offset", step=0.1) / 100
src                = input(close, title="Source")
exponential        = input(false)
stopLossPctInput   = input.float(15.0, title="Stop Loss %", minval=0.1, step=0.1)
takeProfitPctInput = input.float(5.0, title="Take Profit % from Avg Entry", minval=0.1, step=0.1)
cooldown           = input.int(7, title="Candles Between Buys")  // moved to bottom

stopLossPct    = stopLossPctInput / 100
takeProfitPct  = takeProfitPctInput / 100
maxBuys        = 8  // Hardcoded max buy-ins

// === Envelope Calculation
basis = exponential ? ta.ema(src, len) : ta.sma(src, len)
upper = basis * (1 + percent)
lower = basis * (1 - percent)

// === Limit Backtest to Last 365 Days
startDate   = timestamp("GMT-5", year(timenow), month(timenow), dayofmonth(timenow)) - 365 * 24 * 60 * 60 * 1000
inDateRange = time >= startDate

// === State Tracking
var float avgEntryPrice = na
var float lastBuyPrice  = na
var int buyCount        = 0
var int lastBuyBar      = na

// === Trend Detection
isUptrend = basis > basis[1]

// === Entry Conditions
lowBelowLower     = low < lower
cooldownPassed    = na(lastBuyBar) or (bar_index - lastBuyBar >= cooldown)
belowAvgEntry     = na(avgEntryPrice) or close < avgEntryPrice
lowerThanLastBuy  = na(lastBuyPrice) or close < lastBuyPrice
allowBuyIn        = (belowAvgEntry and lowerThanLastBuy) or isUptrend
highAboveUpper    = high > upper

// === Exit Conditions
sellCondition     = not na(avgEntryPrice) and close >= avgEntryPrice * (1 + takeProfitPct)
stopLossTriggered = not na(avgEntryPrice) and close <= avgEntryPrice * (1 - stopLossPct)

// === Buy Logic
if inDateRange and lowBelowLower and cooldownPassed and buyCount < maxBuys and allowBuyIn and (na(lastBuyPrice) or close <= lastBuyPrice)
    buyCount += 1
    strategy.entry("Buy in " + str.tostring(buyCount), strategy.long)
    lastBuyBar := bar_index
    lastBuyPrice := close
    avgEntryPrice := na(avgEntryPrice) ? close : (avgEntryPrice * (buyCount - 1) + close) / buyCount

// === Sell Logic
if strategy.position_size > 0 and highAboveUpper and sellCondition
    strategy.close_all(comment="Take Profit")
    avgEntryPrice := na
    buyCount := 0
    lastBuyBar := na
    lastBuyPrice := na

// === Stop Loss Logic
if strategy.position_size > 0 and stopLossTriggered
    strategy.close_all(comment="Stop Loss Hit")
    avgEntryPrice := na
    buyCount := 0
    lastBuyBar := na
    lastBuyPrice := na

// === Plot Envelope
plot(basis, "Basis", color=color.orange)
u = plot(upper, "Upper", color=color.blue)
l = plot(lower, "Lower", color=color.blue)
fill(u, l, color=color.rgb(33, 150, 243, 95), title="Envelope Background")

// === Plot Avg Entry Price
plot(strategy.position_size > 0 and not na(avgEntryPrice) ? avgEntryPrice : na, 
     title="Avg Entry Price", 
     color=color.rgb(173, 195, 226), 
     linewidth=2, 
     style=plot.style_line)