如何学习盈透 api 的开发?

论坛 期权论坛 期权     
你好   2018-10-21 04:22   32283   9
你好,我想学习盈透api的开发,从而实现自动化交易。

关于编程本人只有过matlab编程和mql语言的一点经验,对盈透api开发一无所知,网上的资源很少 大多是官网tws的使用手册,看不很懂,对api开发是怎么一回事还不是很了解。
  • 能不能解释一下 什么是盈透api的开发 ?
  • 盈透api的开发过程是怎么样的?
  • 我该怎么学习盈透api的开发,并成功实现程序化交易,学习过程中有没有相关的书籍参考?
  • 有没有盈透api开发的源代码让我参考?

谢谢谢谢
分享到 :
0 人收藏

9 个回复

倒序浏览
推荐
Ramon  3级会员 | 2016-9-4 19:58:59 发帖IP地址来自
api的使用参考例程,业务不明白的地方问在线客服。
2#
不知雪舞  3级会员 | 2017-10-10 17:23:05 发帖IP地址来自
这个问题对于盈透api初使用者有很大的帮助,尤其是用python的交易员的回答很棒,但这个问题的回答还缺少了一些踩坑的经历,我这里补充一些盈透api开发需要注意的点:
  • 盈透有账户和用户的概念,比如申请一个模拟账户,账户名大概是DUXXX,而用户名不一样,一个账户可以分配多个用户。
  • 盈透行情是分用户的(不是账户),每个用户的行情需要单独登录tws软件,交易可以由主账户给子账户下单 但是行情不可以 行情数据都是独立的 子账户订阅的付费行情,主账户并不能取得。
  • 盈透证券上海支持电话:021 6086 8586
  • 注册账号后,在账号管理页面有个支持菜单,里面有在线聊天,在这里可以快速的和相关客服聊天,有中文支持。
  • 使用API下达一个新的定单时,定单代号数字必须大于前一个使用的数字。例如,如果你用定单代号11下达一个定单,则下一个定单的定单代号应该至少为12 。
  • 使用API修改定单,需要使用相同的定单代号重新提交你希望修改的定单,但使用依据需要修改的价格或数量。 仅某些区域,比如价格或数量可以使用这个方法来更改。 如果你想改变定单类型或行动,你将需要取消定单然后重新提交一个新的定单。
  • 账户名:aedemo 密码:demouser,这个用户可以订阅模拟期货数据,但是不可以用市场扫描仪。
  • C++ API市场扫描仪使用时aboveVolume和averageOptionVolumeAbove的值需要送INT_MAX,不然扫描不到数据。
  • 使用api连接tws时,一连接就断开,如果是在别的机器连的,则需取消tws设置中的“仅允许来自本地主机的连接”
  • api连接有50 tps的限制。
  • API新闻出错:Source code unchecked in API news Settings:BZ,这种错误估计是使用reqMktData接口的第三个参数送了,传空就好。
  • 先关掉tws, 然后触发connectionClosed()回调, 然后再回调里去调用eDisconnect,再eConnect,然后我就去扫描市场 这时候报市场扫描超时,这是怎么回事呢?(特别说明: 我专门开了个线程循环去checkClient,waitForSignal,processMsgs )
    答:问题已经定位到了,是在tws软件重启过程中,如果tws没有完全启动好,api是可以连接上的,但是这时候如果你去使用m_pReader->checkClient();,m_osSignal.waitForSignal(),m_pReader->processMsgs()这一系列操作,会直接导致连接断开。
    解决办法就是在重连成功的时候等待一段时间,待tws软件完全启动后之后再去操作信号,然后再去重新订阅行情,这样就没有问题了。
  • IB行情api接入是有限制的,就是一个帐号只能够订阅100个代码行情,可以买扩展包,但一个账户最多也就能订阅1100个产品行情
  • 对于“持仓量”这个行情(盈透里叫未平仓合约),22是指期权的未平仓合约id,86是期货的未平仓合约id,但是如果要86返回的话一定要在Generic Tick Type中加上588,也就是reqMktData第三个参数genericTicks要送"588",这个地址http://interactivebrokers.github.io/tws-api/tick_types.html可以看到可用的行情字段。
  • tws的api日志在C:\Jts\api.0.Mon.log这种形式。而tws的日志,在TWS中,您按键盘上的Ctrl+Alt+U即可知道对应路径,另外您这边也要将设置中的logging level 从error 改成Detail。
3#
菠菜philsong  3级会员 | 2016-10-4 09:42:42 发帖IP地址来自
大约1年前一个朋友在搞盈透,让我看下搞个黄金白银的套利,我当时看的是官方C++的demo,代码各种烂。
前几天放假,正好又说他搞的C#demo越跑与慢(必然是bug),让我帮忙看下Java怎么搞。我最近估计会抽出时间研究下这块,大家可以一起讨论:)

人生苦短,我用Java.
API:Interactive Brokers
9.72beta document:TWS API v9.72: Trader Workstation API 文档很短,没什么卵用。

刚刚上传了一个Java samples,在官方版本上修复一些错误:GitHub - philsong/ibjts
中文文档,这个看了下很有用:https://github.com/philsong/ibjts/blob/master/APIprintable_CN.pdf

10.2号申请注册了个号,让我提交住宅证明,暂时还没通过(然而就收到北京3个电话说相关方推送她们说我最近股票开户,给我推荐股票,我怀疑盈透透露了我注册手机,没想到啊,国际大券商啊!!!)

代码解析:
com.ib.client的是对ib协议的核心封装

com.ib.contracts只是继承com.ib.client.Contract实现的几个具体类
com.ib.controller只是对com.ib.client中EWrapper的一层封装实现。
sample分析:
TestJavaClient直接调用com.ib.client,加上GUI进行测试。
apidemo用了com.ib.controller, 然后加上GUI进行测试。
samples直接调用com.ib.client且没有涉及GUI部分。

总体来说,代码很简单,我从10.2号看了两个晚上基本上明白就那么回事了。剩余的就是熟悉下业务的逻辑,重点就是搞策略了,比如抓下数据用stata搞个高大尚的统计套利:)

package com.ib.client,其包含以下classes:

EWrapper

该接口负责从TWS接收信息。

ComboLeg

该class包含用于描述组合边的属性。

Contract

该class包括用于描述合约的属性。

ContractDetails

该class包括用于描述合约详细的属性,包括债券详细。

EClientSocket

该class负责向TWS发送信息。

Execution

该class包含用于描述交易的属性。

ExecutionFilter

该class包含用于描述执行过滤器条件的属性。

Order

该class包含用于描述定单的属性

OrderState

该class包含用于描述定单状态的属性。

ScannerSubscription

该class包含用于描述市场扫描元素的属性。

TickType

该class定义通用跳动类型和其跳动值

使用Java API连接TWS

1. 将com.ib.client.*输入到您的源代码文件。
2. 实施EWrapper接口。这个class将从插口接收信息。
3. 取代下列方法:

Ewrapper方法

tickPrice()

tickSize()

tickOptionComputation()

tickGeneric()

tickString()

tickEFP()

处理市场数据。

orderStatus()


接收定单状态。

openOrder()

接收开放定单。

error()

接收出错信息。

connectionClosed()

在TWS终止连接时发出通知。

updateAccountValue()

接收当前账户值。

updateAccountTime()

接收最后一次账户更新信息。

updatePortfolio()

接收当前投资组合信息。

nextValidId()

接收连接时的下一个有效定单代号。

contractDetails()

接收合约信息。

contractDetailsEnd()

确认一个给定合约细节请求的结束。

bondContractDetails()

接收债券合约信息。

exectDetails()

接收执行报告信息。

updateMktDepth()

接收市场深度信息。

updateMktDepthL2()

接收二级市场深度信息。

updateNewsBulletin()

接收IB新闻公告。

managedAccounts()

接收金融顾问(FA)管理的账户列表。

receiveFA()

接收FA配置信息。

historicalData()

接收历史数据结果。

scannerParameters()

接收描述扫描仪订阅的有效参数的XML文件。

scannerData()

接收市场扫描仪结果。

realTimeBar()

接收实时柱。

currentTime()

接收服务器的当前系统时间。

fundamentalData()

接收路透社全球基本面市场数据。

4. 实例EClientSocket class。该对象将被用于发送信息到TWS。
5. 调用下列方法:

EClientSocket方法

eConnect()

连接TWS。

eDisconnect()

断开TWS。

reqMktData()

请求市场数据。

cancelMktData()

取消市场数据。

reqMktDepth()

请求市场深度。

cancelMktDepth()

取消市场深度。

reqContractDetails()

请求合约详细。

placeOrder()

下达定单。

cancelOrder()

取消定单。

reqAccountUpdates()

请求账户值、投资组合、和账户更新时间信息。


reqExecutions()

请求日执行报告列表。

reqOpenOrders()

请求关于请求客户的当前开放定单列表和将TWS开发定单与客户相连。 相连仅在请求客户的客户代号为0时发生。

reqAllOpenOrders()

请求所有开放定单的列表。

reqAutoOpenOrders()

自动将新的TWS运作与客户相连。 相连仅在请求客户的客户代号为0时发生。

reqNewsBulletin()

请求IB新闻公告。

cancelNewsBulletins()

取消IB新闻公告。

setServerLogLevel()

设置API请求和处理记录的级别。

reqManagedAccts()

请求金融顾问(FA)管理的账户编码列表。

requestFA()

请求TWS的FA配置信息。

replaceFA()

修改API的FA配置信息。

reqScannerParameters()

请求描述扫描仪订阅有效参数的XML文件。

reqScannerSubscription()

请求市场扫描仪结果。

cancelScannerSubscription()

取消扫描仪订阅。

reqHistoricalData()

请求历史数据。

cancelHistoricalData()

取消历史数据。

reqRealTimeBars()

请求实时柱。

cancelRealTimeBars()

取消实时柱。

exerciseOptions()

行使期权。

reqCurrentTime()

请求当前服务器时间。

serverV ersion()

反馈API应用程序连接的TWS实例的版本。

TwsConnectionTime()

反馈API应用程序连接到TWS的时间


reqFundamentalData()

请求路透社全球基本面数据。 必须通过账户管理订阅路透社基本面才可以接收数据。

cancelFundamentalData()

取消路透社全球基本面数据。


可以认为samples文件夹中的testbed是入门最佳之选。他演示实现了EWrapper接口 ,如EWrapperImpl,基本看懂这个就可以跑自动化程序了。至于程序化,分享一个我内部培训的文档 https://pan.baidu.com/s/1hr909wg
本人程序狗野路子,没去过什么银行证券,策略都是实战总结的,大家笑笑就好,要是赐教下就更好了
apidemo昨晚跑起来,待续。。。

4#
宽客人生  4级常客 | 2016-11-23 18:18:31 发帖IP地址来自
学习学习~希望尽早可以有成熟的交易接口可以使用
5#
Hui Liu  2级吧友 | 2016-12-20 16:09:03 发帖IP地址来自
Interactive Brokers 盈透专门为广大的Python爱好者举办了一次网络研讨会。时间是2016年11月10日。 有兴趣的朋友可以登录到盈透官方网站看看当时的视频。网络研讨会的内容是介绍如何用IBridgePy,一个Python 工具,用盈透API做自动交易。IBridgePy模仿了著名的quantopian的程序格式,但是提供了更加丰富多样的功能。不仅可以处理股票,还可以处理期货,期权,外汇等所有盈透的标的物。
https://www.interactivebrokers.com/en/index.php?f=2227
6#
吴霸舸  3级会员 | 2017-4-24 15:19:31 发帖IP地址来自
订阅 L2 似乎需要对 contract 中的 symbol 和 exchange 进行组合, 只有在正确的情况下才能返回 L2的数据. AAPL+ISLAND. 但是这个组合应该从哪里去找呢?
Deep market data is not supported for this combination of security type/exchange
7#
述而不争  4级常客 | 2017-4-18 16:29:51 发帖IP地址来自
刚刚准备试一下,这个api里面如果算均线布林线的值的话,是要自己算还是有引用的接口?
8#
永远的乌托帮  2级吧友 | 2016-10-16 18:35:21 发帖IP地址来自
很想知道IB的订单有没有和MT4的magic number类似的东西,可以用来区分订单?
10#
金王  2级吧友 | 2016-9-4 15:52:38 发帖IP地址来自
ibkr有手册和例程的,例如c和java
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:367
帖子:9
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP