Chiến lược đảo ngược theo dõi xu hướng năng động

Tác giả:ChaoZhang, Ngày: 2024-01-16 15:35:18
Tags:

img

Tổng quan

Chiến lược đảo ngược theo dõi xu hướng năng động là một chiến lược giao dịch định lượng ngắn hạn dựa trên chỉ số JD Sequential. Bằng cách theo dõi mức giá cao nhất và thấp nhất trong thời gian thực, chiến lược này xác định hướng và động lực xu hướng hiện tại để nắm bắt hiệu quả các điểm đảo ngược thị trường cho thời gian vào và ra thị trường. So với các chiến lược JD Sequential truyền thống, chiến lược này có những cải tiến sau:

  1. Sử dụng mức giá cao và thấp thay vì giá đóng để xác định xu hướng, có thể nắm bắt sự thay đổi giá nhanh hơn.
  2. Số lượng đếm tối đa là 7 thay vì 9, cho phép tạo tín hiệu giao dịch nhanh hơn.
  3. Thêm các tùy chọn cho đường hỗ trợ / kháng cự và đảo ngược 5 lần như dừng lỗ.

Chiến lược này phù hợp với các khung thời gian ngắn hạn như biểu đồ 5 phút và 15 phút, có thể nắm bắt hiệu quả biến động giá ngắn hạn và cơ hội đảo ngược.

Chiến lược logic

Lý thuyết cốt lõi của Chiến lược đảo ngược theo dõi xu hướng năng động dựa trên chỉ số JD Sequential. Bằng cách so sánh giá cao và thấp của giai đoạn hiện tại với giá của hai giai đoạn trước, chỉ số này xác định xem có những mức cao hơn hoặc thấp hơn liên tiếp xảy ra hay không, và tạo ra một số theo dõi từ 1 đến 7. Khi số tích lũy lên 7, các tín hiệu giao dịch được tạo ra.

Cụ thể, các biến sau đây được xác định trong chiến lược:

  • sp_up: đúng khi giá cao hiện tại vượt quá giá cao 2 giai đoạn trước
  • sp_dn: đúng khi giá thấp hiện tại giảm xuống dưới giá thấp 2 giai đoạn trước
  • sp_ct: số lượng hiện tại, tăng thêm 1 mỗi lần sp_up hoặc sp_dn là đúng, với tối đa 7
  • sp_com: đúng khi đếm bằng 7
  • sp_usr: giá trung bình tại đếm 7 và sp_up, phục vụ như kháng cự tăng
  • sp_dsr: giá trung bình tại đếm 7 và sp_dn, phục vụ như hỗ trợ giảm

Lý thuyết cho việc tạo tín hiệu giao dịch là:

  • Tín hiệu dài: sp_com là đúng và sp_dn là đúng, chỉ ra việc hoàn thành đếm và xu hướng giảm
  • Tín hiệu ngắn: sp_com là đúng và sp_up là đúng, chỉ ra việc hoàn thành đếm và xu hướng tăng

Logic dừng lỗ là:

  • Long SL: đếm đảo ngược đến 5 (sp_up true) hoặc giá vượt trên sp_usr
  • SL ngắn: đảo ngược đếm đến 5 (sp_dn true) hoặc giá vượt dưới sp_dsr

Bằng cách so sánh mức cao / thấp trong thời gian thực để xác định hướng và sức mạnh của xu hướng, cùng với thời gian dựa trên đếm để vào, chiến lược này có thể nắm bắt hiệu quả các cơ hội đảo ngược ngắn hạn.

Phân tích lợi thế

So với các chiến lược JD Sequential truyền thống, Chiến lược đảo ngược theo dõi xu hướng động có những lợi thế sau:

  1. Sử dụng so sánh cao / thấp nhanh hơn so với giá đóng trong việc nắm bắt xu hướng, và số 7 tạo ra tín hiệu nhanh hơn số 9.
  2. Cơ chế dừng lỗ được nâng cao. Việc bổ sung 5 lần đảo ngược và hỗ trợ / kháng cự dừng lỗ cho phép kiểm soát rủi ro tốt hơn.
  3. Các cấu hình linh hoạt. Các tùy chọn bao gồm dừng lỗ và hiển thị số lượng một phần thêm tính linh hoạt.
  4. Thích hợp cho giao dịch ngắn hạn. Các tín hiệu tần số cao kết hợp với stop loss thích hợp phù hợp với khung thời gian ngắn hạn.

Ưu điểm chính của chiến lược này là phản ứng nhanh chóng, có thể nắm bắt hiệu quả các biến động lớn do các sự kiện ngắn hạn gây ra. Ngoài ra, việc tạo tín hiệu thuật toán và cơ chế dừng lỗ có thể làm giảm sự can thiệp cảm xúc từ các nhà giao dịch, cải thiện tính nhất quán.

Phân tích rủi ro

Chiến lược đảo ngược xu hướng theo dõi động cũng mang lại một số rủi ro:

  1. Tăng chi phí giao dịch từ giao dịch tần số cao.
  2. Thường bị tín hiệu sai. So sánh mức cao và thấp trong các thị trường khác nhau thường có thể gây ra các giao dịch và lỗ không hợp lý.
  3. Chỗ dừng có khả năng hung hăng. Chỗ dừng cứng dễ bị tăng và phải được điều chỉnh kịp thời.

Để giảm thiểu các rủi ro trên, chiến lược có thể được tối ưu hóa trong các khía cạnh sau:

  1. Giảm kích thước vị trí để sử dụng vốn thấp hơn cho mỗi giao dịch.
  2. Ngưng giao dịch trong thời gian thị trường hỗn loạn / dao động để tránh giao dịch không hiệu quả.
  3. Sử dụng các điểm dừng sau hoặc dừng thoát để giảm nguy cơ bị mắc kẹt.

Hướng dẫn tối ưu hóa

Có rất nhiều chỗ cho chiến lược đảo ngược xu hướng theo dõi động để được tối ưu hóa hơn nữa, chủ yếu theo các hướng sau:

  1. Kết hợp nhiều khung thời gian. Xác định hướng xu hướng chính trên các khung thời gian cao hơn để tránh giao dịch chống lại nó.

  2. Kết hợp với các chỉ số khác: kết hợp các số liệu biến động, dữ liệu khối lượng vv để cải thiện chất lượng tín hiệu.

  3. Học máy để xác thực bổ sung. Sử dụng thuật toán AI / ML làm phán đoán phụ trợ về tín hiệu giao dịch để giảm các giao dịch sai.

  4. Điều chỉnh tham số. Tối ưu hóa các tham số như thời gian đếm, phiên giao dịch, kích thước vị trí vv để phù hợp với các điều kiện thị trường khác nhau.

  5. Mở rộng các cơ chế kiểm soát rủi ro. giới thiệu các kỹ thuật quản lý rủi ro phức tạp hơn như dừng thích ứng, kích thước vị trí vv để hạn chế rủi ro hơn nữa.

  6. Đánh giá chiến lược thông qua backtesting.

Kết luận

Chiến lược đảo ngược theo dõi xu hướng năng động nắm bắt các cơ hội đảo ngược ngắn hạn thông qua việc so sánh thời gian thực của mức giá cao nhất và thấp nhất để xác định hướng và sức mạnh của xu hướng, cùng với các quy tắc 7-count trong chỉ số JD Sequential cho thời gian giao dịch.

Sức mạnh chính của chiến lược này nằm trong phản ứng nhanh phù hợp với giao dịch đảo ngược ngắn hạn. Đồng thời, các rủi ro như tần suất giao dịch cao và dừng tích cực tồn tại. Các hướng tối ưu hóa trong tương lai bao gồm điều chỉnh tham số, tăng cường kiểm soát rủi ro, kết hợp nhiều khung thời gian vv. Thông qua tối ưu hóa liên tục và lặp lại, chiến lược này có tiềm năng trở thành một công cụ mạnh mẽ để nắm bắt hiệu quả các tín hiệu đảo ngược ngắn hạn.


/*backtest
start: 2023-12-16 00:00:00
end: 2024-01-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @NeoButane 7 Dec. 2018
// JD Aggressive Sequential Setup
// Not based off official Tom DeMarke documentation. As such, I have named the indicator JD instead oF TD to reflect this, and as a joke.
//
// Difference vs. TD Sequential: faster trade exits and a unique entry. Made for low timeframes.
// - Highs or lows are compared instead of close.
// - Mirrors only the Setup aspect of TD Sequential (1-9, not to 13)
// - Count maxes out at 7 instead of 9. Also part of the joke if I'm going to be honest here

// v1 - Release - Made as a strategy, 7 count
//    . S/R on 7 count
//   .. Entry on 7 count
//  ... Exit on 5 count or S/R cross

//@version=3
title = "JD Aggressive Sequential Setup"
vers  = " 1.0 [NeoButane]"
total = title + vers
strategy(total, total, 1, 0)

xx        = input(true, "Include S/R Crosses Into Stop Loss")
show_sp   = input(true, "Show Count 1-4")
sp_ct     = 0
inc_sp(x) => nz(x) == 7 ? 1 : nz(x) + 1
sp_up     = high > high[2]
sp_dn     = low < low[2]
sp_col    = sp_up ? green : red
sp_comCol = sp_up ? red : green
sp_ct    := sp_up ? (nz(sp_up[1]) and sp_col == sp_col[1] ? inc_sp(sp_ct[1]) : 1) : sp_dn ? (nz(sp_dn[1]) and sp_col == sp_col[1] ? inc_sp(sp_ct[1]) : 1) : na
sp_com    = sp_ct == 7
sp_sr     = valuewhen(sp_ct == 5, close, 0)
sp_usr    = valuewhen(sp_ct == 7 and sp_up, sma(hlc3, 2), 0)
sp_usr   := sp_usr <= sp_usr[1] * 1.0042 and sp_usr >= sp_usr[1] * 0.9958 ? sp_usr[1] : sp_usr
sp_dsr    = valuewhen(sp_ct == 7 and sp_dn, sma(hlc3, 2), 0)
sp_dsr   := sp_dsr <= sp_dsr[1] * 1.0042 and sp_dsr >= sp_dsr[1] * 0.9958 ? sp_dsr[1] : sp_dsr
locc = location.abovebar
plotchar(show_sp and sp_ct == 1, 'Setup: 1', '1', locc, sp_col, editable=false)
plotchar(show_sp and sp_ct == 2, 'Setup: 2', '2', locc, sp_col, editable=false)
plotchar(show_sp and sp_ct == 3, 'Setup: 3', '3', locc, sp_col, editable=false)
plotchar(show_sp and sp_ct == 4, 'Setup: 4', '4', locc, sp_col, editable=false)
plotshape(sp_ct == 5, 'Setup: 5', shape.xcross, locc, sp_comCol, 0, 0, '5', sp_col)
plotshape(sp_ct == 6, 'Setup: 6', shape.circle, locc, sp_comCol, 0, 0, '6', sp_col)
plotshape(sp_ct == 7, 'Setup: 7', shape.circle, locc, sp_comCol, 0, 0, '7', sp_col)
// plot(sp_sr, "5 Count Support/Resistance", gray, 2, 6)
plot(sp_usr, "7 Count Resistance", maroon, 2, 6)
plot(sp_dsr, "7 Count Support", green, 2, 6)

long  = (sp_com and sp_dn)
short = (sp_com and sp_up)
sl_l  = xx ? crossunder(close, sp_dsr) or (sp_ct == 5 and sp_up) or short : (sp_ct == 5 and sp_up) or short
sl_s  = xx ? crossover(close, sp_usr) or (sp_ct == 5 and sp_dn) or long : (sp_ct == 5 and sp_dn) or long

strategy.entry('L', 1, when = long)
strategy.close('L', when = sl_l)
strategy.entry('S', 0, when = short)
strategy.close('S', when = sl_s)

Thêm nữa