4
4
import requests
5
5
from datetime import datetime
6
6
from time import sleep
7
+ import traceback
7
8
8
9
from vnpy .api .t2sdk import py_t2sdk
9
10
from vnpy .api .sopt import MdApi
@@ -268,7 +269,6 @@ def onRtnDepthMarketData(self, data: dict) -> None:
268
269
"""
269
270
Callback of tick data update.
270
271
"""
271
-
272
272
symbol = data ["InstrumentID" ]
273
273
exchange = symbol_exchange_map .get (symbol , "" )
274
274
@@ -281,7 +281,7 @@ def onRtnDepthMarketData(self, data: dict) -> None:
281
281
symbol = symbol ,
282
282
exchange = exchange ,
283
283
datetime = datetime .strptime (timestamp , "%Y%m%d %H:%M:%S.%f" ),
284
- name = symbol_name_map [ symbol ] ,
284
+ name = symbol_name_map . get ( symbol , "" ) ,
285
285
volume = data ["Volume" ],
286
286
open_interest = data ["OpenInterest" ],
287
287
last_price = data ["LastPrice" ],
@@ -484,6 +484,40 @@ def on_login(self, data: List[Dict[str, str]]) -> None:
484
484
self .asset_prop = d ["asset_prop" ]
485
485
self .sysnode_id = d ["sysnode_id" ]
486
486
487
+ # Generate ETF contract data
488
+ contract_1 = ContractData (
489
+ symbol = "510050" ,
490
+ exchange = Exchange .SSE ,
491
+ name = "50ETF" ,
492
+ size = 1 ,
493
+ pricetick = 0.001 ,
494
+ product = Product .ETF ,
495
+ gateway_name = self .gateway_name
496
+ )
497
+ self .gateway .on_contract (contract_1 )
498
+
499
+ contract_2 = ContractData (
500
+ symbol = "510300" ,
501
+ exchange = Exchange .SSE ,
502
+ name = "300ETF" ,
503
+ size = 1 ,
504
+ pricetick = 0.001 ,
505
+ product = Product .ETF ,
506
+ gateway_name = self .gateway_name
507
+ )
508
+ self .gateway .on_contract (contract_2 )
509
+
510
+ contract_3 = ContractData (
511
+ symbol = "159919" ,
512
+ exchange = Exchange .SZSE ,
513
+ name = "300ETF" ,
514
+ size = 1 ,
515
+ pricetick = 0.001 ,
516
+ product = Product .ETF ,
517
+ gateway_name = self .gateway_name
518
+ )
519
+ self .gateway .on_contract (contract_3 )
520
+
487
521
self .query_contract ()
488
522
489
523
def on_query_position (self , data : List [Dict [str , str ]]) -> None :
@@ -599,40 +633,6 @@ def on_query_contract(self, data: List[Dict[str, str]]) -> None:
599
633
self .gateway .write_log ("合约信息查询失败" )
600
634
return
601
635
602
- # Generate ETF contract data
603
- contract_1 = ContractData (
604
- symbol = "510050" ,
605
- exchange = Exchange .SSE ,
606
- name = "50ETF" ,
607
- size = 1 ,
608
- pricetick = 0.001 ,
609
- product = Product .ETF ,
610
- gateway_name = self .gateway_name
611
- )
612
- self .gateway .on_contract (contract_1 )
613
-
614
- contract_2 = ContractData (
615
- symbol = "510300" ,
616
- exchange = Exchange .SSE ,
617
- name = "300ETF" ,
618
- size = 1 ,
619
- pricetick = 0.001 ,
620
- product = Product .ETF ,
621
- gateway_name = self .gateway_name
622
- )
623
- self .gateway .on_contract (contract_2 )
624
-
625
- contract_3 = ContractData (
626
- symbol = "159919" ,
627
- exchange = Exchange .SZSE ,
628
- name = "300ETF" ,
629
- size = 1 ,
630
- pricetick = 0.001 ,
631
- product = Product .ETF ,
632
- gateway_name = self .gateway_name
633
- )
634
- self .gateway .on_contract (contract_3 )
635
-
636
636
# Process option contract
637
637
for d in data :
638
638
contract = ContractData (
@@ -660,8 +660,15 @@ def on_query_contract(self, data: List[Dict[str, str]]) -> None:
660
660
661
661
self .gateway .on_contract (contract )
662
662
663
- self .gateway .write_log ("合约信息查询成功" )
664
- self .query_order ()
663
+ symbol_exchange_map [contract .symbol ] = contract .exchange
664
+ symbol_name_map [contract .symbol ] = contract .name
665
+
666
+ if len (data ) == 1000 :
667
+ position_str = d ["position_str" ]
668
+ self .query_contract (position_str )
669
+ else :
670
+ self .gateway .write_log ("合约信息查询成功" )
671
+ self .query_order ()
665
672
666
673
def on_send_order (self , data : List [Dict [str , str ]]) -> None :
667
674
""""""
@@ -741,8 +748,11 @@ def on_error(self, error: dict) -> None:
741
748
742
749
def on_callback (self , function : int , data : dict ) -> None :
743
750
""""""
744
- func = self .callbacks [function ]
745
- func (data )
751
+ try :
752
+ func = self .callbacks [function ]
753
+ func (data )
754
+ except Exception :
755
+ traceback .print_exc ()
746
756
747
757
def send_req (self , function : int , req : dict ) -> int :
748
758
""""""
@@ -870,12 +880,12 @@ def subcribe_topic(self, biz_name: str, topic_name: str) -> int:
870
880
ret , subscriber = self .connection .NewSubscriber (
871
881
sub_callback ,
872
882
biz_name ,
873
- 300000
883
+ 5000
874
884
)
875
885
if ret != 0 :
876
886
error_msg = str (self .connection .GetMCLastError (), encoding = "gbk" )
877
887
msg = f"订阅推送失败:{ error_msg } "
878
- self .td_api . gateway .write_log (msg )
888
+ self .gateway .write_log (msg )
879
889
return
880
890
881
891
# Set subscribe parameters
@@ -951,10 +961,14 @@ def query_order(self) -> int:
951
961
req ["request_num" ] = "10000"
952
962
self .send_req (FUNCTION_QUERY_ORDER , req )
953
963
954
- def query_contract (self ) -> int :
964
+ def query_contract (self , position_str : str = None ) -> int :
955
965
""""""
956
966
req = self .generate_req ()
957
967
req ["request_num" ] = "10000"
968
+
969
+ if position_str :
970
+ req ["position_str" ] = position_str
971
+
958
972
self .send_req (FUNCTION_QUERY_CONTRACT , req )
959
973
960
974
def subcribe_order (self ) -> None :
0 commit comments