探索方向

回顾了 R 语言的基操之后,我决定构建一个能够自动更新数据的 Shiny 可视化面板用于追踪和展示创新药相关股票的市场表现。本次尝试有两方面原因:

  1. 首先,股票数据具有天然的时效性和动态更新需求,非常适合用来探索 Shiny 应用中数据自动刷新的机制;

  2. 其次,今年创新药概念板块的股票涨势良好,作为从业者自然对这一板块的股票更关注。

通过这次实践,我希望重点关注以下三个方面:

  • 使用 R 处理、可视化股票数据,并完成 Shiny 可视化面板的开发与部署;

  • 探索 Shiny 应用中数据的自动更新的流程机制;

  • R的依赖管理与版本控制,确保分析结果的可复现性。

创新药成分股定义

定义创新药概念的成份股是一件很复杂的事,难点在于:

  • 创新药的研发时间久、过程复杂,此外会有很多公司买羊头挂狗肉冒充,导致创新药公司很难定义;

  • 各家券商软件对于概念股的分类都略有不同,体现出成份股数量、内容不同,不便参考;

为了不给自己设置难题、尽快开始实践,我决定用银华中证创新药产业ETF (159992)在2025年9月30日公布的持仓的29支股票来作为此次可视化标的的基础,剔除里面和医疗真的一点都不沾边的股票(基金经理脑子咋想的),然后加上一些真的有创新药BD的、有创新药管线正在研发或者已经申报的创新药公司股票共30支均为A股,日后再考虑加入港股。

这个名单包含了CRO和疫苗产业的公司,在我看来其实不算纯创新药企业,不过既然创新药产业ETF的持仓如此,咱也不纠结。如果项目效果过得去,后续我也愿意聚焦做一版创新药药企或者聚焦港股创新药药企的可视化面板。

数据自动更新机制

选定创新药的股票标的之后,下一步就是获取股票的开高收低等具体数据。R中有一些包能够提供金融数据,但是对于国内股票的支持有限。比较好用的包是Tushare,也需要帐户积分。我决定用Python里的akshare包去取数据,挂载到Github Actions上自动更新数据,Shiny app部署在Shinyapp.io,自动从Github仓库里抓数据,这样就达到了数据自动更新的流程机制。

所以最终的项目流程:

可视化面板展示内容

首先声明一下,这个图表仅作探索用途,无任何投资建议!!!

面板分成3个Tab页,分别是涨跌幅-成交量、价格走势、趋势走向。

涨跌幅-成交量图

计算过去20天、60天、120天里股价的涨跌幅以及成交量中位数,尝试描述股票论坛里面老股民所谓的“缩量上涨”、“放量下跌”之类的说法。

图里有个现象挺有意思,通化金马和信立泰两只股票的价格在过去120天、60天、20天都表现出了较好的连续性,持股体验估计不错。一查通化金马是中药概念的化药、信立泰是心血管、抗生素领域的化药企业。此外,荣昌生物在过去120天的涨幅是51.99%(文章撰写时),但是过去60天、20天里价格就逐渐拉跨,想必之前的股价飙升和眼科创新药BD、泰它西普的申报上市以及ADC管线药物有关,不过从鹤立鸡群的成交量也能看出来,大热之下有大涨必有大跌。

价格走势图

接下来细分到价格走势,用当天的收盘价比均线价格,然后按照百分比排序,最靠上的就是涨得最猛的。

趋势走向

这一页里放收盘价和均线缠绵的股票,从画线党来看可能走高或走低(也可能横盘调整。

再次声明,这个图表仅作探索用途,无任何投资建议,纯属就是我玩点工作之外的探索。

最后这是shinyapp的网址,微信公众号不做人不能放外部链接,想玩玩的话可以通过复制链接搜索进去:

https://lgge6l-allen-sun.shinyapps.io/InnovativeDrugShiny/

总结

本次试验了一个可以自动更新数据的R Shiny可视化面板,基本算成功。但还有很多局限:

  1. 目前的做法导致Shinyapp获取数据的速度不够快,所以网页加载速度慢(腿长能f墙也许能更快点,如果数据和面板都部署到linux服务器会更快,但我不想花钱买服务器了;

  2. 很多创新药好公司在港股,本次实践没包含港股,如果日后有精力再更;

  3. 可视化指标不系统,考虑到我不怎么玩股票,算是属于我梦到哪做哪。