Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
285457f
Merge pull request #34 from fund3/develop
dev1-fund3 May 8, 2019
709593d
Merge pull request #37 from fund3/develop
dev1-fund3 May 17, 2019
5d6b927
Merge pull request #38 from fund3/develop
dev1-fund3 May 18, 2019
9a5fc5c
Merge pull request #40 from fund3/develop
dev1-fund3 May 22, 2019
74fb501
Added single client response handler for handling logon_ack and auth_…
calvinleungyk May 24, 2019
94f0a1d
Fixed datetime import
calvinleungyk May 24, 2019
ec44110
Fixed datetime import
calvinleungyk May 24, 2019
fc9d7cc
updated omega_protocol
calvinleungyk May 24, 2019
7eb8540
Fixed scheduler issue
calvinleungyk May 24, 2019
f6918a8
Update single_client_response_handler.py
calvinleungyk May 28, 2019
6545a8c
Merge pull request #41 from fund3/dev/builtin_session_refresh
calvinleungyk May 28, 2019
9b1d5d0
Added checks for empty rejectionreason
calvinleungyk May 31, 2019
6546935
Merge pull request #43 from fund3/fix/rejection_reason
calvinleungyk May 31, 2019
bb55405
Fixed rejection reason
calvinleungyk May 31, 2019
a285907
Merge pull request #44 from fund3/fix/rejection_reason
calvinleungyk May 31, 2019
46518f9
Updated single client omega connection
calvinleungyk Jun 4, 2019
f8bd41c
Updated single client omega connection
calvinleungyk Jun 4, 2019
fe2c2ca
Merge pull request #45 from fund3/fix/encapsulation
calvinleungyk Jun 4, 2019
beeaeb2
Fixed param name
calvinleungyk Jun 5, 2019
09ce313
Exposed public methods in single client omega connection
calvinleungyk Jun 5, 2019
5bfbda5
Removed too generic Exception catch
calvinleungyk Jun 5, 2019
84d00fe
Resolved logger issue with single client response handler
calvinleungyk Jun 5, 2019
053944a
Added wrapper start function for single client omega connection
calvinleungyk Jun 5, 2019
4083fe1
Added test message support
calvinleungyk Jun 24, 2019
83b5786
Updated examples and removed examples in logon_logoff for session ref…
calvinleungyk Jun 24, 2019
f93c076
Fixed tests
calvinleungyk Jun 24, 2019
1cf0881
Fixed tests
calvinleungyk Jun 24, 2019
8e8037a
Fixed tests
calvinleungyk Jun 24, 2019
d48da74
Merge pull request #47 from fund3/dev/test_message
calvinleungyk Jun 24, 2019
bfc7446
Fixed tests
calvinleungyk Jun 24, 2019
f6a4e25
Merge pull request #48 from fund3/dev/test_message
calvinleungyk Jun 24, 2019
09a5370
Quick fix add method to set sender comp id
calvinleungyk Jul 15, 2019
3a8f126
Quick fix add method to set sender comp id
calvinleungyk Jul 15, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 33 additions & 57 deletions omega_client/communication/omega_connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@

from omega_client.communication.request_sender import RequestSender
from omega_client.communication.response_receiver import ResponseReceiver
from omega_client.communication.single_client_request_sender import \
SingleClientRequestSender
from omega_client.messaging.common_types import AccountBalancesReport, \
AccountCredentials, AccountDataReport, AccountInfo, \
AuthorizationRefresh, ExchangePropertiesReport, \
Expand Down Expand Up @@ -211,6 +209,19 @@ def logoff(self, request_header: RequestHeader):
"""
return self._request_sender.logoff(request_header=request_header)

def send_test_message(self, request_header: RequestHeader,
test_message: str):
"""
Sends a test message to Omega for checking connectivity. Client id
and sender_comp_id won't be checked although they are required,
so fake ids can be sent.
:param request_header: Header parameter object for requests.
:param test_message: (str) Test message.
:return: (capnp._DynamicStructBuilder) test_message capnp object.
"""
return self._request_sender.send_test_message(
request_header=request_header, test_message=test_message)

def send_heartbeat(self, request_header: RequestHeader):
"""
Sends a heartbeat to Omega for maintaining and verifying connection.
Expand Down Expand Up @@ -460,9 +471,11 @@ def request_authorization_refresh(self,
)


def configure_default_omega_connection(omega_endpoint: str,
omega_server_key: str,
response_handler: ResponseHandler):
def configure_default_omega_connection(
zmq_context: zmq.Context,
omega_endpoint: str,
omega_server_key: str,
response_handler: ResponseHandler):
"""
Set up a TesConnection that comes with request_sender and response_receiver.
:param omega_endpoint: (str) The zmq endpoint to connect to Omega.
Expand All @@ -472,55 +485,18 @@ def configure_default_omega_connection(omega_endpoint: str,
message.
:return: omega_connection, request_sender, response_receiver
"""
ZMQ_CONTEXT = zmq.Context.instance()
request_sender = RequestSender(ZMQ_CONTEXT,
REQUEST_SENDER_ENDPOINT)
response_receiver = ResponseReceiver(ZMQ_CONTEXT,
RESPONSE_RECEIVER_ENDPOINT,
response_handler)
omega_connection = OmegaConnection(ZMQ_CONTEXT,
omega_endpoint,
REQUEST_SENDER_ENDPOINT,
RESPONSE_RECEIVER_ENDPOINT,
request_sender,
response_receiver,
server_zmq_encryption_key=omega_server_key)
return omega_connection, request_sender, response_receiver


def configure_single_client_omega_connection(omega_endpoint: str,
omega_server_key: str,
client_id: int,
sender_comp_id: str,
response_handler: ResponseHandler):
"""
Set up a TesConnection that comes with request_sender and
response_receiver. Sets the default client_id and sender_comp_id for the
request sender.
Note that each machine should be assigned a unique sender_comp_id even
when the client_id is the same.
:param omega_endpoint: (str) The zmq endpoint to connect to Omega.
:param omega_server_key: (str) The public key of the Omega server.
:param client_id: (int) The client id assigned by Fund3.
:param sender_comp_id: (str) str representation of a unique Python uuid.
:param response_handler: (ResponseHandler) The handler object that will
be called in a callback function when omega_connection receives a
message.
:return: omega_connection, request_sender, response_receiver
"""
ZMQ_CONTEXT = zmq.Context.instance()
request_sender = SingleClientRequestSender(ZMQ_CONTEXT,
REQUEST_SENDER_ENDPOINT,
client_id,
sender_comp_id)
response_receiver = ResponseReceiver(ZMQ_CONTEXT,
RESPONSE_RECEIVER_ENDPOINT,
response_handler)
omega_connection = OmegaConnection(ZMQ_CONTEXT,
omega_endpoint,
REQUEST_SENDER_ENDPOINT,
RESPONSE_RECEIVER_ENDPOINT,
request_sender,
response_receiver,
server_zmq_encryption_key=omega_server_key)
return omega_connection, request_sender, response_receiver
request_sender = RequestSender(zmq_context=zmq_context,
zmq_endpoint=REQUEST_SENDER_ENDPOINT)
response_receiver = ResponseReceiver(
zmq_context=zmq_context,
zmq_endpoint=RESPONSE_RECEIVER_ENDPOINT,
response_handler=response_handler)
omega_connection = OmegaConnection(
zmq_context=zmq_context,
omega_endpoint=omega_endpoint,
request_sender_endpoint=REQUEST_SENDER_ENDPOINT,
response_receiver_endpoint=RESPONSE_RECEIVER_ENDPOINT,
request_sender=request_sender,
response_receiver=response_receiver,
server_zmq_encryption_key=omega_server_key)
return omega_connection
23 changes: 15 additions & 8 deletions omega_client/communication/request_sender.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,18 @@

from omega_client.fpg.fpg_lib import create_SOR_order, FPGAuth
from omega_client.messaging.common_types import AccountBalancesReport, \
AccountCredentials, AccountInfo, AuthorizationGrant, AuthorizationRefresh, \
AccountCredentials, AccountInfo, AuthorizationRefresh, \
CompletedOrdersReport, ExchangePropertiesReport, \
ExecutionReport, OpenPositionsReport, Order, OrderInfo, \
OrderType, RequestHeader, TimeInForce, WorkingOrdersReport, Batch, OPO, OCO
from omega_client.messaging.message_factory import cancel_all_orders_capnp, \
cancel_order_capnp, heartbeat_capnp, logoff_capnp, logon_capnp, \
place_order_capnp, replace_order_capnp, request_account_balances_capnp, \
request_account_data_capnp, request_auth_refresh_capnp, \
request_completed_orders_capnp, request_exchange_properties_capnp, \
request_open_positions_capnp, request_order_status_capnp, \
request_server_time_capnp, request_working_orders_capnp, \
place_contingent_order_capnp
omega_test_message_capnp, place_order_capnp, replace_order_capnp, \
request_account_balances_capnp, request_account_data_capnp, \
request_auth_refresh_capnp, request_completed_orders_capnp, \
request_exchange_properties_capnp, request_open_positions_capnp, \
request_order_status_capnp, request_server_time_capnp, \
request_working_orders_capnp, place_contingent_order_capnp

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -57,7 +57,7 @@ def __init__(self,
zmq_endpoint: str,
outgoing_message_queue: Queue = None,
queue_polling_timeout_seconds: int = 1,
name: str='TesRequestSender'):
name: str='OmegaRequestSender'):
assert zmq_context
assert zmq_endpoint

Expand Down Expand Up @@ -168,6 +168,13 @@ def send_heartbeat(self, request_header: RequestHeader):
self._queue_message(omega_message)
return body

def send_test_message(self, request_header: RequestHeader,
test_message: str):
omega_message, body = omega_test_message_capnp(
request_header=request_header, test_message=test_message)
self._queue_message(omega_message)
return body

def request_server_time(self, request_header: RequestHeader):
"""
Request Omega server time for syncing client and server timestamps.
Expand Down
2 changes: 1 addition & 1 deletion omega_client/communication/response_receiver.py
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,6 @@ def _handle_binary_omega_message(self, binary_msg: bytes):
response = trade_message.type.response
response_type = response.body.which()
self._handle_response(response_type, response)
except (Exception, TypeError) as e:
except TypeError as e:
logger.error('Exception in decoding message' + repr(e),
extra={'exception': repr(e)})
Loading