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实现代码如下:


