使用Matlab进行国内期货交易
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如何判断是否能对接Matlab呢?一般异步通知有两种方式:一种是偏底层的函 数回调,一种是偏高层的事件通知。
函数回调。C#版接口不用修改,直接用P/Invoke的方式,将函数句柄直接通过 赋值的方式传给最底层的C接口。可惜,实际测试行不通。表面上运行正常, 能输出行情数据,但过不了十几秒Matlab就闪退。推断原因是回调函数被Matlab 清理回收了,C层记录的函数据句柄在运行十几秒后就无效了。 事件通知。此方式也有必须注意的地方。Matlab支持addlistener,但直接模仿上 面的回调函数的参数接口进行调用会报错,最下面的说明了为何会报错。 http://www.mathworks.cn/cn/help/matlab/matlab_external/working-with-net-events-i n-matlab.html 即事件所使用的委托的签名必需要用指定的格式:两个参数,第一个参数是 object sender,而第二个参数必需继承于.NET的EventArgs类。
%% 行情 global md; md = MdApiWrapper(); addlistener(md,'OnConnect',@OnMdConnect); addlistener(md,'OnDisconnect',@OnMdDisconnect); addlistener(md,'OnRtnDepthMarketData',@OnRtnDepthMarketData); md.Connect('D:\',... %行情流文件路径
Java版接口 目前已经有少量网友开源了Java对接CTP的接口,但Matlab对接Java接口的还没 有推出。同时转换的技术也有多种,如JNA、BridJ。
网址: https://github.com/QuantBox/CTP/tree/master/Java-CTP ,JNA版
,BridJ版
http://download.csdn.net/detail/vcfriend/5054163
首先我们来看CTP接口开发要注意哪些关键地方,在其它网友公布的直接接口 转换的封装,都要自行处理这些繁琐细节,但本人提供的C版都进了屏蔽。
请求ID,同一会话中严格单调递增 报单引用,同一会话中严格单调递增 发送请求流控,如果有在途的查询,不允许发新的查询。1秒钟最多允许发送1个 查询。 部分期货公司要求先验证客户端授权然后才能登录 登录成功后必须要结算单确认后才能下单 行情与交易的流文件同目录可能引起数据紊乱 接收到的响应需立即处理,不然会阻塞后面的数据接收
NET版接口 NET版对接CTP的接口是百花齐放,版本比较多,网上目前比较知名的版本有
海风版:最早开源出来的C#版接口之一,P/Invoke封装
马不停蹄版:C++/CLI版封装 http://ishare.iask.sina.com.cn/f/34438582.html
LumenXH版:https://github.com/LumenXH/ ,P/Invoke封装
第二节开发前准备 CTP_API官方下载地址为:http://202.109.110.121/api/
实际上此地址少有人维护,如想要最新版,还是得找CTP_API的官方QQ群,一 般群共享有最新版的API及相关的文档,强烈建议提前将文档细读几遍。最关键 的两个文档是《综合交易平台API技术开发指南》、《综合交易平台API特别说 明》。
检查这些C#版的接口,只要是指定格式的委托签名就可以了。
第五节 QuantBox版项目介绍 在这我只介绍QuantBox版,因为这个版本是本人开发并开源的,对它的了解最 清楚。
首先介绍下这个项目,此项目最初是为了对接国外一款非常有名的软件—— OpenQuant的程序化交易平台而做的前期工作,同时为对接其它语言做了预 留。
由于OpenQuant插件开发是用的C#,为了满足项目要求,首先得有C#版接口, 考虑到还要为其它语言做准备,一定得有C版接口。当时网络上没有C版接口开 源,附属在一些C#版接口中的C版在对接其它语言时又不够方便,故C层与C# 层另行开发。
有部分网友希望我们能提供Matlab版,因实际我们生产环境中并不使用它进行 交易,没有编写MEX版的动力。不过通过研究,使用了更简化的方式满足了大 家的要求,也就是上一节提到的C#版与Matlab版对接原理。
第八节 Matlab对接期货接口 https://github.com/QuantBox/CTP/tree/master/Matlab-DotNet
请保证相关文件都是最新的。
thostmduserapi.dll、thosttraderapi.dll来自于上期技术 QuantBox.C2CTP.dll来自于C版接口 QuantBox.CSharp2CTP.dll来自于C#版接口
提供的CTP_API目前有三个版本:Linux x64、Windows x86、iOS。微软官方已经 提到过,在64位进程中不能加载32位的dll,同理一个32位进程也不能加载一个 64位dll。所以在Windows平台下采用一般的dll调用方式也就被限制在了主程序为 32位程序。其实,分别使用32位和64位两个进程通讯的方式能解决这个问题。
test.m是程序入口,做了以下工作
导入C#库 创建行情对象、交易对象的实例 注册事件 登录 退出(已经注释,没有执行,需手工输入退出)
第6页
使用Matlab进行国内期货交易
%% 导入C#库,请按自己目录进行调整 cd 'D:\wukan\Documents\GitHub\CTP\Matlab-DotNet\test\' NET.addAssembly(fullfile(cd,'QuantBox.CSharp2CTP.dll')); import QuantBox.CSharp2CTP.*;
使用Matlab进行国内期货交易 作者:银河期货技术支持部
伍侃
第一节国内期货柜台系统介绍 综合交易平台CTP:
上海期货信息技术有限公司(上海期货交易所旗下子公司)开发的期货经纪业 务管理系统。在API的设计、业务模式、开放性上都比国内其它系统走得更远, 大部分期货公司都支持CTP,目前已经是国内期货程序化交易接入的事实标 准。同时上期技术在证券API上也做了一定的工作,证券接口也已经发布。
第4页
使用Matlab进行国内期货交易 Java版也是在网友的期盼中诞生的,当初是考虑到C#版对接Matlab的方案只能在 Windows下用,推出Java版对接Matlab的方案就能在Linux中用了。可惜Java版的 测试能用,但Java对接Matlab的方案目前没解决。
第六节 C版的特点 C版本的特点是没有直接将C++版本的接口进行转换,而是做了一定的处理。加 上这些处理的理由很充分,就是简化逻辑,让其它语言对接CTP时能更简单。
同时,我们对接CTP平台需要服务器的配置信息,在快期目录下有brokers.xml, 其中有三样东西最重要:经纪商编号(BrokerID),行情服务器地址(MarketData )、交易服务器地址(Trading)。
这个地方要注意,不管brokers.xml中地址如何写,地址开头没有“tcp://”,实 际使用CTP_API时就得补上,如果以“udp://”开头,改成“tcp://”也能正常 使用,在下一节的代码中有模拟盘的地址示例。
QuantBox版:https://github.com/QuantBox/CTP ,也是使用了P/Invoke封装, 但对API做了自己的细节处理。
第四节 C#版对接原理 使用.NET版的好处就是省事,这么多款.NET版,选一款能对接Matlab,使用简 单,自己能理解的代码库就成。
第3页
使用Matlab进行Biblioteka Baidu内期货交易
'tcp://27.115.78.35:41213',... %行情服务器地址 '1009',... %经纪公司代码 '123456',... %用户代码 '888888'); %密码
%% 交易 global td; td = TraderApiWrapper(); addlistener(td,'OnConnect',@OnTdConnect); addlistener(td,'OnDisconnect',@OnTdDisconnect); addlistener(td,'OnRtnOrder',@OnRtnOrder);
大连飞创信息技术有限公司(大连商品交易所旗下子公司)也提供了交易与行 情的API,但目前成熟度不够,使用者少。
第1页
恒生:
使用Matlab进行国内期货交易
专业的同时提供了证券、期货经纪业务解决方案的提供商,普及面也很广。基 金公司等大型机构都有风险控制需求,而恒生在这方面做得不错,但目前没有 推出面向普通客户的交易接口。
第5页
使用Matlab进行国内期货交易
能实现监控的原理是:
CTP_API支持同一账号多次登录,目前期货公司大多设置的是同时最大6个会话 登录 委托回报与成交回报等流会发向所有会话 所以在程序化交易时,另用一款比较好的手动交易软件来监控是不错的方式。 可以查看委托状态、委托价、成交回报等信息,方便查找错误。目前推荐使用 快期。
金仕达:
市场占有率极高的柜台系统,最初仅有B2B网关,用户接入时必须同期货公司 商谈,并在期货公司机房内网架设服务器。在2012年时发布了B2C版KSFT_API ,与CTP接口相似,仅在一些开发细节上有所区别,直接减少了用户的迁移成 本。目前大部分公司同时支持金仕达和CTP,不过存在的问题是出入金不便。 CTP没有提供次席的快速出入金的方案,而金仕达方也不提供,最终在主席系 统的选项上,期货公司必须得做出选择,目前有部分期货公司正酝酿将主席切 换成CTP。
易胜:
由易胜信息技术有限公司(郑州商品交易所期下子公司)开发,提供了行情与 交易接口,目前仅有部分期货公司部署了对应的程序化交易模块。易胜API最大 的优点是提供了部分历史数据,这应当时是为了满足他们的程序化交易客户端 所提供的功能,缺点是要开发时得申请授权认证码,这限制了不少开发者。
飞创信息X-Speed:
td.Connect('D:\',... %交易流文件路径 'tcp://27.115.78.35:41205',... %交易服务器地址 '1009',... %经纪公司代码 '00000015',... %用户代码 '123456',... %密码 THOST_TE_RESUME_TYPE.THOST_TERT_QUICK,... %流重传方式 '',... %用户端产品信息 ''); %认证码
进程间通讯 这种方式比较灵活,对接64位平台或者跨操作系统、跨主机都是没有问题的,
第2页
使用Matlab进行国内期货交易
但在运行效率上略为逊色。已经有网友提供了通用版本接口,即可以Matlab调 用,也可以R语言调用。
COM版接口 COM接口在Windows平台下还是有一定的使用范围的,Matlab、Excel等都可以 对接COM接口,目前网上可以下载到上海汇朋提供的盈佳COM接口。网址: http://www.winnerfutures.com.cn/
主要添加的功能如下:
发送队列:报单、撤单直接发送,而其它的请求都先添加到发送队列,由发送 线程去发送,发送失败后自动延时重发。解决了CTP有流控的问题。 接收队列:收到响应后,直接存到队列中,立即返回,然后其它线程从队列中 取。解决用户代码用时过久产生未知错误的问题。 维护请求ID与报单引用,自动加锁,不再纠结于细节,不会出现重复报单。 自动进行连接、客户端授权、登录认证、结算单确认等工作。保证用户登录成 功后就能直接下单。 断线重连后,行情与交易能重新登录认证,其中行情接口还能自动订阅断线前 已经订阅的行情。 对行情与交易流文件自动分目录,解决数据紊乱问题 第七节监控软件的使用 在介绍Matlab对接.NET前,一定得先介绍监控软件,否则在下一节要介绍的开 发上完全是在摸黑。
在这,我们使用dll调用的方式。先确保自己安装的是32位的Matlab,如果你是在 64位Windows上直接安装,默认是安装的64位系统,请进入到Matlab的安装目 录,找到bin/win32下的setup.exe进行安装。
第三节各种对接方式 MEX版接口 运行效率最高,但开发起来工作量大,要做大量的数据结构转换。目前已经有 公司或个人推出了MEX版。
函数回调。C#版接口不用修改,直接用P/Invoke的方式,将函数句柄直接通过 赋值的方式传给最底层的C接口。可惜,实际测试行不通。表面上运行正常, 能输出行情数据,但过不了十几秒Matlab就闪退。推断原因是回调函数被Matlab 清理回收了,C层记录的函数据句柄在运行十几秒后就无效了。 事件通知。此方式也有必须注意的地方。Matlab支持addlistener,但直接模仿上 面的回调函数的参数接口进行调用会报错,最下面的说明了为何会报错。 http://www.mathworks.cn/cn/help/matlab/matlab_external/working-with-net-events-i n-matlab.html 即事件所使用的委托的签名必需要用指定的格式:两个参数,第一个参数是 object sender,而第二个参数必需继承于.NET的EventArgs类。
%% 行情 global md; md = MdApiWrapper(); addlistener(md,'OnConnect',@OnMdConnect); addlistener(md,'OnDisconnect',@OnMdDisconnect); addlistener(md,'OnRtnDepthMarketData',@OnRtnDepthMarketData); md.Connect('D:\',... %行情流文件路径
Java版接口 目前已经有少量网友开源了Java对接CTP的接口,但Matlab对接Java接口的还没 有推出。同时转换的技术也有多种,如JNA、BridJ。
网址: https://github.com/QuantBox/CTP/tree/master/Java-CTP ,JNA版
,BridJ版
http://download.csdn.net/detail/vcfriend/5054163
首先我们来看CTP接口开发要注意哪些关键地方,在其它网友公布的直接接口 转换的封装,都要自行处理这些繁琐细节,但本人提供的C版都进了屏蔽。
请求ID,同一会话中严格单调递增 报单引用,同一会话中严格单调递增 发送请求流控,如果有在途的查询,不允许发新的查询。1秒钟最多允许发送1个 查询。 部分期货公司要求先验证客户端授权然后才能登录 登录成功后必须要结算单确认后才能下单 行情与交易的流文件同目录可能引起数据紊乱 接收到的响应需立即处理,不然会阻塞后面的数据接收
NET版接口 NET版对接CTP的接口是百花齐放,版本比较多,网上目前比较知名的版本有
海风版:最早开源出来的C#版接口之一,P/Invoke封装
马不停蹄版:C++/CLI版封装 http://ishare.iask.sina.com.cn/f/34438582.html
LumenXH版:https://github.com/LumenXH/ ,P/Invoke封装
第二节开发前准备 CTP_API官方下载地址为:http://202.109.110.121/api/
实际上此地址少有人维护,如想要最新版,还是得找CTP_API的官方QQ群,一 般群共享有最新版的API及相关的文档,强烈建议提前将文档细读几遍。最关键 的两个文档是《综合交易平台API技术开发指南》、《综合交易平台API特别说 明》。
检查这些C#版的接口,只要是指定格式的委托签名就可以了。
第五节 QuantBox版项目介绍 在这我只介绍QuantBox版,因为这个版本是本人开发并开源的,对它的了解最 清楚。
首先介绍下这个项目,此项目最初是为了对接国外一款非常有名的软件—— OpenQuant的程序化交易平台而做的前期工作,同时为对接其它语言做了预 留。
由于OpenQuant插件开发是用的C#,为了满足项目要求,首先得有C#版接口, 考虑到还要为其它语言做准备,一定得有C版接口。当时网络上没有C版接口开 源,附属在一些C#版接口中的C版在对接其它语言时又不够方便,故C层与C# 层另行开发。
有部分网友希望我们能提供Matlab版,因实际我们生产环境中并不使用它进行 交易,没有编写MEX版的动力。不过通过研究,使用了更简化的方式满足了大 家的要求,也就是上一节提到的C#版与Matlab版对接原理。
第八节 Matlab对接期货接口 https://github.com/QuantBox/CTP/tree/master/Matlab-DotNet
请保证相关文件都是最新的。
thostmduserapi.dll、thosttraderapi.dll来自于上期技术 QuantBox.C2CTP.dll来自于C版接口 QuantBox.CSharp2CTP.dll来自于C#版接口
提供的CTP_API目前有三个版本:Linux x64、Windows x86、iOS。微软官方已经 提到过,在64位进程中不能加载32位的dll,同理一个32位进程也不能加载一个 64位dll。所以在Windows平台下采用一般的dll调用方式也就被限制在了主程序为 32位程序。其实,分别使用32位和64位两个进程通讯的方式能解决这个问题。
test.m是程序入口,做了以下工作
导入C#库 创建行情对象、交易对象的实例 注册事件 登录 退出(已经注释,没有执行,需手工输入退出)
第6页
使用Matlab进行国内期货交易
%% 导入C#库,请按自己目录进行调整 cd 'D:\wukan\Documents\GitHub\CTP\Matlab-DotNet\test\' NET.addAssembly(fullfile(cd,'QuantBox.CSharp2CTP.dll')); import QuantBox.CSharp2CTP.*;
使用Matlab进行国内期货交易 作者:银河期货技术支持部
伍侃
第一节国内期货柜台系统介绍 综合交易平台CTP:
上海期货信息技术有限公司(上海期货交易所旗下子公司)开发的期货经纪业 务管理系统。在API的设计、业务模式、开放性上都比国内其它系统走得更远, 大部分期货公司都支持CTP,目前已经是国内期货程序化交易接入的事实标 准。同时上期技术在证券API上也做了一定的工作,证券接口也已经发布。
第4页
使用Matlab进行国内期货交易 Java版也是在网友的期盼中诞生的,当初是考虑到C#版对接Matlab的方案只能在 Windows下用,推出Java版对接Matlab的方案就能在Linux中用了。可惜Java版的 测试能用,但Java对接Matlab的方案目前没解决。
第六节 C版的特点 C版本的特点是没有直接将C++版本的接口进行转换,而是做了一定的处理。加 上这些处理的理由很充分,就是简化逻辑,让其它语言对接CTP时能更简单。
同时,我们对接CTP平台需要服务器的配置信息,在快期目录下有brokers.xml, 其中有三样东西最重要:经纪商编号(BrokerID),行情服务器地址(MarketData )、交易服务器地址(Trading)。
这个地方要注意,不管brokers.xml中地址如何写,地址开头没有“tcp://”,实 际使用CTP_API时就得补上,如果以“udp://”开头,改成“tcp://”也能正常 使用,在下一节的代码中有模拟盘的地址示例。
QuantBox版:https://github.com/QuantBox/CTP ,也是使用了P/Invoke封装, 但对API做了自己的细节处理。
第四节 C#版对接原理 使用.NET版的好处就是省事,这么多款.NET版,选一款能对接Matlab,使用简 单,自己能理解的代码库就成。
第3页
使用Matlab进行Biblioteka Baidu内期货交易
'tcp://27.115.78.35:41213',... %行情服务器地址 '1009',... %经纪公司代码 '123456',... %用户代码 '888888'); %密码
%% 交易 global td; td = TraderApiWrapper(); addlistener(td,'OnConnect',@OnTdConnect); addlistener(td,'OnDisconnect',@OnTdDisconnect); addlistener(td,'OnRtnOrder',@OnRtnOrder);
大连飞创信息技术有限公司(大连商品交易所旗下子公司)也提供了交易与行 情的API,但目前成熟度不够,使用者少。
第1页
恒生:
使用Matlab进行国内期货交易
专业的同时提供了证券、期货经纪业务解决方案的提供商,普及面也很广。基 金公司等大型机构都有风险控制需求,而恒生在这方面做得不错,但目前没有 推出面向普通客户的交易接口。
第5页
使用Matlab进行国内期货交易
能实现监控的原理是:
CTP_API支持同一账号多次登录,目前期货公司大多设置的是同时最大6个会话 登录 委托回报与成交回报等流会发向所有会话 所以在程序化交易时,另用一款比较好的手动交易软件来监控是不错的方式。 可以查看委托状态、委托价、成交回报等信息,方便查找错误。目前推荐使用 快期。
金仕达:
市场占有率极高的柜台系统,最初仅有B2B网关,用户接入时必须同期货公司 商谈,并在期货公司机房内网架设服务器。在2012年时发布了B2C版KSFT_API ,与CTP接口相似,仅在一些开发细节上有所区别,直接减少了用户的迁移成 本。目前大部分公司同时支持金仕达和CTP,不过存在的问题是出入金不便。 CTP没有提供次席的快速出入金的方案,而金仕达方也不提供,最终在主席系 统的选项上,期货公司必须得做出选择,目前有部分期货公司正酝酿将主席切 换成CTP。
易胜:
由易胜信息技术有限公司(郑州商品交易所期下子公司)开发,提供了行情与 交易接口,目前仅有部分期货公司部署了对应的程序化交易模块。易胜API最大 的优点是提供了部分历史数据,这应当时是为了满足他们的程序化交易客户端 所提供的功能,缺点是要开发时得申请授权认证码,这限制了不少开发者。
飞创信息X-Speed:
td.Connect('D:\',... %交易流文件路径 'tcp://27.115.78.35:41205',... %交易服务器地址 '1009',... %经纪公司代码 '00000015',... %用户代码 '123456',... %密码 THOST_TE_RESUME_TYPE.THOST_TERT_QUICK,... %流重传方式 '',... %用户端产品信息 ''); %认证码
进程间通讯 这种方式比较灵活,对接64位平台或者跨操作系统、跨主机都是没有问题的,
第2页
使用Matlab进行国内期货交易
但在运行效率上略为逊色。已经有网友提供了通用版本接口,即可以Matlab调 用,也可以R语言调用。
COM版接口 COM接口在Windows平台下还是有一定的使用范围的,Matlab、Excel等都可以 对接COM接口,目前网上可以下载到上海汇朋提供的盈佳COM接口。网址: http://www.winnerfutures.com.cn/
主要添加的功能如下:
发送队列:报单、撤单直接发送,而其它的请求都先添加到发送队列,由发送 线程去发送,发送失败后自动延时重发。解决了CTP有流控的问题。 接收队列:收到响应后,直接存到队列中,立即返回,然后其它线程从队列中 取。解决用户代码用时过久产生未知错误的问题。 维护请求ID与报单引用,自动加锁,不再纠结于细节,不会出现重复报单。 自动进行连接、客户端授权、登录认证、结算单确认等工作。保证用户登录成 功后就能直接下单。 断线重连后,行情与交易能重新登录认证,其中行情接口还能自动订阅断线前 已经订阅的行情。 对行情与交易流文件自动分目录,解决数据紊乱问题 第七节监控软件的使用 在介绍Matlab对接.NET前,一定得先介绍监控软件,否则在下一节要介绍的开 发上完全是在摸黑。
在这,我们使用dll调用的方式。先确保自己安装的是32位的Matlab,如果你是在 64位Windows上直接安装,默认是安装的64位系统,请进入到Matlab的安装目 录,找到bin/win32下的setup.exe进行安装。
第三节各种对接方式 MEX版接口 运行效率最高,但开发起来工作量大,要做大量的数据结构转换。目前已经有 公司或个人推出了MEX版。