在DAI SQL中利用ASOF JOIN计算股息率
由hxgre创建,最终由hxgre 被浏览 104 用户
一、股息率定义
股息率是指公司每年支付的股息与其股票当前市场价格的比率。它是一个重要的投资指标,帮助投资者评估股票的收入潜力,股息率越高,通常表示投资者可以从该股票中获得更多的被动收入。计算公式为:
本文更多介绍如何使用 ASOF JOIN 操作处理日频数据和非日频数据,因此,我们简化股息率的公式,假设分子分母都使用总股本,则上述公式可以简化如下:
二、数据源
1. 分红数据
平台提供了股票的分红数据,详细路径为:数据平台 → 股票数据 → 公司信息 → 分红信息(cn_stock_dividend),网址链接为:https://bigquant.com/data/datasources/cn_stock_dividend。
我们读取上表的数据如下,可以看出,这张表里面的数据并非日频数据,而是记录性质数据。换言之,当某家公司在某日发布分红公告,我们会记录一条相关信息,同时 date 列 = ex_date 列(即除权除息日)。
2. 收盘价数据
这里,我们采用的真实价格,详细路径为:数据平台 → 股票数据 → 股票行情 → 未复权日行情(cn_stock_real_bar1d),网址链接为:https://bigquant.com/data/datasources/cn_stock_real_bar1d。
数据示例如下:
三、ASOF JOIN 操作说明
当获取到 cn_stock_real_bar1d 和 cn_stock_dividend两种表数据进行数据处理时,我们发现了一个不友好的问题,cn_stock_dividend数据是非日频的,如果和日频数据cn_stock_real_bar1d进行 JOIN 的话,会存在很多nan值,在sql里面很难对这种数据进行处理。那么,在 DAI SQL 中如何处理 日频数据 和 非日频数据 呢?这里,我们提供了 ASOF JOIN 操作。
ASOF JOIN 是一种特殊的连接操作,主要用于处理时间序列数据。它的特点是将两个表根据时间戳进行连接,但并不要求两个表中的时间戳完全匹配,而是找到最接近的时间戳。简单来说,ASOF JOIN 会在右表中查找与左表中每一行的时间戳最接近的行。
==如上述代码所示,cn_stock_real_bar1d 作为左表去联接右表 cn_stock_dividend,在联接时,是按照instrument进行匹配的,但同时,左表的每个date都会去右表中找最近的一个date的数据进行匹配,并执行 cash_before_tax / close 计算 dividend_ratio(股息率)。==
这样,利用 ASOF JOIN 操作就能处理 日频数据 和 非日频数据 的联接了。可以看出,通过这种方式计算的股息率是比较正确的:
附录:代码
https://bigquant.com/codesharev3/ff0976ae-dc6f-489a-9f56-20e5b7ea9194
\