یہ حکمت عملی قیمتوں کی اتار چڑھاؤ کی اونچائیوں اور نچلی سطحوں کا استعمال پوزیشنوں کے داخلے اور باہر نکلنے کے وقت کا تعین کرنے کے لئے کرتی ہے۔ اس کا مقصد جب قیمتوں کی اتار چڑھاؤ زیادہ ہوتی ہے تو طویل پوزیشنیں قائم کرنا اور جب قیمت کے رجحانات سازگار ہوتے ہیں تو منافع حاصل کرنا ہوتا ہے۔
قیمتوں میں اتار چڑھاؤ کی پیمائش کرنے کے لئے اے ٹی آر اشارے کا استعمال کریں۔ پچھلے 20 ادوار میں اے ٹی آر کا حساب لگائیں اور اس کا اوسط اور معیاری انحراف حاصل کریں۔ اگر موجودہ اے ٹی آر کی قیمت اوسط کے علاوہ ایک معیاری انحراف سے زیادہ ہے تو ، قیمت کی اتار چڑھاؤ کو زیادہ سمجھا جاتا ہے۔
قیمتوں کے رجحان کا تعین کرنے کے لئے پہلے آرڈر کے لوگرتھمک قیمت کی تبدیلی کی شرح کا استعمال کریں۔ پچھلے 20 ادوار میں لوگرتھمک قریبی قیمت کی تبدیلی کی شرح کا حساب لگائیں ، اس کا اوسط حاصل کریں۔ اگر موجودہ تبدیلی کی شرح 3 لگاتار دنوں کے لئے اوسط سے زیادہ ہے اور مثبت ہے تو ، قیمت کو اپ ٹرینڈ میں سمجھا جاتا ہے۔
جب قیمت میں اتار چڑھاؤ زیادہ ہوتا ہے اور قیمت میں اضافہ ہوتا ہے تو ، طویل ہوجائیں۔ جب قیمت پیچھے ہٹ جاتی ہے اور اسٹاپ نقصان کو متحرک کیا جاتا ہے تو ، بند پوزیشن۔ اسٹاپ نقصان کی قیمت کو متحرک طور پر ایڈجسٹ کیا جاتا ہے تاکہ کم سے کم قیمت مائنس 2 گنا اے ٹی آر سے نیچے رہ سکے۔
طویل / مختصر وقت کا تعین کرنے کے لئے قیمت کی اتار چڑھاؤ اور رجحان کا استعمال کریں، مختلف مارکیٹوں میں زیادہ تجارت سے بچیں.
متحرک سٹاپ نقصان بہت وسیع سٹاپ سے زیادہ نقصان سے بچتا ہے.
بیک ٹیسٹ سے پتہ چلتا ہے کہ 2015-2021 کے دوران سالانہ 159 فیصد کی واپسی ہوئی ہے ، جو خرید اور ہولڈ کے 120 فیصد سے کہیں زیادہ ہے۔
بہت زیادہ جارحانہ اے ٹی آر پیرامیٹرز کے نتیجے میں بہت کم اندراج کے مواقع پیدا ہوسکتے ہیں۔ تعدد میں اضافہ کرنے کے لئے پیرامیٹرز کو اعتدال پسند طور پر آرام کر سکتے ہیں۔
رجحان اشارے سے حقیقی رجحان کے خلاف جھوٹے سگنل پیدا ہوسکتے ہیں۔ ممکنہ نقصانات سے بچنے کے لئے مزید تصدیق کرنے والے عوامل کو شامل کرنا چاہئے۔
بیک ٹیسٹ کی مدت صرف 6 سال ہے۔ زیادہ سے زیادہ فٹنگ سے بچنے کے لئے بڑے نمونے اور استحکام کی جانچ پڑتال کی ضرورت ہے۔
فلیش حادثات جیسے انتہائی حالات میں کارکردگی کا اندازہ کرنے میں ناکام۔ دستی مداخلت یا روک پروگرامنگ کی ضرورت ہے۔
رجحان کی درستگی کو بہتر بنانے کے لئے مزید رجحان کی تصدیق کرنے والے اشارے جیسے MACD، KDJ شامل کریں.
مختلف مصنوعات اور مارکیٹ کے نظام کی بنیاد پر اے ٹی آر پیرامیٹرز کو بہتر بنانے کے لئے اتار چڑھاؤ گیج کو بہتر بنائیں۔
بریکآؤٹ منطق اور رجحان کو تیز کرنے والے عوامل کو شامل کریں تاکہ بریکآؤٹس کا اندازہ لگایا جا سکے۔
کارکردگی پر فیصد، اتار چڑھاؤ سٹاپ کی طرح مختلف سٹاپ نقصان کی اقسام کی جانچ کریں.
تجارت کی تعدد، منحنی استحکام، زیادہ سے زیادہ کھپت جیسے معیار کا اندازہ کریں تاکہ استحکام کو یقینی بنایا جاسکے۔
اس حکمت عملی میں اتار چڑھاؤ اور رجحان کی پیمائش کرنے کے فوائد کو یکجا کیا گیا ہے تاکہ تقویت یافتہ اتار چڑھاؤ میں داخل ہونے کے لئے ممکنہ الٹ پوائنٹس کا تعین کیا جاسکے ، اور خطرے کو کنٹرول کرنے کے لئے متحرک اسٹاپ کا استعمال کیا جاسکے۔ بیک ٹیسٹ میں عمدہ الفا پیدا ہوتا ہے۔ لیکن 6 سال کا نمونہ محدود ہے ، کلیدی پیرامیٹرز کو مارکیٹ کے مخصوص ٹیوننگ کی ضرورت ہے ، اور جھوٹے سگنلز کو کم کرنے کے لئے مزید تصدیق کرنے والے عوامل کی ضرورت ہے۔ براہ راست تجارت پر لاگو ہونے سے پہلے جامع استحکام کی جانچ پڑتال کی بھی ضرورت ہے۔ مجموعی طور پر یہ اتار چڑھاؤ پر اوسط الٹ کا خیال فراہم کرتا ہے لیکن پھر بھی ایک مضبوط مقدار کی حکمت عملی بننے کے لئے بہتر بنانے اور سخت تصدیق کی ضرورت ہے۔
/*backtest start: 2022-09-14 00:00:00 end: 2023-09-20 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 (kevinhhl) //@version=4 strategy("Mean Reversion (ATR) Strategy [KL]",overlay=true,pyramiding=1) ENUM_LONG = "Long" // Timeframe { backtest_timeframe_start = input(defval = timestamp("01 Apr 2000 13:30 +0000"), title = "Backtest Start Time", type = input.time) USE_ENDTIME = input(false,title="Define backtest end-time (If false, will test up to most recent candle)") backtest_timeframe_end = input(defval = timestamp("01 May 2021 19:30 +0000"), title = "Backtest End Time (if checked above)", type = input.time) within_timeframe = true // } // Trailing stop loss { ATR_X2_TSL = atr(input(14,title="Length of ATR for trailing stop loss")) * input(2.0,title="ATR Multiplier for trailing stop loss",type=input.float) TSL_source = low var stop_loss_price = float(0) TSL_line_color = color.green, TSL_transp = 100 if strategy.position_size == 0 or not within_timeframe TSL_line_color := color.black stop_loss_price := TSL_source - ATR_X2_TSL else if strategy.position_size > 0 stop_loss_price := max(stop_loss_price, TSL_source - ATR_X2_TSL) TSL_transp := 0 plot(stop_loss_price, color=color.new(TSL_line_color, TSL_transp)) // } // Variables for confirmations of entry { _len_volat = input(20,title="Length of ATR to determine volatility") _ATR_volat = atr(_len_volat) _avg_atr = sma(_ATR_volat, _len_volat) _std_volat = stdev(_ATR_volat,_len_volat) signal_diverted_ATR = _ATR_volat > (_avg_atr + _std_volat) or _ATR_volat < (_avg_atr - _std_volat) _len_drift = input(20,title="Length of Drift")//default set to const: _len_vol's default value _prcntge_chng = log(close/close[1]) _drift = sma(_prcntge_chng, _len_drift) - pow(stdev(_prcntge_chng, _len_drift),2)*0.5 _chg_drift = _drift/_drift[1]-1 signal_uptrend = (_drift > _drift[1] and _drift > _drift[2]) or _drift > 0 entry_signal_all = signal_diverted_ATR and signal_uptrend // } alert_per_bar(msg)=> prefix = "[" + syminfo.root + "] " suffix = "(P=" + tostring(close) + "; atr=" + tostring(_ATR_volat) + ")" alert(tostring(prefix) + tostring(msg) + tostring(suffix), alert.freq_once_per_bar) // MAIN { if within_timeframe if strategy.position_size > 0 and strategy.position_size[1] > 0 and (stop_loss_price/stop_loss_price[1]-1) > 0.005 alert_per_bar("TSL raised to " + tostring(stop_loss_price)) // EXIT: if strategy.position_size > 0 and TSL_source <= stop_loss_price exit_msg = close <= strategy.position_avg_price ? "stop loss" : "take profit" strategy.close(ENUM_LONG, comment=exit_msg) // ENTRY: else if entry_signal_all and (strategy.position_size == 0 or (strategy.position_size > 0 and close > stop_loss_price)) entry_msg = strategy.position_size > 0 ? "adding" : "initial" strategy.entry(ENUM_LONG, strategy.long, comment=entry_msg) if strategy.position_size == 0 stop_loss_price := float(0) // }