Skip to content

Commit d8eec95

Browse files
committed
analytics asset api
1 parent 77bf66e commit d8eec95

File tree

6 files changed

+178
-2
lines changed

6 files changed

+178
-2
lines changed

tigeropen/common/consts/__init__.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,12 @@ class SecurityType(Enum):
4949
CASH = 'CASH' # 外汇
5050

5151

52+
@unique
53+
class SegmentType(Enum):
54+
SEC = 'SEC'
55+
FUT = 'FUT'
56+
57+
5258
@unique
5359
class Currency(Enum):
5460
"""Enum for currency """

tigeropen/common/consts/service_types.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
INACTIVE_ORDERS = "inactive_orders" # 已撤销订单
2424
FILLED_ORDERS = "filled_orders" # 已成交订单
2525
ORDER_TRANSACTIONS = "order_transactions" # 订单成交记录
26+
ANALYTICS_ASSET = "analytics_asset"
2627

2728
"""
2829
合约

tigeropen/examples/trade_client_demo.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ def get_account_apis():
6363
# 综合/模拟账户获取资产
6464
openapi_client.get_prime_assets()
6565

66+
# get asset history
67+
openapi_client.get_analytics_asset(start_date='2021-12-01', end_date='2021-12-07')
68+
6669

6770
def trade_apis():
6871
account = client_config.account

tigeropen/trade/request/model.py

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -883,3 +883,107 @@ def to_openapi_dict(self):
883883
params['id'] = self.id
884884

885885
return params
886+
887+
888+
class AnalyticsAssetParams(BaseParams):
889+
def __init__(self):
890+
super().__init__()
891+
self._account = None
892+
self._sub_account = None
893+
self._secret_key = None
894+
self._seg_type = None
895+
self._currency = None
896+
self._sub_accounts = None
897+
self._start_date = None
898+
self._end_date = None
899+
900+
@property
901+
def account(self):
902+
return self._account
903+
904+
@account.setter
905+
def account(self, value):
906+
self._account = value
907+
908+
@property
909+
def sub_account(self):
910+
return self._sub_account
911+
912+
@sub_account.setter
913+
def sub_account(self, value):
914+
self._sub_account = value
915+
916+
@property
917+
def secret_key(self):
918+
return self._secret_key
919+
920+
@secret_key.setter
921+
def secret_key(self, value):
922+
self._secret_key = value
923+
924+
@property
925+
def seg_type(self):
926+
return self._seg_type
927+
928+
@seg_type.setter
929+
def seg_type(self, value):
930+
self._seg_type = value
931+
932+
@property
933+
def currency(self):
934+
return self._currency
935+
936+
@currency.setter
937+
def currency(self, value):
938+
self._currency = value
939+
940+
@property
941+
def sub_accounts(self):
942+
return self._sub_accounts
943+
944+
@sub_accounts.setter
945+
def sub_accounts(self, value):
946+
self._sub_accounts = value
947+
948+
@property
949+
def start_date(self):
950+
return self._start_date
951+
952+
@start_date.setter
953+
def start_date(self, value):
954+
self._start_date = value
955+
956+
@property
957+
def end_date(self):
958+
return self._end_date
959+
960+
@end_date.setter
961+
def end_date(self, value):
962+
self._end_date = value
963+
964+
def to_openapi_dict(self):
965+
params = dict()
966+
if self.account:
967+
params['account'] = self.account
968+
969+
if self.sub_account:
970+
params['sub_account'] = self.sub_account
971+
972+
if self.secret_key:
973+
params['secret_key'] = self.secret_key
974+
975+
if self.seg_type:
976+
params['seg_type'] = self.seg_type
977+
978+
if self.currency:
979+
params['currency'] = self.currency
980+
981+
if self.sub_accounts:
982+
params['sub_accounts'] = self.sub_accounts
983+
984+
if self.start_date:
985+
params['start_date'] = self.start_date
986+
987+
if self.end_date:
988+
params['end_date'] = self.end_date
989+
return params
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# -*- coding: utf-8 -*-
2+
#
3+
# @Date : 2022/7/8
4+
# @Author : sukai
5+
import json
6+
from datetime import datetime
7+
8+
from tigeropen.common.response import TigerResponse
9+
from tigeropen.common.util.string_utils import camel_to_underline_obj
10+
11+
12+
class AnalyticsAssetResponse(TigerResponse):
13+
def __init__(self):
14+
super().__init__()
15+
self.result = None
16+
self._is_success = None
17+
18+
def parse_response_content(self, response_content):
19+
response = super().parse_response_content(response_content)
20+
if 'is_success' in response:
21+
self._is_success = response['is_success']
22+
23+
if self.data:
24+
result = camel_to_underline_obj(json.loads(self.data))
25+
history = result.get('history')
26+
if history:
27+
for item in history:
28+
item['dt'] = datetime.fromtimestamp(item['date'] // 1000).strftime('%Y-%m-%d')
29+
result['history'] = history
30+
self.result = result

tigeropen/trade/trade_client.py

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,16 @@
99
from tigeropen.common.consts import THREAD_LOCAL, SecurityType, Market, Currency
1010
from tigeropen.common.consts.service_types import CONTRACTS, ACCOUNTS, POSITIONS, ASSETS, ORDERS, ORDER_NO, \
1111
CANCEL_ORDER, MODIFY_ORDER, PLACE_ORDER, ACTIVE_ORDERS, INACTIVE_ORDERS, FILLED_ORDERS, CONTRACT, PREVIEW_ORDER, \
12-
PRIME_ASSETS, ORDER_TRANSACTIONS, QUOTE_CONTRACT
12+
PRIME_ASSETS, ORDER_TRANSACTIONS, QUOTE_CONTRACT, ANALYTICS_ASSET
1313
from tigeropen.common.exceptions import ApiException
1414
from tigeropen.common.util.common_utils import get_enum_value
1515
from tigeropen.common.request import OpenApiRequest
1616
from tigeropen.tiger_open_client import TigerOpenClient
1717
from tigeropen.trade.domain.order import Order
1818
from tigeropen.trade.request.model import ContractParams, AccountsParams, AssetParams, PositionParams, OrdersParams, \
19-
OrderParams, PlaceModifyOrderParams, CancelOrderParams, TransactionsParams
19+
OrderParams, PlaceModifyOrderParams, CancelOrderParams, TransactionsParams, AnalyticsAssetParams
2020
from tigeropen.trade.response.account_profile_response import ProfilesResponse
21+
from tigeropen.trade.response.analytics_asset_response import AnalyticsAssetResponse
2122
from tigeropen.trade.response.assets_response import AssetsResponse
2223
from tigeropen.trade.response.contracts_response import ContractsResponse
2324
from tigeropen.trade.response.order_id_response import OrderIdResponse
@@ -655,6 +656,37 @@ def get_transactions(self, account=None, order_id=None, symbol=None, sec_type=No
655656
raise ApiException(response.code, response.message)
656657
return None
657658

659+
def get_analytics_asset(self, account=None, start_date=None, end_date=None, seg_type=None, currency=None,
660+
sub_account=None):
661+
"""
662+
get analytics of history asset
663+
:param account:
664+
:param start_date:
665+
:param end_date:
666+
:param seg_type: tigeropen.common.consts.SegmentType, like SegmentType.SEC
667+
:param currency: tigeropen.common.consts.Currency, like Currency.USD
668+
:param sub_account: sub account of institution account
669+
:return:
670+
"""
671+
params = AnalyticsAssetParams()
672+
params.account = account if account else self._account
673+
params.secret_key = self._secret_key
674+
params.seg_type = get_enum_value(seg_type)
675+
params.start_date = start_date
676+
params.end_date = end_date
677+
params.currency = get_enum_value(currency)
678+
params.sub_account = sub_account
679+
request = OpenApiRequest(ANALYTICS_ASSET, biz_model=params)
680+
response_content = self.__fetch_data(request)
681+
if response_content:
682+
response = AnalyticsAssetResponse()
683+
response.parse_response_content(response_content)
684+
if response.is_success():
685+
return response.result
686+
else:
687+
raise ApiException(response.code, response.message)
688+
return None
689+
658690
def __fetch_data(self, request):
659691
try:
660692
response = super(TradeClient, self).execute(request)

0 commit comments

Comments
 (0)