Fama三因子数据的收集

import numpy as np
import pandas as pd
from datetime import datetime, date, timedelta, timezone
import jqdatasdk as jq
jq.auth("18351925110","925110")
auth success 

首先定义一个分组函数,方便对每年进行分组

核心思路:每年的5月末对股票池进行分组
分组策略:首先按照市值(size) 分为Big,前50%;Small ,后50%
然后按照账面价值比(bp),这里进行一个简化处理,选取pb(市净率)的相反数
分为LOW(前30%)Medium(中间40%) High(后30%)
股票组合:2*3 为BL BM BH SL SM SH

get_grooup(breakpoint): 返回6个因子组合,用来计算因子,为一个list

def get_group(breakpoint):   #breakpoint 每年进行分组的时间点  字符类型 如:“2019-05-31”
    breakpoint = jq.get_trade_days(end_date=breakpoint,count=1)[0] #获取breakpoint之前最近的一个交易日,含breakpoint
    universe = jq.get_index_stocks("000300.XSHG",date=breakpoint)   #获取沪深300指数的成分股
    ###############################取数据####################################################################
    my_query = jq.query(jq.valuation.code,jq.valuation.circulating_market_cap,jq.valuation.pb_ratio).filter(jq.valuation.code.in_(universe))                                                                                                            
    stocks_info = jq.get_fundamentals(my_query,date=breakpoint)  #获取股票的市值、PB数据
    ##################################算市值#################################################################
    ME50 = np.percentile(stocks_info["circulating_market_cap"],50)   #计算市值中位数
    S = stocks_info[stocks_info["circulating_market_cap"]<=ME50]["code"].tolist()   #获取小市值股票代码列表
    B = stocks_info[stocks_info["circulating_market_cap"]>ME50]["code"].tolist()    #获取大市值股票代码列表
    #########################################算账面市值比####################################################
    stocks_info["bp"] = 1/stocks_info["pb_ratio"]
    BP30 = np.percentile(stocks_info["bp"],30)  #计算前30%位数
    BP70 = np.percentile(stocks_info["bp"],70
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值