筹码分布数据分析实战:用Python构建主力建仓成本分析系统
筹码分布数据分析实战用Python构建主力建仓成本分析系统筹码分布是技术分析中一个很特别的指标它试图展示不同价格上的持仓量分布帮助投资者判断主力的建仓成本和持仓变化。去年我用Python实现了一个筹码分布计算系统通过历史K线和逐笔成交数据还原主力的建仓过程。这篇文章分享系统的核心设计和代码实现。筹码分布的计算原理是换手率衰减模型——假设在某个价位成交的筹码会随着时间推移和换手率增加而逐渐被置换。每天的新成交筹码会加到对应的价格区间旧的筹码按换手率比例衰减。本地数据引擎提供了计算筹码分布所需的所有数据。历史K线在time/history/trade/{dm}/day包含每日的开盘价、收盘价、最高价、最低价、成交量。逐笔成交数据在time/real/trace/onebyone/{dm}可以用来做更精确的筹码分布计算。实时行情在time/real/{dm}包含换手率等指标。importjsonimportosimportpandasaspdimportnumpyasnpfromdatetimeimportdatetime,timedelta data_dirD:/ig50_datadefread_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_tick_data(dm):file_pathos.path.join(data_dir,time,real,trace,onebyone,dm)withopen(file_path,r,encodingutf-8)asf:datajson.load(f)dfpd.DataFrame(data)df.columns[dm,mc,cjsj,cjjg,cjl,jyzd]df[cjsj]pd.to_datetime(df[cjsj])returndf字段方面dm是股票代码cjsj是成交时间cjjg是成交价格cjl是成交量cje是成交额zf是涨跌幅jyzd是交易方向。系统的核心是筹码分布计算函数。我用日K线数据按价格区间统计筹码分布每天根据换手率对历史筹码做衰减处理。defcalc_chip_distribution(dm,lookback_days120,price_step0.1):dfread_kline(dm,day)iflen(df)20:returnNonedfdf.tail(lookback_days).copy()df[hsl]df[cjl]/df[cjl].rolling(60).mean()chip_map{}for_,rowindf.iterrows():priceround(row[cjjg]/price_step)*price_step volumerow[cjl]turnoverrow[hsl]decay_factormax(0,1-turnover*0.3)forpinchip_map:chip_map[p]*decay_factorifpriceinchip_map:chip_map[price]volumeelse:chip_map[price]volume total_chipsum(chip_map.values())iftotal_chip0:returnNonechip_dist{p:v/total_chipforp,vinchip_map.items()}returnchip_dist拿到筹码分布后第一个分析模块是获利盘比例计算。获利盘比例是当前价格以下的筹码占总筹码的比例反映市场中处于盈利状态的持仓占比。defcalc_profit_ratio(dm):chip_distcalc_chip_distribution(dm)ifchip_distisNone:returnNonerealtimeread_realtime(dm)current_pricerealtime.get(cjjg,0)profit_chipsum(vforp,vinchip_dist.items()ifpcurrent_price)total_chipsum(chip_dist.values())profit_ratioprofit_chip/total_chipiftotal_chip0else0return{current_price:current_price,profit_ratio:profit_ratio*100,loss_ratio:(1-profit_ratio)*100}第二个分析模块是筹码集中度计算。集中度衡量筹码是集中在少数价格区间还是分散在很宽的范围内。我用70%筹码的价格区间宽度来衡量。defcalc_chip_concentration(dm):chip_distcalc_chip_distribution(dm)ifchip_distisNone:returnNonesorted_chipssorted(chip_dist.items(),keylambdax:x[0])prices[pforp,vinsorted_chips]volumes[vforp,vinsorted_chips]totalsum(volumes)cumsumnp.cumsum(volumes)/total p15_idxnp.searchsorted(cumsum,0.15)p85_idxnp.searchsorted(cumsum,0.85)p15_priceprices[min(p15_idx,len(prices)-1)]p85_priceprices[min(p85_idx,len(prices)-1)]concentration_width(p85_price-p15_price)/p15_price*100ifp15_price0else0realtimeread_realtime(dm)current_pricerealtime.get(cjjg,0)avg_costsum(p*vforp,vinchip_dist.items())return{concentration_width:concentration_width,avg_cost:avg_cost,current_price:current_price,cost_deviation:(current_price-avg_cost)/avg_cost*100,concentration_level:高ifconcentration_width15else中ifconcentration_width30else低}第三个分析模块是筹码峰值检测。筹码分布图上的峰值代表大量筹码集中的价格通常是重要的支撑位或压力位。defdetect_chip_peaks(dm):chip_distcalc_chip_distribution(dm)ifchip_distisNone:returnNonesorted_pricessorted(chip_dist.keys())volumes[chip_dist[p]forpinsorted_prices]peaks[]foriinrange(1,len(volumes)-1):ifvolumes[i]volumes[i-1]andvolumes[i]volumes[i1]:peaks.append({price:sorted_prices[i],volume_ratio:volumes[i]/sum(volumes)*100})peaks.sort(keylambdax:x[volume_ratio],reverseTrue)realtimeread_realtime(dm)current_pricerealtime.get(cjjg,0)forpeakinpeaks:ifpeak[price]current_price:peak[type]支撑位else:peak[type]压力位returnpeaks[:5]第四个分析模块是筹码转移分析。通过对比不同日期的筹码分布可以追踪筹码的转移方向——是从低位向高位转移主力出货还是从高位向低位转移主力建仓。defanalyze_chip_transfer(dm,period_days30):chip_currentcalc_chip_distribution(dm,lookback_days120)chip_pastcalc_chip_distribution(dm,lookback_days120period_days)ifchip_currentisNoneorchip_pastisNone:returnNonerealtimeread_realtime(dm)current_pricerealtime.get(cjjg,0)low_chip_currentsum(vforp,vinchip_current.items()ifpcurrent_price*0.9)low_chip_pastsum(vforp,vinchip_past.items()ifpcurrent_price*0.9)high_chip_currentsum(vforp,vinchip_current.items()ifpcurrent_price*1.1)high_chip_pastsum(vforp,vinchip_past.items()ifpcurrent_price*1.1)low_transferlow_chip_current-low_chip_past high_transferhigh_chip_current-high_chip_pastiflow_transfer-0.05andhigh_transfer0.05:signal高位转移可能出货eliflow_transfer0.05andhigh_transfer-0.05:signal低位转移可能建仓else:signal无明显转移return{low_chip_change:low_transfer*100,high_chip_change:high_transfer*100,signal:signal}把这些模块整合起来生成完整的筹码分析报告。defgenerate_chip_report(dm):profitcalc_profit_ratio(dm)concentrationcalc_chip_concentration(dm)peaksdetect_chip_peaks(dm)transferanalyze_chip_transfer(dm)reportf筹码分布分析报告 -{dm}\n\nifprofit:reportf获利盘比例:{profit[profit_ratio]:.1f}%\nreportf套牢盘比例:{profit[loss_ratio]:.1f}%\n\nifconcentration:reportf平均持仓成本:{concentration[avg_cost]:.2f}\nreportf当前价格:{concentration[current_price]:.2f}\nreportf偏离成本:{concentration[cost_deviation]:.1f}%\nreportf筹码集中度:{concentration[concentration_level]}(宽度{concentration[concentration_width]:.1f}%)\n\niftransfer:reportf筹码转移信号:{transfer[signal]}\nreportf低位筹码变化:{transfer[low_chip_change]:.1f}%\nreportf高位筹码变化:{transfer[high_chip_change]:.1f}%\n\nifpeaks:report主要筹码峰值:\nforpinpeaks:reportf{p[price]:.2f}({p[type]}, 占比{p[volume_ratio]:.1f}%)\nreturnreport实际运行下来筹码分析系统帮我发现了几个有价值的信号。第一获利盘比例低于20%时买入胜率约65%。第二筹码集中度高的股票后续上涨概率更大。第三筹码从低位向高位快速转移是趋势确认信号。在使用过程中有几点经验。第一筹码分布是估算值不是精确值对于换手率极低的股票误差较大。第二筹码分布要结合资金流向数据一起看——筹码集中主力净流入信号更可靠。第三筹码峰值是重要的支撑压力位但不是铁板一块需要结合成交量来确认。我用的数据来自本地数据引擎K线和逐笔成交数据接口完整做筹码分析很方便。感兴趣的朋友可以参考这个思路来构建自己的筹码分析系统。接口说明time/history/trade/{股票代码}/{级别} - 历史K线数据本地路径数据存放目录/time/history/trade/{dm}/{day|min1|min5}主要字段成交时间(cjsj)、成交价格(cjjg)、成交量(cjl)、涨跌幅(zf)time/real/{股票代码} - 实时行情本地路径数据存放目录/time/real/{dm}主要字段成交价格(cjjg)、成交量(cjl)、换手率time/real/trace/onebyone/{股票代码} - 逐笔成交数据本地路径数据存放目录/time/real/trace/onebyone/{dm}主要字段成交时间(cjsj)、成交价格(cjjg)、成交量(cjl)、交易方向(jyzd)time/zijin/zjlrqs/{股票代码} - 个股资金流向本地路径数据存放目录/time/zijin/zjlrqs/{dm}主要字段主力净流入(zlJlr)、主力净比(zlJlb)资料参考ig50

相关新闻

2026年针对语音芯片生产厂家的选型刚需:正规企业核心标准、行业痛点梳理与避坑要点全解析

2026年针对语音芯片生产厂家的选型刚需:正规企业核心标准、行业痛点梳理与避坑要点全解析

2026年针对语音芯片生产厂家的选型刚需:正规企业核心标准、行业痛点梳理与避坑要点全解析 2026年,国内智能硬件、汽车电子、医疗设备等领域的升级需求带动语音芯片采购量持续攀升,不少刚接触供应链的采购、产品或研发人员,首次面临…

2026/8/4 9:02:59 阅读更多
【单片机毕业设计推荐】基于 STM32 的多识别方式智能门禁系统设计与实现 基于 STM32 与安卓 APP 的蓝牙智能门锁控制系统设计(012505)

【单片机毕业设计推荐】基于 STM32 的多识别方式智能门禁系统设计与实现 基于 STM32 与安卓 APP 的蓝牙智能门锁控制系统设计(012505)

文章目录20 个相关毕业设计备选题目项目研究背景摘要总体方案核心功能一、核心身份识别开锁功能二、安全防护与状态提示功能三、蓝牙通信与 APP 远程控制功能技术路线项目演示关于我们项目案例源码获取温馨提示:本人主页置顶文章(点我)有 CSDN 平台官方提供的学长联…

2026/8/4 11:13:06 阅读更多
ThreadForge:Java多线程编程的智能解决方案

ThreadForge:Java多线程编程的智能解决方案

1. 为什么我们需要ThreadForge这样的多线程工具? 在Java开发中,多线程编程一直是让开发者又爱又恨的话题。我至今还记得第一次处理线程安全问题时,那个诡异的ConcurrentModificationException异常让我调试了整整两天。传统的Java多线程API虽然…

2026/8/4 11:13:06 阅读更多
BitComet比特彗星多协议下载工具核心功能与优化指南

BitComet比特彗星多协议下载工具核心功能与优化指南

1. BitComet 比特彗星的核心价值解析BitComet作为一款老牌BT下载工具,从2003年发布至今已经迭代了20年。v2.20.1.19多协议版之所以能保持生命力,关键在于其三大核心能力:首先是多协议支持能力,这个版本不仅支持传统的BitTorrent协…

2026/8/4 11:13:06 阅读更多
ChatGPT充值后Codex并发请求总出错?用幂等设计避免重复执行

ChatGPT充值后Codex并发请求总出错?用幂等设计避免重复执行

ChatGPT充值后,很多开发者会使用 Codex 编写接口、生成业务逻辑和补充自动化测试。在单用户、单次请求的情况下,生成的代码往往可以正常运行。但进入真实项目后,一旦出现重复点击、网络重试或多个请求同时执行,就可能暴露新的问题…

2026/8/4 11:13:06 阅读更多
Linux网络数据接收机制与性能调优实战

Linux网络数据接收机制与性能调优实战

1. 网络数据接收核心机制解析当我们需要从网络接口获取数据时,系统底层究竟发生了什么?这个看似简单的操作背后,隐藏着一套精密的网络协议栈协作机制。今天我们就来深入剖析网络数据接收(net_recv)的全过程&#xff0c…

2026/8/4 11:13:06 阅读更多
3分钟搞定!QQ空间历史说说完整备份终极指南

3分钟搞定!QQ空间历史说说完整备份终极指南

3分钟搞定!QQ空间历史说说完整备份终极指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想过,那些年发过的QQ空间说说,那些记录青春的文字…

2026/8/3 12:53:38 阅读更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是应用材料(Applied Materials)公司生产的一款用于半导体设备的I/O信号分配电路板。该型号(0100-02186)的核心特点如下:专用于Endura等半导体工艺腔室。集成信号路由与分配功能。连接控制…

2026/8/3 19:34:52 阅读更多
Nissei Corp FFMN-32L-10-T0 40AX 三相异步电动机

Nissei Corp FFMN-32L-10-T0 40AX 三相异步电动机

Nissei Corp FFMN-32L-10-T0 40AX 三相异步电动机是日本日清(Nissei)品牌的一款工业用三相异步电机,适用于自动化设备及通用机械驱动。该型号(FFMN-32L-10-T0 40AX)的核心特点如下:三相交流异步电动机。额定…

2026/8/3 19:34:54 阅读更多