Chiến lược giao dịch thích nghi Turtle Breakout Drawdown

Tác giả:ChaoZhang, Ngày: 2023-12-08 11:54:02
Tags:

img

Tổng quan

Chiến lược này chủ yếu dựa trên nguyên tắc đột phá xu hướng, kết hợp với phương pháp đột phá kênh, sử dụng đường ray kép nhanh và chậm để phá vỡ để xác định hướng xu hướng. Chiến lược có sự bảo vệ kép của các mục nhập đột phá và ra khỏi rút cùng một lúc, có thể xử lý hiệu quả những thay đổi đột ngột của thị trường. Ưu điểm lớn nhất của chiến lược là nó có thể theo dõi sự rút tài khoản trong thời gian thực. Khi rút tiền vượt quá một tỷ lệ phần trăm nhất định, nó sẽ tích cực giảm kích thước vị trí. Điều này cho phép chiến lược kiểm soát hiệu quả rủi ro thị trường và khả năng kháng rủi ro của tài khoản.

Chiến lược logic

  1. Đường ray đôi nhanh và chậm: Đường ray nhanh và chậm được sử dụng để xây dựng các kênh tương ứng. Đường nhanh phản ứng nhanh hơn và đường chậm mượt mà hơn. Xác định hướng xu hướng bằng cách kết hợp các bước đột phá đường ray kép.

  2. Breakout: đi dài khi giá vượt qua kênh tăng và đi ngắn khi nó vượt qua kênh giảm.

  3. Rút ra: Theo dõi thời gian thực của mức rút tối đa. Một khi điểm rút ra được đạt đến, nó sẽ chủ động dừng lỗ để đóng các vị trí. Điểm rút ra có thể được điều chỉnh theo điều kiện thị trường.

  4. Định giá vị trí thích nghi: Số lượng vị trí được điều chỉnh trong thời gian thực dựa trên vốn chủ sở hữu tài khoản để tránh rủi ro thị trường.

Ưu điểm

  1. Hướng dẫn hai đường ray + các mục đột phá, đánh giá xu hướng chính xác hơn.

  2. Cơ chế dừng lỗ và lấy lợi nhuận có hiệu quả kiểm soát lỗ đơn.

  3. Giám sát thời gian thực về việc rút tiền tài khoản và điều chỉnh tích cực kích thước vị trí để giảm rủi ro thị trường.

  4. Kích thước vị trí được liên kết với vốn chủ sở hữu tài khoản với khả năng chống rủi ro mạnh mẽ để đối phó với những thay đổi đột ngột của thị trường.

Rủi ro

  1. Kiểm soát rút vốn có thể thất bại trong thị trường biến động, dẫn đến tổn thất lớn hơn.

  2. Nhiều tín hiệu đột phá không hợp lệ có thể xảy ra khi đường dây nhanh bước vào vùng trung lập.

  3. Dòng chậm quá mượt mà để ghi lại xu hướng đảo ngược nhanh chóng theo thời gian.

  4. Có nguy cơ bị khóa với các vị trí dài và ngắn hỗn hợp.

Tối ưu hóa

  1. Thiết lập dung lượng rút vốn cao hơn cho các thị trường biến động để tránh quá mức dừng lỗ.

  2. Thêm bộ lọc vùng trung lập để tránh tín hiệu không hợp lệ.

  3. Tối ưu hóa các tham số của kênh chậm để cải thiện tốc độ phản hồi cho các thị trường nhanh.

  4. Thêm các quy tắc sắp xếp thứ tự mở để tránh khóa với các vị trí hai chiều.

Kết luận

Nhìn chung, đây là một chiến lược hiệu quả phù hợp với giao dịch xu hướng trung và dài hạn. Ưu điểm lớn nhất của chiến lược là theo dõi giảm trong thời gian thực và điều chỉnh năng động các vị trí. Điều này cho phép chiến lược tự động điều chỉnh kích thước vị trí với khả năng thích nghi mạnh mẽ với thị trường. Khi có một sự thay đổi thị trường hoặc biến động giá mạnh, chiến lược có thể tự động giảm kích thước vị trí để ngăn chặn tổn thất mở rộng hiệu quả. Điều này rất khó đối với nhiều chiến lược truyền thống. Nói chung, ý tưởng của chiến lược này là sáng tạo với tính thực tế mạnh mẽ. Nó đáng để khám phá và tối ưu hóa cho ứng dụng.


//Noro
//2020

//Original idea from «Way of the Turtle: The Secret Methods that Turned Ordinary People into Legendary Traders» (2007, CURTIS FAITH, ISBN: 9780071486644) 

//@version=4
strategy("Noro's Turtles Strategy", shorttitle = "Turtles 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, title = "Long")
needshort = input(false, 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, %")
needfast = input(true, title = "Fast")
needslow = input(true, title = "Slow")
enter_fast = input(20, minval=1)
exit_fast = input(10, minval=1)
enter_slow = input(55, minval=1)
exit_slow = input(20, minval=1)
showof = input(true, title = "Show offset")
showll = input(false, title = "Show lines")
showlabel = input(true, defval = true, title = "Show label")
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")

//Fast
fastL = highest(enter_fast)
fastLC = lowest(exit_fast)
fastS = lowest(enter_fast)
fastSC = highest(exit_fast)

//Slow
slowL = highest(enter_slow)
slowLC = lowest(exit_slow)
slowS = lowest(enter_slow)
slowSC = highest(exit_slow)

//Lines
offset = showof ? 1 : 0
col1 = showll and needlong and needfast ? color.blue : na
col2 = showll and needshort and needfast ? color.red : na
col3 = showll and needlong and needslow ? color.blue : na
col4 = showll and needshort and needslow ? color.red : na
plot(fastL, color = col1, offset = offset)
plot(fastLC, color = col1, offset = offset)
plot(fastS, color = col2, offset = offset)
plot(fastSC, color = col2, offset = offset)
plot(slowL, color = col3, offset = offset)
plot(slowLC, color = col3, offset = offset)
plot(slowS, color = col4, offset = offset)
plot(slowSC, color = col4, offset = offset)

//Orders
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
size = strategy.position_size
lotlong = 0.0
lotlong := size != size[1] ? strategy.equity / close * sizelong / 100 : lotlong[1]
lotshort = 0.0
lotshort := size != size[1] ? strategy.equity / close * sizeshort / 100 : lotshort[1]

//Fast
strategy.entry("fast L", strategy.long, lotlong, stop = fastL, when = needfast and needlong and strategy.position_size == 0 and truetime)
strategy.entry("fast S", strategy.short, lotshort, stop = fastS, when = needfast and needshort and strategy.position_size == 0 and truetime)
strategy.exit("fast L", stop = fastLC, when = needfast and needlong and strategy.position_size > 0)
strategy.exit("fast S", stop = fastSC, when = needfast and needshort and strategy.position_size < 0)

//Slow
strategy.entry("slow L", strategy.long, lotlong, stop = slowL, when = needslow and needlong and strategy.position_size == 0 and truetime)
strategy.entry("slow S", strategy.short, lotshort, stop = slowS, when = needslow and needshort and strategy.position_size == 0 and truetime)
strategy.exit("slow L", stop = slowLC, when = needslow and needlong and strategy.position_size > 0)
strategy.exit("slow S", stop = slowSC, when = needslow and needshort and strategy.position_size < 0)

if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("fast L")
    strategy.cancel("fast S")
    strategy.cancel("slow L")
    strategy.cancel("slow S")
    
if showlabel

    //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)


Thêm nữa