Files
spark/testing/api-sample-scripts/sample_generator.ipynb

8.6 KiB

installs

In [1]:
%pip install websocket-client
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: websocket-client in /home/arham/.local/lib/python3.10/site-packages (1.5.1)
Note: you may need to restart the kernel to use updated packages.

Imports

In [21]:
import json
import websocket

data

packets
In [40]:
outer = lambda method,params:{
    "jsonrpc": 2,
    "method": method,
    "params": params,
    "id": 1
}
enter_order_params=lambda type,custom:{
    "price":1646.8,
    "quantity":1,
    "order_type":type,
    "side":"buy",
    "account":"main",
    "user":"bts",
    "exchange_securty_name": "ETH-31MAR23",
    "venue":"deribit",
    "custom":custom
}
upd_order_params=lambda type,custom:{
    "order_id":538001,
    "price":1641.8,
    "quantity":2,
    "order_type":type,
    "custom":custom
}
simple_filter={
    "symbol":["ETH"],
    "expiration":["2023/04/28"],
    "venue":["deribit"]
}
order_customs = {
    "limit":{},
    "iceberg":{"showquanity":5},
    "cover":{"hedge_ticks":2,"cancel_on_external_hedge_cancel":True,"cancel_hedges_on_cancel":True,"detach_hedges":False}
    }
order_customs_upd = {
    "limit":{},
    "iceberg":{"showquanity":7},
    "cover":{"hedge_ticks":6,"cancel_on_external_hedge_cancel":False,"cancel_hedges_on_cancel":True,"detach_hedges":False}}
code
In [41]:
REST_code=lambda payload :f'''import json
import websocket
json_payload = {json.dumps(payload,indent=4)}
json_string = json.dumps(json_payload)
ws_url = "ws://localhost:8080"
# Define a callback function to handle received messages
def on_message(ws, message):
    print("Received message: ", message)
    ws.close()

# Define a callback function to handle the WebSocket connection opening
def on_open(ws):
    print("WebSocket connection opened")
    ws.send(json_string)

# Define a callback function to handle the WebSocket connection closing
def on_close(ws):
    print("WebSocket connection closed")
# Create a WebSocket connection and send the JSON payload
ws = websocket.WebSocketApp(ws_url, on_message=on_message, on_open=on_open, on_close=on_close)

# Start the WebSocket connection and listen for incoming messages
ws.run_forever()
input("press any key to continue")'''
In [42]:
sub_code=lambda payload :f'''import json
import websocket
json_payload = {json.dumps(payload,indent=4)}
json_string = json.dumps(json_payload)
ws_url = "ws://localhost:8080"
message_count = [0]
# Define a callback function to handle received messages
def on_message(ws, message):
    print("Received message: ", message)
    if(message_count[0]>0):
        ws.close()
    message_count[0]+=1

# Define a callback function to handle the WebSocket connection opening
def on_open(ws):
    print("WebSocket connection opened")
    ws.send(json_string)

# Define a callback function to handle the WebSocket connection closing
def on_close(ws):
    print("WebSocket connection closed")
# Create a WebSocket connection and send the JSON payload
ws = websocket.WebSocketApp(ws_url, on_message=on_message, on_open=on_open, on_close=on_close)

# Start the WebSocket connection and listen for incoming messages
ws.run_forever()
input("press any key to continue")
'''

file writers

In [43]:
def file_writer(name,val):
    with open(name,"w") as f:
        f.write(val)
subscription
In [44]:
get_sub = lambda typ,filter: outer("subscribe",{"subscription_id":1,"type":typ,"filter":filter})
subscriptions={key:get_sub(key,simple_filter) for key in ["books","orders","fills","trades","securities","price_stats","price_tickers"]}
for key, value in subscriptions.items():
    file_writer(f"subscribe_{key}.py",sub_code(value))
order entry
In [45]:
get_enter_order = lambda ord_type,params:outer("enter_order",enter_order_params(ord_type,params))
for key, value in order_customs.items():
    file_writer(f"enter_{key}_order.py",REST_code(get_enter_order(key,value)))
update order
In [46]:
get_upd_order = lambda ord_type,params:outer("update_order",upd_order_params(ord_type,params))
for key, value in order_customs.items():
    file_writer(f"upd_{key}_order.py",REST_code(get_upd_order(key,value)))
delete order
In [47]:
file_writer("delete_order.py",REST_code(outer("delete_order",{"order_id":541002})))

Run Examples

In [51]:
%run subscribe_price_stats.py
WebSocket connection opened
Received message:  {"jsonrpc":2.0,"id":"1","status":"1","result":{"subscription_id":"1"}}
In [ ]: