from requests import post, get
import json
from rich import print
from time import sleep
TOKEN = 'testtoken'
endpoint = "http://localhost:8080" # should substitute with real endpoint
trade_endpoint = endpoint + "/trade"
trader_endpoint = endpoint + "/trader/" + TOKEN
market_endpoint = endpoint + "/market"
mid_market_endpoint = market_endpoint + "/mid"
cancel_all_endpoint = endpoint + "/cancel_all"
news_endpoint = endpoint + "/news"
# click trade APIs
def trade(quantity: int, order_type: str, price: float, token=TOKEN):
"""submit a trade. example return:
{
"message": "Order received",
"payload": {
"id": "7b33a1b6-5e5a-4baf-b735-34d94d5196d2"
},
"result": "success"
}
"""
res = post(trade_endpoint,
json={
"quantity": quantity,
"order_type": order_type,
"price": price,
"token": token
})
return res.text
def get_mid():
"""get market mid price. example return: 101.01 """
return eval(get(mid_market_endpoint).text)
def trader():
"""get trader info. example return:
{
"cash": 0,
"name": "Allen Chen",
"net position": 0,
"open_orders": [],
"pnl": 0.0
}
"""
return json.loads(get(trader_endpoint).text)
def market():
"""get best market. example:
{
"best ask price": 101.93,
"best ask qty": -12,
"best bid price": 97.06,
"best bid qty": 4
}
"""
return json.loads(get(market_endpoint).text)
def cancel_all():
"""pull all open orders. example return:
{
"2d22886d-9151-4e43-a017-07ab96e09e77": {
"reason": "N/A",
"result": "success"
},
"623445ca-e7b1-4f78-bd21-b67f5d4357eb": {
"reason": "N/A",
"result": "success"
}
}
"""
res = post(cancel_all_endpoint,
json={
"token": TOKEN
})
return res.text
def clear_positions():
"""try to clear out / liquidate position."""
pos = json.loads(get(trader_endpoint).text)['net position']
to_trade = - pos
trade(to_trade, "limit", 100, TOKEN)
# example trading robot
def clear_positions():
"""helper function: try to clear out / liquidate position."""
pos = json.loads(get(trader_endpoint).text)['net position']
to_trade = - pos
trade(to_trade, "limit", 100, TOKEN)
for i in range(10):
trade(100, "limit", price = 99)
trade(-100, "limit", price = 101)
print("order submitted")
sleep(1)
cancel_all()
print("orders pulled")
clear_positions()
order submitted
orders pulled
order submitted
orders pulled
order submitted
orders pulled
order submitted
orders pulled
order submitted
orders pulled
order submitted
orders pulled
order submitted
orders pulled
order submitted
orders pulled
order submitted
orders pulled
order submitted
orders pulled
print("resulting PnL: " + str(trader()['pnl']))
resulting PnL: 1819.5900000000015