Chiến lược này sử dụng chỉ số Distance Close Bars (DCB) để xác định xu hướng giá và chỉ số RSI nhanh như một bộ lọc, thực hiện dừng lỗ để theo dõi xu hướng sau khi giao dịch.
Tính toán lastg và lastr đại diện cho thanh xanh cuối cùng đóng và thanh đỏ cuối cùng đóng.
Tính toán dist là sự khác biệt giữa lastg và lastr.
Tính toán adist là SMA 30 thời gian của dist.
Tạo tín hiệu giao dịch khi dist lớn hơn 2 lần adist.
Sử dụng chỉ số RSI nhanh để lọc tín hiệu, tránh phá vỡ sai.
Tham gia giao dịch với tỷ lệ phần trăm cố định của vốn chủ sở hữu nếu tín hiệu không có vị trí.
Martingale để mở rộng sau khi thua.
Khóa vị trí khi dừng lỗ hoặc lấy lợi nhuận được kích hoạt.
Chỉ số DCB có hiệu quả nắm bắt xu hướng trung dài hạn.
Bộ lọc RSI nhanh tránh mất mát từ các vụ phá vỡ giả.
Việc dừng lại sẽ giữ lợi nhuận và kiểm soát rủi ro.
Martingale tăng vị trí sau khi thua lỗ để có lợi nhuận cao hơn.
Cài đặt tham số hợp lý phù hợp với môi trường thị trường khác nhau.
DCB có thể tạo ra tín hiệu sai, cần các bộ lọc khác.
Martingale có thể làm tăng lỗ, đòi hỏi quản lý rủi ro nghiêm ngặt.
Cài đặt stop loss không chính xác có thể dẫn đến lỗ quá mức.
Định kích thước vị trí nên được giới hạn để ngăn ngừa đòn bẩy quá mức.
Các thiết lập hợp đồng không đúng có thể dẫn đến tổn thất lớn trong thị trường cực đoan.
Tối ưu hóa các thông số DCB để kết hợp tốt nhất.
Hãy thử các chỉ số khác để thay thế bộ lọc RSI nhanh.
Tối ưu hóa dừng lỗ và lấy lợi nhuận cho tỷ lệ thắng cao hơn.
Tối ưu hóa các thông số Martingale để giảm rủi ro.
Thử nghiệm trên các sản phẩm khác nhau để phân bổ tài sản tốt nhất.
Sử dụng máy học để tối ưu hóa các tham số một cách năng động.
Đây là một chiến lược theo xu hướng trưởng thành tổng thể. DCB xác định hướng xu hướng và lọc tín hiệu RSI nhanh để tránh các mục nhập sai. Dừng lỗ và lấy lợi nhuận kiểm soát hiệu quả lỗ giao dịch duy nhất. Nhưng vẫn có rủi ro, các thông số cần tối ưu hóa hơn nữa để giảm rủi ro và cải thiện sự ổn định. Logic rõ ràng và dễ hiểu, phù hợp với các nhà giao dịch xu hướng trung dài hạn.
/*backtest start: 2023-11-07 00:00:00 end: 2023-11-14 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy(title = "Noro's Distance Strategy v1.0", shorttitle = "Distance str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") usemar = input(true, defval = true, title = "Use Martingale") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %") usersi = input(true, defval = true, title = "Use RSI-Filter") periodrsi = input(7, defval = 7, minval = 2, maxval = 50, title = "RSI Period") limitrsi = input(30, defval = 30, minval = 1, maxval = 50, title = "RSI Limit") fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //Fast RSI fastup = rma(max(change(close), 0), periodrsi) fastdown = rma(-min(change(close), 0), periodrsi) fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown)) //Distance bar = close > open ? 1 : close < open ? -1 : 0 lastg = bar == 1 ? close : lastg[1] lastr = bar == -1 ? close : lastr[1] dist = lastg - lastr adist = sma(dist, 30) plot(lastg, linewidth = 3, color = lime) plot(lastr, linewidth = 3, color = red) up = bar == -1 and dist > adist * 2 dn = bar == 1 and dist > adist * 2 //RSI Filter rsidn = fastrsi < limitrsi or usersi == false rsiup = fastrsi > 100 - limitrsi or usersi == false //Signals up1 = up and rsidn dn1 = dn and rsiup exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) //Arrows plotarrow(up1 ? 1 : na, colorup = blue, colordown = blue) plotarrow(dn1 ? -1 : na, colorup = blue, colordown = blue) //Trading profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1] mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1 lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1] signalup = up1 if signalup if strategy.position_size < 0 strategy.close_all() strategy.entry("long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) signaldn = dn1 if signaldn if strategy.position_size > 0 strategy.close_all() strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if time > timestamp(toyear, tomonth, today, 23, 59) or exit strategy.close_all()