高管增持股价一定会上涨吗?【附Python代码】

发布于: 雪球转发:1回复:1喜欢:1

引言

股东增持和减持事件在A股上市公司中屡见不鲜,尤其是当个股涨幅较大时,大量个股出现股东减持套现的情况;而当市场经过深度调整,公司经营预期开始转好,股东觉得股价被市场低估时,往往会通过增持来提振股价。

从另一个角度看,股价上涨是资金推动的结果,作为交易者,密切关注市场资金的动向和资金驱动的关键因素有利于作出更理性的交易决策。市场资金可以分为产业资金、机构(大型基金)资金、游资和散户资金四大类。其中,机构资金如社保、保险、公募等大多流向大盘蓝筹被动投资为主;游资往往是短期概念炒作的推动者,对市场风向和信息最为敏感;散户更多的是跟风交易,不能主导行情却能加速趋势的形成与反转;产业资金投资者以大股东和高管为主,与产业和公司经营最为密切相关,相当于“知情”交易者,其资金动向(增减持)在一定程度上反映公司未来的价值变化。

换句话说,董监高(高管)和大股东对公司发展相对更清楚,其增持行为往往预示着当前股价被市场低估,而减持行为则代表股价被高估。因此,从理论上而言,高管和大股东增持的个股后期上涨的概率较大;相反,高管和大股东减持的个股后期下跌的概率较大。

当然,现实当中上市公司增减持股票的时候,股价的波动往往不是那么简单的对应关系。譬如,当公司股价持续下跌导致股东资产严重缩水时,大股东和高管也可能被迫选择增持股票来提振市场信心,而某些时候高管或大股东的减持行为影响不了概念板块和市场趋势对其股价的推动,出现股东越减持股价越涨的情况。

上述分析表明,高管增减持与股价的波动存在一定的相关关系,那么如何通过数据去揭示高管增/减持行为对股价未来波动的影响呢?本文基于tushare上的股东增减持数据,利用Python做一个简单的事件分析,通过统计手段分析高管增/减持行为对股价未来走势的影响。

数据处理

导入Python常用模块。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#使用seaborn背景色
plt.style.use('seaborn')
from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False

股东增减持数据来源于tushare pro的stk_holdertrade函数,本文将该数据保存为本地数据库并按交易日进行更新。下面数据库引用的代码为个人本地脚本文件,完整源码见Python金融量化知识星球,如需复现本文,可在公众号中回复‘20210818’或“股东持股数据”下载数据,将数据放在当前工作路径下,再使用pandas导入数据,即df=pd.read_csv('股东持股数据.csv')

from base import ts_pro,sql_engine
pro=ts_pro()
engine = sql_engine()

#更新数据库
from holderdata import update_holderdata
update_holderdata()

#数据库已更新至20210817日数据

sql="select * from holder_data"
df=pd.read_sql(sql,engine)

df.tail()


其中,holder_type变量为股东类型,G代表高管,P为个人,C是公司股东;in_de变量中, IN代表增持,DE代表减持。

dd=df.copy('deep')
dd.index=pd.to_datetime(dd.ann_date)
dd.head()

高管增持与股价收益

首先,统计一下2010年2021年(2021年只有7个多月)高管增减持的总体情况。从绝对数量来看,2015年和2018年股东增持次数最多,我们注意到2015年(上半年)是一波大牛市(大部分中小股出现了翻倍行情),而2018年则是熊市(大部分中小股腰斩),可见行情大好和行情低迷都能引致高管的增持行为,前者可能是出于对未来的过于乐观,后者更多的是为提振市场信心,当然这里没有排除上市公司随着时间逐年增加的影响。

def plot_data(data,in_de):
    #将索引转为年份
    try:
        data.index=data.index.strftime('%Y')
    except:
        data=data
    data.plot.bar(figsize=(8,4))
    plt.xticks(rotation=0)
    plt.title('历年'+in_de+'总体情况',size=15)
    plt.ylabel(in_de+'次数')
    plt.xlabel('年份')
    plt.show()

#历年个股增持次数统计
count_in=dd[dd.in_de=='IN'].ts_code.resample('Y').count()
plot_data(count_in,'增持')

数据显示,2018-2020,高管减持数量逐年大幅增加,这可能与近三年市场扩容(IPO增加)密切相关。为了更好的反映产业增减持行为与市场整体走势的关系,计算历年增持数量占全部增减持数量之比,可以一定程度上反映总体增减持行为与市场行情的关系。

count_de=dd[dd.in_de=='DE'].ts_code.resample('Y').count()
plot_data(count_de,'减持')


in_ratio=count_in/(count_in+count_de)
plot_data(in_ratio,'增持占比')


从历年增持占比来看,整体市场行情向好时,高管更倾向于增持,当然高管增持行为与股价走势可能存在双向的影响关系。高管增持行为,被其他投资者观察到,资金跟随推动股价上涨;公司股价上涨,高管信心增加,看好未来业绩,不断增持。关于二者的影响机制感兴趣的可以借助更严谨的计量模型进行深入研究。下面以高管增持行为为例,考察高管增持后,一段时间内股价收益变动情况。

select_df=df[(df.holder_type=='G')&(df.in_de=='IN')]

select_df.head()


count_df=select_df[['ts_code','ann_date','change_ratio']].copy('deep')
count_df.index=pd.to_datetime(count_df.ann_date)
count_df.head()


从高管增持数据样本来看,增持比例均值只有0.11%,50分位数只有0.015%,最高为13.7%。当高管增持比例很低时,可以认为是象征性的增持行为,对个股后期走势影响不大。下面以0.02%的增持比例为阈值(接近中位数),考察增持比例高于0.02%对未来股价走势的影响。

count_df.describe().T


final_data=count_df[count_df.change_ratio>0.02]['ts_code'].drop_duplicates()
final_data.head()

ann_date
2010-01-29     002020.SZ
2010-03-08     002051.SZ
2010-05-12     600862.SH
2010-05-17     600423.SH
2010-05-25     002234.SZ
Name: ts_code, dtype: object

g_in_ratio=final_data.groupby(final_data.index.year).count()
plot_data(g_in_ratio,'高管增持')


获取个股前复权价格数据,以高管增持当日为事件基准窗口,分别考察持有30日、60日、90日、120日和250日后的平均收益情况。在计算持有期间个股收益时需要对样本数据进行循环判断,耗时较长,接近40分钟,编程基础较好的读者可以使用多线程完善代码。

#获取个股收益率
import tushare as ts
def cal_ret(start,code,n=60):
    dd=ts.pro_bar(ts_code=code,adj='qfq', start_date=start)
    dd.index=pd.to_datetime(dd.trade_date)
    dd=dd.sort_index()
    return dd.close.iloc[n]/dd.close[0]-1

#计算高管增持后个股收益率
def get_holder_ret(final_data,n=60):
    date_codes=list(zip(final_data.index.strftime('%Y%m%d'),

                           final_data.values))
    dates,codes,rets=[],[],[]
    for i in range(len(date_codes)):
        try:
            start=date_codes[i][0]
            code=date_codes[i][1]
            ret=cal_ret(start,code,n)
            dates.append(start)
            codes.append(code)
            rets.append(ret)
        except:
            continue
    df=pd.DataFrame()
    df['date']=dates
    df['code']=codes
    df['ret']=rets
    return df

from tqdm import tqdm
result_df={}
for n in tqdm([30,60,90,120,250]):
    result_df[str(n)]=get_holder_ret(final_data,n)

100%|███████████████████████| 5/5 [41:13<00:00, 494.68s/it]

ddf=pd.DataFrame(index=result_df['30'].describe().index)
for n in [30,60,90,120,250]:
    ddf[str(n)+'天']=result_df[str(n)].describe().values

ddf

结果显示,高管增持后,持有时间越长,平均收益越高,具体而言,持有250日平均收益为16%,持有30日平均收益为2.8%。当然持有时间越长,波动风险越大,当持有250日时,最差的情况下,可能亏损90%,最好的情况是涨幅740%,个股之间的内部差异较大。


结语

本文借助统计分析方法,利用股东增减持数据,分析了高管增减持行为对股价波动的影响。从统计的角度来看,高管增持行为一定程度上带来了正向的平均收益,当然,如果使用市场超额收益,结论可能更加严谨,因为公司股价的上涨可能来自市场整体的带动而非业绩或内在价值驱动。此外,有些高管的增持行为可能目光更长远,即他们看好公司三五年的发展前景,而非当下(一年以内),而本文的分析是基于中短期情况。本文对高管增持和股价波动的分析比较初浅,为读者留下很多可拓展的空间,比如高管减持、大股东的增减持对股价波动有什么影响?如何通过高管和大股东的增减持行为构建交易策略?甚至可以结合backtrader进行量化回测等等。

市场没有绝对的东西,哪怕理论上再完美也如此,交易更多的是一种资金博弈。因为我们不是要去追求特别严谨或特别精确的投资预测,而是去寻找能够提高你预判概率的关键因素或模式。

全部讨论

2022-04-16 09:14

看不懂,能用此法算一下300015,高管今年增持会有多大影响吗?