def test_create_asks(): o = { 'account': '123', 'side': 'ask', 'product': 'A-B', 'price': 100.0, 'size': 5, } m = {} market.add_account(m, '123') market.add_funds(m, '123', 'A', 10000) prices = [99.0, 100.0, 101.0] for price in prices: o = deepcopy(o) o['price'] = price market.create_order(m, **o) asks = m['products']['A-B']['asks'] assert (asks[0][0] == 99.0) assert (asks[1][0] == 100.0) assert (asks[2][0] == 101.0) assert (m['accounts']['123']['balances']['A'] == 10000 - sum(prices) * 5)
def test_add_funds(): m = {} market.add_account(m, 'acct0') market.add_account(m, 'acct1') market.add_currency(m, 'cur0', '0.001') market.add_funds(m, 'acct0', 'cur0', 101.0) market.add_funds(m, 'acct1', 'cur0', 105.0) assert (m['accounts']['acct0']['balances']['cur0'] == 101.0) assert (m['accounts']['acct1']['balances']['cur0'] == 105.0)
def test_cancel_order(): o = { 'account': '123', 'side': 'ask', 'product': 'A-B', 'price': 100.0, 'size': 5, } m = {} market.add_account(m, '123') market.add_funds(m, '123', 'A', 10000) order, _ = market.create_order(m, **o) # pudb.set_trace() market.cancel_order(m, order['id']) x = 0
def test_fill_orders(): bid = { 'account': '123', 'side': 'bid', 'product': 'A-B', 'price': 100.0, 'size': 5, } ask = { 'account': '456', 'side': 'ask', 'product': 'A-B', 'price': 100.0, 'size': 5, } m = {} market.add_account(m, '123') market.add_account(m, '456') market.add_currency(m, 'A', '0.001') market.add_currency(m, 'B', '0.001') market.add_product(m, 'A-B', '0.001', '100', '0.001') pudb.set_trace() market.add_funds(m, '123', 'B', 10000) market.add_funds(m, '456', 'A', 10000) assert (m['accounts']['123']['balances']['B'] == 10000) assert (m['accounts']['456']['balances']['A'] == 10000) market.create_order(m, **bid) assert (m['accounts']['123']['balances']['B'] == 10000 - 500.0) market.create_order(m, **ask) assert (m['accounts']['123']['balances']['A'] == 500) assert (m['accounts']['456']['balances']['B'] == 500)
import json import market from random import choice, random import itertools as it exchange = {} accounts = ['user%d' % i for i in range(5)] currencies = ['A', 'B', 'C'] products = ['%s-%s' % p for p in it.permutations(currencies, 2)] side = ['ask', 'bid'] for account, currency in it.product(accounts, currencies): market.add_funds(exchange, account, currency, 10000) fill_count = 0 for i in range(10000): params = { 'account': choice(accounts), 'product': choice(products), 'side': choice(side), 'price': random() * 10, 'size': random() * 10, } order, fills = market.create_order(exchange, **params) for fill in fills: fill_count += 1 if fill['size'] <= 0: raise Exception('invalid size!!!') print(json.dumps(fill)) print('%d orders filled' % fill_count)