
Chiến lược đảo ngược theo dõi xu hướ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. Chiến lược này được cải tiến như sau:
Chiến lược này thích hợp để sử dụng trong các chu kỳ thời gian ngắn, chẳng hạn như 5 phút, 15 phút, có thể nắm bắt hiệu quả các cơ hội biến động giá và đảo ngược ngắn hạn.
Lập luận cốt lõi của chiến lược theo dõi xu hướng động dựa trên chỉ số JD Sequential, chỉ số này đánh giá liệu giá có liên tục tạo ra các mức cao hơn hoặc thấp hơn bằng cách so sánh chu kỳ hiện tại với các mức cao và thấp của hai chu kỳ trước đó, để đưa ra một số thứ tự từ 1 đến 7.
Cụ thể, chiến lược này xác định các biến sau:
Các tín hiệu giao dịch được tạo ra theo logic sau:
Logic của Stop Loss là:
Chiến lược này xác định định hướng và cường độ của xu hướng bằng cách so sánh thời gian thực giữa các điểm cao và thấp, đồng hồ đếm thời gian, có thể nắm bắt hiệu quả các cơ hội đảo ngược ngắn hạn. Đồng thời thiết lập đường dừng để kiểm soát rủi ro.
So với chiến lược truyền thống của JD Sequential, chiến lược đảo ngược theo 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ả sự biến động lớn gây ra bởi các sự kiện bất ngờ ngắn hạn. Đồng thời, so với giao dịch hoàn toàn bằng tay, việc tạo và dừng tín hiệu của thuật toán có thể làm giảm tác động cảm xúc của nhà giao dịch, do đó tăng sự ổn định.
Các chiến lược đảo ngược theo xu hướng cũng có một số rủi ro:
Để giảm thiểu các rủi ro trên, có thể tối ưu hóa các khía cạnh sau:
Có rất nhiều khả năng để tối ưu hóa chiến lược đảo ngược theo xu hướng động, bao gồm:
Gói thời gian đa chu kỳ. Có thể xác định hướng xu hướng chính trong chu kỳ thời gian cao hơn, tránh giao dịch đối đầu với xu hướng chính.
Kết hợp với các chỉ số khác. Nó có thể kết hợp với các chỉ số như chỉ số tỷ lệ dao động, chỉ số khối lượng giao dịch, để cải thiện chất lượng tín hiệu.
Máy học lọc. Sử dụng thuật toán học máy để phán đoán hỗ trợ tín hiệu giao dịch, giảm giao dịch sai.
Tối ưu hóa tham số: có thể tối ưu hóa các tham số như số lần đếm, thời gian giao dịch, tỷ lệ giữ vị trí, phù hợp với các điều kiện thị trường khác nhau.
Tăng cơ chế kiểm soát rủi ro. Thêm các biện pháp kiểm soát rủi ro phong phú hơn như dừng di động, kiểm soát vị trí, để hạn chế rủi ro hơn nữa.
Đánh giá dữ liệu tích lũy. Mở rộng số lượng mẫu và khoảng thời gian đánh giá, kiểm tra tính ổn định của tham số.
Chiến lược đảo ngược theo dõi xu hướng động tạo ra tín hiệu giao dịch bằng cách xác định hướng và sức mạnh của xu hướng bằng các điểm thấp cao trong thời gian thực, sử dụng quy tắc đếm 7 của chỉ số JD Sequential để nắm bắt các cơ hội đảo ngược ngắn hạn với tần số cao. So với chiến lược JD truyền thống, chiến lược này đã cải tiến sử dụng phán đoán điểm thấp cao, rút ngắn chu kỳ đếm, tăng cơ chế dừng lỗ, để có được tín hiệu giao dịch kịp thời hơn.
Ưu điểm chính của chiến lược này là phản ứng nhanh chóng, phù hợp với đường ngắn để bắt được đảo ngược, đồng thời cũng có rủi ro như giao dịch thường xuyên, ngưng giảm mạnh. Hướng tối ưu hóa trong tương lai bao gồm điều chỉnh tham số, tăng cường cơ chế kiểm soát rủi ro, kết hợp nhiều chu kỳ thời gian. Bằng cách tối ưu hóa và lặp đi lặp lại liên tục, chiến lược này có khả 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)