问题描述
不想使用set_universe函数,直接获取数据可以吗
解决方案
在 PTrade 量化交易平台中,完全可以不使用 set_universe 函数而直接获取历史数据。
根据 PTrade API 文档,set_universe 的主要作用仅仅是为 get_history 函数设定一个默认的 security_list 入参。如果你在调用获取数据的接口时,显式地传入了股票代码,就可以跳过设置股票池的步骤。
你可以通过以下两个核心接口直接获取数据:
1. 使用 get_history 接口
get_history 接口支持通过 security_list 参数直接传入单只股票代码(字符串)或多只股票代码(列表)。
代码示例:
def initialize(context):
# 不调用 set_universe
pass
def handle_data(context, data):
# 直接传入单只股票代码获取过去5天的收盘价
his_single = get_history(5, '1d', 'close', security_list='600570.SS')
log.info("单只股票历史数据:\n%s" % his_single)
# 直接传入多只股票代码获取过去5天的开盘价和收盘价
his_multi = get_history(5, '1d', ['open', 'close'], security_list=['600570.SS', '000001.SZ'])
log.info("多只股票历史数据:\n%s" % his_multi)
2. 使用 get_price 接口
get_price 接口本身就需要显式传入 security 参数,因此它天然不需要依赖 set_universe。
代码示例:
def initialize(context):
# 不调用 set_universe
pass
def handle_data(context, data):
# 获取单只股票指定时间段的数据
price_single = get_price('600570.SS', end_date='20231001', frequency='1d', count=10, fields=['open', 'close'])
log.info("get_price单只股票数据:\n%s" % price_single)
# 获取多只股票指定时间段的数据
price_multi = get_price(['600570.SS', '000001.SZ'], end_date='20231001', frequency='1d', count=10, fields='close')
log.info("get_price多只股票数据:\n%s" % price_multi)
总结
set_universe是非必须的:它只是为了方便在全局上下文中维护一个默认的股票列表。- 显式传参更灵活:在编写多标的、动态选股策略时,直接在
get_history或get_price中传入计算好的股票列表(如security_list=['xxx', 'yyy'])是更常见且推荐的做法。