
有同学问我之前文章悬浮的K线图 怎么弄的,这里写一篇文章介绍下。
最近行情回暖,大家都在忙着交易,我也没太多心思去写那些晦涩难懂的底层技术分析。所以,这篇文章就权当是借着这个有趣的话题,和大家“水一水”,分享一个量化开发中极其实用但常被忽视的“偷懒”技巧。
在做量化交易系统或者日常股市复盘分析时,我们经常面临一个非常具体的需求:快速获取并直观地展示某只股票的K线走势图。
通常情况下,为了实现这个功能,我们只有两条路走:
那么,有没有一种方法,既不需要复杂的绘图逻辑,也不需要申请付费的 API Key,就能通过最简单的代码生成一张带有专业指标的K线图呢?
答案当然是肯定的。
在编程领域,“不要重复造轮子”是黄金法则。既然东方财富、同花顺等专业金融网站已经具备了极其强大的绘图服务,我们为什么不能直接调用它们的生成结果呢?
这就是今天分享的小技巧:利用东方财富网的公开 K线图片生成接口。
通过简单的抓包分析,我们发现东方财富网有一个用于生成 K 线图片的公开接口。通过构造特定的 URL 参数,服务器会直接渲染好一张包含最新K线数据以及 MACD 指标的精美图片,并返回给我们。我们只需要做一件事:字符串拼接。
下面我提供一个简单的例子。
import numpy as np
import pandas as pd
def get_stock_pic_url(code_str: str) -> str:
"""
根据股票代码生成东方财富K线图(含MACD)的URL链接
:param code_str: 股票代码,支持 '600000' 或 '600000.SH' 格式
:return: 图片URL字符串,输入无效时返回空字符串
"""
# 1. 异常值处理:防止空值或NaN导致程序崩溃
# 在实际数据处理中,我们常会遇到NaN,防御性编程必不可少
if not code_str or pd.isna(code_str):
return ""
# 2. 数据清洗:强制转换为字符串并去除首尾空格
code_str = str(code_str).strip()
if not code_str:
return ""
# 3. 市场前缀默认为 "0."(通常代表深市)
prefix = "0."
# 4. 交易所后缀识别逻辑
# 优先处理带有显式后缀的标准代码格式
if code_str.endswith('.SH'): # 上海证券交易所
prefix = "1."
code_str = code_str[:-3] # 去掉.SH后缀,只保留数字
elif code_str.endswith('.SZ'): # 深圳证券交易所
prefix = "0."
code_str = code_str[:-3]
elif code_str.endswith('.BJ'): # 北京证券交易所
prefix = "0." # 北所在该接口中通常复用深市逻辑
code_str = code_str[:-3]
else:
# 5. 兜底逻辑:如果没有后缀,根据首位数字智能推断
# 沪市主板通常是6开头,科创板是5开头 -> 使用前缀 1.
# 深市主板/中小板是0开头,创业板是3开头 -> 使用前缀 0.
if code_str.startswith(('6', '5')):
prefix = "1."
# 6. 拼接最终URL
# 参数解析:
# nid: 唯一标识 = 前缀 + 代码 (例如 1.600000)
# type: 图表类型,留空即可
# unitWidth: K线宽度,-6代表自适应宽度
# formula: 技术指标公式,这里设置为MACD,也可以换成KDJ等其他指标
# AT: 未知参数,通常设为1
# imageType: KXL代表K线图
url = (f"https://webquoteklinepic.eastmoney.com/GetPic.aspx?"
f"nid={prefix}{code_str}&type=&unitWidth=-6&ef=&formula=MACD&AT=1&imageType=KXL")
return url
# 测试用例
print(get_stock_pic_url("600000.SH")) # 浦发银行
print(get_stock_pic_url("000001")) # 平安银行
print(get_stock_pic_url("688981")) # 科创板股票拿到了图片 URL,这还只是第一步。既然是在做量化客户端,如何优雅地展示它?
在我的实际项目(基于 PySide6/PyQt 开发)中,我将这个逻辑封装成了 UI 组件。具体交互如下:
cellEntered 信号绑定槽函数。get_stock_pic_url 函数,获取链接。QNetworkAccessManager 下载图片数据,将其转换为 QPixmap,最后设置在一个 QLabel 或 QToolTip 中,跟随鼠标位置实时弹窗。这样,用户在看行情列表时,鼠标轻轻一扫,该股票的历史走势、MACD金叉死叉情况一目了然,无需点击进入详情页。这种微交互,极大地提升了分析效率。
在量化开发的道路上,我们往往容易陷入一种误区:过度追求技术的“硬核”程度。 似乎只有自己手写了所有的算法、计算了所有的指标、绘制了所有的像素,才算是一个合格的量化程序员。
但现实是,个人开发使用讲究的是效率和结果。
这个基于东方财富网的图片生成小技巧,虽然看起来只是简单的字符串拼接,没有什么高深的算法,但它完美诠释了“站在巨人的肩膀上”的智慧。
不需要去请求繁琐的K线数据,不需要去计算MACD的DIF和DEA线,不需要去配置画布坐标。只需一行URL,专业的图表即刻呈现。
最后,聊聊行情。
最近A股市场行情好了很多,大家的热情都被点燃了。在这种时候,我们的精力应该更多地放在市场策略的执行和机会的捕捉上,而不是死磕技术细节。