学理财
上财鲤鱼

IB API自动化交易原理

相比自动化交易在国内倍受限制,国外对自动化交易基本都持开放态度。国际化的券商IB(Interactive Broker), 中文叫盈透证券。提供丰富的API和文档,可在此基础上开发自己的自动化交易程序。 IB API自动化交易原理的原理,其实是通过调用IB提供的API,把交易指令发给IB的客户端TWS,TWS把交易指令发送给IB的服务端,然后由IB服务端发送给交易所。TWS本身也是基于IB API开发的。应该是1个TWS客户端可支持8个API连接。就是说你可以启动8个你自己的JAVA客户端进程同时给TWS发交易指令。当然IB也提供C++, .NET, activex等其他语言的API.

购买数据服务

如果要获取实时的交易数据,必须购买数据服务。美国的我记的是1个月10多美金。可登录IBKR.COM在账户管理中选择购买。据说一个月佣金超多几十美金的话,可以免费。如果要交易港股,就要购买港股数据,一个月的15港币。

中文文档和客户端软件地址

中文文档:https://www.ibkr.com.cn/cn/index.php?f=3504
IB API中文文档:https://www.ibkr.com.cn/cn/index.php?f=5234&ns=T
要使用IB API, 必须先安装他的客户端软件,软件下载地址:http://interactivebrokers.github.io/

安装API客户端软件

TWS API Install 971.06.msi


安装好后的目录结构:


修改本地安装的TWS的配置

本地的TWS中的要选中支持API




运行例子代码

TWS API安装目录下的samples\Java\apidemo\ApiDemo.java这些应用和文档JavaAPIGettingStarted.pdf说明是对应的,可参考文档,一步步跑起来。可在eclipse中直接运行samples\Java\apidemo\ApiDemo.java
我在在jdk1.7.0_80 下运行没有问题 在JavaClient\com\ib\controller\ApiController.java中的realtimeBar()中可实时获取市场交易数据,5秒一次。可在此基础上进行自动化或程序化交易。执行samples\Java\apidemo\ApiDemo.java,然后点request-realtime bars就可以看到每5秒收到一次市场数据。这个的带JAVA图形界面的。
或者直接运行samples\Java\apidemo\RealTimeData.java 也可以,这个是不带图形界面的。
参考代码:买100股YY,
NewContract contract = new NewContract();
contract.secType(SecType.STK);
contract.currency("USD&# 34;);
contract.exchange( "SMART&# 34;);
contract.primaryExch("ISLAND&# 34;);
contract.symbol( "YY&# 34;);
NewOrder m_order = new NewOrder();
myorderid= myorderid +1;
m_order.orderId(myorderid);
m_order.orderType(OrderType.LMT);
m_order.totalQuantity(100);
m_order.action(Action.BUY);
m_order.lmtPrice(close);
m_client.placeOrder( contract, m_order);
sendEOM();

参考代码

我写了一个简单的乒乓策略的交易港股,美股的例子在:samples\Java\apidemo\RealTimeData.java
代码下载: IB API自动化交易港股,美股
很多地方没考虑,如交易成功的确认,交易ID等,希望感兴趣的可在此基础上完善 。


技术支持

在开发过程中有什么问题,还可以打IB在上海的客户电话。

评论 抢沙发

评论前必须登录!

立即登录   注册

登录

忘记密码 ?

切换登录

注册