یہ حکمت عملی موجودہ رجحان کی سمت کا تعین کرنے کے لئے بولنگر بینڈ ، کیلنر چینلز اور موافقت پذیر رشتہ دار طاقت انڈیکس کا استعمال کرتی ہے ، جس میں انٹری کا وقت دینے کے لئے پیرابولک SAR کے ساتھ مل کر استعمال ہوتا ہے۔ جب ان تینوں اشارے کے فیصلے اتفاق کرتے ہیں تو تجارتی سگنل پیدا ہوتے ہیں۔ یہ حکمت عملی بنیادی طور پر رجحان کی سمت کا فیصلہ کرتی ہے اور جب رجحان بدلتا ہے تو بروقت انداز میں داخل ہوتی ہے ، جس کا مقصد منافع حاصل کرنا ہے۔
یہ حکمت عملی موجودہ رجحان کا تعین کرنے کے لئے مندرجہ ذیل تین تکنیکی اشارے کو یکجا کرتی ہے:
SQUEEZE Momentum Indicator: بولنگر بینڈ اور کیلٹنر چینلز کا حساب لگاتا ہے۔ جب دونوں بینڈ اوورلیپ ہوتے ہیں تو ، یہ ایک کمپریشن پیدا کرتا ہے اور ایک متوقع رجحان کی تبدیلی کا اشارہ کرتا ہے۔ یہ کمپریشن کی حیثیت اور لکیری رجعت کے ڈھلوان کو واپس کرتا ہے۔
حجم وزن شدہ آر ایس آئی: حجم کے لحاظ سے وزن والے آر ایس آئی کا حساب لگاتا ہے۔ overbought / oversold کی سطح کا تعین کرنے کے لئے درمیانی نقطہ استعمال کرتا ہے۔ اس میں حجم کی تبدیلیوں پر زور دیا گیا ہے۔
پیرابولک SAR: SAR لائن کے سلسلے میں موجودہ قیمت کے مقام کا فیصلہ کرتا ہے۔ قیمت سے اوپر SAR نیچے کی طرف اشارہ کرتا ہے جبکہ قیمت سے نیچے SAR اوپر کی طرف اشارہ کرتا ہے۔
اس حکمت عملی میں رجحان کی سمت کا تعین کرنے کے لئے بولنگر بینڈ ، اسے بہتر بنانے کے لئے کیلنر چینلز ، اوور بک / اوور سیل ہونے پر الٹ جانے کے مواقع تلاش کرنے کے لئے آر ایس آئی ، اور اندراج کے وقت کے لئے ایس اے آر کا استعمال کیا جاتا ہے۔ منطق یہ ہے:
بولنگر بینڈ، Keltner چینلز، سکیڑیں اشارے کا حساب لگائیں. سکیڑیں ہوتا ہے جب اسٹینڈ بائی میں داخل.
حجم وزن والے RSI کا حساب لگائیں۔ RSI وسط نقطہ سے اوپر اوپر کا رجحان ، وسط نقطہ سے نیچے کا رجحان ظاہر کرتا ہے۔
Parabolic SAR کا حساب لگائیں۔ قیمت کے نیچے SAR اوپر کا رجحان ظاہر کرتا ہے، قیمت کے اوپر نیچے کا رجحان ظاہر کرتا ہے۔
تینوں اشارے کو یکجا کریں: جب سکڑتا ہے تو ، آر ایس آئی وسط نقطہ سے اوپر جاتا ہے ، SAR قیمت سے نیچے ہے ، ایک لمبا سگنل تیار کیا جاتا ہے۔ جب سکڑتا ہے تو ، آر ایس آئی وسط نقطہ سے نیچے جاتا ہے ، SAR قیمت سے اوپر ہے ، ایک مختصر سگنل تیار کیا جاتا ہے۔
جب سگنل ٹرگر ہو جائے تو چیک کریں کہ پچھلے بار پر تین اشارے کے فیصلے موجودہ سگنل کے برعکس ہیں۔ اگر ایسا ہے تو ، تجارت میں داخل ہوں۔
سٹاپ نقصان مقرر کریں اور اندراج کے بعد منافع لے، پیچھے سٹاپ نقصان.
اس حکمت عملی کے فوائد:
متعدد اشارے کا امتزاج رجحان کی تشخیص کی درستگی کو بہتر بناتا ہے۔ سکیم درست طریقے سے رجحان کی تبدیلیوں کا پتہ لگاتا ہے ، آر ایس آئی واضح طور پر زیادہ خرید / زیادہ فروخت کی سطح کی نشاندہی کرتا ہے ، ایس اے آر عین مطابق وقت میں داخل ہوتا ہے۔
اشارے کا منطق سادہ اور سمجھنے میں آسان ہے.
متعدد اشارے کی تصدیق سے جھوٹے بریکآؤٹس کو فلٹر کرنے میں مدد ملتی ہے۔
سٹاپ نقصان اور منافع لینے کے میکانکس منافع میں تالا لگاتے ہیں اور خطرات کو محدود کرتے ہیں۔
وسیع پیمانے پر بیک ٹیسٹ کے اعداد و شمار قابل اعتماد کو یقینی بناتے ہیں۔
کچھ خطرات بھی ہیں:
طویل اور مختصر انٹری منطق ایک جیسی ہے اور متضاد سگنل پیدا کرسکتی ہے۔ فلٹرنگ کی ضرورت ہے۔
تمام اشارے پیرامیٹر کی اصلاح کا استعمال کرتے ہیں، خطرات overfitting.
ہائی ٹریڈنگ فریکوئنسی، پوزیشن سائزنگ کنٹرول کی ضرورت ہے.
سٹاپ نقصان بہت قریب ہو سکتا ہے اور آسانی سے روک دیا جائے.
حل:
سگنل کے اتار چڑھاؤ سے بچنے کے لئے اشارے کے فیصلوں پر مستقل چیک شامل کریں.
پیرامیٹرز کو ایڈجسٹ کرنے اور اوور فٹنگ کو روکنے کے لئے واک فارورڈ تجزیہ کا استعمال کریں.
ہر سمت میں پوزیشن کنٹرول کرنے کے لئے پرامڈ سائز مقرر کریں.
سٹاپ نقصان کی قیمت کو بہتر بنانے کے لئے مختلف سٹاپ نقصان کی حدوں کی جانچ کریں.
حکمت عملی کو بہتر بنانے کے لئے کچھ ہدایات:
استحکام کے لئے اشارے کے پیرامیٹرز کو بہتر بنائیں۔ متحرک اصلاح پر غور کریں۔
پوزیشن سائزنگ منطق جیسے مقررہ / برابر فیصد شامل کریں.
مختلف سٹاپ نقصان کے طریقوں جیسے اتار چڑھاؤ یا لکیری اسٹاپ، صفر پوزیشن وغیرہ کی جانچ کریں.
پیسہ مینجمنٹ شامل کریں جیسے فکسڈ فریکشنل پوزیشن سائزنگ۔
متحرک اندراج اور باہر نکلنے کے لئے مشین لرننگ ماڈل استعمال کریں۔
متعلقہ نظام کے خطرات کو کم کرنے کے لئے طویل اور مختصر دونوں کے ذریعے ہیجنگ میکانزم شامل کریں.
مزید اشارے پر غور کریں اور درستگی کو بہتر بنانے کے لئے ووٹنگ کے طریقہ کار تیار کریں۔
اس حکمت عملی میں رجحان کی سمت کا تعین کرنے کے لئے متعدد اشارے استعمال کرنے اور دھیان سے دبانے کے لئے واضح منطق ہے۔ اسٹاپ نقصان اور منافع لینے کے میکانکس خطرات کو محدود کرتے ہیں۔ پیرامیٹر کی اصلاح اور رسک کنٹرول بیک ٹیسٹ اور براہ راست نتائج کو مزید بہتر بنا سکتے ہیں۔ یہ رجحان سازی کی مصنوعات کے لئے موزوں ایک مستحکم رجحان کی پیروی کرنے والی حکمت عملی ہے ، اور روزانہ کی طرح بڑے ٹائم فریم پر بھی کام کرسکتا ہے۔ مضبوط عملی قدر کے ساتھ ، اس حکمت عملی کو بہت سے پہلوؤں میں مزید بہتر بنایا جاسکتا ہے۔
/*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)