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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

相关推荐
jiucaixiuyang10 天前
散户如何做手机T0程序化交易(下)
股票·量化交易·t0交易
天一生水water16 天前
均值回归(配对交易)策略
均值算法·回归·kotlin·量化交易
DolphinDB智臾科技17 天前
多资产回测实战 | 用 DolphinDB 搭建股票期货对冲与期权套利策略
时序数据库·量化交易·dolphindb
天一生水water20 天前
量化交易的开源框架
量化交易
天一生水water23 天前
AI+量化 的数据类型有哪些
人工智能·量化交易·时间序列
星星之火之1 个月前
【通达信L2黑科技】 用 DLL 把 10 年机构大单净额 1 秒拖进本地,选股、排序、回测快到飞起!
量化交易·股票数据接口·股票实时数据·stockapi
青云交1 个月前
Java 大视界 -- 基于 Java 的大数据实时流处理在金融高频交易数据分析中的应用
java·大数据·量化交易·异常检测·apache flink·实时流处理·金融高频交易
量化风云3 个月前
『量化人的概率 03』PDF is all you need
python·金融·pdf·概率论·量化交易·量化课程
青云交3 个月前
Java 大视界 -- Java 大数据机器学习模型在金融衍生品市场波动特征挖掘与交易策略创新中的应用(363)
java·大数据·机器学习·量化交易·金融衍生品·交易策略·波动率预测
北纬32.64 个月前
高频交易服务器篇
量化交易·高频量化·python量化·hft·openai炒股