In [ ]:
from requests import post, get
import json
from rich import print
from time import sleep
In [ ]:
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"
In [ ]:
# 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)
In [ ]:
# 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
In [ ]:
print("resulting PnL: " + str(trader()['pnl']))
resulting PnL: 1819.5900000000015