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

مصنف:لیدیہ, تخلیق: 2023-08-04 13:47:39, تازہ کاری: 2023-09-12 15:50:10

img

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

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

ہائی فریکوئنسی منافع کا ذریعہ

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

مسائل جن کا حل نکالنا ہے

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

  2. پوزیشن کنٹرول خطرے کے انتظام کے لئے اہم ہے۔ ایک حکمت عملی طویل عرصے تک زیادہ پوزیشنوں کو جمع نہیں کرسکتی ہے۔ اس سے دور اور مقدار کو کنٹرول کرنے کے ساتھ ساتھ مجموعی پوزیشنوں پر حدود طے کرنے سے بھی نمٹا جاسکتا ہے۔

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

مطلوبہ اعداد و شمار

بائننس فراہم کرتا ہےڈاؤن لوڈ کے قابل ڈیٹاانفرادی تجارتوں اور بہترین بولی / طلب کے احکامات کے لئے۔ گہرائی کے اعداد و شمار کو ان کے API کے ذریعہ ڈاؤن لوڈ کیا جاسکتا ہے ، یا اسے دستی طور پر جمع کیا جاسکتا ہے۔ بیک ٹسٹنگ کے مقاصد کے لئے ، مجموعی تجارتی اعداد و شمار کافی ہیں۔ اس مضمون میں ، ہم HOOKUSDT-aggTrades-2023-01-27 ڈیٹا کی مثال استعمال کریں گے۔

میں [1]:

from datetime import date,datetime
import time
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

انفرادی تجارتی اعداد و شمار میں درج ذیل شامل ہیں:

  1. agg_trade_id: مجموعی تجارت کا آئی ڈی۔
  2. قیمت: وہ قیمت جس پر تجارت کی گئی تھی۔
  3. مقدار: تجارت کی مقدار۔
  4. first_trade_id: جب متعدد تجارتیں جمع کی جاتی ہیں تو یہ پہلی تجارت کی شناخت کی نمائندگی کرتا ہے۔
  5. last_trade_id: مجموعہ میں آخری تجارت کا آئی ڈی۔
  6. transact_time: ٹرانزیکشن کے نفاذ کا ٹائم اسٹیمپ۔
  7. is_buyer_maker: تجارت کی سمت کی نشاندہی کرتا ہے۔ True ایک خرید آرڈر کی نمائندگی کرتا ہے جو بنانے والے کے طور پر عملدرآمد ہوتا ہے ، جبکہ فروخت آرڈر لینے والے کے طور پر عملدرآمد ہوتا ہے۔

یہ دیکھا جاسکتا ہے کہ اس دن 660،000 تجارتیں کی گئیں ، جس سے یہ ظاہر ہوتا ہے کہ مارکیٹ انتہائی سرگرم ہے۔ سی ایس وی فائل تبصرے کے سیکشن میں منسلک کی جائے گی۔

[4] میں:

trades = pd.read_csv('COMPUSDT-aggTrades-2023-07-02.csv')
trades

آؤٹ [4]: ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ،

img

664475 صفیں × 7 کالم

انفرادی تجارت کی مقدار کا نمونہ

سب سے پہلے ، اعداد و شمار کو اصل تجارتوں کو دو گروپوں میں تقسیم کرکے عملدرآمد کیا جاتا ہے: بنانے والے کے طور پر انجام دیئے گئے خرید آرڈرز اور لینے والوں کے طور پر انجام دیئے گئے فروخت آرڈرز۔ اس کے علاوہ ، اصل مجموعی تجارتی اعداد و شمار ایک ہی وقت میں ، ایک ہی قیمت پر ، اور ایک ہی سمت میں انجام دیئے گئے تجارتوں کو ایک ہی ڈیٹا پوائنٹ میں جوڑتا ہے۔ مثال کے طور پر ، اگر 100 کے حجم کے ساتھ ایک ہی خرید آرڈر ہے تو ، اگر قیمتیں مختلف ہیں تو ، اسے بالترتیب 60 اور 40 کے حجم کے ساتھ دو تجارتوں میں تقسیم کیا جاسکتا ہے۔ اس سے خرید آرڈر کے حجم کا تخمینہ متاثر ہوسکتا ہے۔ لہذا ، ٹرانزیکشن_ٹائم کی بنیاد پر اعداد و شمار کو دوبارہ جمع کرنا ضروری ہے۔ اس دوسری مجموعی کے بعد ، ڈیٹا کا حجم 140,000 ریکارڈ کم ہوجاتا ہے۔

[6] میں:

trades['date'] = pd.to_datetime(trades['transact_time'], unit='ms')
trades.index = trades['date']
buy_trades = trades[trades['is_buyer_maker']==False].copy()
sell_trades = trades[trades['is_buyer_maker']==True].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'
})
sell_trades = sell_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()
sell_trades['interval']=sell_trades['transact_time'] - sell_trades['transact_time'].shift()

[10] میں:

print(trades.shape[0] - (buy_trades.shape[0]+sell_trades.shape[0]))

باہر [10]: 146181

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

[36] میں:

buy_trades['quantity'].plot.hist(bins=200,figsize=(10, 5));

باہر [36]:

img

آسان مشاہدے کے لئے ، آئیے دم کو کاٹیں اور اعداد و شمار کا تجزیہ کریں۔ یہ مشاہدہ کیا جاسکتا ہے کہ جب تجارت کی مقدار میں اضافہ ہوتا ہے تو ، اس کی تعدد کم ہوجاتی ہے ، اور کمی کی شرح تیز ہوجاتی ہے۔

[37] میں:

buy_trades['quantity'][buy_trades['quantity']<200].plot.hist(bins=200,figsize=(10, 5));

باہر [37]:

img

تجارت کی مقدار کی تقسیم کے بارے میں متعدد مطالعے ہوئے ہیں۔ یہ پتہ چلا ہے کہ تجارت کی مقدار پاور قانون کی تقسیم پر عمل کرتی ہے ، جسے پیریٹو تقسیم بھی کہا جاتا ہے ، جو شماریاتی طبیعیات اور سماجی علوم میں ایک عام احتمال کی تقسیم ہے۔ پاور قانون کی تقسیم میں ، کسی واقعہ کے سائز (یا تعدد) کا امکان اس واقعہ کے سائز کے منفی اعشاریہ کے متناسب ہوتا ہے۔ اس تقسیم کی اہم خصوصیت یہ ہے کہ بڑے واقعات کی تعدد (یعنی ، اوسط سے دور) بہت سی دوسری تقسیموں میں متوقع سے زیادہ ہے۔ یہ بالکل تجارت کی مقدار کی تقسیم کی خصوصیت ہے۔ پیریٹو تقسیم کی شکل P ((x) = C ((x ^-α) کے ذریعہ دی گئی ہے۔ آئیے اس کی تجرباتی طور پر تصدیق کریں۔

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

img

یہاں ، N معمول کے لئے پیرامیٹر ہے۔ ہم اوسط تجارت کی رقم ، M کا انتخاب کریں گے ، اور الفا کو -2.06 پر مقرر کریں گے۔ جب D = N ہوتا ہے تو P قدر کا حساب کتاب کرکے الفا کا مخصوص تخمینہ حاصل کیا جاسکتا ہے۔ خاص طور پر ، الفا = log (((P(d>M)) / log ((2)) ۔ مختلف نکات کا انتخاب الفا کی قدر میں معمولی اختلافات کا باعث بن سکتا ہے۔

میں [55]:

depths = range(0, 250, 2)
probabilities = np.array([np.mean(buy_trades['quantity'] > depth) for depth in depths])
alpha = np.log(np.mean(buy_trades['quantity'] > mean_quantity))/np.log(2)
mean_quantity = buy_trades['quantity'].mean()
probabilities_s = np.array([(1+depth/mean_quantity)**alpha for depth in depths])

plt.figure(figsize=(10, 5))
plt.plot(depths, probabilities)
plt.plot(depths, probabilities_s)
plt.xlabel('Depth')
plt.ylabel('Probability of execution')
plt.title('Execution probability at different depths')
plt.grid(True)

باہر[55]:

img

[56] میں:

plt.figure(figsize=(10, 5))
plt.grid(True)
plt.title('Diff')
plt.plot(depths, probabilities_s-probabilities);

باہر[56]:

img

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

img

آسان بنانے کے لئے ، آئیے r = q / M کو معمول کی تجارت کی رقم کی نمائندگی کرنے کے لئے استعمال کریں۔ ہم پہلے کی طرح ہی طریقہ استعمال کرکے پیرامیٹرز کا اندازہ لگا سکتے ہیں۔ مندرجہ ذیل گراف سے پتہ چلتا ہے کہ ترمیم کے بعد ، زیادہ سے زیادہ انحراف 2٪ سے زیادہ نہیں ہے۔ نظریاتی طور پر ، مزید ایڈجسٹمنٹ کی جاسکتی ہے ، لیکن اس سطح کی درستگی پہلے ہی کافی ہے۔

میں [52]:

depths = range(0, 250, 2)
probabilities = np.array([np.mean(buy_trades['quantity'] > depth) for depth in depths])
mean = buy_trades['quantity'].mean()
alpha = np.log(np.mean(buy_trades['quantity'] > mean))/np.log(2.05)
probabilities_s = np.array([(((1+20**(-depth/mean))*depth+mean)/mean)**alpha for depth in depths])

plt.figure(figsize=(10, 5))
plt.plot(depths, probabilities)
plt.plot(depths, probabilities_s)
plt.xlabel('Depth')
plt.ylabel('Probability of execution')
plt.title('Execution probability at different depths')
plt.grid(True)

باہر[52]:

img

میں [53]:

plt.figure(figsize=(10, 5))
plt.grid(True)
plt.title('Diff')
plt.plot(depths, probabilities_s-probabilities);

باہر[53]:

img

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

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


مزید