使用SOPT接口的时候,调用下面的语句
status = engine.main_engine.get_gateway(interface).td_api.contract_inited
status为True以后,调用get_all_accounts()函数,试了10次,有8次返回结果是[],只有2次正常,可以返回正确的账户信息,结果非常不稳定,请问是什么原因?
使用SOPT接口的时候,调用下面的语句
status = engine.main_engine.get_gateway(interface).td_api.contract_inited
status为True以后,调用get_all_accounts()函数,试了10次,有8次返回结果是[],只有2次正常,可以返回正确的账户信息,结果非常不稳定,请问是什么原因?
可以发起连接以后sleep更久或者在onRspQryTradingAccount函数进行打印排查
sleep 3秒也不行,onRspQryTradingAccount函数在哪里,如何使用呢?放在什么位置?在engine.get_all_accounts()之前还是之后?
-- 这个问题在CTP接口中并不发生,只发生在SOPT接口中。
onRspQryTradingAccount函数是sopt_gateway接收并向上层账户信息的函数
我使用:engine.main_engine.get_gateway('SOPT').SoptTdApi.onRspQryTradingAccount()打印时,报错:
AttributeError: 'SoptGateway' object has no attribute 'SoptTdApi'
换成下面的方法调用,
from vnpy_sopt.gateway.sopt_gateway import SoptTdApi
SoptTdApi.onRspQryTradingAccount(SoptGateway)
也报错了:TypeError: SoptTdApi.onRspQryTradingAccount() missing 4 required positional arguments: 'data', 'error', 'reqid', and 'last'
请问应当如何调用onRspQryTradingAccount函数?
不要调用,直接在接口文件的这个函数下打印
print了一下,如图所示,请问account的值为什么是[]?导致了报错。
因为登录初始化尚未完成,多sleep等待一会即可
我sleep(2)试试,比较奇怪的是,为什么CTP接口没有报错,仅是SOPT报错呢?
CTP应该同样会报错的,除非你是等待初始化完成后才运行的策略脚本