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

مصنف:گھاس, تخلیق: 2023-08-07 18:17:28, تازہ کاری: 2023-09-18 19:50:53

img

پچھلے مضمون میں ، میں نے تجارت کی مجموعی مقدار کو ماڈل کرنے اور قیمتوں میں اضافے کے ایک سادہ تجزیہ کے بارے میں بتایا تھا۔ اس مضمون میں ، میں تجارت کے احکامات کے اعداد و شمار کے گرد بھی تجزیہ جاری رکھوں گا۔

آرڈر کا وقت وقفہ

عام طور پر یہ فرض کیا جاتا ہے کہ آرڈر کی آمد کا وقت بارسن کے عمل سے مطابقت رکھتا ہے ، یہاں ایک مضمون ہے جس میں اس کی وضاحت کی گئی ہے۔بارسن کا عمل◄ ذیل میں میں اس کی تصدیق کروں گا۔

5 اگست کو ڈاؤن لوڈ کردہ aggTrades ، مجموعی طور پر 1931193 تجارت ، بہت مبالغہ آرائی ہے۔ سب سے پہلے ، ادائیگی کی تقسیم کو دیکھیں ، آپ کو 100ms اور 500ms کے ارد گرد ایک غیر ہموار مقامی چوٹی نظر آتی ہے ، جو آئس مینڈک کے ذریعہ تفویض کردہ روبوٹ ٹائمنگ ٹائمنگ کی وجہ سے ہونا چاہئے ، جو اس دن کی غیر معمولی صورتحال کی ایک وجہ بھی ہوسکتی ہے۔

بارسن تقسیم کے لئے احتمالاتی ماس فنکشن (PMF) مندرجہ ذیل فارمولے کے ذریعہ دیا گیا ہے:

img

ان میں شامل ہیں:

  • k واقعات کی تعداد ہے جس میں ہم دلچسپی رکھتے ہیں۔
  • λ یونٹ وقت (یا یونٹ خلا) میں واقعات کی اوسط شرح ہے۔
  • P ((k؛ λ) کا مطلب یہ ہے کہ ایک واقعے کے واقع ہونے کا امکان ایک واقعے کے واقع ہونے کا امکان ہے۔

پارسن کے دوران ، واقعات کے درمیان وقت کا وقفہ انڈیکس ڈسٹری بیوشن کے تابع ہے۔ انڈیکس ڈسٹری بیوشن کی احتمال کثافت فنکشن (PDF) مندرجہ ذیل فارمولے کے ذریعہ دی گئی ہے:

img

فٹ ہونے کے بعد پایا گیا کہ نتائج اور پارسن کی تقسیم کے متوقع اختلافات زیادہ ہیں ، پارسن کے عمل نے طویل وقفے کے وقت کی تعدد کو کم کیا اور کم وقفے کے وقت کی تعدد کو زیادہ کیا ؛ ((حقیقی وقفے کی تقسیم درست شدہ پارسیٹو تقسیم کے قریب ہے)

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

img

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)

img

اعداد و شمار میں 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() ;

img

پیرامیٹرز کو ریئل ٹائم اپ ڈیٹ کریں

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

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

یہاں یہ پایا گیا ہے کہ پہلے دو سیکنڈ کی اوسط کے ساتھ پیش گوئی کرنے میں خرابی کی غلطی کم سے کم ہے اور سادہ اوسط کی پیش گوئی کے نتائج سے کہیں زیادہ بہتر ہے۔

result_df['order_count'][::10].rolling(1000).mean().plot(figsize=(10,5),grid=True);

img

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

img

(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 ، حکمت عملی کو مارکیٹ کے بنیادی پیرامیٹرز کے بارے میں حقیقی وقت کی پیش گوئی کرنے کی ضرورت ہے۔ باقیات کے ذریعہ پیش گوئی کی خوبی اور برائی کا اندازہ لگایا جاسکتا ہے ، جس میں ایک آسان ترین مثال دی گئی ہے ، مخصوص ٹائم سیریز تجزیہ ، اتار چڑھاؤ کی شرح جمع کرنے وغیرہ کے بارے میں بہت ساری متعلقہ تحقیق ہے ، جس میں مزید بہتری لائی جاسکتی ہے۔


مزید