Source code for omega_client.communication.single_client_request_sender

from queue import Queue
from typing import List

import capnp
import zmq

from omega_client.messaging.common_types import AccountCredentials, AccountInfo, \
    Order, OrderInfo, OrderType, RequestHeader, TimeInForce
from omega_client.communication.request_sender import RequestSender


[docs]class SingleClientRequestSender: """ Wrapper around RequestSender with added boilerplate code support use cases with only 1 client_id. """ def __init__(self, zmq_context: zmq.Context, connection_string: str, client_id: int, sender_comp_id: str, outgoing_message_queue: Queue = None): self._request_sender = RequestSender( zmq_context=zmq_context, zmq_endpoint=connection_string, outgoing_message_queue=outgoing_message_queue) self._request_header = RequestHeader(client_id=client_id, sender_comp_id=sender_comp_id, access_token='', request_id=0) # TODO (low priority) change _request_header to use variable request_id # client should override self._request_header in their implementation # and use their own method for generating request_ids
[docs] def set_access_token(self, access_token: str): """ Sets the access_token in self._request_header. :param access_token: (str) Access token granted by Omega. Note that access_token is ignored in logon. """ self._request_header.access_token = access_token
[docs] def start(self): self._request_sender.start()
[docs] def stop(self): self._request_sender.stop()
[docs] def is_running(self): """ Return True if the RequestSender is running, False otherwise. """ return self._request_sender.is_running()
[docs] def cleanup(self): self._request_sender.cleanup()
""" ############################################################################ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Outgoing OmegaMessages ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ----------------- Public Methods to be called by client ------------------- ############################################################################ """
[docs] def logon(self, client_secret: str, credentials: List[AccountCredentials]): return self._request_sender.logon( request_header=self._request_header, client_secret=client_secret, credentials=credentials)
[docs] def logoff(self): return self._request_sender.logoff(request_header=self._request_header)
[docs] def send_heartbeat(self): return self._request_sender.send_heartbeat( request_header=self._request_header)
[docs] def request_server_time(self): return self._request_sender.request_server_time( request_header=self._request_header)
[docs] def place_order(self, order: Order): return self._request_sender.place_order( request_header=self._request_header, order=order)
[docs] def replace_order(self, account_info: AccountInfo, order_id: str, order_type: str=OrderType.market.name, quantity: float = 0.0, price: float = 0.0, stop_price: float = 0.0, time_in_force: str = TimeInForce.gtc.name, expire_at: float = 0.0): return self._request_sender.replace_order( request_header=self._request_header, account_info=account_info, order_id=order_id, order_type=order_type, quantity=quantity, price=price, stop_price=stop_price, time_in_force=time_in_force, expire_at=expire_at )
[docs] def cancel_order(self, account_info: AccountInfo, order_id: str): return self._request_sender.cancel_order( request_header=self._request_header, account_info=account_info, order_id=order_id)
[docs] def cancel_all_orders(self, account_info: AccountInfo, symbol: str = None, side: str = None): return self._request_sender.cancel_all_orders( request_header=self._request_header, account_info=account_info, symbol=symbol, side=side)
[docs] def request_account_data(self, account_info: AccountInfo): return self._request_sender.request_account_data( request_header=self._request_header, account_info=account_info)
[docs] def request_open_positions(self, account_info: AccountInfo): return self._request_sender.request_open_positions( request_header=self._request_header, account_info=account_info)
[docs] def request_account_balances(self, account_info: AccountInfo): return self._request_sender.request_account_balances( request_header=self._request_header, account_info=account_info)
[docs] def request_working_orders(self, account_info: AccountInfo): return self._request_sender.request_working_orders( request_header=self._request_header, account_info=account_info)
[docs] def request_order_status(self, account_info: AccountInfo, order_id: str): return self._request_sender.request_order_status( request_header=self._request_header, account_info=account_info, order_id=order_id)
[docs] def request_completed_orders(self, account_info: AccountInfo, count: int = None, since: float = None): return self._request_sender.request_completed_orders( request_header=self._request_header, account_info=account_info, count=count, since=since)
[docs] def request_exchange_properties(self, exchange: str): return self._request_sender.request_exchange_properties( request_header=self._request_header, exchange=exchange)