প্রোগ্রাম্যাটিক ট্রেডারদের লাভঃ ইনক্রিমেন্টাল আপডেট অ্যালগরিদম গুন এবং বিয়োগ গণনা

লেখক:ঘাস, সৃষ্টিঃ ২০২৩-১১-০৮ 16:28:36, আপডেটঃ ২০২৩-১১-০৯ 20:46:17

img

জীবনবৃত্তান্ত

প্রোগ্রামযুক্ত লেনদেনে প্রায়শই গড় এবং ব্যবধান গণনা করার প্রয়োজন হয়, যেমন গড় রেখা এবং ওভালিয়েশন হার গণনা করা। উচ্চ-ফ্রিকোয়েন্সি এবং দীর্ঘ-চক্র গণনা করার সময়, দীর্ঘ সময়ের জন্য historicalতিহাসিক ডেটা সংরক্ষণ করা প্রয়োজন, যা অপ্রয়োজনীয় এবং সম্পদ-ক্ষয়ী। এই নিবন্ধটি একটি অনলাইন আপডেট অ্যালগরিদম সম্পর্কে আলোচনা করে যা ওজনযুক্ত গড় এবং ব্যবধান গণনা করতে ব্যবহৃত হয়, যা রিয়েল-টাইম ডেটা স্ট্রিম এবং গতিশীল সামঞ্জস্য ট্রেডিং কৌশল, বিশেষত উচ্চ-ফ্রিকোয়েন্সি কৌশলগুলি পরিচালনা করার জন্য গুরুত্বপূর্ণ। নিবন্ধটি পাইথন কোড বাস্তবায়নও সরবরাহ করে যা ব্যবসায়ীদের দ্রুত বাস্তবের লেনদেনে এই অ্যালগরিদমটি স্থাপন এবং প্রয়োগ করতে সহায়তা করে।

সরল গড় এবং বিয়োগ

যদি আমরা $\mu_n$ দিয়ে $n$ ডেটা পয়েন্টের গড় সংখ্যাটি উপস্থাপন করি, তাহলে আমরা $\mu_{n-1}$ ডেটা পয়েন্টের গড় সংখ্যা $\mu_{n-1}$ গণনা করেছি, এবং এখন আমরা একটি নতুন ডেটা পয়েন্ট $x_{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}) $S_n = S_{n-1} + (x_n - \mu_{n-1}) $\sigma_n^2 = \frac{S_n}{n}$

উপরের দুইটি সূত্র থেকে দেখা যায় যে, এই প্রক্রিয়াটি আমাদের নতুন ডেটা পয়েন্ট $x_n$-এর প্রতি প্রতি নতুন ডেটা পয়েন্ট $x_n$-এর প্রতি নতুন ডেটা পয়েন্ট $x_n$-এর প্রতি নতুন ডেটা পয়েন্ট $x_n$-এর প্রতি নতুন ডেটা পয়েন্ট $x_n$-এর প্রতি নতুন ডেটা পয়েন্ট $x_n$-এর প্রতি নতুন ডেটা পয়েন্ট $x_n$-এর প্রতি নতুন ডেটা পয়েন্ট $x_n$-এর প্রতি নতুন ডেটা পয়েন্ট $x_n$-এর প্রতি নতুন ডেটা পয়েন্ট $x_n$-এর প্রতি নতুন ডেটা পয়েন্ট $x_n$-এর প্রতি নতুন ডেটা পয়েন্ট $x_n$-এর প্রতি নতুন ডেটা পয়েন্ট $x_n$-এর প্রতি নতুন ডেটা পয়েন্ট $x_n$-এর প্রতি নতুন ডেটা পয়েন্ট $x_n$-এর প্রতি নতুন ডেটা পয়েন্ট $x_n$-এর প্রতি নতুন ডেটা পয়েন্ট $x_n$-এর প্রতি নতুন

সূচকীয়ভাবে-ওভারওয়েটেড গড়

সূচক ওভারওয়েটেড গড় নিম্নলিখিত প্রত্যাবর্তন সম্পর্ক দ্বারা সংজ্ঞায়িত করা যেতে পারেঃ

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

যেখানে, $\mu_t$ হল সময় পয়েন্ট $t$ এর সূচক ওভারওয়েটেড গড়, $x_t$ হল সময় পয়েন্ট $t$ এর পর্যবেক্ষণ মান, $\alpha$ হল ওজন ফ্যাক্টর, $\mu_{t-1} $ হল আগের সময় পয়েন্টের সূচক ওভারওয়েটেড গড়।

সূচক-পরিশ্লেষিত ভেরিয়েন্স

পার্থক্যের জন্য, আমাদের প্রতিটি সময় পয়েন্টের বর্গক্ষেত্রের বিচ্যুতির সূচক ওভারওয়েট গড় গণনা করতে হবে। এটি নিম্নলিখিত প্রত্যাবর্তন সম্পর্ক দ্বারা করা যেতে পারেঃ

$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)

সরল গড় (অর্থাত্ত্বিক গড়) এবং সূচকীয় ওজন গড় দুটি সাধারণ পরিসংখ্যানের পরিমাপ যা পৃথক বৈশিষ্ট্য এবং ব্যবহার রয়েছে। সরল গড় প্রতিটি পর্যবেক্ষণের মানকে একই ওজন দেয়, যা ডেটাসেটের কেন্দ্রস্থলকে প্রতিফলিত করে। সূচকীয় ওজন গড় একটি প্রত্যাবর্তন গণনা যা সাম্প্রতিকতম পর্যবেক্ষণের মানকে উচ্চতর ওজন দেয়। ওজন হ্রাস পায় যখন পর্যবেক্ষণের মানটি বর্তমান সময়ের থেকে আরও বেশি হয়।

  • ওজন বিতরণ: একটি সহজ গড় প্রতিটি ডেটা পয়েন্টকে একই ওজন দেয়, যখন একটি সূচকযুক্ত ওজনযুক্ত গড় নিকটতম ডেটা পয়েন্টকে উচ্চতর ওজন দেয়।
  • নতুন তথ্যের প্রতি সংবেদনশীলতা: সাধারণ গড় নতুন যোগ করা ডেটাতে যথেষ্ট সংবেদনশীল নয়, কারণ এটি সমস্ত ডেটা পয়েন্টের পুনরায় গণনা জড়িত; সূচক ওজনযুক্ত গড়গুলি সর্বশেষ ডেটাতে পরিবর্তনগুলি আরও দ্রুত প্রতিফলিত করতে পারে।
  • কম্পিউটারের জটিলতা: সরল গড়ের গণনা তুলনামূলকভাবে সহজ, কিন্তু ডেটা পয়েন্টের সংখ্যা বাড়ার সাথে সাথে গণনার খরচও বৃদ্ধি পায়। সূচকযুক্ত ওভারওয়েটেড গড়ের গণনা আরও জটিল, তবে এর প্রত্যাবর্তনশীল প্রকৃতির কারণে এটি ধারাবাহিক ডেটা প্রবাহকে আরও দক্ষতার সাথে পরিচালনা করতে পারে।

ইএমএ এবং এসএমএ প্রায় রূপান্তর পদ্ধতি

যদিও সহজ গড় এবং সূচকীয়-ভারে গণিত গড় ধারণাগতভাবে ভিন্ন, তবে আমরা সঠিক $\alpha$ মান নির্বাচন করে সূচকীয়-ভারে গণিত গড়কে একটি নির্দিষ্ট পরিমাণের পর্যবেক্ষণের মান ধারণকারী একটি সহজ গড়ের কাছাকাছি আনতে পারি। এই আনুপাতিক সম্পর্কটি কার্যকর নমুনার আকার দ্বারা বর্ণনা করা যেতে পারে, যা সূচকীয়-ভারে গণিত গড়ের মধ্যে ওজনের ফ্যাক্টর $\alpha$ এর ফাংশন।

একটি সহজ চলমান গড় (SMA) হল একটি নির্দিষ্ট সময়ের উইন্ডোতে সমস্ত মূল্যের গাণিতিক গড়। একটি সময় উইন্ডোর জন্য $N$, SMA এর কেন্দ্রস্থল (যেখানে গড় সংখ্যা অবস্থিত) হতে পারেঃ

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

ইন্ডিকেটর মুভিং এভারেজ (ইএমএ) হল একটি ওজনযুক্ত গড়, যেখানে নিকটতম ডেটা পয়েন্টগুলি বৃহত্তর ওজনের হয়। ইএমএর ওজন সময়ের সাথে সূচক স্তরের সাথে হ্রাস পায়। ইএমএর ভর কেন্দ্রটি নিম্নলিখিত স্তরের দ্বারা যোগ করা যেতে পারেঃ

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

যখন আমরা অনুমান করি যে এসএমএ এবং ইএমএ-র মান একই, আমরা পেতে পারিঃ

$\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$ সেকেন্ডে একবার আপডেট হওয়া EMA-র একটি আপডেট চক্রের মধ্যে একই হ্রাসের প্রভাব থাকে যেমনটি প্রতি সেকেন্ডে একবার আপডেট হওয়া EMA-র ক্ষেত্রে হয়, আমরা $f$ সেকেন্ডের পর মোট হ্রাসের ফ্যাক্টরটি একটি আপডেট চক্রের মধ্যে হ্রাসের ফ্যাক্টরের সমান সেট করিঃ

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

এই সমীকরণ সমাধান করার পর, আমরা নতুন ওজন ফ্যাক্টর $\alpha_2$ পেয়েছিঃ

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

এই সূত্রটি নতুন ওজনের ফ্যাক্টর $\alpha_2$ এর আনুমানিক মান প্রদান করে, যা EMA-এর স্লো ইফেক্টকে আপডেটের ফ্রিকোয়েন্সি পরিবর্তনের সময় অপরিবর্তিত রাখে। উদাহরণস্বরূপঃ আমরা $\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)

সংক্ষিপ্তসার

উচ্চ-ফ্রিকোয়েন্সি প্রোগ্রামযুক্ত লেনদেনে, রিয়েল-টাইম ডেটা দ্রুত প্রক্রিয়াকরণ গুরুত্বপূর্ণ। গণনার দক্ষতা বৃদ্ধি এবং সংস্থান খরচ কমাতে, এই নিবন্ধটি একটি অনলাইন আপডেট অ্যালগরিদম চালু করে যা ধারাবাহিকভাবে গণনা করা হয়। রিয়েল-টাইম ইনক্রিমেন্টাল আপডেট গণনা বিভিন্ন পরিসংখ্যান এবং সূচক গণনা করার জন্যও ব্যবহার করা যেতে পারে, যেমন দুটি সম্পদের দামের সম্পর্ক, রৈখিক ফিট ইত্যাদি।


আরো