یہ حکمت عملی یہ جاننے کے لئے فرضی جانچ کا استعمال کرتی ہے کہ آیا اے ٹی آر اس کی اوسط قیمت سے انحراف کرتا ہے۔ قیمت کے رجحان کی پیش گوئی کے ساتھ مل کر ، یہ اے ٹی آر پر مبنی اوسط ریورسشن حکمت عملی کو نافذ کرتا ہے۔ اے ٹی آر کا اہم انحراف مارکیٹ میں ممکنہ غیر معمولی اتار چڑھاؤ کی نشاندہی کرتا ہے۔ اگر قیمت کے رجحان کی پیش گوئی کی جاتی ہے تو ، ایک طویل پوزیشن قائم کی جاسکتی ہے۔
مفروضہ ٹیسٹنگ
تیز رفتار ATR مدت (atr_fast) اور سست ATR مدت (atr_slow) کے درمیان دو نمونوں کا t ٹیسٹ کریں۔ صفر مفروضہ H0 یہ ہے کہ دونوں نمونوں کے درمیان کوئی اہم فرق نہیں ہے۔
اگر ٹیسٹ کے اعدادوشمار حد سے زیادہ ہیں (اعتماد_فیکٹر کے ذریعہ بیان کردہ اعتماد کا وقفہ) تو ، صفر مفروضہ کو مسترد کریں ، یعنی تیز ATR کو سست ATR سے نمایاں طور پر انحراف سمجھا جاتا ہے۔
قیمتوں کے رجحان کی پیش گوئی
لوگرتھمک واپسی کا چلتا ہوا اوسط متوقع ڈرائیو کی شرح (ڈرائیو) کے طور پر شمار کیا جاتا ہے۔
اگر ڈرائیو بڑھ رہی ہے تو، موجودہ رجحان کو تیزی سے سمجھا جاتا ہے۔
اندراج اور سٹاپ نقصان سے باہر نکلنا
جب تیز اور سست ATR میں نمایاں فرق ہوتا ہے اور رجحان تیزی سے ہوتا ہے تو طویل عرصے تک جائیں۔
ATR کا استعمال کرتے ہوئے سٹاپ نقصان کو مستقل طور پر ایڈجسٹ کریں۔ جب قیمت اسٹاپ نقصان سے نیچے ہوتی ہے تو پوزیشن سے باہر نکلیں۔
اے ٹی آر انحراف کا تعین کرنے کے لئے فرضی جانچ کا استعمال زیادہ سائنسی اور موافقت پذیر ہے۔
قیمتوں کے رجحان کی پیش گوئی کے ساتھ مل کر صرف اے ٹی آر انحراف پر مبنی غلط تجارت سے بچتا ہے۔
سٹاپ نقصان کو مسلسل ایڈجسٹ کرنے سے نیچے کی طرف کے خطرے کا انتظام ہوتا ہے۔
جب قیمت گرتی ہے تو نقصان کو روکنے کے قابل نہیں.
غلط رجحان کی پیشن گوئی کے نتیجے میں سب سے اوپر خریدنا پڑ سکتا ہے۔
غلط پیرامیٹر کی ترتیبات درست اندراج کو یاد رکھ سکتی ہیں یا غیر ضروری تجارت شامل کر سکتی ہیں۔
غلطیوں سے بچنے کے لیے کثیر عنصر کی تصدیق کے لیے دیگر اشارے شامل کرنے پر غور کریں۔
زیادہ مستحکم اقدار تلاش کرنے کے لئے مختلف ATR پیرامیٹر مجموعے کی جانچ کریں.
غلط خرابی سے بچنے کے لئے اہم قیمت کی سطحوں کی خرابی پر معیارات شامل کریں.
اس حکمت عملی کی مجموعی منطق واضح ہے۔ غیر معمولی اتار چڑھاؤ کا پتہ لگانے کے لئے مفروضے کی جانچ کا استعمال معقول ہے۔ تاہم ، صرف اے ٹی آر انحراف ہی رجحان کا تعین کرنے کے لئے ناکافی ہے۔ درستگی کو بہتر بنانے کے لئے مزید تصدیق کرنے والے عوامل کی ضرورت ہے۔ اسٹاپ نقصان کے قوانین قابل اعتماد ہیں لیکن چٹان طرز کے حادثات کے خلاف غیر موثر ہیں۔ مستقبل میں بہتری داخلہ کے معیار ، پیرامیٹر کے انتخاب ، اسٹاپ نقصان کی اصلاح جیسے علاقوں میں کی جاسکتی ہے۔
/*backtest start: 2022-10-16 00:00:00 end: 2023-10-16 00:00:00 period: 1d basePeriod: 1h 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/ // © DojiEmoji //@version=5 strategy("Mean Reversion (ATR) Strategy v2 [KL] ", overlay=true, pyramiding=1) var string ENUM_LONG = "Long" var string GROUP_TEST = "Hypothesis testing" var string GROUP_TSL = "Stop loss" var string GROUP_TREND = "Trend prediction" backtest_timeframe_start = input(defval=timestamp("01 Apr 2000 13:30 +0000"), title="Backtest Start Time") within_timeframe = true // TSL: calculate the stop loss price. { ATR_TSL = ta.atr(input(14, title="Length of ATR for trailing stop loss", group=GROUP_TSL)) * input(2.0, title="ATR Multiplier for trailing stop loss", group=GROUP_TSL) TSL_source = low TSL_line_color = color.green TSL_transp = 100 var stop_loss_price = float(0) if strategy.position_size == 0 or not within_timeframe TSL_line_color := color.black stop_loss_price := TSL_source - ATR_TSL else if strategy.position_size > 0 stop_loss_price := math.max(stop_loss_price, TSL_source - ATR_TSL) TSL_transp := 0 plot(stop_loss_price, color=color.new(TSL_line_color, TSL_transp)) // } end of "TSL" block // Entry variables { // ATR diversion test via Hypothesis testing (2-tailed): // H0 : atr_fast equals atr_slow // Ha : reject H0 if z_stat is above critical value, say reliability factor of 1.96 for a 95% confidence interval len_fast = input(14,title="Length of ATR (fast) for diversion test", group=GROUP_TEST) atr_fast = ta.atr(len_fast) std_error = ta.stdev(ta.tr, len_fast) / math.pow(len_fast, 0.5) // Standard Error (SE) = std / sq root(sample size) atr_slow = ta.atr(input(28,title="Length of ATR (slow) for diversion test", group=GROUP_TEST)) test_stat = (atr_fast - atr_slow) / std_error reject_H0 = math.abs(test_stat) > input.float(1.645,title="Reliability factor", tooltip="Strategy uses 2-tailed test; Confidence Interval = Point Estimate (avg ATR) +/- Reliability Factor x Standard Error; i.e use 1.645 for a 90% confidence interval", group=GROUP_TEST) // main entry signal, subject to confirmation(s), gets passed onto the next bar var _signal_diverted_ATR = false if not _signal_diverted_ATR _signal_diverted_ATR := reject_H0 // confirmation: trend prediction; based on expected lognormal returns _prcntge_chng = math.log(close / close[1]) // Expected return (drift) = average percentage change + half variance over the lookback period len_drift = input(14, title="Length of drift", group=GROUP_TREND) _drift = ta.sma(_prcntge_chng, len_drift) - math.pow(ta.stdev(_prcntge_chng, len_drift), 2) * 0.5 _signal_uptrend = _drift > _drift[1] entry_signal_all = _signal_diverted_ATR and _signal_uptrend // main signal + confirmations // } end of "Entry variables" block // MAIN { // Update the stop limit if strategy holds a position if strategy.position_size > 0 and ta.change(stop_loss_price) strategy.exit(ENUM_LONG, comment="sl", stop=stop_loss_price) // Entry if within_timeframe and entry_signal_all strategy.entry(ENUM_LONG, strategy.long, comment=strategy.position_size > 0 ? "adding" : "initial") // Alerts _atr = ta.atr(14) alert_helper(msg) => prefix = "[" + syminfo.root + "] " suffix = "(P=" + str.tostring(close, "#.##") + "; atr=" + str.tostring(_atr, "#.##") + ")" alert(str.tostring(prefix) + str.tostring(msg) + str.tostring(suffix), alert.freq_once_per_bar) if strategy.position_size > 0 and ta.change(strategy.position_size) if strategy.position_size > strategy.position_size[1] alert_helper("BUY") else if strategy.position_size < strategy.position_size[1] alert_helper("SELL") // Clean up - set the variables back to default values once no longer in use if strategy.position_size == 0 stop_loss_price := float(0) if ta.change(strategy.position_size) _signal_diverted_ATR := false // } end of MAIN block