问题描述
老师,在股票软件中,周线一般都是以周五日为一个K线的,量化中如何获得周线呢?如get_pritce中只支持天、分钟、月,如果按7d取出的数肯定不对呀
解决方案
在 JoinQuant(聚宽)量化平台中,如果您想获取标准的周线数据(即以自然周为单位,通常以周五收盘为结束的 K 线),使用 get_price 函数传入 7d 确实是不准确的,因为 7d 代表的是滚动的 7 个交易日,而不是自然周。
为了获取标准的周线数据,强烈推荐使用 get_bars 函数。
使用 get_bars 获取周线数据
get_bars 函数专门用于获取各种时间周期的 bar 数据,其 bar 的分割方式与主流股票软件完全相同。它原生支持 '1w'(一周)作为时间单位。
函数说明
get_bars(security, count, unit='1d', fields=['date', 'open','high','low','close'], include_now=False, end_dt=None, fq_ref_date=None, df=False)
unit参数:将其设置为'1w'即可获取标准的周线数据。security:标的代码,如'000001.XSHE'。count:获取的周线数量。fields:需要获取的字段,如['date', 'open', 'high', 'low', 'close', 'volume']。df:设置为True可以直接返回 pandas.DataFrame 格式,方便数据处理。
代码示例
以下是一个在策略或研究环境中获取平安银行(000001.XSHE)最近 5 周周线数据的示例:
from jqdata import *
import datetime
# 获取平安银行最近5周的周线数据(不复权)
# 注意:unit='1w' 代表一周
weekly_bars = get_bars('000001.XSHE', count=5, unit='1w',
fields=['date', 'open', 'high', 'low', 'close', 'volume'],
include_now=False,
end_dt=datetime.datetime.now(),
fq_ref_date=None,
df=True)
print(weekly_bars)
为什么不用 get_price?
虽然 get_price 是一个非常常用的数据获取函数,但它的 frequency 参数主要支持 'Xd'(X天)和 'Xm'(X分钟)。如果您传入 '7d',它会将过去的 7 个交易日合并为一根 K 线,这与我们通常理解的“周一到周五”的自然周线在时间对齐上是完全不同的。
总结
- 错误做法:
get_price(..., frequency='7d')-> 得到的是滚动 7 个交易日的合成 K 线。 - 正确做法:
get_bars(..., unit='1w')-> 得到的是与主流炒股软件一致的标准自然周线。