Chiến lược giao dịch rùa Don Anqi


Ngày tạo: 2024-02-26 14:35:02 sửa đổi lần cuối: 2024-02-26 14:35:02
sao chép: 0 Số nhấp chuột: 899
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch rùa Don Anqi

Tổng quan

Chiến lược giao dịch biển Dong An là một chiến lược giao dịch biển rất đơn giản. Nó khác rất nhiều so với chiến lược giao dịch biển nguyên thủy. Chiến lược sử dụng hai kênh Dong An, kênh nhanh và kênh chậm. Chu kỳ kênh được thiết lập bởi người dùng, mặc định là đường K 20 đường K nhanh và đường K 50 đường chậm.

Nguyên tắc chiến lược

Lập luận cốt lõi của chiến lược này là:

  1. Tính đường nhanh: lấy giá trị cao nhất của đường K gốc nhanh gần nhất là đường lên đường, giá trị thấp nhất là đường xuống đường.

  2. Tính toán kênh chậm: lấy giá cao nhất của dòng K gốc chậm gần nhất là đường ray trên kênh và giá thấp nhất là đường ray dưới kênh.

  3. Khi không giữ vị trí, làm nhiều tín hiệu cho giá chạm đường chậm lên đường ray; tín hiệu làm trống cho giá chạm đường chậm xuống đường ray.

  4. Sau khi mở kho, đường sắt trung tâm của đường nhanh là đường dừng lỗ.

  5. Trong quá trình giữ vị trí, tín hiệu giao dịch trái ngược với tín hiệu mở vị trí, vị trí bán ra ngoài.

Phân tích lợi thế

Chiến lược này có những ưu điểm sau:

  1. Các quy tắc rất đơn giản và dễ thực hiện. Đường Dongxian và dừng di động dễ hiểu, phù hợp cho người mới bắt đầu.

  2. Các tham số có thể tùy chỉnh. Người dùng có thể điều chỉnh các tham số tùy thuộc vào loại giao dịch và chu kỳ thời gian để phù hợp với môi trường thị trường khác nhau.

  3. Có ít tín hiệu giao dịch xung đột. Chỉ dựa vào giá phá vỡ kênh lên xuống đường, tránh tình trạng các chỉ số thường tạo ra tín hiệu giả.

  4. Quản lý rủi ro dừng tự động. Đường dừng di động trong đường nhanh, có thể hạn chế dừng đơn.

Phân tích rủi ro

Chiến lược này có những rủi ro sau:

  1. Khi xu hướng biến động giá không rõ ràng, sẽ có nhiều lỗ dừng hơn. Điều này sẽ ảnh hưởng đến khả năng lợi nhuận của chiến lược.

  2. Khi xu hướng biến đổi, bất kỳ lỗ hổng nào trong hướng chuyển động sẽ biến thành lỗ hổng thực tế.

  3. Thiết lập tham số không đúng cách có thể dẫn đến quá cực đoan hoặc bảo thủ. Điều này cần phải được thử nghiệm lặp lại để có được giá trị phù hợp.

  4. Mức độ phụ thuộc vào giao dịch tự động hóa cao. Cần đảm bảo sự ổn định của máy chủ, tránh các trường hợp bất thường dẫn đến giao dịch tự động hóa không hoạt động bình thường.

Để giảm nguy cơ trên, có thể cải thiện bằng cách tối ưu hóa các thiết lập tham số, hạn chế kích thước vị trí thích hợp, thêm mô-đun kiểm soát gió.

Hướng tối ưu hóa

Chiến lược này có thể được tối ưu hóa theo các hướng sau:

  1. Thêm điều kiện lọc mở vị trí để tránh các tín hiệu bỏ lỡ điểm chuyển hướng. Ví dụ, kết hợp các chỉ số như chỉ số xu hướng để phân tích xu hướng.

  2. Thiết lập tham số tối ưu hóa để phù hợp với các loại giao dịch khác nhau. Ví dụ: chu kỳ kênh nhanh hoặc chậm, kích thước vị trí.

  3. Thêm các mô-đun kiểm soát rủi ro. Ví dụ như rút tối đa, giới hạn tổn thất trong ngày.

  4. Tối ưu hóa chiến lược dừng lỗ. Các phương thức dừng động như dừng theo dõi, để dừng lỗ phù hợp hơn với xu hướng thị trường.

Tóm tắt

Chiến lược giao dịch TCM là một chiến lược theo dõi xu hướng rất đơn giản. Ưu điểm của nó là dễ hiểu, dễ thực hiện tự động, phù hợp với giao dịch theo chương trình. Nhưng cũng có một số rủi ro, cần tối ưu hóa thêm các thông số của nó để phù hợp hơn với tình hình thị trường thực tế.

Mã nguồn chiến lược
/*backtest
start: 2024-01-26 00:00:00
end: 2024-02-15 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2020

//@version=4
strategy("Noro's SimpleTurtle Strategy", shorttitle = "SimpleTurtle str", overlay = true, default_qty_type = strategy.percent_of_equity, initial_capital = 100, default_qty_value = 100, commission_value = 0.1)

//Settings
needlong  = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
sizelong  = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot long, %")
sizeshort = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot short, %")
fast      = input(20, minval=1)
slow      = input(50, minval=1)
showof    = input(true, defval = true, title = "Show offset")
showll    = input(true, defval = true, title = "Show lines")
showdd    = input(false, defval = true, title = "Show label (drawdown)")
showbg    = input(true, defval = true, title = "Show background")
fromyear  = input(1900, defval = 1900, 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")

//Donchian price channel fast
hf = highest(high, fast)
lf = lowest(low, fast)
center = (hf + lf) / 2

//Donchian price chennal slow
hs = highest(high, slow)
ls = lowest(low, slow)

//Lines
colorpc = showll ? color.blue : na
colorsl = showll ? color.red : na
offset = showof ? 1 : 0
plot(hs, offset = offset, color = colorpc)
plot(ls, offset = offset, color = colorpc)
plot(center, offset = offset, color = colorsl)

//Background
size = strategy.position_size
colorbg = showbg == false ? na : size > 0 ? color.lime : size < 0 ? color.red : na
bgcolor(colorbg, transp = 70)

//Orders
truetime = true
lotlong = 0.0
lotshort = 0.0
lotlong := size != size[1] ? strategy.equity / close * sizelong / 100 : lotlong[1]
lotshort := size != size[1] ? strategy.equity / close * sizeshort / 100 : lotshort[1]

//Orders
strategy.entry("Long", strategy.long, lotlong, stop = hs, when = needlong and strategy.position_size == 0 and truetime)
strategy.entry("Short", strategy.short, lotshort, stop = ls, when = needshort and strategy.position_size == 0 and truetime)
strategy.exit("Long", stop = center, when = needlong and strategy.position_size > 0)
strategy.exit("Short", stop = center, when = needshort and strategy.position_size < 0)
if true
    strategy.close_all()
    strategy.cancel("fast L")
    strategy.cancel("fast S")
    strategy.cancel("slow L")
    strategy.cancel("slow S")
    
if showdd

    //Drawdown
    max = 0.0
    max := max(strategy.equity, nz(max[1]))
    dd = (strategy.equity / max - 1) * 100
    min = 100.0
    min := min(dd, nz(min[1]))
    
    //Label
    min := round(min * 100) / 100
    labeltext = "Drawdown: " + tostring(min) + "%"
    var label la = na
    label.delete(la)
    tc = min > -100 ? color.white : color.red
    osx = timenow + round(change(time)*10)
    osy = highest(100)
    la := label.new(x = osx, y = osy, text = labeltext, xloc = xloc.bar_time, yloc = yloc.price, color = color.black, style = label.style_labelup, textcolor = tc)