如何从零开始设计一套⌈中性策略回测系统⌋?

最近接到新任务,需要开发一套⌈中性策略回测系统⌋。

首先老实交待,策略方面,更多是投研部的工作,我不太懂。中性策略,平时工作中多多少少有些接触,全名为市场中性策略,我理解,凡是有对冲的策略便是市场中性策略,构建多头和空头头寸,其中空头即为对冲端。之所以被称为中性策略,也是因为与市场相关性低,无论牛市和熊市,只要有基差,即多空两头波动不均衡,便能获利,一度被认为是能穿越牛熊的黄金策略。我司的中性策略,主要是股票多因子Alpha策略,基于量、价及基本面范围的多因子量化策略(基本面因子不算量化范畴?),而对冲端,主要有股指、融券和场外期权三类。

相应地,回测也分两块,即多头回测和空头回测。本次回测系统开发,优先开发对冲端的回测,当前公司有一个在用的多头回测系统,勉强能先用着,对冲端开发完成后,再小改一下,将两边融合起来,最终作为一套完整的中性策略回测系统交付投研部使用。

回测系统,顾名思义,即回溯行情,测试交易。交易基于策略,策略有简单复杂之分,最简单的策略可以简单到一句话,比如每天按MA5(5日移动均线)下单,低买高卖,再比如每天早上10点市价挂单,虽然简单,但都算交易策略。而复杂策略,可以多到成千上万行代码,可以是一个独立且庞大的系统,形形色色,各有千秋。殊途同归的是,反映的都是投研/基金经理等交易者的清奇思路,策略是一种信仰,最终可以赚大钱的信仰。

回测,无非是计算历史区间内策略每日的收益。收益可分为两部分,一是持仓收益,二是交易收益。对于股票:

持仓收益:当日未交易的票,因为行情波动而产生的收益。收益率=收盘价/昨收-1。

交易收益:当时买入的票持有到收盘,或卖出的票从开盘到卖出时点,这个时段内的收益。其中,买入的收益率计算公式为:收盘价/买入价-1,卖出的收益率为:卖出价/昨收价-1。

期货与股票略有差异,股票实行的是逐笔结算制度,浮动盈亏是一买一卖之间累计的,与持仓天数无关。期货实行的是逐日盯市结算制度,即每天的盈亏会在当天结算时结清,盈利的钱会在结算后体现在账户总资金(权益)中,作为第二天的本金,而对于亏损的,需要在收盘后及时补充保证金,否则期货公司会执行强制平仓以降低暴仓可能引发的资不抵债风险。

另外期货交易比股票更为复杂,最明显的是期货允许做空(股票当然也可以,但是融资融券是另外一回事暂且忽略),交易方向又分为开仓、平仓,交易类型分为买和卖,因此有买开、卖平、卖开、买平这四种交易,之所以用这顺序,是因为买开的合约是通过卖平来平仓,卖开的合约则通过买平来平仓,这样结对便于记忆否则容易混淆。

显然,回测系统的核心,是计算每日交易盈亏(后文简称为PNL,即Profit and Loss)。

对于回测系统,若按策略类型划分,有以下两类:

1、择时策略回测:这类涉及到策略定义,按策略的成交规则进行择时交易。

2、择股策略回测:这类回测是无关下单时间的,适用于选股策略,导入股票组合和权重,指定成交价格,比如开盘价、时段twap/vwap等,再指定交易区间(起始/截止日),即可启动回测。

大部分回测系统属于第一类,而中性策略属于选股策略,显然适用第2类回测。

相关推荐
股票程序交易接口2 天前
股票接口api,如何用excel获得股票实时数据
excel·量化交易·股票api接口·股票量化接口·python股票接口·股票实时数据
股票程序交易接口3 天前
量化交易里面的挂单成交率大概是多少呢
量化交易·股票api接口·股票量化接口·挂单成交率·市场流动性·订单类型
股票程序交易接口7 天前
python股票因子,交易所服务器宕机,量化交易程序怎么应对
量化交易·股票api接口·股票量化接口·python股票接口·服务器宕机·应对策略
股票程序交易接口20 天前
券商交易接口开放,为什么很少有人用量化软件QE做AIMD做AIMD,该用什么软件
量化交易·股票api接口·股票量化接口·python股票接口·aimd策略·qe软件
赫兹量化软件1 个月前
期货赫兹量化-种群优化算法:进化策略,(μ,λ)-ES 和 (μ+λ)-ES
算法·量化交易
股票程序交易接口1 个月前
更适合编写股票盯盘软件或者量化交易平台的语言是Python还是C
量化交易·编程语言·股票api接口·股票量化接口·python股票接口
码上助居2 个月前
数字货币MACD指标自动化交易策略实现(含源代码)
区块链·量化交易·程序化交易
码上助居2 个月前
七天打造一套量化交易系统:Day2-量化交易策略基本模型及要点
区块链·量化交易·程序化交易
量化投资与科学养猪3 个月前
高盛开源的量化金融 Python 库
python·量化交易·quant
量化风云4 个月前
追寻美的指引--纪念西蒙斯
量化交易·人物