
Chiến lược đảo ngược giá theo hướng không gian bằng cách tính toán đường trung tâm của kênh giá để xác định hướng xu hướng của biến động giá. Khi giá gần đường trung tâm của kênh, nó phát ra tín hiệu mua hoặc bán. Chiến lược này kết hợp nhiều điều kiện lọc để tìm kiếm cơ hội giao dịch có khả năng cao.
Chỉ số cốt lõi của chiến lược này là đường trung tâm của kênh giá. Cách tính toán là lấy trung bình giá cao nhất và giá thấp nhất của 30 đường K gần đây nhất.
Chiến lược chỉ phát ra tín hiệu giao dịch khi bối cảnh xu hướng thay đổi. Trong bối cảnh tăng, chỉ khi đường K chuyển sang màu đỏ. Trong bối cảnh giảm, chỉ khi đường K chuyển sang màu xanh lá cây.
Ngoài ra, chiến lược cũng đặt điều kiện lọc kép: lọc thực thể và lọc cổng giá. Chỉ khi khối lượng thực thể lớn hơn 20% so với giá trị trung bình, tín hiệu sẽ được kích hoạt; phải có tín hiệu xu hướng liên tục trong chu kỳ lọc để mở vị trí.
Chiến lược này kết hợp xu hướng, khu vực giá trị và hình dạng đường K, một chiến lược giao dịch đảo ngược hiệu quả. Các lợi thế chính là:
Rủi ro chính của chiến lược này là từ việc bỏ lỡ điểm đảo ngược giá và không cần chờ đợi tín hiệu. Có thể được tối ưu hóa bằng cách:
Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:
Chiến lược đảo ngược giá định hướng không gian tạo ra tín hiệu chất lượng cao bằng cách xác định thời điểm đảo ngược thông qua kênh giá, đặt điều kiện lọc kép. Trên cơ sở điều chỉnh tham số và kiểm soát gió, đây là một chiến lược định lượng đáng tin cậy.
/*backtest
start: 2023-11-19 00:00:00
end: 2023-11-26 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2018
//@version=2
strategy(title = "Noro's PriceChannel for D1 v1.0", shorttitle = "PriceChannel D1", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0)
//Settings
needlong = input(true, "long")
needshort = input(true, "short")
slowlen = input(30, defval = 30, minval = 2, maxval = 200, title = "PriceChannel Period")
pcbars = input(1, defval = 1, minval = 1, maxval = 20, title = "PriceChannel Bars")
usecol = input(true, "Use color-filter")
usebod = input(true, "Use body-filter")
needbg = input(false, defval = false, title = "Need trend Background?")
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")
src = close
//PriceChannel
lasthigh = highest(src, slowlen)
lastlow = lowest(src, slowlen)
center = (lasthigh + lastlow) / 2
//Trend
ub = low > center ? 1 : 0
db = high < center ? 1 : 0
trend = sma(ub, pcbars) == 1 ? 1 : sma(db, pcbars) == 1 ? -1 : trend[1]
//Body
body = abs(close - open)
abody = sma(body, 10)
//Signals
up = trend == 1 and (close < open or usecol == false) and (body > abody / 5 or usebod == false)
dn = trend == -1 and (close > open or usecol == false) and (body > abody / 5 or usebod == false)
//Lines
plot(center, color = blue, linewidth = 3, transp = 0, title = "PriceChannel Center")
//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)
//Trading
if up
strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if dn
strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if time > timestamp(toyear, tomonth, today, 23, 59)
strategy.close_all()