basic order submission and cancelling with kraken
parent
b21bbf5031
commit
96dd5c632f
|
@ -243,18 +243,17 @@ class Client:
|
|||
uri_path = f'/0/private/{method}'
|
||||
data['nonce'] = str(int(1000*time.time()))
|
||||
resp = await self._private(method, data, uri_path)
|
||||
err = resp['error']
|
||||
if err:
|
||||
print(err)
|
||||
return resp['result']
|
||||
return resp
|
||||
|
||||
async def get_positions(
|
||||
self,
|
||||
data: Dict[str, Any] = {}
|
||||
) -> Dict[str, Any]:
|
||||
balances = await self.kraken_endpoint('Balance', data)
|
||||
resp = await self.kraken_endpoint('Balance', data)
|
||||
balances = resp['result']
|
||||
## TODO: grab all entries, not just first 50
|
||||
traders = await self.kraken_endpoint('TradesHistory', data)
|
||||
resp = await self.kraken_endpoint('TradesHistory', data)
|
||||
traders = resp['result']
|
||||
positions = {}
|
||||
vols = {}
|
||||
|
||||
|
@ -284,7 +283,7 @@ class Client:
|
|||
symbol: str,
|
||||
price: float,
|
||||
action: str,
|
||||
size: str,
|
||||
size: float,
|
||||
# account: str,
|
||||
reqid: int = None,
|
||||
) -> int:
|
||||
|
@ -296,14 +295,26 @@ class Client:
|
|||
"userref": reqid,
|
||||
"ordertype": "limit",
|
||||
"type": action,
|
||||
"volume": size,
|
||||
"volume": str(size),
|
||||
"pair": symbol,
|
||||
"price": price,
|
||||
"validate": True
|
||||
"price": str(price),
|
||||
# set to True test AddOrder call without a real submission
|
||||
"validate": False
|
||||
}
|
||||
resp = await self.kraken_endpoint('AddOrder', data)
|
||||
return resp
|
||||
|
||||
async def submit_cancel(
|
||||
self,
|
||||
reqid: str,
|
||||
) -> None:
|
||||
"""Send cancel request for order id ``reqid``.
|
||||
|
||||
"""
|
||||
# txid is a transaction id given by kraken
|
||||
data = {"txid": reqid}
|
||||
resp = await self.kraken_endpoint('CancelOrder', data)
|
||||
print(resp)
|
||||
return reqid
|
||||
|
||||
async def symbol_info(
|
||||
self,
|
||||
|
@ -495,10 +506,11 @@ async def handle_order_requests(
|
|||
continue
|
||||
|
||||
# validate
|
||||
temp_id = next(userref_counter)
|
||||
order = BrokerdOrder(**request_msg)
|
||||
|
||||
# call our client api to submit the order
|
||||
reqid = await client.submit_limit(
|
||||
resp = await client.submit_limit(
|
||||
|
||||
oid=order.oid,
|
||||
symbol=order.symbol,
|
||||
|
@ -506,21 +518,40 @@ async def handle_order_requests(
|
|||
action=order.action,
|
||||
size=order.size,
|
||||
## XXX: how do I handle new orders
|
||||
reqid=next(userref_counter),
|
||||
reqid=temp_id,
|
||||
)
|
||||
|
||||
# deliver ack that order has been submitted to broker routing
|
||||
await ems_order_stream.send(
|
||||
BrokerdOrderAck(
|
||||
err = resp['error']
|
||||
if err:
|
||||
log.error(f'Failed to submit order')
|
||||
await ems_order_stream.send(
|
||||
BrokerdError(
|
||||
oid=order.oid,
|
||||
reqid=temp_id,
|
||||
symbol=order.symbol,
|
||||
reason="Failed order submission",
|
||||
broker_details=resp
|
||||
).dict()
|
||||
)
|
||||
else:
|
||||
## TODO: handle multiple cancels
|
||||
## txid is an array of strings
|
||||
reqid = resp['result']['txid'][0]
|
||||
# deliver ack that order has been submitted to broker routing
|
||||
await ems_order_stream.send(
|
||||
BrokerdOrderAck(
|
||||
|
||||
# ems order request id
|
||||
oid=order.oid,
|
||||
# ems order request id
|
||||
oid=order.oid,
|
||||
|
||||
# broker specific request id
|
||||
reqid=reqid,
|
||||
# broker specific request id
|
||||
reqid=reqid,
|
||||
|
||||
).dict()
|
||||
)
|
||||
# account the made the order
|
||||
account=order.account
|
||||
|
||||
).dict()
|
||||
)
|
||||
|
||||
elif action == 'cancel':
|
||||
msg = BrokerdCancel(**request_msg)
|
||||
|
|
Loading…
Reference in New Issue