文末有PTrade/QMT开通攻略,费率参考标准!
做量化交易
时,上市公司
的财务数据是策略回测和选股的核心依据—— 净利润、营收、资产负债率这些关键指标,直接影响策略的有效性。但很多用 Ptrade 的朋友反馈:“明明调用了 get-fundamentals 接口,却经常拿不到数据”、“一到盘前就拥堵,数据加载半天没反应”。
为什么 get-fundamentals 接口会 “掉链子”?
首先要明确一点:PTrade 的财务数据接口
(get-fundamentals)是通过 http 在线获取数据的。这种方式的好处是实时性强,但缺点也很明显 —— 一旦遇到网络拥堵、服务器访问高峰,就容易出现应答失败、返回数据为空的情况。
比如盘前很多人集中调用接口,或者单次请求的数据量太大,都可能导致接口“罢工”。所以想稳定获取数据,不能只靠 “单次调用”,必须先做好 “基础准备”:给接口加个 “循环迭代机制”。
简单来说,就是让程序在调用接口后判断是否拿到数据—— 如果返回为空,就自动重新调用,直到获取成功再退出循环。这一步是 “保底操作”,能解决 80% 的 “数据拿不到” 问题,但光有保底还不够,还要避开两个关键 “坑点”。
别在盘前 “扎堆” 调用,尽量错开高峰期
很多人习惯在 before-trading-start()函数里调用财务数据,因为这个函数会在交易日开盘前(默认 9:10)自动执行,刚好能为当天的策略准备数据。
但问题就出在“默认执行时间” 上 —— 所有用这个函数的人,都会在 9:10 左右同时调用接口,直接造成服务器拥堵,数据自然就拿不到了。
想解决这个问题,有两个办法:
1、给函数加“延迟”:如果一定要用 before-trading-start()函数,可以在调用财务数据前,先用 sleep()函数设置延迟。比如 sleep(600),就是让程序延迟 10 分钟(600 秒)再执行,原本 9:10 的执行时间,就变成了 9:20,完美错开高峰期。
2、改用定时函数:直接放弃 before-trading-start(),用 run-daily()函数自定义执行时间。比如把执行时间设为 9:00(比默认时间早 10 分钟),或者 9:30(开盘后),根据自己的策略需求灵活调整,避免和其他人 “挤破头”。
注意接口 “流量限制”,别一次 “贪多”
除了拥堵,另一个常见问题是“接口被限流”—— 很多人以为调用接口时,数据拿得越多越好,结果一次请求太多数据,直接触发了 Ptrade 的流量限制,接口反而用不了。
这里要牢记 get-fundamentals()接口的两个限制规则:
1、每秒调用不超过 100 次:如果需要多次调用接口,一定要在两次调用之间加 sleep()延迟,比如每次调用后 sleep(1),确保每秒调用次数在限制内。
2、单次最大调用 500 条数据:这里的 “500 条”,指的是 “1 只股票 ×1 个数据表 ×1 个字段” 算 1 条。比如你要获取 5000 只股票的 10 年一季报数据,算下来就是 5000×1×10=50000 条,远超单次限制,必须分多次调用,每次调用后 sleep(1),避免限流。
举个例子:如果要获取 5000 只股票的年报数据,建议分 10 次调用,每次调用 500 只股票的数据,每次调用后 sleep(1)秒,既符合流量限制,又能稳定拿到数据。
最优解决方案
盘前把数据下载到本地,避免反复调用占用资源
其实不管是错开高峰期,还是注意流量限制,本质上都是“减少接口实时调用的压力”。而最稳妥、最高效的方式,是提前把财务数据下载到本地。
具体操作很简单:在非交易时间(比如前一天晚上,或者当天 8:30 前),通过接口把需要的财务数据(比如所有股票的最新季报、年报)一次性下载到本地硬盘,保存成 Excel 或 CSV 文件。
这样一来,当天做策略时,直接从本地读取数据,根本不用再调用在线接口—— 既不用担心拥堵,也不用怕限流,还能减少程序对网络资源的占用,策略运行速度也会更快。
上市券商,佣金成本价,专项两融利率4.0,免费量化软件qmt和ptrade,VIP通道&独立席位,加联系方式咨询!

温馨提示:投资有风险,选择需谨慎。