12下一页
返回列表 发布新帖

请教passorder中的quicktrade=1问题

3511 10
发表于 2024-1-16 11:12:51 | 显示全部楼层 阅读模式

采用 quickTrade参数设置为 1时,非历史 bar 上执行时(ContextInfo.is_last_bar()True),只要策略模型中调用到就触发下单交易。

这是quicktrade=1时的passorder功能介绍,我试了一下,发现在9点30分的08、10、13、16、19秒进行了下单,一共下单5次,是不是quicktrade=1且passorder函数被调用时会固定下单5次?

请各位大佬解惑。

评论10

*******8966
发表于 2024-1-16 13:10:09 | 显示全部楼层
这个情况我遇到过,应该是你下单条件那里有BUG,比如你设置了当持仓为零、有买入信号时执行passorder函数,函数下单后因为还未成交,持仓仍然为零,此时买进信号还在,所以又触发了passorder函数,直至成交后,持仓不为零了,函数才终端。
解决思路是:在代码中设置一个全局变量mp,执行一次买进passorder后mp==1,此时即便订单未成交,也不会再次出发passorder,平仓时把mp赋值为0即可。
*******7025楼主
发表于 2024-1-16 14:51:05 | 显示全部楼层
明白了,我的代码是有买入信号时执行passorder函数,看来要限制一下passorder函数的执行了,谢谢你~
rzp
发表于 2024-1-17 09:50:04 | 显示全部楼层
这是因为handlebar在盘中是逐tick运行,比如1分钟大约有20个tick,那么这根k线上,handlebar就会被调用20次,如果你的代码没有控制好下单频率,最多就会下单大约20次左右
*******7025楼主
发表于 2024-1-17 10:23:54 | 显示全部楼层
rzp 发表于 2024-1-17 09:50
这是因为handlebar在盘中是逐tick运行,比如1分钟大约有20个tick,那么这根k线上,handlebar就会被调用20次 ...

我用ContextInfo.holdings来控制下单,当if ContextInfo.holdings==0:时买入,并记ContextInfo.holdings为买入的数量,比如ContextInfo.holdings=2000,这时候应该不符合if的条件 ContextInfo.holdings==0,不过刚才试了还是一直在下单,不知道怎么回事。
*******7025楼主
发表于 2024-1-17 10:30:16 | 显示全部楼层
rzp 发表于 2024-1-17 09:50
这是因为handlebar在盘中是逐tick运行,比如1分钟大约有20个tick,那么这根k线上,handlebar就会被调用20次 ...

:'(我就是想让它只快速交易一次
rzp
发表于 2024-1-17 11:21:07 | 显示全部楼层
*******7025 发表于 2024-1-17 10:30
我就是想让它只快速交易一次

http://dict.thinktrader.net/inne ... 7%E4%B8%8B%E5%8D%95   
参考这里的方法,使用全局变量控制
*******7025楼主
发表于 2024-1-17 12:58:27 | 显示全部楼层
rzp 发表于 2024-1-17 11:21
http://dict.thinktrader.net/innerApi/code_examples.html?id=e2M5nZ#%E9%9B%86%E5%90%88%E7%AB%9E%E4%B ...

好的,我试试
*******7025楼主
发表于 2024-1-17 13:47:51 | 显示全部楼层
rzp 发表于 2024-1-17 11:21
http://dict.thinktrader.net/innerApi/code_examples.html?id=e2M5nZ#%E9%9B%86%E5%90%88%E7%AB%9E%E4%B ...

大佬,我用了那个方法,但是好像交易函数又不会执行了,这是什么情况?代码如下
def handlebar(ContextInfo):
        global mp
        if mp==0:
                print(mp)
                mp += 1
                userparam = {"OrderType": 1,"PriceType": 5,"MaxOrderCount": 3,"SinglePriceRange": 0,"PriceRangeType": 0,"PriceRangeRate": 1,"SuperPriceType":0,"SuperPriceRate":0,"VolumeType":10,"VolumeRate":1,"SingleNumMin": 100,"SingleNumMax": 10000,"ValidTimeElapse":60,"PlaceOrderInterval":10,"UndealtEntrustRule":4}
                algo_passorder(23,1101,ContextInfo.accountID,'601398.SH',-1,0,200,'实盘委托',1,'实盘委托1',userparam ,ContextInfo)
                print(mp)
rzp
发表于 2024-1-19 08:43:33 | 显示全部楼层
*******7025 发表于 2024-1-17 13:47
大佬,我用了那个方法,但是好像交易函数又不会执行了,这是什么情况?代码如下
def handlebar(ContextIn ...

加一个条件 if mp==0 and ContextInfo.is_last_bar():

回复

您需要登录后才可以回帖 登录 | 立即注册

客服专线

400-080-8112

用思考的速度交易,用真诚的态度合作,我们是认真的!
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2025 迅投QMT社区 版权所有 All Rights Reserved. 蜀ICP备19002686号-2
关灯 快速发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表