vnpy/vn.ib/README.md

47 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# vn.ib
目前vn.ib还处于开发中完成了封装部分的工作欢迎贡献测试相关的代码。
### 简介
基于IB POSIX C++ API的Python封装提供原生API的全部功能同时Python代码中函数和类的命名定义都和C++中保持一致。
### vn.ib和IbPy的不同点
1. vn.ib基于Boost.Python封装了原生Posix C++接口比起IbPy能提供更好的性能
2. vn.ib底层代码中添加了异常捕捉功能避免IbPy的函数触发异常后没有报错直接断开连接导致无法调试的问题
3. vn.ib安装时可能需要编译默认的pyd在Windows7 Python 2.7 32位下编译IbPy是纯Python的可以直接使用
4. vn.ib基于较新的IB官方API9.72 beta开发IbPy则是采用了较老的API9.70 stable
### 对原生接口的修改部分
shared_ptr.h和SoftDollerTier.h中加入了对象比较函数的代码用于实现其对应vector的自动Python封装。
### Linux版
作者做了一些尝试但目前vn.ib文件夹下的CMakeLists.txt无法编译出可以使用的so文件最终在Python中import时会报错
undefined symbol: _ZN7ECLIENT11EncodeFieldIPKcEEvRSoT
目前已经踩过的坑:
1. 原生API里有个调用min函数的地方会报错要修改为std::min
2. 上面的原生接口修改部分依旧必须修改
3. IB API提供了所有的源文件所以调用链接器时无需加上IB API所在的文件夹不确定
希望社区里有朋友能试着解决这个问题吧,跳坑方法:
1. 先进入到vn.ib/ibapi/linux文件夹下运行bash build.sh编译IB API
2. 然后进入vn.ib文件夹下运行bash build.sh编译vn.ib
3. vn.ib/build/lib下的vnib.so复制到vn.ib/test文件夹下运行test.py
4. 会出现上面的undefined symbol错误
更新编译问题已解决需要在EClient.h和EClient.cpp中加入EncodeField<const char*>这一对EncodeField<T>的偏特化实现well我并不十分确定是否该用“偏特化”这个词具体请参考linux文件夹下的代码。
但目前Linux下的编译在调用eConnect函数时会卡住从TWS中查看会有API发起的连接处于“pending”的状态猜测问题可能出在底层的POSIX线程锁相关的地方。
### API版本
版本IB API for Windows beta 9.72.18
日期2016-09-14
链接:[http://interactivebrokers.github.io/](http://interactivebrokers.github.io/)