筹码峰分析模块函数,适用于你从同花顺导出的历史数据

筹码峰分析模块函数,适用于你从同花顺导出的历史数据,以 光线传媒(300251)2025年为例。

✅ 一、假设你的同花顺数据格式如下(CSV 文件):
日期 开盘价 收盘价 最高价 最低价 成交量(手) 成交额(万元)
2025/01/02 8.50 8.70 8.75 8.45 123456 10500
… … … … … … …

我们将基于收盘价代表成交价做简化分析。

二、模块目标
输入:CSV 文件路径(同花顺导出的历史数据)

输出:筹码分布图 + 筛选出的筹码峰列表

可选参数:价格分桶粒度、输出图片、打印主力成本区等

三、完整可封装模块代码

import pandas as pd
import matplotlib.pyplot as plt
from scipy.signal import find_peaks

def analyze_chip_distribution(
csv_path: str,
price_bucket_size: float = 0.1,
show_plot: bool = True,
top_n_peaks: int = 3
):
“”"
分析股票的筹码峰分布图并找出密集成交区域(筹码峰)

参数:
- csv_path: 同花顺导出的 CSV 文件路径
- price_bucket_size: 价格划分粒度,默认每 0.1 元为一档
- show_plot: 是否展示筹码分布图
- top_n_peaks: 返回筹码峰的数量

返回:
- 筹码峰列表(价格, 成交量)
"""

# 1. 读取数据
df = pd.read_csv(csv_path, encoding='utf-8')
df = df.rename(columns=lambda x: x.strip())
df["收盘价"] = df["收盘价"].astype(float)
df["成交量"] = df["成交量(手)"].astype(float)

# 2. 构造价格-成交量分布(按收盘价简化)
price_volume = []

for _, row in df.iterrows():
    price = round(row["收盘价"] / price_bucket_size) * price_bucket_size
    volume = row["成交量"]
    price_volume.append((price, volume))

dist_df = pd.DataFrame(price_volume, columns=["price", "volume"])
dist_df = dist_df.groupby("price").sum().reset_index()
dist_df = dist_df.sort_values("price").reset_index(drop=True)

# 3. 寻找筹码峰(局部最大值)
peaks, _ = find_peaks(dist_df["volume"], distance=2, prominence=1)

chip_peaks = [(dist_df.loc[i, "price"], dist_df.loc[i, "volume"]) for i in peaks]
chip_peaks.sort(key=lambda x: -x[1])
chip_peaks = chip_peaks[:top_n_peaks]

# 4. 绘图
if show_plot:
    plt.figure(figsize=(10, 6))
    plt.bar(dist_df["price"], dist_df["volume"], width=price_bucket_size * 0.9, color='skyblue', edgecolor='k')
    for price, vol in chip_peaks:
        plt.axvline(x=price, color='red', linestyle='--')
        plt.text(price, vol, f"{price:.2f}", ha='center', va='bottom', color='red')
    plt.xlabel("价格")
    plt.ylabel("成交量(手)")
    plt.title("筹码分布图(含筹码峰)")
    plt.grid(True)
    plt.tight_layout()
    plt.show()

return chip_peaks

四、使用示例(以光线传媒为例)
假设你已经从同花顺导出光线传媒 2025 年的 CSV 文件为:

光线传媒_2025.csv
使用如下代码进行分析:

chip_peaks = analyze_chip_distribution(“光线传媒_2025.csv”)

print(“识别出的筹码峰(价格, 成交量):”)
for price, vol in chip_peaks:
print(f"价格:{price:.2f} 元,成交量:{vol:.0f} 手")
五、进阶功能建议
可后续扩展:

计算主力成本区间(加权平均价格 ± 标准差)

分析当前价与筹码峰关系

输出为 HTML/Excel 报告

PyQt5 / Streamlit 图形化界面

在同花顺软件中,可以通过以下几种方式导出可用于筹码分析的 CSV 数据,以便后续在 Python 中进行处理和建模。以下是详细步骤(以 Windows 桌面版为例):

一、导出历史行情数据(推荐用于筹码分析)
✅ 步骤:
打开同花顺(通常是“同花顺-普通版”或“同花顺金融终端”)。

输入你感兴趣的股票代码(例如:300251),进入 K 线界面。

在界面中点击顶部菜单:

[功能] → [历史数据导出]
在弹出的窗口中:

选择导出路径(默认是桌面或“我的文档”)

选择导出类型:

日线(适合筹码分析)

可选:周线、月线或分钟线(视分析粒度)

导出格式:默认是 .CSV,不要修改

确认后导出

导出后文件名通常类似于:300251.csv,编码格式为 GBK,建议你用 Excel 打开看一下是否包含如下字段:
日期、开盘价、收盘价、最高价、最低价、成交量(手)、成交额(万元)

二、导出筹码分布图(可视但不建议用于量化)
在个股界面 → 点击“筹码分布” → 右键 → 可截图保存
⚠️ 该图为图形展示,没有实际成交明细数据,不能直接用于程序分析。需要你用自己的方法构建模拟筹码分布,如我们上面代码中所示:按收盘价+成交量近似建模。

三、导出 CSV 后注意事项
默认编码格式是 GBK,你可以:

在 Python 中使用 encoding=‘gbk’ 或 encoding=‘utf-8-sig’ 打开;

如果导出数据中有“成交量(手)”,我们可以直接用于筹码聚合;

通常无需太长时间段,过去 3~6 个月的数据就足够进行短线筹码分析。

✅ 四、建议的字段结构如下:
日期 开盘价 收盘价 最高价 最低价 成交量(手) 成交额(万元)

✅ 五、确认后可操作性
你可以:

先从同花顺导出光线传媒或任意股票的日线 CSV;

拖进这里(直接上传文件),我可以帮你:

自动识别文件字段;

输出筹码峰分布图;

分析当前股价与筹码峰的关系。

你可能感兴趣的:(量化,pandas)