VeighNa量化社区
你的开源社区量化交易平台 | vn.py | vnpy
LLM学员
avatar
加入于:
帖子: 30
声望: 0

我的策略,在回测时一切正常,但是在用simnow做模拟实盘时,发出交易指令后交易没有被执行,也没有任何报错。我在每条buy/sell/short/cover代码后面都做了记录,证明前面的交易指令代码已经运行过了,但是这个交易并没有被执行;我在on_order里面也写了一条打印订单信息的代码,没有任何输出,但是我在回测的时候,这条代码是会输出订单信息的。用paperaccount做模拟的时候也是一样的情况。
另外,同样的策略,在刚开始做模拟实盘的时候,是可以正常交易的,只是当时的no_ui程序有问题,策略不能持续顺利运行。后来把no_ui程序搞定了,策略可以按时启停并顺利运行了,又出现了这个问题。
请教一下,这个可能是什么原因引起的?或者说要从哪里入手进行排查?

Member
avatar
加入于:
帖子: 1834
声望: 140

buy/sell/short/cover函数调用后,都会返回委托号列表。

可以检查下该列表是否为空,为空则说明委托失败,可能原因包括:

  1. 没有启动策略交易
  2. RiskManager模块风控拦截
  3. 交易接口状态异常(网络断线、合约代码找不到等)

按照顺序排查看看吧

LLM学员
avatar
加入于:
帖子: 30
声望: 0

MTF wrote:

buy/sell/short/cover函数调用后,都会返回委托号列表。

可以检查下该列表是否为空,为空则说明委托失败,可能原因包括:

  1. 没有启动策略交易
  2. RiskManager模块风控拦截
  3. 交易接口状态异常(网络断线、合约代码找不到等)

按照顺序排查看看吧
请问要在哪里看委托号列表?我在on_order下面写了一条打印语句如下,不会有任何打印输出,是不是说明调用buy/sell/short/cover函数后根本就没有发出委托(在回测的时候,每次调用buy/sell/short/cover函数这条打印语句都会有相应的输出)?
def on_order(self, order: OrderData):
"""
Callback of new order data update.
"""
print("order:", order.datetime, order.orderid,
order.direction, order.price, order.status)

您说的几个原因,目前情况如下:
1、策略交易有启动。我在策略中有写了打印策略指标、交易信号、是否调用了buy/sell/short/cover函数等的指令,每跟K线都有正确的打印输出。
2、我不知道有没有启用RiskManager,应该也没有动过风控拦截参数,查看了risk_manager_setting.json,内容是空({})。打开VN Station图形界面,也看到没有启动RiskManager模块,然后尝试启动了模块查看,里面的参数也都是默认值,都设得比较大,不至于拦截。之前都没注意到有这个模块。
3、交易接口没有问题,能正确接收行情数据,显示的每根K线的收盘价都是正确的,这应该也说明能找到合约代码。

我感觉调用buy/sell/short/cover函数后根本就没有send_order,所以on_order里面的print语句也就不会被执行。
请问还可以进行哪些排查?

LLM学员
avatar
加入于:
帖子: 30
声望: 0

顺便说一下,每次下单都是只下1手

Member
avatar
加入于:
帖子: 1834
声望: 140
vt_orderids = self.buy(xxxx)

print(vt_orderids)

每次委托后,成功正常发单都会返回vt_orderids列表,如果为空则说明委托失败了

LLM学员
avatar
加入于:
帖子: 30
声望: 0

MTF wrote:

vt_orderids = self.buy(xxxx)

print(vt_orderids)

每次委托后,成功正常发单都会返回vt_orderids列表,如果为空则说明委托失败了

确实是委托失败了,委托号列表为空。策略不断调用buy函数,但是委托列表一直为空,pos也一直为零。如下图:

description

LLM学员
avatar
加入于:
帖子: 30
声望: 0

请问有什么建议的解决方案或者要怎么继续排查委托失败的原因吗?

Member
avatar
加入于:
帖子: 1834
声望: 140
print(self.trading)

看下策略启动交易了没

LLM学员
avatar
加入于:
帖子: 30
声望: 0

MTF wrote:

print(self.trading)

看下策略启动交易了没

self.trading是False,那就是没有启动交易了,请问这个要怎么解决?

Member
avatar
加入于:
帖子: 1834
声望: 140

调用策略引擎的start_all_strategies启动

LLM学员
avatar
加入于:
帖子: 30
声望: 0

MTF wrote:

调用策略引擎的start_all_strategies启动

一直都有调用这个呀,请问可能是什么原因造成没有启动呢:

description

Member
avatar
加入于:
帖子: 1834
声望: 140

init是要花费时间的,完成后才能去start,所以你调用init_all_strategies后,sleep(60)应该就行了

LLM学员
avatar
加入于:
帖子: 30
声望: 0

MTF wrote:

init是要花费时间的,完成后才能去start,所以你调用init_all_strategies后,sleep(60)应该就行了

加了sleep(60)后就没问题了。非常感谢@MTF

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】