پروگرام ساز تاجروں کے لئے فائدہ: اضافہ کی تازہ کاری کے لئے الگورتھم کا حساب کرنے کے لئے اوسط اور فرق

مصنف:گھاس, تخلیق: 2023-11-08 16:28:36, تازہ کاری: 2023-11-09 20:46:17

img

پروفائل

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

سادہ اوسط اور مربع

اگر ہم $\mu_n$ کو $\n$ ڈیٹا پوائنٹس کی اوسط کے طور پر استعمال کرتے ہیں، تو فرض کریں کہ ہم $\mu_{n-1}$ ڈیٹا پوائنٹس کی اوسط $\mu_{n-1}$ کو حاصل کر چکے ہیں، اور اب ہمیں ایک نیا ڈیٹا پوائنٹ $x_{n}$ ملتا ہے۔ ہم اس نئے ڈیٹا پوائنٹ $\mu_{n}$ پر مشتمل نئے اوسط $\mu_{n}$ کا حساب لگانا چاہتے ہیں۔ ذیل میں تفصیلی اندازہ لگانا ہے۔

$\mu_n = \frac{1}{n} \sum_{i=1}^{n} x_i$ $\mu_n = \frac{1}{n} \left( x_n + \sum_{i=1}^{n-1} x_i \right) $ $\mu_{n-1} = \frac{1}{n-1} \sum_{i=1}^{n-1} x_i$ $ ((n-1) \mu_{n-1} = \sum_{i=1}^{n-1} x_i$ $\mu_n = \frac{1}{n} \left( x_n + (n-1) \mu_{n-1} \right) $ $\mu_n = \mu_{n-1} + \frac{1}{n} (x_n - \mu_{n-1}) $

فرق کی تازہ کاری کے عمل کو مندرجہ ذیل مراحل میں تقسیم کیا جاسکتا ہے:

$S_n = \sum_{i=1}^{n} (x_i - \mu_n) ^2$ $S_n = \sum_{i=1}^{n} x_i^2 - n\mu_n^2$ $S_n - S_{n-1} = x_n^2 - n\mu_n^2 + (n - 1)\mu_{n-1}^2$ $S_n - S_{n-1} = (x_n - \mu_{n-1}) ((x_n - \mu_n) $ $S_n = S_{n-1} + (x_n - \mu_{n-1}) ((x_n - \mu_n) $ $\sigma_n^2 = \frac{S_n}{n}$

مندرجہ بالا دو فارمولوں سے معلوم ہوتا ہے کہ یہ عمل ہمیں ہر نئے ڈیٹا پوائنٹ $x_n$ پر آنے پر صرف ایک ہی ڈیٹا کے اوسط اور فرق کو برقرار رکھنے کی اجازت دیتا ہے تاکہ نئے اوسط اور فرق کو اپ ڈیٹ کیا جا سکے، تاریخی اعداد و شمار کو محفوظ کرنے کی ضرورت نہیں ہے، اور حساب کتاب بہت تیز ہے۔ لیکن مسئلہ یہ ہے کہ یہ پورے نمونے کے اوسط اور فرق کا حساب لگایا جاتا ہے، اور ہماری عملی حکمت عملی میں، جس پر غور کرنے کی ضرورت ہوتی ہے وہ ایک مقررہ مقررہ دورانیہ ہے۔ مندرجہ بالا اوسط اپ ڈیٹ کا مشاہدہ کریں، جیسا کہ آپ دیکھ سکتے ہیں، نئے اوسط کی تازہ کاری نئے اعداد و شمار کے ساتھ ماضی کے اوسط کے انحراف کے ایک تناسب سے ہوتی ہے، اگر اس تناسب کو مقرر کیا جائے تو، اگلا اشاریہ بڑھا دیا جائے گا جس کے بارے میں ہم بات کر رہے ہیں۔ اوسط.

اشاریہ جات کے ساتھ وزن شدہ اوسط

اشاریہ جات کے وزن والے اوسط کو مندرجہ ذیل ریورس تعلقات کے ذریعہ بیان کیا جاسکتا ہے:

$\mu_t = \alpha x_t + (1 - \alpha) \mu_{t-1}$

جہاں $\mu_t$ وقت کے نقطہ $t$ پر اشاریہ کے وزن میں اوسط ہے، $x_t$ وقت کے نقطہ $t$ پر مشاہدہ کی قیمت ہے، $\alpha$ وزن کا عنصر ہے، $\mu_{t-1}$ پچھلے وقت کے نقطہ پر اشاریہ کے وزن میں اوسط ہے۔

اشاریہ جمع کرنے والے کے اختیارات کا فرق (Exponentially-weighted variance)

فرق کے لئے ، ہمیں ہر وقت کے نقطہ کے مربع انحراف کے اشاریہ کے وزن میں اوسط کا حساب لگانے کی ضرورت ہے۔ یہ مندرجہ ذیل تکرار تعلقات کے ذریعہ کیا جاسکتا ہے:

$S_n = \alpha S_{n-1} + (1 - \alpha) ((x_n - \mu_n) ((x_n - \mu_{n-1}) $

جہاں $\sigma_t^2$ وقت کے نقطہ $t$ پر اشاریہ کے علاوہ اعشاریہ فرق ہے، $\sigma_{t-1}^2$ پچھلے وقت کے نقطہ پر اشاریہ کے علاوہ اعشاریہ فرق ہے۔

مشاہداتی اشاریہ جات کے وزن والے اوسط اور فریکوئنسی، ان کی اضافہ کی تازہ کاری کی شکل میں بدیہی طور پر، ماضی کی قیمتوں کا ایک حصہ برقرار رکھنے کے ساتھ ساتھ نئی تبدیلیوں کے ساتھ، ایک مخصوص نتیجہ اخذ کرنے کا عمل اس مقالے کا حوالہ دے سکتا ہے:https://fanf2.user.srcf.net/hermes/doc/antiforgery/stats.pdf

سادہ حرکت پذیر اوسط (SMA) اور اشاریہ حرکت پذیر اوسط (EMA)

سادہ اوسط (جسے حساباتی اوسط بھی کہا جاتا ہے) اور اشاریہ وزن والے اوسط دو عام شماریاتی میٹرکس ہیں ، جن میں سے ہر ایک کی خصوصیات اور استعمال مختلف ہیں۔ سادہ اوسط ہر مشاہداتی قدر کو ایک ہی وزن دیتا ہے ، جو ڈیٹا سیٹ کے وسط کی پوزیشن کو ظاہر کرتا ہے۔ اشاریہ وزن والے اوسط ایک رجعت پسند حساب کتاب ہے جو حالیہ مشاہداتی قدر کو زیادہ وزن دیتا ہے۔ وزن اشاریہ کی سطح کو کم کرتا ہے کیونکہ مشاہداتی قدر موجودہ وقت سے زیادہ ہوتی ہے۔

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

ای ایم اے اور ایس ایم اے کے متبادل طریقے

اگرچہ سادہ اوسط اور اشاریاتی وزن والے اوسط تصوراتی طور پر مختلف ہیں ، لیکن ہم مناسب $ \ الفا $ قدر کا انتخاب کرکے اشاریاتی وزن والے اوسط کو کسی خاص مقدار کی مشاہدات پر مشتمل سادہ اوسط کے قریب بنا سکتے ہیں۔ اس قریبی تعلقات کو مؤثر نمونہ سائز کے ذریعہ بیان کیا جاسکتا ہے ، جو اشاریاتی وزن والے اوسط میں وزن والے عنصر $ \ الفا $ کا ایک فنکشن ہے۔

سادہ حرکت پذیر اوسط (SMA) ایک مقررہ وقت کی کھڑکی میں تمام قیمتوں کا حساباتی اوسط ہے۔ ایک وقت کی کھڑکی $ N $ کے لئے ، SMA کا مرکز (یعنی اوسط نمبر کی جگہ) یہ سمجھا جاسکتا ہے:

$\text{SMA} = \frac{1 + N}{2}$

ایک اشاریہ حرکت پذیر اوسط (EMA) ایک وزن والا اوسط ہے جس میں حالیہ ڈیٹا پوائنٹس زیادہ وزن رکھتے ہیں۔ ای ایم اے کا وزن وقت کے ساتھ اشاریہ کی سطح پر کم ہوتا ہے۔ ای ایم اے کا ماس سینٹر مندرجہ ذیل سطحوں کے ذریعہ حاصل کیا جاسکتا ہے:

$\text{EMA وزن} = \alpha \times \left[1 + 2(1 - \alpha) + 3(1 - \alpha) ^2 + \cdots \right] = \frac{1}{\alpha}$

جب ہم یہ فرض کرتے ہیں کہ SMA اور EMA کے درمیان ایک ہی مرکز ہے، تو ہم حاصل کرتے ہیں:

$\frac{1 + N}{2} = \frac{1}{\alpha}$

اس مساوات کو حل کرنے کے لئے، ہم $\alpha$ اور $N$ کے درمیان تعلقات حاصل کر سکتے ہیں:

$\alpha = \frac{2}{N + 1}$

اس کا مطلب یہ ہے کہ ایک دیئے گئے $N$ دن کے ایس ایم اے کے لئے ، اس کے مطابق $\alpha$ کی قیمت کو ایمیزون کے برابر ایما کے حساب کے لئے استعمال کیا جاسکتا ہے ، جس سے دونوں کے پاس ایک ہی وزن ہوتا ہے ، اور نتائج بہت قریب ہوتے ہیں۔

EMA مختلف اپ ڈیٹ کی تعدد کے لئے تبادلہ

فرض کریں کہ ہمارے پاس ایک EMA ہے جو ہر سیکنڈ میں ایک بار اپ ڈیٹ ہوتا ہے اور اس کا وزن فیکٹر $\alpha_1$ ہے۔ اس کا مطلب یہ ہے کہ ہر سیکنڈ میں ، نئے ڈیٹا پوائنٹس EMA میں $\alpha_1$ کے وزن میں شامل ہوتے ہیں ، جبکہ پرانے ڈیٹا پوائنٹس کا اثر 1 - \alpha_1$ سے ضرب ہوتا ہے۔

اگر ہم اپ ڈیٹ کی تعدد تبدیل کرتے ہیں، جیسے ہر $f$ سیکنڈ میں ایک بار اپ ڈیٹ کرتے ہیں، تو ہم ایک نیا وزن کا عنصر $\alpha_2$ تلاش کرنا چاہتے ہیں تاکہ $f$ سیکنڈ میں ڈیٹا پوائنٹس کا مجموعی اثر ہر سیکنڈ میں اپ ڈیٹ ہونے کے برابر ہو۔

$f$ سیکنڈ کے دوران ، اگر اپ ڈیٹ نہیں کیا جاتا ہے تو ، پرانے ڈیٹا پوائنٹس کے اثرات $f$ بار بار ، ہر بار 1 - \alpha_1$ سے ضرب دیتے ہیں۔ لہذا ، $f$ سیکنڈ کے بعد کل کمی کا عنصر $ ((1 - \alpha_1) ^ f$ ہے۔

تاکہ $f$ سیکنڈ میں ایک بار اپ ڈیٹ ہونے والا ای ایم اے ایک اپ ڈیٹ سائیکل میں ایک بار فی سیکنڈ اپ ڈیٹ ہونے والے ای ایم اے کے برابر ہی کمی کا اثر ڈالے، ہم $f$ سیکنڈ کے بعد مجموعی کمی کا عنصر اس کے برابر بناتے ہیں جو ایک اپ ڈیٹ سائیکل میں ہوتی ہے:

$(1 - \alpha_1) ^f = 1 - \alpha_2$

اس مساوات کو حل کرنے کے بعد، ہم نئے وزن کے عنصر $\alpha_2$ حاصل کرتے ہیں:

$\alpha_2 = 1 - (1 - \alpha_1) ^f$

یہ فارمولا نئے وزن کے فیکٹر $\alpha_2$ کی تخمینہ قیمت دیتا ہے جو ای ایم اے کو ہموار کرنے کے اثر کو برقرار رکھتا ہے۔ مثال کے طور پر: ہم اوسط قیمت $\alpha_1$ کو 0.001 کے طور پر شمار کرتے ہیں ، اور ہر 10s میں ایک بار تازہ ترین قیمت اپ ڈیٹ کی جاتی ہے ، اگر ہم 1s میں تبدیل ہوجاتے ہیں تو ، $\alpha_2$ کے برابر تقریبا 0.01 ہوتا ہے۔

پائتن کوڈ کی نفاذ

class ExponentialWeightedStats:
    def __init__(self, alpha):
        self.alpha = alpha
        self.mu = 0
        self.S = 0
        self.initialized = False

    def update(self, x):
        if not self.initialized:
            self.mu = x
            self.S = 0
            self.initialized = True
        else:
            temp = x - self.mu
            new_mu = self.mu + self.alpha * temp
            self.S = self.alpha * self.S + (1 - self.alpha) * temp * (x - self.mu)
            self.mu = new_mu

    @property
    def mean(self):
        return self.mu

    @property
    def variance(self):
        return self.S

# 使用示例
alpha = 0.05  # 权重因子
stats = ExponentialWeightedStats(alpha)
data_stream = [] # 数据流
for data_point in data_stream:
    stats.update(data_point)

خلاصہ

ہائی فریکوئینسی پروگرامنگ ٹرانزیکشن میں ، ریئل ٹائم ڈیٹا کی تیز رفتار پروسیسنگ ضروری ہے۔ حساب کتاب کی کارکردگی کو بہتر بنانے اور وسائل کی کھپت کو کم کرنے کے ل this ، اس مضمون میں ایک آن لائن اپ ڈیٹ الگورتھم متعارف کرایا گیا ہے جو اعداد و شمار کے سلسلے میں حساب کتاب کے لئے استعمال کیا جاتا ہے۔ ریئل ٹائم انٹریمینٹل اپ ڈیٹ کا حساب کتاب بھی متعدد اعدادوشمار اور اشارے جیسے دو اثاثوں کی قیمتوں کے تعلقات ، لکیری فٹنس وغیرہ کے حساب کتاب کے لئے استعمال کیا جاسکتا ہے ، جس میں بہت زیادہ صلاحیت ہے۔ انٹریمینٹل اپ ڈیٹ کو اعداد و شمار کو سگنلنگ سسٹم کے طور پر دیکھنا ، مقررہ دورانیے کے حساب کتاب کے مقابلے میں ، ایک ارتقاء کا طریقہ ہے۔ اگر آپ کی حکمت عملی میں تاریخی اعداد و شمار کے حساب کتاب کو بچانے کا ایک حصہ بھی ہے تو ، اس طرح کے ذہن سازی کے مطابق ، صرف نظام کی حالت کا تخمینہ ریکارڈ کریں ، جب نیا ڈیٹا آتا ہے تو ، نظام کی حالت کو دوبارہ اپ ڈیٹ کریں ، اور اسی طرح اس طرح کا دورانیہ چل


مزید