通过指令执行系统,策略产生的交易指令被传送给经纪商并执行。现实当中,指令生成可以是半自动或者全自动,执行机制也可以配置为手工、半手工或者完全自动。低频交易中,手工和半手工较为常见,而高频交易则需要建立完全自动化的执行机制,通常也需要与指令生成模块紧密配合。
构建指令执行系统的关键在于对接券商的接口、降低交易费用的策略(包含佣金、滑点及经纪商买卖差价)及处理实盘与回测预测业绩差异的处理。
经纪商提供了多种交易接入方式,从电话到高性能API任你挑选。理想情况下,每个人都希望自己的指令执行越自动化越好,还有支持多策略并行及如何提高执行频率,这些宏伟的目标都促使你不断前进。常用的回测软件,MATLAB、Excel及Tradestation在低频、简单的交易策略中都可以表现很好,但如果你希望实施实盘的高频交易,那么你必须使用高性能的编程语言如C++构建一个自己的指令执行系统。我之前就职的基金公司里,有一个10分钟的交易回路,每十分钟我们可以就可以从这个回路下载最新的市场数据,并基于新数据在这个10分钟的周期内完成交易,据说是用优化过的Python脚本实现的。如果需要实现分钟甚至秒级别的数据交互,C/C++可能表现会更好些。
在一个大型基金中,指令如何最优执行通常不在量化交易员的工作范畴,但在小型点的基金或做高频交易的公司,交易员既是指令的执行者,同时又必须要具备更广泛的技能。如果希望供职于基金,那么请你记住一点,你的编程技能可能要比你的统计学、经济学技能更为重要!
个人做量化交易——指令执行系统篇
指令执行过程中经常会出现问题的地方在于交易费用的优化。最为常见的三类费用包含
1.佣金/税费(commission/tax),通常由经纪商、交易所或监管机构收取
2.滑点(slippage),指你订单希望的成交价格与实际成交价格的差异(一般会在行情波动大或市场缺乏流动性的时候出现)
3.价差(spread),指交易标的的买卖报价之差,注意价差并非常量,会跟随市场订单的情况而不停变化。
交易成本对策略影响很大,甚至可以让一个原本高盈利高夏普率的策略摇身一变成为烂到掉渣的策略,通过回测正确预测交易成本极具挑战性。依据交易策略频率,需要获取历史成交数据(包含逐笔交易的买卖信息),数据量很大,所以大型基金中,基本所有宽客团队都在专注于指令的执行优化。以如下场景为例,一个基金需要抛售大量的标的资产,如果上来就大量倾销,会导致股价快速大幅下降,该指令也就没有获得最优的执行。因此,算法一般会将该指令拆分为“点滴订单”,尽管可能需要承担滑点风险。再深入一步,甚至有专门的策略来捕捉这些情况并加以利用,这个领域被称为“基金结构套利”。
指令执行系统最后一个主要关注点在于策略的真实表现与回测中的期望的差别,有许多原因会导致这种情况,比如之前已经回测部分已经提到的前视偏差和数据透视偏差。但一些策略在真实运行前很难发现偏差,高频交易尤为明显。交易策略和指令执行系统都可能存在回测中无法复现,但在线上实盘又出来捣乱的bug,市场也可能因为一个策略的部署从而天翻地覆。新的监管环境,投资者情绪与宏观经济的变化都可能导致市场行为的变化,进而也会影响你策略的表现。