اے ٹی آر پر مبنی مطلب کی تبدیلی کی حکمت عملی


تخلیق کی تاریخ: 2023-10-17 16:27:44 آخر میں ترمیم کریں: 2023-10-17 16:27:44
کاپی: 2 کلکس کی تعداد: 890
1
پر توجہ دیں
1617
پیروکار

اے ٹی آر پر مبنی مطلب کی تبدیلی کی حکمت عملی

جائزہ

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

حکمت عملی کا اصول

  1. قیاس آرائی کی جانچ

    • فاسٹ اے ٹی آر سائیکل ((پریمیٹرatr_fast) اور سست اے ٹی آر سائیکل ((پریمیٹرatr_slow) میں دو نمونوں t ٹیسٹ کریں۔ فرض کریں کہ ٹیسٹ کا صفر فرض H0 دو نمونوں کی اوسط ہے جس میں کوئی نمایاں فرق نہیں ہے۔

    • اگر جانچ کی گئی اعدادوشمار حد سے زیادہ ہے تو ، ابتدائی مفروضے کو مسترد کردیا جاتا ہے ، یعنی یہ خیال کیا جاتا ہے کہ تیز رفتار اے ٹی آر نے سست رفتار اے ٹی آر سے نمایاں طور پر انحراف کیا ہے۔

  2. قیمتوں کے رجحان کی پیش گوئی

    • متوقع ڈرفٹ ((پیرامیٹرڈ ڈرفٹ) کے طور پر متغیر آمدنی کی متغیر اوسط کا حساب لگائیں۔

    • اگر بہاؤ کی شرح میں اضافہ ہوتا ہے تو ، اس کا اندازہ لگانے کے لئے کہ یہ ایک bullish رجحان ہے۔

  3. داخلہ اور نقصان سے باہر نکلنا

    • جب اے ٹی آر میں نمایاں فرق ہوتا ہے اور رجحانات مثبت ہوتے ہیں تو ، زیادہ سے زیادہ اندراج کریں۔

    • اس کے بعد اے ٹی آر کے حساب سے اسٹاپ لائن کو مستقل طور پر ایڈجسٹ کریں۔ جب قیمت اسٹاپ لائن سے نیچے آجاتی ہے تو اسٹاپ سے باہر نکل جاتا ہے۔

طاقت کا تجزیہ

  • اے ٹی آر غیر معمولی طور پر زیادہ سائنسی اور پیرامیٹرز کے مطابق ہونے کا اندازہ لگانے کے لئے فرضی ٹیسٹ کا استعمال کریں۔

  • قیمتوں کے رجحانات کی پیش گوئی کے ساتھ مل کر ، صرف اے ٹی آر کے انحراف کی وجہ سے غلط تجارت سے بچنے کے لئے۔

  • نقصان کے خطرے کو کم کرنے کے لئے اسٹاپ نقصان کو مستقل طور پر ایڈجسٹ کریں۔

خطرے کا تجزیہ

  • قیمتوں میں تیزی سے کمی کی صورت میں، نقصان کو روکنے کے لئے کچھ بھی نہیں ہے.

  • ٹرینڈ کی تشخیص میں خرابی ، ممکنہ طور پر سب سے زیادہ خریدنے کے لئے۔

  • پیرامیٹرز کو غلط طریقے سے سیٹ کیا گیا ہے ، جس سے صحیح ٹرانزیکشن کا وقت ضائع ہوجائے گا یا غیر ضروری ٹرانزیکشنز کو شامل کیا جائے گا۔

اصلاح کی تجاویز

  • دوسرے اشارے کو شامل کرنے کے لئے ملٹی فیکٹر تصدیق پر غور کیا جاسکتا ہے ، تاکہ ایک ہی اشارے سے غلط تجارت سے بچ سکے۔

  • 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