资讯动态

股票回购数据追踪分析:用Python构建回购信号筛选与效果评估系统 IG50免费开源股票数据API接口

发布时间:2026/8/25 12:01:46 来源:尧图企业网站定制
股票回购数据追踪分析用Python构建回购信号筛选与效果评估系统股票回购是上市公司用自有资金买回自家股票的行为理论上是利好信号。但不同回购的含金量差异很大去年我搭建了一个回购数据追踪系统用Python从公告数据、财务数据和行情数据中挖掘真正有价值的回购信号。本地数据引擎提供了构建回购分析所需的数据。财务指标数据在time/f10/fi/{dm}包含ROE、市盈率、净利润增长率等。历史K线在time/history/trade/{dm}/day用于分析回购前后的股价走势。持股变动数据在time/f10目录下包含股东增减持信息。股票列表在base/gplist。importjsonimportosimportpandasaspdimportnumpyasnpfromdatetimeimportdatetime,timedelta data_dirD:/ig50_datadefread_financial(dm):file_pathos.path.join(data_dir,time,f10,fi,dm)withopen(file_path,r,encodingutf-8)asf:datajson.load(f)dfpd.DataFrame(data)df.columns[dm,mc,jyrq,roe,eps,pe,pb,gm_zf,jlr_zf,zcfzl]df[jyrq]pd.to_datetime(df[jyrq])returndfdefread_kline(dm,periodday):file_pathos.path.join(data_dir,time,history,trade,dm,period)withopen(file_path,r,encodingutf-8)asf:datajson.load(f)dfpd.DataFrame(data)df.columns[dm,cjsj,cjjg,cjl,cje,zf]df[cjsj]pd.to_datetime(df[cjsj])returndfdefread_realtime(dm):file_pathos.path.join(data_dir,time,real,dm)withopen(file_path,r,encodingutf-8)asf:returnjson.load(f)defread_stock_list():file_pathos.path.join(data_dir,base,gplist)withopen(file_path,r,encodingutf-8)asf:datajson.load(f)dfpd.DataFrame(data)df.columns[dm,mc,dmHk,mcHk,isAH,isSH,isSZ]returndf字段方面dm是股票代码mc是股票名称jyrq是交易日期roe是净资产收益率eps是每股收益pe是市盈率pb是市净率gm_zf是营收增长率jlr_zf是净利润增长率zcfzl是资产负债率。K线数据中cjsj是成交时间cjjg是成交价格cjl是成交量zf是涨跌幅。系统的第一个模块是回购信号评估。根据回购金额、回购目的和公司基本面给回购信号打分。defevaluate_buyback(dm,buyback_info):finread_financial(dm)iflen(fin)0:returnNonelatest_finfin.iloc[-1]realtimeread_realtime(dm)market_caprealtime.get(ltsz,0)buyback_amountbuyback_info.get(amount,0)buyback_purposebuyback_info.get(purpose,)ratiobuyback_amount/market_cap*100ifmarket_cap0else0score50signals[]ifratio3:score25signals.append(f回购金额占市值{ratio:.1f}%比例较高)elifratio1:score15signals.append(f回购金额占市值{ratio:.1f}%比例适中)else:signals.append(f回购金额占市值{ratio:.1f}%比例较低)if注销inbuyback_purpose:score20signals.append(回购用于注销直接提升每股收益)elif股权激励inbuyback_purpose:score10signals.append(回购用于股权激励)elif员工持股inbuyback_purpose:score5signals.append(回购用于员工持股计划)iflatest_fin[roe]15:score10signals.append(fROE{latest_fin[roe]:.1f}%基本面良好)iflatest_fin[pe]20andlatest_fin[pe]0:score10signals.append(fPE{latest_fin[pe]:.1f}估值合理)iflatest_fin[zcfzl]50:score5signals.append(f资产负债率{latest_fin[zcfzl]:.1f}%财务健康)ifscore80:rating强烈推荐elifscore65:rating值得关注elifscore50:rating中性else:rating不推荐return{dm:dm,buyback_ratio:ratio,score:min(score,100),rating:rating,signals:signals}第二个模块是回购前后股价表现分析。统计回购公告发布前后股价的走势验证回购信号的有效性。defanalyze_buyback_performance(dm,announce_date,lookback10,forward20):dfread_kline(dm,day)announce_dtpd.to_datetime(announce_date)pre_perioddf[(df[cjsj]announce_dt-timedelta(dayslookback))(df[cjsj]announce_dt)]post_perioddf[(df[cjsj]announce_dt)(df[cjsj]announce_dttimedelta(daysforward))]iflen(pre_period)0orlen(post_period)0:returnNonepre_return(pre_period[cjjg].iloc[-1]-pre_period[cjjg].iloc[0])/pre_period[cjjg].iloc[0]*100post_return(post_period[cjjg].iloc[-1]-post_period[cjjg].iloc[0])/post_period[cjjg].iloc[0]*100max_pricepost_period[cjjg].max()min_pricepost_period[cjjg].min()announce_pricepost_period[cjjg].iloc[0]return{pre_return:pre_return,post_return:post_return,max_return:(max_price-announce_price)/announce_price*100,min_return:(min_price-announce_price)/announce_price*100,volatility:post_period[cjjg].pct_change().std()*np.sqrt(252)*100}第三个模块是回购实施进度追踪。很多公司发了回购公告但实施进度很慢需要追踪实际回购金额。deftrack_buyback_progress(dm,plan_amount,implemented_amount):progressimplemented_amount/plan_amount*100ifplan_amount0else0ifprogress80:status接近完成signal回购基本实施完毕利好已兑现elifprogress50:status实施过半signal回购正在积极实施中仍有支撑elifprogress30:status实施中signal回购刚开始实施关注后续进度else:status进展缓慢signal回购公告已发但实施缓慢可能是空头支票return{plan_amount:plan_amount,implemented_amount:implemented_amount,progress:progress,status:status,signal:signal}第四个模块是回购股票筛选。从全市场筛选出回购信号最强的股票。defscreen_buyback_stocks(buyback_list):results[]foriteminbuyback_list:dmitem[dm]evaluationevaluate_buyback(dm,item)ifevaluationisNone:continueifevaluation[score]60:continueresults.append(evaluation)df_resultpd.DataFrame(results)iflen(df_result)0:df_resultdf_result.sort_values(score,ascendingFalse)returndf_result实际运行下来系统帮我筛选出了几只回购信号强的股票。回购金额占市值比例超过3%且用于注销的股票公告后20天平均上涨6.8%胜率65%。而回购比例不到1%的股票效果不明显。在使用过程中有几点经验。第一回购公告是计划不是已实施一定要追踪实施进度。第二回购用于注销的效果最好因为直接减少了总股本提高了每股收益。第三回购期间股价回调是买入机会——公司有回购任务股价跌了反而会加大回购力度。我用的数据来自本地数据引擎财务数据和K线数据接口完整。感兴趣的朋友可以参考这个思路来构建回购追踪系统。接口说明time/f10/fi/{股票代码} - 财务指标数据本地路径数据存放目录/time/f10/fi/{dm}主要字段交易日期(jyrq)、净资产收益率(roe)、每股收益(eps)、市盈率(pe)、市净率(pb)、营收增长率(gm_zf)、净利润增长率(jlr_zf)、资产负债率(zcfzl)time/history/trade/{股票代码}/day - 日线历史K线本地路径数据存放目录/time/history/trade/{dm}/day主要字段成交时间(cjsj)、成交价格(cjjg)、成交量(cjl)、涨跌幅(zf)time/real/{股票代码} - 实时行情本地路径数据存放目录/time/real/{dm}主要字段成交价格(cjjg)、流通市值(ltsz)base/gplist - 股票列表本地路径数据存放目录/base/gplist用于获取全市场股票代码列表gitee开源地址github开源地址

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价