15.2 MATLAB实现

15.2 MATLAB实现

15.2.1 主脚本

测试脚本分为5部分,分别为参数定义、数据提取、股票选择、回测仿真和策略评价。

参数定义部分定义了整个测试必要的关键参数,包括股票范围、起始日、结束日、组合大小、换股频率、成本和初始资本等内容。数据提取部分调用数据提取函数,从数据库中提取股票行情数据、期货行情数据和因子值。股票选择部分利用因子值对股票进行排序,选择排名靠前的股票。回测仿真部分模拟真实交易,在建仓日买入股票卖空期货,在平仓日卖出股票平掉期货。策略评价部分利用回测仿真的返回值,对仿真结果进行全方位的评价分析。

下面以经典动量因子为例进行单因子测试。多因子可以采用综合得分法或回归法,通过类似的方案进行测试。

MATLAB实现代码如下:

15.2.2 提取数据

数据提取函数分为股票行情提取函数、期货行情提取函数和因子数值提取函数,用于从MSSQL数据中提取数据,并整理成所需的数据结构。

下面以GetAndMergeMarketData函数为例进行说明。该函数通过传入股票列表、起始日和终止日等参数,返回交易日期、开盘价表、最高价表、最低价表和收盘价表,连接方式为JDBC。

MATLAB实现代码如下:

15.2.3 因子选股

因子选股主要使用的是StockSelection函数。首先获取一个交易日的股票范围,井提取该范围内所有股票的因子值。然后根据因子值的大小,对该交易日内的股票进行排序。

参数说明如下。

• StockPool:股票范围,这是一个矩阵,每行代表一个交易日,每个数字对应一只股票。

• Factof:因子值,每行代表一个交易日,每列代表一只股票的因子取值。

• Case:因子和收益率的逻辑,Case=l 表示因子值越大,收益率可能越高;Case=2

表示因子值越小,收益率可能越低。

MATLAB实现代码如下:

15.2.4 回测

回测部分使用函数FactorBackTest。在建仓日,利用上一个交易日因子选股的结果确定组合股票,以开盘价买入;与此同时,卖空股指主力合约。在平仓日,以收盘价卖出组合所有股票;与此同时,平掉股指空头。在非建仓日和非平仓日,持有组合。

参数说明如下。

• Stocklndice:所选股票标识,为一个矩阵,每行表示一个交易日,每个数字表示一只股票,该矩阵由StockSelection函数返回。

• PortSize:指定组合内的股票数量。

• HoldDays:持有时间,即换仓频率。

• TradeDate:交易日期。

• OpenofStock:股票开盘价表,行表示交易日,列表示股票。

• CloseofStock:股票收盘价表,行表示交易日,列表示股票。

• LowofStock::股票最低价表,行表示交易日,列表示股票。

• HighofStock:股票最高价表,行表示交易日,列表示股票。

• OpenoflF:股指开盘价,股指为连续合约。

• CloseoflF::股指收盘价,股指为连续合约。

• TradingCostofStock:股票交易成本(手续费+佣金+印花税+滑点) 。

• TradingCostofIF:股指交易成本(手续费+滑点) 。

• InitialCapital:初始资金(如果为1,则返回的权益就是净值)。

返回值如下。

• OpenPosDate:开仓日期。

• OpenPosPriceofStock:股票开仓价格。

• OpenPosPriceoflF:股指开仓价格。

• ClosePosDate:平仓日期。

• ClosePosPriceofStock::股票平仓价格。

• ClosePosPriceoflF:股指平仓价格。

• TradeTimes:交易次数。

• RetofStockPortfolio:股票组合动态收益率。

• RetoflF:股指动态收益率。

• RetofFund:对冲基金动态收益率。

• DynamicEquityofStock:股票组合动态权益。

• DynamicEquityofIF:股指动态权益。

• DynamicEquityofFund:对冲基金动态权益。

MATLAB实现代码如下:

15.2.5 策略评价

策略评价部分由函数StrategyEvaluation完成。首先,计算策略的各个风险收益指标,包括夏普比率、年化收益率、回撤比率和胜率等。然后,画出权益变化、收益率分布、最大回撤和每笔交易收益等图形。

参数请参见函数FactorBackTest。

该函数的返回值包括SharpeRatio(夏普比率)、AnnualSimpleRet(年化简单收益率)、AnnualCompoundRet(年化复合收益率)、MaxBackRatio(最大回撤)和WinningRatio(胜率〉。

MATLAB实现代码如下: