Skip to content

Commit 96247f7

Browse files
committed
Merge branch 'feat_transaction_page' into 'master'
transaction page See merge request server/openapi/openapi-python-sdk!246
2 parents ec61750 + 86d23db commit 96247f7

File tree

5 files changed

+65
-32
lines changed

5 files changed

+65
-32
lines changed

tigeropen/common/util/order_utils.py

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from tigeropen.common.consts import OrderStatus, OrderType
1010

1111

12-
def market_order(account, contract, action, quantity):
12+
def market_order(account, contract, action, quantity, time_in_force='DAY'):
1313
"""
1414
市价单
1515
:param account:
@@ -18,10 +18,10 @@ def market_order(account, contract, action, quantity):
1818
:param quantity:
1919
:return:
2020
"""
21-
return Order(account, contract, action, 'MKT', quantity)
21+
return Order(account, contract, action, 'MKT', quantity, time_in_force=time_in_force)
2222

2323

24-
def market_order_by_amount(account, contract, action, amount):
24+
def market_order_by_amount(account, contract, action, amount, time_in_force='DAY'):
2525
"""
2626
按金额的市价单(用于基金)
2727
:param account:
@@ -30,10 +30,10 @@ def market_order_by_amount(account, contract, action, amount):
3030
:param amount:
3131
:return:
3232
"""
33-
return Order(account, contract, action, 'MKT', total_cash_amount=amount)
33+
return Order(account, contract, action, 'MKT', total_cash_amount=amount, time_in_force=time_in_force)
3434

3535

36-
def limit_order(account, contract, action, quantity, limit_price):
36+
def limit_order(account, contract, action, quantity, limit_price, time_in_force='DAY'):
3737
"""
3838
限价单
3939
:param account:
@@ -43,10 +43,10 @@ def limit_order(account, contract, action, quantity, limit_price):
4343
:param limit_price: 限价的价格
4444
:return:
4545
"""
46-
return Order(account, contract, action, 'LMT', quantity, limit_price=limit_price)
46+
return Order(account, contract, action, 'LMT', quantity, limit_price=limit_price, time_in_force=time_in_force)
4747

4848

49-
def stop_order(account, contract, action, quantity, aux_price):
49+
def stop_order(account, contract, action, quantity, aux_price, time_in_force='DAY'):
5050
"""
5151
止损单
5252
:param account:
@@ -56,10 +56,10 @@ def stop_order(account, contract, action, quantity, aux_price):
5656
:param aux_price: 触发止损单的价格
5757
:return:
5858
"""
59-
return Order(account, contract, action, 'STP', quantity, aux_price=aux_price)
59+
return Order(account, contract, action, 'STP', quantity, aux_price=aux_price, time_in_force=time_in_force)
6060

6161

62-
def stop_limit_order(account, contract, action, quantity, limit_price, aux_price):
62+
def stop_limit_order(account, contract, action, quantity, limit_price, aux_price, time_in_force='DAY'):
6363
"""
6464
限价止损单
6565
:param account:
@@ -70,10 +70,11 @@ def stop_limit_order(account, contract, action, quantity, limit_price, aux_price
7070
:param aux_price: 触发止损单的价格
7171
:return:
7272
"""
73-
return Order(account, contract, action, 'STP_LMT', quantity, limit_price=limit_price, aux_price=aux_price)
73+
return Order(account, contract, action, 'STP_LMT', quantity, limit_price=limit_price, aux_price=aux_price,
74+
time_in_force=time_in_force)
7475

7576

76-
def trail_order(account, contract, action, quantity, trailing_percent=None, aux_price=None):
77+
def trail_order(account, contract, action, quantity, trailing_percent=None, aux_price=None, time_in_force='DAY'):
7778
"""
7879
移动止损单
7980
:param account:
@@ -84,7 +85,8 @@ def trail_order(account, contract, action, quantity, trailing_percent=None, aux_
8485
:param aux_price: 价差 aux_price 和 trailing_percent 两者互斥
8586
:return:
8687
"""
87-
return Order(account, contract, action, 'TRAIL', quantity, trailing_percent=trailing_percent, aux_price=aux_price)
88+
return Order(account, contract, action, 'TRAIL', quantity, trailing_percent=trailing_percent,
89+
aux_price=aux_price, time_in_force=time_in_force)
8890

8991

9092
def auction_limit_order(account, contract, action, quantity, limit_price, time_in_force='DAY'):
@@ -135,7 +137,7 @@ def order_leg(leg_type, price=None, time_in_force='DAY', outside_rth=None, limit
135137
quantity=quantity)
136138

137139

138-
def limit_order_with_legs(account, contract, action, quantity, limit_price, order_legs=None):
140+
def limit_order_with_legs(account, contract, action, quantity, limit_price, order_legs=None, time_in_force='DAY'):
139141
"""
140142
限价单 + 附加订单(仅环球账户支持)
141143
:param account:
@@ -148,7 +150,8 @@ def limit_order_with_legs(account, contract, action, quantity, limit_price, orde
148150
"""
149151
if order_legs and len(order_legs) > 2:
150152
raise Exception('2 order legs at most')
151-
return Order(account, contract, action, 'LMT', quantity, limit_price=limit_price, order_legs=order_legs)
153+
return Order(account, contract, action, 'LMT', quantity, limit_price=limit_price, order_legs=order_legs,
154+
time_in_force=time_in_force)
152155

153156

154157
def algo_order_params(start_time=None, end_time=None, no_take_liq=None, allow_past_end_time=None,
@@ -166,7 +169,7 @@ def algo_order_params(start_time=None, end_time=None, no_take_liq=None, allow_pa
166169
allow_past_end_time=allow_past_end_time, participation_rate=participation_rate)
167170

168171

169-
def algo_order(account, contract, action, quantity, strategy, algo_params=None, limit_price=None):
172+
def algo_order(account, contract, action, quantity, strategy, algo_params=None, limit_price=None, time_in_force='DAY'):
170173
"""
171174
算法订单
172175
:param account:
@@ -179,7 +182,7 @@ def algo_order(account, contract, action, quantity, strategy, algo_params=None,
179182
:return:
180183
"""
181184
return Order(account, contract, action, order_type=strategy, quantity=quantity, algo_params=algo_params,
182-
limit_price=limit_price, outside_rth=False)
185+
limit_price=limit_price, outside_rth=False, time_in_force=time_in_force)
183186

184187

185188
def contract_leg(symbol=None, sec_type=None, expiry=None, strike=None, put_call=None, action=None,

tigeropen/trade/request/model.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -730,6 +730,7 @@ def __init__(self):
730730
self._start_date = None
731731
self._end_date = None
732732
self._limit = None
733+
self._page_token = None
733734

734735
@property
735736
def account(self):
@@ -819,6 +820,14 @@ def right(self):
819820
def right(self, value):
820821
self._right = value
821822

823+
@property
824+
def page_token(self):
825+
return self._page_token
826+
827+
@page_token.setter
828+
def page_token(self, value):
829+
self._page_token = value
830+
822831
def to_openapi_dict(self):
823832
params = super().to_openapi_dict()
824833
if self.account:
@@ -854,6 +863,9 @@ def to_openapi_dict(self):
854863
if self.right:
855864
params['right'] = self.right
856865

866+
if self.page_token:
867+
params['page_token'] = self.page_token
868+
857869
return params
858870

859871

tigeropen/trade/response/orders_response.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,11 @@
3333

3434

3535
class OrdersResponse(TigerResponse):
36-
def __init__(self):
36+
def __init__(self, page_token=None):
3737
super(OrdersResponse, self).__init__()
38-
self.orders = []
38+
self.result = []
39+
self.next_page_token = None
40+
self._page_token = page_token
3941
self._is_success = None
4042

4143
def parse_response_content(self, response_content, secret_key=None):
@@ -48,11 +50,12 @@ def parse_response_content(self, response_content, secret_key=None):
4850
for item in self.data['items']:
4951
order = OrdersResponse.parse_order(item, secret_key)
5052
if order:
51-
self.orders.append(order)
53+
self.result.append(order)
54+
self.next_page_token = self.data.get('nextPageToken')
5255
elif 'symbol' in self.data:
5356
order = OrdersResponse.parse_order(self.data, secret_key)
5457
if order:
55-
self.orders.append(order)
58+
self.result.append(order)
5659

5760
@staticmethod
5861
def parse_order(item, secret_key=None):
@@ -156,3 +159,5 @@ def parse_order(item, secret_key=None):
156159
order.charges = [Charge(**camel_to_underline_obj(charge)) for charge in order_fields['charges']]
157160
return order
158161

162+
def __str__(self):
163+
return f'<{self.__class__.__name__}: result: {self.result}, next_page_token: {self.next_page_token}>'

tigeropen/trade/response/transactions_response.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@
99

1010

1111
class TransactionsResponse(TigerResponse):
12-
def __init__(self):
12+
def __init__(self, page_token=None):
1313
super(TransactionsResponse, self).__init__()
14-
self.transactions = []
14+
self.result = []
15+
self.next_page_token = None
16+
self._page_token = page_token
1517
self._is_success = None
1618

1719
def parse_response_content(self, response_content):
@@ -23,7 +25,8 @@ def parse_response_content(self, response_content):
2325
for item in self.data.get('items', list()):
2426
trans = self._parse_transactions(string_utils.camel_to_underline_obj(item))
2527
if trans:
26-
self.transactions.append(trans)
28+
self.result.append(trans)
29+
self.next_page_token = self.data.get('nextPageToken')
2730

2831
def _parse_transactions(self, item_dict):
2932
trans = Transaction()
@@ -36,3 +39,6 @@ def _parse_transactions(self, item_dict):
3639
setattr(trans, map_k, v)
3740
trans.contract = contract
3841
return trans
42+
43+
def __str__(self):
44+
return f'<{self.__class__.__name__}: result: {self.result}, next_page_token: {self.next_page_token}>'

tigeropen/trade/trade_client.py

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ def get_aggregate_assets(self, account=None, seg_type=SegmentType.SEC, base_curr
340340
raise ApiException(response.code, response.message)
341341

342342
def get_orders(self, account=None, sec_type=None, market=Market.ALL, symbol=None, start_time=None, end_time=None,
343-
limit=100, is_brief=False, states=None, sort_by=None, seg_type=None, lang=None):
343+
limit=100, is_brief=False, states=None, sort_by=None, seg_type=None, lang=None, page_token=None):
344344
"""
345345
获取订单列表
346346
:param account:
@@ -372,13 +372,17 @@ def get_orders(self, account=None, sec_type=None, market=Market.ALL, symbol=None
372372
params.sort_by = get_enum_value(sort_by)
373373
params.lang = get_enum_value(lang) if lang else get_enum_value(self._lang)
374374
params.seg_type = get_enum_value(seg_type)
375+
params.page_token = page_token
375376
request = OpenApiRequest(ORDERS, biz_model=params)
376377
response_content = self.__fetch_data(request)
377378
if response_content:
378379
response = OrdersResponse()
379380
response.parse_response_content(response_content, secret_key=params.secret_key)
380381
if response.is_success():
381-
return response.orders
382+
if page_token is not None:
383+
return response
384+
else:
385+
return response.result
382386
else:
383387
raise ApiException(response.code, response.message)
384388
return None
@@ -410,7 +414,7 @@ def get_open_orders(self, account=None, sec_type=None, market=Market.ALL, symbol
410414
response = OrdersResponse()
411415
response.parse_response_content(response_content, secret_key=params.secret_key)
412416
if response.is_success():
413-
return response.orders
417+
return response.result
414418
else:
415419
raise ApiException(response.code, response.message)
416420
return None
@@ -440,7 +444,7 @@ def get_cancelled_orders(self, account=None, sec_type=None, market=Market.ALL, s
440444
response = OrdersResponse()
441445
response.parse_response_content(response_content, secret_key=params.secret_key)
442446
if response.is_success():
443-
return response.orders
447+
return response.result
444448
else:
445449
raise ApiException(response.code, response.message)
446450
return None
@@ -470,7 +474,7 @@ def get_filled_orders(self, account=None, sec_type=None, market=Market.ALL, symb
470474
response = OrdersResponse()
471475
response.parse_response_content(response_content, secret_key=params.secret_key)
472476
if response.is_success():
473-
return response.orders
477+
return response.result
474478
else:
475479
raise ApiException(response.code, response.message)
476480
return None
@@ -498,7 +502,7 @@ def get_order(self, account=None, id=None, order_id=None, is_brief=False, show_c
498502
response = OrdersResponse()
499503
response.parse_response_content(response_content, secret_key=params.secret_key)
500504
if response.is_success():
501-
return response.orders[0] if len(response.orders) == 1 else None
505+
return response.result[0] if len(response.result) == 1 else None
502506
else:
503507
raise ApiException(response.code, response.message)
504508
return None
@@ -642,7 +646,7 @@ def place_order(self, order, lang=None):
642646
if response.is_success():
643647
order.id = response.id
644648
order.sub_ids = response.sub_ids
645-
order.orders = response.orders
649+
order.result = response.orders
646650
if order.order_id is None and response.order_id:
647651
order.order_id = response.order_id
648652
return response.id
@@ -722,7 +726,7 @@ def cancel_order(self, account=None, id=None, order_id=None):
722726
raise ApiException(response.code, response.message)
723727

724728
def get_transactions(self, account=None, order_id=None, symbol=None, sec_type=None, start_time=None, end_time=None,
725-
limit=100, expiry=None, strike=None, put_call=None, lang=None):
729+
limit=100, expiry=None, strike=None, put_call=None, lang=None, page_token=None):
726730
"""
727731
query order transactions, only prime accounts are supported.
728732
:param account: account id. If not passed, the default account is used
@@ -749,14 +753,17 @@ def get_transactions(self, account=None, order_id=None, symbol=None, sec_type=No
749753
params.expiry = expiry
750754
params.strike = strike
751755
params.right = put_call
756+
params.page_token = page_token
752757
params.lang = get_enum_value(lang) if lang else get_enum_value(self._lang)
753758
request = OpenApiRequest(ORDER_TRANSACTIONS, biz_model=params)
754759
response_content = self.__fetch_data(request)
755760
if response_content:
756761
response = TransactionsResponse()
757762
response.parse_response_content(response_content)
758763
if response.is_success():
759-
return response.transactions
764+
if page_token is not None:
765+
return response
766+
return response.result
760767
else:
761768
raise ApiException(response.code, response.message)
762769
return None

0 commit comments

Comments
 (0)