اوسط ریورس اے ٹی آر ٹرینڈ حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2023-09-21 11:42:06
ٹیگز:

جائزہ

یہ حکمت عملی قیمتوں کی اتار چڑھاؤ کی اونچائیوں اور نچلی سطحوں کا استعمال پوزیشنوں کے داخلے اور باہر نکلنے کے وقت کا تعین کرنے کے لئے کرتی ہے۔ اس کا مقصد جب قیمتوں کی اتار چڑھاؤ زیادہ ہوتی ہے تو طویل پوزیشنیں قائم کرنا اور جب قیمت کے رجحانات سازگار ہوتے ہیں تو منافع حاصل کرنا ہوتا ہے۔

حکمت عملی منطق

  1. قیمتوں میں اتار چڑھاؤ کی پیمائش کرنے کے لئے اے ٹی آر اشارے کا استعمال کریں۔ پچھلے 20 ادوار میں اے ٹی آر کا حساب لگائیں اور اس کا اوسط اور معیاری انحراف حاصل کریں۔ اگر موجودہ اے ٹی آر کی قیمت اوسط کے علاوہ ایک معیاری انحراف سے زیادہ ہے تو ، قیمت کی اتار چڑھاؤ کو زیادہ سمجھا جاتا ہے۔

  2. قیمتوں کے رجحان کا تعین کرنے کے لئے پہلے آرڈر کے لوگرتھمک قیمت کی تبدیلی کی شرح کا استعمال کریں۔ پچھلے 20 ادوار میں لوگرتھمک قریبی قیمت کی تبدیلی کی شرح کا حساب لگائیں ، اس کا اوسط حاصل کریں۔ اگر موجودہ تبدیلی کی شرح 3 لگاتار دنوں کے لئے اوسط سے زیادہ ہے اور مثبت ہے تو ، قیمت کو اپ ٹرینڈ میں سمجھا جاتا ہے۔

  3. جب قیمت میں اتار چڑھاؤ زیادہ ہوتا ہے اور قیمت میں اضافہ ہوتا ہے تو ، طویل ہوجائیں۔ جب قیمت پیچھے ہٹ جاتی ہے اور اسٹاپ نقصان کو متحرک کیا جاتا ہے تو ، بند پوزیشن۔ اسٹاپ نقصان کی قیمت کو متحرک طور پر ایڈجسٹ کیا جاتا ہے تاکہ کم سے کم قیمت مائنس 2 گنا اے ٹی آر سے نیچے رہ سکے۔

فوائد کا تجزیہ

  1. طویل / مختصر وقت کا تعین کرنے کے لئے قیمت کی اتار چڑھاؤ اور رجحان کا استعمال کریں، مختلف مارکیٹوں میں زیادہ تجارت سے بچیں.

  2. متحرک سٹاپ نقصان بہت وسیع سٹاپ سے زیادہ نقصان سے بچتا ہے.

  3. بیک ٹیسٹ سے پتہ چلتا ہے کہ 2015-2021 کے دوران سالانہ 159 فیصد کی واپسی ہوئی ہے ، جو خرید اور ہولڈ کے 120 فیصد سے کہیں زیادہ ہے۔

خطرے کا تجزیہ

  1. بہت زیادہ جارحانہ اے ٹی آر پیرامیٹرز کے نتیجے میں بہت کم اندراج کے مواقع پیدا ہوسکتے ہیں۔ تعدد میں اضافہ کرنے کے لئے پیرامیٹرز کو اعتدال پسند طور پر آرام کر سکتے ہیں۔

  2. رجحان اشارے سے حقیقی رجحان کے خلاف جھوٹے سگنل پیدا ہوسکتے ہیں۔ ممکنہ نقصانات سے بچنے کے لئے مزید تصدیق کرنے والے عوامل کو شامل کرنا چاہئے۔

  3. بیک ٹیسٹ کی مدت صرف 6 سال ہے۔ زیادہ سے زیادہ فٹنگ سے بچنے کے لئے بڑے نمونے اور استحکام کی جانچ پڑتال کی ضرورت ہے۔

  4. فلیش حادثات جیسے انتہائی حالات میں کارکردگی کا اندازہ کرنے میں ناکام۔ دستی مداخلت یا روک پروگرامنگ کی ضرورت ہے۔

اصلاح کی ہدایات

  1. رجحان کی درستگی کو بہتر بنانے کے لئے مزید رجحان کی تصدیق کرنے والے اشارے جیسے MACD، KDJ شامل کریں.

  2. مختلف مصنوعات اور مارکیٹ کے نظام کی بنیاد پر اے ٹی آر پیرامیٹرز کو بہتر بنانے کے لئے اتار چڑھاؤ گیج کو بہتر بنائیں۔

  3. بریکآؤٹ منطق اور رجحان کو تیز کرنے والے عوامل کو شامل کریں تاکہ بریکآؤٹس کا اندازہ لگایا جا سکے۔

  4. کارکردگی پر فیصد، اتار چڑھاؤ سٹاپ کی طرح مختلف سٹاپ نقصان کی اقسام کی جانچ کریں.

  5. تجارت کی تعدد، منحنی استحکام، زیادہ سے زیادہ کھپت جیسے معیار کا اندازہ کریں تاکہ استحکام کو یقینی بنایا جاسکے۔

خلاصہ

اس حکمت عملی میں اتار چڑھاؤ اور رجحان کی پیمائش کرنے کے فوائد کو یکجا کیا گیا ہے تاکہ تقویت یافتہ اتار چڑھاؤ میں داخل ہونے کے لئے ممکنہ الٹ پوائنٹس کا تعین کیا جاسکے ، اور خطرے کو کنٹرول کرنے کے لئے متحرک اسٹاپ کا استعمال کیا جاسکے۔ بیک ٹیسٹ میں عمدہ الفا پیدا ہوتا ہے۔ لیکن 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)
// }


مزید