دریافت داده‌های limit order book رمزارزهای مختلف با پایتون

دریافت داده‌های limit order book رمزارزهای مختلف با پایتون


برای زیبایی!سلام اگر یادتون باشه تو پست های قبلی باهم سعی کردیم داده های limit order book بورس تهران رو با استفاده از روش های غیر مستقیم بدست بیاریم 🙂 البته نه اینکه دوست داشته باشیم که روشمون غیر مستقیم باشه بلکه مجبور بودیم.آخر سر هم تونستیم داده هارو تا 3 سطح (Level) بدست بیاریم که همون سه سطح هم کیفیت آنچنانی نداشتند!حالا این دفعه میخوایم با استفاده از api های سایت binance که قطعا معرف حضورتون هست، داده های LOB یک رمز ارز دلخواه (بیت کوین) رو دریافت کنیم.با api داده گرفتن میشه روش مستقیم! یعنی از اون حرکت هایی که تو پروژه قبلی انجام دادیم دیگه خبری نیست.راهنمای استفاده از api های binance رو میتونید از سایتش مطالعه کنید.میدونید که ما حتی برای ورود به سایت بایننس هم با مشکل روبرو هستیم پس پیشنهاد می کنم این کد هارو رو سرور های گوگل کولب اجرا کنید که به مشکل نخورید.خب مطابق معمول ما اول کتابخونه های لازم رو ایمپورت می کنیم:import requestsimport pandas as pdimport numpy as npبرای شروع باید یه درخواست به سایت بایننس بزنیم که داده های LOB یه نماد خاص (یا اصلا چند نماد خاص) رو برامون تو همین لحظه نمایش بده.پس قاعدتا یکی از پارامتر های این درخواست اسم نماد مورد نظره.پارامتر دیگه تعداد سطح ها یا همون level های LOB هست که ما میخوایم داشته باشیم.بعد از فرستادن درخواست و گرفتن پاسخ، پاسخ رو به فرمت json تبدیل می کنیم که با یه دیکشنری خوش دست روبرو بشیم 🙂 جزئیات بیشتر رو تو کد نوشتم اگر اجراش کنید داده های LOB بیت کوین رو برای این لحظه تا 10 سطح بهتون نمایش میده:url = ‘https://api.binance.com/api/v3/depth’number_of_levels = 10 # Default 100; max 5000. Valid limits:[5, 10, 20, 50, 100, 500, 1000, 5000]symbol = &quotBTCUSDT&quotresponse = requests.get(url, params=dict(symbol=symbol,limit=number_of_levels))response = response.json()responseاین دیکشنری پاسخ سه تا کلید داره :”lastUpdateId””bids””asks”به ترتیب اولی یه تایم استمپه که زمان رو مشخص می‌کنه. دومی شامل قیمت و حجم های سفارشات خریده و آخری هم شامل قیمت و حجم های سفارشات فروشه.خب حالا شاید ما بخوایم شروع کنیم به جمع کردن این داده های LOB تا ازشون استفاده کنیم.پس باید یه دیتا فریم درست کنیم تا مکررا به بایننس درخواست بزنیم و جواب هارو رو تو این دیتا فریم ذخیره کنیم (مثلا میخوایم 25 تا رکورد رو ذخیره کنیم) :records = 25columns = [‘time’]ask_price = [f’ask_price {i}’ for i in range(10)]bid_price = [f’bid_price {i}’ for i in range(10)]ask_size = [f’ask_size {i}’ for i in range(10)]bid_size = [f’bid_size {i}’ for i in range(10)]columns = columns + ask_price + bid_price + ask_size + bid_sizedf = pd.DataFrame(index=range(records), columns=columns)dfتو کد بالا اول یه لیست تعریف کردیم که مشخص کننده ستون های دیتا فریم باشه بعد خود دیتا فریم رو تشکیل دادیم.خب حالا کارمون اینه که به تعداد دلخواه به بایننس درخواست بزنیم و داده هارو ذخیره کنیم.من اینجا تعداد رو 25 در نظر گرفتم ولی میتونه خیلی بیشتر باشه یا اصلا بگیم که تا ابد بیاد از بایننس داده بگیره و تو دیتابیس ذخیره کنه.(بعضی شرکت‌ها از این حرکت ها میزنن و بعد داده هارو میفروشن! )n = 0
while n<records: response = requests.get(url, params=dict(symbol=symbol,limit=number_of_levels)).json() df.iloc[n][0] = pd.to_datetime(response[‘lastUpdateId’],unit=’ms’).time() #time df.iloc[n][1:11] = np.array(response[‘asks’]).T[0] #ask_price df.iloc[n][11:21] = np.array(response[‘bids’]).T[0] #bid_price df.iloc[n][21:31] = np.array(response[‘asks’]).T[1] #ask_size df.iloc[n][31:41] = np.array(response[‘bids’]).T[1] #bid_size n += 1dfتوجه کنید که برای بخش تایم فرمت رو از حالت تایم استمپ در آوردیم که خوانا تر باشه.با اجرا کردن این کد میتونید نتیجه رو ببینید *_*داده ها تو واحد میلی ثانیه رکورد شده اند و تعداد سطح هامون هم 10 تاست (می تونیم تا 5000 سطح هم بگیریم!)خب میتونیم ببینیم که از لحاظ کیفیت چقدر تفاوت وجود داره وقتی با api داری داده میگیری در مقابل زمانی که با کراول کردن و … بخوایم داده بگیریم. تو بحث دقت و سرعت هم که ماجرا مشخصه.امیدوارم به دردتون خورده باشه.با احتراممسعود قهرمانیتلگرام من

منبع

Author: admin

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *