股权激励研报复现兼回测结果

半只招财猫 2023-8-2 275

股权激励研报复现

报告可看附件 股权激励计划指的是上市公司以本公司股票为标的,对其董事、高级管理人员或其他 核心员工进行的长期性激励计划。股权激励一般是附带条件的激励,被激励对象须完成特 定的目标才可行权,这些条件通常与公司的经营业绩挂钩。因此股权激励可以起到激发员 工的主人翁意识,促进企业与员工共同成长、从而帮助企业实现稳定发展的目标。

数据获取

股权激励的数据是通过同花顺问财获取到相关股权激励的信息,截图如下:

最终借助爬虫以及同花顺的api获取到20180101-20230720之间时间段的全部股权激励相关信息,主要的字段如下:

事件驱动统计信息回测

我们统计一下在发布股权激励公告之后,股价的涨跌幅度

计算方式就是计算发布股权激励公告之后,在指定时间段内的涨跌幅变化

可以看到,在发布股权激励公告后,股价的涨跌幅的平均值一般都为正,说明股权激励对于股价的上升是一个正反馈作用。

代码如下:

def calculate_price_change_after_announcement(stock_price_data, announcement_data):
    """
    计算公司发布股权激励公告后股价的涨跌幅

    参数:
    - stock_price_data: 股价数据集,包含日期和股价列
    - announcement_data: 股权激励公告时间数据集,包含日期列

    返回值:
    - 涨跌幅数据集,包含日期和涨跌幅列
    """
    # print(ochlv.head(5))
    # print(announcement_data.head(5))
    
    # 统一日期格式
    stock_price_data['交易日期'] = pd.to_datetime(stock_price_data['交易日期'])
    announcement_data['股权激励首次公告日'] = pd.to_datetime(announcement_data['股权激励首次公告日'], format='%Y%m%d')
    # 对announcement_data进行筛选,只保留需要的两列数据,即股票代码和发布公告日期。
    announcement_data = announcement_data[['股票代码', '股权激励首次公告日']].drop_duplicates()
    #合并两个数据集,根据股票代码和日期进行合并
    merged_data = pd.merge(stock_price_data, announcement_data, left_on=['股票代码', '交易日期'], right_on=['股票代码', '股权激励首次公告日'], how='left')
    # print(merged_data.head(5))
    # 剔除没有公告日期的数据
    merged_data = merged_data.dropna(subset=["股权激励首次公告日"])
    
    average_change_5 = merged_data['后五交易日涨跌幅'].mean()
    average_change_10 = merged_data['后十交易日涨跌幅'].mean()
    average_change_20 = merged_data['后二十交易日涨跌幅'].mean()
    average_change_40 = merged_data['后四十交易日涨跌幅'].mean()
    average_change_80 = merged_data['后八十交易日涨跌幅'].mean()
    
    print("发布股权激励公告后5交易日涨跌幅变化", average_change_5)
    print("发布股权激励公告后10交易日涨跌幅变化", average_change_10)
    print("发布股权激励公告后20交易日涨跌幅变化", average_change_20)
    print("发布股权激励公告后40交易日涨跌幅变化", average_change_40)
    print("发布股权激励公告后80交易日涨跌幅变化", average_change_80)
    
    merged_data.to_csv('merged_data.csv',index=False,encoding='utf_8_sig')   

那么股权激励总数占当时总股本比例这个属性有无影响呢?

按照常理而言,股权激励总数占据当时总股本的比例越高说明股权激励的份额越多,那么应该对于股价涨跌幅的正面效果越好

我们可视化 股权激励总数占当时总股本比例这一列与各个区间的涨跌幅之间的图片如下,可以看到大多数公司的股权激励都普遍在百分之3以内,股权激励总数占当时总股本比例越高并不代表这支股票在之后涨的越厉害

代码如下:

def analyze_relationship(stock_price_data, announcement_data):
    """
    计算公司发布股权激励公告中激励总数占当时总股本比例与之后后股价的涨跌幅之间的关系

    参数:
    - stock_price_data: 股价数据集,包含日期和股价列
    - announcement_data: 股权激励公告时间数据集,包含日期列

    返回值:
        None
    """
        # 统一日期格式
    stock_price_data['交易日期'] = pd.to_datetime(stock_price_data['交易日期'])
    announcement_data['股权激励首次公告日'] = pd.to_datetime(announcement_data['股权激励首次公告日'], format='%Y%m%d')
    # 对announcement_data进行筛选,只保留需要的三列数据,即股票代码和发布公告日期,激励总数占当时总股本比例。
    announcement_data = announcement_data[['股票代码', '股权激励首次公告日','激励总数占当时总股本比例']].drop_duplicates()
    #合并两个数据集,根据股票代码和日期进行合并
    merged_data = pd.merge(stock_price_data, announcement_data, left_on=['股票代码', '交易日期'], right_on=['股票代码', '股权激励首次

本主题为课程学员专享,成为股票量化投资课程学员后可免费阅读

成为学员
最新回复 ( 0条评论 )


官方微信
码力十足学量化
Powered by Xiuno BBS 4.0.7

官方微信