量化交易——因子选股、多因子选股策略

本文介绍了量化交易中的因子选股策略,包括基本面、技术面、经济和其他因子。详细阐述了小市场策略,即选取市值最小的股票。在聚宽平台上实现了小市值策略,并展示了查询财务数据的方法。此外,探讨了多因子选股模型的建立过程,包括因子的有效性检验、综合评分模型的建立,以及数据预处理中的归一化和标准化方法。最后,给出了市值+ROE的双因子选股策略及其数据处理实例。
摘要由CSDN通过智能技术生成

一、因子选股策略

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:一个

  • 11
    点赞
  • 137
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值