Matlab的强大功能我们毋庸置疑,国外很多trader在分析与研发策略的时候都用matlab, 遗憾的是在matlab中不能直接进行编码,从而进行交易。在matlab中进行直接的程序化交易有如下优点(至少): 1、 强大的延伸性,matlab提供其他领域居多的功能,对于一个强零和游戏的投资市场来说,多一款别人用得少或不会用的有效工具,将无疑使你在整体上具备更大的盈利能力。 2、 超强稳定性,目前国内所用到的程序化平台在运行的过程中,由于网络等其他原因(其实我也不知道是啥导致的)会使得运行中经常crash(我是遇到过),但基于matlab的无监管程序化交易系统到目前为止还没出现过(大约有半年时间) 3、 使用的便利性, 直接在matlab中进行策略的研发,直接就可以转化成matlab中可交易的代码,使用优化等居多工具箱,可视化3D作图工具,大大提高开发周期。 4、 一样matlab也是一款解释性的语言,一般频率的交易策略都可以高效实现, 但对于某些需要超高频交易的, matlab的rtw工具箱可以将成熟的策略烧制到硬件中, 这可不是一般大众化的软件能实现的了。 现将已经试运行半年的第一版本进行公布: BfXtool期货定量交易策略研发 -实盘交易平台介绍 目录 一、 量化交易研发平台 2 1 概述 2 2、主要功能函数 3 3、策略回测绩效报告 4 二、 历史图形显示维护平台 4 1、主界面说明 5 2、功能工具箱菜单 5 3、文本历史行情数据导入 6 4、技术指标编写规范 6 5、加载策略研发中的买卖信号以及绩效结果 7 三、 实盘交易组建维护平台 7 1、实盘策略运作流程 8 2、实盘策略编写规范简介 8 3、相关函数说明 8 四、 实盘交易下单维护组件 9 1、相关函数介绍 9 2、其他辅助函数 10 3、交易函数使用注意事项 10 五、 开发案例 10 1、 股指套利辅助系统 10 2、 单品种全自动交易 11 bfXtool是一款构建与matlab平台的集程序化交易策略研发测试(BackTesting)、行情界面显示、实盘期货交易于一体的工具箱。 该工具箱主要有如下模块: 1、 量化策略研发测试平台(BT) 2、 历史行情显示维护平台(主要配合策略测试复盘研究) 3、 实盘交易策略组件维护平台 4、 实盘交易下单维护组件 Matlab 是一款功能强大的数学建模、分析平台,本软体借助matlab的一切便利功能(如作图(3D),计算、分析,编程语言简洁等),用C/C++编写各个功能模块的底层,实现其与matlab的无缝结合。使其在保持了功能高效实现的基础上,无限的增加了其扩展性。 一、 量化交易研发平台 1 概述 本平台策略回测功能是在充分研究、挖掘TradeStation、wealthLab、以及交易开拓者等国内外知名程序化交易策略测试平台的基础上,依据个人对交易的理解整理、编写的一个单一品种为主的策略、量化研究工具。 1、 策略编码规范 主要通过一个for 循环实现, i代表每次的当前bar是研究样本的第几根K线; 在买入、卖出操作函数中,第一个变量恒定为i; For循环的结尾,end之前都应该加一个策略测试当前周期结束的标识语句btEnd(i); 2、主要功能函数 btTrader(mbar, account) 策略测试中的注册与声明。 posnID = buy(bar, price, lots, msgTag) 买入开仓 posnID = short(bar, price, lots, msgTag) 卖出开仓 posnID = cover(bar, price, lots, msgTag) 买入平仓,及平空单,当由于平掉部分仓位产生的仓位被动分拆,那么分拆得到的新仓位的ID号将返回。 posnID = sell(bar, price, lots, msgTag) 卖出平仓,及平多单 [endRights, margin] = getFundsts();返回第i期的所有者权益 Marketposition();返回所有持仓表中的未平仓头寸的ID号码posn_id, 且为负表示该仓位为空头。当返回空时表示无仓位 getOpenbar(posn_id); 返回开仓的bar号 getOpentime(posn_id); 返回开仓时间 [date, time] getOpendir(posn_id); getOpenprice(posn_id); 返回开仓价格 getOpenlots(posn_id); 返回开仓手数 getOpentag(posn_id); 返回开仓中的 MsgTxt getBarshold(posn_id); getStoprice(posn_id); 返回仓位中先前设定的止损值,0表示未设置止损 getTargetprice(posn_id); setStop(posn_id,stopPrice); 设定止损, setTrailingstop(posn_id,type, triggerPrice, drawBackPct); 设定跟踪止损,triggerPrice 跟踪止损触发价格, drawBackPct为相对最大盈利的回撤幅度 type = 0 固定值回撤 对应回撤值 drawDownValue 1 百分比回撤 setTarget(posn_id,targetPrice); 设定止盈价格. setTimeout(posn_id,maxBarsCanHold); 设定时间止损 以上4种都是跟头寸ID绑定的,一次设定后系统将在后期自动进行侦测与执行; [fundTable, closeTable, errorLogTable] = btResult(); 返回策略测试结果. 3、策略回测绩效报告 由于本平台最好返回所有交易的明细信息,使用者可以根据个人的需要编写相关绩效指标或图形,可见第二部分的绩效指标图形显示。 二、 历史图形显示维护平台 该平台的主要特点是在保持了一般行情软件的基本K线、技术指标等显示功能外,提供了与matlab的主工作空间的“对话”与交流功能,比如通过计算或外来的一组数据,可以通过直接在主工作区域使用xfigline()的函数就能将该数据显示在行情图表上。 1、 主界面说明 2、功能工具箱菜单 1、 生成新的图形空间 2、 打开历史备注文件 3、 保存当前备注文件 4、 加载/管理数据文件 5、 周期变换 6、 图形扩大显示 7、 图形缩小显示 8、 移动图形手柄 9、 显示横纵坐标线 10、 显示分隔线 11、 作图:直线 12、 作图:文本 13、 坐标中图形大小按坐标自动调整大小 14、 各xfig对象间按时间一一对应起来 15、 系统设定 16、 回撤交易(策略研发中)显示交易结果与自动仿真交易 3、文本历史行情数据导入 4、技术指标编写规范 第一行为指标的输入参数,第二行为参数的默认值,第四行为指标的说明 加载技术指标对话框如下: 5、加载策略研发中的买卖信号以及绩效结果 三、 实盘交易组建维护平台 该平台负责载入本地历史行情数,当日实时行情数据接收,存储,数据周期转换,策略维护、调用等功能。 1、实盘策略运作流程 第一步: 实盘账户登录,声明要接收的合约行情数据; 第二步: 加载策略; 第三步: 启动平台运行策略体。 2、实盘策略编写规范简介 保留变量: in_0 用于初始化的声明; 合约名,比如IF1109,为结构体,表面当天最近1800个tick数据点。下图为一实盘策略体: 3、相关函数说明 rxpTrader('real',tinfo,{'IF1101', ...},hisDataFilePath) 注册实盘交易平台 rxpTrader('test',{'IF1101' ...}) 注册模拟、测试交易平台 rxpLoadstg({'stgName1','stgName2',...}) 加载交易策略 rxpLoadtestdata(quotes) 加载测试时的行情数据,quotes 为标准的行情数据格式(注:不同于平台推出的行情数据格式) xinit('data',{'IF1101',...},'isFilled',false,...) 交易平台策略体的第一个语句,用于指定(初始化)该策略需要的合约数据,以及其他用于记录的数据 xset('fieldname',data) / xset('fieldname',i,data) 设置记录数据(标量、向量中指定的下标); xget('fieldname') 获得记录数据; xbar = xgetbar(instrumentName, N) 取出1分钟为单位的N根 k线数据 rxpRun 运行策略 rxpStop 退出停止策略 rxpExit 关闭策略维护平台 四、 实盘交易下单维护组件 该组件提供一系列函数进行下单操作,如orderRef = rxBuy(rxBuy(‘IF1108’,2658,3); 表明以2658的价格买入3手股指IF1108合约,并返回该报单的本地唯一标识符,通过该标识符可以对该报单的成交等状况进行及时实时的分析。 成交委托记录将自动实时的存入本地日志文件备用。 1、相关函数介绍 rxTrader(tinfo) 注册登陆交易系统 orderRef = rxBuy(instrumentID,price,lots) 一定返回 char eg: '32' orderRef = rxShort(instrumentID,price,lots) orderRef = rxSell(instrumentID,price,lots,isCloseToday) 平仓可能会因为不存在仓位/不足返回 double orderRef = rxCover(instrumentID,price,lots,isCloseToday) lots = 0 表示平掉所有头寸 remainLots = rxCancel(orderRef/'all') 撤单成功返回该报单的未成交手数,撤单失败或已经成功撤过的报单将返回负数, 'all' 时直接返回 -3, 不会等待Throst返回确认是否撤单成功 remainLots = rxGetremainlots(orderRef) 在历史报单(无论是否成交或撤单),查找返回未成交的手数 [isHoldFlag,posns] = rxGetposns() 返回当前的持仓, 结构体,无持仓返回NaN, n = rxGetposnlots(instrumentID,direction[0/1],flag['today'/'yesterday'/'total']) 查询该方向上该品种的持仓手数 [s,allsts] = rxGetorderstatus(orderRef) 返回该报单的当前状态值 p = rxGetexchprice(orderRef) 返回该报单的最新成交价格,未成交返回 0 rxExit 退出实盘交易环境 2、其他辅助函数 rxShoworders(['all']) 无参数显示未成交报单信息,参数为all显示所有报单 rxShowposns() 显示当前持仓情况 rxShowxInstrumentIDs() 显示当前能交易的所有合约的代码等状态 rxPrintordertable() 将报单打印到本地文件, 在 rxExit 退出本系统时会自动打印 rxRefreshposns() 重新向Throst查询持仓并更新持仓表。 系统在每次登陆都会自动更新,基本不需要 orders = rxGetallorders() 返回报单表,通过本地文件写入然后读入,不同rxGetposns, 一般在本地测试中用 3、交易函数使用注意事项 由于本下单函数根据需要可以随时大量多批次的下委托,所以在使用的时候要仔细进行模拟或仿真测试,以免出现编写的逻辑结构问题导致的连续多次委托出现,导致账户在瞬间由空仓变成满仓,为投资者带来巨大风险。 五、 开发案例 1、 股指套利辅助系统 辅助系统登陆 辅助系统主界面 2、 单品种全自动交易
图形没有, 一个大概的大家可以产考以下网址。 http://blog.cnfol.com/BasicFinance/article/51020676.html 准备将该平台进行推广, 现在我们正在写具体的说明文档, 需要该系统的朋友可以留下邮箱和期货开户账号(要支持CTP系统的国内期货经纪商), 我们将免费给您试用。 【说明】 我们现在进行第三版本的开发,给予您试用的也是第三版的,以上介绍的是第一版本,但基本的实现逻辑一样,建议您如下格式: 开户期货商: **期货 账号: ****** 期货商名称一定要如实,否则不能成功登陆,我们给予的版本中将绑定账户, 强烈建议目前您给仿真或模拟的账号, 待后期说明文档与内容进一步规范后再进行实盘操作(正如前面题到的,我们目前已经有实盘在运作,问题是我们对该平台很熟悉,建议熟悉后再进行实盘运作)
最近正在做一个进一步的升级,各功能将继续完善和增强(升级后的基本规则与方式将保持不变), 需要试用旧版本的请加qq群 203569639 下载工具箱文件包 欢迎对matlab 有一定编程经验的海友们加入, 先小范围共同探讨学习, 待完善后再作进一步推广!