优秀的编程知识分享平台

网站首页 > 技术文章 正文

量化分析小红书热门概念股

nanyue 2025-02-13 13:31:06 技术文章 5 ℃

Python凭借其在数据科学领域积累的丰富生态,已然成为专业「量化分析」中必不可少的技术手段。今天要给大家分享的例子,就展示了如何基于Python中常用的numpy、pandas等常用数据分析处理框架,针对近期受大量海外用户涌入影响,而十分火热的「小红书概念板块」内部个股,进行一系列常用的量化分析操作:

1 相关库的导入

分析过程需要用到的库如下,其中numpy、pandas等库用于实现分析过程的「数据处理」「运算」,xtquant用于快捷「获取」股票历史行情数据,matplotlib则用于对策略过程及效果进行「可视化」

import pandas as pd
from tqdm import tqdm
from xtquant import xtdata # qmt行情数据模块
import matplotlib.pyplot as plt
from datetime import datetime, timedelta
from matplotlib.ticker import MaxNLocator

2 获取小红书概念板块内部个股代码

在导入相关库后,我们首先需要获取小红书相关概念板块基本信息。

我们基于xtquant中的行情数据模块,先更新板块信息,再检索名称涉及「小红书」的板块(xtquant调用量化数据使用需配合本机QMT程序):

QMT免费获取方式见文章末尾

# 更新本地板块列表信息
xtdata.download_sector_data()

# 查看小红书相关概念股
[s for s in xtdata.get_sector_list() if "小红书" in s]

可以看到与小红书有关的板块有TGN小红书概念GN小红书

3 获取目标板块内部个股代码

GN小红书为例,我们提取其内部个股代码:

4 提取相关个股基本信息

在上一步获得的板块内个股代码基础上,进一步补充获取更多基本个股信息:

# 提取更多信息,构建个股信息表
stocks_info = (
    pd.DataFrame(
        [{"code": code, **xtdata.get_instrument_detail(code)} for code in stock_codes]
    )[["code", "InstrumentName", "OpenDate"]]
    .rename(
        columns={
            "InstrumentName": "股票名称",
            "OpenDate": "上市日期",
        }
    )
    .sort_values("上市日期", ascending=False, ignore_index=True)
)
stocks_info.head()

5 获取相关个股历史行情数据

接着我们提取相关个股历史行情日线数据,并转换为适合分析使用的标准数据框格式,对应本分析的最新交易日为2025年1月17日

6 计算热度期间个股涨幅前5名

2025年1月13日2025年1月17日小红书热度期间为区间,计算GN小红书概念板块内涨幅前5名的个股,可以看到,涨幅前5名的个股中,最高的壹网壹创涨幅达到了50%,第5名的天下秀也超过了40%,对于5天的周期,涨幅十分的惊人:

7 个股涨幅前5名布林带分析

针对热度期间涨幅排名前5的个股,我们使用量化分析中经典的布林带分析,首先以窗口大小20个交易日为例,计算布林带相关均线、上下界数据:

在此基础上,以多子图的形式绘制布林带可视化,通过可视化结果,可以看出相关个股「股价」均处于「高估」状态,也就是俗话说的“涨到头了”,相关交易操作需更加的谨慎,避免短期内“高处站岗”:

# 个股布林带可视化

# 设置中文字体
plt.rcParams["font.family"] = ["SimHei"]
# 设置负号显示
plt.rcParams["axes.unicode_minus"] = False

# 构建多子图画布
fig, axes = plt.subplots(top5_stocks_info.shape[0], 1, figsize=(10, 6 * top5_stocks_info.shape[0]))

for ax, stock_info in zip(axes, top5_stocks_info.itertuples()):
    # 取出当前个股对应数据子集
    history_df_subset = history_df.query(f'code == "{stock_info.code}"').set_index("datetime")
    # 绘制收盘价曲线
    ax.plot(history_df_subset["close"], label="收盘价")
    # 绘制窗口移动平均线
    ax.plot(history_df_subset["ma"], label=f"{window_size}日移动平均线")
    # 绘制布林带上界
    ax.plot(history_df_subset["upper band"], label="布林带上界")
    # 绘制布林带下界
    ax.plot(history_df_subset["lower band"], label="布林带下界")
    # 绘制布林带区域填充
    ax.fill_between(
        history_df_subset.index,
        history_df_subset["upper band"],
        history_df_subset["lower band"],
        color="#bae7ff",
        alpha=0.3,
    )
    # 添加x轴标题
    ax.set_xlabel("日期")
    # 添加y轴标题
    ax.set_ylabel("股价")
    # 设置x轴刻度标签
    ax.xaxis.set_major_locator(MaxNLocator(nbins=20))
    # 设置x轴刻度标签角度
    plt.setp(ax.get_xticklabels(), rotation=45, ha="right")
    # 为当前子图添加图例
    ax.legend(title=stock_info.code+stock_info.股票名称, ncol=2, loc="upper right")

# 导出图片
plt.savefig('布林带可视化.png', dpi=300)
# 显示图形
plt.show()
最近发表
标签列表