3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
您好!您观察得非常仔细。确实,在 JoinQuant (聚宽) 平台中,history、attribute_history 和 get_price 这三个常用的数据获取函数在可选参数(如 df/panel, skip_paused, fq)的排列顺序上存在不一致的情况。
这种现象在很多大型且持续迭代的软件库或 API 中都很常见,主要原因包括:
history 侧重于获取多个标的的单个字段。attribute_history 侧重于获取单个标的的多个字段。get_price 是最通用的,支持多标的、多字段以及时间段查询。count, security)的位置不同,后续追加的可选参数也就顺势排在了后面,从而造成了整体顺序的差异。作为平台的使用者,我们无法直接修改底层 API。虽然统一参数顺序在强迫症看来非常完美,但考虑到破坏向后兼容性带来的巨大风险,官方通常不会去修改这些已经稳定运行多年的 API 签名。
在 Python 中,解决参数顺序不一致且参数众多的最佳方法是始终使用关键字参数来传递可选参数。这样不仅可以完全无视参数在 API 定义中的物理顺序,还能极大地提高代码的可读性。
强烈建议的调用方式示例:
# 1. 调用 history
h = history(count=5, unit='1d', field='close', security_list=['000001.XSHE'], df=True, skip_paused=False, fq='pre')
# 2. 调用 attribute_history
ah = attribute_history(security='000001.XSHE', count=5, unit='1d', fields=['open', 'close'], df=True, skip_paused=False, fq='pre')
# 3. 调用 get_price
p = get_price(security='000001.XSHE', count=5, frequency='daily', fields=['open', 'close'], panel=False, skip_paused=False, fq='pre')
使用关键字参数的好处:
skip_paused 是在 fq 前面还是后面。True 或 False 代表的是什么意思,而不是看到一堆不明所以的布尔值。总结来说,虽然 API 设计上的不一致确实存在,但通过 Python 优秀的关键字传参特性,我们可以完美规避这个问题,写出优雅且健壮的量化策略代码。