常见问题
ptrade模拟交易常见问题
更加详细的ptrade常见问题解决方法,后续会慢慢整理。
也可找寻博主历史文章,搜索关键词使用方案,比如本文涉及量化平台部署!
关于模拟交易
关于模拟交易的稳定性
常见的影响交易稳定性的因素来自于几方面:
1、历史行情K线数据服务器更新异常。这种情况往往可以通过比较入参的K线数量、实际返回数据框的长度、时间戳index去重后的返回数据框的长度来做判断(看三者是否保持一致)。
2、实时行情数据获取失败。实时行情源的推送并不能保证一直稳定,因此需要做数据保护:比如
def initialize(context):
# 初始化此策略
# 设置我们要操作的股票池, 这里我们只操作一支股票
g.security = ['600570.SS','600571.SS']
set_universe(g.security)
#每3秒运行一次主函数
run_interval(context, func, seconds=3)
def func(context):
for stock in g.security:
#获取最新价
snapshot = get_snapshot(stock)
# 非空判断
if snapshot[stock]:
# 字段数据做保护
price = snapshot[stock].get('last_px', 0)
if price == 0:
log.info((stock,'该股在本tick行情数据异常,不进行判断'))
continue
order(stock, 100, limit_price=price)
def handle_data(context, data):
pass
3、财务数据获取失败。财务数据接口是在线向数据源调用的接口,瞬时调用量过大或者其他导致网络堵塞的原因都有可能使得获取失败,因此建议加入重连机制做保护(可参考单因子demo)。
4、服务器环境异常。这种情况是用户主观不能控制的,但可以通过持久化处理,让策略在短暂停止后,重新拉起并保持原有的策略逻辑连贯(可参考持久化说明)。
关于模拟交易的账户数据更新频率
模拟交易和实盘交易的账户数据同步理论上是6秒一次,包括资金、持仓、订单状态、撤单状态等。因此用户需要自建一定的中间变量做过渡,防止重复交易或者重复判断。
tick_data和run_interval的关系
tick_data和run_interval都可以实现tick级别周期策略,tick_data固定3秒一个间隔,run_interval可以随意设置运行间隔时间,最小间隔3秒,数据源也都是行情快照数据,因此可以选择其一进行策略设计。