编译方法:
Requirements:
- 使用ICC 编译,使用gcc 会有warning
- 需要 Evolution/UtilHeader 这个项目
- ICC 编译时 需要加上 imf,irng,svml,否则会出现能编译,但是python import 时找不到
进入PyUtil目录后:
./make.sh
注意 现在改成使用UtilHeader 这个路径下面的文件,编译环境需要调整下
使用方法(以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)