基本面的量化分析与投资的回报 - 上篇

  • 基本面分析
    • 公司的基本面分析和打分
      • 代码及分析 - 基础数据
      • 代码及分析 - 股票行情
    • 总结
    • 参考资料
  • 下篇

基本面分析

百度上给出的定义:基本分析法是从影响证券价格变动的敏感因素出发,分析研究证券市场的价格变动的一般规律,为投资者作出正确决策提供科学依据的分析方法。主要有三个层次:一是宏观社会经济类影响因素; 二是行业(或产业)类影响因素; 三是公司类影响因素。三类影响证券价格的因素构成证券投资基本分析的三个部分,即宏观经济分析、行业分析和微观企业 (公司) 分析。我的以下分析主要集中在企业的数据上。

公司的基本面分析和打分

我的打分系统主要涉及到10个方面:营收,营利增长率,毛利率,期间费用,库存周转率,经营性现金流,净资产收益率,总资产收益率,市净率,市盈率。满分为一百分,分数越高,代表着公司的整体基本面越优秀(前提假设是公司没有做假账)。整套打分系统的源代码是由我的量化导师Cutehand所制作,我只是后期加工而已,如有需要请关注联系我的导师。所有的数据都是从Tushare上获取的,请自行去其官网进行注册,按照自己的需求来进行购买充值。

代码及分析 - 基础数据

首先说一下本代码是.ipynb格式,也就是我们说的Jupyter Notebook格式。另外我的代码分析不构成任何的投资推荐,请斟酌!

import pandas as pd
import numpy as np
import tushare as ts
# import talib
# import moduleigh as ml
import time
from datetime import datetime as dt
from pyfinance import TSeriestoken = '你的tushare密钥'
ts.set_token(token)
pro = ts.pro_api(token)
  1. 首先我们来读取我过去根据我导师的加工后的代码所获取的每个季度,A股上市公司的经营情况的打分。
df_20214 = pd.DataFrame(pd.read_csv("D:\\BaiduNetdiskWorkspace\\股票候选\\季度3连涨候选人_2021年第肆季.csv", encoding='GBK', index_col=0))
df_20221 = pd.DataFrame(pd.read_csv("D:\\BaiduNetdiskWorkspace\\股票候选\\季度3连涨候选人_2022年第壹季.csv", encoding='GBK', index_col=0))
df_20222 = pd.DataFrame(pd.read_csv("D:\\BaiduNetdiskWorkspace\\股票候选\\季度3连涨候选人_2022年第贰季.csv", encoding='GBK', index_col=0))


2. 其次我们看看这三张表里面,每张表大概有多少只股票。len(df_20214),len(df_20221),len(df_20222)输出分别为179,509,594。
3. 当我们把分值缩小至66分以上,它们的输出缩小为55,105,132。

df_20214_66 = df_20214[df_20214[df_20214.columns[-1]] > 66]
df_20221_66 = df_20221[df_20221[df_20221.columns[-1]] > 66]
df_20222_66 = df_20222[df_20222[df_20222.columns[-1]] > 66]
  1. 我们来看看在过去的半年里表现一直很亮眼的候选人的名单:
set_stocklist = set(list_20214) & set(list_20221) & set(list_20222)   # 看看哪些股票同时在这3张表内
df_result_list = pd.DataFrame({'ts_code':list(set_stocklist)})   # 创建一个列名为ts_code的dataframe
df_result = pd.merge(df_result_list, df_20222, on='ts_code')    # 与最后一期表合并筛选出这几支股票都是哪些
df_result = df_result.sort_values(by=df_result.columns[-1], ascending=False).reset_index(drop=True)   # 排序整理一下


5. 截至到这里我们发现,在2021年~2022年中的表现来看,我们的候选人从我的3张表中筛选出来的概率只有10%

代码及分析 - 股票行情

  1. 以下的展示代码可以通过导师的这个帖子来学习获得,请自行阅读获取。
  2. 首先我们来封装一个从tushare上获取数据的并以时间排序的数据。
def get_data(code,start='2021-01-01',end=''):if code.startswith('399'):   # 399开头的指数数据,用于区分股票数据df=pro.index_daily(ts_code=code,start_date=start,end_date=end)else:df=ts.pro_bar(code,start_date=start,end_date=end,adj='qfq',freq='D')df=df.sort_values('trade_date', ascending=True)   # 按照时间正序排列,因为tushare给我们的是倒序排列df.index=pd.to_datetime(df.trade_date)   # 以时间轴为indexret=df.close/df.close.shift(1)-1   # 计算每日收益率#返回TSeries序列return TSeries(ret.dropna())
  1. 将重要的指标进行封装,有什么不明白的地方请参阅本贴。还有一个可能大家会遇到的问题就是计算标准差这里,很多指标会用到它,但是设计的时候又不让大家传freq=的参数。建议大家pip install pyfinance库后,去pyfinance的文件夹找一个叫做returns.py的文件,把牵扯到anlzd_stdev()的公式,统统将参数freq=250进行固定年化设置。
def performance(code):tss=get_data(code)benchmark=get_data('399300.SZ').loc[tss.index]dd={}#收益率#年化收益率dd['年化收益率']=tss.anlzd_ret()#累积收益率dd['累计收益率']=tss.cuml_ret()#alpha和betadd['alpha']=tss.alpha(benchmark)dd['beta']=tss.beta(benchmark)#风险指标#年化标准差dd['年化标准差']=tss.anlzd_stdev(freq=250)#下行标准差dd['下行标准差']=tss.semi_stdev(freq=250)#最大回撤dd['最大回撤']=tss.max_drawdown()#信息比率和特雷诺指数dd['信息比率']=tss.info_ratio(benchmark)dd['特雷纳指数']=tss.treynor_ratio(benchmark)#风险调整收益率dd['夏普比率']=tss.sharpe_ratio()dd['索提诺比率']=tss.sortino_ratio(freq=250)dd['calmar比率']=tss.calmar_ratio()df=pd.DataFrame(dd.values(),index=dd.keys()).round(4)return df
  1. 最后将分析逻辑进行封装,获取最后的分析数据矩阵。
def analysis():df=pd.DataFrame(index=performance('600110.SH').index)name = df_result.name.values[:]code = df_result.ts_code.values[:]stocks = dict(zip(name,code))for name,code in stocks.items():try:df[name] = performance(code).valuesexcept:continuereturn df
  1. 最终的输出的结果是这样的:

总结

  1. 从我们的最终结果来看,这13支股票的最大回撤相当的惊人。不难看出最近大A表现得非常难看,与大环境有很大的关系:欧洲打仗,能源暴涨,通货膨胀,国内疫情,最重磅的还有美国持续大力度加息。我们其实是可以通过对大盘的数据进行分析来规避一定的损失,在后期我希望我有机会可以跟大家分享我的理解和心得。
  2. 这次分析我们有拿未来数据来套娃,因为毕竟基本面分析是有一定的滞后性的,所以我们要计算我们有多大的概率从中筛选出好的标的。第三季度财报下个月已经快出炉了,后面的策略按照个人的理解可以稍微进行调整。我们也可以通过技术指标分析来进行筛选是否进行投资,如何投资,投资多少。
  3. 希望我的这个思路可以对大家有所启迪。

参考资料

  1. 【手把手教你】使用pyfinance进行证券收益分析
  2. 【手把手教你如何从Tushare库下载股票数据,并保存在硬盘当中,第一篇数据过滤】
  3. 我已经把基本面数据上传到了“下载”这里,有需要的朋友可以自行下载。

下篇

【基本面的量化分析与投资的回报可能 - 上篇】相关推荐

  1. 整合量化分析和基础研究——投资的艺术和科学

    作者:W.乔治.格雷戈 CHINAQIR编译整理 简介 利用量化分析和基础研究的投资过程一直都存在.许多基础研究使用量化方法帮助其筛选出一定量的可以重点考虑的公司.有一些量化方法使得分析师能够超越那些 ...

  2. python股票量化交易入门到实践_量化资料学习《Python与量化投资从基础到实战》+《量化交易之路用Python做股票量化分析》+《组织与管理研究的实证方法第2版》...

    我们需要利用Python进行数据分析的指南,有大量的关于数据处理分析的应用,重点学习如何高效地利用Python解决投资策略问题,推荐学习<Python与量化投资从基础到实战>等电子资料. ...

  3. 量化交易,量化分析推荐书单

    量化交易,量化分析推荐书单 <打开量化投资的黑箱> <主动投资组合管理:创造高收益并控制风险的量化投资方法> <威科夫操盘法> <证券分析> <宽 ...

  4. 当计算机遇上经济学:如何量化你的投资并获得第一桶金

    本文来自作者 ghost 在 GitChat 上分享 「当计算机遇上经济学:如何量化你的投资并获得第一桶金」,「阅读原文」查看交流实录. 「文末高能」 编辑 | 哈比 我很想把这篇文章作为一个可以实践 ...

  5. 自己做量化交易软件(1)通通量化分析环境安装使用

    自己做量化交易软件(1) 通通量化分析环境安装使用 (独狼荷蒲 QQ:2775205) 一.安装python Anaconda包含有超过720个关于科学,数据,工程和数据分析的Python和R包,如果 ...

  6. python量化分析岗位_量化金融有哪些职位可以选择?

    机会成本 之前写了自己如何从自动化领域转行到金融领域,后台很多朋友私信问自己的背景适不适合转行做量化,或者是如果想做量化需要做什么准备,虽然简单的回答了一些,但是由于平时工作和学习实在太忙,难免相对简 ...

  7. 股票量化分析工具QTYX使用攻略系列——双底形态选股

    前言 自从股票量化分析工具QTYX新增双底形态选股功能以来,大家的反响一直很热烈.很多星球会员利用这个功能帮助自己抓到了大牛股. 确实,双底形态是由市场力量形成的,我们只需顺势而为即可,特别是大周期. ...

  8. python量化分析系列之---5行代码实现1秒内获取一次所有股票的实时分笔数据

    python量化分析系列之---5行代码实现1秒内获取一次所有股票的实时分笔数据 最近工作太忙了,有一个星期没有更新文章了,本来这一期打算分享一些对龙虎榜数据的分析结果的,现在还没有把数据内的价值很好 ...

  9. 【统计分析】(task5) 金融量化分析与随机模拟(通过随机模拟估计看涨期权的报酬分布)

    内容总结 学习datawhale的gitmodel教程.小郭为了锁定价格波动风险,签订合约即买进看涨期权:提前给榴莲超市2块权利金,现在榴莲30元一块(期权的标的资产),下个月能用20元买到一块榴莲( ...

最新文章

  1. Vista下控件无法安装解决办法
  2. 使用soundcard在Python中操作声卡
  3. C# Winform编程ListBox之添加图标
  4. java中的abstract和interface差异
  5. #翻译NO.5# --- Spring Integration Framework
  6. log4j 调试时候配置
  7. 在vue中使用代理地址出现将代理拦截地址拼接到了接口请求中的情况
  8. 零基础、非计算机相关专业的如何转型程序员
  9. 2021年中国电动牙刷市场趋势报告、技术动态创新及2027年市场预测
  10. 计算机专业为什么要学线性代数,为什么要学线性代数
  11. VS2017社区版离线安装
  12. 基于RFM模型的Kmeans聚类算法实现
  13. 怎样写好Git的commit信息
  14. 计算机专业c语言挂科怎么办,大学最容易挂科的“学科排行榜”出炉,补考难度很高,你挂了吗?...
  15. 华为服务器2288h v3修复RAID,华为RH2288H V3服务器配置RAID(阵列卡LSI SAS3108)
  16. 宝宝防晒 夏日妈妈的日常工作
  17. 差分放大器低通滤波器设计
  18. ansys怎么批量输入点坐标_CAD大批量输入坐标点的方法
  19. 基因数据处理56之bwa运行paird-end(1千万条100bp的reads).md
  20. 【小5聊】TortoiseGit代码管理之hint: Updates were rejected because a pushed branch tip is behind its remote

热门文章

  1. 解读微软互联网新战略(下)
  2. 第三方支付原理与概述
  3. 7-2 统计英文字母和数字字符[2]
  4. Explain语法(精)
  5. Explain是什么?Explain能干嘛?
  6. Lottie动画(二)Lottie动画制作
  7. KOL新消费品牌营销知多少
  8. linux3.0字符设备驱动,linux字符设备驱动的 ioctl 幻数
  9. python爬虫爬取qq音乐热歌榜的歌曲到本地
  10. 2022.10.30 英语背诵