昨天是 2022 年工作日的第一天,同时也是国内证券市场的第一个交易日,大家在新的一年里有什么投资目标和期许呢?
在制定今年的投资目标和策略之前,不妨来回顾和分析一下 2021 年基金市场的行情和表现,在新的一年里不要当被割的韭菜,科学理性地进行投资活动,解锁赚钱的秘密、基金的密码吧!
非基金小白可直接跳过第一部分。
基金这个词相信大家都不陌生,那基金到底是什么?它又是如何进行分类的?从哪些渠道可以申购?
如果你有一笔钱,想要投资货币市场工具、债券、股票这些产品来获得收益,但是自己不够专业又没足够时间钻研,能拿出来的资金也不多。那这时你就可以找一个专业的机构寻求帮助,而这个专业机构就是基金管理公司。
基金管理公司里有专业的人士,帮助你操作资金、赚取收益。这些专业人士就是基金经理。他们赚了钱,可以获得一定的劳务费和佣金,剩下的收益就会按比例分配给购买基金的客户。
当然,我们这里是只针对公募基金来说的。
一般来说,从大类上,基金有公募和私募之分。公募基金就是向社会大众开放,谁都能买的基金。一般公募基金投资门槛很低,大部分基金一千元甚至几百元就可以投资了。
而私募基金,小白通常是买不到的。这些私募基金,首先投资门槛就很高,一般都要求投资者有数十万甚至上百万的资产规模。也就是我们说的合格投资者,如果没有这么多钱,就不合格,不具备投资资格。你可以简单理解为私募基金是给那些富人、高净值人士专门设计的基金。
而从细分方向上来说,根据不同的角度和不同的标准,基金可以有不同的分类方式。例如,根据基金单位是否可增加或赎回,可分为开放式基金和封闭式基金;根据组织形态的不同,可分为公司型基金和契约型基金;根据投资风险与收益的不同,可分为成长型、收入型和平衡型基金。而我们重点要介绍的是以下的分类:
根据投资方向和投资产品的不同,市面上较为常见的基金可分为:货币型基金、债券型基金、股票型基金、混合型基金和指数型基金等。
货币型基金就是以货币市场工具作为主要投资对象的基金。什么叫货币市场工具呢?简单来讲,就是类似于货币的金融产品,比如现金本身就算,除了现金,还有短期国债、回购、一年期以内的定期存款、一年期以内的中央银行票据等等。这些金融工具的特点就是期限很短,流动性特别好,随时可以变现,非常安全、可靠。余额宝就是典型的货币市场基金。
总体上来说,货币市场基金是低风险、且低利率的,我们的零钱、临时资金等,都特别适合投资货币市场基金,但它不适合长期投资,因为从长期来看,它的收益率很有限。
债券型基金就是以国债、金融债等固定收益类金融工具作为主要投资对象的基金。当一只基金,其投资组合中有 80%以上的仓位都投资于债券,那么这只基金就属于债券基金了。
债券基金的风险和收益相对股票基金来说会更稳健一些,其特点就是:低风险、低收益;收益稳健;费用较低。
股票型基金就是以权益类金融工具作为主要投资对象的基金。当一只基金,其投资组合中有 80%以上的仓位都投资于证券,那么这只基金就属于股票基金了。
正是由于股票型基金中投资的大部分对象为均股票,因此它本身也有着高风险高收益并存的特点。不过购买了股票基金能够有效分散投资风险,所以相对于直接投资股票来说,它的风险会有所降低,并且收益相比于直接投资股票市场,是可观的。因此,它很适合那些想要投资股票市场但是又缺乏专业投资知识的投资者。
混合型基金就是同时以货币市场、固定收益类、权益类金融工具作为主要投资对象的基金。根据股票、债券投资比例以及投资策略的不同,混合型基金又可以分为偏债型基金、偏股型基金、配置型基金等多种类型。
混合基金的特点就是,通过配置多种不同类别的资产,实现投资的多元化,以达到收益与风险之间互相平衡的目的。
指数型基金实质上是被动型股票基金的一种。被动型是投资理念的一种,是相对于主动型来说的。
股票指数,就是用来反映股票市场上各种股票价格的总体水平,以及他们变动情况的指标。比如上证 50 指数,就是从上海证券交易所的所有股票中,挑选了 50 只具有代表性的股票,用其价格变动的平价情况编制成的价格指数。对主动型投资来说,基金经理的目标就是以上证 50 指数作为基准,在一段时间内跑赢这个指数,从而获得更多超额收益;对被动型投资来说,基金经理的目标就是以上证 50 指数作为基准,将其以相近的权重加入投资组合中,获得跟指数基本一致的收益。
除了以上基金分类外,还有一种特殊的基金,叫做 FOF,也就是基金中的基金。FOF型基金就是以基金作为主要投资对象的基金。也就是说,这种基金的经理,对市场上的各类基金进行筛选,选择一些不错的基金,来进行投资。
FOF基金的风险性相对更小,对于刚入门的小白来说,面对市场上成千上万的基金,个人挑选的难度和风险都不低,而 FOF 实际上就是基金经理帮助投资者一次买“一篮子基金”,通过专家的二次基金筛选,有效降低风险。
上面是不同类型基金的风险和收益程度分布图,投资者要根据自身的能力和投资目的来选择最适合自己的基金类型。
在基金成立后购买基金的行为就叫申购。不同类型的基金,申购费率也不同。基金的申购费率由高到低为:股票型、混合型、指数型、债券型、货币型。具体的数值如下:
股票型(2%~1.5%)≥混合型(2%~1.5%)>指数型(1%~1.5%)>债券型(0.5%~1%)>货币型(约 0%)
申购基金有 4 个渠道,分别是:银行、证券公司、基金公司、第三方基金代销平台。银行是性价比最低的,不仅产品少,而且申购费率很高;证券公司和基金公司的产品都比较少;第三方基金代销平台不仅产品数量多,而且申购费率比较低,大部分都是 1 折。
这次分析的基金数据来源于“蛋卷基金”,其页面是通过 Ajax 来异步传输数据的,有专门的数据接口,需要进行分析。
另外,这次使用 pyecharts 进行数据可视化输出,使用之前需要安装其 Python 库,并进行相应的参数设置。
通过浏览器的开发者工具,能抓取到基金列表翻页所提交的 URL:
对其 URL 中的参数进行分析:
https://danjuanapp.com/djapi/v3/filter/fund?type=1&order_by=1m&size=20&page=2
参数分析如下:
基金类型和时间段参数字典:
# 基金类型
fund_type = {"股票型": 1, "混合型": 3, "债券型": 2, "货币型": 4, "指数型": 5, "FOF型": 6, "QDII型": 11}
# 统计时间
fund_time = {'近一周': '1w', '近一月': '1m', '近三月': '3m', '近六月': '6m', '近一年': '1y', '近两年': '2y', '近三年': '3y', '近五年': '5y'}
查看返回的报文内容,并进行分析:
返回的报文结果为 json 格式,因此需要引入 json 模块对爬取到的数据进行处理。
其他交易净值、基金规模、基金持仓等等信息的分析方法类似。
这次使用的是 pyecharts 数据可视化工具中的饼图和柱状图,配置其中的相关参数:
# 绘制饼图
def pie(name, value, savetitle, title):
c = (
# 初始化配置项,内部可设置颜色
Pie(
init_opts=opts.InitOpts(
# 背景颜色
bg_color="#2c343c"
)
)
.add(
# 系列名称
series_name="基金涨跌幅",
# 系列数据项,格式为[(key1,value1),(key2,value2)]
data_pair=[list(z) for z in zip(name, value)],
# 通过半径区分数据大小
rosetype="radius",
# 饼图的半径,设置成默认百分比,相对于容器高宽中较小的一项的一半
radius="55%",
# 饼图的圆心,第一项是相对于容器的宽度,第二项是相对于容器的高度
center=["50%", "50%"],
# 标签配置项
label_opts=opts.LabelOpts(is_show=False),
)
# 全局设置
.set_global_opts(
# 设置标题
title_opts=opts.TitleOpts(
# 名字
title="" + str(title),
subtitle='hugowong绘制,关注公众号:数人之道',
# 组件距离容器左侧的位置
pos_left="center",
# 组件距离容器上方的像素值
pos_top="20",
# 设置标题颜色
title_textstyle_opts=opts.TextStyleOpts(color="#ffffff"),
),
# 图例配置项参数,是否显示图里组件
legend_opts=opts.LegendOpts(is_show=False),
)
# 系列设置
.set_series_opts(
# 设置提示
tooltip_opts=opts.TooltipOpts(
trigger="item",
# 显示格式
formatter="{a} <br/>{b}: {c}% (占{d}%)"
),
# 设置标签颜色
label_opts=opts.LabelOpts(
color="rgba(255, 255, 255, 0.3)",
# 显示格式
formatter="{b}: {c}%"
),
)
.render(str(savetitle) + ".html")
)
对应不同的分析结果,需要使用不同的参数配置,其他配置详见完整代码(关注公众号『数人之道』,回复 2021基金 获取)。
下面按照分析需求,对基金数据进行爬取、解析、处理、可视化、分析。
爬取各类型基金近一年收益率前 10 名的数据,提取返回的 json 数据中的基金名称及收益率信息,将结果用饼图的形式可视化输出。
【代码】
# 各类基金指定时间段收益率分析
def fund_analyze1():
for key in fund_type:
# 爬取各类基金近一年数据(各取前10名)
res = requests.get(url=url, headers=headers)
res.encoding = "utf-8"
# 解析爬取数据
fund = json.loads(res.text)
fund = fund["data"]["items"]
name = []
value = []
# 提取基金名称及对应收益率信息
for i in range(0, len(fund)):
name.append(fund[i]["fd_name"])
value.append(fund[i]["yield"])
# 数据可视化输出(饼图)
pie(name, value, str(key) + "基金2021年收益前10名", "[" + str(key) + "]基金2021年收益前10名")
【结果】
【分析】
股票及指数型基金的第一名均遥遥领先,混合及QDII型基金的前十名收益率比较接近(标准差较小),债券型基金的前十名表现十分亮眼。
爬取各类型基金近一年收益率前 1000 名的数据,对收益率在不同分组区间的基金个数进行统计,分析各类型基金的收益率分布情况,将统计结果用柱状图的形式可视化输出。
【代码】
# 各类基金指定时间段收益率分布分析
def fund_analyze2():
for key in fund_type:
# 爬取各类基金近一年数据(各1000个)
res = requests.get(url=url, headers=headers)
res.encoding = "utf-8"
# 解析爬取数据
fund = json.loads(res.text)
fund = fund["data"]["items"]
name = []
value = []
# 提取基金名称及对应收益率信息
for i in range(0, len(fund)):
name.append(fund[i]["fd_name"])
try:
value.append(fund[i]["yield"])
except:
value.append(0)
# 创建数据表,并转换收益率类型为 float,保留四位小数
tb_fund = pd.DataFrame({"fund_name": name, "yield": value})
tb_fund["yield"] = round(tb_fund["yield"].astype(float), 4)
# 对各类基金的收益率数据进行自动分箱,并统计数量
count_yield = tb_fund["yield"].value_counts(bins=15).sort_index(ascending=True).to_frame()
count_yield.columns = ["count_num"]
name = list(count_yield.index.to_tuples())
value = count_yield["count_num"].to_list()
# 数据可视化输出
bars_non_slider2(name, value, str(key), str(key) + "基金收益率分布", "[" + str(key) + "]基金收益率分布情况")
【结果】
【分析】
股票型、指数型、QDII型基金大多数都是亏损状态,且亏得多的也不在少数,同时也有少数收益十分的高,可见这几种基金的高风险及高收益共存的特点。货币型基金稳打稳扎,但收益较少。债券型及 FOF 型基金在平稳的表现中也有少数超常发挥的存在。混合型基金的表现最为优异,没有出现亏损的基金,最低收益也有 11%以上,且不乏高收益的存在。
这几种类型的基金中只有混合型、债券型、货币型的基金没有出现亏损,债券和货币基金是意料之中,而混合型基金也有这样亮眼的成绩确实有点意料之外。
爬取各类型基金近一年收益率排名第一的基金数据,获取其在各个时间段的收益涨跌幅情况,分析优异基金各个阶段的表现,将结果用多系列柱状图的形式可视化输出。
【代码】
# 各类排名第一基金不同时间段涨跌幅分析
def fund_analyze3():
name = ['近一周', '近一月', '近三月', '近六月', '近一年', '近两年', '近三年', '近五年']
fund_value = {}
for key in fund_type:
# 爬取各类基金近一年数据
res = requests.get(url=url, headers=headers)
res.encoding = "utf-8"
fund = json.loads(res.text)
# 获取各类排名第一的基金代号
first_fd_code = fund["data"]["items"][0]["fd_code"]
# 爬取排名第一的基金各个时间段的涨跌幅情况
res = requests.get(url=f_url, headers=headers)
res.encoding = "utf-8"
fund = json.loads(res.text)
fund = fund["data"]
f_values = []
# 为避免值缺失的情况,加上异常处理;并转换收益率为 float 型,取四位小数
# 近一周
try:
f_values.append('%.4f' % float(fund["nav_grl1w"]))
except:
f_values.append(0)
# 近一月
try:
f_values.append('%.4f' % float(fund["nav_grl1m"]))
except:
f_values.append(0)
# 近三月
try:
f_values.append('%.4f' % float(fund["nav_grl3m"]))
except:
f_values.append(0)
# 近六月
try:
f_values.append('%.4f' % float(fund["nav_grl6m"]))
except:
f_values.append(0)
# 近一年
try:
f_values.append('%.4f' % float(fund["nav_grl1y"]))
except:
f_values.append(0)
# 近两年
try:
f_values.append('%.4f' % float(fund["nav_grl2y"]))
except:
f_values.append(0)
# 近三年
try:
f_values.append('%.4f' % float(fund["nav_grl3y"]))
except:
f_values.append(0)
# 近五年
try:
f_values.append('%.4f' % float(fund["nav_grl5y"]))
except:
f_values.append(0)
# 在字典中添加
fund_value[key] = f_values
# 数据可视化输出(柱状图)
bars(name, fund_value, "各类第一基金不同时段涨跌幅", "各类第一基金阶段涨跌幅")
【结果】
【分析】
各类型基金的第一名最近三个月的表现都平平,甚至有回落的迹象。股票、指数及混合型基金的第一名,近几年来的收益涨幅都相当可观。
爬取各类型基金近一年收益率排名第一的基金数据,获取其在近 60 个交易日的历史净值(单位价值)数据,分析优异基金的历史波动情况,将结果用区域拉伸缩放的柱状图的形式可视化输出。
【代码】
# 各类排名第一基金近60个交易日净值分析
def fund_analyze4():
for key in fund_type:
# 爬取各类基金近一年数据
res = requests.get(url=url, headers=headers)
res.encoding = "utf-8"
fund = json.loads(res.text)
# 获取各类排名第一的基金代号
first_fd_code = fund["data"]["items"][0]["fd_code"]
# 获取各类排名第一基金近60个交易日的净值
res = requests.get(url=f_url, headers=headers)
res.encoding = "utf-8"
fund = json.loads(res.text)
fund = fund["data"]["items"]
name = []
value = []
for j in range(0, len(fund)):
name.append(fund[j]["date"])
value.append(fund[j]["nav"])
# 数据可视化输出(带拉伸的柱状图)
bars_slider(name, value, str(key), str(key) + "基金近60个交易日净值", "[" + str(key) + "]基金近60个交易日净值")
【结果】
【分析】
股票型基金第一名近 60 个交易日稳中带升;混合型基金第一名近 60 个交易日稳中带升、近期回落、偶有波折;债券型基金第一名近 60 个交易日有一段波峰,但近期回落明显;指数型基金第一名近 60 个交易日后期显得吃力;QDII型基金第一名近 60 个交易日爬升后劲不足。
爬取股票型及混合型基金近一年收益率排名前 50 的基金数据,获取每只基金的前十大持仓股名称及对应份额进行汇总统计,挑选出股票型及混合型基金各自的前 20 名持仓股票,分析基金最为青睐的股票,将结果用柱状图的形式可视化输出。
【代码】
# 股票型及混合型基金重仓股票分析
def fund_analyze5():
for key in fund_type:
# 爬取股票型及混合型基金近一年数据(各取前50名)
if str(fund_type[key]) == '2':
break
res = requests.get(url=url, headers=headers)
res.encoding = "utf-8"
fund = json.loads(res.text)
fund = fund["data"]["items"]
fd_code = []
stock_name = []
percent = []
# 提取基金代号
for i in range(0, len(fund)):
fd_code.append(fund[i]["fd_code"])
# 获取基金对应的持仓股名称及份额
for j in range(0, len(fd_code)):
res = requests.get(url=f_url, headers=headers)
res.encoding = "utf-8"
stock = json.loads(res.text)
stock = stock["data"]["stock_list"]
for k in range(0, len(stock)):
stock_name.append(stock[k]["name"])
percent.append(stock[k]["percent"])
# 设置每个基金请求间隔时间
time.sleep(0.5)
# 创建数据表
tb_stocks = pd.DataFrame({"stock_name": stock_name, "hold_percent": percent})
# 汇总持仓份额
sum_stocks = tb_stocks.groupby("stock_name", as_index=False).sum()
# 按份额从高到低排序,并将份额转换格式后保留两位小数
sum_stocks = sum_stocks.sort_values("hold_percent", ascending=False)
sum_stocks["hold_percent"] = round(sum_stocks["hold_percent"].astype(float), 2)
# 选取前20大持仓
name = sum_stocks["stock_name"].head(20).to_list()
value = sum_stocks["hold_percent"].head(20).to_list()
# 数据可视化输出
bars_non_slider(name, value, str(key), str(key) + "基金前20大持仓股票", "[" + str(key) + "]基金前20大持仓股票")
【结果】
【分析】
股票型基金中,最受青睐的明星股票是“宁德时代”,其余前五位分别是天齐锂业、赣锋锂业、杉杉股份、华友钴业。股票型基金重仓的前五位中有四个都是新能源材料行业的企业。
混合型基金中,最受青睐的明星股票同样是“宁德时代”,其余前五位分别是赛轮轮胎、天合光能、阳光电源、天齐锂业。混合型基金重仓的前五位中同样有四个都是新能源材料行业的企业,且有两个持仓跟股票型基金是重合的。
看来投资者和基金经理一致看多新能源材料行业。
鉴于时间和精力有限,这次对爬取的基金数据只做了部分视角的分析,大家可以自行从其他不同的角度进行分析,挖掘出有价值的信息。例如,资产规模情况、新基金与老基金收益对比、明星基金经理及其管理基金分析等等。
最后提醒一句:投资有风险,理财需谨慎!本文不构成任何投资建议!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。