kaq-quant-common 0.2.16__py3-none-any.whl → 0.2.18__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 +187 -187
- kaq_quant_common/api/rest/instruction/helper/commission_helper.py +141 -141
- kaq_quant_common/api/rest/instruction/helper/mock_order_helper.py +346 -346
- kaq_quant_common/api/rest/instruction/helper/order_helper.py +362 -362
- kaq_quant_common/api/rest/instruction/instruction_client.py +40 -2
- kaq_quant_common/api/rest/instruction/instruction_server_base.py +62 -53
- kaq_quant_common/api/rest/instruction/models/__init__.py +17 -17
- kaq_quant_common/api/rest/instruction/models/kline.py +60 -0
- 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 +12 -0
- kaq_quant_common/common/monitor_base.py +84 -84
- kaq_quant_common/common/monitor_group.py +97 -97
- kaq_quant_common/common/ws_wrapper.py +21 -21
- kaq_quant_common/utils/logger_utils.py +4 -4
- kaq_quant_common/utils/signal_utils.py +23 -23
- kaq_quant_common/utils/uuid_utils.py +5 -5
- {kaq_quant_common-0.2.16.dist-info → kaq_quant_common-0.2.18.dist-info}/METADATA +1 -1
- {kaq_quant_common-0.2.16.dist-info → kaq_quant_common-0.2.18.dist-info}/RECORD +25 -24
- {kaq_quant_common-0.2.16.dist-info → kaq_quant_common-0.2.18.dist-info}/WHEEL +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 定义 客户端
|
|
2
2
|
import time
|
|
3
|
-
from typing import
|
|
3
|
+
from typing import Callable, Optional, Type, TypeVar
|
|
4
4
|
|
|
5
5
|
from kaq_quant_common.api.rest.api_client_base import ApiClientBase
|
|
6
6
|
from kaq_quant_common.api.rest.instruction.models import (
|
|
@@ -8,6 +8,10 @@ from kaq_quant_common.api.rest.instruction.models import (
|
|
|
8
8
|
from kaq_quant_common.api.rest.instruction.models.account import (
|
|
9
9
|
AccountIncomeRequest, AccountIncomeResponse, ContractBalanceRequest,
|
|
10
10
|
ContractBalanceResponse)
|
|
11
|
+
from kaq_quant_common.api.rest.instruction.models.kline import (KlineRequest,
|
|
12
|
+
KlineResponse)
|
|
13
|
+
from kaq_quant_common.api.rest.instruction.models.loan import (
|
|
14
|
+
QueryFlexibleLoanAssetRequest, QueryFlexibleLoanAssetResponse)
|
|
11
15
|
from kaq_quant_common.api.rest.instruction.models.order import (
|
|
12
16
|
AllOpenOrdersRequest, AllOpenOrdersResponse, CancelOrderRequest,
|
|
13
17
|
CancelOrderResponse, ChangeLeverageRequest, ChangeLeverageResponse,
|
|
@@ -89,6 +93,14 @@ class InstructionClient(ApiClientBase):
|
|
|
89
93
|
def query_open_interest(self, request: QueryOpenInterestRequest) -> QueryOpenInterestResponse:
|
|
90
94
|
return self._make_request("query_open_interest", request, QueryOpenInterestResponse)
|
|
91
95
|
|
|
96
|
+
# k线
|
|
97
|
+
def kline(self, request: KlineRequest) -> KlineResponse:
|
|
98
|
+
return self._make_request("kline", request, KlineResponse)
|
|
99
|
+
|
|
100
|
+
# 查询活期借币种数据
|
|
101
|
+
def query_flexible_loan_asset(self, request: QueryFlexibleLoanAssetRequest) -> QueryFlexibleLoanAssetResponse:
|
|
102
|
+
return self._make_request("query_flexible_loan_asset", request, QueryFlexibleLoanAssetResponse)
|
|
103
|
+
|
|
92
104
|
# ==================== 异步方法 ====================
|
|
93
105
|
|
|
94
106
|
async def _make_request_async(self, method: str, request: InstructionRequestBase, response_model: Type[R]) -> R:
|
|
@@ -152,6 +164,14 @@ class InstructionClient(ApiClientBase):
|
|
|
152
164
|
async def query_open_interest_async(self, request: QueryOpenInterestRequest) -> QueryOpenInterestResponse:
|
|
153
165
|
return await self._make_request_async("query_open_interest", request, QueryOpenInterestResponse)
|
|
154
166
|
|
|
167
|
+
# 异步k线
|
|
168
|
+
async def kline_async(self, request: KlineRequest) -> KlineResponse:
|
|
169
|
+
return await self._make_request_async("kline", request, KlineResponse)
|
|
170
|
+
|
|
171
|
+
# 异步查询活期借币种数据
|
|
172
|
+
async def query_flexible_loan_asset_async(self, request: QueryFlexibleLoanAssetRequest) -> QueryFlexibleLoanAssetResponse:
|
|
173
|
+
return await self._make_request_async("query_flexible_loan_asset", request, QueryFlexibleLoanAssetResponse)
|
|
174
|
+
|
|
155
175
|
# ==================== 回调方法 ====================
|
|
156
176
|
|
|
157
177
|
def _make_request_callback(
|
|
@@ -285,4 +305,22 @@ class InstructionClient(ApiClientBase):
|
|
|
285
305
|
on_success: Optional[Callable[[QueryOpenInterestResponse], None]] = None,
|
|
286
306
|
on_error: Optional[Callable[[Exception], None]] = None
|
|
287
307
|
) -> None:
|
|
288
|
-
self._make_request_callback("query_open_interest", request, QueryOpenInterestResponse, on_success, on_error)
|
|
308
|
+
self._make_request_callback("query_open_interest", request, QueryOpenInterestResponse, on_success, on_error)
|
|
309
|
+
|
|
310
|
+
# 回调k线
|
|
311
|
+
def kline_callback(
|
|
312
|
+
self,
|
|
313
|
+
request: KlineRequest,
|
|
314
|
+
on_success: Optional[Callable[[KlineResponse], None]] = None,
|
|
315
|
+
on_error: Optional[Callable[[Exception], None]] = None
|
|
316
|
+
) -> None:
|
|
317
|
+
self._make_request_callback("kline", request, KlineResponse, on_success, on_error)
|
|
318
|
+
|
|
319
|
+
# 回调查询活期借币种数据
|
|
320
|
+
def query_flexible_loan_asset_callback(
|
|
321
|
+
self,
|
|
322
|
+
request: QueryFlexibleLoanAssetRequest,
|
|
323
|
+
on_success: Optional[Callable[[QueryFlexibleLoanAssetResponse], None]] = None,
|
|
324
|
+
on_error: Optional[Callable[[Exception], None]] = None
|
|
325
|
+
) -> None:
|
|
326
|
+
self._make_request_callback("query_flexible_loan_asset", request, QueryFlexibleLoanAssetResponse, on_success, on_error)
|
|
@@ -4,31 +4,38 @@ from abc import ABC, abstractmethod
|
|
|
4
4
|
|
|
5
5
|
from kaq_quant_common.api.common.api_interface import ApiInterface, api_method
|
|
6
6
|
from kaq_quant_common.api.rest.api_server_base import ApiServerBase
|
|
7
|
-
from kaq_quant_common.api.rest.instruction.helper.
|
|
8
|
-
|
|
9
|
-
from kaq_quant_common.api.rest.instruction.helper.
|
|
10
|
-
|
|
11
|
-
from kaq_quant_common.api.rest.instruction.helper.commission_helper import \
|
|
12
|
-
CommissionHelper
|
|
13
|
-
from kaq_quant_common.api.rest.instruction.models import \
|
|
14
|
-
InstructionResponseBase
|
|
7
|
+
from kaq_quant_common.api.rest.instruction.helper.commission_helper import CommissionHelper
|
|
8
|
+
from kaq_quant_common.api.rest.instruction.helper.mock_order_helper import MockOrderHelper
|
|
9
|
+
from kaq_quant_common.api.rest.instruction.helper.order_helper import OrderHelper
|
|
10
|
+
from kaq_quant_common.api.rest.instruction.models import InstructionResponseBase
|
|
15
11
|
from kaq_quant_common.api.rest.instruction.models.account import (
|
|
16
|
-
AccountIncomeRequest,
|
|
17
|
-
|
|
12
|
+
AccountIncomeRequest,
|
|
13
|
+
AccountIncomeResponse,
|
|
14
|
+
ContractBalanceRequest,
|
|
15
|
+
ContractBalanceResponse,
|
|
16
|
+
)
|
|
17
|
+
from kaq_quant_common.api.rest.instruction.models.kline import KlineRequest, KlineResponse
|
|
18
|
+
from kaq_quant_common.api.rest.instruction.models.loan import QueryFlexibleLoanAssetRequest, QueryFlexibleLoanAssetResponse
|
|
18
19
|
from kaq_quant_common.api.rest.instruction.models.order import (
|
|
19
|
-
AllOpenOrdersRequest,
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
20
|
+
AllOpenOrdersRequest,
|
|
21
|
+
AllOpenOrdersResponse,
|
|
22
|
+
CancelOrderRequest,
|
|
23
|
+
CancelOrderResponse,
|
|
24
|
+
ChangeLeverageRequest,
|
|
25
|
+
ChangeLeverageResponse,
|
|
26
|
+
LimitOrderBookRequest,
|
|
27
|
+
LimitOrderBookResponse,
|
|
28
|
+
ModifyOrderRequest,
|
|
29
|
+
ModifyOrderResponse,
|
|
30
|
+
OrderRequest,
|
|
31
|
+
OrderResponse,
|
|
32
|
+
QuerySymbolConfigRequest,
|
|
33
|
+
QuerySymbolConfigResponse,
|
|
34
|
+
)
|
|
35
|
+
from kaq_quant_common.api.rest.instruction.models.position import QueryOpenInterestRequest, QueryOpenInterestResponse
|
|
36
|
+
from kaq_quant_common.api.rest.instruction.models.transfer import TransferRequest, TransferResponse
|
|
37
|
+
from kaq_quant_common.resources.kaq_mysql_resources import KaqQuantMysqlRepository
|
|
38
|
+
from kaq_quant_common.resources.kaq_redis_resources import KaqQuantRedisRepository
|
|
32
39
|
|
|
33
40
|
|
|
34
41
|
class InstructionServerBase(ApiServerBase, ApiInterface, ABC):
|
|
@@ -71,44 +78,28 @@ class InstructionServerBase(ApiServerBase, ApiInterface, ABC):
|
|
|
71
78
|
直接在父类处理,子类无需重写
|
|
72
79
|
"""
|
|
73
80
|
ret = OrderResponse(orders=[])
|
|
74
|
-
|
|
81
|
+
|
|
75
82
|
# 遍历所有订单
|
|
76
83
|
for order in request.orders:
|
|
77
84
|
# 获取模拟成交价
|
|
78
85
|
mock_fill_price = order.current_price
|
|
79
|
-
|
|
86
|
+
|
|
80
87
|
# 从commission_helper获取手续费率,如果获取失败使用默认值0.0005
|
|
81
|
-
mock_fee_rate = self._commission_helper.get_taker_commission_rate(
|
|
82
|
-
|
|
83
|
-
default_rate=0.0005
|
|
84
|
-
)
|
|
85
|
-
|
|
88
|
+
mock_fee_rate = self._commission_helper.get_taker_commission_rate(symbol=order.symbol, default_rate=0.0005)
|
|
89
|
+
|
|
86
90
|
# 使用mock_order_helper处理
|
|
87
91
|
try:
|
|
88
|
-
self._mock_order_helper.process_order(
|
|
89
|
-
order=order,
|
|
90
|
-
mock_fill_price=mock_fill_price,
|
|
91
|
-
mock_fee_rate=mock_fee_rate
|
|
92
|
-
)
|
|
92
|
+
self._mock_order_helper.process_order(order=order, mock_fill_price=mock_fill_price, mock_fee_rate=mock_fee_rate)
|
|
93
93
|
# 成功的订单
|
|
94
94
|
from kaq_quant_common.api.rest.instruction.models.order import OpenedOrderInfo
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
order_id=order.order_id,
|
|
98
|
-
symbol=order.symbol
|
|
99
|
-
)
|
|
100
|
-
)
|
|
95
|
+
|
|
96
|
+
ret.orders.append(OpenedOrderInfo(order_id=order.order_id, symbol=order.symbol))
|
|
101
97
|
except Exception as e:
|
|
102
98
|
self._logger.error(f"Mock order failed: {e}")
|
|
103
99
|
from kaq_quant_common.api.rest.instruction.models.order import OpenedOrderInfo
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
symbol=order.symbol,
|
|
108
|
-
message=str(e)
|
|
109
|
-
)
|
|
110
|
-
)
|
|
111
|
-
|
|
100
|
+
|
|
101
|
+
ret.orders.append(OpenedOrderInfo(order_id=order.order_id, symbol=order.symbol, message=str(e)))
|
|
102
|
+
|
|
112
103
|
return ret
|
|
113
104
|
|
|
114
105
|
# 修改订单
|
|
@@ -145,22 +136,32 @@ class InstructionServerBase(ApiServerBase, ApiInterface, ABC):
|
|
|
145
136
|
@api_method(ContractBalanceRequest, ContractBalanceResponse)
|
|
146
137
|
def contract_balance(self, request: ContractBalanceRequest) -> ContractBalanceResponse:
|
|
147
138
|
return self._on_contract_balance(request)
|
|
148
|
-
|
|
139
|
+
|
|
149
140
|
# 查询5档深度
|
|
150
141
|
@api_method(LimitOrderBookRequest, LimitOrderBookResponse)
|
|
151
142
|
def get_limit_order(self, request: LimitOrderBookRequest) -> LimitOrderBookResponse:
|
|
152
143
|
return self._on_get_limit_order(request)
|
|
153
|
-
|
|
144
|
+
|
|
154
145
|
# 查询账户损益资金流水
|
|
155
146
|
@api_method(AccountIncomeRequest, AccountIncomeResponse)
|
|
156
147
|
def get_account_income(self, request: AccountIncomeRequest) -> AccountIncomeResponse:
|
|
157
148
|
return self._on_get_account_income(request)
|
|
158
|
-
|
|
149
|
+
|
|
159
150
|
# 查询未平仓合约数量
|
|
160
151
|
@api_method(QueryOpenInterestRequest, QueryOpenInterestResponse)
|
|
161
152
|
def query_open_interest(self, request: QueryOpenInterestRequest) -> QueryOpenInterestResponse:
|
|
162
153
|
return self._on_query_open_interest(request)
|
|
163
154
|
|
|
155
|
+
# 查询K线
|
|
156
|
+
@api_method(KlineRequest, KlineResponse)
|
|
157
|
+
def kline(self, request: KlineRequest) -> KlineResponse:
|
|
158
|
+
return self._on_kline(request)
|
|
159
|
+
|
|
160
|
+
# 查询活期借币种数据
|
|
161
|
+
@api_method(QueryFlexibleLoanAssetRequest, QueryFlexibleLoanAssetResponse)
|
|
162
|
+
def query_flexible_loan_asset(self, request: QueryFlexibleLoanAssetRequest) -> QueryFlexibleLoanAssetResponse:
|
|
163
|
+
return self._on_query_flexible_loan_asset(request)
|
|
164
|
+
|
|
164
165
|
# ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ abstract methods
|
|
165
166
|
|
|
166
167
|
@abstractmethod
|
|
@@ -205,4 +206,12 @@ class InstructionServerBase(ApiServerBase, ApiInterface, ABC):
|
|
|
205
206
|
|
|
206
207
|
@abstractmethod
|
|
207
208
|
def _on_query_open_interest(self, request: QueryOpenInterestRequest) -> QueryOpenInterestResponse:
|
|
208
|
-
pass
|
|
209
|
+
pass
|
|
210
|
+
|
|
211
|
+
# TODO@abstractmethod
|
|
212
|
+
def _on_kline(self, request: KlineRequest) -> KlineResponse:
|
|
213
|
+
pass
|
|
214
|
+
|
|
215
|
+
# TODO@abstractmethod
|
|
216
|
+
def _on_query_flexible_loan_asset(self, request: QueryFlexibleLoanAssetRequest) -> QueryFlexibleLoanAssetResponse:
|
|
217
|
+
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
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
from enum import Enum
|
|
2
|
+
from typing import Optional
|
|
3
|
+
|
|
4
|
+
from . import InstructionRequestBase, InstructionResponseBase
|
|
5
|
+
from pydantic import BaseModel
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
# k线数据
|
|
9
|
+
class KlineData(BaseModel):
|
|
10
|
+
# 时间戳-秒
|
|
11
|
+
time: int
|
|
12
|
+
# 开盘价
|
|
13
|
+
open: float
|
|
14
|
+
# 最高价
|
|
15
|
+
high: float
|
|
16
|
+
# 最低价
|
|
17
|
+
low: float
|
|
18
|
+
# 收盘价
|
|
19
|
+
close: float
|
|
20
|
+
# 成交量
|
|
21
|
+
volume: float
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# 间隔枚举
|
|
25
|
+
class KlineInterval(str, Enum):
|
|
26
|
+
ONE_MINUTE = "1m"
|
|
27
|
+
THREE_MINUTE = "3m"
|
|
28
|
+
FIVE_MINUTE = "5m"
|
|
29
|
+
FIFTEEN_MINUTE = "15m"
|
|
30
|
+
THIRTY_MINUTE = "30m"
|
|
31
|
+
ONE_HOUR = "1h"
|
|
32
|
+
TWO_HOUR = "2h"
|
|
33
|
+
FOUR_HOUR = "4h"
|
|
34
|
+
SIX_HOUR = "6h"
|
|
35
|
+
EIGHT_HOUR = "8h"
|
|
36
|
+
TWELVE_HOUR = "12h"
|
|
37
|
+
ONE_DAY = "1d"
|
|
38
|
+
THREE_DAY = "3d"
|
|
39
|
+
ONE_WEEK = "1w"
|
|
40
|
+
ONE_MONTH = "1M"
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class KlineRequest(InstructionRequestBase):
|
|
44
|
+
# 交易对
|
|
45
|
+
symbol: str
|
|
46
|
+
# 间隔
|
|
47
|
+
interval: KlineInterval
|
|
48
|
+
# 开始时间-毫秒
|
|
49
|
+
start_time: Optional[int] = None
|
|
50
|
+
# 结束时间-毫秒
|
|
51
|
+
end_time: Optional[int] = None
|
|
52
|
+
# 返回数量
|
|
53
|
+
limit: Optional[int] = None
|
|
54
|
+
# 是否现货
|
|
55
|
+
spot: Optional[bool] = None
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class KlineResponse(InstructionResponseBase):
|
|
59
|
+
# k线数据
|
|
60
|
+
data: list[KlineData]
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
from enum import Enum
|
|
2
|
-
|
|
3
|
-
from . import InstructionRequestBase, InstructionResponseBase
|
|
4
|
-
|
|
5
|
-
# ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 划转
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
# 划转类型
|
|
9
|
-
class TransferType(int, Enum):
|
|
10
|
-
# 资金&现货
|
|
11
|
-
FUNDING_SPOT = 1
|
|
12
|
-
# 资金&合约
|
|
13
|
-
FUNDING_FUTURES = 2
|
|
14
|
-
# 合约&现货
|
|
15
|
-
SPOT_FUTURES = 3
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
# 划转请求
|
|
19
|
-
class TransferRequest(InstructionRequestBase):
|
|
20
|
-
# 划转类型
|
|
21
|
-
type: TransferType
|
|
22
|
-
# 资产/币种
|
|
23
|
-
assets: str
|
|
24
|
-
# 划转数量
|
|
25
|
-
amount: float
|
|
26
|
-
# 划转方向 1正向,2反向
|
|
27
|
-
direction: int
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
# 划转响应
|
|
31
|
-
class TransferResponse(InstructionResponseBase):
|
|
32
|
-
transfer_id: str
|
|
1
|
+
from enum import Enum
|
|
2
|
+
|
|
3
|
+
from . import InstructionRequestBase, InstructionResponseBase
|
|
4
|
+
|
|
5
|
+
# ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 划转
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
# 划转类型
|
|
9
|
+
class TransferType(int, Enum):
|
|
10
|
+
# 资金&现货
|
|
11
|
+
FUNDING_SPOT = 1
|
|
12
|
+
# 资金&合约
|
|
13
|
+
FUNDING_FUTURES = 2
|
|
14
|
+
# 合约&现货
|
|
15
|
+
SPOT_FUTURES = 3
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
# 划转请求
|
|
19
|
+
class TransferRequest(InstructionRequestBase):
|
|
20
|
+
# 划转类型
|
|
21
|
+
type: TransferType
|
|
22
|
+
# 资产/币种
|
|
23
|
+
assets: str
|
|
24
|
+
# 划转数量
|
|
25
|
+
amount: float
|
|
26
|
+
# 划转方向 1正向,2反向
|
|
27
|
+
direction: int
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
# 划转响应
|
|
31
|
+
class TransferResponse(InstructionResponseBase):
|
|
32
|
+
transfer_id: str
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
from typing import Optional
|
|
2
|
-
|
|
3
|
-
from pydantic import BaseModel
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class FundingRateEvent(BaseModel):
|
|
7
|
-
# 使用毫秒时间戳,保持与现有事件风格一致
|
|
8
|
-
event_time: int
|
|
9
|
-
exchange_symbol: Optional[str] = None
|
|
10
|
-
exchange: Optional[str] = None
|
|
11
|
-
symbol: Optional[str] = None
|
|
12
|
-
open_rate: Optional[float] = None
|
|
13
|
-
close_rate: Optional[float] = None
|
|
14
|
-
high_rate: Optional[float] = None
|
|
15
|
-
low_rate: Optional[float] = None
|
|
16
|
-
# 毫秒时间戳
|
|
17
|
-
close_time: Optional[int] = None
|
|
18
|
-
# 毫秒时间戳
|
|
19
|
-
next_event_time: Optional[int] = None
|
|
20
|
-
|
|
21
|
-
# 兼容表中其他字段
|
|
22
|
-
id: Optional[str] = None
|
|
23
|
-
ctimestamp: Optional[str] = None
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class FundingRateEvent(BaseModel):
|
|
7
|
+
# 使用毫秒时间戳,保持与现有事件风格一致
|
|
8
|
+
event_time: int
|
|
9
|
+
exchange_symbol: Optional[str] = None
|
|
10
|
+
exchange: Optional[str] = None
|
|
11
|
+
symbol: Optional[str] = None
|
|
12
|
+
open_rate: Optional[float] = None
|
|
13
|
+
close_rate: Optional[float] = None
|
|
14
|
+
high_rate: Optional[float] = None
|
|
15
|
+
low_rate: Optional[float] = None
|
|
16
|
+
# 毫秒时间戳
|
|
17
|
+
close_time: Optional[int] = None
|
|
18
|
+
# 毫秒时间戳
|
|
19
|
+
next_event_time: Optional[int] = None
|
|
20
|
+
|
|
21
|
+
# 兼容表中其他字段
|
|
22
|
+
id: Optional[str] = None
|
|
23
|
+
ctimestamp: Optional[str] = None
|