Chiến lược Transient Zones là một chiến lược giao dịch ngắn hạn dựa trên các khu vực biến động giá. Nó sử dụng các khu vực biến động được hình thành bởi giá trong một khoảng thời gian nhất định để đánh giá xu hướng thị trường và có vị trí khi các khu vực được xâm nhập.
Chiến lược tính toán giá cao nhất và thấp nhất của các nến N trong quá khứ để xây dựng một khu vực biến động giá. Khi nến mới nhất xâm nhập vào khu vực này, nó đánh giá rằng một sự đảo ngược xu hướng đã xảy ra và tạo ra các tín hiệu giao dịch.
Cụ thể, chiến lược liên tục theo dõi giá cao nhất và thấp nhất của N ngọn nến cuối cùng (công cụ điều chỉnh N), trong đó:
Điều này tạo ra vùng biến động giá.
Khi giá đóng cửa của ngọn nến mới nhất cao hơn giá cao nhất của khu vực, nó báo hiệu rằng khu vực đã xâm nhập, tạo ra tín hiệu dài; khi giá đóng cửa thấp hơn giá thấp nhất của khu vực, nó báo hiệu rằng khu vực đã xâm nhập, tạo ra tín hiệu ngắn.
Ngoài ra, chiến lược này cũng kết hợp các bộ lọc màu sắc và cơ thể. Bộ lọc màu sắc lọc tín hiệu dựa trên màu sắc của nến; bộ lọc cơ thể lọc tín hiệu dựa trên kích thước của thân nến. Điều này giúp lọc ra một số tín hiệu sai.
Chiến lược có những lợi thế sau:
Chiến lược này cũng có một số rủi ro:
Những rủi ro này có thể được giảm bằng cách điều chỉnh các tham số khu vực, tối ưu hóa bộ lọc tín hiệu vv.
Chiến lược có thể được tối ưu hóa theo nhiều hướng:
Chiến lược Transient Zones là một chiến lược giao dịch ngắn hạn tổng thể dễ sử dụng. Nó xác định các điểm đảo ngược xu hướng thông qua các vùng giá và có thể nhanh chóng tận dụng cơ hội thị trường. Nó cũng có một số rủi ro cần lưu ý.
/*backtest start: 2023-11-28 00:00:00 end: 2023-12-28 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy("Noro's Transient Zones Strategy v1.0", shorttitle = "TZ str 1.0", 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, %") usecol = input(true, defval = true, title = "Use Color-Filter") usebod = input(true, defval = true, title = "Use Body-Filter") h_left = input(title = "H left", defval = 10) h_right = -1 sample_period = input(title = "Sample bars for % TZ", defval = 5000) show_ptz = input(title = "Show PTZ", type = bool, defval = true) show_channel = input(title = "Show channel", type = bool, defval = true) fromyear = input(2018, defval = 2018, 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") //By Jurij w/ TZ percent occurrence by SPYderCrusher //barCount = nz(barCount[1]) + 1 //check history and realtime PTZ h_left_low = lowest(h_left) h_left_high = highest(h_left) newlow = low <= h_left_low newhigh = high >= h_left_high plotshape(newlow and show_ptz, style=shape.triangledown, location=location.belowbar, color=red) plotshape(newhigh and show_ptz, style=shape.triangleup, location=location.abovebar, color=green) channel_high = plot(show_channel ? h_left_low : 0, color=silver) channel_low = plot (show_channel ? h_left_high : 0, color=silver) //check true TZ back in history central_bar_low = low[h_right + 1] central_bar_high = high[h_right + 1] full_zone_low = lowest(h_left + h_right + 1) full_zone_high = highest(h_left + h_right + 1) central_bar_is_highest = central_bar_high >= full_zone_high central_bar_is_lowest = central_bar_low <= full_zone_low plotarrow(central_bar_is_highest ? -1 : 0, offset=-h_right-1) plotarrow(central_bar_is_lowest ? 1 : 0, offset=-h_right-1) //Color Filter bar = close > open ? 1 : close < open ? -1 : 0 //Body Filter nbody = abs(close - open) abody = sma(nbody, 10) body = nbody > abody / 3 or usebod == false //Signals up1 = central_bar_is_lowest and body and (bar == -1 or usecol == false) dn1 = central_bar_is_highest and body and (bar == 1 or usecol == false) exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body //Trading lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1] if up1 if strategy.position_size < 0 strategy.close_all() strategy.entry("long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if dn1 if strategy.position_size > 0 strategy.close_all() strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if time > timestamp(toyear, tomonth, today, 23, 59) or exit strategy.close_all()