Chiến lược giao dịch định lượng dừng lỗ theo dõi động một phần ba K-line

TRINITY ATR
Ngày tạo: 2025-02-18 13:57:33 sửa đổi lần cuối: 2025-02-18 13:57:33
sao chép: 0 Số nhấp chuột: 345
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch định lượng dừng lỗ theo dõi động một phần ba K-line

Tổng quan

Đây là một chiến lược giao dịch định lượng kết hợp phương pháp phân tích K-line một phần ba của Bill Williams và chức năng dừng lỗ theo dõi động. Chiến lược này tạo ra tín hiệu đa không gian rõ ràng bằng cách phân tích các đặc điểm cấu trúc của K-line hiện tại và trước đó và sử dụng các cơ chế dừng lỗ theo dõi có thể cấu hình để bảo vệ vị trí nắm giữ, thực hiện quản lý đầu vào / ra ngoài và rủi ro chính xác.

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

Lập luận cốt lõi của chiến lược dựa trên một số phần quan trọng sau:

  1. Tính phân cấp ba của K-line: Chia phạm vi của mỗi K-line (giá cao nhất - giá thấp nhất) thành ba phần, để có được giá trị biên của vùng trên và vùng dưới.
  2. Phân loại hình dạng K-line: K-line được chia thành nhiều loại tùy thuộc vào vị trí của giá mở và giá đóng ở vùng thứ ba. Ví dụ, khi giá mở ở vùng dưới và giá đóng ở vùng trên, nó được coi là hình dạng tăng mạnh.
  3. Quy tắc tạo tín hiệu: Xác định tín hiệu giao dịch hiệu quả bằng cách phân tích kết hợp hình dạng của dòng K hiện tại và dòng K trước. Ví dụ: khi hai dòng K liên tiếp đều có đặc điểm mạnh, kích hoạt nhiều tín hiệu.
  4. Tracking stop loss động: sử dụng giá thấp nhất của dòng N gốc K trước ((multihead) hoặc giá cao nhất ((blankhead) trong khoảng thời gian được chỉ định làm điểm dừng động.

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

  1. Logical Clarity: Chiến lược sử dụng phương pháp phân tích cấu trúc K-line trực quan, quy tắc giao dịch rõ ràng và dễ hiểu.
  2. Quản lý rủi ro hoàn hảo: Kiểm soát hiệu quả rủi ro rút tiền bằng cách theo dõi động cơ dừng lỗ, trong khi vẫn có đủ không gian lợi nhuận.
  3. Khả năng thích ứng: Chiến lược có thể điều chỉnh theo dõi các tham số dừng lỗ theo các môi trường thị trường khác nhau và có khả năng thích ứng tốt.
  4. Tự động hóa cao: Tự động hóa hoàn toàn từ việc tạo tín hiệu đến quản lý vị trí, giảm sự can thiệp của con người.

Rủi ro chiến lược

  1. Rủi ro thị trường chấn động: Trong trường hợp thị trường chấn động ngang, có thể có các tín hiệu phá vỡ sai thường xuyên, dẫn đến giao dịch quá mức.
  2. Rủi ro nhảy vọt: Trong trường hợp nhảy vọt lớn, Trace Stop Loss có thể không được kích hoạt kịp thời, gây ra tổn thất vượt mức dự kiến.
  3. Tính nhạy cảm của tham số: Chọn tham số theo dõi lỗ có ảnh hưởng lớn đến hiệu suất của chiến lược. Thiết lập tham số không đúng cách có thể dẫn đến ra sân quá sớm hoặc không được bảo vệ.

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

  1. Thêm bộ lọc môi trường thị trường: Có thể giới thiệu các chỉ số xu hướng hoặc chỉ số biến động, điều chỉnh các tham số chiến lược động trong các môi trường thị trường khác nhau.
  2. Tối ưu hóa cơ chế dừng lỗ: Có thể xem xét kết hợp với chỉ số ATR để thiết lập khoảng cách dừng lỗ linh hoạt hơn, cải thiện khả năng thích ứng của dừng lỗ.
  3. Khởi động quản lý vị trí: Có thể điều chỉnh kích thước vị trí theo cường độ tín hiệu và động lực biến động của thị trường, để kiểm soát rủi ro tinh tế hơn.
  4. Tăng tối ưu hóa ra sân: Bạn có thể thêm mục tiêu lợi nhuận hoặc chỉ số kỹ thuật để hỗ trợ phán đoán, tối ưu hóa thời gian ra sân.

Tóm tắt

Đây là một chiến lược giao dịch định lượng có cấu trúc, logic rõ ràng, có tính thực tiễn tốt hơn bằng cách kết hợp sử dụng các phương pháp phân tích kỹ thuật cổ điển và các kỹ thuật quản lý rủi ro hiện đại. Thiết kế của chiến lược đã cân nhắc đầy đủ về nhu cầu giao dịch thực tế, bao gồm các liên kết quan trọng như tạo tín hiệu, quản lý cổ phiếu và kiểm soát rủi ro. Bằng cách tối ưu hóa và hoàn thiện hơn nữa, chiến lược này có khả năng hoạt động tốt hơn trong giao dịch thực tế.

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

//@version=5
strategy("TrinityBar with Trailing Stop", overlay=true, initial_capital=100000, 
     default_qty_type=strategy.percent_of_equity, default_qty_value=250)

//─────────────────────────────────────────────────────────────
// 1. BAR THIRDS CALCULATIONS
//─────────────────────────────────────────────────────────────
cur_range      = high - low
cur_lowerThird = low + cur_range / 3
cur_upperThird = high - cur_range / 3

prev_range      = high[1] - low[1]
prev_lowerThird = low[1] + prev_range / 3
prev_upperThird = high[1] - prev_range / 3

//─────────────────────────────────────────────────────────────
// 2. DEFINE BULLISH & BEARISH BAR TYPES (CURRENT & PREVIOUS)
//─────────────────────────────────────────────────────────────
// Current bar types
is_1_3 = (open <= cur_lowerThird) and (close >= cur_upperThird)
is_3_3 = (open >= cur_upperThird) and (close >= cur_upperThird)
is_2_3 = (open > cur_lowerThird) and (open < cur_upperThird) and (close >= cur_upperThird)

is_3_1 = (open >= cur_upperThird) and (close <= cur_lowerThird)
is_1_1 = (open <= cur_lowerThird) and (close <= cur_lowerThird)
is_2_1 = (open > cur_lowerThird) and (open < cur_upperThird) and (close <= cur_lowerThird)

// Previous bar types
prev_is_1_3 = (open[1] <= prev_lowerThird) and (close[1] >= prev_upperThird)
prev_is_3_3 = (open[1] >= prev_upperThird) and (close[1] >= prev_upperThird)
prev_is_2_3 = (open[1] > prev_lowerThird) and (open[1] < prev_upperThird) and (close[1] >= prev_upperThird)

prev_is_3_1 = (open[1] >= prev_upperThird) and (close[1] <= prev_lowerThird)
prev_is_1_1 = (open[1] <= prev_lowerThird) and (close[1] <= prev_lowerThird)
prev_is_2_1 = (open[1] > prev_lowerThird) and (open[1] < prev_upperThird) and (close[1] <= prev_lowerThird)

//─────────────────────────────────────────────────────────────
// 3. VALID SIGNAL CONDITIONS
//─────────────────────────────────────────────────────────────
validBuy  = (prev_is_2_3 or prev_is_3_3 or prev_is_1_3) and (is_1_3 or is_3_3)
validSell = (prev_is_2_1 or prev_is_1_1 or prev_is_3_1) and (is_1_1 or is_3_1)

//─────────────────────────────────────────────────────────────
// 4. PLOT SIGNAL TRIANGLES
//─────────────────────────────────────────────────────────────
plotshape(validBuy, title="Valid Buy", style=shape.triangleup, location=location.belowbar, 
     color=color.green, size=size.small, text="B")
plotshape(validSell, title="Valid Sell", style=shape.triangledown, location=location.abovebar, 
     color=color.red, size=size.small, text="S")

//─────────────────────────────────────────────────────────────
// 5. MARKET ORDER EXECUTION BASED ON SIGNALS
//─────────────────────────────────────────────────────────────
if validBuy
    // Close any short positions.
    strategy.close("Short", comment="")
    // If not already long, enter a market long.
    if strategy.position_size <= 0
        strategy.entry("Long", strategy.long, comment="")
        
if validSell
    // Close any long positions.
    strategy.close("Long", comment="")
    // If not already short, enter a market short.
    if strategy.position_size >= 0
        strategy.entry("Short", strategy.short, comment="")

//─────────────────────────────────────────────────────────────
// 6. TRAILING STOP LOSS FUNCTION
//─────────────────────────────────────────────────────────────
// Inputs for trailing stop settings:
trailBars = input.int(title="Trailing Stop Bars Back", defval=1, minval=1)
trailTF   = input.timeframe(title="Trailing Stop Timeframe", defval="")  // "" = current timeframe

// For long positions, use the low from 'trailBars' bars back on the specified timeframe.
// For short positions, use the high from 'trailBars' bars back.
trailStopLong  = request.security(syminfo.tickerid, trailTF, low[trailBars])
trailStopShort = request.security(syminfo.tickerid, trailTF, high[trailBars])

// Apply trailing stops if a position is open.
if strategy.position_size > 0
    strategy.exit("Trailing Stop Long", from_entry="Long", stop=trailStopLong)
if strategy.position_size < 0
    strategy.exit("Trailing Stop Short", from_entry="Short", stop=trailStopShort)