def test_place_contingent_oco_order(fake_request_sender): order0 = Order(account_info=AccountInfo(account_id=100), client_order_id=str(8675309), client_order_link_id='a123', symbol='BTC/USD', side=Side.buy.name, order_type=OrderType.limit.name, quantity=1.1, price=6000.01, stop_price=0.0, time_in_force=TimeInForce.gtc.name, expire_at=0.0, leverage_type=LeverageType.none.name) order1 = Order(account_info=AccountInfo(account_id=100), client_order_id=str(8675310), client_order_link_id='a124', symbol='BTC/USD', side=Side.sell.name, order_type=OrderType.limit.name, quantity=1.1, price=6200.11, stop_price=0.0, time_in_force=TimeInForce.gtc.name, expire_at=0.0, leverage_type=LeverageType.none.name) contingent_order = OCO(orders=[order0, order1]) contingent_order_capnp = fake_request_sender.place_contingent_order( request_header=__FAKE_REQUEST_HEADER, contingent_order=contingent_order) assert type( contingent_order_capnp) == capnp.lib.capnp._DynamicStructBuilder oco_order0 = contingent_order_capnp.type.oco.orders[0] assert oco_order0.accountInfo.accountID == 100 assert oco_order0.symbol == 'BTC/USD' assert oco_order0.side == 'buy' assert oco_order0.orderType == 'limit' assert oco_order0.quantity == 1.1 assert oco_order0.price == 6000.01 assert oco_order0.stopPrice == 0.0 assert oco_order0.timeInForce == 'gtc' assert oco_order0.expireAt == 0.0 oco_order1 = contingent_order_capnp.type.oco.orders[1] assert oco_order1.accountInfo.accountID == 100 assert oco_order1.symbol == 'BTC/USD' assert oco_order1.side == 'sell' assert oco_order1.orderType == 'limit' assert oco_order1.quantity == 1.1 assert oco_order1.price == 6200.11 assert oco_order1.stopPrice == 0.0 assert oco_order1.timeInForce == 'gtc' assert oco_order1.expireAt == 0.0
def test_place_order_margin_custom(fake_request_sender): custom_margin_order = Order(account_info=AccountInfo(account_id=100), client_order_id=str(9876), client_order_link_id='a123', symbol='BTC/USD', side=Side.buy.name, order_type=OrderType.market.name, quantity=1.1, price=0.0, time_in_force=TimeInForce.gtc.name, leverage_type=LeverageType.custom.name, leverage=2.0) # custom margin order = fake_request_sender.place_order( request_header=__FAKE_REQUEST_HEADER, order=custom_margin_order) assert type(order) == capnp.lib.capnp._DynamicStructBuilder assert order.accountInfo.accountID == 100 assert order.symbol == 'BTC/USD' assert order.side == 'buy' assert order.orderType == 'market' assert order.quantity == 1.1 assert order.price == 0.0 assert order.timeInForce == 'gtc' assert order.leverageType == msgs_capnp.LeverageType.custom assert order.leverage == 2.0
def test_place_order(fake_request_sender): order = Order(account_info=AccountInfo(account_id=100), client_order_id=str(8675309), client_order_link_id='a123', symbol='BTC/USD', side=Side.buy.name, order_type=OrderType.limit.name, quantity=1.1, price=6000.01, stop_price=0.0, time_in_force=TimeInForce.gtc.name, expire_at=0.0, leverage_type=LeverageType.none.name) order = fake_request_sender.place_order( request_header=__FAKE_REQUEST_HEADER, order=order) assert type(order) == capnp.lib.capnp._DynamicStructBuilder assert order.accountInfo.accountID == 100 assert order.symbol == 'BTC/USD' assert order.side == 'buy' assert order.orderType == 'limit' assert order.quantity == 1.1 assert order.price == 6000.01 assert order.stopPrice == 0.0 assert order.timeInForce == 'gtc' assert order.expireAt == 0.0
def test_place_order_margin_default(fake_request_sender): default_margin_order = Order( account_info=AccountInfo(account_id=100), client_order_id=str(9876), client_order_link_id='a123', symbol='BTC/USD', side=Side.buy.name, order_type=OrderType.market.name, quantity=1.1, price=0.0, stop_price=0.0, time_in_force=TimeInForce.gtc.name, expire_at=0.0, leverage_type=LeverageType.exchangeDefault.name) # exchange default margin order = fake_request_sender.place_order(order=default_margin_order) assert type(order) == capnp.lib.capnp._DynamicStructBuilder assert order.accountInfo.accountID == 100 assert order.symbol == 'BTC/USD' assert order.side == 'buy' assert order.orderType == 'market' assert order.quantity == 1.1 assert order.price == 0.0 assert order.timeInForce == 'gtc' assert order.leverageType == msgs_capnp.LeverageType.exchangeDefault assert order.leverage == 0.0 assert order.stopPrice == 0.0 assert order.expireAt == 0.0
def convert_fpg_orders_to_omg_orders(fpg_order: dict, accounts: Dict[str, AccountInfo]): symbol = fpg_order.get('base') + '/' + fpg_order.get('quote') exchange = fpg_order.get('exchangeName').lower() quantity = float(fpg_order.get('expectedSize')) price = float(fpg_order.get('expectedPrice')) side = fpg_order.get('orderType').lower() client_order_id = str(fpg_order.get('name').split('/')[-1]) return Order( account_info=accounts.get(exchange), client_order_id=client_order_id, symbol=symbol, side=side, order_type=OrderType.limit.name, quantity=quantity, price=price )
def main(): client_id = 1 sender_comp_id = str(uuid.uuid4()) omega_connection = configure_single_client_omega_connection( OMEGA_ENDPOINT, OMEGA_SERVER_KEY, client_id, sender_comp_id, PrintingResponseHandler()) omega_connection.start() omega_connection.wait_until_running() account_id = 2 api_key = "api_key" secret_key = "secret_key" passphrase = "passphrase" credentials = AccountCredentials(AccountInfo(account_id), api_key, secret_key, passphrase) omega_connection.logon([credentials]) omega_connection.send_heartbeat() order = Order( account_info=AccountInfo(account_id=account_id), # ID generated by client to keep track of the order client_order_id=str(123), client_order_link_id='test', # A str to identify and group orders symbol='ETH/USD', side=Side.sell.name, order_type=OrderType.market.name, # Optional param quantity=1.1, price=0.0, time_in_force=TimeInForce.gtc.name, leverage_type=LeverageType.none.name ) omega_connection.place_order(order) time.sleep(2) omega_connection.logoff() time.sleep(2) omega_connection.cleanup()
def test_place_contingent_opo_batch_order(fake_request_sender): order0 = Order(account_info=AccountInfo(account_id=100), client_order_id=str(8675309), client_order_link_id='a123', symbol='BTC/USD', side=Side.buy.name, order_type=OrderType.limit.name, quantity=1.1, price=6000.01, stop_price=0.0, time_in_force=TimeInForce.gtc.name, expire_at=0.0, leverage_type=LeverageType.none.name) order10 = Order(account_info=AccountInfo(account_id=100), client_order_id=str(8675310), client_order_link_id='a124', symbol='BTC/USD', side=Side.buy.name, order_type=OrderType.limit.name, quantity=1.1, price=5910.11, stop_price=0.0, time_in_force=TimeInForce.gtc.name, expire_at=0.0, leverage_type=LeverageType.none.name) order11 = Order(account_info=AccountInfo(account_id=100), client_order_id=str(8675310), client_order_link_id='a125', symbol='BTC/USD', side=Side.buy.name, order_type=OrderType.limit.name, quantity=1.1, price=5900.11, stop_price=0.0, time_in_force=TimeInForce.gtc.name, expire_at=0.0, leverage_type=LeverageType.none.name) contingent_order = OPO(primary=order0, secondary=Batch(orders=[order10, order11])) contingent_order_capnp = fake_request_sender.place_contingent_order( request_header=__FAKE_REQUEST_HEADER, contingent_order=contingent_order) assert type( contingent_order_capnp) == capnp.lib.capnp._DynamicStructBuilder primary_opo = contingent_order_capnp.type.opo.primary assert primary_opo.accountInfo.accountID == 100 assert primary_opo.symbol == 'BTC/USD' assert primary_opo.side == 'buy' assert primary_opo.orderType == 'limit' assert primary_opo.quantity == 1.1 assert primary_opo.price == 6000.01 assert primary_opo.stopPrice == 0.0 assert primary_opo.timeInForce == 'gtc' assert primary_opo.expireAt == 0.0 batch_order0 = contingent_order_capnp.type.opo.secondary.batch[0] assert batch_order0.accountInfo.accountID == 100 assert batch_order0.symbol == 'BTC/USD' assert batch_order0.side == 'buy' assert batch_order0.orderType == 'limit' assert batch_order0.quantity == 1.1 assert batch_order0.price == 5910.11 assert batch_order0.stopPrice == 0.0 assert batch_order0.timeInForce == 'gtc' assert batch_order0.expireAt == 0.0 batch_order1 = contingent_order_capnp.type.opo.secondary.batch[1] assert batch_order1.accountInfo.accountID == 100 assert batch_order1.symbol == 'BTC/USD' assert batch_order1.side == 'buy' assert batch_order1.orderType == 'limit' assert batch_order1.quantity == 1.1 assert batch_order1.price == 5900.11 assert batch_order1.stopPrice == 0.0 assert batch_order1.timeInForce == 'gtc' assert batch_order1.expireAt == 0.0
auth = FPGAuth(API_KEY, API_SECRET) # Hit an error trying to fetch a nonexistent order api_url = 'https://fund3-staging.floating.group/v1/orders/foo' r = requests.get(api_url, auth=auth) print(r.status_code) print(r.json()) # successful usage of create_SOR_order function orders, status_code, error_message = create_SOR_order( order=Order( account_info=AccountInfo(account_id=100), # ignored, junk client_order_id='vnuiebwe', # ignored, junk symbol='BTC/USD', side=Side.buy.name, order_type=OrderType.limit.name, quantity=6., price=5000.), accounts={Exchange.gemini.name: AccountInfo(account_id=200), Exchange.kraken.name: AccountInfo(account_id=201)}, auth=auth ) for order in orders: print('order:', order) print('status_code', status_code) print('error_message', error_message) # unsuccessful usage of create_SOR_order function (itBit is unsupported) # error code 400