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