这本书的翻译有很多句子不通,有能力还是读原版的吧。
我只记录了高频交易实践内容,用来为机器自动交易提供参考。包括功能架构、常见缺陷、测试,三部分。
一 功能架构
上图为大多数系统交易平台结构,主要由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),恢复测试
回归测试(回测)
自动化测试
最后俩归属于用例测试,就是功能测试。