开发使用matlab进行国内交易_第1页
开发使用matlab进行国内交易_第2页
开发使用matlab进行国内交易_第3页
开发使用matlab进行国内交易_第4页
开发使用matlab进行国内交易_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、使用进行国内交易第一节国内柜台系统介绍综合交易CTP:(交易所旗下子公司)开发的经纪业务管理系统。在 API 的设计、业务模式、开放性上都比国内其它系统走得更远,大部分公司都API 上支持 CTP,目前已经是国内程序化交易接入的事实标准。同时上期技术在也做了一定的工作,:接口也已经发布。市场占有率极高的柜台系统,最初仅有 B2B 网关,用户接入时必须同公司商谈,并在公房内网架设服务器。在 2012 年时发布了 B2C 版 KSFT_API,与 CTP 接口相似,仅在一些开发细节上有所区别,直接减少了用户的迁移成本。目前大部同时支持和 CTP,不过存在的问题是出入金不便。CTP 没有提供次席的快

2、速出入金的方案,而方也不提供,最终在系统的选项上,公司必须得做出选择,目前有部分期货公司正酝酿将:由目前仅有部分切换成 CTP。郑州商品交易所期下子公司)开发,提供了行情与交易接口,API 最大的优点是提供了部分公司部署了对应的程序化交易模块。历史数据,这应当时是为了满足他们的程序化交易客户端所提供的功能,缺点是要开发时得申请认证码,这限制了不少开发者。飞创信息 X-Speed:大连飞创但目前成熟度不够,使用者少。恒生:大连商品交易所旗下子公司)也提供了交易与行情的 API,专业的同时提供了、经纪业务解决方案的提供商,普及面也很广。基金公司等大型机构都有风险控制需求,而恒生在这方面做得不错,但

3、目前没有推出面向普通客户的交易接口。第二节开发前准备CTP_API地址为:实际上此地址少有人,如想要最新版,还是得找 CTP_API 的,一般群共享有最新版的 API 及相关的文档,强烈建议提前将文档细读几遍。最关键的两个文档是综合交易API 技术开发指南、综合交易API 特别说明。提供的 CTP_API 目前有三个版本:Linux x64、Windows x86、iOS。微软已经提到过,在 64 位进程中不能加载 32 位的dll,同理一个 32 位进程也不能加载一个 64 位dll。所以在Windows下采用一般的 dll 调用方式也就被限制在了主程序为 32 位程序。其实,分别使用 32

4、 位和 64 位两个进程通讯的方式能解决这个问题。在这,使用 dll 调用的方式。先确保自己安装的是 32 位的,如果你是在 64 位的安装目录,找到 bin/win32Windows 上直接安装,默认是安装的 64下的 setup.exe 进行安装。,请进入到第三节 各种对接方式1.MEX 版接口运行效率最高,但开发起来工作量大,要做大量的数据结构转换。目前已经有公司或个人推出了 MEX 版。进程间通讯1.这种方式比较灵活,对接 64 位或者跨操作系统、跨主机都是没有问题的,但在运行效率上略为逊色。已经有网友提供了通用版本接口,即可以以 R 语言调用。COM 版接口调用,也可1.COM 接口

5、在Windows下还是有一定的使用范围的,、Excel 等都可以对接 COM 接口,目前网上可以.cn/Java 版接口汇朋提供的盈佳 COM 接口。到:1.目前已经有少量网友开源了 Java 对接 CTP 的接口,但有推出。同时转换的技术也有多种,如 JNA、BridJ。对接 Java 接口的还没/QuantBox/CTP/tree/master/Java-CTP,JNA 版,BridJ 版:1.NET 版接口NET 版对接 CTP 的接口是百花齐放,版本比较多,网上目前比较知名的版本有海风版:最早开源出来的 C#版接口之一,P/Invoke 封装马不停蹄版:C+/CLI 版封装LumenX

6、:QuantBox 版:API 做了自己的细节处理。.cn/f/34438582.html/LumenXH/,P/Invoke 封装/QuantBox/CTP,也是使用了 P/Invoke 封装,但对第四节 C#版对接原理使用.NET 版的好处就是省事,这么多款.NET 版,选一款能对接己能理解的代码库就成。,使用简单,自如何判断是否能对接呢?一般异步通知有两种方式:一种是偏底层的函数回调,一种是偏的事件通知。1. 函数回调。C#版接口不用修改,直接用 P/Invoke 的方式,将函数句柄直接通过赋值的方式传给最底层的 C 接口。可惜,实际测试行不通。表面上运行正常,能输出行情数据,但过不了十

7、几秒就闪退。推断原因是回调函数被回收了,C 层的函数据句柄在运行十几秒后就无效了。2. 事件通知。此方式也有必须注意的地方。支持 addlistener,但直接模仿上面的回调函数的参数接口进行调用会报错,最下面的说明了为何会报错。http:/ab.html/cn/help/_external/working-with-net-events-即事件所使用的委托的签名必需要用指定的格式:两个参数,第一个参数是 object sender,而第二个参数必需继承于.NET 的 EventArgs 类。检查这些 C#版的接口,只要是指定格式的委托签名就可以了。第五节 QuantBox 版项目介绍在这我只

8、介绍 QuantBox 版,因为这个版本是本人开发并开源的,对它的了解最清楚。首先介绍下这个项目,此项目最初是为了对接国外一款非常有名的软件OpenQuant的程序化交易而做的前期工作,同时为对接其它语言做了预留。由于 OpenQuant 插件开发是用的 C#,为了满足项目要求,首先得有 C#版接口,考虑到还要为其它语言做准备,一定得有 C 版接口。当时网络上没有 C 版接口开源,附属在一些C#版接口中的 C 版在对接其它语言时又不够方便,故 C 层与 C#层另行开发。有部分网友希望能提供版,因实际生产环境中并不使用它进行交易,没有编写 MEX 版的动力。不过通过,使用了更简化的方式满足了大家

9、的要求,也就是上一节提到的 C#版与版对接原理。Java 版也是在网友的期盼中诞生的,当初是考虑到 C#版对接的方案只能在Windows 下用,推出 Java 版对接的方案就能在 Linux 中用了。可惜 Java 版的测试能用,但 Java 对接的方案目前没解决。第六节 C 版的特点C 版本的特点是没有直接将 C+版本的接口进行转换,而是做了一定的处理。加上这些处理的理由很充分,就是简化逻辑,让其它语言对接 CTP 时能更简单。首先来看 CTP 接口开发要注意哪些关键地方,在其它网友公布的直接接口转换的封装,都要自行处理这些繁琐细节,但本人提供的 C 版都进了。1.2.3.请求 ID,同一会

10、话中严格单调递增报单,同一会话中严格单调递增发送请求流控,如果有在途的查询,不允许发新的查询。1 秒钟最多允许发送 1 个查询。.部分公司要求先验证客户端然后才能登录登录成功后必须要结算单确认后才能下单行情与交易的流文件同目录可能引起数据紊乱接收到的响应需立即处理,不然会阻塞后面的数据接收主要添加的功能如下:1.发送队列:报单、撤单直接发送,而其它的请求都先添加到发送队列,由发送线程去发送,发送失败后自动延时重发。解决了 CTP 有流控的问题。接收队列:收到响应后,直接存到队列中,立即返回,然后其它线程从队列中取。解决用户代码用时过久产生未知错误的问题。请求 ID 与报单,自动加

11、锁,不再纠结于细节,不会出现重复报单。2.3.4.自动进行连接、客户端就能直接下单。、登录认证、结算单确认等工作。保证用户登录成功后断线重连后,行情与交易能重新登录认证,其中行情接口还能自动订阅断线前已经订阅的行情。对行情与交易流文件自动分目录,解决数据紊乱问题第七节在介绍 全是在摸黑。软件的使用对接.NET 前,一定得先介绍软件,否则在下一节要介绍的开发上完能实现的原理是:CTP_API 支持同一账号多次登录,目前公司大多设置的是同时最大 6 个会话登录委托回报与成交回报等流会发向所有会话所以在程序化交易时,另用一款比较好动交易软件来是不错的方式。可以查看使用快期。委托状态、委托价、成交回报

12、等信息,方便查找错误。目前同时,对接 CTP需要服务器的配置信息,在快期目录下有 brokers.xml,其中(BrokerID),行情服务器地址(MarketData)、交易服务器有三样东西最重要:经纪商地址(Trading)。这个地方要注意,不管 brokers.xml 中地址如何写,地址开头没有“tcp:/”,实际使用CTP_API 时就得补上,如果以“udp:/”开头,改成“tcp:/”也能正常使用,在下一节的代码中有模拟盘的地址示例。第八节对接接口/QuantBox/CTP/tree/master/请保证相关文件都是最新的。-DotNetthostmduserall、thosttra

13、derall 来自于上期技术QuantBox.C2CTP.dll 来自于 C 版接口QuantBox.CSharp2CTP.dll 来自于 C#版接口test.m 是程序,做了以下工作.5.导入 C#库创建行情对象、交易对象的实例事件登录退出(已经注释,没有执行,需手工输入退出)% 导入 C#库,请按自己目录进行调整cd D:wukansCTP-DotNettestNET.addAssembly(fullfile(cd,QuantBox.CSharp2CTP.dll);import QuantBox.CSharp2CTP.*;% 行情global md;md = MdApiWra

14、pper();addlistener(md,OnConnect,OnMdConnect);addlistener(md,OnDisconnect,OnMdDisconnect); addlistener(md,OnRtnDepthMarketData,OnRtnDepthMarketData); md.Connect(D:,. %行情流文件路径tcp:/5:41213,. %行情服务器地址1009,. %经纪公司代码123456,. %用户代码888888); % 交易globa;td = TraderApiWrapper();addlistener(td,OnConnect,OnTdConn

15、ect); addlistener(td,OnDisconnect,OnTdDisconnect); addlistener(td,OnRtnOrder,OnRtnOrder);td.Connect(D:,. %交易流文件路径 tcp:/5:41205,. %交易服务器地址 1009,. %经纪公司代码00000015,. %用户代码123456,. %THOST_TE_RESUME_TYPE.THOST_TERT_QUICK,. %流重传方式,. %用户端产品信息); %认证码% 退出% md.Disconnect() %行情退出% td.Disconnect() %交易退出对以上的部分参数

16、做下说明,特别是交易比行情要多了三个参数。第二个参数是服务器的地址,目前,行情服务器输入错误的用户名和也能登录。第三个参数,经纪公司代码是用来区分各家公司时使用,当初的 CTP 设计时考虑了一台服务器上同时多家公司同时工作。交易的第六个参数是流重传方式。流重传方式有三种:public enum THOST_TE_RESUME_TYPETHOST_TERT_RESTART = 0, /从本交易日重传 THOST_TERT_RESUME, /从上次收到的续传 THOST_TERT_QUICK /只传送登录后的内容;其实这些重传方式的进度何实现的 CTP 接口已经向需要生成一些临时文件,已经传到了第

17、几条数据,具体如,用户只要需要知道如何使用。第一个参数就是流文件路径,在此不用担心行情与交易的流相互影响。第七个参数用户端产品信息,用户可以用来标识软件产品第八个参数认证码,只有在配合使用。公司要求并分配认证码后才能填写,需要与用户端产品信息addlistener 是提供的事件的方法,第一个参数是需要事件的对象,第二个参数是事件名,第三个参数是处理函数。对于 TraderApiWrapper 到底支持哪些事件呢?/QuantBox/CTP/blob/master/CSharp-CTP/src/QuantBox.CSharp2CTP/TraderApiWrapper.cs源码中有详细的事件列表。

18、其实 CTP 还提供了很多功能,由于目前只是实现自己的简单程序化工具并用不到那些功能,所以并没有提供对应的事件支持。用户可以参与开原项目,一同完善。public event OnConnecnder OnConnect;public event OnDisconnecnder OnDisconnect;public event OnErrRtnOrderActionHander OnErrRtnOrderAction;public event OnErrRtnOrderInsernder OnErrRtnOrderInsert;public event OnRspErrorHander OnR

19、spError;public event OnRspOrderActionHander OnRspOrderAction;public event OnRspOrderInsernder OnRspOrderInsert;public event OnRspQryDepthMarketDataHander OnRspQryDepthMarketData;public event OnRspQryInstrumenpublic event OnRnder OnRspQryInstrument;misRateHander OnRmisRate;public event OnRspQryInstru

20、mentMarginRateHander OnRspQryInstrumentMarginRate;public event OnRspQryInvestorpublic event OnRspQryInvestoritionHander OnRspQryInvestorition;itionHander OnRspQryInvestorition;public event OnRspQryOrderHander OnRspQryOrder;public event OnRspQryTradeHander OnRspQryTrade;public event OnRspQryTradingAc

21、counnder OnRspQryTradingAccount;public event OnRtnInstrumentSusHander OnRtnInstrumentSus;public event OnRtnOrderHander OnRtnOrder;public event OnRradeHander OnRrade;OnConnect、OnDisconnect 是行情与交易都支持的事件。但在实际使用时还是有区别的。 交易有可能要进行客户端认证,所以可能出现与客户端认证有关的状态 E_authing、E_authed只有结算单确认后才能下单,所以交易的最后状态不是 E_logined

22、,而是 E_confirmed。/自己定义的public enum ConnectionSE_uninit, E_inited,us/未初始化/已经初始化/连接已经断开E_unconnected,E_connecting, /连接中E_connected, /连接成功/中/成功/登录中/登录成功E_authing,E_authed, E_logining, E_logined,E_confirming, /确认中E_confirmed, /已经确认/最大值E_conn_max;OnMdConnect.m 文件function OnMdConnec% 交易连接回报der,arg)% 行情状态到

23、E_logined 就表示登录成功if arg.result = QuantBox.CSharp2CTP.ConnectionSglobal md;% 订阅行情,支持,和;分隔md.Subscribe(IF1305;IF1306,IF1309;IF1312);endus.E_loginedendOnTdConnect.m 文件function OnTdConnec% 交易连接回报der,arg)% 交易状态到 E_confirmed 就表示登录并确认成功if arg.result = QuantBox.CSharp2CTP.ConnectionSus.E_confirmedgloba% 下单;

24、td.SendOrder(IF1309,. %合约QuantBox.CSharp2CTP.TThostFtdcDirectionType.Buy,. %0,. %开平标记1,. %投机套保标记1,. %数量2250,. %价格riceTypeType.LimitPrice,. %价格类型QuantBox.CSharp2CTP.TThostFtdcOrdQuantBox.CSharp2CTP.TThostFtdcTimeConditionType.GFD,. %时间类型y,. %条件QuantBox.CSharp2CTP.TThostFtdcContingentConditionType.Imm

25、edia类型0);endend下单接口比较复杂,这在登录后立即发送一单状态为已确认后,开始可以下单。第一个参数是合约名,区分大小写,如果不清楚合约名可以查看快期软件中的“合约列表”。第二个参数是标记,只有两种选择,。第三个参数是组合开平标记,第四个参数是组合投机套保标记。组合开平标记和组合投机套保标记的写法有些特别,CTP 支持组合单,组合单至少由两腿组成,如何区分每腿的开平与投保呢?那就是用的组合开平与组合投保了,第一个字符就标记的第一腿,第二个字符标示的第二腿,以此类推。/TFtdcOffsetFlagType 是一个开平标志类型/开仓/平仓/平今/平昨/强减/本地typedef char

26、 TThostFtdcOffsetFlagType;/TFtdcHedgeFlagType 是一个投机套保标志类型/投机/套保typedef char TThostFtdcHedgeFlagType;目前普通客户开通的账户只能下投机,所以第四个参数直接使用11最省事。而第三个参数使用起来比较麻烦,因为上交所专门区分了平今与平昨,使用错了会提示平仓数不足。第六个参数是价格,价格必需是最小价格变动的整数倍,过涨跌停价第七个参数是价格类型,接口预留了大量的类型,但交易所只部分支持,目前仅使用两种价格类型即可,限价与市价,不支持市价单,中金股指两个远月不支持市价。/TFtdcOrdriceTypeTy

27、pe 是一个报单价格条件类型/任意价/限价/最优价/最新价/最新价浮动上浮 1 个 ticks/最新价浮动上浮 2 个 ticks/最新价浮动上浮 3 个 ticks/卖一价/卖一价浮动上浮 1 个 ticks/卖一价浮动上浮 2 个 ticks/卖一价浮动上浮 3 个 ticks/买一价/买一价浮动上浮 1 个 ticks/买一价浮动上浮 2 个 ticks/买一价浮动上浮 3 个 tickstypedef char TThostFtdcOrdriceTypeType;第八个参数是时间类型,根据国内交易所的情况,目前支持 GFD,IOC第九、十参数是条件单使用,首先大商所支持止盈止损单,郑商所支持止损单。/TFtdcContingentConditionType 是一个触发条件类型/立即/止损/止赢/预埋单/最新价大于条件价/最新价大于等于条件

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论