admin
2023-08-04 ca310f014336d93eba73ed5010c1c5645424a1e0
1
2
3
4
5
6
7
8
9
10
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
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
B
f¥—dŸWã@sJddlZddlZddlZddlZddlZddlZddlZddlmZddlm    Z    m
Z
ddl m Z dZ dZdZdZd    Zd
Zd
Zd
Zd
Zd
Zd
Zd
Zd
Zd
Zd d d dddddddddddddddgZddgZddd d!d"d#d$d%d&d'd(d)d*d+d,gZd-d.d/gZGd0d1„d1ejƒZ Gd2d3„d3eƒZ!d4d5„Z"d6d7„Z#d;d8d9„Z$e%d:krFe$ƒe&ƒdS)<éN)ÚL2ActionCallback)Úlogger_l2_orderdetailÚlogger_l2_transaction)ÚSendResponseSkManagerztcp://10.0.1.101:6900zudp://224.224.2.19:7889zudp://224.224.224.234:7890z 192.168.84.75z
10.0.1.101Fs603000s600225s600469s600616s600059s002849s605188s603630s600105s603773s603915s603569s603322s603798s605198s603079s600415s600601s018003s113565s002456s002281s002336s000936s000920s000757s002896s002725s000952s000526s000753s000681s002088s002436s100303s109559s112617c@sâeZdZeƒZiZiZdd„Zdd„Zdd„Z    dd„Z
d    d
„Z d d „Z d d„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3S)4Ú    Lev2MdSpicCstj |¡||_d|_dS)NF)Ú    lev2mdapiÚCTORATstpLev2MdSpiÚ__init__Ú_Lev2MdSpi__apiÚis_login)ÚselfÚapi©rú)D:\workspace\GP\trade_huaxin\l2_client.pyr    -s zLev2MdSpi.__init__c
std|ƒdd„‰‡‡fdd„}‡‡fdd„}ˆjsBtjsBtdƒ‚tƒ}x4|D],}|d    }| |¡|d
|d fˆj|<qNW|ˆj}ˆj|}td ||ƒx|D]}    t    j
 |    ¡q¤Wx|D]}    t    j
  |    ¡q¾Wx|D]}    t      |    ¡qØW||ƒ||ƒ|ˆ_dS) NÚset_codes_datacSsXg}g}xF|D]>}| d¡dkr0| | ¡¡q| d¡dkr| | ¡¡qW||fS)NZ00rZ60)ÚfindÚappendÚencode)ÚcodesZ
szse_codesZ    sse_codesÚcoderrrÚ split_codes6s
z-Lev2MdSpi.set_codes_data.<locals>.split_codescsXˆ|ƒ\}}|r0ˆj |tj¡ˆj |tj¡|rTˆj |tj¡ˆj |tj¡dS)N)r
ÚSubscribeOrderDetailrÚTORA_TSTP_EXD_SSEÚSubscribeTransactionÚTORA_TSTP_EXD_SZSE)Ú_codesÚshÚsz)r rrrÚ    subscribeAs z+Lev2MdSpi.set_codes_data.<locals>.subscribecsXˆ|ƒ\}}|r0ˆj |tj¡ˆj |tj¡|rTˆj |tj¡ˆj |tj¡dS)N)r
ZUnSubscribeOrderDetailrrZUnSubscribeTransactionr)rrr)r rrrÚ unsubscribePs z-Lev2MdSpi.set_codes_data.<locals>.unsubscribeuL2尚未登录rééz add del codes) Úprintr ÚconstantZTESTÚ    ExceptionÚsetÚaddÚcodes_volume_and_price_dictÚlatest_codes_setÚl2_data_managerZ target_codesÚdiscardZrun_upload_task)
r Ú
codes_datarrrÚdrZ    add_codesZ    del_codesÚcr)r rrr3s.
 
 
 
 
 
 
 
zLev2MdSpi.set_codes_datacCs|t ¡df|j|<dS)Né)ÚtimeÚ"special_code_volume_for_order_dict)r rÚvolumerrrÚset_code_special_watch_volumetsz'Lev2MdSpi.set_code_special_watch_volumecCs"tdƒt ¡}|j |d¡dS)NÚOnFrontConnectedr )r"rZCTORATstpReqUserLoginFieldr
Z ReqUserLogin)r Z    login_reqrrrr3xszLev2MdSpi.OnFrontConnectedcCstd|d|d||fƒ|ddkrd|_trT|j ttj¡|j ttj    ¡t
rx|j  ttj¡|j  ttj    ¡t rœ|j  ttj¡|j  ttj    ¡tr°|j ttj¡trÄ|j ttj¡trØ|j ttj    ¡trì|j ttj    ¡tr|j ttj    ¡tr|j ttj¡dS)NzAOnRspUserLogin: ErrorID[%d] ErrorMsg[%s] RequestID[%d] IsLast[%d]ZErrorIDZErrorMsgrT)r"r Úg_SubMarketDatar
ZSubscribeMarketDataÚ SH_SecuritiesrrÚ SZ_SecuritiesrÚg_SubTransactionrÚg_SubOrderDetailrÚ g_SubXTSTickZSubscribeXTSTickÚSH_XTS_SecuritiesÚg_SubXTSMarketDataZSubscribeXTSMarketDataÚg_SubBondMarketDataZSubscribeBondMarketDataÚSZ_Bond_SecuritiesÚg_SubBondTransactionZSubscribeBondTransactionÚg_SubBondOrderDetailZSubscribeBondOrderDetailÚ g_SubNGTSTickZSubscribeNGTSTick)r Z pRspUserLoginÚpRspInfoÚ
nRequestIDÚbIsLastrrrÚOnRspUserLogin~s2zLev2MdSpi.OnRspUserLogincCs tdƒdS)NÚOnRspSubMarketData)r")r ÚpSpecificSecurityrArBrCrrrrE¡szLev2MdSpi.OnRspSubMarketDatacCs tdƒdS)NÚ OnRspSubIndex)r")r rFrArBrCrrrrG¤szLev2MdSpi.OnRspSubIndexcCs tdƒdS)NÚOnRspSubTransaction)r")r rFrArBrCrrrrH§szLev2MdSpi.OnRspSubTransactioncCs tdƒdS)NÚOnRspSubOrderDetail)r")r rFrArBrCrrrrIªszLev2MdSpi.OnRspSubOrderDetailcCs tdƒdS)NÚOnRspSubBondMarketData)r")r rFrArBrCrrrrJ­sz Lev2MdSpi.OnRspSubBondMarketDatacCs tdƒdS)NÚOnRspSubBondTransaction)r")r rFrArBrCrrrrK°sz!Lev2MdSpi.OnRspSubBondTransactioncCs tdƒdS)NÚOnRspSubBondOrderDetail)r")r rFrArBrCrrrrL³sz!Lev2MdSpi.OnRspSubBondOrderDetailcCs tdƒdS)NÚOnRspSubXTSMarketData)r")r rFrArBrCrrrrM¶szLev2MdSpi.OnRspSubXTSMarketDatacCs tdƒdS)NÚOnRspSubXTSTick)r")r rFrArBrCrrrrN¹szLev2MdSpi.OnRspSubXTSTickcCs tdƒdS)NÚOnRspSubNGTSTick)r")r rFrArBrCrrrrO½szLev2MdSpi.OnRspSubNGTSTickc Cstd|d|d|d|d|d|d|d|dfƒx&td    |ƒD]}td
|||fƒqHWx&td    |ƒD]}td |||fƒqpWdS) Nz—OnRtnMarketData SecurityID[%s] LastPrice[%.2f] TotalVolumeTrade[%d] TotalValueTrade[%.2f] BidPrice1[%.2f] BidVolume1[%d] AskPrice1[%.2f] AskVolume1[%d]Ú
SecurityIDÚ    LastPriceÚTotalValueTradeÚ    BidPrice1Ú
BidVolume1Ú    AskPrice1Ú
AskVolume1rzfirst level buy  [%d] : [%d]zfirst level sell [%d] : [%d])r"Úrange)r ÚpDepthMarketDataÚFirstLevelBuyNumÚFirstLevelBuyOrderVolumesÚFirstLevelSellNumÚFirstLevelSellOrderVolumesÚ    buy_indexÚ
sell_indexrrrÚOnRtnMarketDataÀszLev2MdSpi.OnRtnMarketDatac    Cs4td|d|d|d|d|d|dfƒdS)NzmOnRtnIndex SecurityID[%s] LastIndex[%.2f] LowIndex[%.2f] HighIndex[%.2f] TotalVolumeTraded[%d] Turnover[%.2f]rPZ    LastIndexZLowIndexZ    HighIndexZTotalVolumeTradedZTurnover)r")r ZpIndexrrrÚ
OnRtnIndexÕszLev2MdSpi.OnRtnIndexc Cs”t|dƒ}|j |¡\}}|dkr>|d|ddkrNdSn|d|krNdS|ddkrâ|d|d|dd|d    |d
|d d d œ}|d}|d}|dkr²||d<d|d<n|dkrÊ||d<d|d<td|ƒt |d¡njt|d|ƒdkrL|d|d|d|d    |d
|d |d|d|d ¡dœ    }td|ƒt |¡t     
d|d|d|d|d    |d
|d |d|d|df    ¡dS)NrPÚ
TradePriceÚVolumei ¡Ú TradeVolumeÚExecTypeó2Ú2Ú    TradeTimeÚMainSeqÚSubSeqÚD)rPÚPricerbÚ    OrderTypeÚ    OrderTimerhriÚ OrderStatusÚBuyNoÚSellNorÚOrderNOÚ1ÚSideu 逐笔委托Tgü©ñÒMbP?)    rPrarcrmrhrirorprdu 逐笔成交z‡OnRtnTransaction SecurityID[%s] TradePrice[%.2f] TradeVolume[%d] TradeTime[%d] MainSeq[%d] SubSeq[%d] BuyNo[%d] SellNo[%d] ExecType[%s]) Ústrr'Úgetr"r)Úadd_l2_order_detailÚabsÚdecodeZadd_transaction_detailrÚinfo)r Ú pTransactionrÚ
min_volumeÚlimit_up_priceÚitemZbuyNoZsellNorrrÚOnRtnTransactionàsX     
 
 
 
zLev2MdSpi.OnRtnTransactioncCs`d}t|dƒ}||jkrX|j|d|dkrX|j|dt ¡krLd}n |j |¡|sž|j |¡\}}|dkrŽ|d|ddkrždSn|d|krždS|d|d|d|d     ¡|d
 ¡|d |d |d |d|d ¡dœ
}td|ƒt     |¡t
  d|d|d|d|d    |d
|d |d |d |d|d|d|d|df ¡dS)NFrPrrbr Trki ¡rsrlrmrhrirqrn)
rPrkrbrsrlrmrhrirqrnu 逐笔委托z¬OnRtnOrderDetail SecurityID[%s] Price[%.2f] Volume[%d] Side[%s] OrderType[%s] OrderTime[%d] MainSeq[%d] SubSeq[%d] OrderNO[%s] OrderStatus[%s] Info1[%d] Info2[%d] Info3[%d]ZInfo1ZInfo2ZInfo3) rtr0r/Úpopr'rurxr"r)rvrry)r Ú pOrderDetailZ
can_listenrr{r|r}rrrÚOnRtnOrderDetailsJ 
 
 
zLev2MdSpi.OnRtnOrderDetailc Cstd|d|d|d|d|d|d|d|dfƒx&td    |ƒD]}td
|||fƒqHWx&td    |ƒD]}td |||fƒqpWdS) Nz›OnRtnBondMarketData SecurityID[%s] LastPrice[%.2f] TotalVolumeTrade[%d] TotalValueTrade[%.2f] BidPrice1[%.2f] BidVolume1[%d] AskPrice1[%.2f] AskVolume1[%d]rPrQrRrSrTrUrVrzfirst level buy  [%d] : [%d]zfirst level sell [%d] : [%d])r"rW)r rXrYrZr[r\r]r^rrrÚOnRtnBondMarketDataGszLev2MdSpi.OnRtnBondMarketDatac CsFtd|d|d|d|d|d|d|d|d    |d
f    ƒdS) Nz‹OnRtnBondTransaction SecurityID[%s] TradePrice[%.2f] TradeVolume[%d] TradeTime[%d] MainSeq[%d] SubSeq[%d] BuyNo[%d] SellNo[%d] ExecType[%d]rPrarcrgrhrirorprd)r")r rzrrrÚOnRtnBondTransaction]szLev2MdSpi.OnRtnBondTransactionc Cs@td|d|d|d|d|d|d|d|d    fƒdS)
NzvOnRtnBondOrderDetail SecurityID[%s] Price[%.2f] Volume[%d] Side[%s] OrderType[%s] OrderTime[%d] MainSeq[%d] SubSeq[%d]rPrkrbrsrlrmrhri)r")r r€rrrÚOnRtnBondOrderDetaillszLev2MdSpi.OnRtnBondOrderDetailc Cstd|d|d|d|d|d|d|d|dfƒx&td    |ƒD]}td
|||fƒqHWx&td    |ƒD]}td |||fƒqpWdS) NzšOnRtnXTSMarketData SecurityID[%s] LastPrice[%.2f] TotalVolumeTrade[%d] TotalValueTrade[%.2f] BidPrice1[%.2f] BidVolume1[%d] AskPrice1[%.2f] AskVolume1[%d]rPrQrRrSrTrUrVrzfirst level buy  [%d] : [%d]zfirst level sell [%d] : [%d])r"rW)r rXrYrZr[r\r]r^rrrÚOnRtnXTSMarketDatayszLev2MdSpi.OnRtnXTSMarketDatac CsFtd|d|d|d|d|d|d|d|d    |d
f    ƒdS) NzuOnXTSTick TickType[%s] SecurityID[%s] Price[%.2f] Volume[%d] TickTime[%d] MainSeq[%d] SubSeq[%d] BuyNo[%d] SellNo[%d]ÚTickTyperPrkrbÚTickTimerhrirorp)r")r ÚpTickrrrÚ OnRtnXTSTickszLev2MdSpi.OnRtnXTSTickc CsFtd|d|d|d|d|d|d|d|d    |d
f    ƒdS) NzyOnRtnNGTSTick TickType[%s] SecurityID[%s] Price[%.2f] Volume[%d] TickTime[%d] MainSeq[%d] SubSeq[%d] BuyNo[%d] SellNo[%d]r†rPrkrbr‡rhrirorp)r")r rˆrrrÚ OnRtnNGTSTickszLev2MdSpi.OnRtnNGTSTickN) Ú__name__Ú
__module__Ú __qualname__r%r(r'r0r    rr2r3rDrErGrHrIrJrKrLrMrNrOr_r`r~rr‚rƒr„r…r‰rŠrrrrr(s8A# 9. rc@seZdZdd„ZdS)ÚMyL2ActionCallbackc
Csttd|||ƒy*t |¡t dt ||dddœ¡¡Wn6tk
rn}zt d||t|ƒ¡Wdd}~XYnXdS)Nu接受到命令Zl2_cmdru 设置成功)rÚmsgÚcommon)    r"ÚspirrZsend_normal_responseZ load_responser$Zsend_error_responsert)r Z    client_idZ
request_idr+ÚerrrÚOnSetL2Position®s
z"MyL2ActionCallback.OnSetL2PositionN)r‹rŒrr“rrrrrެsrŽcCs`tt ¡ƒtj}t |d¡}t|ƒa| t¡|tjkrF| t    ¡n| 
t t d¡|  ¡dS)NTÚ)r"rZ CTORATstpLev2MdApi_GetApiVersionZTORA_TSTP_MST_MCASTZ&CTORATstpLev2MdApi_CreateTstpLev2MdApirr‘Z RegisterSpiZ RegisterFrontÚ Front_AddressZRegisterMulticastÚMulticast_AddressÚLocal_Interface_AddressZInit)Z    g_SubModer rrrÚ    __init_l2¹s  
 
 
r˜cCslxfyT| ¡}|rT| d¡}t |¡}|ddkrT|dd}|dd}t ||¡WqYqXqWdS)Nzutf-8ÚtypeZ listen_volumeÚdatar1r)ÚrecvrxÚjsonÚloadsr‘r2)ÚpipeÚvalueršr1rrrrÚ__receive_from_pipeÙs
 
   r csdtƒˆdk    r4tj‡fdd„d}| d¡| ¡t ¡at t    j
t    j t ƒ¡t  ¡tdƒdS)NcstˆƒS)N)r r)ržrrÚ<lambda>ëózrun.<locals>.<lambda>)ÚtargetTul2_client启动成功)r˜Ú    threadingÚThreadÚ    setDaemonÚstartÚcommand_managerZL2CommandManagerZl2CommandManagerZinitr#Z    SERVER_IPZ SERVER_PORTrŽÚrunr")ržZt1r)ržrr©ès
r©Ú__main__)N)'rœr¤r/r¨r#r)rrZmylogrrÚ trade_clientrr•r–ZMulticast_Address2r—ZSender_Interface_Addressr4r7r8r9r;r@r<r>r?r5r:r6r=rrrŽr˜r r©r‹ÚinputrrrrÚ<module>sP