3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT 中,获取某个股票在特定时间段内的所有交易日日期,可以使用 ContextInfo.get_trading_dates 函数。
ContextInfo.get_trading_dates(stockcode, start_date, end_date, count, period)
'600000.SH')。'YYYYMMDD')。'YYYYMMDD')。start_date 时,此参数会被忽略,但调用时仍需传入一个整数(如 1)作为占位符。'1d'。以下是一个完整的策略示例代码,它会在策略初始化时计算过去 30 天的日期范围,并打印出该范围内该股票的所有实际交易日。
# -*- coding: gbk -*-
import datetime
def init(ContextInfo):
# 1. 设置要查询的股票代码
stock_code = '600000.SH'
# 2. 计算过去一个月的起止日期
# 获取当前时间
now = datetime.datetime.now()
# 结束时间设为今天 (格式: YYYYMMDD)
end_date = now.strftime('%Y%m%d')
# 开始时间设为30天前
start_date = (now - datetime.timedelta(days=30)).strftime('%Y%m%d')
# 3. 调用API获取交易日列表
# 参数说明:
# stockcode: 股票代码
# start_date: 开始日期
# end_date: 结束日期
# count: 1 (因为指定了start_date,这个参数不起作用,但必须填一个整数)
# period: '1d' (日线周期)
trading_dates = ContextInfo.get_trading_dates(stock_code, start_date, end_date, 1, '1d')
# 4. 打印结果
print("=" * 30)
print("查询标的: {}".format(stock_code))
print("查询范围: {} 至 {}".format(start_date, end_date))
print("交易日数量: {}".format(len(trading_dates)))
print("交易日列表: ")
print(trading_dates)
print("=" * 30)
def handlebar(ContextInfo):
# 本示例仅在init中演示获取数据,handlebar中无需操作
pass
trading_dates 是一个包含字符串的列表(例如 ['20231010', '20231011', ...])。get_trading_dates 返回的是交易所的交易日历。period 参数必须设置为 '1d' 才会返回 'YYYYMMDD' 格式的日期。如果设置为分钟周期(如 '1m'),返回的将是包含时间的字符串(如 '20231010093100')。Q: 如果我只想获取最近的 N 个交易日,而不是按日期范围获取,该怎么写?
A: 可以将 start_date 设置为空字符串 '',然后通过 count 参数指定数量。例如获取最近 20 个交易日:ContextInfo.get_trading_dates('600000.SH', '', '20231027', 20, '1d')。
Q: get_trading_dates 返回的列表是排序的吗?
A: 是的,返回的列表是按照时间从早到晚升序排列的。
Q: 为什么代码第一行要加 # -*- coding: gbk -*-?
A: QMT 的 Python 编辑器和底层环境默认使用 GBK 编码。添加此声明可以防止在代码中使用中文字符(如注释或打印信息)时出现乱码或报错。