پچھلے مضمون میں پیرامیٹرز کو متحرک طور پر ایڈجسٹ کرنے کی ضرورت اور آرڈر کی آمد کے وقفوں کا مطالعہ کرکے تخمینوں کے معیار کا اندازہ لگانے کا طریقہ دکھایا گیا۔ یہ مضمون گہرائی کے اعداد و شمار پر توجہ مرکوز کرے گا اور درمیانی قیمت (جسے منصفانہ قیمت یا مائکرو قیمت بھی کہا جاتا ہے) کا مطالعہ کرے گا۔
بائننس بہترین_بڈ_پریس (سب سے زیادہ خریداری کی قیمت) ، بہترین_بڈ_کوانٹیٹی (سب سے بہترین بولی کی قیمت پر مقدار) ، بہترین_اسک_پریس (سب سے کم فروخت کی قیمت) ، بہترین_اسک_کوانٹیٹی (سب سے بہترین بولی کی قیمت پر مقدار) ، اور ٹرانزیکشن_ٹائم کے لئے تاریخی ڈیٹا ڈاؤن لوڈ فراہم کرتا ہے۔ اس ڈیٹا میں دوسرا یا گہرا آرڈر بک لیول شامل نہیں ہے۔ اس مضمون میں تجزیہ 7 اگست کو YGG مارکیٹ پر مبنی ہے ، جس میں 9 ملین سے زیادہ ڈیٹا پوائنٹس کے ساتھ نمایاں اتار چڑھاؤ کا سامنا کرنا پڑا۔
سب سے پہلے ، آئیے اس دن مارکیٹ کے حالات پر ایک نظر ڈالیں۔ وہاں بڑے اتار چڑھاؤ تھے ، اور آرڈر بک کا حجم مارکیٹ کی اتار چڑھاؤ کے ساتھ ساتھ نمایاں طور پر بدل گیا۔ پھیلاؤ ، خاص طور پر ، مارکیٹ میں اتار چڑھاؤ کی حد کی نشاندہی کرتا ہے ، جو بہترین مانگ اور بولی کی قیمتوں کے مابین فرق ہے۔ اس دن YGG مارکیٹ کے اعدادوشمار میں ، پھیلاؤ 20٪ وقت کے لئے ایک ٹک سے زیادہ تھا۔ آرڈر بک میں مقابلہ کرنے والے مختلف تجارتی بوٹس کے اس دور میں ، ایسی صورتحال تیزی سے کم ہوتی جارہی ہے۔
میں [1]:
from datetime import date,datetime
import time
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
[2] میں:
books = pd.read_csv('YGGUSDT-bookTicker-2023-08-07.csv')
میں [3]:
tick_size = 0.0001
[4] میں:
books['date'] = pd.to_datetime(books['transaction_time'], unit='ms')
books.index = books['date']
میں [5]:
books['spread'] = round(books['best_ask_price'] - books['best_bid_price'],4)
[6] میں:
books['best_bid_price'][::10].plot(figsize=(10,5),grid=True);
باہر[6]:
میں [7]:
books['best_bid_qty'][::10].rolling(10000).mean().plot(figsize=(10,5),grid=True);
books['best_ask_qty'][::10].rolling(10000).mean().plot(figsize=(10,5),grid=True);
آؤٹ[7]:
[8] میں:
(books['spread'][::10]/tick_size).rolling(10000).mean().plot(figsize=(10,5),grid=True);
باہر[8]:
[9] میں:
books['spread'].value_counts()[books['spread'].value_counts()>500]/books['spread'].value_counts().sum()
آؤٹ [9]:
غیر متوازن قیمتوں کا تعین زیادہ تر وقت خرید اور فروخت کے احکامات کے مابین آرڈر بک کے حجم میں نمایاں فرق سے ہوتا ہے۔ اس فرق کا قلیل مدتی مارکیٹ کے رجحانات پر ایک مضبوط پیش گوئی اثر پڑتا ہے ، اسی طرح کی وجہ سے جو پہلے ذکر کی گئی ہے کہ خرید آرڈر کے حجم میں کمی اکثر کمی کا باعث بنتی ہے۔ اگر آرڈر بک کا ایک رخ دوسرے سے نمایاں طور پر چھوٹا ہوتا ہے ، فرض کریں کہ فعال خرید اور فروخت کے احکامات حجم میں ملتے جلتے ہیں ، تو اس سے زیادہ امکان ہوتا ہے کہ چھوٹا رخ استعمال کیا جائے ، اس طرح قیمتوں میں بدلاؤ آئے گا۔ غیر متوازن قیمتوں کا تعین حرف
جہاں Q_b زیر التواء خریدنے کے احکامات کی رقم (best_bid_qty) اور Q_a زیر التواء فروخت کرنے کے احکامات کی رقم (best_ask_qty) کی نمائندگی کرتا ہے۔
درمیانی قیمت کی وضاحت کریں:
مندرجہ ذیل گراف میں اگلے 1 وقفے میں درمیانی قیمت کی تبدیلی کی شرح اور عدم توازن I کے مابین تعلق دکھایا گیا ہے۔ جیسا کہ توقع کی جاتی ہے ، قیمت میں اضافے کا امکان زیادہ ہوتا ہے اور جتنا یہ 1 کے قریب ہوجاتا ہے ، قیمت کی تبدیلی میں تیزی آتی ہے۔ اعلی تعدد کی تجارت میں ، انٹرمیڈیٹ قیمت کا تعارف مستقبل کی قیمتوں میں تبدیلیوں کی بہتر پیش گوئی کرنا ہے ، یعنی ، اور مستقبل کا قیمت کا فرق چھوٹا ہوتا ہے ، انٹرمیڈیٹ قیمت کو بہتر طور پر بیان کیا جاتا ہے۔ ظاہر ہے کہ زیر التواء آرڈرز کا عدم توازن حکمت عملی کی پیش گوئی کے لئے اضافی معلومات فراہم کرتا ہے ، اس کو ذہن میں رکھتے ہوئے ، وزن شدہ درمیانی قیمت کی وضاحت کرنا:
[10] میں:
books['I'] = books['best_bid_qty'] / (books['best_bid_qty'] + books['best_ask_qty'])
[11] میں:
books['mid_price'] = (books['best_ask_price'] + books['best_bid_price'])/2
میں [12]:
bins = np.linspace(0, 1, 51)
books['I_bins'] = pd.cut(books['I'], bins, labels=bins[1:])
books['price_change'] = (books['mid_price'].pct_change()/tick_size).shift(-1)
avg_change = books.groupby('I_bins')['price_change'].mean()
plt.figure(figsize=(8,5))
plt.plot(avg_change)
plt.xlabel('I Value Range')
plt.ylabel('Average Mid Price Change Rate');
plt.grid(True)
آؤٹ [1]:
[13] میں:
books['weighted_mid_price'] = books['mid_price'] + books['spread']*books['I']/2
bins = np.linspace(-1, 1, 51)
books['I_bins'] = pd.cut(books['I'], bins, labels=bins[1:])
books['weighted_price_change'] = (books['weighted_mid_price'].pct_change()/tick_size).shift(-1)
avg_change = books.groupby('I_bins')['weighted_price_change'].mean()
plt.figure(figsize=(8,5))
plt.plot(avg_change)
plt.xlabel('I Value Range')
plt.ylabel('Weighted Average Mid Price Change Rate');
plt.grid(True)
آؤٹ [1]:
گراف سے ، یہ مشاہدہ کیا جاسکتا ہے کہ I کی مختلف اقدار کے مقابلے میں وزن والی درمیانی قیمت میں چھوٹے تغیرات دکھائے جاتے ہیں ، جس سے یہ ظاہر ہوتا ہے کہ یہ بہتر فٹ ہے۔ تاہم ، ابھی بھی کچھ انحرافات ہیں ، خاص طور پر 0.2 اور 0.8 کے ارد گرد۔ اس سے یہ ظاہر ہوتا ہے کہ میں اب بھی اضافی معلومات فراہم کرتا ہوں۔ قیمت کی اصلاح کی اصطلاح اور I کے مابین مکمل طور پر لکیری تعلقات کا مفروضہ ، جیسا کہ وزن والی درمیانی قیمت سے مراد ہے ، حقیقت سے ہم آہنگ نہیں ہے۔ گراف سے دیکھا جاسکتا ہے کہ جب میں 0 اور 1 کی طرف جاتا ہوں تو انحراف کی رفتار میں اضافہ ہوتا ہے ، جس سے غیر لکیری تعلق ظاہر ہوتا ہے۔
ایک زیادہ بدیہی نمائندگی فراہم کرنے کے لئے، یہاں I کی ایک نئی تعریف ہے:
I کی نظر ثانی شدہ تعریف:
اس وقت:
مشاہدے پر ، یہ محسوس کیا جاسکتا ہے کہ وزن والی درمیانی قیمت اوسط درمیانی قیمت کی اصلاح ہے ، جہاں اصلاح کی مدت کو پھیلاؤ سے ضرب دیا جاتا ہے۔ اصلاح کی مدت I کا ایک فنکشن ہے ، اور وزن والی درمیانی قیمت I / 2 کا ایک سادہ رشتہ فرض کرتی ہے۔ اس معاملے میں ، ایڈجسٹ شدہ I تقسیم (-1، 1) کا فائدہ واضح ہوجاتا ہے ، کیونکہ I اصل کے گرد متوازن ہے ، جس سے فنکشن کے لئے مناسب تعلق تلاش کرنا آسان ہوجاتا ہے۔ گراف کا جائزہ لینے سے ، ایسا لگتا ہے کہ اس فنکشن کو I کی طاقتوں کو پورا کرنا چاہئے ، کیونکہ یہ دونوں اطراف میں تیزی سے نمو اور اصل میں متوازن ہے۔ اس کے علاوہ یہ مشاہدہ کیا جاسکتا ہے کہ اصل کے قریب کی اقدار لکیری کے قریب ہیں۔ مزید برآں ، جب I 0 ہے تو فنکشن کا نتیجہ 0 ہے اور جب I نتیجہ 1 ہے تو 0.5 ہے۔ لہذا ، یہ قیاس آرائی کی جاتی ہے کہ فنکشن کا فارمولا:
یہاں N ایک مثبت جوڑا نمبر ہے، اصل ٹیسٹنگ کے بعد، یہ بہتر ہے جب N 8 ہے. اب تک اس کاغذ میں ترمیم شدہ وزن درمیانی قیمت پیش کرتا ہے:
اس مقام پر ، درمیانی قیمتوں میں ہونے والی تبدیلیوں کی پیش گوئی کا اب I سے نمایاں تعلق نہیں ہے۔ اگرچہ یہ نتیجہ سادہ وزن والی درمیانی قیمت سے قدرے بہتر ہے ، لیکن یہ ابھی بھی حقیقی تجارتی منظرناموں میں قابل اطلاق نہیں ہے۔ یہ صرف ایک تجویز کردہ نقطہ نظر ہے۔ ایس اسٹوکوف کے 2017 کے ایک مضمون میں ،مائیکرو پرائسمارکوف چین نقطہ نظر کا استعمال کرتے ہوئے متعارف کرایا گیا ہے ، اور متعلقہ کوڈ فراہم کیا گیا ہے۔ محققین اس نقطہ نظر کو مزید دریافت کرسکتے ہیں۔
[14] میں:
books['I'] = (books['best_bid_qty'] - books['best_ask_qty']) / (books['best_bid_qty'] + books['best_ask_qty'])
[15] میں:
books['weighted_mid_price'] = books['mid_price'] + books['spread']*books['I']/2
bins = np.linspace(-1, 1, 51)
books['I_bins'] = pd.cut(books['I'], bins, labels=bins[1:])
books['weighted_price_change'] = (books['weighted_mid_price'].pct_change()/tick_size).shift(-1)
avg_change = books.groupby('I_bins')['weighted_price_change'].mean()
plt.figure(figsize=(8,5))
plt.plot(avg_change)
plt.xlabel('I Value Range')
plt.ylabel('Weighted Average Mid Price Change Rate');
plt.grid(True)
باہر[15]:
[16] میں:
books['adjust_mid_price'] = books['mid_price'] + books['spread']*books['I']*(books['I']**8+1)/4
bins = np.linspace(-1, 1, 51)
books['I_bins'] = pd.cut(books['I'], bins, labels=bins[1:])
books['adjust_mid_price'] = (books['adjust_mid_price'].pct_change()/tick_size).shift(-1)
avg_change = books.groupby('I_bins')['adjust_mid_price'].mean()
plt.figure(figsize=(8,5))
plt.plot(avg_change)
plt.xlabel('I Value Range')
plt.ylabel('Weighted Average Mid Price Change Rate');
plt.grid(True)
باہر[16]:
درمیانی قیمت اعلی تعدد کی حکمت عملیوں کے لئے اہم ہے کیونکہ یہ قلیل مدتی مستقبل کی قیمتوں کی پیش گوئی کے طور پر کام کرتی ہے۔ لہذا ، درمیانی قیمت کے لئے یہ ضروری ہے کہ یہ زیادہ سے زیادہ درست ہو۔ پہلے زیر بحث درمیانی قیمت کے نقطہ نظر آرڈر بک کے اعداد و شمار پر مبنی ہیں ، کیونکہ تجزیہ میں آرڈر بک کی صرف اوپری سطح کا استعمال کیا جاتا ہے۔ براہ راست تجارت میں ، حکمت عملیوں کا مقصد درمیانی قیمت کی پیش گوئیوں کو اصل لین دین کی قیمتوں کے مقابلے میں درست کرنے کے لئے تجارتی اعداد و شمار سمیت تمام دستیاب اعداد و شمار کا استعمال کرنا چاہئے۔ مجھے یاد ہے کہ اسٹوکوف نے ایک ٹویٹر میں ذکر کیا ہے کہ اصل درمیانی قیمت بولی اور پوچھیں قیمتوں پر عمل درآمد ہونے کے امکانات کا وزن اوسط ہونا چاہئے۔ اس مسئلے کو پچھلے مضامین میں دریافت کیا گیا ہے۔ لمبائی کی پابندیوں کی وجہ سے ، ان موضوعات پر مزید تفصیلات اگلے مضمون میں زیر بحث آئیں گی۔