问题描述
解决方案
在PTrade量化交易平台中,获取股票的周K线、月K线和季K线数据主要通过调用 get_history 或 get_price 函数来实现。
关键在于设置 frequency(频率)参数。
核心参数说明
在 get_history 或 get_price 函数中,frequency 参数支持以下设置:
- 周K线: 设置为
'1w'或'weekly' - 月K线: 设置为
'mo'或'monthly' - 季K线: 设置为
'1q'或'quarter'
代码实现示例
以下是一个完整的策略示例代码,展示了如何在 handle_data 中获取指定股票过去5个周期的周线、月线和季线数据,并打印出来。
def initialize(context):
# 初始化设置
g.security = '600570.SS' # 恒生电子
set_universe(g.security)
def handle_data(context, data):
# 1. 获取过去5周的周K线数据
# frequency='1w' 表示周线
# include=True 表示包含当前尚未结束的这一周(如果需要)
weekly_data = get_history(
count=5,
frequency='1w',
field=['open', 'high', 'low', 'close', 'volume'],
security_list=g.security,
include=True
)
log.info("周K线数据(最后5周):\n%s" % weekly_data)
# 2. 获取过去5个月的月K线数据
# frequency='mo' 表示月线
monthly_data = get_history(
count=5,
frequency='mo',
field=['open', 'high', 'low', 'close', 'volume'],
security_list=g.security,
include=True
)
log.info("月K线数据(最后5月):\n%s" % monthly_data)
# 3. 获取过去5个季度的季K线数据
# frequency='1q' 表示季线
quarterly_data = get_history(
count=5,
frequency='1q',
field=['open', 'high', 'low', 'close', 'volume'],
security_list=g.security,
include=True
)
log.info("季K线数据(最后5季):\n%s" % quarterly_data)
注意事项
- 数据合成机制:PTrade中的周线、月线、季线数据通常是由日线数据合成的。
- include参数:
- 默认情况下
include=False,即不包含当前正在进行的周期。例如,如果在周三运行策略,获取周线且include=False,则返回的数据截止到上周五。 - 如果设置
include=True,则会包含本周(截止到当前回测时间)的数据。
- 默认情况下
- count参数:表示获取K线的数量。例如
count=5且frequency='1w'表示获取最近5周的数据。 - get_price 接口:如果你需要获取指定日期范围(如 2022-01-01 到 2022-12-31)的周/月/季线,可以使用
get_price函数,参数设置逻辑相同。
Q&A
Q: 获取年K线数据应该设置什么参数?
A: 获取年K线数据,可以将 frequency 参数设置为 '1y' 或 'yearly'。
Q: 为什么有时候获取的周线数据最后一条是变动的?
A: 如果你在 get_history 中设置了 include=True,且当前处于交易周的中间(例如周三),那么最后一条周K线数据是基于本周一到周三的数据合成的,随着行情变化,这条K线的收盘价、最高价等会实时变动,直到周五收盘固定下来。
Q: get_history 返回的数据类型是什么?
A: 当查询单只股票时,通常返回 pandas.DataFrame,行索引为时间,列索引为字段(如 open, close);当查询多只股票且查询多个字段时,在 Python 3.5 环境下可能返回 pandas.Panel,在 Python 3.11 环境下通常返回 MultiIndex 的 DataFrame 或字典(取决于 is_dict 参数)。建议在处理多股数据时先打印数据结构确认。