金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 2890|回复: 11

无响应。。怎么排查

[复制链接]

13

主题

54

帖子

54

积分

Rank: 6Rank: 6

等级: 机构版

注册:
2021-10-18
曾用名:
发表于 2021-12-15 11:55 | 显示全部楼层 |阅读模式
有的时候策略在平仓之后会出现如下报错。。

执行Python脚本时遇到错误。
策略: <。。。>
运行: <。。。。>
类型: 运行时错误
描述: 无响应

我发现好像这个报错只在单子成交的时间和handle bar被触发的时间很近的时候才会有。比如我的策略如果是五分钟bar,那么如果我的订单恰巧在5,10,15分钟左右成交就会有这个错。
还有经过排查发现单子成交后order_status()好像都没有执行。
不确定是不是上面的原因,请问这个该怎么排查?。。。谢谢


回复

使用道具 举报

3

主题

2万

帖子

2万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2021-12-15 12:43 | 显示全部楼层
后面版本会增加设置,里面可以自己设函数内响应的时长
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

13

主题

54

帖子

54

积分

Rank: 6Rank: 6

等级: 机构版

注册:
2021-10-18
曾用名:
 楼主| 发表于 2021-12-15 13:32 | 显示全部楼层
资深技术02 发表于 2021-12-15 12:43
后面版本会增加设置,里面可以自己设函数内响应的时长

所有这是我说的那个原因么?订单成交和handle bar时间靠的太近?
能详细说一下这和函数响应的时长有什么关系么,不太懂谢谢

补充内容 (2021-12-15 13:33):
所*以
回复

使用道具 举报

3

主题

2万

帖子

2万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2021-12-15 13:36 | 显示全部楼层
不是时间太近,是你handle_bar里面花费时间太长,软件发现你一直卡在那边就给报错了

后面会增加设置,就比如你设置响应时长比如5分钟,那么即使你函数卡在那里计算5分钟我也不会去报错就等你计算结束会
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

13

主题

54

帖子

54

积分

Rank: 6Rank: 6

等级: 机构版

注册:
2021-10-18
曾用名:
 楼主| 发表于 2021-12-16 11:31 | 显示全部楼层
资深技术02 发表于 2021-12-15 13:36
不是时间太近,是你handle_bar里面花费时间太长,软件发现你一直卡在那边就给报错了

后面会增加设置,就 ...

但是比较奇怪的是,这个问题只在我根据你之前的建议用了timer自制stop order才有的。也就是完全一样的策略逻辑,以前我用的你们自带的stop order 就没有过这个问题。


补充内容 (2021-12-16 11:36):
比如今天早上这个策略一开盘(9:00:54), 策略的timer(设的1s)里的条件就触发了, 然后发出了market order平仓成功, 之后就无响应了。。。
回复

使用道具 举报

13

主题

54

帖子

54

积分

Rank: 6Rank: 6

等级: 机构版

注册:
2021-10-18
曾用名:
 楼主| 发表于 2021-12-16 13:10 | 显示全部楼层
我又看了一下我打印的日志:

9:00:03 我的handle_bar()执行完毕
9:00:54 timer触发,平仓成功

之后报错,order_status()没有运行

我的timer(func)里的func()是这么写的:
def func(context):
     p = get_dynainf(context.s, 7)
     if p < ...:
          sell_close(..)
     killtimer(func)

这样写会不会有无限循环?不这样写我又不确定要咋哪里killtimer...
回复

使用道具 举报

3

主题

2万

帖子

2万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2021-12-16 13:21 | 显示全部楼层
这样看没问题啊,建议你多测试下,类似我这样代码呢
python编写很多需要自己多测试,真的建议先自己花时间调条看各种都试试看看可能是那里问题

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号? 微信登录

x
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

3

主题

2万

帖子

2万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2021-12-16 13:23 | 显示全部楼层
#  在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。--(必须实现)
def init(context):
    context.n=0
    settimer(msg, 1000)
    print(4)
   

# before_trading此函数会在每天基准合约的策略交易开始前被调用,当天只会被调用一次。--(选择实现)
def before_trading(context):
    pass


# 你选择的品种的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新。--(必须实现)
def handle_bar(context):
    pass
   
   
# after_trading函数会在每天交易结束后被调用,当天只会被调用一次。 --(选择实现)
def after_trading(context):
    pass
   
   
def msg(context):
    context.n+=1
    print(context.n)
    if context.n>10:
        print(5)
        killtimer(msg)


还有我这样,输出的也正常
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

13

主题

54

帖子

54

积分

Rank: 6Rank: 6

等级: 机构版

注册:
2021-10-18
曾用名:
 楼主| 发表于 2021-12-16 13:29 | 显示全部楼层
资深技术02 发表于 2021-12-16 13:23
#  在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。--(必须实现) ...

嗯。。。我这样试过才写更复杂的策略的。。。而且这个问题一会有一会没有。。已经排查了两周了。。我再试试。。   

还有我现在是同一个策略分别独立的跑若干个品种(创建若干个新策略,不是用一个循环)这样会不会导致这个问题?
回复

使用道具 举报

3

主题

2万

帖子

2万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2021-12-16 13:38 | 显示全部楼层
是不是中间点停止策略啥的,刚才测试我点中途去停止策略会导致未响应。正常等计时器自己完成任务然后停掉都ok

另外set计时器是不是就set一次的,不要handle_bar里面不断去创建

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号? 微信登录

x
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2024-9-20 11:51 , Processed in 0.300940 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表