Chiến lược đảo ngược theo dõi xu hướng

Tác giả:ChaoZhang, Ngày: 2024-01-03 16:34:28
Tags:

img

Tổng quan

Chiến lược đảo ngược theo dõi xu hướng là một chiến lược giao dịch xu hướng dựa trên đường trung bình động và đường cực giá. Chiến lược sử dụng hai đường trung bình động để theo dõi xu hướng giá và mở các vị trí ngược khi xu hướng đảo ngược. Đồng thời, nó cũng tính toán kênh giá dựa trên giá cao nhất và thấp nhất của các đường K gần đây để dừng lỗ khi giá tiếp cận ranh giới kênh, kiểm soát thêm rủi ro.

Chiến lược logic

Chiến lược sử dụng trung bình động điểm cao và thấp 3 giai đoạn hma và lma để theo dõi xu hướng giá. Khi giá vượt trên hma, nó được giải thích là tăng; khi giá giảm dưới lma, nó được giải thích là giảm.

Chiến lược cũng tính toán các đường ray trên và dưới (uplevel và dnlevel) của kênh giá dựa trên giá cao nhất và thấp nhất trong các thanh K-line gần đây. uplevel là giá cao nhất trong các thanh K-line gần đây cộng với hệ số khôi phục lên; dnlevel là giá thấp nhất trong các thanh K-line gần đây trừ hệ số khôi phục xuống. Đây tạo thành phạm vi kênh giá.

Khi mở các vị trí dài, giá dừng lỗ được thiết lập ở đường ray trên của kênh; khi mở các vị trí ngắn, giá dừng lỗ được thiết lập ở đường ray dưới của kênh. Điều này kiểm soát hiệu quả rủi ro thua lỗ từ sự đảo ngược giá.

Khi một tín hiệu đảo ngược xuất hiện, chiến lược sẽ ngay lập tức đảo ngược các vị trí mở để theo dõi xu hướng giá mới.

Ưu điểm

  • Chiến lược tận dụng tối đa lợi thế của các đường trung bình động để theo dõi xu hướng và nắm bắt các chuyển động giá nhanh chóng.
  • Nó áp dụng các kênh giá và đảo ngược các vị trí mở để kiểm soát rủi ro và khóa lợi nhuận hiệu quả.
  • Logic chiến lược đơn giản và rõ ràng, dễ hiểu và thực hiện.
  • Các tham số có thể tùy chỉnh như chiều dài phán đoán xu hướng, hệ số khôi phục, vv thích nghi với các sản phẩm khác nhau.
  • Hỗ trợ cùng hướng kim tự tháp, nắm bắt đầy đủ các cơ hội xu hướng.

Rủi ro

  • Thường bị tín hiệu sai trong quá trình củng cố giá.
  • Sự đảo ngược xu hướng có thể không phải lúc nào cũng kích hoạt dừng lỗ, lỗ tối đa không thể được kiểm soát.
  • Cài đặt tham số không chính xác có thể gây ra phản ứng quá nhạy cảm hoặc chậm.
  • Các sản phẩm và khung thời gian thích hợp cần được lựa chọn để có kết quả tốt nhất.

Cải tiến:

  1. Loại bỏ các tín hiệu không hợp lệ bằng các chỉ báo khác;
  2. Thêm stop loss di chuyển để khóa lợi nhuận và giới hạn rút tiền tối đa;
  3. Kiểm tra và tối ưu hóa các thông số cho các sản phẩm và chu kỳ khác nhau.

Hướng dẫn tối ưu hóa

Có chỗ cho việc tối ưu hóa thêm:

  1. Các chỉ số khác có thể được giới thiệu để lọc một số tín hiệu không hợp lệ, chẳng hạn như MACD, KD, v.v.

  2. Logic dừng lỗ thích nghi có thể được thêm vào, chẳng hạn như dừng lỗ di chuyển, dừng lỗ cân bằng, vv để kiểm soát rủi ro hơn nữa.

  3. Kiểm tra tác động của các tham số khác nhau đối với hiệu suất chiến lược và tối ưu hóa sự kết hợp các tham số, chẳng hạn như chiều dài chu kỳ MA, kích thước hệ số khôi phục, v.v.

  4. Chiến lược hiện đang giao dịch trong các phiên theo thời gian. Nó cũng có thể được điều chỉnh để giao dịch cả ngày. Điều này có thể yêu cầu các quy tắc lọc bổ sung.

Kết luận

Tóm lại, đây là một chiến lược giao dịch đảo ngược xu hướng kết hợp các kênh giá và trung bình động. Bằng cách theo dõi xu hướng và các vị trí mở ngược kịp thời, nó có thể theo dõi hiệu quả các biến động giá. Đồng thời, các biện pháp kiểm soát rủi ro của các kênh giá và mở ngược cũng cho phép nó kiểm soát hiệu quả các lỗ đơn lẻ. Ý tưởng chiến lược đơn giản và rõ ràng, và đáng để thử nghiệm và tối ưu hóa hơn nữa trong giao dịch trực tiếp.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=3
strategy(title = "Noro's 3Bars Strategy by Larry Williams", shorttitle = "3Bars", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
corr = input(0.0, title = "Correction, %")
bars = input(1, minval = 1)
revers = input(false, defval = false, title = "revers")
showll = input(true, defval = true, title = "Show Levels")
showos = input(true, defval = true, title = "Show Levels one side")
showcl = input(false, defval = false, title = "Show Levels continuous line")
showbg = input(false, defval = false, title = "Show Background")
showar = input(false, defval = false, title = "Show Arrows")
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")

len = input(3)

hma = sma(high, len)
lma = sma(low, len)
plot(hma)
plot(lma)

//Levels
hbar = 0
hbar := high > high[1] ? 1 : high < high[1] ? -1 : 0
lbar = 0
lbar := low > low[1] ? 1 : low < low[1] ? -1 : 0
uplevel = 0.0
dnlevel = 0.0
hh = highest(high, bars + 1)
ll = lowest(low, bars + 1)
uplevel := hbar == -1 and sma(hbar, bars)[1] == 1 ? hh + ((hh / 100) * corr) : uplevel[1]
dnlevel := lbar == 1 and sma(lbar, bars)[1] == -1 ? ll - ((ll / 100) * corr) : dnlevel[1]

//Background
size = strategy.position_size
trend = 0
trend := size > 0 ? 1 : size < 0 ? -1 : high >= uplevel ? 1 : low <= dnlevel ? -1 : trend[1]
col = showbg == false ? na : trend == 1 ? lime : trend == -1 ? red : na
bgcolor(col)

//Lines
upcol = na
upcol := showll == false ? na : uplevel != uplevel[1] and showcl == false ? na : showos and trend[1] == 1 ? na : lime
plot(uplevel, color = upcol, linewidth = 2)
dncol = na
dncol := showll == false ? na : dnlevel != dnlevel[1] and showcl == false ? na : showos and trend[1] == -1 ? na : red
plot(dnlevel, color = dncol, linewidth = 2)

//Arrows
longsignal = false
shortsignal = false
longsignal := size > size[1]
shortsignal := size < size[1]
plotarrow(longsignal and showar and needlong ? 1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(shortsignal and showar and needshort ? -1 : na, colorup = blue, colordown = blue, transp = 0)

//Trading
lot = 0.0
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]
if uplevel > 0 and dnlevel > 0 and revers == false
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = uplevel)
    strategy.entry("Long stop", strategy.short, 0, stop = lma)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = dnlevel)
    strategy.entry("Short stop", strategy.long, 0, stop = hma)
    
// if time > timestamp(toyear, tomonth, today, 23, 59)
//     strategy.close_all()

Thêm nữa