Skip to content

Commit f62730f

Browse files
committed
execution push
1 parent d45424b commit f62730f

File tree

7 files changed

+40
-3
lines changed

7 files changed

+40
-3
lines changed

tigeropen/common/consts/push_destinations.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@
99
TRADE_ASSET = 'trade/asset'
1010
TRADE_POSITION = 'trade/position'
1111
TRADE_ORDER = 'trade/order'
12+
TRADE_EXECUTION = 'trade/execution'

tigeropen/common/consts/push_subscriptions.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@
99
SUBSCRIPTION_TRADE_ASSET = 'Asset'
1010
SUBSCRIPTION_TRADE_POSITION = 'Position'
1111
SUBSCRIPTION_TRADE_ORDER = 'OrderStatus'
12+
SUBSCRIPTION_TRADE_EXECUTION = 'TradeExecution'

tigeropen/common/consts/push_types.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ class ResponseType(Enum):
4545
SUBSCRIBE_ORDER_STATUS = 9
4646
SUBSCRIBE_POSITION = 10
4747
SUBSCRIBE_ASSET = 11
48+
SUBSCRIBE_TRADE_EXECUTION = 12
4849

4950
# 行情
5051
GET_MARKET_STATE_END = 101

tigeropen/push/push_client.py

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@
1717
from tigeropen.common.consts import OrderStatus
1818
from tigeropen.common.consts.params import P_SDK_VERSION, P_SDK_VERSION_PREFIX
1919
from tigeropen.common.consts.push_destinations import QUOTE, QUOTE_DEPTH, QUOTE_FUTURE, QUOTE_OPTION, TRADE_ASSET, \
20-
TRADE_ORDER, TRADE_POSITION, TRADE_TICK
20+
TRADE_ORDER, TRADE_POSITION, TRADE_TICK, TRADE_EXECUTION
2121
from tigeropen.common.consts.push_subscriptions import SUBSCRIPTION_QUOTE, SUBSCRIPTION_QUOTE_DEPTH, \
2222
SUBSCRIPTION_QUOTE_OPTION, SUBSCRIPTION_QUOTE_FUTURE, SUBSCRIPTION_TRADE_ASSET, SUBSCRIPTION_TRADE_POSITION, \
23-
SUBSCRIPTION_TRADE_ORDER, SUBSCRIPTION_TRADE_TICK
23+
SUBSCRIPTION_TRADE_ORDER, SUBSCRIPTION_TRADE_TICK, SUBSCRIPTION_TRADE_EXECUTION
2424
from tigeropen.common.consts.push_types import RequestType, ResponseType
2525
from tigeropen.common.consts.quote_keys import QuoteChangeKey, QuoteKeyType
2626
from tigeropen.common.exceptions import ApiException
@@ -97,6 +97,7 @@ def __init__(self, host, port, use_ssl=True, connection_timeout=120, heartbeats=
9797
self.asset_changed = None
9898
self.position_changed = None
9999
self.order_changed = None
100+
self.execution_changed = None
100101
self.connect_callback = None
101102
self.disconnect_callback = None
102103
self.subscribe_callback = None
@@ -273,6 +274,16 @@ def on_message(self, frame):
273274
items.append((camel_to_underline(key), value))
274275
if items:
275276
self.order_changed(account, items)
277+
elif response_type == str(ResponseType.SUBSCRIBE_TRADE_EXECUTION.value):
278+
data = json.loads(body)
279+
if self.execution_changed:
280+
if 'account' in data:
281+
account = data.pop('account', None)
282+
items = []
283+
for key, value in data.items():
284+
items.append((camel_to_underline(key), value))
285+
if items:
286+
self.execution_changed(account, items)
276287
elif response_type == str(ResponseType.GET_SUBSCRIBE_END.value):
277288
if self.subscribe_callback:
278289
self.subscribe_callback(headers.get('destination'), json.loads(body))
@@ -345,6 +356,20 @@ def unsubscribe_order(self, id=None):
345356
"""
346357
self._handle_trade_unsubscribe(TRADE_ORDER, SUBSCRIPTION_TRADE_ORDER, sub_id=id)
347358

359+
def subscribe_execution(self, account=None):
360+
"""
361+
订阅订单执行明细
362+
:return:
363+
"""
364+
return self._handle_trade_subscribe(TRADE_EXECUTION, SUBSCRIPTION_TRADE_EXECUTION, account)
365+
366+
def unsubscribe_execution(self, id=None):
367+
"""
368+
退订订单执行明细
369+
:return:
370+
"""
371+
self._handle_trade_unsubscribe(TRADE_EXECUTION, SUBSCRIPTION_TRADE_EXECUTION, sub_id=id)
372+
348373
def subscribe_quote(self, symbols, quote_key_type=QuoteKeyType.TRADE, focus_keys=None):
349374
"""
350375
订阅行情更新

tigeropen/trade/domain/order.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class Order:
1717
"trail_stop_price", "limit_price", "aux_price", "trailing_percent", "percent_offset", "action",
1818
"order_type", "time_in_force", "outside_rth", "order_legs", "algo_params", "algo_strategy",
1919
"secret_key", "liquidation", "discount", "attr_desc", "source", 'adjust_limit', 'sub_ids', "user_mark",
20-
"update_time"]
20+
"update_time", "expire_time"]
2121

2222
def __init__(self, account, contract, action, order_type, quantity, limit_price=None, aux_price=None,
2323
trail_stop_price=None, trailing_percent=None, percent_offset=None, time_in_force=None,
@@ -60,6 +60,7 @@ def __init__(self, account, contract, action, order_type, quantity, limit_price=
6060
例如:0.001 代表向上调整且幅度不超过 0.1%;-0.001 代表向下调整且幅度不超过 0.1%。默认 0 表示不调整
6161
- sub_ids id list of sub orders.
6262
- user_mark: user's remark
63+
- expire_time: GTD order's expire time
6364
"""
6465

6566
self.id = id
@@ -98,6 +99,7 @@ def __init__(self, account, contract, action, order_type, quantity, limit_price=
9899
self.adjust_limit = kwargs.get('adjust_limit')
99100
self.sub_ids = kwargs.get('sub_ids')
100101
self.user_mark = kwargs.get('user_mark')
102+
self.expire_time = kwargs.get('expire_time')
101103

102104
def to_dict(self):
103105
dct = {name: getattr(self, name) for name in self.__slots__ if name not in ORDER_FIELDS_TO_IGNORE}

tigeropen/trade/request/model.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -774,6 +774,7 @@ def __init__(self):
774774
self.algo_params = None
775775
self.adjust_limit = None
776776
self.user_mark = None
777+
self.expire_time = None
777778

778779
def to_openapi_dict(self):
779780
params = super().to_openapi_dict()
@@ -831,6 +832,8 @@ def to_openapi_dict(self):
831832
params['adjust_limit'] = self.adjust_limit
832833
if self.user_mark is not None:
833834
params['user_mark'] = self.user_mark
835+
if self.expire_time is not None:
836+
params['expire_time'] = self.expire_time
834837

835838
if self.order_legs:
836839
if len(self.order_legs) > 2:

tigeropen/trade/trade_client.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -569,6 +569,7 @@ def place_order(self, order):
569569
params.secret_key = order.secret_key if order.secret_key else self._secret_key
570570
params.adjust_limit = order.adjust_limit
571571
params.user_mark = order.user_mark
572+
params.expire_time = order.expire_time
572573
params.lang = get_enum_value(self._lang)
573574

574575
request = OpenApiRequest(PLACE_ORDER, biz_model=params)
@@ -615,6 +616,9 @@ def modify_order(self, order, quantity=None, limit_price=None, aux_price=None,
615616
params.trailing_percent = trailing_percent if trailing_percent is not None else order.trailing_percent
616617
params.percent_offset = percent_offset if percent_offset is not None else order.percent_offset
617618
params.time_in_force = time_in_force if time_in_force is not None else order.time_in_force
619+
expire_time = kwargs.get('expire_time', order.expire_time)
620+
if expire_time is not None:
621+
params.expire_time = expire_time
618622
params.outside_rth = outside_rth if outside_rth is not None else order.outside_rth
619623
params.secret_key = order.secret_key if order.secret_key else self._secret_key
620624
params.adjust_limit = kwargs.get('adjust_limit', order.adjust_limit)

0 commit comments

Comments
 (0)