
Dalam perdagangan program, selalunya perlu untuk mengira purata dan varians, seperti semasa mengira penunjuk seperti purata bergerak dan turun naik. Apabila kita memerlukan pengiraan frekuensi tinggi dan jangka masa panjang, kita perlu mengekalkan data sejarah jangka panjang, yang tidak perlu dan memakan masa dan memakan sumber. Kertas kerja ini memperkenalkan algoritma pengemaskinian dalam talian untuk mengira purata wajaran dan varians, yang amat penting untuk memproses aliran data masa nyata dan melaraskan strategi dagangan secara dinamik, terutamanya strategi frekuensi tinggi. Artikel ini juga menyediakan pelaksanaan kod Python yang sepadan untuk membantu pedagang menggunakan dan menggunakan algoritma ini dengan cepat dalam transaksi sebenar.
Jika kita menggunakan \(\mu_n\) untuk mewakili purata titik data \(n\)th, dengan mengandaikan bahawa kami telah mengira purata \({n-1}\) titik data \(\mu_{n-1}\), kini kami Titik data baharu \(x_{n}\) diterima. Kami ingin mengira min baharu \(\mu_{n}\) yang merangkumi titik data baharu ini. Berikut ialah terbitan terperinci.
\(\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})\)
Proses kemas kini varians boleh diuraikan kepada langkah-langkah berikut:
\(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}\)
Seperti yang dapat dilihat daripada dua formula di atas, proses ini membolehkan kami mengemas kini min dan varians baharu apabila menerima setiap titik data baharu \(x_n\) dengan hanya mengekalkan min dan varians data sebelumnya, tanpa menyimpan data sejarah , dan pengiraan lebih cepat. Tetapi masalahnya ialah apa yang dikira dengan cara ini ialah min dan varians keseluruhan sampel, manakala dalam strategi sebenar, kita perlu mempertimbangkan tempoh tetap tertentu. Dengan memerhatikan kemas kini min di atas, kita dapat melihat bahawa jumlah kemas kini min baharu ialah sisihan data baharu daripada min lalu didarab dengan nisbah Jika nisbah ini ditetapkan, kita akan mendapat purata wajaran eksponen yang akan kita bincangkan seterusnya.
Purata wajaran eksponen boleh ditakrifkan oleh hubungan rekursif berikut:
\(\mu_t = \alpha x_t + (1 - \alpha) \mu_{t-1}\)
dengan \(\mu_t\) ialah min wajaran eksponen pada titik masa \(t\), \(x_t\) ialah nilai yang diperhatikan pada titik masa \(t\), \(\alpha\) ialah faktor berat dan \(\mu_{t-1}\) ialah Ia ialah purata wajaran eksponen bagi titik masa sebelumnya.
Untuk varians, kita perlu mengira purata wajaran eksponen bagi sisihan kuasa dua pada setiap titik masa. Ini boleh dicapai melalui hubungan berulang berikut:
\(S_n = \alpha S_{n-1} + (1 - \alpha)(x_n - \mu_n)(x_n - \mu_{n-1})\)
dengan \(\sigma_t^2\) ialah varians berwajaran eksponen pada titik masa \(t\), dan \(\sigma_{t-1}^2\) ialah varians berwajaran eksponen pada titik masa sebelumnya.
Perhatikan min dan varians berwajaran secara eksponen. Borang kemas kini inkrementalnya adalah selaras dengan intuisi Kedua-duanya mengekalkan sebahagian daripada nilai masa lalu dan menambah perubahan baharu Proses terbitan khusus boleh dirujuk kepada kertas ini: https://fanf2.user . srcf.net/hermes/doc/antiforgery/stats.pdf
Purata mudah (juga dikenali sebagai min aritmetik) dan purata wajaran eksponen ialah dua ukuran statistik biasa, masing-masing mempunyai ciri dan kegunaan yang berbeza. Min mudah memberikan berat yang sama kepada setiap pemerhatian dan mencerminkan lokasi pusat set data. Purata wajaran eksponen ialah pengiraan rekursif yang memberikan lebih berat kepada pemerhatian yang lebih terkini. Berat berkurangan secara eksponen apabila pemerhatian semakin jauh dari masa semasa.
Walaupun purata mudah dan purata wajaran eksponen berbeza secara konsep, kita boleh menjadikan purata wajaran eksponen anggaran purata mudah untuk bilangan cerapan tertentu dengan memilih nilai \(\alpha\) yang sesuai. Perhubungan anggaran ini boleh diterangkan oleh saiz sampel yang berkesan, yang merupakan fungsi faktor berat \(\alpha\) dalam purata wajaran eksponen.
Purata Pergerakan Mudah (SMA) ialah min aritmetik bagi semua harga dalam tetingkap masa tertentu. Untuk tetingkap masa \(N\), centroid SMA (di mana min) boleh dianggap sebagai:
\(\text{SMA centroid} = \frac{1 + N}{2}\)
Purata bergerak eksponen (EMA) ialah purata wajaran yang lebih banyak titik data terkini mempunyai berat yang lebih besar. Berat EMA berkurangan secara eksponen dari semasa ke semasa. Sentroid EMA boleh diperolehi dengan menjumlahkan siri berikut:
\(\text{EMA centroid} = \alpha \times \left[1 + 2(1 - \alpha) + 3(1 - \alpha)^2 + \cdots \right] = \frac{1}{\alpha}\)
Apabila kita mengandaikan bahawa SMA dan EMA mempunyai pusat jisim yang sama, kita mendapat:
\(\frac{1 + N}{2} = \frac{1}{\alpha}\)
Menyelesaikan persamaan ini, kita boleh mendapatkan hubungan antara \(\alpha\) dan \(N\):
\(\alpha = \frac{2}{N + 1}\)
Ini bermakna, untuk SMA \(N\)-hari tertentu, nilai \(\alpha\) yang sepadan boleh digunakan untuk mengira EMA “bersamaan” supaya kedua-duanya mempunyai pusat jisim yang sama dan hasilnya sangat serupa.
Katakan kita mempunyai EMA yang dikemas kini setiap saat dengan faktor berat \(\alpha_1\). Ini bermakna setiap saat, titik data baharu ditambahkan pada EMA dengan berat \(\alpha_1\), manakala kesan titik data lama didarabkan dengan \(1 - \alpha_1\).
Jika kami menukar kekerapan kemas kini, katakan untuk mengemas kini setiap \(f\) saat, kami ingin mencari faktor berat baharu \(\alpha_2\) supaya jumlah impak titik data dalam \(f\) saat adalah sama seperti semasa mengemas kini setiap saat .
Lebih \(f\) saat, jika tiada kemas kini dibuat, pengaruh titik data lama akan mereput secara berterusan \(f\) kali, setiap kali didarab dengan \(1 - \alpha_1\). Oleh itu, jumlah faktor pereputan selepas \(f\) saat ialah \((1 - \alpha_1)^f\).
Untuk menjadikan EMA dikemas kini setiap \(f\) saat mempunyai kesan pereputan yang sama dalam satu kitaran kemas kini seperti yang dikemas kini EMA sekali sesaat, kami menetapkan jumlah faktor pereputan selepas \(f\) saat untuk sama dengan faktor pereputan dalam satu kemas kini kitaran:
\((1 - \alpha_1)^f = 1 - \alpha_2\)
Menyelesaikan persamaan ini, kita mendapat faktor berat baharu \(\alpha_2\):
\(\alpha_2 = 1 - (1 - \alpha_1)^f\)
Formula ini memberikan anggaran untuk faktor berat baharu \(\alpha_2\) yang memastikan kesan pelicinan EMA tetap apabila kekerapan kemas kini berubah. Sebagai contoh, kami mengira min harga \(\alpha_1\) sebagai 0.001, dan mengemas kini harga terkini setiap 10 saat Jika kami menukarnya kepada 1 saat, \(\alpha_2\) yang setara ialah kira-kira 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)
Dalam dagangan atur cara frekuensi tinggi, pemprosesan pantas data masa nyata adalah penting. Untuk meningkatkan kecekapan pengiraan dan mengurangkan penggunaan sumber, kertas kerja ini memperkenalkan algoritma pengemaskinian dalam talian untuk pengiraan berterusan min berwajaran dan varians aliran data. Pengiraan kemas kini tambahan dalam masa nyata juga boleh digunakan untuk mengira pelbagai data statistik dan penunjuk, seperti korelasi antara dua harga aset, pemasangan linear, dsb., yang mempunyai potensi besar. Kemas kini tambahan menganggap data sebagai sistem isyarat, yang merupakan evolusi pemikiran berbanding pengiraan tempoh tetap. Jika strategi anda juga mempunyai bahagian yang menyimpan pengiraan data sejarah, anda juga boleh mengubah suai mengikut idea ini, hanya merekodkan anggaran status sistem dan apabila data baharu tiba, kemas kini status sistem dan seterusnya.