zoukankan      html  css  js  c++  java
  • 《高频交易》读书笔记

    这本书的翻译有很多句子不通,有能力还是读原版的吧。

    我只记录了高频交易实践内容,用来为机器自动交易提供参考。包括功能架构常见缺陷测试,三部分。

    一  功能架构

    上图为大多数系统交易平台结构,主要由5个步骤构成:1、核心引擎;2、报价归档;3、交易后分析;4、模拟;5、人力监督;

    1、核心引擎:为了快,多为C++开发,有些用Java的关闭了GC。核心系统投资组合管理系统启动,核心系统调自营商下单,response为价格和成交数额,核心系统计算收益,反馈到投资组合管理系统的风险管理参数,

    投资组合管理系统包括:原始报价输入、计量经济模型、当前头寸(仓位)规模、投资多元化信息、投资组合回报最大化投入、最小化投资组合的风险。

    客户与自营商传递报文用的是财务信息交换协议(FIX),

    风险管理系统:突破绩效盈亏限制时,生成警告信息。

    2、报价归档:高频交易中最具有时效性的功能是数据归档。(IO速度远低于CPU、内存的速度,核心计算用c,IO功能用速度慢的python也行)我觉得可以加入非关系型数据库、异步IO。

    3、交易后分析:交易后,分析系统去分析,代码模拟的结果,与实际交易的结果,是否有一致预期。然后更新收益分布、交易成本、风险管理参数,用来反馈到核心系统、投资组合优化过程、风险管理组成模块。

    4、模拟:指一个交易策略的虚拟执行,模拟引擎是个独立模块,跟上面那些代码不在一起。

    模拟市价订单时,为了更接近实时交易结果,要估计每单位交易规模平均市场冲击,然后调整最低报价的市场冲击估计值。

    模拟限价订单时,要考虑价格要超过限价时,才能保证被买入或卖出。

    模拟结果可能在实际中没用,这就需要大量数据做测试,数据越多能最大限度减少数据抽样偏差。

    回测也用于估计风险,可以反馈给风险管理模型、收益分布等。

    另外,为应对闪电崩盘,要进行压力测试。

    如果策略在回测结果中令人满意,就进行纸上模拟交易——基于实时数据运行,但没有真正进行交易。这时要记录:订单粒度,至少1毫秒;交易性金融工具代码;观测最优买价和最优买价规模,最优卖价和最优卖价规模,记录这些以便订单和数据的日后调节;订单数量;假设执行价格;

    最后上生产,要和纸上模拟交易一样,记录数据,用于以后评估策略。

    生产和纸上模拟的绩效差异,叫执行落差,用于反馈对滑点和其他潜在成本的对策考虑。

    5、人力监督:监督系统别中病毒和宕机。

    二  常见缺陷

     信息确认循环:报文传输时间长会使算法偏离;对于多下单的情况,可以设置两个计数器,一个发送指令,另一个确认订单执行位置。

    时间失真:各个环节都有耗时,为了保证不出乱子,给报价打上时间戳并放入队列执行。

    执行速度:最好靠近自营商的服务器。

    三  测试交易系统

    数据集测试:测试数据的有效性,减少数据中的不良影响和数据失真。(比如避免单边行情的数据导致多空偏差)

    单元测试:检查系统每个单独组件是否正常工作。

    整合测试:就是集成测试,不同功能联调。

    系统测试:GUI测试,压力测试,安全测试,可扩展性测试,可靠性测试(高可用4个9),恢复测试

    回归测试(回测)

    自动化测试

     最后俩归属于用例测试,就是功能测试。

  • 相关阅读:
    关于const_cast
    TinyXPath与TinyXML
    C++的异常
    如何让对象只能处于堆中
    股票的委托价、成交价与成本价的关系
    static_cast dynamic_cast reinterpret_cast const_cast
    C++ MD5,SHA1源码下载和简单调用
    C++中char[]转string
    HttpWorker
    winnet winhttp
  • 原文地址:https://www.cnblogs.com/zhaot1993/p/14867396.html
Copyright © 2011-2022 走看看