ہائی فریکوئنسی ٹریڈنگ کی حکمت عملی کے بارے میں سوچنا (4)

مصنف:گھاس, تخلیق: 2023-08-08 22:31:47, تازہ کاری: 2023-09-18 19:51:25

img

پچھلے مضمون میں آرڈر پہنچنے کے وقفے پر تحقیق کرکے دکھایا گیا ہے کہ کیوں پیرامیٹرز میں متحرک ایڈجسٹمنٹ کی ضرورت ہے اور کس طرح تخمینوں کو اچھا یا برا سمجھا جاتا ہے۔ اس مضمون میں گہرائی کے اعداد و شمار پر توجہ دی جائے گی ، درمیانی قیمت (جسے منصفانہ قیمت ، مائکرو قیمت وغیرہ کہا جاتا ہے) پر تحقیق کی جائے گی۔

گہرائی کا ڈیٹا

بائنن نے بہترین قیمتوں کے تاریخی اعداد و شمار کو ڈاؤن لوڈ کیا ہے ، جس میں شامل ہیں best_bid_price: بہترین خرید قیمت ، یعنی سب سے زیادہ خرید قیمت ، best_bid_qty: بہترین خرید قیمت ، بہترین_ask_price: بہترین فروخت قیمت ، بہترین_ask_qty: بہترین فروخت قیمت ، ٹرانزیکشن_ٹائم: ٹائم ٹیبل ؛ اس اعداد و شمار میں دوسری اور گہری فہرست شامل نہیں ہے۔ یہاں تجزیہ کیا گیا ہے 7 اگست کے YGG ، جس دن مارکیٹ میں بہت زیادہ اتار چڑھاؤ تھا ، جس میں اعداد و شمار کی مقدار 9 ملین سے زیادہ تک پہنچ گئی تھی۔

سب سے پہلے دن کی مارکیٹ کو دیکھیں ، بڑا اور بڑا ، اس کے علاوہ دن کی تجارت کی تعداد میں بھی مارکیٹ کی اتار چڑھاؤ کے ساتھ بڑی تبدیلیاں آئی ہیں ، خاص طور پر پھیلاؤ (ایک خریدنے کے مقابلے میں ایک فروخت کی قیمت کا فرق) مارکیٹ کی اتار چڑھاؤ کی صورتحال کو بہت نمایاں طور پر ظاہر کرتا ہے۔ YGG کے دن کی مارکیٹ کے اعدادوشمار میں ، 20٪ وقت کا پھیلاؤ ایک ٹک سے بڑا ہے ، جو اس دور میں بہت کم ہوتا ہے جب روبوٹ ہر قسم کی تجارت میں مقابلہ کرتے ہیں۔

from datetime import date,datetime
import time
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
books = pd.read_csv('YGGUSDT-bookTicker-2023-08-07.csv')
tick_size = 0.0001
books['date'] = pd.to_datetime(books['transaction_time'], unit='ms')
books.index = books['date']
books['spread'] = round(books['best_ask_price'] - books['best_bid_price'],4)
books['best_bid_price'][::10].plot(figsize=(10,5),grid=True);

img

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

img

(books['spread'][::10]/tick_size).rolling(10000).mean().plot(figsize=(10,5),grid=True);

img

books['spread'].value_counts()[books['spread'].value_counts()>500]/books['spread'].value_counts().sum()
0.0001    0.799169
0.0002    0.102750
0.0003    0.042472
0.0004    0.022821
0.0005    0.012792
0.0006    0.007350
0.0007    0.004376
0.0008    0.002712
0.0009    0.001657
0.0010    0.001089
0.0011    0.000740
0.0012    0.000496
0.0013    0.000380
0.0014    0.000258
0.0015    0.000197
0.0016    0.000140
0.0017    0.000112
0.0018    0.000088
0.0019    0.000063
Name: spread, dtype: float64

متوازن پیشکش

مندرجہ بالا سے یہ دیکھا جاسکتا ہے کہ خرید و فروخت کے حکم کی مقدار میں زیادہ تر وقت بہت فرق ہوتا ہے ، اور یہ فرق مارکیٹ کے قلیل مدتی بازار کے بارے میں ایک مضبوط پیش گوئی کا کام کرتا ہے۔ اسی وجہ سے ، جیسا کہ پچھلے مضمون میں ذکر کیا گیا ہے ، خرید و فروخت کی مقدار کم ہوتی ہے۔ اگر ایک طرف کا حکم دوسری طرف سے نمایاں طور پر چھوٹا ہے ، تو فرض کریں کہ اگلی فعال خرید و فروخت کے احکامات کی مقدار قریب ہے ، اس طرح کی قیمتوں میں تبدیلی کو آگے بڑھانے کے ل.imgجہاں Q_b خریدنے کے لئے سب سے بہترین بولی کی مقدار (best_bid_qty) اور Q_a فروخت کرنے کے لئے سب سے بہترین بولی کی مقدار (best_ask_qty) کی نمائندگی کرتا ہے۔

وسط قیمت کی تعریف:img

مندرجہ ذیل گراف میں درمیانی قیمت میں تبدیلی کی شرح اور عدم توازن I کے مابین 1 وقفے کے درمیان تعلقات دکھائے گئے ہیں ، اور توقع کے مطابق ، جب I بڑھتا ہے تو ، قیمتوں میں اضافہ ہونے کا امکان ہوتا ہے ، اور 1 کے قریب ، قیمتوں میں تبدیلی کی وسعت بھی تیز ہوتی ہے۔ اعلی تعدد تجارت میں ، درمیانی قیمتوں کو متعارف کرانے کا مقصد مستقبل کی قیمتوں میں تبدیلیوں کا بہتر اندازہ لگانا ہے ، یعنی ، مستقبل کی قیمتوں میں فرق کم ہونے پر ، درمیانی قیمتوں کو بہتر طور پر بیان کیا جاتا ہے۔ واضح طور پر منسلک عدم توازن حکمت عملی کی پیش گوئی کے لئے اضافی معلومات فراہم کرتا ہے ، اس کے ساتھ ، وزن شدہ وسط قیمت کی وضاحت:img

books['I'] = books['best_bid_qty'] / (books['best_bid_qty'] + books['best_ask_qty'])
books['mid_price'] = (books['best_ask_price'] + books['best_bid_price'])/2
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)

img

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)

img

وزن میں اضافے کی درمیانی قیمت کو ایڈجسٹ کریں

چارٹ میں دیکھا گیا ہے کہ وزن والے وسط قیمت میں مختلف I کے مقابلے میں بہت کم تبدیلی ہے ، جس سے یہ ظاہر ہوتا ہے کہ وزن والے وسط قیمت بہتر فٹ ہے۔ لیکن پھر بھی کچھ اصول موجود ہیں ، جیسے 0.2 اور 0.8 کے قریب ، انحراف زیادہ ہے۔ اس سے یہ ظاہر ہوتا ہے کہ I اب بھی اضافی معلومات فراہم کرسکتا ہے۔ چونکہ وزن والے وسط قیمت نے قیمت کی اصلاحات کو I کے ساتھ مکمل طور پر لکیری سمجھا ہے ، لہذا یہ واضح طور پر عملی طور پر درست نہیں ہے ، جیسا کہ اوپر کے چارٹ سے ظاہر ہوتا ہے ، جب I 0 اور 1 کے قریب ہوتا ہے تو ، انحراف کی رفتار تیز ہوتی ہے ، نہ کہ لکیری تعلقات۔

اس کے علاوہ ، یہ ایک بہت ہی آسان اور آسان طریقہ ہے کہ آپ کو اپنے آپ کو اس کے بارے میں مزید جاننے کی ضرورت ہے۔

img

اس وقت:

img

اس شکل کو دیکھ کر یہ معلوم ہوتا ہے کہ وزن میں اضافہ شدہ درمیانی قیمت اوسط درمیانی قیمت کی اصلاح ہے، اصلاح کے عنصر کا کوآرڈینٹ اسپریڈ ہے، اور اصلاح کا عنصر I کے بارے میں ایک فنکشن ہے، weighted mid-price اس سلسلے میں صرف یہ فرض کرتا ہے کہ یہ رشتہ I/2 ہے۔ اس وقت ایڈجسٹ شدہ I کی تقسیم ((-1,1)) کے فوائد ظاہر ہوتے ہیں، I کے بارے میں اصل نقطہ ہم آہنگی، جس سے ہمیں فنکشن کے لئے مناسب تعلقات تلاش کرنے میں سہولت ملتی ہے۔ گرافک کو دیکھیں، اس فنکشن کو I کے غیر معمولی اعشاریہ تعلقات کو پورا کرنا چاہئے، تاکہ دونوں اطراف میں تیزی سے اضافہ ہو، اور اصل نقطہ ہم آہنگی کے بارے میں، یہ بھی دیکھا جاسکتا ہے کہ اصل نقطہ کے قریب قدر لکیری ہے، اس کے علاوہ، جب ہم I 0 کے قریب ہوتے ہیں، تو فنکشن کا نتیجہ 0 ہے، جب I 1 ہے، تو اس فنکشن کا نتیجہ 0.5 ہے۔ لہذا یہ فرض کیا جاسکتا ہے:

img

یہاں N ایک مثبت جڑواں نمبر ہے، اور عملی ٹیسٹ کے بعد، N 8 پر بہتر ہے۔ یہاں تک کہ اس مضمون میں ایک درست شدہ وزن میں درمیانی قیمت پیش کی گئی ہے:

img

اس وقت پیش گوئی کی جانے والی درمیانی قیمت میں تبدیلی کا I سے بنیادی طور پر کوئی تعلق نہیں ہے۔ یہ نتیجہ اگرچہ سادہ وزن والے درمیانی قیمت سے کچھ بہتر ہے ، لیکن یہ حقیقت میں بھی قابل اطلاق نہیں ہے ، یہاں صرف ایک خیال دیا گیا ہے۔ ایس اسٹوکوف نے 2017 میں ایک مضمون میں مارکوف چین کے طریقہ کار کا استعمال کرتے ہوئے پیش کیا ہے۔مائیکرو پرائساس کے علاوہ ، ہم نے اس کے بارے میں مزید معلومات فراہم کیں ، اور اس کے ساتھ منسلک کوڈ بھی فراہم کیا ، جو آپ کو بھی تلاش کرنے کے لئے دستیاب ہے۔

books['I'] = (books['best_bid_qty'] - books['best_ask_qty']) / (books['best_bid_qty'] + books['best_ask_qty'])
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'].sum()
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)

img

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'].sum()
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)

img

books['adjust_mid_price'] = books['mid_price'] + books['spread']*(books['I']**3)/2
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'].sum()
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)

img

خلاصہ

درمیانی قیمت اعلی تعدد کی حکمت عملی کے لئے بہت اہم ہے ، مستقبل کی قلیل مدتی قیمتوں کی پیش گوئی کرنا ، لہذا درمیانی قیمتوں کو جتنا ممکن ہو سکے درست ہونا چاہئے۔ اس سے پہلے پیش کردہ درمیانی قیمتوں کا تجزیہ کرنے کے لئے صرف ایک ہی مارکیٹ کا استعمال کیا جاتا ہے ، کیونکہ یہ تمام اعداد و شمار پر مبنی ہے۔ حقیقی قیمتوں میں ، حکمت عملی ہر ممکن حد تک تمام اعداد و شمار کا استعمال کرنا چاہتی ہے ، خاص طور پر حقیقی قیمتوں میں تجارت میں تبادلہ ، درمیانی قیمتوں کی پیش گوئی کو اصل ٹرانزیکشن قیمتوں سے جانچنا چاہئے۔ یاد رکھیں کہ اسٹوکوف نے ایسا ہی ایک اشارہ کیا ہے کہ حقیقی درمیانی قیمت ایک ٹرانزیکشن کے امکان کے ساتھ خرید و فروخت کا ایک وزن والا اوسط ہونا چاہئے۔


مزید

لوئسمیں نے اس کے بارے میں کچھ نہیں سنا۔

fmzeroزبردست!