前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >量化分析小红书热门概念股

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

作者头像
朱卫军 AI Python
发布2025-01-22 12:31:12
发布2025-01-22 12:31:12
9900
代码可运行
举报
文章被收录于专栏:Python大数据分析
运行总次数:0
代码可运行
Python凭借其在数据科学领域积累的丰富生态,已然成为专业「量化分析」中必不可少的技术手段。今天要给大家分享的例子,就展示了如何基于Python中常用的numpypandas等常用数据分析处理框架,针对近期受大量海外用户涌入影响,而十分火热的「小红书概念板块」内部个股,进行一系列常用的量化分析操作:
1 相关库的导入

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

代码语言:javascript
代码运行次数:0
复制
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免费获取方式见文章末尾

代码语言:javascript
代码运行次数:0
复制
# 更新本地板块列表信息
xtdata.download_sector_data()

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

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

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

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

4 提取相关个股基本信息

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

代码语言:javascript
代码运行次数:0
复制
# 提取更多信息,构建个股信息表
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个交易日为例,计算布林带相关均线、上下界数据:

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

代码语言:javascript
代码运行次数:0
复制
# 个股布林带可视化

# 设置中文字体
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()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-01-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python大数据分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 相关库的导入
  • 2 获取小红书概念板块内部个股代码
  • 3 获取目标板块内部个股代码
  • 4 提取相关个股基本信息
  • 5 获取相关个股历史行情数据
  • 6 计算热度期间个股涨幅前5名
  • 7 个股涨幅前5名布林带分析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档