Chiến lược vùng chuyển tiếp


Ngày tạo: 2023-12-29 17:03:27 sửa đổi lần cuối: 2023-12-29 17:03:27
sao chép: 1 Số nhấp chuột: 846
1
tập trung vào
1621
Người theo dõi

Chiến lược vùng chuyển tiếp

Tổng quan

Chiến lược chuyển tiếp là một chiến lược giao dịch ngắ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 trong một khoảng thời gian nhất định để đánh giá xu hướng thị trường, tham gia vào mức giá cao / thấp khi phá vỡ khu vực.

Nguyên tắc chiến lược

Chiến lược này xây dựng một vùng dao động của giá bằng cách tính toán giá cao nhất và giá thấp nhất của đường K gốc N trước đây. Khi đường K mới nhất xâm nhập vào vùng này, xác định xu hướng đảo chiều và tạo ra 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à giá thấp nhất của N gốc K cuối cùng (được điều chỉnh theo tham số N), trong đó:

  • Giá thấp nhất = Điểm thấp nhất trong đường N gốc K
  • Giá cao nhất = điểm cao nhất trong đường n gốc k

Do đó, giá cả của các sản phẩm này sẽ có thể dao động trong khoảng thời gian dài.

Khi giá đóng cửa của dòng K mới nhất cao hơn giá cao nhất trong dải, báo hiệu phá vỡ dải, tạo ra tín hiệu làm nhiều; khi giá đóng cửa của dòng K mới nhất thấp hơn giá thấp nhất trong dải, báo hiệu phá vỡ dải, tạo ra tín hiệu làm trống.

Ngoài ra, chiến lược cũng thêm bộ lọc màu và bộ lọc thực thể. Bộ lọc màu lọc tín hiệu dựa trên màu sắc của K-đường; bộ lọc thực thể lọc tín hiệu dựa trên kích thước của K-đường thực thể. Điều này có thể lọc ra một số tín hiệu giả.

Lợi thế chiến lược

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

  1. Ghi lại khoảng giá, đánh giá điểm biến động xu hướng, thực hiện thêm nhấp nháy chính xác
  2. Bộ lọc màu và bộ lọc thực thể, có thể lọc tín hiệu giả
  3. Logic chiến lược đơn giản và rõ ràng, dễ hiểu và điều chỉnh tham số
  4. Có nhiều tham số có thể điều chỉnh để tối ưu hóa chiến lược

Phân tích rủi ro

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

  1. Thiết lập tham số không chính xác có thể dẫn đến giao dịch quá thường xuyên và phí giao dịch quá cao
  2. Phạm vi không được thiết lập đúng, có thể dẫn đến quá nhiều tín hiệu giả phá vỡ khu vực
  3. Các nhà đầu tư cho rằng giá cả của các sản phẩm này có thể thay đổi theo thời gian.
  4. Không thể xử lý lỗ hổng tăng giá

Những rủi ro này có thể được giảm bằng cách điều chỉnh các tham số khoảng cách, tối ưu hóa các điều kiện lọc tín hiệu.

Hướng tối ưu hóa

Chiến lược này có thể được tối ưu hóa theo các hướng sau:

  1. Phạm vi giá thay vì đường N-phần K cố định
  2. Thêm logic dừng lỗ, giảm rủi ro mất mát
  3. Tối ưu hóa các tham số bộ lọc để cải thiện chất lượng tín hiệu
  4. Thêm logic xử lý lỗ hổng giá
  5. Kết hợp nhiều chu kỳ thời gian để tránh bị mắc kẹt

Tóm tắt

Chiến lược khu vực chuyển tiếp nói chung là một chiến lược giao dịch đường ngắn đơn giản và thực tế. Nó có thể nắm bắt cơ hội thị trường nhanh chóng bằng cách đánh giá điểm biến động xu hướng bằng khu vực giá. Tuy nhiên, cũng có một số rủi ro cần lưu ý. Bằng cách điều chỉnh và tối ưu hóa các tham số, bạn có thể hoàn thiện thêm chiến lược này để tăng hiệu quả lợi nhuận.

Mã nguồn chiến lược
/*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()