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:
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.
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:
Lý thuyết cho việc tạo tín hiệu giao dịch là:
Logic dừng lỗ là:
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.
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:
Ư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.
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:
Để 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:
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:
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ó.
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.
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.
Đ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.
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.
Đánh giá chiến lược thông qua backtesting.
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)