Chiến lược đảo ngược giá được hướng dẫn bởi kênh giá 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á. Nó tạo ra các tín hiệu dài và ngắn khi giá tiếp cận đường trung tâm kênh. Chiến lược này kết hợp nhiều điều kiện lọc để tìm kiếm các 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 kênh giá. Nó được tính bằng mức trung bình của giá cao nhất và giá thấp nhất của 30 ngọn nến gần đây nhất. Khi mức thấp hơn đường trung tâm, nó được coi là xu hướng tăng. Khi mức cao thấp hơn đường trung tâm, nó được coi là xu hướng giảm.
Chiến lược chỉ tạo ra tín hiệu giao dịch khi nền xu hướng thay đổi. nghĩa là, trong nền xu hướng tăng, nó chỉ đi ngắn khi ngọn nến chuyển sang màu đỏ. Trong nền xu hướng giảm, nó chỉ đi dài khi ngọn nến chuyển sang màu xanh lá cây.
Ngoài ra, chiến lược cũng thiết lập các điều kiện lọc kép: bộ lọc thân nến và bộ lọc thanh kênh giá. Các tín hiệu chỉ được kích hoạt khi khối lượng thân nến lớn hơn 20% giá trị trung bình, và phải có các tín hiệu xu hướng liên tiếp trong chu kỳ lọc để mở các vị trí.
Chiến lược này kết hợp xu hướng, khu vực giá trị và mô hình nến, đó là một chiến lược giao dịch đảo ngược hiệu quả.
Rủi ro chính của chiến lược này xuất phát từ việc thiếu các điểm đảo ngược giá và chờ đợi các tín hiệu không cần thiết.
Chiến lược này có thể được tối ưu hóa trong các khía cạnh sau:
Chiến lược đảo ngược giá được hướng dẫn bởi kênh giá xác định các điểm đảo ngược thông qua các kênh giá và thiết lập các điều kiện lọc kép để tạo ra các tín hiệu chất lượng cao.
/*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()