python量化交易进阶,如何巧用股息率做出选股决策?

量化交易,首要解决的问题是如何获取交易行情数据。我们之前的文章也已经讲解了,如何获取沪深两市所有股票的行情以及股票基本面等信息。在获取的行情数据以及股票基本面后,我们就可以使用这些数据进行数据进行正确的建模并根据建模以及计算结果,做出相应的量化投资决策。

从本篇文章开始,我会开始跟大家讲解,如何用获取的数据来进行量化分析,并且结合实盘策略做出选股以及正确的买卖决策。我会从简单的开始入手,一步步教大家如何从零开始进入量化交易。

我们本篇文章先来看下,如何用股息率做出选股决策,我们会结合之前学过的知识以及一些很有用的数据来帮助我们进行数据的分析。


股息率

首先,我们先来了解下股息率这个概念。

很多做长线投资的朋友应该都知道股息率这个东西,股息率是一个做价值的比较重要的参考指标。我们先看下它的定义:

股息率是股息与股票价格之间的比率。在投资实践中,股息率是衡量企业是否具有投资价值的重要标尺之一。


python量化交易进阶,如何巧用股息率做出选股决策?

股利收益率计算公式

公式中:

D——股息;

Po——股票买入价。

股息率是挑选长线投资价值股票的重要参考标准,如果连续多年年度股息率超过1年期银行存款利率,则这支股票基本可以视为收益型股票,股息率越高越吸引人。股息率也是挑选其他类型股票的参考标准之一。决定股息率高低的不仅是股利和股利发放率的高低,还要视股价来定。比如我们现在有两只股票,A股价为10元,B股价为20元,两家公司去年发放红利每股0.5元股利,如果我们不考虑其他操盘因素比如大资金做盘等,只考虑股票本身价值投资方面则A公司5%的股息率显然要比B公司2.5%诱人。

股息率计算方式

我们根据前面所学过的知识,使用tushare依赖,获取两市近几年所有的股票的股息率。并计算得出结果,根据结果由高到底排序,选出最优的股息率。

首先,我们来看下ts获取股息率的接口数据信息:

<code>import tushare as ts 

help(ts.profit_data)/<code>

控制台输出:

<code>profit_data(year=2017, top=25, retry_count=3, pause=0.001)
获取分配预案数据
Parameters
--------
year:年份
top:取最新n条数据,默认取最近公布的25条
retry_count : int, 默认 3
如遇网络等问题重复执行的次数
pause : int, 默认 0
重复请求数据过程中暂停的秒数,防止请求间隔时间太短出现的问题

returns
-------
DataFrame
code:股票代码
name:股票名称
year:分配年份
report_date:公布日期
divi:分红金额(每10股)
shares:转增和送股数(每10股)
/<code>

可以看到divi是我们想要的数据,而且是按10股来算的,所以我们的计算方式是:

<code>股息率 = divi ÷(当前股价*10*100)/<code>

那么下面我们开始获取数据并分析计算两市所有股票的股息率。

量化分析股息率

现在是2020年,我们只能计算2020年以前的股息率,因为股息率是统计一整年的。我们计算从2016年-2018年的所有股票的股息率。本来jeevan老师想计算2019年的股息率,但是发现可能因为疫情影响关系,两市大部分上市公司公司到现在年报还没出来,没有分红的相关数据,所以现在计算2019年的股息率排序不准确,所以,我们先分析2016-2018的股息率。

获取数据近3年的分红数据,分别并存入csv文件,并将3个文件整理,通过股票代码关联,放入同一个csv文件中。

<code>def load_to_csv_profit2016_2018():
df_profit2016 = ts.profit_data(year=2016, top=3000)
df_profit2017 = ts.profit_data(year=2017, top=3000)
df_profit2018 = ts.profit_data(year=2018, top=3000)

df_profit2016.to_csv('profit2016.csv')
df_profit2017.to_csv('profit2017.csv')
df_profit2018.to_csv('profit2018.csv')

df_profit1 = pd.merge(df_profit2017, df_profit2018, how='outer', on='code', suffixes=[2016, ""])
df_profit = pd.merge(df_profit1, df_profit2018, how='outer', on='code', suffixes=[2017, 2018])

df_profit.to_csv('profit2016-2018.csv')
return df_profit/<code>

获取当日的股票数据,并存入csv文件。

<code>def load_to_csv_profit2016_2018():
df_profit2016 = ts.profit_data(year=2016, top=3000)
df_profit2017 = ts.profit_data(year=2017, top=3000)
df_profit2018 = ts.profit_data(year=2018, top=3000)

df_profit2016.to_csv('profit2016.csv')
df_profit2017.to_csv('profit2017.csv')

df_profit2018.to_csv('profit2018.csv')

df_profit1 = pd.merge(df_profit2017, df_profit2018, how='outer', on='code', suffixes=[2016, ""])
df_profit = pd.merge(df_profit1, df_profit2018, how='outer', on='code', suffixes=[2017, 2018])

df_profit.to_csv('profit2016-2018.csv')
return df_profit
/<code>

计算股息率:

<code>def result_csv():
df_today_all = pd.read_csv('get_today_all1.csv')
df_profit = pd.read_csv('profit2016-2018.csv')
result = pd.merge(df_today_all, df_profit, on='code')

result['2016_profit'] = result['divi2016'] / result['settlement'] * 100 / 10
result['2017_profit'] = result['divi2017'] / result['settlement'] * 100 / 10
result['2018_profit'] = result['divi2018'] / result['settlement'] * 100 / 10
result = result.sort_values('2018_profit', ascending=False)

result.to_csv(FILE_RESULT)/<code>

执行程序,按顺序执行上面方法:

<code>if __name__ == "__main__":
print("result_csv:update result.csv")
load_to_csv_today()
load_to_csv_profit2016_2018()
result_csv()
else:
print("result.py is being imported into another module")/<code>

开始执行程序,等待程序执行完成,这个过程要很久,因为我们获取连续3年的两市数据3000多只股票,数据量大,要慢慢等待,大概5分钟左右。

python量化交易进阶,如何巧用股息率做出选股决策?

控制台输出,等待数据分析完成

结果分析

程序执行完成后,总共输出如下文件:


python量化交易进阶,如何巧用股息率做出选股决策?

输出文件列表

文件描述如下:

  • profit2016.csv,profit2017.csv,profit2018csv,profit2016-2018.csv,前三个文件是每年的分红数据。第4个是汇总文件
  • get_today_all1.csv是获取今日的市场行情,主要是获取实盘价格 settlement
  • result.csv最后的计算结果,里面的数据已经按照2018年的股息率进行计算,从高到低排序

我们打开最后的计算结果:

python量化交易进阶,如何巧用股息率做出选股决策?

可以看到第一名的兰州民百(600738)是2018年的股息率最高,高达28%多。前十分别是:

  1. 兰州民百
  2. 三钢闽光
  3. 方大特钢
  4. 华联控股
  5. 英力特
  6. 东易日盛
  7. 华宝股份
  8. 马钢股份
  9. 柳钢股份
  10. 泰嘉股份

我们可以简单分析,看到钢铁行业的股息率都比较高。

清洗数据简介

其实,如果细心的投资者发现,我们的result.csv文件中,有些同一个股票是包含多条记录的:

比如下面这个股:卓郎智能


python量化交易进阶,如何巧用股息率做出选股决策?

多条数据


为什么会这样呢?

其实,我们打开profit2007.csv可以看到,这只股票分别于2018/4/21,2017/8/4

进行了分红,产生了两条数据。这边的日期是公告的日期哦,并不是执行分红的日期哦,所以跟一些软件商上看到的日期不一样,但是分红的数值是一样的。

python量化交易进阶,如何巧用股息率做出选股决策?

一年两次分红

我们这次处理的数据只考虑了一年一次分红的情况,所以并没有进行数据的预处理。这样计算的结果会有一定的误差。

关于数据预处理,我们后面会再详细介绍。

后语

我们在学习前几章知识时,很多朋友都说,我们股票的基本面数据都可以从同花顺通达信等软件上看到,为什么要学这个接口获取数据知识?

那是因为有些朋友可能还没理解量化交易的本质。我们获取的数据,应该都是可以被量化的,最好是通过接口调用批量进行计算的。比如我们这篇文章讲的股息率,你可以从其他软件上直接看到吗?估计比较少有软件直接计算出股息率的,一般只是显示分红情况。即使有的话,也比较少有将所有的股票的股息率计算并排序。

这时,我们通过接口获取数据进行分析就显得很重要,我们可以挖掘出一些潜在的高价值数据信息,这样非常有利于我们做出选股决策。


好啦,本篇文章就讲到这啦。欢迎关注【大操手量化投资】,跟jeevan老师一起学习更多的量化交易知识,早日实现财富自由之路。


分享到:


相關文章: