پچھلے مضمون میں ، میں نے تجارت کی مجموعی مقدار کو ماڈل کرنے اور قیمتوں میں اضافے کے ایک سادہ تجزیہ کے بارے میں بتایا تھا۔ اس مضمون میں ، میں تجارت کے احکامات کے اعداد و شمار کے گرد بھی تجزیہ جاری رکھوں گا۔
عام طور پر یہ فرض کیا جاتا ہے کہ آرڈر کی آمد کا وقت بارسن کے عمل سے مطابقت رکھتا ہے ، یہاں ایک مضمون ہے جس میں اس کی وضاحت کی گئی ہے۔بارسن کا عمل◄ ذیل میں میں اس کی تصدیق کروں گا۔
5 اگست کو ڈاؤن لوڈ کردہ aggTrades ، مجموعی طور پر 1931193 تجارت ، بہت مبالغہ آرائی ہے۔ سب سے پہلے ، ادائیگی کی تقسیم کو دیکھیں ، آپ کو 100ms اور 500ms کے ارد گرد ایک غیر ہموار مقامی چوٹی نظر آتی ہے ، جو آئس مینڈک کے ذریعہ تفویض کردہ روبوٹ ٹائمنگ ٹائمنگ کی وجہ سے ہونا چاہئے ، جو اس دن کی غیر معمولی صورتحال کی ایک وجہ بھی ہوسکتی ہے۔
بارسن تقسیم کے لئے احتمالاتی ماس فنکشن (PMF) مندرجہ ذیل فارمولے کے ذریعہ دیا گیا ہے:
ان میں شامل ہیں:
پارسن کے دوران ، واقعات کے درمیان وقت کا وقفہ انڈیکس ڈسٹری بیوشن کے تابع ہے۔ انڈیکس ڈسٹری بیوشن کی احتمال کثافت فنکشن (PDF) مندرجہ ذیل فارمولے کے ذریعہ دی گئی ہے:
فٹ ہونے کے بعد پایا گیا کہ نتائج اور پارسن کی تقسیم کے متوقع اختلافات زیادہ ہیں ، پارسن کے عمل نے طویل وقفے کے وقت کی تعدد کو کم کیا اور کم وقفے کے وقت کی تعدد کو زیادہ کیا ؛ ((حقیقی وقفے کی تقسیم درست شدہ پارسیٹو تقسیم کے قریب ہے)
from datetime import date,datetime
import time
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
trades = pd.read_csv('YGGUSDT-aggTrades-2023-08-05.csv')
trades['date'] = pd.to_datetime(trades['transact_time'], unit='ms')
trades.index = trades['date']
buy_trades = trades[trades['is_buyer_maker']==False].copy()
buy_trades = buy_trades.groupby('transact_time').agg({
'agg_trade_id': 'last',
'price': 'last',
'quantity': 'sum',
'first_trade_id': 'first',
'last_trade_id': 'last',
'is_buyer_maker': 'last',
'date': 'last',
'transact_time':'last'
})
buy_trades['interval']=buy_trades['transact_time'] - buy_trades['transact_time'].shift()
buy_trades.index = buy_trades['date']
buy_trades['interval'][buy_trades['interval']<1000].plot.hist(bins=200,figsize=(10, 5));
Intervals = np.array(range(0, 1000, 5))
mean_intervals = buy_trades['interval'].mean()
buy_rates = 1000/mean_intervals
probabilities = np.array([np.mean(buy_trades['interval'] > interval) for interval in Intervals])
probabilities_s = np.array([np.e**(-buy_rates*interval/1000) for interval in Intervals])
plt.figure(figsize=(10, 5))
plt.plot(Intervals, probabilities)
plt.plot(Intervals, probabilities_s)
plt.xlabel('Intervals')
plt.ylabel('Probability')
plt.grid(True)
اعداد و شمار میں 1s میں آرڈر کی تعداد کی تعداد کی تقسیم کا موازنہ کیا گیا ہے ، اور پارسن کی تقسیم بھی بہت واضح ہے۔ پارسن کی تقسیم نے کم امکانات کے واقعات کی تعدد کو نمایاں طور پر کم کیا ہے۔ ممکنہ وجوہات:
یعنی حقیقی ماحول میں احکامات کی تعدد غیر مستقل ہوتی ہے، انہیں حقیقی وقت میں اپ ڈیٹ کرنے کی ضرورت ہوتی ہے، اور ایک حوصلہ افزائی کا کام ہوتا ہے، یعنی مقررہ وقت میں زیادہ احکامات زیادہ احکامات کو حوصلہ افزائی کرتے ہیں۔ اس سے حکمت عملی ایک واحد پیرامیٹر کو مقرر نہیں کرسکتی ہے۔
result_df = buy_trades.resample('0.1S').agg({
'price': 'count',
'quantity': 'sum'
}).rename(columns={'price': 'order_count', 'quantity': 'quantity_sum'})
count_df = result_df['order_count'].value_counts().sort_index()[result_df['order_count'].value_counts()>20]
(count_df/count_df.sum()).plot(figsize=(10,5),grid=True,label='sample pmf');
from scipy.stats import poisson
prob_values = poisson.pmf(count_df.index, 1000/mean_intervals)
plt.plot(count_df.index, prob_values,label='poisson pmf');
plt.legend() ;
مندرجہ بالا آرڈر کے وقفے کے تجزیے سے یہ نتیجہ اخذ کیا جاسکتا ہے کہ مقررہ پیرامیٹرز حقیقی مارکیٹ مارکیٹ کے لئے موزوں نہیں ہیں ، حکمت عملی کے لئے مارکیٹ کی تفصیل کے لئے اہم پیرامیٹرز کو حقیقی وقت میں اپ ڈیٹ کرنے کی ضرورت ہے۔ سب سے آسان حل سلائیڈنگ ونڈو کا اوسط ہے۔ مندرجہ ذیل دو چارٹ 1s میں ادائیگی کی تعدد اور 1000 ونڈوز میں تجارت کی مقدار کا اوسط ہیں ، یہ دیکھا جاسکتا ہے کہ تجارت میں جمع ہونے کا رجحان موجود ہے ، یعنی ایک وقت ہے جب آرڈر کی تعدد معمول سے نمایاں طور پر زیادہ ہے ، اور اس وقت کی مقدار بھی ہم آہنگ ہے۔ یہاں ، پچھلی اوسط سے تازہ ترین ایک سیکنڈ کی متوقع قیمت کا اندازہ لگایا جاتا ہے ، اور متوقع بقایا کی اوسط اوسط مطلق غلطی کی اوسط قیمت سے پیشن گوئی کا اندازہ لگایا جاتا ہے۔
اس گراف سے یہ بھی سمجھا جاسکتا ہے کہ آرڈر کی تعدد پارسن ڈسٹری بیوشن سے اتنی زیادہ کیوں انحراف کرتی ہے۔ اگرچہ فی سیکنڈ آرڈر کی تعداد کی اوسط قیمت صرف 8.5 بار ہے ، لیکن انتہائی حالات میں فی سیکنڈ آرڈر کی اوسط قیمت بہت زیادہ ہے۔
یہاں یہ پایا گیا ہے کہ پہلے دو سیکنڈ کی اوسط کے ساتھ پیش گوئی کرنے میں خرابی کی غلطی کم سے کم ہے اور سادہ اوسط کی پیش گوئی کے نتائج سے کہیں زیادہ بہتر ہے۔
result_df['order_count'][::10].rolling(1000).mean().plot(figsize=(10,5),grid=True);
result_df
order_count | مقدار_جمع | |
---|---|---|
2023-08-05 03:30:06.100 | 1 | 76.0 |
2023-08-05 03:30:06.200 | 0 | 0.0 |
2023-08-05 03:30:06.300 | 0 | 0.0 |
2023-08-05 03:30:06.400 | 1 | 416.0 |
2023-08-05 03:30:06.500 | 0 | 0.0 |
… | … | … |
2023-08-05 23:59:59.500 | 3 | 9238.0 |
2023-08-05 23:59:59.600 | 0 | 0.0 |
2023-08-05 23:59:59.700 | 1 | 3981.0 |
2023-08-05 23:59:59.800 | 0 | 0.0 |
2023-08-05 23:59:59.900 | 2 | 534.0 |
result_df['quantity_sum'].rolling(1000).mean().plot(figsize=(10,5),grid=True);
(result_df['order_count'] - result_df['mean_count'].mean()).abs().mean()
6.985628185332997
result_df['mean_count'] = result_df['order_count'].ewm(alpha=0.11, adjust=False).mean()
(result_df['order_count'] - result_df['mean_count'].shift()).abs().mean()
0.6727616961866929
result_df['mean_quantity'] = result_df['quantity_sum'].ewm(alpha=0.1, adjust=False).mean()
(result_df['quantity_sum'] - result_df['mean_quantity'].shift()).abs().mean()
4180.171479076811
اس مضمون میں آرڈر ٹائم وقفے سے انحراف کی وجوہات کا خلاصہ کیا گیا ہے ، بنیادی طور پر اس لئے کہ پیرامیٹرز وقت کے ساتھ ساتھ بدلتے ہیں۔ مارکیٹ کی زیادہ درست پیش گوئی کے ل the ، حکمت عملی کو مارکیٹ کے بنیادی پیرامیٹرز کے بارے میں حقیقی وقت کی پیش گوئی کرنے کی ضرورت ہے۔ باقیات کے ذریعہ پیش گوئی کی خوبی اور برائی کا اندازہ لگایا جاسکتا ہے ، جس میں ایک آسان ترین مثال دی گئی ہے ، مخصوص ٹائم سیریز تجزیہ ، اتار چڑھاؤ کی شرح جمع کرنے وغیرہ کے بارے میں بہت ساری متعلقہ تحقیق ہے ، جس میں مزید بہتری لائی جاسکتی ہے۔