[SOLVED] ENE419 Assignment 3-an asynchronous web socket clien

30.00 $

Category: Tags: , , , , , , ,
Click Category Button to View Your Next Assignment | Homework

You will receive the following solution file(s) instantly after successful payment:

zip file icon Assignment3-o87mh3.zip (1191.1 KB)
Assignment Instructions Updated Recently? Submit Below and we will provide new Solution!
Submit New Instructions
🔒 Securely Powered by:
Secure Checkout
Rate this product

Programming assignment

(Streaming Protocol) You will develop an asynchronous web socket client. First, your client program is subscribed to a streaming channel of Binance server (https://www.binance.com/en/markets) that constantly transmits textual information of cryptocurrency.

The receiving information is so called market data of bitcoin, aka ‘btc’. This is equivalent to buying/selling information about btc at the moment, it’s same as the stock market. Let’s try to receive the market data of btc@usdt (referred to as ‘btcusdt’, ‘usdt’ implies US dollars) and print them out.

For testing:
Try wscat to receive the data first and take a look. How to install:

$ npm install -g wscat
$ wscat -c wscat -c wss://stream.binance.com:443/ws/btcusdt@depth5 connected (press CTRL+C to quit)

After connection, you will receive the data from the web socket:

<{“lastUpdateId”:27547033276,”bids”:[[“16702.06000000″,”0.00069000”],[“16701.76000000″,”0.008 61000”],[“16701.75000000″,”0.00149000”],[“16701.32000000″,”0.04320000”],[“16701.31000000″,”0. 01571000″]],”asks”:[[“16702.84000000″,”0.05546000”],[“16702.85000000″,”0.02665000”],[“16702.8 6000000″,”0.03324000”],[“16703.34000000″,”0.01139000”],[“16703.39000000″,”0.03000000”]]} <{“lastUpdateId”:27547033811,”bids”:[[“16702.75000000″,”0.00087000”],[“16702.74000000″,”0.021 61000”],[“16702.73000000″,”0.01909000”],[“16702.63000000″,”0.00600000”],[“16702.19000000″,”0. 03417000″]],”asks”:[[“16703.33000000″,”0.00893000”],[“16703.34000000″,”0.00069000”],[“16703.8 7000000″,”0.00649000”],[“16703.92000000″,”0.00599000”],[“16704.00000000″,”0.00337000”]]}

Please refer to the following references for sample code:

For python3 https://websockets.readthedocs.io/en/stable/ You may need to know how to process json format in python.

If you choose to do this assignment in other languages, like C++, it will be also great. BIG BONUS!

Submission:

  1. Show your source code and output of each step in PDF and submit it to LMS. The output of step A, B, and C should just contain the last 10 (or 20) lines of each data file.
  2. You do not have to create three separate python files to do step A, B, and C. You can do it in a single file separately (perhaps using a function). It’s completely up to you.
  3. Again, if you do this in C++, then there will be bonus.

*Step A)

Write a streaming client program receiving ‘btcusdt@depth5’ and a trade stream of ‘btcusdt’ information in the same stream connection. The data will be updated every 100-500 milliseconds. Your program will save the data into a text file (do not use shell redirect), called stream-data- binance.txt. You will add a new line of data as they arrive. The trade stream shows “p” and “q” values only. The stream-data-single.txt file should be like the following:

$ ./step_a.py
$ tail -n 10 stream-data-binance.txt

btcusdt@orderbook,bids:[[“16702.06000000″,”0.00069000”],[“16701.76000000″,”0.00861000”],[“16701.75000000″,”0.001 49000”],[“16701.32000000″,”0.04320000”],[“16701.31000000″,”0.01571000″]],”asks”:[[“16702.84000000″,”0.05546000”], [“16702.85000000″,”0.02665000”],[“16702.86000000″,”0.03324000”],[“16703.34000000″,”0.01139000”],[“16703.3900000 0″,”0.03000000”]],asks:[[“16702.84000000″,”0.05546000”],[“16702.85000000″,”0.02665000”],[“16702.86000000″,”0.0332 4000”],[“16703.34000000″,”0.01139000”],[“16703.39000000″,”0.03000000”]]

btcusdt@trade, p:16728.50000000,q:0.00626000 btcusdt@orderbook, …

Please read Table 3: WebSocket Market Streams to figure out how to receive two or more streams. (https://www.binance.com/en/support/faq/binance-options-api-interface-and-websocket-fe0be251ac014a8082e702f83d089e54)

*Step B)

Modify your program from Step A receiving a similar btc data from the Upbit server (a Korean local stream server). Let’s try.

$ wscat -c wss://api.upbit.com/websocket/v1 connected (press CTRL+C to quit)

After connection, your input to web socket: [{“ticket”:”UNIQUE_TICKET”},{“type”:”orderbook”,”codes”:[“KRW-BTC”]}] After the input, you will receive the data from the web socket:

< {“type”:”orderbook”,”code”:”KRW- BTC”,”timestamp”:1668495774440,”total_ask_size”:11.400931790000001,”total_bid_size”:3.10816646 99999996,”orderbook_units”:[{“ask_price”:2.2855E7,”bid_price”:2.2845E7,”ask_size”:2.21720611,”bid _size”:0.00164598},{“ask_price”:2.286E7,”bid_price”:2.2844E7,”ask_size”:1.07409042,”bid_size”:0.39 629050},{“ask_price”:2.2861E7,”bid_price”:2.2843E7,”ask_size”:0.13138600,”bid_size”:0.07457449},{ “ask_price”:2.2862E7,”bid_price”:2.2842E7,”ask_size”:1.11673137,”bid_size”:0.41861210},{“ask_pric e”:2.2863E7,”bid_price”:2.2841E7,”ask_size”:0.695,”bid_size”:0.23034224},{“ask_price”:2.2864E7,”bi d_price”:2.284E7,”ask_size”:0.24999199,”bid_size”:0.00146232},{“ask_price”:2.2865E7,”bid_price”:2. 283E7,”ask_size”:0.06318533,”bid_size”:0.50251088},{“ask_price”:2.2866E7,”bid_price”:2.2827E7,”as k_size”:0.46969651,”bid_size”:0.08409668},{“ask_price”:2.2867E7,”bid_price”:2.2826E7,”ask_size”:1. 68992953,”bid_size”:0.00087619},{“ask_price”:2.2868E7,”bid_price”:2.2825E7,”ask_size”:0.86078502 ,”bid_size”:0.00044389},{“ask_price”:2.2869E7,”bid_price”:2.2821E7,”ask_size”:0.01956419,”bid_size “:0.058},{“ask_price”:2.2872E7,”bid_price”:2.282E7,”ask_size”:2.06000000,”bid_size”:0.45073815},{” ask_price”:2.2874E7,”bid_price”:2.2818E7,”ask_size”:0.74898200,”bid_size”:0.00043825},{“ask_price “:2.2875E7,”bid_price”:2.2817E7,”ask_size”:0.00354223,”bid_size”:0.17213480},{“ask_price”:2.2876E 7,”bid_price”:2.2816E7,”ask_size”:0.00084109,”bid_size”:0.716}],”stream_type”:”REALTIME”}

Your text data file is now called stream-data-upbit.txt. Print out the data after “orderbook_units” only. You will add a new line of data as they arrive. It should be like the following:

$ ./step_b.py
$ tail -n 10 stream-data-upbit.txt

btckrw@orderbook,[{“ask_price”:2.2855E7,”bid_price”:2.2845E7,”ask_size”:2.21720611,”bid_size”:0.00164598},{“ask_pri ce”:2.286E7,”bid_price”:2.2844E7,”ask_size”:1.07409042,”bid_size”:0.39629050},{“ask_price”:2.2861E7,”bid_price”:2.28 43E7,”ask_size”:0.13138600,”bid_size”:0.07457449},{“ask_price”:2.2862E7,”bid_price”:2.2842E7,”ask_size”:1.11673137, “bid_size”:0.41861210},{“ask_price”:2.2863E7,”bid_price”:2.2841E7,”ask_size”:0.695,”bid_size”:0.23034224},{“ask_price “:2.2864E7,”bid_price”:2.284E7,”ask_size”:0.24999199,”bid_size”:0.00146232},{“ask_price”:2.2865E7,”bid_price”:2.283E 7,”ask_size”:0.06318533,”bid_size”:0.50251088},{“ask_price”:2.2866E7,”bid_price”:2.2827E7,”ask_size”:0.46969651,”bid _size”:0.08409668},{“ask_price”:2.2867E7,”bid_price”:2.2826E7,”ask_size”:1.68992953,”bid_size”:0.00087619},{“ask_pri ce”:2.2868E7,”bid_price”:2.2825E7,”ask_size”:0.86078502,”bid_size”:0.00044389},{“ask_price”:2.2869E7,”bid_price”:2.2 821E7,”ask_size”:0.01956419,”bid_size”:0.058},{“ask_price”:2.2872E7,”bid_price”:2.282E7,”ask_size”:2.06000000,”bid_si ze”:0.45073815},{“ask_price”:2.2874E7,”bid_price”:2.2818E7,”ask_size”:0.74898200,”bid_size”:0.00043825},{“ask_price” :2.2875E7,”bid_price”:2.2817E7,”ask_size”:0.00354223,”bid_size”:0.17213480},{“ask_price”:2.2876E7,”bid_price”:2.2816 E7,”ask_size”:0.00084109,”bid_size”:0.716}] btckrw@orderbook,[{“ask_price”:2.2855E7,”bid_price”:2.2846E7,”ask_size”:2.21720611,”bid_size”:0.875},{“ask_price”:2. 286E7,”bid_price”:2.2845E7,”ask_size”:1.07409042,”bid_size”:0.00164598},{“ask_price”:2.2861E7,”bid_price”:2.2844E7, “ask_size”:0.13138600,”bid_size”:0.39629050},{“ask_price”:2.2862E7,”bid_price”:2.2843E7,”ask_size”:1.11673137,”bid_s ize”:0.07457449},{“ask_price”:2.2863E7,”bid_price”:2.2842E7,”ask_size”:0.695,”bid_size”:0.41861210},{“ask_price”:2.28 64E7,”bid_price”:2.2841E7,”ask_size”:0.24999199,”bid_size”:0.23034224},{“ask_price”:2.2865E7,”bid_price”:2.284E7,”as k_size”:0.06318533,”bid_size”:0.00146232},{“ask_price”:2.2866E7,”bid_price”:2.283E7,”ask_size”:0.46969651,”bid_size”: 0.50251088},{“ask_price”:2.2867E7,”bid_price”:2.2827E7,”ask_size”:1.68992953,”bid_size”:0.08409668},{“ask_price”:2.2 868E7,”bid_price”:2.2826E7,”ask_size”:0.86078502,”bid_size”:0.00087619},{“ask_price”:2.2869E7,”bid_price”:2.2825E7, “ask_size”:0.01956419,”bid_size”:0.00044389},{“ask_price”:2.2872E7,”bid_price”:2.2821E7,”ask_size”:2.06000000,”bid_s ize”:0.058},{“ask_price”:2.2874E7,”bid_price”:2.282E7,”ask_size”:0.74898200,”bid_size”:0.45073815},{“ask_price”:2.287 5E7,”bid_price”:2.2818E7,”ask_size”:0.00354223,”bid_size”:0.00043825},{“ask_price”:2.2876E7,”bid_price”:2.2817E7,”as k_size”:0.00084109,”bid_size”:0.17213480}]

btckrw@orderbook, …

*Step C) This is a kinda BONUS.

You will take the codes from Step A and B to combine two stream data into a single file. You need to figure out how to open two stream connections for Binance and Upbit simultaneously. You may use thread (multi-thread or multi-process) to run two receiving clients, however, the output file must be a single text file: stream-data-multi.txt. The order of the streams may be random.

$ ./step_c.py
$ tail -n 10 stream-data-multi.txt

btcusdt@orderbook,bids:[[“16702.06000000″,”0.00069000”],[“16701.76000000″,”0.00861000”],[“16701.75000000″,”0.001 49000”],[“16701.32000000″,”0.04320000”],[“16701.31000000″,”0.01571000″]],”asks”:[[“16702.84000000″,”0.05546000”], [“16702.85000000″,”0.02665000”],[“16702.86000000″,”0.03324000”],[“16703.34000000″,”0.01139000”],[“16703.3900000 0″,”0.03000000”]],asks:[[“16702.84000000″,”0.05546000”],[“16702.85000000″,”0.02665000”],[“16702.86000000″,”0.0332 4000”],[“16703.34000000″,”0.01139000”],[“16703.39000000″,”0.03000000”]]

btcusdt@trade, p:16728.50000000,q:0.00626000 btckrw@orderbook,[{“ask_price”:2.2855E7,”bid_price”:2.2846E7,”ask_size”:2.21720611,”bid_size”:0.875},{“ask_price”:2. 286E7,”bid_price”:2.2845E7,”ask_size”:1.07409042,”bid_size”:0.00164598},{“ask_price”:2.2861E7,”bid_price”:2.2844E7, “ask_size”:0.13138600,”bid_size”:0.39629050},{“ask_price”:2.2862E7,”bid_price”:2.2843E7,”ask_size”:1.11673137,”bid_s ize”:0.07457449},{“ask_price”:2.2863E7,”bid_price”:2.2842E7,”ask_size”:0.695,”bid_size”:0.41861210},{“ask_price”:2.28 64E7,”bid_price”:2.2841E7,”ask_size”:0.24999199,”bid_size”:0.23034224},{“ask_price”:2.2865E7,”bid_price”:2.284E7,”as k_size”:0.06318533,”bid_size”:0.00146232},{“ask_price”:2.2866E7,”bid_price”:2.283E7,”ask_size”:0.46969651,”bid_size”: 0.50251088},{“ask_price”:2.2867E7,”bid_price”:2.2827E7,”ask_size”:1.68992953,”bid_size”:0.08409668},{“ask_price”:2.2 868E7,”bid_price”:2.2826E7,”ask_size”:0.86078502,”bid_size”:0.00087619},{“ask_price”:2.2869E7,”bid_price”:2.2825E7, “ask_size”:0.01956419,”bid_size”:0.00044389},{“ask_price”:2.2872E7,”bid_price”:2.2821E7,”ask_size”:2.06000000,”bid_s ize”:0.058},{“ask_price”:2.2874E7,”bid_price”:2.282E7,”ask_size”:0.74898200,”bid_size”:0.45073815},{“ask_price”:2.287 5E7,”bid_price”:2.2818E7,”ask_size”:0.00354223,”bid_size”:0.00043825},{“ask_price”:2.2876E7,”bid_price”:2.2817E7,”as k_size”:0.00084109,”bid_size”:0.17213480}]
btcusdt@orderbook, …
btckrw@orderbook, …
btcusdt@trade, …

  • Assignment3-o87mh3.zip