问题描述
解决方案
在聚宽(JoinQuant)平台中,获取一只股票过去一年的日K线数据,根据使用场景(研究环境或回测策略)不同,主要有两种常用的方法。
以下是具体的代码实现和说明:
方法一:在研究环境(Research)中使用 get_price
如果您是在研究环境(Notebook)中进行数据分析,推荐使用 get_price 函数。它可以指定具体的开始和结束日期。
# -*- coding: utf-8 -*-
import datetime
from jqdata import *
# 设定股票代码
security = '000001.XSHE' # 平安银行
# 获取当前日期
end_date = datetime.date.today()
# 获取一年前的日期
start_date = end_date - datetime.timedelta(days=365)
# 获取日K线数据
# frequency='daily' 表示日线
# fields=None 默认包含 open, close, high, low, volume, money
df = get_price(security,
start_date=start_date,
end_date=end_date,
frequency='daily',
fields=['open', 'close', 'high', 'low', 'volume'])
# 打印前5行查看
print(df.head())
方法二:在回测/策略代码中使用 attribute_history
如果您是在编写策略(如 initialize, handle_data 中),通常关注的是相对于“当前回测时间点”过去的数据。此时推荐使用 attribute_history,它通过 count(数量)来获取数据。
由于一年大约有 250 个交易日,通常将 count 设为 250。
# -*- coding: utf-8 -*-
def initialize(context):
# 设置要操作的股票
g.security = '000001.XSHE'
# 每天运行一次
run_daily(market_open, time='every_bar')
def market_open(context):
# 获取过去一年的日K线数据(按250个交易日计算)
# unit='1d' 表示日线频率
# skip_paused=True 表示跳过停牌日期
history_data = attribute_history(g.security,
count=250,
unit='1d',
fields=['open', 'close', 'high', 'low', 'volume'],
skip_paused=True)
# 打印最后一天的数据(即昨天的收盘数据,因为attribute_history不包含当天未收盘的数据)
log.info(history_data.tail())
关键参数说明
- security: 股票代码,例如
'000001.XSHE'(平安银行)。 - frequency / unit: 数据频率,
'daily'或'1d'代表日线。 - fields: 需要获取的字段,常见的有:
open: 开盘价close: 收盘价high: 最高价low: 最低价volume: 成交量
- fq (复权):
get_price和attribute_history默认通常是前复权(pre),这对于策略回测是最合理的,因为它消除了分红配股对价格的干扰。如果需要真实价格,可以设置fq=None。