Xu hướng theo chiến lược dựa trên khoảng cách với Trailing Stop Loss

Tác giả:ChaoZhang, Ngày: 2023-11-15 11:24:16
Tags:

img

Tổng quan

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.

Nguyên tắc

  1. 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.

  2. Tính toán dist là sự khác biệt giữa lastg và lastr.

  3. Tính toán adist là SMA 30 thời gian của dist.

  4. Tạo tín hiệu giao dịch khi dist lớn hơn 2 lần adist.

  5. Sử dụng chỉ số RSI nhanh để lọc tín hiệu, tránh phá vỡ sai.

  6. 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í.

  7. Martingale để mở rộng sau khi thua.

  8. Khóa vị trí khi dừng lỗ hoặc lấy lợi nhuận được kích hoạt.

Ưu điểm

  1. Chỉ số DCB có hiệu quả nắm bắt xu hướng trung dài hạn.

  2. Bộ lọc RSI nhanh tránh mất mát từ các vụ phá vỡ giả.

  3. Việc dừng lại sẽ giữ lợi nhuận và kiểm soát rủi ro.

  4. Martingale tăng vị trí sau khi thua lỗ để có lợi nhuận cao hơn.

  5. Cài đặt tham số hợp lý phù hợp với môi trường thị trường khác nhau.

Rủi ro

  1. DCB có thể tạo ra tín hiệu sai, cần các bộ lọc khác.

  2. Martingale có thể làm tăng lỗ, đòi hỏi quản lý rủi ro nghiêm ngặt.

  3. Cài đặt stop loss không chính xác có thể dẫn đến lỗ quá mức.

  4. Định kích thước vị trí nên được giới hạn để ngăn ngừa đòn bẩy quá mức.

  5. 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

  1. Tối ưu hóa các thông số DCB để kết hợp tốt nhất.

  2. Hãy thử các chỉ số khác để thay thế bộ lọc RSI nhanh.

  3. Tối ưu hóa dừng lỗ và lấy lợi nhuận cho tỷ lệ thắng cao hơn.

  4. Tối ưu hóa các thông số Martingale để giảm rủi ro.

  5. 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.

  6. Sử dụng máy học để tối ưu hóa các tham số một cách năng động.

Tóm lại

Đâ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()

Thêm nữa