3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 Ptrade 量化交易平台中,回测环境和实盘(交易)环境使用的是同一套 API 体系,但底层的数据源处理逻辑和时间基准存在显著差异。了解这些差异并掌握切换技巧,是保证策略从回测平稳过渡到实盘的关键。
get_history 或 get_price 时,系统会根据当前回测进行到的虚拟时间(即 context.blotter.current_dt)来返回该时间点之前的数据。它不会返回未来的数据(防止未来函数)。handle_data 按设定的频率(日或分钟)推进。tick_data 函数获取每3秒一次的快照,使用 get_snapshot 获取实时盘口,以及使用 on_order_response 和 on_trade_response 接收实时的委托和成交主推。get_snapshot 的 trade_status 字段实时判断股票是否处于停牌状态(如返回 'HALT' 或 'SUSP')。在 Ptrade 中,你不需要手动更改数据源的连接地址或配置。平台通过运行模块(回测模块 vs 交易模块)自动为你路由到正确的数据源。
为了让同一套策略代码能够同时兼容回测和实盘环境,Ptrade 提供了 is_trade() 函数。你可以利用这个函数在代码中进行逻辑分支处理。
is_trade() 进行环境兼容is_trade() 函数用于判断当前代码是否运行在交易(实盘/模拟盘)环境中。如果是,返回 True;如果在回测环境中,返回 False。
代码示例:
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
def handle_data(context, data):
# 获取历史数据,回测和实盘调用方式完全一样
# 回测时返回虚拟时间前的数据,实盘时返回真实当前时间前的数据
hist = get_history(5, '1d', 'close', g.security)
# 区分回测和实盘的特定逻辑
if is_trade():
log.info("当前运行场景:实盘交易")
# 实盘中可以获取实时快照
snapshot = get_snapshot(g.security)
if snapshot and snapshot.get(g.security):
current_price = snapshot[g.security]['last_px']
log.info(f"实盘最新价: {current_price}")
else:
log.info("当前运行场景:历史回测")
# 回测中通常直接使用 data 对象获取当前周期的价格
current_price = data[g.security]['close']
log.info(f"回测当前周期收盘价: {current_price}")
# 下单逻辑(API一致,底层自动路由)
if current_price > hist['close'].mean():
order(g.security, 100)
is_trade() 函数来处理回测和实盘中可能存在的逻辑差异(如实盘特有的快照查询或主推处理)。