5.1 回测平台函数及参数介绍
5.1.1设置回测参数
1、start 与 end(设置回测区间)
其类型为字符串或datetime
start='2017-01-01'
end='2018-01-01'
2、universe(证券池)
其类型为list
universe指策略回测的证券池,及策略逻辑作用的域,下单与历史数据获取都只限于universe中的证券。universe支持全部A股及全部可在二级市场交易的ETF与LOF;还支持以三种方式获取证券池:DynamicUniverse、set_universe和StockScreener;也可使用固定的股票列表,例如[‘000001.XSHE’,‘600000.XSHG’]。对于这个参数的设置主要是为了让回测平台能够提前加载相关数据,以加快回测速度。
universe=['000001.XSHE','600000.XSHG'] #静态证券池
universe=set_universe('HS300',date='2016-03-01') #静态证券池
universe=DynamicUniverse('HS300') #动态证券池
universe=StockScreener(Factor.PE.nlarge(10)) #动态证券池
3、set_universe(静态证券池)
用于返回预设的证券代码列表,支持行业成分股、指数成分股。当资产池指定为一个特定列表时,策略框架仅返回相应列表中的内容。
set_universe(symbol,date)
#参数symbol值证券代码列表的名字,为str或预设的行业与指数实例类型
(1)当参数为str类型时,支持7个预设值,其中SH50表示上证50;SH180表示上证180;HS300表示沪深300;ZZ500表示中证500;CYB表示创业板;ZXB表示中小板;A表示全A。对于该类型的参数,可以用DataAPI.IdxGet()函数获取所有指数的secID值。eg:
set_universe('HS300') #表示沪深300的字符串
(2)预设的行业实例与指数实例指具体支持的行业和指数。eg:
set_universe(IndSW.YinHangL2) #行业分类实例 IndSW,申万行业;YinHangL2表示银行二类行业分类
set_universe(indCN.IdxShangZhengZongZhi) #指数成分实例
#参数date指定证券池列表的日期,默认为显示的最近一个交易日。该参数类型为str或datetime,字符串只支持YYYY-MM-DD和YYYYMMDD这两种格式。
set_universe(symbol,date) 返回list类型,为证券代码列表,eg:
universe=set_universe('SH50',date='2016-03-01') #获取2016.3.1上证50列表
universe=set_universe('SH50') #获取上一个交易日的上证50列表
静态证券池也可以指定固定的个别资产或资产列表,eg:
universe=['000001.XSHE','IFMO'] #指定平安银行和股指期货
4、DynamicUniverse(动态证券池)
用于返回动态证券池实例。在使用板块成分股、指数成分股或行业成分股作为策略的交易对象时策略框架会根据实际情况调整当天股票池的内容。
DynamicUniverse(<板块代码或行业、指数实例>)
在策略回测中,我们推荐使用DynamicUniverse来代替set_universe,以避免出现幸存者偏差,即因提前使用了未来的版块成分而导致策略效果偏好的错误。DynamicUniverse支持7个预设板块,为str类型,其中SH50表示上证50;SH180表示上证180;HS300表示沪深300;ZZ500表示中证500;CYB表示创业板;ZXB表示中小板;A表示全A股。
可以使用DynamicUniverse(‘HS300’)调用,表示沪深300的当期成分股。同时支持预设行业和指数实例,指具体支持的行业和指数。eg:
DynamicUniverse(IndSW.YinHangL2) #行业分类实例,IndSW,申万行业;YinHangL2,银行二级行业分类
DynamicUniverse(IndCN.Idx.ShangZhengZongZhi) #指数成分实例
DynamicUniverse('HS300',IndSW.YinHangL2,IndCN.Idx.ShangZhengZongZhi) #混合使用
还支持动态证券池和普通列表取并集,eg:
universe=DynamicUniverse('HS300')+['000001.XSHZ'] #包含沪深300成分股动态证券池和平安银行
5、apply_filter
用于将筛选条件作用于动态证券池的每个交易日的证券池上,进一步缩小策略标的范围。当前支持使用优矿因子库中所有因子对证券池进行筛选。eg:
DynamicUniverse(<板块代码或行业、指数实例>).apply_filter(<因子筛选条件表达式>)
其参数为<因子筛选条件表达式>,表达式写法为:
Factor.<factor_name>.<筛选方法>
其中,factor_name是因子名,可以通过优矿因子库查看所有支持筛选的因子,筛选方法如下:
条件约束 含义
value-range 按值筛选
pct-range 按百分比筛选
num-range 按序号筛选
nlarge 取最大
nsmall 取最小
运算规则如下:
(1)支持单个筛选条件,也支持多个筛选条件的表达式,最多支持5个筛选条件。
(2)在表达式中可以使用两种二元运算:一种为交(&),同时满足两个筛选条件;一种为并(|),满足任意一个筛选条件,运算方向从左到右。
(3)当筛选条件多于两个,可以通过括号嵌套来确定运算顺序,例如(<条件1>&<条件2>)|(<条件3>&<条件4>)。eg:
(Factor.PE.nalrge(100))|Factor.PB.pct_range(0.95,1)) &Factor.RSI,value_range(70,100)
#筛选出PE值最大的·100只股票或者PB排在95%到100%的股票,以及RSI值大小在70至100的股票池
它返回DynamiUniverse类型的实例,eg:
universe=DynamicUniverse('HS300').apply_filter(Factor.PE.nsmall(100))
#获得沪深300成分股中PE最小的100只股票列表
6、bencHmark(参考基准)
为策略参照标准,即量化策略回测结果的比较标准,通过比较可以大致看出策略的好坏,为str类型。策略的一些风险指标如alpha、beta等也要通过benchmark计算。
benchmark支持如下三种赋值方式:
(1)5个常用指数:SHCI(上证综指)、SH50(上证50)、SH180(上证180)、HS300(沪深300)、ZZ50(中证50),可以直接命名“HS300”来定义。eg:
benchmark='HS300' #策略参考标准为沪深300
(2)通过DataAPI.IdxGet()这个API拿到其他指数的secID,eg:
bnechmark='399006.ZICN' #策略参考标准为创业板指
(3)个股的secID,eg:
benchmark='000001.XSHE' #策略参考标准为平安银行
7、freq和resfresh_rate(策略运行频率)