即将发布一款完全基于Matlab的交易分析与实盘交易工具箱(目前为期货版本)

Discussion in 'Julia / MATLAB / SAS' started by davidveirs, Dec 12, 2011.

  1. 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、 实盘交易下单维护组件
    [​IMG]

    Matlab 是一款功能强大的数学建模、分析平台,本软体借助matlab的一切便利功能(如作图(3D),计算、分析,编程语言简洁等),用C/C++编写各个功能模块的底层,实现其与matlab的无缝结合。使其在保持了功能高效实现的基础上,无限的增加了其扩展性。

    一、 量化交易研发平台
    1 概述
    本平台策略回测功能是在充分研究、挖掘TradeStation、wealthLab、以及交易开拓者等国内外知名程序化交易策略测试平台的基础上,依据个人对交易的理解整理、编写的一个单一品种为主的策略、量化研究工具。
    1、 策略编码规范
    主要通过一个for 循环实现, i代表每次的当前bar是研究样本的第几根K线;
    在买入、卖出操作函数中,第一个变量恒定为i;
    For循环的结尾,end之前都应该加一个策略测试当前周期结束的标识语句btEnd(i);

    [​IMG]


    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、 主界面说明
    [​IMG]


    2、功能工具箱菜单
    [​IMG]

    1、 生成新的图形空间
    2、 打开历史备注文件
    3、 保存当前备注文件
    4、 加载/管理数据文件
    5、 周期变换
    6、 图形扩大显示
    7、 图形缩小显示
    8、 移动图形手柄
    9、 显示横纵坐标线
    10、 显示分隔线
    11、 作图:直线
    12、 作图:文本
    13、 坐标中图形大小按坐标自动调整大小
    14、 各xfig对象间按时间一一对应起来
    15、 系统设定
    16、 回撤交易(策略研发中)显示交易结果与自动仿真交易

    3、文本历史行情数据导入
    [​IMG]


    4、技术指标编写规范
    第一行为指标的输入参数,第二行为参数的默认值,第四行为指标的说明
    [​IMG]

    加载技术指标对话框如下:
    [​IMG]


    5、加载策略研发中的买卖信号以及绩效结果
    [​IMG]


    三、 实盘交易组建维护平台
    该平台负责载入本地历史行情数,当日实时行情数据接收,存储,数据周期转换,策略维护、调用等功能。
    1、实盘策略运作流程
    第一步: 实盘账户登录,声明要接收的合约行情数据;
    第二步: 加载策略;
    第三步: 启动平台运行策略体。

    2、实盘策略编写规范简介
    保留变量: in_0 用于初始化的声明; 合约名,比如IF1109,为结构体,表面当天最近1800个tick数据点。下图为一实盘策略体:
    [​IMG]

    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、 股指套利辅助系统
    辅助系统登陆
    [​IMG]
    辅助系统主界面
    [​IMG]



    2、 单品种全自动交易
    [​IMG]
     
  2. 图形没有, 一个大概的大家可以产考以下网址。
    http://blog.cnfol.com/BasicFinance/article/51020676.html

    准备将该平台进行推广, 现在我们正在写具体的说明文档, 需要该系统的朋友可以留下邮箱和期货开户账号(要支持CTP系统的国内期货经纪商), 我们将免费给您试用。

    【说明】 我们现在进行第三版本的开发,给予您试用的也是第三版的,以上介绍的是第一版本,但基本的实现逻辑一样,建议您如下格式:
    开户期货商: **期货 账号: ******

    期货商名称一定要如实,否则不能成功登陆,我们给予的版本中将绑定账户, 强烈建议目前您给仿真或模拟的账号, 待后期说明文档与内容进一步规范后再进行实盘操作(正如前面题到的,我们目前已经有实盘在运作,问题是我们对该平台很熟悉,建议熟悉后再进行实盘运作)
     
  3. 和金钱豹的功能类似?!
     
  4. 请问楼主的交易策略使用什么编写?
    谢谢..
     
  5. 完全在matlab环境中进行,用的语言完全是matlab的, 金钱豹的应该要依靠金钱豹平台。
     
  6. 图片完全看不到a
     
  7. 看不到图
    matlab开发策略
    可以转为dll
    供c++调用
    不需要平台
     
  8. 这几天在整理说明文档,整理好后给大家参考。
     
  9. 是可以转化, 但中间的数据结构等转化问题比较麻烦,修改起来也不方便, 所以我最终选择了完全在matlab中实现了, 不知你是如何处理的 :)
     
  10. 最近正在做一个进一步的升级,各功能将继续完善和增强(升级后的基本规则与方式将保持不变), 需要试用旧版本的请加qq群 203569639 下载工具箱文件包
    欢迎对matlab 有一定编程经验的海友们加入, 先小范围共同探讨学习, 待完善后再作进一步推广!