ZZ-4 Chiến lược thoát khỏi kênh giá

Tác giả:ChaoZhang, Ngày: 23-09-21 10:59:55
Tags:

Tổng quan

Chiến lược này giao dịch dựa trên kênh giá của chỉ số ZZ, có các vị trí dài / ngắn khi giá vượt qua trên / dưới các dải kênh.

Chiến lược logic

  1. Tính toán dải kênh giá trên/dưới
  2. Đi dài khi giá phá vỡ trên dải trên
  3. Đi ngắn khi giá giảm xuống dưới dải dưới
  4. Đặt khoảng thời gian giao dịch
  5. Các vị trí rõ ràng trước khi đóng cửa hàng ngày

Cụ thể, nó sử dụng chỉ số ZZ để tính toán các dải kênh giá. Khi giá vượt lên từ dải dưới, đi dài. Khi giá vượt xuống từ dải trên, đi ngắn. Các lệnh dừng lỗ được sử dụng với các dải kênh như mức dừng lỗ. Giờ giao dịch cũng được xác định để tránh rủi ro qua đêm.

Phân tích lợi thế

  1. Kênh giá xác định sự đột phá xu hướng tiềm năng
  2. Các tín hiệu giao dịch đơn giản và rõ ràng
  3. Thời gian kênh tùy chỉnh phù hợp với các sản phẩm và chu kỳ khác nhau
  4. Thời gian giao dịch và quản lý rủi ro thoát hàng ngày
  5. Đặt giới hạn lỗ dừng giao dịch

Phân tích rủi ro

  1. Whipsaws bên trong kênh có thể lặp đi lặp lại nhấn stop loss
  2. Yêu cầu điều chỉnh tham số kịp thời, nếu không phạm vi kênh có thể không chính xác
  3. Sự thoát hiểm có thể là sai, nguy cơ bị mắc kẹt.
  4. Khả năng lợi nhuận bị giới hạn bởi phạm vi kênh
  5. Không thể tận dụng đầy đủ các động thái xu hướng

Rủi ro có thể được giảm bằng cách mở rộng phạm vi kênh, tối ưu hóa dừng lỗ, đo lường sức mạnh xu hướng v.v.

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

  1. Kiểm tra các kết hợp tham số khác nhau để thiết lập tốt nhất
  2. Mở rộng kênh giá để nắm bắt các động thái lớn hơn
  3. Thêm chỉ số xu hướng để tránh phá vỡ sai
  4. Tối ưu hóa stop loss để tránh bị mắc kẹt
  5. Tăng kích thước vị trí để tối đa hóa lợi nhuận thoát
  6. Đánh giá lợi nhuận trên các khoảng thời gian khác nhau

Tóm lại

Chiến lược này giao dịch sự đột phá của kênh giá để xác định sự bùng phát của xu hướng. Ưu điểm là các tín hiệu rõ ràng đơn giản và dễ vận hành; Nhược điểm là chém và thất bại khi đi theo xu hướng.


/*backtest
start: 2022-09-14 00:00:00
end: 2023-09-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=4
strategy(title = "Noro's ZZ-4 Strategy", shorttitle = "Noro's ZZ-4 Strategy", 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, %")
len = input(7, minval = 1, title = "Length")
showll = input(true, defval = true, title = "Show Levels")
showbg = input(false, defval = false, title = "Show Background")
showpc = input(false, defval = false, title = "Show Price Channel")
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")

//Price channel
h = highest(ohlc4, len)
l = lowest(ohlc4, len)
pccol = showpc ? color.blue : na
plot(h, color = pccol, transp = 0)
plot(l, color = pccol, transp = 0)

//Levels
ml = 0
ml := l > l[1] ? 1 : l < l[1] ? -1 : ml[1]
ll = 0.0
ll := ml == 1 and ml[1] == -1 ? l[1] : ll[1]
mh = 0
mh := h > h[1] ? 1 : h < h[1] ? -1 : mh[1]
hl = 0.0
hl := mh == -1 and mh[1] == 1 ? h[1] : hl[1]

//Lines
colorh = showll and hl == hl[1] ? color.lime : na
colorl = showll and ll == ll[1] ? color.red : na
plot(hl, color = colorh, linewidth = 2, transp = 0, title = "Long")
plot(ll, color = colorl, linewidth = 2, transp = 0, title = "Short")

//Background
size = strategy.position_size
trend = 0
trend := size > 0 ? 1 : size < 0 ? -1 : high >= hl ? 1 : low <= ll ? -1 : trend[1]
bgcol = showbg == false ? na : trend == 1 ? color.lime : trend == -1 ? color.red : na
bgcolor(bgcol, transp = 80)

//Trading
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
lot = 0.0
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]
if ll > 0 and hl > 0
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = hl, when=(truetime))
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = ll, when=(truetime))
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")

Thêm nữa