【基本面的量化分析与投资的回报可能 - 下篇】

11 篇文章 2 订阅
10 篇文章 1 订阅

基本面的量化分析与投资的回报 - 下篇前传

如何做出选择

假使我们筛选出来的候选人就是这13支股票,但是我们不确定应该如何做出选择。那我们简单地尝试一下将目标锁定在收益和波动这两个指标上来进行我们下面的工作。在这里插入图片描述

import pandas as pd
import numpy as np
import tushare as ts
from functools import reduce

token = '你的tushare密钥'
ts.set_token(token)
pro = ts.pro_api(token)

上代码

封装数据

  1. 首先我们封装一个获取股票的每日数据的函数。数据按照时间正序,只取交易日期trade_date和收盘价格close列。
def concat_df(code,start='2021-01-01',end=''):
    df_00 = ts.pro_bar(code,start_date=start,end_date=end,adj='qfq',freq='D')
    df_00= df_00.sort_values('trade_date', ascending=True)
    df_00 = df_00[['trade_date','close']]
    return df_00
  1. 将股票名称和代码进行一个打包,上篇的df_result就是我们的对象。将数据放入在一个list中。
name = df_result.name.values.tolist()
ticker = df_result.ts_code.values.tolist()
dfs = [concat_df(s) for s in ticker]

在这里插入图片描述

  1. 将list中的13段数据进行拼接,成为一个Dataframe。并按照交易日期列来对齐,使用reduce()函数来进行操作。不得不说代码原作者的功底是真的强。

解读一下这行代码:将13段数据进行左右拼接;以左①为起点,右①至右①②列列横向追加数据;用trade_date列来对齐;dfs为拆分对象;.iloc[:, 1:]取每列里所有行的数值,取从第一列开始以后的所有数值(也就是说我们舍去了第一列的交易日期)。

data = reduce(lambda left, right: pd.merge(left, right, on='trade_date'), dfs).iloc[:, 1:]

在这里插入图片描述

计算数据

  1. 下面我们来计算收益率和波动率。然后将数据年化,乘以252天。并打包成Dataframe。
returns = data.pct_change()
mean_daily_returns = returns.mean()
volatilities = returns.std()

combine = pd.DataFrame({'returns': mean_daily_returns * 252,
                       'volatility': volatilities * 252})

在这里插入图片描述

  1. 导入画图工具,matplotlib和seaborn。这里说明一下,我导入的是Noto字体,请按自己的情况来进行字体设置。中文输出很头疼!
import matplotlib.pyplot as mpl
from matplotlib import font_manager
%matplotlib inline
my_font = font_manager.FontProperties(fname="C:\\Users\\...\\Fonts\\NotoSansMonoCJKsc-Regular.otf")
# mpl.rcParams['font.sans-serif'] = ['SimHei']
# mpl.rcParams['axes.unicode_minus']=False
import seaborn as sns
sns.set()

画图分析

  1. 我们画一个收益率和波动率的回归图来看看这13个候选人的具体情况。X轴波动率,Y轴收益率。
g = sns.jointplot(data=combine, x="volatility", y="returns", kind="reg",height=7)

# name 我们已经在第2步打包好了,【i,1】是表内的波动率,【i,0】是表内的收益率
for i in range(combine.shape[0]):
    mpl.annotate(name[i], (combine.iloc[i,1], combine.iloc[i,0]), fontproperties=my_font)

mpl.text(10, -0.2, 'SELL', fontsize=40, fontproperties=my_font)
mpl.text(7, 1.25, 'BUY', fontsize=40, fontproperties=my_font)

mpl.show()

在这里插入图片描述

结论

从图表中我们可以清晰的知道这13个候选股票的情况,这样对于我们的投资会有一定的帮助。图中所示当前的状况在蓝线以下的候选股票还是要酌情考虑是否要购买,蓝线以上的股票相对来讲也存在超买的可能。我们需要再结合一些其它的分析来巩固我们的投资选择,譬如一些技术指标,和大盘目前的处境。希望这篇分析对大家有所帮助。

参考资料

  1. https://github.com/huseinzol05/Stock-Prediction-Models

上篇

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mike_Leigh

您的鼓励就是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值