編譯方法:
Requirements:
- 使用ICC 編譯,使用gcc 會有warning
- 需要 Evolution/UtilHeader 這個項目
- ICC 編譯時 需要加上 imf,irng,svml,否則會出現能編譯足丢,但是python import 時找不到
進入PyUtil目錄后:
./make.sh
注意 現在改成使用UtilHeader 這個路徑下面的文件谷异,編譯環(huán)境需要調整下
使用方法(以ipython 為例)
import WqUtils (必須 WqUtils.so 在sys.path 路徑中)
-
使用 WqUtils.PyFastLog
a = WqUtils.PyFastLog() a.init() a.log()
-
使用 WqUtils.PyIPCMQ
a = WqUtils.PyIPCMQ(...) ptr = a.pull() #(data 是一個python class,但是它包含c++ 代碼中相對應struct的成員 ) data = PyIPCMQ.asTradeMsg(ptr) or data = PyIPCMQ.asWQData(ptr)
還提供一個工具函數,根據主力次主力拿到真實合約
tickerName = PyIPCMQ.market2STName("rb0001")
以上是舊版的用法,仍然可以用硝岗,但不推薦
新版本(20170622) 推薦的用法
事先,你必須知道 server 上 IPCMQ 里面存放的數據是 WQData 還是TradeMsg
然后 弄息,參照testIPCMQ.py 演示的代碼如果是存放TradeMsg
mq =PyTradeMsgIPCMQ(ipcKey=0x0b0b0200,queueID="MSG_EMS_RSP", \ appID="YourName4",isreader=True) msg = mq.pull() print msg print msg.cmdType pritn msg.engineID # 注意 TradeMsg 比 WQData 的 pull 返回值 多了兩個字段:cmdType 和 engineID # 也可以自己根據 msg.cmdType,msg.engineID 來判斷 msg.data是哪種數據 # 支持PyTRawOrder,PyTOrderAction,PyTEngInfo,PyTEmsNotice, # PyTRspExch,PyTRspFill,PyTRspOver 這七種數據結構, # 成員變量和C++中struct 保持一致 if isinstance(msg.data,PyTRawOrder): print msg.data.orderID ... elif isinstance(msg.data,PyTRspExch): pass elif isinstance(msg.data,PyTRspExch): pass
如果存放 WQData
mq = PyWQDataIPCMQ(ipcKey=0x0ae8c120,queueID="ares", \ appID="YourName",isreader=True) msg = mq.pull() # 返回的msg 是 PyWQTickerIndex,PyWQTimeEvent,PyWQFutureL1, # PyWQFutureL2,PyWQFutureL2Shfe 中的一種,對應 c++ 的 相應wqdata print msg print type(msg) if isinstance(msg,PyWQTickerIndex): pass
-
使用TimeUtil
WqUtils.TimeUtil.getTimeUs() WqUtils.TimeUtil.getTimeNs() WqUtils.TimeUtil.getClock() WqUtils.TimeUtil.getClockLow() WqUtils.TimeUtil.getTimeNsDay(clock,fauseAdjust) WqUtils.TimeUtil.getTimeStr(outLen,ns) WqUtils.TimeUtil.getDateStr(rollBack)