基于 IB API 的外汇期货期权程序化交易 讲师 : 赵博
* 系统架构 * IB API 模块 目录 * 消息总线模块 * 行情采集处理引擎模块 * 持久化存储模块
系统架构 全球场内期权实时行情自动化采集
功能方法名称实现方式 建立 API 连接 connect 在该 connect 方法中, 根据企业消息服务器 TWS.Q.CMD 队列中获取到的消息命令 CONNECT:CONNECT, 调用 EClientSocket 类的 econnect 方法, 并建立 EReader 线程 断开 API 连接 disconnect 在该 disconnect 方法中, 根据企业消息服务器 TWS.Q.CMD 队列中获取到的消息命令 DISCONNECT: DISCONNECT, 调用 EClientSocket 类的 edisconnect 方法 IB API 请求市场实时行情数据 reqmktdat 在该 reqmktdat 方法中, 根据企业消息服务器 TWS.Q.CMD 队列中获取到的消息命令如 REQMKTDAT:10201709,FUT,GLOBEX,6EU7, 解析冒号后面用逗号分隔的请求合约信息, 调用 EClientSocket 类的 reqmktdata 方法 取消市场实时行情数据 cancelmktdat 在该 cancelmktdat 方法中, 根据企业消息服务器 TWS.Q.CMD 队列中获取到的消息命令如 CANCELMKTDAT:10,10201709, 解析冒号后面用逗号分隔的 tickerid 列表, 针对不同的 tickerid, 依次调用 EClientSocket 类的 cancelmktdata 方法 接收市场实时 Tick 价格数据 tickprice 实现 EWrapper 接口的 tickprice 方法, 将该方法的参数 tickerid field price t ickattr 按照一定格式封装成实时 T ick 价格数据消息, 发送到企业消息服务器 TWS.Q.TICKPRICE 队列中 接收市场实时 Tick 量数据 ticksize 实现 EWrapper 接口的 ticksize 方法, 将该方法的参数 tickerid field size 按照一定格式封装成实时 Tick 量数据消息, 发送到企业消息服务器 TWS.Q.TICKSIZE 队列中 接收 API 日志数据 error 实现 EWrapper 接口的 error 方法, 将该方法的参数按照一定格式封装成 API 日志消息, 发送到企业消息服务器 TWS.Q.MSG 队列中
队列名称 说明 交易总线 TWS.Q.CMD TWS.Q.MSG 由处理引擎向该队列发送命令消息, 如建立 API 连接命令消息 CONNECT:CONNECT; 断开 API 连接命令消息 DISCONNECT: DISCONNECT; 请求市场实时行情数据命令消息如 REQMKTDAT:10201709,FUT,GLOBEX,6EU7; 取消市场实时行情数据命令消息如 CANCELMKTDAT:10,10201709 IB API 的 main 方法从该队列中接收消息, 根据消息前缀的不同, 分别调用 connect 方法 disconnect 方法 reqmktdat 方法和 cancelmktdat 方法 IB API 中的 main 方法 connect 方法 disconnect 方法 reqmktdat 方法 cancelmktdat 方法 error 方法会将 API 日志消息发送到该队列中 处理引擎从该队列中获取 API 日志消息, 并存储在 API 消息表中 TWS.Q.TICKPRICE IB API 中的 tickprice 方法会将市场实时 Tick 价格数据消息发送到该队列中 处理引擎从该队列中获取市场实时 Tick 价格数据消息, 并存储到相应的市场实时行情库中 TWS.Q.TICKSIZE IB API 中的 ticksize 方法会将市场实时 Tick 量数据消息发送到该队列中 处理引擎从该队列中获取市场实时 Tick 量数据消息, 并存储到相应的市场实时行情库中
处理引擎名称 说明 建立 API 连接处理引擎 向 TWS.Q.CMD 队列中发送建立 API 连接命令消息 CONNECT:CONNECT 处理引擎 断开 API 连接处理引擎 请求市场实时行情数据处理引擎 取消市场实时行情数据处理引擎 向 TWS.Q.CMD 队列中发送断开 API 连接命令消息 DISCONNECT: DISCONNECT 向 T WS.Q.CMD 队列中发送请求市场实时行情数据命令消息, 如 REQMKTDAT:10201709,FUT,GLOBEX,6EU7 向 T WS.Q.CMD 队列中发送取消市场实时行情数据命令消息, 如 CANCELMKTDAT:10,10201709 存储 API 日志消息处理引擎 从 TWS.Q.MSG 队列中获取 API 日志消息并存储在 API 消息表中 存储市场实时 Tick 价格数据消息处理引擎 存储市场实时 Tick 量数据消息处理引擎 从 TWS.Q.TICKPRICE 队列中获取市场实时 Tick 价格数据消息, 并按不同的 tickerid 存储到相应的市场实时行情库中 从 TWS.Q.TICKSIZE 队列中获取市场实时 Tick 量数据消息, 并按不同的 tickerid 存储到相应的市场实时行情库中
API 消息表 字段英文名 字段中文名 数据类型 说明 APIMSGTIME API 消息时间 TIMESTAMP 存储 API 消息时间 APIMSGTYPE API 消息类型 VARCHAR2(20) 存储 API 消息类型 APIMSG API 消息内容 VARCHAR2(512) 存储 API 消息内容
API 消息表数据示例 API 消息时间 API 消息类型 API 消息内容 26-9 月 -17 01.06.26.724000000 上午 MSG -1 2104 Market data farm connection is OK 27-9 月 -17 09.30.51.598000000 上午 27-9 月 -17 09.31.04.304000000 上午 MSG MSG -1 2103 Market data farm connection is broken -1 2106 HMDS data farm connection is OK 28-9 月 -17 06.53.46.614000000 上午 MSG -1 1100 Connectivity between IB and Trader Workstation has been lost. 28-9 月 -17 06.53.59.396000000 上午 MSG -1 1102 Connectivity between IB and Trader Workstation has been restored - data maintained. 28-9 月 -17 12.03.46.551000000 下午 MSG -1 2105 HMDS data farm connection is broken
合约信息表 字段英文名 字段中文名 数据类型 说明 TICKERID 请求 ID NUMBER(18,0) 存储请求合约的 tickerid SECTYP 证券类型 VARCHAR2(20) 存储请求合约的证券类型, 如 CASH FUT FOP EXCHANGE 交易所 VARCHAR2(20) 存储请求合约的交易所, 如 IDEALPRO GLOBEX LOCALSYMBOL 本地合约代码 VARCHAR2(20) 存储本地合约代码
合约信息表数据示例 请求 ID 证券类型交易所本地合约代码 10 CASH IDEALPRO EUR.USD 10201712 FUT GLOBEX 6EZ7 1710111160 FOP GLOBEX EUUV7 C1160 1710111170 FOP GLOBEX EUUV7 C1170 1710111180 FOP GLOBEX EUUV7 C1180 1710111190 FOP GLOBEX EUUV7 C1190 1710111200 FOP GLOBEX EUUV7 C1200 1710111210 FOP GLOBEX EUUV7 C1210 1710111220 FOP GLOBEX EUUV7 C1220 1710111230 FOP GLOBEX EUUV7 C1230 1710121160 FOP GLOBEX EUUV7 P1160 1710121170 FOP GLOBEX EUUV7 P1170 1710121180 FOP GLOBEX EUUV7 P1180
TICK 价格表 字段英文名 字段中文名 数据类型 说明 TICKTIME TICK 数据时间 TIMESTAMP 存储 Tick 数据时间 TICKERID 请求 ID NUMBER(18,0) 存储请求合约的 tickerid TICKTYPE TICK 价格类型 VARCHAR2(20) 存储 Tick 价格类型 TICKPRICE TICK 价格 NUMBER(18,10) 存储 Tick 价格 TICKMSG TICK 消息 VARCHAR2(512) 存储从 API 收到的完整 Tick 价格消息
TICK 价格表数据示例 TICK 数据时间 请求 ID TICK 价格类型 TICK 价格 TICK 价格消息 2 6-9 月 - 1 7 171021118 11.02.02.630000000 bidprice 0.009 0 下午 2 6-9 月 - 1 7 171021118 11.02.34.662000000 askprice 0.0092 0 下午 2 8-9 月 - 1 7 171021118 05.55.45.118000000 close 0.008 0 上午 2 7-9 月 - 1 7 171011118 03.04.39.299000000 high 0.0069 0 下午 2 7-9 月 - 1 7 171021118 03.43.19.345000000 lastprice 0.0079 0 T I C K P R I C E : t i c k e r I d = 1 7 1 0 2 1 1 1 8 0 b i d P r i c e = 0. 0 0 9 canautoexecute pastlimit=false preopen=false T I C K P R I C E : t i c k e r I d = 1 7 1 0 2 1 1 1 8 0 a s k P r i c e = 0. 0 0 9 2 canautoexecute pastlimit=false preopen=false TICKPRICE:tickerId=1710211180 close=0.008 noautoexecute pastlimit=false preopen=false TICKPRICE:tickerId=1710111180 high=0.0069 noautoexecute pastlimit=false preopen=false T ICKPRICE:tickerId=1710211180 l a s t P r i c e = 0. 0 0 7 9 noautoexecute pastlimit=false preopen=false
TICK 量表 字段英文名 字段中文名 数据类型 说明 TICKTIME TICK 数据时间 TIMESTAMP 存储 Tick 数据时间 TICKERID 请求 ID NUMBER(18,0) 存储请求合约的 tickerid TICKTYPE TICK 量类型 VARCHAR2(20) 存储 Tick 量类型 TICKSIZE TICK 量 NUMBER(18,0) 存储 Tick 量 TICKMSG TICK 消息 VARCHAR2(512) 存储从 API 收到的完整 Tick 量消息
TICK 量表数据示例 TICK 数据时间请求 ID TICK 量类型 TICK 量 TICK 量消息 2 6-9 月 - 1 7 171021118 11.02.02.630000 asksize 1 TICKSIZE:tickerId=1801121230 asksize=1 0 000 下午 2 6-9 月 - 1 7 171021118 11.02.34.662000 bidsize 3 TICKSIZE:tickerId=1801121230 bidsize=3 0 000 下午
如果你想与老师有更多的交流可加入 赵博外汇期货期权交流群 群主 : 策略星小姐姐 ( 添加时备注 : 赵博 )