
এই কৌশলটি বর্তমান প্রবণতা দিক নির্ধারণের জন্য তিনটি প্রযুক্তিগত সূচক ব্যবহার করে, যার মধ্যে রয়েছে ব্রিনব্যান্ড, কেন্টনার চ্যানেল এবং স্ব-অনুকূলিত আপেক্ষিকভাবে দুর্বল সূচক। প্যারালাইন এসএআর সূচকটি প্রবেশের জন্য। তিনটি সূচক যখন সিদ্ধান্তের ফলাফল একত্রিত হয় তখন একটি ট্রেডিং সিগন্যাল উত্পন্ন হয়। কৌশলটি মূলত প্রবণতার দিক নির্ধারণ করে, যখন প্রবণতা পরিবর্তিত হয় তখন সময়মতো প্রবেশ করে এবং লাভের লক্ষ্য রাখে।
এই কৌশলটি তিনটি প্রযুক্তিগত সূচকের সমন্বয়ে বর্তমান প্রবণতা নির্ধারণ করেঃ
SQUEEZE MOMENTUM INDICATOR: বুলিনের বেন্ড এবং কেন্টনারের পথের হিসাব করা হয়, যখন উভয়ই ওভারল্যাপ হয় তখন সংকোচন ঘটে, যা প্রবণতা পরিবর্তনের সংকেত দেয়। এই সূচকটি সংকোচনের অবস্থায় ফিরে আসে এবং লিনিয়ার রিটার্ন কার্ভের স্লাইড।
RSI VOLUME WEIGHTED: লেনদেনের ভলিউম ওজনের আরএসআই গণনা করা হয়। লেনদেনের ভলিউমের পরিবর্তনের উপর জোর দেওয়া এই সূচকটি লেনদেনের ভলিউমের পরিবর্তনের উপর জোর দেয়।
প্যারালাইন লাইন ক্ষতি ((SAR): বর্তমান দামের সাথে প্যারালাইন SAR এর অবস্থান সম্পর্কিত, SAR দামের উপরে নেমে যায়, SAR দামের নীচে উঠে যায়।
কৌশলটি প্রবণতার দিকনির্দেশের জন্য ব্রিনের রেঞ্জ ব্যবহার করে, কেন্টনারের চ্যানেলটি রিফাইন করে, আরএসআই ওভারব্লু ওভারসেলের জন্য ওভারব্লুয়ের সুযোগ নির্ধারণ করে এবং এসএআর প্রবেশের সময় নির্দেশ করে। নির্দিষ্ট যুক্তিটি নিম্নরূপঃ
বুলিনব্যান্ড, ক্যান্টনার ট্রানজিট, স্কুইজ সূচক গণনা করুন। স্কুইজ সংকোচনের সময় প্রস্তুতির পর্যায়ে প্রবেশ করে।
আরএসআই
SAR গণনা করা হয়। SAR মূল্যের নীচে উর্ধ্বমুখী এবং মূল্যের উপরে নিম্নমুখী।
উপরে বর্ণিত তিনটি সূচককে একত্রিত করুনঃ যখন স্কুইজ সংকুচিত হয়, আরএসআই উচ্চতর হয় মধ্যম লাইন, যখন SAR দামের নীচে থাকে তখন একটি মাল্টি-হেড সংকেত উত্পন্ন হয়; যখন স্কুইজ সংকুচিত হয়, আরএসআই নিম্নতর হয় মধ্যম লাইন, যখন SAR দামের উপরে থাকে তখন একটি ফাঁকা সংকেত উত্পন্ন হয়।
যখন একটি সংকেত উৎপন্ন হয়, তখন পূর্ববর্তী কে লাইনের তিনটি সূচক বিচার করা হয়, যদি বর্তমান সংকেতের বিচার বিপরীত হয়, তবে একটি প্রবেশের সংকেত উৎপন্ন হয়।
প্রবেশের পরে স্টপ লস স্টপ সেট করুন, স্টপ লস ট্র্যাক করুন।
এই কৌশলটির সুবিধাগুলো হলঃ
একাধিক সূচক পোর্টফোলিও পয়েন্টার বা পতন, সঠিক বিচার। স্কুইজ সূচক ট্রেন্ড পরিবর্তন সনাক্ত করতে সঠিক, আরএসআই বিচার ওভারবাইট ওভারসোল্ড স্পষ্ট, এসএআর নির্দেশক প্রবেশের সময় সঠিক।
সূচক লজিক সহজ, পরিষ্কার এবং সহজে বোঝা যায়।
মাল্টিমিটার কনফার্মেশন ব্যবহার করে, ভুয়া ব্রেকআপগুলি ফিল্টার করা যায়।
এটি একটি স্টপ লস স্টপ-অফ সিস্টেম যা লভ্যাংশ লক করে এবং ঝুঁকি নিয়ন্ত্রণ করে।
রিটার্নিং ডেটা পর্যাপ্ত এবং নির্ভরযোগ্য।
এই কৌশলটির কিছু ঝুঁকিও রয়েছেঃ
মাল্টি-হেড এবং খালি-হেড প্রবেশের লজিক একই রকম, একই সময়ে বিপরীত সংকেত প্রেরণ করা যেতে পারে, ফিল্টারিং প্রয়োজন।
তিনটি সূচকই প্যারামিটার অপ্টিমাইজেশান ব্যবহার করে, যা অতিরিক্ত ফিট হতে পারে।
ট্রেডিংয়ের সংখ্যা খুব বেশি হতে পারে, তাই পজিশনের সংখ্যা নিয়ন্ত্রণ করতে হবে।
স্টপ-ড্যামেজ সেটিং খুব কাছাকাছি হতে পারে, যা সহজেই ভেঙে ফেলা যায়।
এই সমস্যা সমাধানের উপায়ঃ
সংকেত কম্পন এড়ানোর জন্য নির্দেশক ফলাফলের ধারাবাহিকতা নির্ধারণ করা।
Walk forward analysis পদ্ধতি ব্যবহার করে, প্যারামিটারগুলিকে সামঞ্জস্য করুন, যাতে ওভারফিট না হয়।
পিরামিডের আকার সেট করুন এবং একক-মুখী হোল্ডিংয়ের সংখ্যা নিয়ন্ত্রণ করুন।
বিভিন্ন ক্ষতির পরিসীমা পরীক্ষা করুন, ক্ষতির অবস্থান অপ্টিমাইজ করুন।
এই কৌশলটি নিম্নলিখিত দিকগুলি থেকে অপ্টিমাইজ করা যেতে পারেঃ
অনুকূলিতকরণ প্যারামিটার, প্যারামিটার স্থিতিশীলতা উন্নত করুন। গতিশীল অনুকূলিতকরণ প্যারামিটার বিবেচনা করা যেতে পারে।
পজিশন কন্ট্রোল লজিক যোগ করুন, যেমন বড়, ছোট, গড় পজিশন ইত্যাদি।
বিভিন্ন ক্ষতির পদ্ধতি পরীক্ষা করুন, যেমন ওলটপালট ক্ষতি, লিনিয়ার ক্ষতি, শূন্য পজিশন ইত্যাদি।
ফিক্সড পজিশন, ফিক্সড ফান্ড ইউটিলিটি ইত্যাদির মতো অর্থ পরিচালনার বৈশিষ্ট্য যুক্ত করুন।
মেশিন লার্নিং অ্যালগরিদমের সাহায্যে ডায়নামিক ইনট্রা এবং আউটপুট।
হোল্ডিং এবং হোল্ডিংয়ের জন্য আরও হোল্ডিং এবং হোল্ডিংয়ের জন্য আরও হোল্ডিং এবং হোল্ডিং।
এই তথ্যের ভিত্তিতে, আমরা মনে করি যে, এই সিদ্ধান্তের জন্য আরও কিছু সূচক যুক্ত করা, ভোটদানের ব্যবস্থা স্থাপন করা এবং সঠিক সিদ্ধান্ত নেওয়ার জন্য আরও কিছু করা দরকার।
এই কৌশলটি সামগ্রিকভাবে সুস্পষ্ট, একাধিক সূচক ব্যবহার করে ট্রেন্ডের দিকনির্দেশনা নির্ধারণ করে, বুলিন বন্ডের চ্যানেল সংকোচনের সময় সূক্ষ্মভাবে প্রবেশ করে, স্টপ মেশিন নিয়ন্ত্রণের ঝুঁকি হ্রাস করে, এটি একটি স্থিতিশীল ট্রেন্ড ট্র্যাকিং কৌশল। প্যারামিটার অপ্টিমাইজেশান, ঝুঁকি নিয়ন্ত্রণ ব্যবস্থার উন্নতি, আরও ভাল রিটার্ন সূচক এবং রিয়েল-ডিস্ক প্রভাব অর্জন করা যায়। এই কৌশলটি প্রবণতা আরও স্পষ্ট জাতের জন্য প্রযোজ্য, এবং তুলনামূলকভাবে স্থিতিশীল বৃহত চক্র যেমন সূর্যালোকের সময়ও বিবেচনা করা যেতে পারে। সামগ্রিকভাবে, এই কৌশলটির দৃ strong় ব্যবহারিক মূল্য রয়েছে।
/*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)