
Chiến lược này sử dụng ba chỉ số kỹ thuật về định hướng xu hướng hiện tại, kết hợp với các chỉ số SAR đường phân cực. Chiến lược này sử dụng các chỉ số kỹ thuật về định hướng xu hướng hiện tại, sử dụng các chỉ số kỹ thuật về định hướng xu hướng hiện tại, sử dụng các chỉ số kỹ thuật về định hướng xu hướng hiện tại.
Chiến lược này sử dụng kết hợp ba chỉ số kỹ thuật để đánh giá xu hướng hiện tại:
Chỉ số SQUEEZE MOMENTUM INDICATOR: tính toán các đường Boolean và Kentner, tạo ra nén khi cả hai chồng lên nhau, cho thấy một tín hiệu thay đổi xu hướng sắp xảy ra. Chỉ số này trả về trạng thái nén và độ dốc đường cong quay trở lại tuyến tính.
Chỉ số RSI VOLUME WEIGHTED: tính RSI có trọng lượng giao dịch, sử dụng đường trung bình để đánh giá quá mua quá bán. Chỉ số này nhấn mạnh sự thay đổi khối lượng giao dịch.
Hạn chế đường ngang ((SAR): Xác định mối quan hệ giữa giá hiện tại và vị trí của đường ngang SAR, SAR giảm trên giá và SAR tăng dưới giá.
Chiến lược sử dụng dải Brin để xác định hướng xu hướng, đường Kentner Refine, RSI để xác định mua quá mức và bán quá mức để tìm cơ hội đảo ngược, SAR để chỉ thời gian nhập.
Tính toán các chỉ số Brin Belt, Kentner Channel, Squiz. Khi Squiz được nén, nó sẽ đi vào giai đoạn chuẩn bị.
RSI được tính bằng trọng lượng giao dịch. RSI cao hơn đường trung bình và thấp hơn đường trung bình.
Tính SAR. SAR tăng dưới giá và giảm trên giá.
Kết hợp ba chỉ số trên: Khi squeeze nén, RSI cao hơn đường trung bình, SAR tạo ra tín hiệu đa đầu khi giá dưới; Khi squeeze nén, RSI thấp hơn đường trung bình, SAR tạo ra tín hiệu vô đầu khi giá trên.
Khi tín hiệu được tạo ra, hãy đánh giá kết quả của ba chỉ số của dòng K trước đó, và nếu nó trái ngược với tín hiệu hiện tại, hãy tạo ra tín hiệu nhập cảnh.
Cài đặt Stop Loss Stop và theo dõi Stop Loss.
Chiến lược này có những ưu điểm sau:
Chỉ số đa chỉ số giao dịch, đánh giá chính xác. Chỉ số Squizes xác định chính xác sự thay đổi xu hướng, RSI đánh giá rõ ràng quá mua quá bán, SAR chỉ ra thời gian vào thị trường chính xác.
Các chỉ số logic đơn giản, rõ ràng và dễ hiểu.
Sử dụng xác nhận đa chỉ số, có thể lọc các đột phá giả.
Một hệ thống dừng lỗ có thể khóa lợi nhuận và kiểm soát rủi ro.
Dữ liệu phản hồi đầy đủ và đáng tin cậy.
Chiến lược này cũng có một số rủi ro:
Logic nhập cảnh của nhiều đầu và đầu rỗng tương tự, có thể phát ra tín hiệu ngược cùng một lúc, cần lọc.
Ba chỉ số đều được tối ưu hóa tham số, có thể quá phù hợp.
Có thể giao dịch quá thường xuyên, nên kiểm soát số lượng vị trí một cách hợp lý.
Thiết lập dừng thiệt hại có thể quá gần và dễ bị phá vỡ.
Các giải pháp tương ứng:
Tăng kết quả chỉ số để xác định chu kỳ liên tục, tránh xung đột tín hiệu.
Sử dụng phương pháp phân tích tiến bộ, điều chỉnh các tham số để ngăn chặn quá phù hợp.
Thiết lập kích thước kim tự tháp, kiểm soát số lượng đơn phương giữ.
Kiểm tra các vùng dừng khác nhau, tối ưu hóa vị trí dừng.
Chiến lược này có thể được tối ưu hóa theo các hướng sau:
Tối ưu hóa tham số chỉ số, tăng tính ổn định của tham số. Các tham số tối ưu hóa động có thể được xem xét.
Thêm logic kiểm soát vị trí, chẳng hạn như vị trí lớn, vị trí nhỏ, vị trí trung bình.
Kiểm tra các phương thức dừng khác nhau, chẳng hạn như dừng biến động, dừng tuyến tính, trở lại vị trí 0.
Tăng chức năng quản lý tiền, chẳng hạn như vị trí cố định, tỷ lệ sử dụng tiền cố định.
Giao thức này được sử dụng để thực hiện các bước nhập và xuất động kết hợp với thuật toán học máy.
Tăng cơ chế bảo hiểm, làm nhiều bảo hiểm đối ngoại, giảm rủi ro hệ thống của thị trường liên quan.
Xem xét thêm các chỉ số, xây dựng cơ chế bỏ phiếu và cải thiện tính chính xác của phán đoán.
Chiến lược này có tư duy tổng thể rõ ràng, sử dụng nhiều chỉ số để đánh giá xu hướng xu hướng, tham gia vào thời điểm nhạy cảm khi Brin squeeze, ngăn chặn các cơ chế kiểm soát rủi ro, là một chiến lược theo dõi xu hướng ổn định hơn. Bằng cách tối ưu hóa các tham số, cải thiện cơ chế kiểm soát rủi ro, có thể đạt được hiệu quả tốt hơn về chỉ số đo đạc và hiệu quả ổ đĩa. Chiến lược này được áp dụng cho các giống có xu hướng rõ ràng hơn, cũng có thể được xem xét trong chu kỳ hoạt động tương đối ổn định như đường nắng.
/*backtest
start: 2023-10-06 00:00:00
end: 2023-11-05 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © XaviZ
//#####©ÉÉÉɶN###############################################
//####*..´´´´´´,,,»ëN########################################
//###ë..´´´´´´,,,,,,''%©#####################################
//###'´´´´´´,,,,,,,'''''?¶###################################
//##o´´´´´´,,,,,,,''''''''*©#################################
//##'´´´´´,,,,,,,'''''''^^^~±################################
//#±´´´´´,,,,,,,''''''''^í/;~*©####æ%;í»~~~~;==I±N###########
//#»´´´´,,,,,,'''''''''^;////;»¶X/í~~/~~~;=~~~~~~~~*¶########
//#'´´´,,,,,,''''''''^^;////;%I^~/~~/~~~=~~~;=?;~~~~;?ë######
//©´´,,,,,,,''''''''^^~/////X~/~~/~~/~~»í~~=~~~~~~~~~~^;É####
//¶´,,,,,,,''''''''^^^;///;%;~/~~;í~~»~í?~?~~~?I/~~~~?*=íÑ###
//N,,,,,,,'''''''^^^^^///;;o/~~;;~~;£=»í»;IX/=~~~~~~^^^^'*æ##
//#í,,,,,''''''''^^^^^;;;;;o~»~~~~íX//~/»~;í?IíI»~~^/*?'''=N#
//#%,,,'''''''''^^^^^^í;;;;£;~~~//»I»/£X/X/»í*&~~~^^^^'^*~'É#
//#©,,''''''''^^^^^^^^~;;;;&/~/////*X;í;o*í»~=*?*===^'''''*£#
//##&''''''''^^^^^^^^^^~;;;;X=í~~~»;;;/~;í»~»±;^^^^^';=''''É#
//##N^''''''^^^^^^^^^^~~~;;;;/£;~~/»~~»~~///o~~^^^^''''?^',æ#
//###Ñ''''^^^^^^^^^^^~~~~~;;;;;í*X*í»;~~IX?~~^^^^/?'''''=,=##
//####X'''^^^^^^^^^^~~~~~~~~;;íííííí~~í*=~~~~Ií^'''=''''^»©##
//#####£^^^^^^^^^^^~~~~~~~~~~~íííííí~~~~~*~^^^;/''''='',,N###
//######æ~^^^^^^^^~~~~~~~~~~~~~~íííí~~~~~^*^^^'=''''?',,§####
//########&^^^^^^~~~~~~~~~~~~~~~~~~~~~~~^^=^^''=''''?,íN#####
//#########N?^^~~~~~~~~~~~~~~~~~~~~~~~~^^^=^''^?''';í@#######
//###########N*~~~~~~~~~~~~~~~~~~~~~~~^^^*'''^='''/É#########
//##############@;~~~~~~~~~~~~~~~~~~~^^~='''~?'';É###########
//#################É=~~~~~~~~~~~~~~^^^*~'''*~?§##############
//#####################N§£I/~~~~~~»*?~»o§æN##################
//@version=4
strategy(title="M-SQUEEZE", overlay = true)
//study(title="M-SQUEEZE", overlay = true)
src = input(close, "SOURCE", type = input.source)
// ███▓▒░░ VARIABLES ░░▒▓███
var bool longCond = na, var bool shortCond = na
var int CondIni_long0 = 0, var int CondIni_short0 = 0
var int CondIni_long = 0, var int CondIni_short = 0
var float last_open_longCondition = na, var float last_open_shortCondition = na
var int last_longCondition0 = na, var int last_shortCondition0 = na
var int last_longCondition = na, var int last_shortCondition = na
var bool long_tp = na, var bool short_tp = na
var int last_long_tp = na, var int last_short_tp = na
var bool Final_Long_tp = na, var bool Final_Short_tp = na
var bool SMI_longCond = na, var bool SMI_shortCond = na
var bool RSI_longCond = na, var bool RSI_shortCond = na
var bool ADX_longCond = na, var bool ADX_shortCond = na
var bool SAR_longCond = na, var bool SAR_shortCond = na
var bool Final_longCondition0 = na, var bool Final_shortCondition0 = na
var bool Final_longCondition = na, var bool Final_shortCondition = na
// ███▓▒░░ SQUEEZE MOMENTUM INDICATOR ░░▒▓███
Act_SMI = input(true, "SQUEEZE MOMENTUM INDICATOR")
BB_length = input(85, title="BOLLINGER BANDS LENGTH", minval = 1)
BB_mult = input(2.1, title="BOLLINGER BANDS MULTI-FACTOR", minval = 0.1, step = 0.1)
KC_length = input(38, title="KELTNER CHANNEL LENGTH", minval = 1)
KC_mult = input(2.0, title="KELTNER CHANNEL MULTI-FACTOR", minval = 0.1, step = 0.1)
SQUEEZE_M(_src,_BB_length,_BB_mult,_KC_length,_KC_mult)=>
// Calculate BB
basis = sma(_src, _BB_length)
dev = _BB_mult * stdev(_src, _BB_length)
upperBB = basis + dev
lowerBB = basis - dev
// Calculate KC
ma = sma(src, _KC_length)
rangema = sma(tr, _KC_length)
upperKC = ma + rangema * _KC_mult
lowerKC = ma - rangema * _KC_mult
// Squeeze
sqzOn = lowerBB > lowerKC and upperBB < upperKC
sqzOff = lowerBB < lowerKC and upperBB > upperKC
nosqz = sqzOn == false and sqzOff == false
// Linear Regression curve
val = linreg(_src - avg(avg(highest(high, _KC_length), lowest(low, _KC_length)), sma(close, _KC_length)), _KC_length, 0)
[nosqz,val]
[NOSQZ,VAL] = SQUEEZE_M(src,BB_length,BB_mult,KC_length,KC_mult)
barcolor(iff(VAL > 0, iff(VAL > nz(VAL[1]), color.lime, color.green), iff(VAL < nz(VAL[1]), color.red, color.maroon)))
// ███▓▒░░ SAR ░░▒▓███
Act_SAR = input(true, "PARABOLIC SAR")
Sst = input (0.73, "SAR STAR", step=0.01, minval = 0.01)
Sinc = input (0.5, "SAR INC", step=0.01, minval = 0.01)
Smax = input (0.06, "SAR MAX", step=0.01, minval = 0.01)
SAR = sar(Sst, Sinc, Smax)
plot(SAR, style = plot.style_cross, title = "SAR")
// ███▓▒░░ RSI VOLUME WEIGHTED ░░▒▓███
Act_RSI = input(true, "RSI VOLUME WEIGHTED")
RSI_len = input(22, "RSI LENGHT", minval = 1)
RSI_obos = input(45,title="RSI CENTER LINE", type=input.integer, minval = 1)
WiMA(_src, _length)=>
var float MA_s=0.0
MA_s:=(_src + nz(MA_s[1] * (_length-1)))/_length
MA_s
RSI_Volume(fv, length)=>
up=iff(fv>fv[1],abs(fv-fv[1])*volume,0)
dn=iff(fv<fv[1],abs(fv-fv[1])*volume,0)
upt=WiMA(up,length)
dnt=WiMA(dn,length)
100*(upt/(upt+dnt))
RSI_V = RSI_Volume(src, RSI_len)
// ███▓▒░░ STRATEGY ░░▒▓███
SMI_longCond := (Act_SMI ? (VAL > 0 and (VAL > nz(VAL[1])) and not NOSQZ) : RSI_longCond)
RSI_longCond := (Act_RSI ? (RSI_V > RSI_obos) : SAR_longCond)
SAR_longCond := (Act_SAR ? (SAR < close) : SMI_longCond)
SMI_shortCond := (Act_SMI ? (VAL < 0 and (VAL < nz(VAL[1])) and not NOSQZ) : RSI_shortCond)
RSI_shortCond := (Act_RSI ? (RSI_V < RSI_obos) : SAR_shortCond)
SAR_shortCond := (Act_SAR ? (SAR > close) : SMI_shortCond)
longCond := SMI_longCond and RSI_longCond and SAR_longCond
shortCond := SMI_shortCond and RSI_shortCond and SAR_shortCond
CondIni_long0 := longCond ? 1 : shortCond ? -1 : CondIni_long0[1]
CondIni_short0 := longCond ? 1 : shortCond ? -1 : CondIni_short0[1]
longCondition0 = (longCond and CondIni_long0[1] == -1)
shortCondition0 = (shortCond and CondIni_short0[1] == 1)
CondIni_long := longCond[1] ? 1 : shortCond[1] ? -1 : CondIni_long[1]
CondIni_short := longCond[1] ? 1 : shortCond[1] ? -1 : CondIni_short[1]
longCondition = (longCond[1] and CondIni_long[1] == -1)
shortCondition = (shortCond[1] and CondIni_short[1] == 1)
// ███▓▒░░ ALERTS & SIGNALS ░░▒▓███
plotshape(longCondition, title = "Long Signal", style = shape.triangleup, location = location.belowbar, color = color.blue, transp = 0, size = size.tiny)
plotshape(shortCondition, title = "Short Signal", style = shape.triangledown, location = location.abovebar, color = #FF0000, transp = 0, size = size.tiny)
//alertcondition(longCondition, title="Long Alert", message = "LONG")
//alertcondition(shortCondition, title="Short Alert", message = "SHORT")
// ███▓▒░░ BACKTESTING ░░▒▓███
testStartYear = input(2018, "BACKTEST START YEAR", minval = 1980, maxval = 2222)
testStartMonth = input(01, "BACKTEST START MONTH", minval = 1, maxval = 12)
testStartDay = input(01, "BACKTEST START DAY", minval = 1, maxval = 31)
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear = input(2222, "BACKTEST STOP YEAR", minval=1980, maxval = 2222)
testStopMonth = input(12, "BACKTEST STOP MONTH", minval=1, maxval=12)
testStopDay = input(31, "BACKTEST STOP DAY", minval=1, maxval=31)
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)
testPeriod = time >= testPeriodStart and time <= testPeriodStop ? true : false
strategy.entry("Long", strategy.long, when = longCondition0 and testPeriod)
strategy.entry("Short", strategy.short, when = shortCondition0 and testPeriod)