kaq-quant-common 0.1.83__py3-none-any.whl → 0.1.85__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- kaq_quant_common/api/common/__init__.py +1 -1
- kaq_quant_common/api/common/api_interface.py +38 -38
- kaq_quant_common/api/rest/api_client_base.py +42 -42
- kaq_quant_common/api/rest/instruction/helper/order_helper.py +324 -324
- kaq_quant_common/api/rest/instruction/instruction_client.py +76 -88
- kaq_quant_common/api/rest/instruction/instruction_server_base.py +133 -132
- kaq_quant_common/api/rest/instruction/models/__init__.py +17 -17
- kaq_quant_common/api/rest/instruction/models/account.py +24 -24
- kaq_quant_common/api/rest/instruction/models/order.py +248 -223
- kaq_quant_common/api/rest/instruction/models/position.py +56 -56
- kaq_quant_common/api/rest/instruction/models/transfer.py +32 -32
- kaq_quant_common/api/ws/exchange/models.py +23 -23
- kaq_quant_common/api/ws/exchange/ws_exchange_server.py +440 -440
- kaq_quant_common/common/ddb_table_monitor.py +106 -106
- kaq_quant_common/common/http_monitor.py +69 -69
- kaq_quant_common/common/modules/limit_order_helper.py +81 -81
- kaq_quant_common/common/modules/limit_order_symbol_monitor.py +76 -76
- kaq_quant_common/common/modules/limit_order_symbol_monitor_group.py +69 -69
- kaq_quant_common/common/monitor_base.py +84 -84
- kaq_quant_common/common/monitor_group.py +97 -97
- kaq_quant_common/common/statistics/funding_rate_history_statistics.py +208 -0
- kaq_quant_common/common/statistics/kline_history_statistics.py +36 -13
- kaq_quant_common/common/ws_wrapper.py +21 -21
- kaq_quant_common/resources/kaq_ddb_stream_write_resources.py +2 -0
- kaq_quant_common/utils/logger_utils.py +5 -5
- kaq_quant_common/utils/signal_utils.py +23 -23
- kaq_quant_common/utils/uuid_utils.py +5 -5
- {kaq_quant_common-0.1.83.dist-info → kaq_quant_common-0.1.85.dist-info}/METADATA +1 -1
- {kaq_quant_common-0.1.83.dist-info → kaq_quant_common-0.1.85.dist-info}/RECORD +30 -29
- {kaq_quant_common-0.1.83.dist-info → kaq_quant_common-0.1.85.dist-info}/WHEEL +1 -1
|
@@ -1,88 +1,76 @@
|
|
|
1
|
-
# 定义 客户端
|
|
2
|
-
import time
|
|
3
|
-
from typing import Type, TypeVar
|
|
4
|
-
|
|
5
|
-
from kaq_quant_common.api.rest.api_client_base import ApiClientBase
|
|
6
|
-
from kaq_quant_common.api.rest.instruction.models import (
|
|
7
|
-
InstructionRequestBase,
|
|
8
|
-
|
|
9
|
-
)
|
|
10
|
-
from kaq_quant_common.api.rest.instruction.models.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
)
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
return
|
|
53
|
-
|
|
54
|
-
#
|
|
55
|
-
def
|
|
56
|
-
return self._make_request("
|
|
57
|
-
|
|
58
|
-
#
|
|
59
|
-
def
|
|
60
|
-
return self._make_request("
|
|
61
|
-
|
|
62
|
-
#
|
|
63
|
-
def
|
|
64
|
-
return self._make_request("
|
|
65
|
-
|
|
66
|
-
#
|
|
67
|
-
def
|
|
68
|
-
return self._make_request("
|
|
69
|
-
|
|
70
|
-
#
|
|
71
|
-
def
|
|
72
|
-
return self._make_request("
|
|
73
|
-
|
|
74
|
-
#
|
|
75
|
-
def
|
|
76
|
-
return self._make_request("
|
|
77
|
-
|
|
78
|
-
# 查询持仓
|
|
79
|
-
def query_position(self, request: QueryPositionRequest) -> QueryPositionResponse:
|
|
80
|
-
return self._make_request("query_position", request, QueryPositionResponse)
|
|
81
|
-
|
|
82
|
-
# 划转
|
|
83
|
-
def transfer(self, request: TransferRequest) -> TransferResponse:
|
|
84
|
-
return self._make_request("transfer", request, TransferResponse)
|
|
85
|
-
|
|
86
|
-
# 查询合约账户余额
|
|
87
|
-
def contract_balance(self, request: ContractBalanceRequest) -> ContractBalanceResponse:
|
|
88
|
-
return self._make_request("contract_balance", request, ContractBalanceResponse)
|
|
1
|
+
# 定义 客户端
|
|
2
|
+
import time
|
|
3
|
+
from typing import Type, TypeVar
|
|
4
|
+
|
|
5
|
+
from kaq_quant_common.api.rest.api_client_base import ApiClientBase
|
|
6
|
+
from kaq_quant_common.api.rest.instruction.models import (
|
|
7
|
+
InstructionRequestBase, InstructionResponseBase)
|
|
8
|
+
from kaq_quant_common.api.rest.instruction.models.account import (
|
|
9
|
+
ContractBalanceRequest, ContractBalanceResponse)
|
|
10
|
+
from kaq_quant_common.api.rest.instruction.models.order import (
|
|
11
|
+
AllOpenOrdersRequest, AllOpenOrdersResponse, CancelOrderRequest,
|
|
12
|
+
CancelOrderResponse, ChangeLeverageRequest, ChangeLeverageResponse,
|
|
13
|
+
LimitOrderBookRequest, LimitOrderBookResponse, ModifyOrderRequest,
|
|
14
|
+
ModifyOrderResponse, OrderRequest, OrderResponse, QuerySymbolConfigRequest,
|
|
15
|
+
QuerySymbolConfigResponse)
|
|
16
|
+
from kaq_quant_common.api.rest.instruction.models.position import (
|
|
17
|
+
QueryPositionRequest, QueryPositionResponse)
|
|
18
|
+
from kaq_quant_common.api.rest.instruction.models.transfer import (
|
|
19
|
+
TransferRequest, TransferResponse)
|
|
20
|
+
from kaq_quant_common.utils import uuid_utils
|
|
21
|
+
|
|
22
|
+
R = TypeVar("R", bound=InstructionResponseBase)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class InstructionClient(ApiClientBase):
|
|
26
|
+
|
|
27
|
+
# 重写一下make_request处理公用字段
|
|
28
|
+
def _make_request(self, method: str, request: InstructionRequestBase, response_model: Type[R]) -> R:
|
|
29
|
+
# 处理公用字段
|
|
30
|
+
# 时间
|
|
31
|
+
if request.event_time is None:
|
|
32
|
+
request.event_time = int(time.time() * 1000)
|
|
33
|
+
# TODO 任务id
|
|
34
|
+
if request.task_id is None:
|
|
35
|
+
request.task_id = f"t_{uuid_utils.generate_uuid()}"
|
|
36
|
+
return super()._make_request(method, request, response_model)
|
|
37
|
+
|
|
38
|
+
# 下单
|
|
39
|
+
def order(self, request: OrderRequest) -> OrderResponse:
|
|
40
|
+
return self._make_request("order", request, OrderResponse)
|
|
41
|
+
|
|
42
|
+
# 修改订单
|
|
43
|
+
def modify_order(self, request: ModifyOrderRequest) -> ModifyOrderResponse:
|
|
44
|
+
return self._make_request("modify_order", request, ModifyOrderResponse)
|
|
45
|
+
|
|
46
|
+
# 取消订单
|
|
47
|
+
def cancel_order(self, request: CancelOrderRequest) -> CancelOrderResponse:
|
|
48
|
+
return self._make_request("cancel_order", request, CancelOrderResponse)
|
|
49
|
+
|
|
50
|
+
# 查询当前全部挂单
|
|
51
|
+
def all_open_orders(self, request: AllOpenOrdersRequest) -> AllOpenOrdersResponse:
|
|
52
|
+
return self._make_request("all_open_orders", request, AllOpenOrdersResponse)
|
|
53
|
+
|
|
54
|
+
# 查询交易对设置
|
|
55
|
+
def query_symbol_config(self, request: QuerySymbolConfigRequest) -> QuerySymbolConfigResponse:
|
|
56
|
+
return self._make_request("query_symbol_config", request, QuerySymbolConfigResponse)
|
|
57
|
+
|
|
58
|
+
# 调整杠杆
|
|
59
|
+
def change_leverage(self, request: ChangeLeverageRequest) -> ChangeLeverageResponse:
|
|
60
|
+
return self._make_request("change_leverage", request, ChangeLeverageResponse)
|
|
61
|
+
|
|
62
|
+
# 查询持仓
|
|
63
|
+
def query_position(self, request: QueryPositionRequest) -> QueryPositionResponse:
|
|
64
|
+
return self._make_request("query_position", request, QueryPositionResponse)
|
|
65
|
+
|
|
66
|
+
# 划转
|
|
67
|
+
def transfer(self, request: TransferRequest) -> TransferResponse:
|
|
68
|
+
return self._make_request("transfer", request, TransferResponse)
|
|
69
|
+
|
|
70
|
+
# 查询合约账户余额
|
|
71
|
+
def contract_balance(self, request: ContractBalanceRequest) -> ContractBalanceResponse:
|
|
72
|
+
return self._make_request("contract_balance", request, ContractBalanceResponse)
|
|
73
|
+
|
|
74
|
+
# 查询5档深度
|
|
75
|
+
def get_limit_order(self, request: LimitOrderBookRequest) -> LimitOrderBookResponse:
|
|
76
|
+
return self._make_request("get_limit_order", request, LimitOrderBookResponse)
|
|
@@ -1,132 +1,133 @@
|
|
|
1
|
-
# 定义 服务器api
|
|
2
|
-
import time
|
|
3
|
-
from abc import ABC, abstractmethod
|
|
4
|
-
|
|
5
|
-
from kaq_quant_common.api.common.api_interface import ApiInterface, api_method
|
|
6
|
-
from kaq_quant_common.api.rest.api_server_base import ApiServerBase
|
|
7
|
-
from kaq_quant_common.api.rest.instruction.helper.order_helper import
|
|
8
|
-
|
|
9
|
-
from kaq_quant_common.api.rest.instruction.models
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
)
|
|
13
|
-
from kaq_quant_common.api.rest.instruction.models.order import (
|
|
14
|
-
AllOpenOrdersRequest,
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
)
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
#
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
1
|
+
# 定义 服务器api
|
|
2
|
+
import time
|
|
3
|
+
from abc import ABC, abstractmethod
|
|
4
|
+
|
|
5
|
+
from kaq_quant_common.api.common.api_interface import ApiInterface, api_method
|
|
6
|
+
from kaq_quant_common.api.rest.api_server_base import ApiServerBase
|
|
7
|
+
from kaq_quant_common.api.rest.instruction.helper.order_helper import \
|
|
8
|
+
OrderHelper
|
|
9
|
+
from kaq_quant_common.api.rest.instruction.models import \
|
|
10
|
+
InstructionResponseBase
|
|
11
|
+
from kaq_quant_common.api.rest.instruction.models.account import (
|
|
12
|
+
ContractBalanceRequest, ContractBalanceResponse)
|
|
13
|
+
from kaq_quant_common.api.rest.instruction.models.order import (
|
|
14
|
+
AllOpenOrdersRequest, AllOpenOrdersResponse, CancelOrderRequest,
|
|
15
|
+
CancelOrderResponse, ChangeLeverageRequest, ChangeLeverageResponse,
|
|
16
|
+
LimitOrderBookRequest, LimitOrderBookResponse, ModifyOrderRequest,
|
|
17
|
+
ModifyOrderResponse, OrderRequest, OrderResponse, QuerySymbolConfigRequest,
|
|
18
|
+
QuerySymbolConfigResponse)
|
|
19
|
+
from kaq_quant_common.api.rest.instruction.models.transfer import (
|
|
20
|
+
TransferRequest, TransferResponse)
|
|
21
|
+
from kaq_quant_common.resources.kaq_mysql_resources import \
|
|
22
|
+
KaqQuantMysqlRepository
|
|
23
|
+
from kaq_quant_common.resources.kaq_redis_resources import \
|
|
24
|
+
KaqQuantRedisRepository
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class InstructionServerBase(ApiServerBase, ApiInterface, ABC):
|
|
28
|
+
|
|
29
|
+
def __init__(self, exchange="", host="0.0.0.0", port=5000):
|
|
30
|
+
super().__init__(self, host, port)
|
|
31
|
+
#
|
|
32
|
+
self._mysql: KaqQuantMysqlRepository = None
|
|
33
|
+
self._redis: KaqQuantRedisRepository = None
|
|
34
|
+
# 交易所
|
|
35
|
+
self._exchange = exchange
|
|
36
|
+
|
|
37
|
+
# helper
|
|
38
|
+
self._order_helper = OrderHelper(self)
|
|
39
|
+
|
|
40
|
+
# 统一处理返回数据
|
|
41
|
+
def _wrap_response(self, rsp: InstructionResponseBase):
|
|
42
|
+
if rsp is not None:
|
|
43
|
+
# 时间
|
|
44
|
+
if rsp.event_time is None:
|
|
45
|
+
rsp.event_time = int(time.time() * 1000)
|
|
46
|
+
return rsp
|
|
47
|
+
|
|
48
|
+
# 下单
|
|
49
|
+
@api_method(OrderRequest, OrderResponse)
|
|
50
|
+
def order(self, request: OrderRequest) -> OrderResponse:
|
|
51
|
+
ret = self._on_order(request)
|
|
52
|
+
if len(ret.orders) == 1 and ret.orders[0].message is not None:
|
|
53
|
+
# 只有一笔订单,而且失败了,抛出异常
|
|
54
|
+
raise Exception(f"order failed: {ret.orders[0].message}")
|
|
55
|
+
return ret
|
|
56
|
+
|
|
57
|
+
# 修改订单
|
|
58
|
+
@api_method(ModifyOrderRequest, ModifyOrderResponse)
|
|
59
|
+
def modify_order(self, request: ModifyOrderRequest) -> ModifyOrderResponse:
|
|
60
|
+
return self._on_modify_order(request)
|
|
61
|
+
|
|
62
|
+
# 取消订单
|
|
63
|
+
@api_method(CancelOrderRequest, CancelOrderResponse)
|
|
64
|
+
def cancel_order(self, request: CancelOrderRequest) -> CancelOrderResponse:
|
|
65
|
+
return self._on_cancel_order(request)
|
|
66
|
+
|
|
67
|
+
# 查询当前全部挂单
|
|
68
|
+
@api_method(AllOpenOrdersRequest, AllOpenOrdersResponse)
|
|
69
|
+
def all_open_orders(self, request: AllOpenOrdersRequest) -> AllOpenOrdersResponse:
|
|
70
|
+
return self._on_all_open_orders(request)
|
|
71
|
+
|
|
72
|
+
# 查询交易对设置
|
|
73
|
+
@api_method(QuerySymbolConfigRequest, QuerySymbolConfigResponse)
|
|
74
|
+
def query_symbol_config(self, request: QuerySymbolConfigRequest) -> QuerySymbolConfigResponse:
|
|
75
|
+
return self._on_query_symbol_config(request)
|
|
76
|
+
|
|
77
|
+
# 调整杠杆
|
|
78
|
+
@api_method(ChangeLeverageRequest, ChangeLeverageResponse)
|
|
79
|
+
def change_leverage(self, request: ChangeLeverageRequest) -> ChangeLeverageResponse:
|
|
80
|
+
return self._on_change_leverage(request)
|
|
81
|
+
|
|
82
|
+
# 划转
|
|
83
|
+
@api_method(TransferRequest, TransferResponse)
|
|
84
|
+
def transfer(self, request: TransferRequest) -> TransferResponse:
|
|
85
|
+
return self._on_transfer(request)
|
|
86
|
+
|
|
87
|
+
# 查询合约账户余额
|
|
88
|
+
@api_method(ContractBalanceRequest, ContractBalanceResponse)
|
|
89
|
+
def contract_balance(self, request: ContractBalanceRequest) -> ContractBalanceResponse:
|
|
90
|
+
return self._on_contract_balance(request)
|
|
91
|
+
|
|
92
|
+
# 查询5档深度
|
|
93
|
+
@api_method(LimitOrderBookRequest, LimitOrderBookResponse)
|
|
94
|
+
def get_limit_order(self, request: LimitOrderBookRequest) -> LimitOrderBookResponse:
|
|
95
|
+
return self._on_get_limit_order(request)
|
|
96
|
+
|
|
97
|
+
# ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ abstract methods
|
|
98
|
+
|
|
99
|
+
@abstractmethod
|
|
100
|
+
def _on_order(self, request: OrderRequest) -> OrderResponse:
|
|
101
|
+
pass
|
|
102
|
+
|
|
103
|
+
@abstractmethod
|
|
104
|
+
def _on_modify_order(self, request: ModifyOrderRequest) -> ModifyOrderResponse:
|
|
105
|
+
pass
|
|
106
|
+
|
|
107
|
+
@abstractmethod
|
|
108
|
+
def _on_cancel_order(self, request: CancelOrderRequest) -> CancelOrderResponse:
|
|
109
|
+
pass
|
|
110
|
+
|
|
111
|
+
@abstractmethod
|
|
112
|
+
def _on_all_open_orders(self, request: AllOpenOrdersRequest) -> AllOpenOrdersResponse:
|
|
113
|
+
pass
|
|
114
|
+
|
|
115
|
+
@abstractmethod
|
|
116
|
+
def _on_query_symbol_config(self, request: QuerySymbolConfigRequest) -> QuerySymbolConfigResponse:
|
|
117
|
+
pass
|
|
118
|
+
|
|
119
|
+
@abstractmethod
|
|
120
|
+
def _on_change_leverage(self, request: ChangeLeverageRequest) -> ChangeLeverageResponse:
|
|
121
|
+
pass
|
|
122
|
+
|
|
123
|
+
@abstractmethod
|
|
124
|
+
def _on_transfer(self, request: TransferRequest) -> TransferResponse:
|
|
125
|
+
pass
|
|
126
|
+
|
|
127
|
+
@abstractmethod
|
|
128
|
+
def _on_contract_balance(self, request: ContractBalanceRequest) -> ContractBalanceResponse:
|
|
129
|
+
pass
|
|
130
|
+
|
|
131
|
+
@abstractmethod
|
|
132
|
+
def _on_get_limit_order(self, request: LimitOrderBookRequest) -> LimitOrderBookResponse:
|
|
133
|
+
pass
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
# 定义model
|
|
2
|
-
from typing import Optional
|
|
3
|
-
|
|
4
|
-
from pydantic import BaseModel
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
#
|
|
8
|
-
class InstructionRequestBase(BaseModel):
|
|
9
|
-
# 时间
|
|
10
|
-
event_time: Optional[int] = None
|
|
11
|
-
# 任务id
|
|
12
|
-
task_id: Optional[str] = None
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class InstructionResponseBase(BaseModel):
|
|
16
|
-
# 时间
|
|
17
|
-
event_time: Optional[int] = None
|
|
1
|
+
# 定义model
|
|
2
|
+
from typing import Optional
|
|
3
|
+
|
|
4
|
+
from pydantic import BaseModel
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
#
|
|
8
|
+
class InstructionRequestBase(BaseModel):
|
|
9
|
+
# 时间
|
|
10
|
+
event_time: Optional[int] = None
|
|
11
|
+
# 任务id
|
|
12
|
+
task_id: Optional[str] = None
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class InstructionResponseBase(BaseModel):
|
|
16
|
+
# 时间
|
|
17
|
+
event_time: Optional[int] = None
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
from typing import Optional
|
|
2
|
-
|
|
3
|
-
from pydantic import BaseModel
|
|
4
|
-
|
|
5
|
-
from . import InstructionRequestBase, InstructionResponseBase
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
# 资产信息
|
|
9
|
-
class AssetsInfo(BaseModel):
|
|
10
|
-
# 币种
|
|
11
|
-
coin: str
|
|
12
|
-
# 余额
|
|
13
|
-
balance: float
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
# ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 查询合约账户余额
|
|
17
|
-
class ContractBalanceRequest(InstructionRequestBase):
|
|
18
|
-
# 币种
|
|
19
|
-
coin: Optional[str] = None
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
class ContractBalanceResponse(InstructionResponseBase):
|
|
23
|
-
#
|
|
24
|
-
assets: list[AssetsInfo]
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel
|
|
4
|
+
|
|
5
|
+
from . import InstructionRequestBase, InstructionResponseBase
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
# 资产信息
|
|
9
|
+
class AssetsInfo(BaseModel):
|
|
10
|
+
# 币种
|
|
11
|
+
coin: str
|
|
12
|
+
# 余额
|
|
13
|
+
balance: float
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
# ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 查询合约账户余额
|
|
17
|
+
class ContractBalanceRequest(InstructionRequestBase):
|
|
18
|
+
# 币种
|
|
19
|
+
coin: Optional[str] = None
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class ContractBalanceResponse(InstructionResponseBase):
|
|
23
|
+
#
|
|
24
|
+
assets: list[AssetsInfo]
|