
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.
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 đó:
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ả.
Chiến lược này 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ố khoảng cách, tối ưu hóa các điều kiện lọc tín hiệu.
Chiến lược này có thể được tối ưu hóa theo các hướng sau:
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.
/*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()