Chiến lược định lượng dừng lỗ theo khoảng cách


Ngày tạo: 2023-11-15 11:24:16 sửa đổi lần cuối: 2023-11-15 11:24:16
sao chép: 0 Số nhấp chuột: 682
1
tập trung vào
1617
Người theo dõi

Chiến lược định lượng dừng lỗ theo khoảng cách

Tổng quan

Chiến lược này dựa trên tư tưởng dừng chân di động, sử dụng chỉ số Bars gần khoảng cách (DCB) để xác định xu hướng giá, kết hợp với chỉ số RSI nhanh để lọc, thực hiện dừng chân di động và theo dõi dừng chân. Chiến lược này cũng sử dụng nguyên tắc gia tăng vị trí Martingale, phù hợp với giao dịch xu hướng đường dài.

Nguyên tắc

  1. Tính lastg và lastr đại diện cho giá đóng cửa của dòng K tăng cuối cùng và giá đóng cửa của dòng K giảm cuối cùng.

  2. Tính dist là giá khác nhau giữa lastg và lastr

  3. Tính trung bình di chuyển đơn giản 30 chu kỳ của adist thành dist.

  4. Tạo tín hiệu giao dịch khi dist lớn hơn adist gấp đôi.

  5. Kết hợp với các chỉ số RSI nhanh để lọc tín hiệu, tránh phá vỡ giả.

  6. Nếu có tín hiệu và không giữ vị trí, hãy vào vị trí theo tỷ lệ cố định.

  7. Sử dụng nguyên tắc Martingale, tăng thêm tiền sau khi thua lỗ.

  8. Giá kích hoạt lệnh dừng lỗ hoặc dừng lỗ sau khi thanh toán.

Ưu điểm

  1. Sử dụng chỉ số DCB để đánh giá xu hướng, có thể nắm bắt hiệu quả xu hướng đường dài và đường trung.

  2. Bộ lọc chỉ số RSI nhanh có thể ngăn chặn phá vỡ giả tạo dẫn đến tổn thất.

  3. Cơ chế dừng lỗ di động có thể khóa lợi nhuận và kiểm soát rủi ro hiệu quả.

  4. Nguyên tắc Martingale cho phép tăng vị thế sau khi thua lỗ, theo đuổi lợi nhuận cao hơn.

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

Rủi ro

  1. Chỉ số DCB có thể phát ra tín hiệu sai và cần được lọc kết hợp với các chỉ số khác.

  2. MartinGil nói thêm rằng việc tăng thêm cổ phiếu sẽ làm tăng tổn thất và cần quản lý tài chính nghiêm ngặt.

  3. Thiết lập điểm dừng không hợp lý có thể gây ra thiệt hại nhiều hơn dự kiến.

  4. Cần kiểm soát chặt chẽ số lượng vị trí để tránh vượt quá khả năng chi trả tài chính.

  5. Việc thiết lập hợp đồng giao dịch không đúng cách có thể dẫn đến tổn thất lớn trong trường hợp cực đoan.

Tối ưu hóa tư duy

  1. Tối ưu hóa các tham số DCB, tìm kiếm sự kết hợp tham số tốt nhất.

  2. Cố gắng lọc các chỉ số khác thay vì RSI nhanh.

  3. Tối ưu hóa các tham số Stop Loss Stop Stop để tăng tỷ lệ chiến thắng chiến lược.

  4. Tối ưu hóa tham số Martingale, giảm rủi ro gia tăng.

  5. Kiểm tra các loại thương mại khác nhau để chọn loại tốt nhất.

  6. Các tham số chiến lược tối ưu hóa động lực của công nghệ kết hợp với học máy.

Tóm tắt

Chiến lược Overall là một chiến lược theo dõi xu hướng đã trưởng thành hơn. Sử dụng DCB để xác định hướng xu hướng, tín hiệu lọc RSI nhanh có thể tránh mở vị trí sai. Đồng thời, hệ thống dừng lỗ có thể kiểm soát hiệu quả tổn thất đơn lẻ.

Mã nguồn chiến lược
/*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()