1
1
from copy import copy
2
- from typing import Dict , List , Set , TYPE_CHECKING
2
+ from typing import TYPE_CHECKING
3
3
4
4
from .object import (
5
5
ContractData ,
@@ -19,7 +19,7 @@ class OffsetConverter:
19
19
20
20
def __init__ (self , main_engine : "MainEngine" ) -> None :
21
21
""""""
22
- self .holdings : Dict [str , "PositionHolding" ] = {}
22
+ self .holdings : dict [str , "PositionHolding" ] = {}
23
23
24
24
self .get_contract = main_engine .get_contract
25
25
@@ -57,7 +57,7 @@ def update_order_request(self, req: OrderRequest, vt_orderid: str) -> None:
57
57
58
58
def get_position_holding (self , vt_symbol : str ) -> "PositionHolding" :
59
59
""""""
60
- holding : PositionHolding = self .holdings .get (vt_symbol , None )
60
+ holding : PositionHolding | None = self .holdings .get (vt_symbol , None )
61
61
if not holding :
62
62
contract : ContractData = self .get_contract (vt_symbol )
63
63
holding = PositionHolding (contract )
@@ -69,7 +69,7 @@ def convert_order_request(
69
69
req : OrderRequest ,
70
70
lock : bool ,
71
71
net : bool = False
72
- ) -> List [OrderRequest ]:
72
+ ) -> list [OrderRequest ]:
73
73
""""""
74
74
if not self .is_convert_required (req .vt_symbol ):
75
75
return [req ]
@@ -108,7 +108,7 @@ def __init__(self, contract: ContractData) -> None:
108
108
self .vt_symbol : str = contract .vt_symbol
109
109
self .exchange : Exchange = contract .exchange
110
110
111
- self .active_orders : Dict [str , OrderData ] = {}
111
+ self .active_orders : dict [str , OrderData ] = {}
112
112
113
113
self .long_pos : float = 0
114
114
self .long_yd : float = 0
@@ -251,17 +251,17 @@ def sum_pos_frozen(self) -> None:
251
251
self .long_pos_frozen = self .long_td_frozen + self .long_yd_frozen
252
252
self .short_pos_frozen = self .short_td_frozen + self .short_yd_frozen
253
253
254
- def convert_order_request_shfe (self , req : OrderRequest ) -> List [OrderRequest ]:
254
+ def convert_order_request_shfe (self , req : OrderRequest ) -> list [OrderRequest ]:
255
255
""""""
256
256
if req .offset == Offset .OPEN :
257
257
return [req ]
258
258
259
259
if req .direction == Direction .LONG :
260
- pos_available : int = self .short_pos - self .short_pos_frozen
261
- td_available : int = self .short_td - self .short_td_frozen
260
+ pos_available : float = self .short_pos - self .short_pos_frozen
261
+ td_available : float = self .short_td - self .short_td_frozen
262
262
else :
263
- pos_available : int = self .long_pos - self .long_pos_frozen
264
- td_available : int = self .long_td - self .long_td_frozen
263
+ pos_available = self .long_pos - self .long_pos_frozen
264
+ td_available = self .long_td - self .long_td_frozen
265
265
266
266
if req .volume > pos_available :
267
267
return []
@@ -270,10 +270,10 @@ def convert_order_request_shfe(self, req: OrderRequest) -> List[OrderRequest]:
270
270
req_td .offset = Offset .CLOSETODAY
271
271
return [req_td ]
272
272
else :
273
- req_list : List [OrderRequest ] = []
273
+ req_list : list [OrderRequest ] = []
274
274
275
275
if td_available > 0 :
276
- req_td : OrderRequest = copy (req )
276
+ req_td = copy (req )
277
277
req_td .offset = Offset .CLOSETODAY
278
278
req_td .volume = td_available
279
279
req_list .append (req_td )
@@ -285,16 +285,16 @@ def convert_order_request_shfe(self, req: OrderRequest) -> List[OrderRequest]:
285
285
286
286
return req_list
287
287
288
- def convert_order_request_lock (self , req : OrderRequest ) -> List [OrderRequest ]:
288
+ def convert_order_request_lock (self , req : OrderRequest ) -> list [OrderRequest ]:
289
289
""""""
290
290
if req .direction == Direction .LONG :
291
- td_volume : int = self .short_td
292
- yd_available : int = self .short_yd - self .short_yd_frozen
291
+ td_volume : float = self .short_td
292
+ yd_available : float = self .short_yd - self .short_yd_frozen
293
293
else :
294
- td_volume : int = self .long_td
295
- yd_available : int = self .long_yd - self .long_yd_frozen
294
+ td_volume = self .long_td
295
+ yd_available = self .long_yd - self .long_yd_frozen
296
296
297
- close_yd_exchanges : Set [Exchange ] = {Exchange .SHFE , Exchange .INE }
297
+ close_yd_exchanges : set [Exchange ] = {Exchange .SHFE , Exchange .INE }
298
298
299
299
# If there is td_volume, we can only lock position
300
300
if td_volume and self .exchange not in close_yd_exchanges :
@@ -304,9 +304,9 @@ def convert_order_request_lock(self, req: OrderRequest) -> List[OrderRequest]:
304
304
# If no td_volume, we close opposite yd position first
305
305
# then open new position
306
306
else :
307
- close_volume : int = min (req .volume , yd_available )
308
- open_volume : int = max (0 , req .volume - yd_available )
309
- req_list : List [OrderRequest ] = []
307
+ close_volume : float = min (req .volume , yd_available )
308
+ open_volume : float = max (0 , req .volume - yd_available )
309
+ req_list : list [OrderRequest ] = []
310
310
311
311
if yd_available :
312
312
req_yd : OrderRequest = copy (req )
@@ -318,31 +318,31 @@ def convert_order_request_lock(self, req: OrderRequest) -> List[OrderRequest]:
318
318
req_list .append (req_yd )
319
319
320
320
if open_volume :
321
- req_open : OrderRequest = copy (req )
321
+ req_open = copy (req )
322
322
req_open .offset = Offset .OPEN
323
323
req_open .volume = open_volume
324
324
req_list .append (req_open )
325
325
326
326
return req_list
327
327
328
- def convert_order_request_net (self , req : OrderRequest ) -> List [OrderRequest ]:
328
+ def convert_order_request_net (self , req : OrderRequest ) -> list [OrderRequest ]:
329
329
""""""
330
330
if req .direction == Direction .LONG :
331
- pos_available : int = self .short_pos - self .short_pos_frozen
332
- td_available : int = self .short_td - self .short_td_frozen
333
- yd_available : int = self .short_yd - self .short_yd_frozen
331
+ pos_available : float = self .short_pos - self .short_pos_frozen
332
+ td_available : float = self .short_td - self .short_td_frozen
333
+ yd_available : float = self .short_yd - self .short_yd_frozen
334
334
else :
335
- pos_available : int = self .long_pos - self .long_pos_frozen
336
- td_available : int = self .long_td - self .long_td_frozen
337
- yd_available : int = self .long_yd - self .long_yd_frozen
335
+ pos_available = self .long_pos - self .long_pos_frozen
336
+ td_available = self .long_td - self .long_td_frozen
337
+ yd_available = self .long_yd - self .long_yd_frozen
338
338
339
339
# Split close order to close today/yesterday for SHFE/INE exchange
340
340
if req .exchange in {Exchange .SHFE , Exchange .INE }:
341
- reqs : List [OrderRequest ] = []
341
+ reqs : list [OrderRequest ] = []
342
342
volume_left : float = req .volume
343
343
344
344
if td_available :
345
- td_volume : int = min (td_available , volume_left )
345
+ td_volume : float = min (td_available , volume_left )
346
346
volume_left -= td_volume
347
347
348
348
td_req : OrderRequest = copy (req )
@@ -351,7 +351,7 @@ def convert_order_request_net(self, req: OrderRequest) -> List[OrderRequest]:
351
351
reqs .append (td_req )
352
352
353
353
if volume_left and yd_available :
354
- yd_volume : int = min (yd_available , volume_left )
354
+ yd_volume : float = min (yd_available , volume_left )
355
355
volume_left -= yd_volume
356
356
357
357
yd_req : OrderRequest = copy (req )
@@ -360,7 +360,7 @@ def convert_order_request_net(self, req: OrderRequest) -> List[OrderRequest]:
360
360
reqs .append (yd_req )
361
361
362
362
if volume_left > 0 :
363
- open_volume : int = volume_left
363
+ open_volume : float = volume_left
364
364
365
365
open_req : OrderRequest = copy (req )
366
366
open_req .offset = Offset .OPEN
@@ -370,11 +370,11 @@ def convert_order_request_net(self, req: OrderRequest) -> List[OrderRequest]:
370
370
return reqs
371
371
# Just use close for other exchanges
372
372
else :
373
- reqs : List [ OrderRequest ] = []
374
- volume_left : float = req .volume
373
+ reqs = []
374
+ volume_left = req .volume
375
375
376
376
if pos_available :
377
- close_volume : int = min (pos_available , volume_left )
377
+ close_volume : float = min (pos_available , volume_left )
378
378
volume_left -= pos_available
379
379
380
380
close_req : OrderRequest = copy (req )
@@ -383,9 +383,9 @@ def convert_order_request_net(self, req: OrderRequest) -> List[OrderRequest]:
383
383
reqs .append (close_req )
384
384
385
385
if volume_left > 0 :
386
- open_volume : int = volume_left
386
+ open_volume = volume_left
387
387
388
- open_req : OrderRequest = copy (req )
388
+ open_req = copy (req )
389
389
open_req .offset = Offset .OPEN
390
390
open_req .volume = open_volume
391
391
reqs .append (open_req )
0 commit comments