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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

相关推荐
量化风云11 天前
『量化人的概率 03』PDF is all you need
python·金融·pdf·概率论·量化交易·量化课程
青云交1 个月前
Java 大视界 -- Java 大数据机器学习模型在金融衍生品市场波动特征挖掘与交易策略创新中的应用(363)
java·大数据·机器学习·量化交易·金融衍生品·交易策略·波动率预测
北纬32.62 个月前
高频交易服务器篇
量化交易·高频量化·python量化·hft·openai炒股
qife2 个月前
AI 对冲基金模拟系统
机器学习·量化交易·金融科技·ai投资
DolphinDB智臾科技2 个月前
如何计算股票复权因子与复权行情
数据分析·量化交易·因子挖掘·dolphindb 实时计算
阡之尘埃3 个月前
Python量化交易12——Tushare全面获取各种经济金融数据
python·金融·数据分析·pandas·量化交易·宏观经济
TGITCIC3 个月前
AI量化交易是什么?它是如何重塑金融世界的?
量化交易·量化·ai金融·deepseek量化交易·大模型金融·ai量化·大模型理化
人大博士的交易之路4 个月前
今日行情明日机会——20250409
人工智能·数学建模·分类·数据挖掘·量化交易
breakloop5 个月前
量化交易从0到1(理论篇)
笔记·学习·量化交易
船长@Quant5 个月前
Airflow量化入门系列:第四章 A股数据处理与存储优化
python·量化交易·airflow·dask·工作流编排·ta-lib·vectorbt