پچھلے مضمون میں ، میں نے تجارت کے مجموعی حجم کو کس طرح ماڈل کرنے کا طریقہ متعارف کرایا اور قیمت کے اثر کے رجحان کا تجزیہ کیا۔ اس مضمون میں ، میں تجارت کے آرڈر کے اعداد و شمار کا تجزیہ جاری رکھوں گا۔ YGG نے حال ہی میں بائننس یو پر مبنی معاہدوں کا آغاز کیا ، اور قیمتوں میں اتار چڑھاؤ اہم رہا ہے ، جس میں تجارت کا حجم ایک مقام پر بی ٹی سی سے بھی تجاوز کر گیا ہے۔ آج ، میں اس کا تجزیہ کروں گا۔
عام طور پر، یہ فرض کیا جاتا ہے کہ احکامات کی آمد کا وقت ایک Poisson کے عمل پر عمل کرتا ہے.پیسن کا عملیہاں، میں تجرباتی ثبوت فراہم کروں گا.
میں نے 5 اگست کے لئے ایگ ٹریڈز کے اعداد و شمار ڈاؤن لوڈ کیے ، جس میں 1،931,193 تجارتیں شامل ہیں ، جو کافی اہم ہے۔ پہلے ، آئیے خرید آرڈرز کی تقسیم پر ایک نظر ڈالیں۔ ہم 100ms اور 500ms کے ارد گرد ایک غیر ہموار مقامی چوٹی دیکھ سکتے ہیں ، جو ممکنہ طور پر باقاعدگی سے وقفے وقفے سے ٹریڈنگ بوٹس کے ذریعہ رکھے گئے آئس برگ آرڈرز کی وجہ سے ہے۔ اس دن غیر معمولی مارکیٹ کے حالات کی ایک وجہ بھی یہ ہوسکتی ہے۔
پوئسن تقسیم کا امکان ماس فنکشن (پی ایم ایف) مندرجہ ذیل فارمولے کے ذریعہ دیا جاتا ہے:
جہاں:
پوائنسن کے عمل میں ، واقعات کے مابین وقت کے وقفے ایک تیزی سے تقسیم کی پیروی کرتے ہیں۔ تیزی سے تقسیم کا امکان کثافت فنکشن (پی ڈی ایف) مندرجہ ذیل فارمولے کے ذریعہ دیا جاتا ہے:
فٹنگ کے نتائج سے پتہ چلتا ہے کہ مشاہدہ کردہ اعداد و شمار اور متوقع پوسسن تقسیم کے مابین ایک اہم فرق ہے۔ پوسسن کا عمل لمبے وقت کے وقفوں کی تعدد کو کم کرتا ہے اور مختصر وقت کے وقفوں کی تعدد کو زیادہ کرتا ہے۔ (انٹرفیل کی اصل تقسیم ایک ترمیم شدہ پیرٹو تقسیم کے قریب ہے)
میں [1]:
from datetime import date,datetime
import time
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
[2] میں:
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']
[10] میں:
buy_trades['interval'][buy_trades['interval']<1000].plot.hist(bins=200,figsize=(10, 5));
باہر[10]:
[20] میں:
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)
باہر[20]:
جب 1 سیکنڈ کے اندر آرڈر کے واقعات کی تعداد کی تقسیم کو پوئسن تقسیم کے ساتھ موازنہ کیا جاتا ہے تو ، فرق بھی اہم ہوتا ہے۔ پوئسن تقسیم نادر واقعات کی تعدد کو نمایاں طور پر کم کرتی ہے۔ اس کی ممکنہ وجوہات یہ ہیں:
دوسرے الفاظ میں ، حقیقی دنیا کے ماحول میں ، آرڈر کے واقعات کی تعدد غیر مستقل ہے ، اور اسے حقیقی وقت میں اپ ڈیٹ کرنے کی ضرورت ہے۔ ایک ترغیبی اثر بھی ہوسکتا ہے ، جہاں ایک مقررہ وقت کی مدت کے اندر زیادہ آرڈر زیادہ آرڈرز کو متحرک کرتے ہیں۔ اس سے حکمت عملی ایک واحد مقررہ پیرامیٹر پر انحصار کرنے سے قاصر ہوجاتی ہے۔
میں [190]:
result_df = buy_trades.resample('1S').agg({
'price': 'count',
'quantity': 'sum'
}).rename(columns={'price': 'order_count', 'quantity': 'quantity_sum'})
[219] میں:
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() ;
باہر[219]:
پہلے آرڈر کے وقفوں کے تجزیے سے یہ نتیجہ اخذ کیا جاسکتا ہے کہ مقررہ پیرامیٹرز حقیقی مارکیٹ کے حالات کے ل suitable موزوں نہیں ہیں ، اور حکمت عملی میں مارکیٹ کی وضاحت کرنے والے کلیدی پیرامیٹرز کو حقیقی وقت میں اپ ڈیٹ کرنے کی ضرورت ہے۔ سب سے آسان حل سلائیڈنگ ونڈو چلتی اوسط کا استعمال کرنا ہے۔ ذیل میں دیئے گئے دو گراف میں 1 سیکنڈ کے اندر اندر خرید آرڈرز کی تعدد اور 1000 کے ونڈو سائز کے ساتھ تجارت کے حجم کا اوسط دکھایا گیا ہے۔ یہ مشاہدہ کیا جاسکتا ہے کہ تجارت میں ایک کلسٹرنگ رجحان ہے ، جہاں احکامات کی تعدد معمول سے کافی زیادہ ہوتی ہے ، اور وقت کی ایک مدت کے لئے حجم میں بھی ہم آہنگی سے اضافہ ہوتا ہے۔ یہاں ، پچھلی اقدار کا اوسط آخری قیمت کی پیش گوئی کرنے کے لئے استعمال کیا جاتا ہے ، اور بقایا کی اوسط غلطی کی پیمائش کرنے کے لئے استعمال کیا جاتا ہے۔
گراف سے ، ہم یہ بھی سمجھ سکتے ہیں کہ آرڈر کی تعدد پوئسسن کی تقسیم سے اتنی زیادہ کیوں انحراف کرتی ہے۔ اگرچہ فی سیکنڈ کے آرڈر کی اوسط تعداد صرف 8.5 ہے ، لیکن انتہائی معاملات اس قدر سے نمایاں طور پر انحراف کرتے ہیں۔
یہ پایا جاتا ہے کہ پیش گوئی کرنے کے لئے پچھلے دو سیکنڈ کے اوسط کا استعمال کرتے ہوئے سب سے چھوٹی بقایا غلطی پیدا ہوتی ہے ، اور یہ پیش گوئی کے نتائج کے لئے صرف اوسط کا استعمال کرنے سے کہیں بہتر ہے۔
[221] میں:
result_df['order_count'].rolling(1000).mean().plot(figsize=(10,5),grid=True);
باہر[221]:
[193] میں:
result_df['quantity_sum'].rolling(1000).mean().plot(figsize=(10,5),grid=True);
باہر[193]:
[195] میں:
(result_df['order_count'] - result_df['mean_count'].mean()).abs().mean()
باہر[195]:
6.985628185332997
[205] میں:
result_df['mean_count'] = result_df['order_count'].rolling(2).mean()
(result_df['order_count'] - result_df['mean_count'].shift()).abs().mean()
باہر[205]:
3.091737586730269
اس مضمون میں پوئسسن کے عمل سے آرڈر ٹائم انٹرفیس کے انحراف کی وجوہات کو مختصر طور پر بیان کیا گیا ہے ، بنیادی طور پر وقت کے ساتھ ساتھ پیرامیٹرز کی تغیر کی وجہ سے۔ مارکیٹ کی درست پیش گوئی کرنے کے ل strategies ، حکمت عملیوں کو مارکیٹ کے بنیادی پیرامیٹرز کی حقیقی وقت کی پیش گوئی کرنے کی ضرورت ہے۔ باقیات کا استعمال پیش گوئی کے معیار کی پیمائش کے لئے کیا جاسکتا ہے۔ مذکورہ بالا مثال ایک سادہ مظاہرہ ہے ، اور مخصوص ٹائم سیریز تجزیہ ، اتار چڑھاؤ کے گروپ اور دیگر متعلقہ موضوعات پر وسیع پیمانے پر تحقیق کی گئی ہے ، مذکورہ بالا مظاہرہ کو مزید بہتر بنایا جاسکتا ہے۔