Chiến lược khu vực chuyển tiếp

Tác giả:ChaoZhang, Ngày: 2023-12-29 17:03:27
Tags:

img

Tổng quan

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 logic

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 đó:

  • Giá thấp nhất = điểm thấp nhất trong N ngọn nến trước đây
  • Giá cao nhất = điểm cao nhất trong N ngọn nến trước đây

Đ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.

Ưu điểm

Chiến lược có những lợi thế sau:

  1. Khám phá các vùng giá và xác định các điểm đảo ngược xu hướng cho các mục dài / ngắn chính xác
  2. Các bộ lọc màu sắc và cơ thể giúp lọc các tín hiệu sai
  3. Logic chiến lược đơn giản và rõ ràng, dễ hiểu và điều chỉnh các thông số
  4. Nhiều thông số điều chỉnh cho phép tối ưu hóa chiến lược

Rủi ro

Chiến lược này cũng có một số rủi ro:

  1. Cài đặt tham số không phù hợp có thể gây ra giao dịch quá mức và phí cao
  2. Cài đặt phạm vi vùng không chính xác có thể tạo ra quá nhiều tín hiệu thoát sai
  3. Khả năng dự đoán vùng giá kém trong các biến động thị trường mạnh mẽ
  4. Không thể xử lý khoảng cách giá cả

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.

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

Chiến lược có thể được tối ưu hóa theo nhiều hướng:

  1. Điều chỉnh năng động phạm vi vùng giá thay vì các ngọn nến cố định N
  2. Kết hợp logic dừng lỗ để hạn chế lỗ
  3. Tối ưu hóa các thông số bộ lọc để cải thiện chất lượng tín hiệu
  4. Thêm logic để xử lý khoảng cách giá
  5. Kết hợp nhiều khung thời gian để đánh giá tín hiệu và tránh bẫy

Kết luận

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

Thêm nữa