教你量化投资001——使用聚宽实现基于价值投资的选股

    科技2024-02-01  91

    使用聚宽有一段时间了,目前已经略有小成。所以分享一些使用心得,帮助大家入门。

    目前价值投资的理念越来越深入人心,那么如果基于安全边际与低估来选择理想的好价格股票呢。

    永续年金估值模型为我们提供了一个选项,下面我们看如何实现。

    首先,基于一些基本的指标来选择股票。具体的参数含义可以查询聚宽的数据字典。https://www.joinquant.com/help/api/help?name=Stock

    from jqdata import finance df = get_fundamentals(query( valuation.code, valuation.capitalization, valuation.pcf_ratio, valuation.market_cap,#总市值 valuation.pb_ratio, cash_flow.net_operate_cash_flow,#经营活动产生的现金流量净额(元) cash_flow.net_invest_cash_flow, #投资活动产生的现金流量净额(元) cash_flow.subtotal_invest_cash_inflow, #投资活动现金流入小计(元) cash_flow.subtotal_invest_cash_outflow,#投资活动现金流出小计(元) cash_flow.cash_and_equivalents_at_end, cash_flow.statDate ).filter( valuation.pe_ratio < 50, valuation.pe_ratio >0, cash_flow.net_operate_cash_flow>10000000, indicator.inc_operation_profit_year_on_year>=20, indicator.inc_net_profit_year_on_year >=20, valuation.pb_ratio <10, indicator.net_profit_margin > 20, indicator.gross_profit_margin > 40, # 这里不能使用 in 操作, 要使用in_()函数 #valuation.code.in_(['000651.XSHE','002848.XSHE','603416.XSHG','603040.XSHG','002273.XSHE', '603079.XSHG', '300673.XSHE','603605.XSHG','603585.XSHG']) ), statDate='2018q4') df['info'] = df.apply(lambda row: get_security_info(row['code']), axis=1) df['name'] = df.apply(lambda row: row['info'].name, axis=1) df['display_name'] = df.apply(lambda row: row['info'].display_name, axis=1) df['free_cash'] = df['net_operate_cash_flow'] - df['net_invest_cash_flow'] df['current_data'] = df.apply(lambda row: get_price(security=row['code'], end_date='2018-08-13', frequency='daily', fields=['close'], count=1).iloc[0,:]['close'], axis=1) df

    然后实现估值函数。

    def get_guzhi(cash, capitalization): current_cash = cash #print("自由现金流",current_cash) current_cap = capitalization #print("总股本",current_cap/10000) cash_increase_ratio = 0.1 zhexian_r_ratio = 0.1 yongxu_g_ratio = 0.03 def get_cash_in_x_year(init_cash, cash_increase_ratio, zhexian_r_ratio, year_n): all_cash = [] zhexian_cash = [] for i in range(0, year_n): c = init_cash*pow(1+cash_increase_ratio, i) all_cash.append( c ) zhexian_cash.append(c/pow(1+zhexian_r_ratio, i)) return all_cash,zhexian_cash cash_year,zhexian_year = get_cash_in_x_year(current_cash,cash_increase_ratio,zhexian_r_ratio,10) #print( cash_year ) #print( zhexian_year,sum(zhexian_year) ) yongxu = cash_year[-1]*(1+yongxu_g_ratio)/(zhexian_r_ratio - yongxu_g_ratio) yongxu_zhexian = yongxu/pow(1+zhexian_r_ratio,10) #print(yongxu, yongxu_zhexian) guzhi = yongxu_zhexian + sum(zhexian_year) #print("估值",guzhi,guzhi/100000000,"亿元") #print("股价",guzhi/(current_cap*10000)) #print("40%安全边际价格",0.6*guzhi/(current_cap*10000)) #print("=====================") return guzhi/(current_cap*10000)

    这样我们就可以基于18年的数据获得结果了。部分示例如下。

    坤彩科技 自由现金流 70420826.97 总股本 4.68 估值 1646201149.948052 16.462011499480518 亿元 股价 3.5175238246753247 40%安全边际价格 2.1105142948051947 ===================== 蓝晓科技 自由现金流 19622371.65 总股本 2.0239375 估值 458704791.81818175 4.587047918181818 亿元 股价 2.2663980079334554 40%安全边际价格 1.3598388047600731 ===================== 青松股份 自由现金流 45427619.59 总股本 3.8592 估值 1061944354.0519482 10.619443540519482 亿元 股价 2.7517214812705952 40%安全边际价格 1.6510328887623573 ===================== 国瓷材料 自由现金流 349758540.89 总股本 6.42227383 估值 8176173683.142856 81.76173683142855 亿元 股价 12.730963984982957 40%安全边际价格 7.638578390989775 ===================== 新余国科 自由现金流 26228449.82 总股本 0.8 估值 613132593.1948051 6.1313259319480515 亿元 股价 7.664157414935064 40%安全边际价格 4.598494448961038 =====================

    如果18年买入GCCL,那么到现在已经3倍收益了哦!

    抛砖引玉,大家可以利用聚宽实现更多策略。

     

    Processed: 0.011, SQL: 8