用ChatGPT辅助投资之指数行业占比分析

少于 1 分钟阅读

联系我 这里


ChatGPT Web

做投资理财经常会关注很多新闻热点、很多数据、很多投资标的于是,很容易让人产生一些问题

  1. 这么多好行业或者概念怎么投资呢?总不能全买吧,选哪些ETF有比较好的覆盖面呢?
  2. 这些个ETF到底是概念ETF还是行业ETF?里面到底包含了哪些行业?会是挂羊头卖狗肉么?
  3. 天天基金上有所有基金的前十大持仓占比和行业占比,但行业占比只统计到一级行业,但怎么看更详细的呢?
  4. 中证指数官网包含了市场上很大一部分指数的编制说明,很详细,但行业占比只统计到二级行业,且只有前10大持仓,怎么看全部的呢?

很自然想到,只能靠自己动手来分析数据了。上面的问题总结起来就是一个问题:怎么统计一个指数成分股的行业分布。

先说说行业分类标准。股票市场的行业分类有好多标准,比如申万行业,万德行业分类、东财行业分类、证监会行业分类,自然,中证公司也有自己的行业分类,在分类标准这件事上,一家上市公司所属的一级行业和二级行业在各标准间一般不会有差别,在更细分的三级和四级行业有差别,也不影响我们的本来目标。所以,这里我就直接使用了中证公司的行业分类(下载地址)。其格式如下,包含了A股和港股的所有股票

image20230327090626998

再说说分析的过程。我这次主要是想知道“智能制造” “高端制造”到底是包含了什么?如果要说概念解释,百度一搜就搜到了这么一篇文章:一文读懂智能制造究竟是什么?,但跟我的目的,跟投资没什么关系。于是,我在天天基金里搜索“智能制造”关键词,搜到了16只基金,其中有一只就是“华宝中证智能制造主题”,于是我就知道他肯定是对标了某个中证的指数。

image20230327085934750

通过基金页面找到他是跟踪了“中证智能制造主题指数 (930850)”这个指数,于是去“中证智能制造主题指数 (930850)”的中证官网找到了他的基本数据,有历史点位,前5大和10大持仓,一级行业分布,和相关基金产品,在此页面也可以下载指数样本列表。(后续有经验了,就可以先来中证官网搜索一下关键词),930850指数的样本列表格式如下

image20230327090905687

那好,拿到了中证行业分类数据,也拿到了指数的成分,分析思路也很简单

  1. 以指数成分表里的E列(成分券代码)为索引去行业分类表的A列(证券代码)找对应,找到后,把他的四个级别分类数据拿过来
  2. 确定接下来用几级行业进行分类统计
  3. 对该列的行业分类进行分组归类加和,然后计算百分比

最后就是写代码的过程了

先把成品代码放在这里,下面详细解释怎么用ChatGPT来辅助编程

class Statistics:
    def industry_statistics(self, code: str, levels: list = [1]):
        """对指数的所属行业进行统计,并给出百分位占比排序

        code (str): 指数代码
        levels (list): 行业分类的级别,默认从1级开始
        """
        # 设置dataframe打印时的列对齐
        pd.set_option("display.max_columns", 1000)
        pd.set_option("display.width", 1000)
        pd.set_option("display.max_colwidth", 1000)
        pd.set_option("display.unicode.ambiguous_as_wide", True)  # 将模糊字符宽度设置为2
        pd.set_option("display.unicode.east_asian_width", True)  # 检查东亚字符宽度属性

        dataset_path = config.VAR_ROOT / "dataset"
        adf = pd.read_excel(dataset_path / "行业分类.xlsx")
        cdf = pd.read_excel(dataset_path / f"{code}cons.xls")
        left = cdf.iloc[:, [4, 5]]
        left.columns = ["code", "name"]
        right = adf.iloc[:, [0, 3, 5, 7, 9]]
        right.columns = ["code", "L1", "L2", "L3", "L4"]
        result = pd.merge(left, right, on="code", how="left")
        for level in levels:
            pct = 100 * result.groupby(f"L{level}").size() / len(left)
            pct_sorted = pct.sort_values(ascending=False)
            print(pct_sorted)
            print("-" * 20)

首先要把excel读到程序里当做表格来分析,问ChatGPT怎么写代码

image20230327091541982

然后,把指数成分表的第4、5两列提取出来作为一个新的表格,把行业分类表的第0, 3, 5, 7, 9列提取出来作为一个新表格,通过下面的答案举一反三很容易就推理出来怎么小改一下代码

image20230327093525676

image20230327092146487

现在要用股票代码去找映射关系了,

image20230327092112045

找好映射关系了,要做合并统计

image20230327092347043

统计得到了每个行业的百分比,那还要按照从高到低排序

image20230327100144513

最后发现,统计结果的输出没有对齐

image20230327092543122

image20230327094041440

通过上面的问题,ChatGPT已经能够将核心答案都告诉我了,但是怎么组织成一个完整的程序还是需要靠自己,所以,怎么叫做“ChatGPT辅助投资”呢,而且ChatGPT还只能“辅助编程”,需要程序员自己来调试,但这已经很提升效率了,问几个问题就把核心问题都解决掉了。

image20230327100312774

小结

  1. 做投资,非常重要和常见的需求就是做数据分析;
  2. ChatGPT可以在数据分析这件事上辅助编程,极大提升效率;