当前位置: 首页 > news >正文

股东变化趋势数据挖掘:用Python追踪筹码集中度与主力动向

股东变化趋势数据挖掘:用Python追踪筹码集中度与主力动向

股东人数是判断筹码集中度的重要指标。股东人数减少意味着筹码在集中,可能有大户在吸筹;股东人数增加意味着筹码在分散,可能有大户在出货。我之前写了一套股东变化趋势分析工具,把全市场的股东户数数据系统地分析了一遍。

数据用的是股东变化趋势接口time/f10/gdbh/{股票代码},返回截止日期、股东户数、比上期变化情况。按截止日期倒序排列。配合十大股东接口time/f10/zygd/{股票代码}和十大流通股东接口time/f10/zygdlt/{股票代码},可以做更深入的分析。

importjsonimportosimportpandasaspdimportnumpyasnp data_dir="D:/stock_data"defread_gdbh(dm):file_path=os.path.join(data_dir,"time","f10","gdbh",dm)ifnotos.path.exists(file_path):returnNonewithopen(file_path,"r",encoding="utf-8")asf:data=json.load(f)df=pd.DataFrame(data)df.columns=["jzrq","gdhs","bsqbh"]df["jzrq"]=pd.to_datetime(df["jzrq"])returndf.sort_values("jzrq")defread_zygd(dm):file_path=os.path.join(data_dir,"time","f10","zygd",dm)ifnotos.path.exists(file_path):returnNonewithopen(file_path,"r",encoding="utf-8")asf:data=json.load(f)returndatadefread_zygdlt(dm):file_path=os.path.join(data_dir,"time","f10","zygdlt",dm)ifnotos.path.exists(file_path):returnNonewithopen(file_path,"r",encoding="utf-8")asf:data=json.load(f)returndata

字段用简写,jzrq截止日期gdhs股东户数bsqbh比上期变化情况。十大股东和十大流通股东返回的是嵌套结构,包含截止日期、公告日期、股东总数、平均持股、十大股东列表等信息。

第一个分析:股东人数变化趋势。这是最基础的分析,看股东人数是在减少还是在增加。

defanalyze_gdhs_trend(dm):df=read_gdbh(dm)ifdfisNoneorlen(df)<2:returnNonedf["gdhs"]=pd.to_numeric(df["gdhs"],errors="coerce")latest=df.iloc[-1]prev=df.iloc[-2]change_pct=(latest["gdhs"]-prev["gdhs"])/prev["gdhs"]recent_4=df.tail(4)trend="下降"ifrecent_4["gdhs"].is_monotonic_decreasingelse"上升"ifrecent_4["gdhs"].is_monotonic_increasingelse"波动"result={"dm":dm,"latest_date":latest["jzrq"],"latest_gdhs":latest["gdhs"],"change_pct":change_pct,"trend":trend}ifchange_pct<-0.15:result["signal"]="股东人数大幅减少,筹码集中"result["score"]=70elifchange_pct>0.15:result["signal"]="股东人数大幅增加,筹码分散"result["score"]=35else:result["signal"]="股东人数变化不大"result["score"]=50returnresult

第二个分析:全市场筹码集中度扫描。遍历所有股票,找出股东人数连续减少的股票。

defscan_chip_concentration(top_n=30):gplist_path=os.path.join(data_dir,"base","gplist")withopen(gplist_path,"r",encoding="utf-8")asf:gp_list=json.load(f)results=[]forgpingp_list:dm=gp["股票代码"]mc=gp["股票名称"]df=read_gdbh(dm)ifdfisNoneorlen(df)<3:continuedf["gdhs"]=pd.to_numeric(df["gdhs"],errors="coerce")recent_3=df.tail(3)ifrecent_3["gdhs"].is_monotonic_decreasing:change_2q=(recent_3["gdhs"].iloc[-1]-recent_3["gdhs"].iloc[0])/recent_3["gdhs"].iloc[0]results.append({"dm":dm,"mc":mc,"latest_gdhs":recent_3["gdhs"].iloc[-1],"change_2q":change_2q})df_result=pd.DataFrame(results).sort_values("change_2q").head(top_n)print("连续3期股东人数减少TOP{}:".format(top_n))print(df_result.to_string(index=False))returndf_result

第三个分析:十大股东变动对比。对比相邻两个季度的十大股东名单,找出新进和退出的股东。

defcompare_top10_change(dm):data=read_zygd(dm)ifnotdataorlen(data)<2:returnNonelatest=data[0]prev=data[1]latest_holders=set()forholderinlatest.get("ZygdSdgd",[]):latest_holders.add(holder.get("股东名称",""))prev_holders=set()forholderinprev.get("ZygdSdgd",[]):prev_holders.add(holder.get("股东名称",""))new_in=latest_holders-prev_holders exited=prev_holders-latest_holders result={"dm":dm,"latest_date":latest.get("截止日期",""),"prev_date":prev.get("截止日期",""),"new_holders":list(new_in),"exited_holders":list(exited)}institution_keywords=["基金","社保","保险","信托","QFII","证金","汇金","资管"]new_institutions=[hforhinnew_inifany(kwinhforkwininstitution_keywords)]ifnew_institutions:result["signal"]="机构新进十大股东:{}".format("、".join(new_institutions))result["score"]=72eliflen(new_in)==0andlen(exited)==0:result["signal"]="十大股东无变动"result["score"]=55else:result["signal"]="十大股东有变动但无机构新进"result["score"]=50returnresult

第四个分析:结合股东人数变化和股价走势。股东人数减少+股价还没大涨的股票最值得关注。

defselect_chip_concentration_strategy(top_n=20):gplist_path=os.path.join(data_dir,"base","gplist")withopen(gplist_path,"r",encoding="utf-8")asf:gp_list=json.load(f)candidates=[]forgpingp_list:dm=gp["股票代码"]mc=gp["股票名称"]df_gdbh=read_gdbh(dm)ifdf_gdbhisNoneorlen(df_gdbh)<2:continuedf_gdbh["gdhs"]=pd.to_numeric(df_gdbh["gdhs"],errors="coerce")change_pct=(df_gdbh["gdhs"].iloc[-1]-df_gdbh["gdhs"].iloc[-2])/df_gdbh["gdhs"].iloc[-2]ifchange_pct>-0.10:continuekline=read_kline(dm,"day")ifklineisNoneorlen(kline)<60:continuerecent_60=kline.tail(60)price_change=(recent_60["收盘价"].iloc[-1]-recent_60["收盘价"].iloc[0])/recent_60["收盘价"].iloc[0]ifprice_change>0.10:continuecandidates.append({"dm":dm,"mc":mc,"gdhs_change":change_pct,"price_change_60d":price_change})returnpd.DataFrame(candidates).sort_values("gdhs_change").head(top_n)

策略逻辑是:股东人数减少超过10% + 60日涨幅不超过10%。前一个条件说明筹码在集中,后一个条件排除已经大涨的股票。这种"筹码集中但股价没动"的股票,后续上涨概率较高。

几个使用经验。第一,股东人数数据是季度披露的,有滞后性,只能做中长期参考。第二,股东人数减少要配合业绩看,业绩增长的筹码集中才有意义。第三,十大股东的季度变动比静态名单更有价值,要重点看机构新进。第四,基金持股接口time/f10/jjcg也可以配合使用,看基金持仓变化。

我用的数据来源是ig50的本地数据接口,股东变化趋势、十大股东、十大流通股东这些接口配合使用,能构建一个完整的筹码集中度分析系统。


接口说明:

  1. time/f10/gdbh/{股票代码} - 股东变化趋势
    本地路径:数据存放目录/time/f10/gdbh/{股票代码}
    更新频率:每天15:30(更新完成约12小时)
    数据格式:[{}…],按截止日期倒序
    主要字段:截止日期(jzrq, yyyy-MM-dd)、股东户数(gdhs)、比上期变化情况(bsqbh)

  2. time/f10/zygd/{股票代码} - 十大股东
    本地路径:数据存放目录/time/f10/zygd/{股票代码}
    更新频率:每天15:30(更新完成约12小时)
    数据格式:[{}…],按截止日期倒序
    主要字段:截止日期、公告日期、股东说明、股东总数、平均持股、十大股东列表(含排名、股东名称、持股数量、持股比例、股本性质)

  3. time/f10/zygdlt/{股票代码} - 十大流通股东
    本地路径:数据存放目录/time/f10/zygdlt/{股票代码}
    更新频率:每天15:30(更新完成约12小时)
    数据格式:[{}…],按公告日期倒序
    主要字段:截止日期、公告日期、十大流通股东列表(含排名、股东名称、持股数量、持股比例、股本性质)

资料参考:ig50

http://www.jsqmd.com/news/1336691/

相关文章:

  • VLA:驱动具身智能迈向通用的关键引擎
  • eNSP网络仿真入门:从IP配置到故障排查的完整实战指南
  • Docker容器技术原理
  • 用 LVGL 给 UEFI Setup 换一套图形界面:架构、实现与 QEMU 验证
  • BilibiliDown 终极指南:如何快速下载B站视频的完整教程
  • 【重磅】NVIDIA CMP 170HX 矿卡解锁:8GB→64GB、算力接近「真 A100」完整教程(含验证)
  • 三极管工作原理与共射极放大电路设计:从非线性特性到稳定偏置
  • KKCE: 基于 ETag 指纹碰撞与条件请求的网站测速缓存一致性审计-快快测
  • Python工作流引擎SpiffWorkflow完全指南:从入门到精通掌握BPMN流程自动化
  • 北京靠谱的旅游包车机构哪家强?本地老司机推荐 - 品牌优推
  • 电力系统碳排放优化调度模型设计与实践
  • CAD三维建模零基础入门:从软件选择到核心建模流程全解析
  • Java逻辑运算符深度解析:从短路求值到优先级陷阱与实战避坑
  • QTableWidget 实战:自动换行且行高自适应的完整方案
  • 学术研究者的高效翻译助手:Zotero PDF2zh插件完全指南
  • AUTOSAR架构如何实现汽车嵌入式软件代码复用:从分层设计到工程实践
  • 3步搞定微信公众号数据采集:Python爬虫实战指南
  • FastLED电源管理实战指南:高效控制LED电流的7大关键策略
  • 深度学习在智能交通系统中的应用与实践
  • 机动目标跟踪:Singer与当前统计模型原理及MATLAB仿真实践
  • 2026年广州潮汕肠粉加盟企业怎么选择?看实利更重要 - 品牌优推
  • 国内开发者合规访问主流AI大模型(Gemini/ChatGPT/Claude/Grok)实战指南
  • 3分钟学会AI全自动短视频制作:Pixelle-Video让你轻松成为内容创作者
  • 从原子钟到厘米级定位:GPS时间系统与高精度定位技术全解析
  • codex必用10大视频skill,从0到1做爆款
  • 链上套利残酷共学-DAY01
  • 臃肿工具箱里的“无用之重”
  • KKCE: 基于 BGP 路由收敛与 AS Path 预热的网站测速冷启动优化-快快测
  • 从手写 Hash 路由到 React Router:一个路由练习的关键实现
  • 74. 搜索二维矩阵:把二维结构映射成一维后做二分