WebSocket API v1 অর্ডার বুক ফিড ব্যাখ্যা করার জন্য উদাহরণ কোড (সিঙ্ক্রোনাস/একক-থ্রেডেড)

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

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

WebSocket API v1 অর্ডার বুক লজিক ব্যাখ্যা করে এমন উদাহরণ কোড (পাইথনে) নিচে দেওয়া হলো এবং krakenwsorderbook.py হিসাবে ডাউনলোডের জন্যও উপলব্ধ।

উদাহরণ কোডটি একটি কমান্ড লাইন ক্লায়েন্ট প্রয়োগ করে যা নির্দিষ্ট অর্ডার বুক ফিডে সাবস্ক্রাইব করে, তারপর ফিড বার্তাগুলি থেকে একটি বৈধ অর্ডার বুক তৈরি ও বজায় রাখে, যখন প্রতি সেকেন্ডে একবার বর্তমান অর্ডার বুক আউটপুট করে।

কমান্ড লাইন ক্লায়েন্টের ব্যবহার হলো ./krakenwsbook.py symbol depth যেমন নিম্নলিখিত উদাহরণ কমান্ডগুলি:

  • ./krakenwsbook.py xbt/usd 10

  • ./krakenwsbook.py ltc/eur 25

উদাহরণ কোড

#!/usr/bin/env python

# Kraken Websocket API Order Book
#
# Usage: ./krakenwsbook.py symbol depth

import sys
import json
import signal
from websocket import create_connection

def alarmfunction(signalnumber, frame):
signal.alarm(1)
api_output_book()

def dicttofloat(keyvalue):
return float(keyvalue[0])

def api_output_book():
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\tAsk")
for x in range(int(api_depth)):
print("%(bidprice)s (%(bidvolume)s)\t\t\t\t%(askprice)s (%(askvolume)s)" % {"bidprice":bid[x][0], "bidvolume":bid[x][1], "askprice":ask[x][0], "askvolume":ask[x][1]})

def api_update_book(side, data):
for x in data:
price_level = x[0]
if float(x[1]) != 0.0:
api_book[side].update({price_level:float(x[1])})
else:
if price_level in api_book[side]:
api_book[side].pop(price_level)
if side == "bid":
api_book["bid"] = dict(sorted(api_book["bid"].items(), key=dicttofloat, reverse=True)[:int(api_depth)])
elif side == "ask":
api_book["ask"] = dict(sorted(api_book["ask"].items(), key=dicttofloat)[:int(api_depth)])

signal.signal(signal.SIGALRM, alarmfunction)

if len(sys.argv) < 3:
print("Usage: %s symbol depth" % sys.argv[0])
print("Example: %s xbt/usd 10" % sys.argv[0])
sys.exit(1)

api_feed = "book"
api_symbol = sys.argv[1].upper()
api_depth = sys.argv[2]
api_domain = "wss://ws.kraken.com/"
api_book = {"bid":{}, "ask":{}}

try:
ws = create_connection(api_domain)
except Exception as error:
print("WebSocket connection failed (%s)" % error)
sys.exit(1)

api_data = '{"event":"subscribe", "subscription":{"name":"%(feed)s", "depth":%(depth)s}, "pair":["%(symbol)s"]}' % {"feed":api_feed, "depth":api_depth, "symbol":api_symbol}

try:
ws.send(api_data)
except Exception as error:
print("Feed subscription failed (%s)" % error)
ws.close()
sys.exit(1)

while True:
try:
api_data = ws.recv()
except KeyboardInterrupt:
ws.close()
sys.exit(0)
except Exception as error:
print("WebSocket message failed (%s)" % error)
ws.close()
sys.exit(1)
api_data = json.loads(api_data)
if type(api_data) == list:
if "as" in api_data[1]:
api_update_book("ask", api_data[1]["as"])
api_update_book("bid", api_data[1]["bs"])
signal.alarm(1)
elif "a" in api_data[1] or "b" in api_data[1]:
for x in api_data[1:len(api_data[1:])-1]:
if "a" in x:
api_update_book("ask", x["a"])
elif "b" in x:
api_update_book("bid", x["b"])

ws.close()
sys.exit(1)

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