Skip to content

Commit efc7cae

Browse files
committed
get_bars date param
1 parent b648f4b commit efc7cae

File tree

5 files changed

+45
-35
lines changed

5 files changed

+45
-35
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
## 3.4.0 (2025-06-17)
2+
### New
3+
- `QuoteClient.get_bars` 增加 `date` 参数,用于查询历史分钟K线
4+
- 一部分接口增加 `lang` 参数,支持指定语言
5+
### Mod
6+
- `TigerOpenClientConfig` 配置里默认语言改为英文
7+
18
## 3.3.9 (2025-06-12)
29
### New
310
- 订单回调增加属性 `timeInForce`

tigeropen/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@
44
55
@author: gaoan
66
"""
7-
__VERSION__ = '3.3.9'
7+
__VERSION__ = '3.4.0'

tigeropen/quote/quote_client.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,7 @@ def get_timeline_history(self, symbols, date, right=QuoteRight.BR):
442442
raise ApiException(response.code, response.message)
443443

444444
def get_bars(self, symbols, period=BarPeriod.DAY, begin_time=-1, end_time=-1, right=QuoteRight.BR, limit=251,
445-
lang=None, page_token=None, trade_session=None):
445+
lang=None, page_token=None, trade_session=None, date=None):
446446
"""
447447
获取K线数据
448448
:param symbols: 股票代号列表
@@ -454,6 +454,7 @@ def get_bars(self, symbols, period=BarPeriod.DAY, begin_time=-1, end_time=-1, ri
454454
:param limit: 数量限制
455455
:param lang: 语言支持: zh_CN,zh_TW,en_US
456456
:param page_token: the token of next page. only supported when exactly one symbol
457+
:param date: format: yyyyMMdd
457458
:return: pandas.DataFrame 对象,各 column 的含义如下;
458459
time: 毫秒时间戳
459460
open: Bar 的开盘价
@@ -473,6 +474,7 @@ def get_bars(self, symbols, period=BarPeriod.DAY, begin_time=-1, end_time=-1, ri
473474
params.lang = get_enum_value(lang) if lang else get_enum_value(self._lang)
474475
params.page_token = page_token if len(params.symbols) == 1 else None
475476
params.trade_session = get_enum_value(trade_session)
477+
params.date = str(date).replace('-', '').replace('/', '') if date else None
476478
request = OpenApiRequest(KLINE, biz_model=params)
477479
response_content = self.__fetch_data(request)
478480
if response_content:

tigeropen/tiger_open_config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
# 请求字符集
4848
CHARSET = 'UTF-8'
4949
# 语言
50-
LANGUAGE = Language.zh_CN
50+
LANGUAGE = Language.en_US
5151
# 请求超时时间, 单位秒, 默认15s
5252
TIMEOUT = 15
5353

tigeropen/trade/trade_client.py

Lines changed: 33 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ def __init__(self, client_config, logger=None):
5858
self._secret_key = None
5959
self._timezone = None
6060

61-
def get_managed_accounts(self, account=None):
61+
def get_managed_accounts(self, account=None, lang=None):
6262
"""
6363
获取管理的账号列表
6464
:param account:
@@ -70,7 +70,7 @@ def get_managed_accounts(self, account=None):
7070
params = AccountsParams()
7171
if account:
7272
params.account = account
73-
params.lang = get_enum_value(self._lang)
73+
params.lang = get_enum_value(lang) if lang else get_enum_value(self._lang)
7474
params.secret_key = self._secret_key
7575
request = OpenApiRequest(ACCOUNTS, biz_model=params)
7676
response_content = self.__fetch_data(request)
@@ -83,7 +83,7 @@ def get_managed_accounts(self, account=None):
8383
raise ApiException(response.code, response.message)
8484
return None
8585

86-
def get_contracts(self, symbol, sec_type=SecurityType.STK, currency=None, exchange=None):
86+
def get_contracts(self, symbol, sec_type=SecurityType.STK, currency=None, exchange=None, lang=None):
8787
"""
8888
批量获取合约
8989
:param symbol:
@@ -99,7 +99,7 @@ def get_contracts(self, symbol, sec_type=SecurityType.STK, currency=None, exchan
9999
params.sec_type = get_enum_value(sec_type)
100100
params.currency = get_enum_value(currency)
101101
params.exchange = exchange
102-
params.lang = get_enum_value(self._lang)
102+
params.lang = get_enum_value(lang) if lang else get_enum_value(self._lang)
103103
request = OpenApiRequest(CONTRACTS, biz_model=params)
104104
response_content = self.__fetch_data(request)
105105
if response_content:
@@ -113,7 +113,7 @@ def get_contracts(self, symbol, sec_type=SecurityType.STK, currency=None, exchan
113113
return None
114114

115115
def get_contract(self, symbol, sec_type=SecurityType.STK, currency=None, exchange=None, expiry=None, strike=None,
116-
put_call=None):
116+
put_call=None, lang=None):
117117
"""
118118
获取合约
119119
:param symbol:
@@ -147,7 +147,7 @@ def get_contract(self, symbol, sec_type=SecurityType.STK, currency=None, exchang
147147
params.symbol = symbol
148148
params.sec_type = get_enum_value(sec_type)
149149
params.currency = get_enum_value(currency)
150-
params.lang = get_enum_value(self._lang)
150+
params.lang = get_enum_value(lang) if lang else get_enum_value(self._lang)
151151
params.version = OPEN_API_SERVICE_VERSION_V3
152152
if expiry:
153153
params.expiry = expiry
@@ -197,7 +197,8 @@ def get_derivative_contracts(self, symbol, sec_type, expiry, lang=None):
197197
return None
198198

199199
def get_positions(self, account=None, sec_type=SecurityType.STK, currency=Currency.ALL, market=Market.ALL,
200-
symbol=None, sub_accounts=None, expiry=None, strike=None, put_call=None, asset_quote_type=None):
200+
symbol=None, sub_accounts=None, expiry=None, strike=None, put_call=None, asset_quote_type=None,
201+
lang=None):
201202
"""
202203
获取持仓数据
203204
:param account:
@@ -233,7 +234,7 @@ def get_positions(self, account=None, sec_type=SecurityType.STK, currency=Curren
233234
params.right = put_call
234235
if asset_quote_type:
235236
params.asset_quote_type = get_enum_value(asset_quote_type)
236-
params.lang = get_enum_value(self._lang)
237+
params.lang = get_enum_value(lang) if lang else get_enum_value(self._lang)
237238
request = OpenApiRequest(POSITIONS, biz_model=params)
238239
response_content = self.__fetch_data(request)
239240
if response_content:
@@ -296,7 +297,7 @@ def get_assets(self, account=None, sub_accounts=None, segment=False, market_valu
296297

297298
return None
298299

299-
def get_prime_assets(self, account=None, base_currency=None, consolidated=True):
300+
def get_prime_assets(self, account=None, base_currency=None, consolidated=True, lang=None):
300301
"""
301302
get prime account assets
302303
:param account:
@@ -306,7 +307,7 @@ def get_prime_assets(self, account=None, base_currency=None, consolidated=True):
306307
params = AssetParams()
307308
params.account = account if account else self._account
308309
params.secret_key = self._secret_key
309-
params.lang = get_enum_value(self._lang)
310+
params.lang = get_enum_value(lang) if lang else get_enum_value(self._lang)
310311
params.base_currency = get_enum_value(base_currency)
311312
params.consolidated = consolidated
312313

@@ -339,7 +340,7 @@ def get_aggregate_assets(self, account=None, seg_type=SegmentType.SEC, base_curr
339340
raise ApiException(response.code, response.message)
340341

341342
def get_orders(self, account=None, sec_type=None, market=Market.ALL, symbol=None, start_time=None, end_time=None,
342-
limit=100, is_brief=False, states=None, sort_by=None, seg_type=None):
343+
limit=100, is_brief=False, states=None, sort_by=None, seg_type=None, lang=None):
343344
"""
344345
获取订单列表
345346
:param account:
@@ -369,7 +370,7 @@ def get_orders(self, account=None, sec_type=None, market=Market.ALL, symbol=None
369370
params.is_brief = is_brief
370371
params.states = [get_enum_value(state) for state in states] if states else None
371372
params.sort_by = get_enum_value(sort_by)
372-
params.lang = get_enum_value(self._lang)
373+
params.lang = get_enum_value(lang) if lang else get_enum_value(self._lang)
373374
params.seg_type = get_enum_value(seg_type)
374375
request = OpenApiRequest(ORDERS, biz_model=params)
375376
response_content = self.__fetch_data(request)
@@ -383,7 +384,7 @@ def get_orders(self, account=None, sec_type=None, market=Market.ALL, symbol=None
383384
return None
384385

385386
def get_open_orders(self, account=None, sec_type=None, market=Market.ALL, symbol=None, start_time=None,
386-
end_time=None, parent_id=None, sort_by=None, seg_type=None, **kwargs):
387+
end_time=None, parent_id=None, sort_by=None, seg_type=None, lang=None, **kwargs):
387388
"""
388389
获取待成交订单列表. 参数同 get_orders
389390
:param parent_id: 主订单 order_id
@@ -398,7 +399,7 @@ def get_open_orders(self, account=None, sec_type=None, market=Market.ALL, symbol
398399
params.end_date = date_str_to_timestamp(end_time, self._timezone)
399400
params.parent_id = parent_id
400401
params.sort_by = get_enum_value(sort_by)
401-
params.lang = get_enum_value(self._lang)
402+
params.lang = get_enum_value(lang) if lang else get_enum_value(self._lang)
402403
params.seg_type = get_enum_value(seg_type)
403404
if kwargs:
404405
for key, value in kwargs.items():
@@ -415,7 +416,7 @@ def get_open_orders(self, account=None, sec_type=None, market=Market.ALL, symbol
415416
return None
416417

417418
def get_cancelled_orders(self, account=None, sec_type=None, market=Market.ALL, symbol=None, start_time=None,
418-
end_time=None, sort_by=None, seg_type=None, **kwargs):
419+
end_time=None, sort_by=None, seg_type=None, lang=None, **kwargs):
419420
"""
420421
获取已撤销订单列表. 参数同 get_orders
421422
"""
@@ -428,7 +429,7 @@ def get_cancelled_orders(self, account=None, sec_type=None, market=Market.ALL, s
428429
params.start_date = date_str_to_timestamp(start_time, self._timezone)
429430
params.end_date = date_str_to_timestamp(end_time, self._timezone)
430431
params.sort_by = get_enum_value(sort_by)
431-
params.lang = get_enum_value(self._lang)
432+
params.lang = get_enum_value(lang) if lang else get_enum_value(self._lang)
432433
params.seg_type = get_enum_value(seg_type)
433434
if kwargs:
434435
for key, value in kwargs.items():
@@ -445,7 +446,7 @@ def get_cancelled_orders(self, account=None, sec_type=None, market=Market.ALL, s
445446
return None
446447

447448
def get_filled_orders(self, account=None, sec_type=None, market=Market.ALL, symbol=None, start_time=None,
448-
end_time=None, sort_by=None, seg_type=None, **kwargs):
449+
end_time=None, sort_by=None, seg_type=None, lang=None, **kwargs):
449450
"""
450451
获取已成交订单列表. 参数同 get_orders
451452
"""
@@ -458,7 +459,7 @@ def get_filled_orders(self, account=None, sec_type=None, market=Market.ALL, symb
458459
params.start_date = date_str_to_timestamp(start_time, self._timezone)
459460
params.end_date = date_str_to_timestamp(end_time, self._timezone)
460461
params.sort_by = get_enum_value(sort_by)
461-
params.lang = get_enum_value(self._lang)
462+
params.lang = get_enum_value(lang) if lang else get_enum_value(self._lang)
462463
params.seg_type = get_enum_value(seg_type)
463464
if kwargs:
464465
for key, value in kwargs.items():
@@ -474,7 +475,7 @@ def get_filled_orders(self, account=None, sec_type=None, market=Market.ALL, symb
474475
raise ApiException(response.code, response.message)
475476
return None
476477

477-
def get_order(self, account=None, id=None, order_id=None, is_brief=False, show_charges=None):
478+
def get_order(self, account=None, id=None, order_id=None, is_brief=False, show_charges=None, lang=None):
478479
"""
479480
获取指定订单
480481
:param account:
@@ -490,7 +491,7 @@ def get_order(self, account=None, id=None, order_id=None, is_brief=False, show_c
490491
params.order_id = order_id
491492
params.is_brief = is_brief
492493
params.show_charges = show_charges
493-
params.lang = get_enum_value(self._lang)
494+
params.lang = get_enum_value(lang) if lang else get_enum_value(self._lang)
494495
request = OpenApiRequest(ORDERS, biz_model=params)
495496
response_content = self.__fetch_data(request)
496497
if response_content:
@@ -504,7 +505,7 @@ def get_order(self, account=None, id=None, order_id=None, is_brief=False, show_c
504505

505506
def create_order(self, account, contract, action, order_type, quantity, limit_price=None, aux_price=None,
506507
trail_stop_price=None, trailing_percent=None, percent_offset=None, time_in_force=None,
507-
outside_rth=None, order_legs=None, algo_params=None, **kwargs):
508+
outside_rth=None, order_legs=None, algo_params=None, lang=None, **kwargs):
508509
"""
509510
创建订单对象.
510511
:param account:
@@ -525,7 +526,7 @@ def create_order(self, account, contract, action, order_type, quantity, limit_pr
525526
params = AccountsParams()
526527
params.account = account if account else self._account
527528
params.secret_key = self._secret_key
528-
params.lang = get_enum_value(self._lang)
529+
params.lang = get_enum_value(lang) if lang else get_enum_value(self._lang)
529530
request = OpenApiRequest(ORDER_NO, biz_model=params)
530531
response_content = self.__fetch_data(request)
531532
if response_content:
@@ -544,7 +545,7 @@ def create_order(self, account, contract, action, order_type, quantity, limit_pr
544545

545546
return None
546547

547-
def preview_order(self, order):
548+
def preview_order(self, order, lang=None):
548549
"""
549550
预览订单
550551
:param order: Order 对象
@@ -584,7 +585,7 @@ def preview_order(self, order):
584585
params.adjust_limit = order.adjust_limit
585586
params.user_mark = order.user_mark
586587
params.expire_time = order.expire_time
587-
params.lang = get_enum_value(self._lang)
588+
params.lang = get_enum_value(lang) if lang else get_enum_value(self._lang)
588589
params.combo_type = get_enum_value(order.combo_type)
589590
params.contract_legs = order.contract_legs
590591
params.total_cash_amount = order.total_cash_amount
@@ -600,7 +601,7 @@ def preview_order(self, order):
600601
else:
601602
raise ApiException(response.code, response.message)
602603

603-
def place_order(self, order):
604+
def place_order(self, order, lang=None):
604605
"""
605606
下单
606607
:param order: Order 对象
@@ -627,7 +628,7 @@ def place_order(self, order):
627628
params.adjust_limit = order.adjust_limit
628629
params.user_mark = order.user_mark
629630
params.expire_time = order.expire_time
630-
params.lang = get_enum_value(self._lang)
631+
params.lang = get_enum_value(lang) if lang else get_enum_value(self._lang)
631632
params.combo_type = get_enum_value(order.combo_type)
632633
params.contract_legs = order.contract_legs
633634
params.total_cash_amount = order.total_cash_amount
@@ -650,7 +651,7 @@ def place_order(self, order):
650651

651652
def modify_order(self, order, quantity=None, limit_price=None, aux_price=None,
652653
trail_stop_price=None, trailing_percent=None, percent_offset=None,
653-
time_in_force=None, outside_rth=None, **kwargs):
654+
time_in_force=None, outside_rth=None, lang=None, **kwargs):
654655
"""
655656
修改订单
656657
:param order:
@@ -685,7 +686,7 @@ def modify_order(self, order, quantity=None, limit_price=None, aux_price=None,
685686
params.outside_rth = outside_rth if outside_rth is not None else order.outside_rth
686687
params.secret_key = order.secret_key if order.secret_key else self._secret_key
687688
params.adjust_limit = kwargs.get('adjust_limit', order.adjust_limit)
688-
params.lang = get_enum_value(self._lang)
689+
params.lang = get_enum_value(lang) if lang else get_enum_value(self._lang)
689690
request = OpenApiRequest(MODIFY_ORDER, biz_model=params)
690691
response_content = self.__fetch_data(request)
691692
if response_content:
@@ -721,7 +722,7 @@ def cancel_order(self, account=None, id=None, order_id=None):
721722
raise ApiException(response.code, response.message)
722723

723724
def get_transactions(self, account=None, order_id=None, symbol=None, sec_type=None, start_time=None, end_time=None,
724-
limit=100, expiry=None, strike=None, put_call=None):
725+
limit=100, expiry=None, strike=None, put_call=None, lang=None):
725726
"""
726727
query order transactions, only prime accounts are supported.
727728
:param account: account id. If not passed, the default account is used
@@ -748,7 +749,7 @@ def get_transactions(self, account=None, order_id=None, symbol=None, sec_type=No
748749
params.expiry = expiry
749750
params.strike = strike
750751
params.right = put_call
751-
params.lang = get_enum_value(self._lang)
752+
params.lang = get_enum_value(lang) if lang else get_enum_value(self._lang)
752753
request = OpenApiRequest(ORDER_TRANSACTIONS, biz_model=params)
753754
response_content = self.__fetch_data(request)
754755
if response_content:
@@ -761,7 +762,7 @@ def get_transactions(self, account=None, order_id=None, symbol=None, sec_type=No
761762
return None
762763

763764
def get_analytics_asset(self, account=None, start_date=None, end_date=None, seg_type=None, currency=None,
764-
sub_account=None):
765+
sub_account=None, lang=None):
765766
"""
766767
get analytics of history asset
767768
:param account:
@@ -780,7 +781,7 @@ def get_analytics_asset(self, account=None, start_date=None, end_date=None, seg_
780781
params.end_date = end_date
781782
params.currency = get_enum_value(currency)
782783
params.sub_account = sub_account
783-
params.lang = get_enum_value(self._lang)
784+
params.lang = get_enum_value(lang) if lang else get_enum_value(self._lang)
784785
request = OpenApiRequest(ANALYTICS_ASSET, biz_model=params)
785786
response_content = self.__fetch_data(request)
786787
if response_content:

0 commit comments

Comments
 (0)