WebSocket API v1 order book feed ব্যাখ্যা করার জন্য উদাহরণ কোড (অ্যাসিঙ্ক্রোনাস/মাল্টি-থ্রেডেড)

সর্বশেষ আপডেট: ২ এপ্রি, ২০২৫

WebSocket API v1 order book feed ব্যাখ্যা করার জন্য বিস্তারিত নির্দেশাবলী আমাদের WebSocket API v1 order book feed-এর জন্য একটি বৈধ অর্ডার বুক কীভাবে বজায় রাখবেন সহায়তা পৃষ্ঠায় উপলব্ধ।

WebSocket API v1 order book feed-এর সাথে ইন্টিগ্রেশন এবং একটি অর্ডার বুকের স্থানীয় কপি বজায় রাখার জন্য Python-এ উদাহরণ কোড নিচে দেওয়া হলো।

কোডটি স্ট্যান্ডার্ড Python WebSocket library ব্যবহার করে এবং একটি অ্যাসিঙ্ক্রোনাস (ইভেন্ট চালিত/মাল্টি-থ্রেডেড) পদ্ধতি প্রয়োগ করে, যা অর্ডার বুক ফিড ব্যাখ্যার সমান্তরালে অন্যান্য কাজ চালিয়ে যেতে দেয়।

ব্যবহার

কোডটি একটি কমান্ড প্রম্পটের (যেমন macOS Terminal) মাধ্যমে নিম্নলিখিতভাবে এক্সিকিউট করা উচিত:

  • krakenwsorderbookasync.py symbol depth, অথবা,

  • python3 krakenwsorderbookasync.py symbol depth

উদাহরণস্বরূপ, নিম্নলিখিত কমান্ডটি Dogecoin/USD (XDG/USD) অর্ডার বুক ফিডকে 10টি প্রাইস লেভেল (প্রতি পাশে) গভীরতায় পুনরুদ্ধার এবং ব্যাখ্যা করবে:

  • krakenwsorderbookasync.py XDG/USD 10

মনে রাখবেন যে কোডটি একটি কীবোর্ড ইন্টারাপ্ট (বেশিরভাগ কমান্ড লাইন পরিবেশে Ctrl+C) দ্বারা বন্ধ না হওয়া পর্যন্ত অনির্দিষ্টকালের জন্য চলবে।

পাইথন কোড

পাইথন কোডটি নিচে দেখা যাবে এবং krakenwsorderbookasync.py হিসাবে ডাউনলোডও করা যাবে।

#!/usr/bin/env python3

# Import WebSocket client library (and others)
import sys
import json
import signal
import time
import _thread
import websocket

# Parse command line arguments (symbol and depth)
if len(sys.argv) < 3:
sys.exit(1)
else:
api_symbol = sys.argv[1]
api_depth = int(sys.argv[2])

# Define order book variables
api_book = {'bid':{}, 'ask':{}}

# Define order book update functions
def dicttofloat(data):
return float(data[0])

def api_book_update(api_book_side, api_book_data):
for data in api_book_data:
price_level = data[0]
volume = data[1]
if float(volume) > 0.0:
api_book[api_book_side][price_level] = volume
else:
api_book[api_book_side].pop(price_level)
if api_book_side == 'bid':
api_book['bid'] = dict(sorted(api_book['bid'].items(), key=dicttofloat, reverse=True)[:api_depth])
elif api_book_side == 'ask':
api_book['ask'] = dict(sorted(api_book['ask'].items(), key=dicttofloat)[:api_depth])

# Define WebSocket callback functions
def ws_thread(*args):
ws = websocket.WebSocketApp('wss://ws.kraken.com/', on_open=ws_open, on_message=ws_message)
ws.run_forever()

def ws_open(ws):
ws.send('{"event":"subscribe", "subscription":{"name":"book", "depth":%(api_depth)d}, "pair":["%(api_symbol)s"]}' % {'api_depth':api_depth, 'api_symbol':api_symbol})

def ws_message(ws, ws_data):
api_data = json.loads(ws_data)
if 'event' in api_data:
return
else:
if 'as' in api_data[1]:
api_book_update('ask', api_data[1]['as'])
api_book_update('bid', api_data[1]['bs'])
else:
for data in api_data[1:len(api_data)-2]:
if 'a' in data:
api_book_update('ask', data['a'])
elif 'b' in data:
api_book_update('bid', data['b'])

# Start new thread for WebSocket interface
_thread.start_new_thread(ws_thread, ())

# Output order book (once per second) in main thread
try:
while True:
if len(api_book['bid']) < api_depth or len(api_book['ask']) < api_depth:
time.sleep(1)
else:
bid = sorted(api_book['bid'].items(), key=dicttofloat, reverse=True)
ask = sorted(api_book['ask'].items(), key=dicttofloat)
print('Bid\t\t\t\t\t\t\tAsk')
for count in range(api_depth):
print('%(bidprice)s (%(bidvolume)s)\t\t\t\t%(askprice)s (%(askvolume)s)' \
% {'bidprice':bid[count][0], 'bidvolume':bid[count][1], 'askprice':ask[count][0], 'askvolume':ask[count][1]})
time.sleep(1)
except KeyboardInterrupt:
sys.exit(0)

আরও সাহায্যের প্রয়োজন?