Chiến lược này kết hợp ba chỉ số kỹ thuật khác nhau và tạo ra các tín hiệu giao dịch bằng cách sử dụng một hệ thống trung bình động kép, với các bộ lọc bổ sung dựa trên màu sắc và cơ thể của nến, để xây dựng một chiến lược giao dịch ngắn hạn tương đối ổn định và hiệu quả.
Chiến lược này sử dụng Bollinger Bands và kênh KC kết hợp để xác định các giai đoạn nén và mở rộng trên thị trường. Cụ thể, khi Bollinger Bands nằm trong kênh KC, nó được coi là nén; khi Bollinger Bands phá vỡ kênh KC, nó được coi là mở rộng.
Nếu biểu đồ hồi quy tuyến tính là dương tính (đại diện cho xu hướng tăng) và thanh là một ngọn nến màu đỏ (đại diện cho mức đóng thấp hơn), đồng thời thân nến lớn hơn 1/3 so với thân trung bình của 30 ngọn nến trước đó, một tín hiệu kết hợp như vậy sẽ dài. Ngược lại, nếu biểu đồ hồi quy tuyến tính là âm, thanh là một ngọn nến màu xanh lá cây, và thân nến cũng lớn, nó sẽ ngắn.
Chiến lược cũng cung cấp hình ảnh của nền nén và mở rộng để giúp đánh giá giai đoạn thị trường.
Rủi ro có thể được giảm bằng cách điều chỉnh các tham số chỉ số, tối ưu hóa các tiêu chí lọc, v.v.
Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:
Chiến lược này kết hợp nhiều chỉ số, trong khi xác định các cơ hội nén, nó làm tăng điều kiện lọc để hình thành một chiến lược ngắn hạn tương đối mạnh mẽ và hiệu quả. Thông qua các thông số và tối ưu hóa điều kiện lọc, có thể đạt được kết quả tốt hơn. Ngoài ra, khung chiến lược linh hoạt và dễ điều chỉnh để sử dụng trong các loại khác nhau, đáng để thử nghiệm và tối ưu hóa thêm.
/*backtest start: 2023-11-24 00:00:00 end: 2023-12-24 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2017 //@version=2 strategy(shorttitle = "Squeeze str 1.0", title="Noro's Squeeze Momentum Strategy v1.0", overlay = false, 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") length = input(20, title="BB Length") mult = input(2.0,title="BB MultFactor") lengthKC=input(20, title="KC Length") multKC = input(1.5, title="KC MultFactor") useTrueRange = true usecolor = input(true, defval = true, title = "Use color of candle") usebody = input(true, defval = true, title = "Use EMA Body") needbg = input(false, defval = false, title = "Show 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") // Calculate BB source = close basis = sma(source, length) dev = multKC * stdev(source, length) upperBB = basis + dev lowerBB = basis - dev // Calculate KC ma = sma(source, lengthKC) range = useTrueRange ? tr : (high - low) rangema = sma(range, lengthKC) upperKC = ma + rangema * multKC lowerKC = ma - rangema * multKC sqzOn = (lowerBB > lowerKC) and (upperBB < upperKC) sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC) noSqz = (sqzOn == false) and (sqzOff == false) val = linreg(source - avg(avg(highest(high, lengthKC), lowest(low, lengthKC)),sma(close,lengthKC)), lengthKC,0) bcolor = iff( val > 0, iff( val > nz(val[1]), lime, green), iff( val < nz(val[1]), red, maroon)) scolor = noSqz ? blue : sqzOn ? black : gray trend = val > 0 ? 1 : val < 0 ? -1 : 0 //Background col = needbg == false ? na : trend == 1 ? lime : red bgcolor(col, transp = 80) //EMA Body body = abs(close - open) emabody = ema(body, 30) / 3 //Signals bar = close > open ? 1 : close < open ? -1 : 0 up = trend == 1 and (bar == -1 or usecolor == false) and (body > emabody or usebody == false) dn = trend == -1 and (bar == 1 or usecolor == false) and (body > emabody or usebody == false) if up strategy.entry("Long", strategy.long) if dn strategy.entry("Short", strategy.short)