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

مصنف:گھاس, تخلیق: 2023-08-03 16:14:16, تازہ کاری: 2023-12-08 16:37:21

img

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

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

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

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

حل کرنے کے لیے مسائل

1.策略同时挂买单和卖单,第一个问题就是在哪里挂单。挂的离盘口越近,成交的概率越高,但在剧烈波动的行情中,瞬间成交的价格可能离盘口较远,挂的那太近没有能吃到足够的利润。挂的太远的单子成交概率又低。这是一个需要优化的问题。

2.控制仓位。为了控制风险,策略就不能长时间累计过多的仓位。可以通过控制挂单距离、挂单量、总仓位限制等办法解决。

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

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

بینان نے ایک ایک کرکے ٹرانزیکشنز اور سب سے زیادہ مطلوبہ اعداد و شمار فراہم کیے ہیں۔ڈاؤن لوڈ کریں، گہرائی کے اعداد و شمار کو اے پی آئی کے ساتھ ڈاؤن لوڈ کرنے کی ضرورت ہوتی ہے جو سفید فہرست میں ہے ، یا پھر خود ہی جمع کیا جاسکتا ہے۔ دوبارہ جانچ پڑتال کے مقاصد کے لئے مجموعی طور پر استعمال ہونے والے ٹرانزیکشن ڈیٹا کو استعمال کیا جاسکتا ہے۔ اس مضمون میں HOOKUSDT-aggTrades-2023-01-27 کے اعداد و شمار کی مثال دی گئی ہے۔

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. quantity: ٹرانزیکشن کی مقدار
  4. first_trade_id: مجموعی طور پر ایک ہی وقت میں کئی ٹرانزیکشنز ہوسکتے ہیں، صرف ایک اعداد و شمار کو شمار کیا جاتا ہے، یہ پہلی ٹرانزیکشن کا آئی ڈی ہے
  5. last_trade_id: آخری ٹرانزیکشن کی شناخت
  6. transact_time: ٹرانزیکشن کا وقت
  7. is_buyer_maker: ٹرانزیکشن سمت، True خریدار کے لئے خریدار ہے، خریدار خریدار ہے

اس دن 660,000 سے زیادہ ٹرانزیکشنز کا ڈیٹا دیکھا جا سکتا ہے، اور یہ ٹرانزیکشنز فعال ہیں۔ csv تبصرے کے علاقے میں شامل کیا جائے گا۔

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

664475 صفیں × 7 کالم

agg_trade_id قیمت مقدار پہلا_ٹریڈ_آئی ڈی last_trade_id ٹرانزیکشن_ٹائم is_buyer_maker
120719552 52.42 22.087 207862988 207862990 1688256004603 غلط
120719553 52.41 29.314 207862991 207863002 1688256004623 سچ
120719554 52.42 0.945 207863003 207863003 1688256004678 غلط
120719555 52.41 13.534 207863004 207863006 1688256004680 سچ
121384024 68.29 10.065 210364899 210364905 1688342399863 غلط
121384025 68.30 7.078 210364906 210364908 1688342399948 غلط
121384026 68.29 7.622 210364909 210364911 1688342399979 سچ

ایک ہی رقم کی تجارت کا ماڈل

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

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()
print(trades.shape[0] - (buy_trades.shape[0]+sell_trades.shape[0]))
146181

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

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

png

为了观察方便,截掉尾部观察.可以看到成交量越大,出现频率越低,且减少的趋势更快。

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

png

ٹرانزیکشن سے مطمئن تقسیم کے بارے میں بہت ساری تحقیق کی گئی ہے۔ پاور لا ڈسٹری بیوشن (انگریزی: Power-law distribution) جسے پاریتو ڈسٹری بیوشن بھی کہا جاتا ہے، شماریاتی طبیعیات اور سماجی علوم میں ایک عام قسم کی احتمال تقسیم ہے۔ پاریتو ڈسٹری بیوشن میں، واقعہ کا سائز (یا تعدد) اس واقعے کے سائز کے کسی منفی اشاریہ کے برابر ہوتا ہے۔ اس طرح کی تقسیم کی اہم خصوصیت یہ ہے کہ بڑے واقعات (یعنی وہ واقعات جو اوسط سے دور ہیں) کی تعدد بہت سی دوسری تقسیموں میں متوقع سے زیادہ ہوتی ہے۔ یہ ٹرانزیکشن ڈسٹری بیوشن کی خصوصیت ہے۔ پاریتو ڈسٹری بیوشن کی شکل یہ ہے: Px = Cx^-α) ۔

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

png

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

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)

img

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

png

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

png

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

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)
plt.figure(figsize=(10, 5))
plt.grid(True)
plt.title('Diff')
plt.plot(depths, probabilities_s-probabilities);

png

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

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


مزید

اوک کوانٹائزیشن 🐂🍺

fmzeroزبردست!

گھاسCSV بہت بڑا ہے، آپ اسے خود ڈاؤن لوڈ کر سکتے ہیں