basic order submission and cancelling with kraken
parent
b21bbf5031
commit
96dd5c632f
|
@ -243,18 +243,17 @@ class Client:
|
||||||
uri_path = f'/0/private/{method}'
|
uri_path = f'/0/private/{method}'
|
||||||
data['nonce'] = str(int(1000*time.time()))
|
data['nonce'] = str(int(1000*time.time()))
|
||||||
resp = await self._private(method, data, uri_path)
|
resp = await self._private(method, data, uri_path)
|
||||||
err = resp['error']
|
return resp
|
||||||
if err:
|
|
||||||
print(err)
|
|
||||||
return resp['result']
|
|
||||||
|
|
||||||
async def get_positions(
|
async def get_positions(
|
||||||
self,
|
self,
|
||||||
data: Dict[str, Any] = {}
|
data: Dict[str, Any] = {}
|
||||||
) -> 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
|
## 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 = {}
|
positions = {}
|
||||||
vols = {}
|
vols = {}
|
||||||
|
|
||||||
|
@ -284,7 +283,7 @@ class Client:
|
||||||
symbol: str,
|
symbol: str,
|
||||||
price: float,
|
price: float,
|
||||||
action: str,
|
action: str,
|
||||||
size: str,
|
size: float,
|
||||||
# account: str,
|
# account: str,
|
||||||
reqid: int = None,
|
reqid: int = None,
|
||||||
) -> int:
|
) -> int:
|
||||||
|
@ -296,14 +295,26 @@ class Client:
|
||||||
"userref": reqid,
|
"userref": reqid,
|
||||||
"ordertype": "limit",
|
"ordertype": "limit",
|
||||||
"type": action,
|
"type": action,
|
||||||
"volume": size,
|
"volume": str(size),
|
||||||
"pair": symbol,
|
"pair": symbol,
|
||||||
"price": price,
|
"price": str(price),
|
||||||
"validate": True
|
# set to True test AddOrder call without a real submission
|
||||||
|
"validate": False
|
||||||
}
|
}
|
||||||
resp = await self.kraken_endpoint('AddOrder', data)
|
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)
|
print(resp)
|
||||||
return reqid
|
|
||||||
|
|
||||||
async def symbol_info(
|
async def symbol_info(
|
||||||
self,
|
self,
|
||||||
|
@ -495,10 +506,11 @@ async def handle_order_requests(
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# validate
|
# validate
|
||||||
|
temp_id = next(userref_counter)
|
||||||
order = BrokerdOrder(**request_msg)
|
order = BrokerdOrder(**request_msg)
|
||||||
|
|
||||||
# call our client api to submit the order
|
# call our client api to submit the order
|
||||||
reqid = await client.submit_limit(
|
resp = await client.submit_limit(
|
||||||
|
|
||||||
oid=order.oid,
|
oid=order.oid,
|
||||||
symbol=order.symbol,
|
symbol=order.symbol,
|
||||||
|
@ -506,9 +518,25 @@ async def handle_order_requests(
|
||||||
action=order.action,
|
action=order.action,
|
||||||
size=order.size,
|
size=order.size,
|
||||||
## XXX: how do I handle new orders
|
## XXX: how do I handle new orders
|
||||||
reqid=next(userref_counter),
|
reqid=temp_id,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
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
|
# deliver ack that order has been submitted to broker routing
|
||||||
await ems_order_stream.send(
|
await ems_order_stream.send(
|
||||||
BrokerdOrderAck(
|
BrokerdOrderAck(
|
||||||
|
@ -519,6 +547,9 @@ async def handle_order_requests(
|
||||||
# broker specific request id
|
# broker specific request id
|
||||||
reqid=reqid,
|
reqid=reqid,
|
||||||
|
|
||||||
|
# account the made the order
|
||||||
|
account=order.account
|
||||||
|
|
||||||
).dict()
|
).dict()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue