一、因子选股策略
1、因子
因子:选择股票的某种标准。因子是能够预测股票收益的变量。
(1)基本面因子
基本面因子描述了一个公司的财务状况,最常见的基本面因子是由利润表,资产负债表以及现金流量表中的数据直接计算出的比率。通过财务报表可以构建出无数的财务比率及财务报表变量的组合,并以此来预测股票的收益率。
一般将基本面因子分为6小类:估值因子、偿债能力因子、营运效率因子、盈利能力因子、财务风险因子以及流动性风险因子。
(2)技术面因子
大多数技术面因子是由过去的价格、成交量以及其他可获得的金融信息所构建的,技术面因子一大优势是能够持续更新。新的基本面数据最多只能按季度获取,相反,最新的技术指标每隔几秒就可以获得。
(3)经济因子
最初的套利定价模型是基于经济指标来构建的。比较流行的经济因子包括:GDP增速、失业率以及通货膨胀率等,它们几乎会影响到市场的每一个角落。
(4)其他因子
其他因子的类型包括但不限于:分析师预测因子、事件驱动因子。
2、选股策略(策略模型)
对于某个因子,选取表现最好(因子最大或最小)的N支股票持仓。
每隔一段时间调仓一次。
3、小市场策略
选取股票池中市值最小的N只股票持仓。
二、聚宽实现因子选股策略——小市值策略
沪深300中,根据市值最小的20只股票选股:
# 初始化函数,设定基准等等 def initialize(context): # 设定沪深300作为基准 set_benchmark('000300.XSHG') # 开启动态复权模式(真实价格) set_option('use_real_price', True) # 输出内容到日志 log.info() log.info('初始函数开始运行且全局只运行一次') # 股票类每笔交易时的手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱 set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock') # 获取指数成份股 g.security = get_index_stocks('000300.XSHG') # valuation:财务数据表,code是对应的股票代码 # 这里不能使用 in 操作, 要使用in_()函数,找到沪深300股份对应的财务数据 g.q = query(valuation).filter(valuation.code.in_(g.security)) g.N = 20 # 20只股票 run_monthly(handle, 1) # 第一个参数是对应的函数,第二个参数指第几个交易日 def handle(context): df = get_fundamentals(g.q)[['code', 'market_cap']] # 花式索引选出股票代码和市值 df = df.sort_values("market_cap").iloc[:g.N,:] # pandas排序函数,将数据集依照某个字段中的数据进行排序 # 期待持有的股票 to_hold = df['code'].values for stock in context.portfolio.positions: if stock not in to_hold: # 目标股数下单,卖出非标的的股票 order_target(stock, 0) # 期待持有且还未持仓的股票 to_buy = [stock for stock in to_hold if stock not in context.portfolio.positions] if len(to_buy) > 0: # 需要调仓 # 每只股票预计投入的资金 cash_per_stock = context.portfolio.available_cash / len(to_buy) for stock in to_buy: # 按价值下单,买入需买入的股票 order_value(stock, cash_per_stock)
执行效果:
这个策略在短线情况下表现一般,长线情况下效果不错。
1、查询财务数据
查询财务数据,详细数据字段描述见:财务数据文档
get_fundamentals(query_object, date=None, statDate=None)
(1)参数介绍
query_object:一个