Chiến lược theo dõi xu hướng kênh giá


Ngày tạo: 2023-10-31 17:44:19 sửa đổi lần cuối: 2023-10-31 17:44:19
sao chép: 0 Số nhấp chuột: 636
1
tập trung vào
1617
Người theo dõi

Chiến lược theo dõi xu hướng kênh giá

Chiến lược độ tuổi phổ

Tổng quan

Chiến lược độ tuổi quang phổ là một chiến lược theo dõi xu hướng dựa trên kênh giá. Nó sử dụng các kênh Tần Chiên nhanh và chậm để xác định hướng của xu hướng và mua khi thấp và bán khi cao khi điều chỉnh lại. Ưu điểm của chiến lược này là có thể tự động theo dõi xu hướng, dừng lỗ và đảo ngược khi xu hướng thay đổi.

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

Chiến lược này đầu tiên định nghĩa chu kỳ đường nhanh là 20 đường K và chu kỳ đường chậm là 50 đường K. Các đường nhanh được sử dụng để thiết lập giá dừng lỗ và đường chậm được sử dụng để xác định hướng xu hướng và thời gian nhập.

Chiến lược đầu tiên là tính giá cao nhất và giá thấp nhất của con đường nhanh, và lấy đường trung tâm làm đường dừng. Đồng thời tính giá cao nhất và giá thấp nhất của con đường chậm, trên và dưới con đường như đường vào.

Khi giá vượt qua đường chậm, hãy làm nhiều hơn; Khi giá vượt qua đường chậm, hãy làm trống. Sau khi vào, điểm dừng lỗ được đặt ở đường trung tâm của đường nhanh.

Như vậy, một kênh chậm sẽ xác định hướng của xu hướng lớn, và một kênh nhanh sẽ theo dõi các điểm dừng trong phạm vi nhỏ. Khi xu hướng lớn đảo ngược, giá sẽ vượt qua đường dừng của kênh nhanh trước tiên để thực hiện dừng.

Lợi thế chiến lược

  • Tự động theo dõi xu hướng, dừng lại kịp thời. Sử dụng cấu trúc hai kênh, có thể tự động theo dõi xu hướng, dừng lại nhanh chóng khi xu hướng đảo ngược.

  • Khởi động vị trí quay ngược, có một hiệu ứng lọc xu hướng. Chỉ mở vị trí khi giá phá vỡ biên giới kênh, có thể loại bỏ một số phá vỡ giả không theo xu hướng.

  • Rủi ro có thể kiểm soát được. Khoảng cách dừng lỗ gần hơn, bạn có thể kiểm soát tổn thất đơn lẻ.

Rủi ro chiến lược

  • Trở lại lớn hơn. Chiến lược theo dõi xu hướng Trở lại có thể lớn hơn, cần chuẩn bị tâm lý.

  • Điểm dừng quá gần. Chu kỳ nhanh hơn, khoảng cách dừng gần hơn, dễ bị trói. Chu kỳ nhanh hơn có thể được nới lỏng thích hợp.

  • Có thể tạo ra quá nhiều giao dịch. Cấu trúc hai kênh dẫn đến nhiều điểm mua và bán, cần kiểm soát vị trí hợp lý.

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

  • Thêm điều kiện lọc mở vị trí. Các chỉ số như biến động có thể được thêm vào điều kiện mở vị trí, lọc các đột phá không có xu hướng mạnh.

  • Tối ưu hóa các tham số chu kỳ kênh. Bạn có thể tìm kiếm các kết hợp tham số kênh tối ưu bằng cách có hệ thống hơn.

  • Kết hợp các quyết định theo nhiều chu kỳ thời gian. Có thể xác định xu hướng lớn trong chu kỳ thời gian cao hơn và giao dịch cụ thể trong chu kỳ thấp hơn.

  • Hoàn cảnh dừng lỗ có thể được điều chỉnh động theo mức độ biến động của thị trường.

Tóm tắt

Chiến lược độ tuổi phổ nói chung là một chiến lược theo dõi xu hướng tiêu chuẩn hơn. Nó sử dụng kênh giá để xác định hướng xu hướng và thiết lập dừng để kiểm soát rủi ro. Chiến lược này có một số lợi thế, nhưng cũng có vấn đề về rút lui và dừng quá gần điểm.

Mã nguồn chiến lược
/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-30 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2020

//@version=4
strategy("Noro's RiskTurtle Strategy", shorttitle = "RiskTurtle 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")
risk      = input(2, minval = 0.1, maxval = 99, title = "Risk size, %")
fast      = input(20, minval = 1, title = "Fast channel (for stop-loss)")
slow      = input(50, minval = 1, title = "Slow channel (for entries)")
showof    = input(true, defval = true, title = "Show offset")
showll    = input(true, defval = true, title = "Show lines")
showdd    = input(true, 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, title = "Slow channel high")
plot(ls, offset = offset, color = colorpc, title = "Slow channel low")
plot(center, offset = offset, color = colorsl, title = "Fast channel stop-loss")

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

//Var
loss = 0.0
maxloss = 0.0
equity = 0.0
truetime = true

//Lot size
risksize = -1 * risk
risklong = ((center / hs) - 1) * 100
coeflong = abs(risksize / risklong)
lotlong = (strategy.equity / close) * coeflong
riskshort = ((center / ls) - 1) * 100
coefshort = abs(risksize / riskshort)
lotshort = (strategy.equity / close) * coefshort

//Orders
strategy.entry("Long", strategy.long, lotlong, stop = hs, when = needlong and strategy.position_size == 0 and hs > 0 and truetime)
strategy.entry("Short", strategy.short, lotshort, stop = ls, when = needshort and strategy.position_size == 0 and ls > 0 and truetime)
strategy.exit("LongExit", "Long", stop = center, when = needlong and strategy.position_size > 0)
strategy.exit("Short", stop = center, when = needshort and strategy.position_size < 0)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")
    
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]))
    
    //Max loss size
    equity := strategy.position_size == 0 ? strategy.equity : equity[1]
    loss := equity < equity[1] ? ((equity / equity[1]) - 1) * 100 : 0
    maxloss := min(nz(maxloss[1]), loss)
    
    //Label
    min := round(min * 100) / 100
    maxloss := round(maxloss * 100) / 100
    labeltext = "Drawdown: " + tostring(min) + "%" + "\nMax.loss " + tostring(maxloss) + "%"
    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)