3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在PTrade量化交易平台中,获取股票的周K线、月K线和季K线数据主要通过调用 get_history 或 get_price 函数来实现。
关键在于设置 frequency(频率)参数。
在 get_history 或 get_price 函数中,frequency 参数支持以下设置:
'1w' 或 'weekly''mo' 或 'monthly''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)
include=False,即不包含当前正在进行的周期。例如,如果在周三运行策略,获取周线且 include=False,则返回的数据截止到上周五。include=True,则会包含本周(截止到当前回测时间)的数据。count=5 且 frequency='1w' 表示获取最近5周的数据。get_price 函数,参数设置逻辑相同。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 参数)。建议在处理多股数据时先打印数据结构确认。