股东变化趋势数据挖掘用Python追踪筹码集中度与主力动向股东人数是判断筹码集中度的重要指标。股东人数减少意味着筹码在集中可能有大户在吸筹股东人数增加意味着筹码在分散可能有大户在出货。我之前写了一套股东变化趋势分析工具把全市场的股东户数数据系统地分析了一遍。数据用的是股东变化趋势接口time/f10/gdbh/{股票代码}返回截止日期、股东户数、比上期变化情况。按截止日期倒序排列。配合十大股东接口time/f10/zygd/{股票代码}和十大流通股东接口time/f10/zygdlt/{股票代码}可以做更深入的分析。importjsonimportosimportpandasaspdimportnumpyasnp data_dirD:/stock_datadefread_gdbh(dm):file_pathos.path.join(data_dir,time,f10,gdbh,dm)ifnotos.path.exists(file_path):returnNonewithopen(file_path,r,encodingutf-8)asf:datajson.load(f)dfpd.DataFrame(data)df.columns[jzrq,gdhs,bsqbh]df[jzrq]pd.to_datetime(df[jzrq])returndf.sort_values(jzrq)defread_zygd(dm):file_pathos.path.join(data_dir,time,f10,zygd,dm)ifnotos.path.exists(file_path):returnNonewithopen(file_path,r,encodingutf-8)asf:datajson.load(f)returndatadefread_zygdlt(dm):file_pathos.path.join(data_dir,time,f10,zygdlt,dm)ifnotos.path.exists(file_path):returnNonewithopen(file_path,r,encodingutf-8)asf:datajson.load(f)returndata字段用简写jzrq截止日期gdhs股东户数bsqbh比上期变化情况。十大股东和十大流通股东返回的是嵌套结构包含截止日期、公告日期、股东总数、平均持股、十大股东列表等信息。第一个分析股东人数变化趋势。这是最基础的分析看股东人数是在减少还是在增加。defanalyze_gdhs_trend(dm):dfread_gdbh(dm)ifdfisNoneorlen(df)2:returnNonedf[gdhs]pd.to_numeric(df[gdhs],errorscoerce)latestdf.iloc[-1]prevdf.iloc[-2]change_pct(latest[gdhs]-prev[gdhs])/prev[gdhs]recent_4df.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_pct0.15:result[signal]股东人数大幅增加筹码分散result[score]35else:result[signal]股东人数变化不大result[score]50returnresult第二个分析全市场筹码集中度扫描。遍历所有股票找出股东人数连续减少的股票。defscan_chip_concentration(top_n30):gplist_pathos.path.join(data_dir,base,gplist)withopen(gplist_path,r,encodingutf-8)asf:gp_listjson.load(f)results[]forgpingp_list:dmgp[股票代码]mcgp[股票名称]dfread_gdbh(dm)ifdfisNoneorlen(df)3:continuedf[gdhs]pd.to_numeric(df[gdhs],errorscoerce)recent_3df.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_resultpd.DataFrame(results).sort_values(change_2q).head(top_n)print(连续3期股东人数减少TOP{}.format(top_n))print(df_result.to_string(indexFalse))returndf_result第三个分析十大股东变动对比。对比相邻两个季度的十大股东名单找出新进和退出的股东。defcompare_top10_change(dm):dataread_zygd(dm)ifnotdataorlen(data)2:returnNonelatestdata[0]prevdata[1]latest_holdersset()forholderinlatest.get(ZygdSdgd,[]):latest_holders.add(holder.get(股东名称,))prev_holdersset()forholderinprev.get(ZygdSdgd,[]):prev_holders.add(holder.get(股东名称,))new_inlatest_holders-prev_holders exitedprev_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_n20):gplist_pathos.path.join(data_dir,base,gplist)withopen(gplist_path,r,encodingutf-8)asf:gp_listjson.load(f)candidates[]forgpingp_list:dmgp[股票代码]mcgp[股票名称]df_gdbhread_gdbh(dm)ifdf_gdbhisNoneorlen(df_gdbh)2:continuedf_gdbh[gdhs]pd.to_numeric(df_gdbh[gdhs],errorscoerce)change_pct(df_gdbh[gdhs].iloc[-1]-df_gdbh[gdhs].iloc[-2])/df_gdbh[gdhs].iloc[-2]ifchange_pct-0.10:continueklineread_kline(dm,day)ifklineisNoneorlen(kline)60:continuerecent_60kline.tail(60)price_change(recent_60[收盘价].iloc[-1]-recent_60[收盘价].iloc[0])/recent_60[收盘价].iloc[0]ifprice_change0.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的本地数据接口股东变化趋势、十大股东、十大流通股东这些接口配合使用能构建一个完整的筹码集中度分析系统。接口说明time/f10/gdbh/{股票代码} - 股东变化趋势本地路径数据存放目录/time/f10/gdbh/{股票代码}更新频率每天15:30更新完成约12小时数据格式[{}…]按截止日期倒序主要字段截止日期(jzrq, yyyy-MM-dd)、股东户数(gdhs)、比上期变化情况(bsqbh)time/f10/zygd/{股票代码} - 十大股东本地路径数据存放目录/time/f10/zygd/{股票代码}更新频率每天15:30更新完成约12小时数据格式[{}…]按截止日期倒序主要字段截止日期、公告日期、股东说明、股东总数、平均持股、十大股东列表含排名、股东名称、持股数量、持股比例、股本性质time/f10/zygdlt/{股票代码} - 十大流通股东本地路径数据存放目录/time/f10/zygdlt/{股票代码}更新频率每天15:30更新完成约12小时数据格式[{}…]按公告日期倒序主要字段截止日期、公告日期、十大流通股东列表含排名、股东名称、持股数量、持股比例、股本性质资料参考ig50