
Chiến lược này sử dụng các chỉ số đa dạng như dải Brin, kênh KC và màu sợi dây để đánh giá sự nén và giải phóng của thị trường, kết hợp với hướng của đường đồng nhất để đánh giá xu hướng thiết lập, và hoạt động khi xu hướng chuyển hướng.
Tính trung bình di chuyển đơn giản của giá đóng cửa N ngày trong vòng Brin, M lần tần số thực tế N ngày trên đường trung tâm + KC và M lần tần số thực tế N ngày trên đường trung tâm - KC.
Tính toán KC channel. KC channel trung đạo là trung bình di chuyển đơn giản của giá đóng cửa N ngày, trên đường là trung đạo + N ngày real amplitude M lần, dưới đường là trung đạo - N ngày real amplitude M lần.
Xác định nén và giải phóng. Nén khi đường lên của dây chuyền Brin thấp hơn đường lên của kênh KC và đường xuống của dây chuyền Brin cao hơn đường xuống của kênh KC. Giải phóng khi đường lên của dây chuyền Brin cao hơn đường lên của kênh KC và đường xuống của dây chuyền Brin thấp hơn đường xuống của kênh KC.
Tính xu hướng thiết lập. Với giá đóng cửa vào ngày N - giá cao nhất và giá thấp nhất trong ngày N là giá trung bình, tính toán hồi quy tuyến tính trong ngày N, giá trị lớn hơn 0 cho thấy xu hướng thiết lập tăng, nhỏ hơn 0 cho thấy xu hướng thiết lập giảm.
Tín hiệu giao dịch: khi thiết lập tăng, đường ngắn và giải phóng là tín hiệu đa; khi thiết lập giảm, đường ngắn và nén là tín hiệu trống.
Xác định nhiều chỉ số, cải thiện độ chính xác của tín hiệu. Kết hợp với băng tần Brin, kênh KC và dây thừng để đánh giá xu hướng thị trường, tránh tín hiệu sai.
Đánh giá xu hướng của cơ sở, giao dịch theo xu hướng. Sử dụng phán đoán của cơ sở để đánh giá xu hướng chính, tránh hoạt động ngược.
Tự động dừng lỗ, kiểm soát rủi ro. Khi giá chạm đường dừng lỗ, tự động dừng lỗ.
Các tham số của băng thông Brin và kênh KC được thiết lập không đúng, có thể dẫn đến các lỗi xử lý nén và giải phóng.
Các nhà phân tích cho rằng, sự chậm trễ trong việc đánh giá xu hướng của establishment có thể khiến họ bỏ lỡ một bước ngoặt trong xu hướng.
Các sự kiện bất ngờ gây ra tình trạng kinh doanh lớn, không thể ngăn chặn và có nguy cơ tổn thất lớn.
Phương pháp tối ưu hóa: điều chỉnh các tham số của băng thông Brin và KC, sử dụng các chỉ số hỗ trợ phán đoán như ADX; cập nhật chu kỳ đường trung bình thiết lập kịp thời, giảm độ trễ; thêm vùng đệm khi thiết lập đường dừng.
Kết hợp với nhiều chỉ số kỹ thuật, tăng độ chính xác của tín hiệu xây dựng kho. Ví dụ: KDJ, MACD, v.v.
Tối ưu hóa các tham số chu kỳ của đường trung bình thiết lập để nó có thể nắm bắt được các xu hướng mới.
Thêm chỉ số khối lượng giao dịch để tránh đột phá giả mạo. Ví dụ như chỉ số dòng năng lượng, tích lũy / phân phối, v.v.
Xác định nhiều chu kỳ thời gian, phân biệt tín hiệu đường dài và đường ngắn.
Các tham số tối ưu hóa AI, số lượng tìm kiếm và kết hợp tham số tối ưu tìm kiếm. Giảm quá phù hợp.
Chiến lược này có thể được tối ưu hóa theo các hướng: kết hợp nhiều chỉ số, tối ưu hóa tham số xác định xu hướng, tham gia chỉ số năng lượng, đánh giá nhiều chu kỳ thời gian, tìm kiếm lợi thế của AI. Nhìn chung, chiến lược này dựa trên các quy tắc hoạt động tự tương tự và chu kỳ của thị trường, mô tả sự thay đổi của nhịp độ thị trường thông qua các chỉ số, giao dịch khi thị trường chuyển từ tích trữ năng lượng sang điểm quan trọng của việc giải phóng năng lượng, là chiến lược giao dịch điển hình.
/*backtest
start: 2024-01-17 00:00:00
end: 2024-01-24 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2017
//@version=2
strategy(shorttitle = "Squeeze str 1.1", title="Noro's Squeeze Momentum Strategy v1.1", 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")
lev = input(1, defval = 1, minval = 1, maxval = 100, title = "leverage")
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
mode2 = input(true, defval = true, title = "Mode 2")
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(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")
// 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)
//Body
body = abs(close - open)
abody = sma(body, 10) / 3
//Indicator
bcol = iff( val > 0, iff( val > nz(val[1]), lime, green), iff( val < nz(val[1]), red, maroon))
scol = noSqz ? blue : sqzOn ? black : gray
plot(val, color=bcol, style=histogram, linewidth=4)
plot(0, color=scol, style=cross, linewidth=2)
//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up1 = trend == 1 and (bar == -1 or usecolor == false) and (body > abody or usebody == false) and mode2 == false
dn1 = trend == -1 and (bar == 1 or usecolor == false) and (body > abody or usebody == false) and mode2 == false
up2 = trend == 1 and val < val[1] and mode2
dn2 = trend == -1 and val > val[1] and mode2
exit = (strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price) and mode2
//Trading
lot = strategy.position_size == 0 ? strategy.equity / close * lev : lot[1]
if up1 or up2
strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)
if dn1 or dn2
strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
if exit
strategy.close_all()