vn.py量化社区
By Traders, For Traders.
Member
avatar
加入于:
帖子: 21
声望: 0

请问执行buy(bar.close_price, 1)之后self.pos并没有变化,导致后面重复执行self.pos == 0的这个分支,之后self.pos再突然加上这个漏掉的1,这到底是什么原因?(只有多开和多平,都是1手,pos是不可能为2的啊,正常来说列表只有两个元素,因为这原因多执行了一次,出现了列表有4个元素),是线程的问题么???

再次调用on_bar之后self.pos为 1 ######
[2128.0, 2092.0]
再次调用on_bar之后self.pos为 1 ######
[2128.0, 2092.0]
sell(price, 1)
再次调用on_bar之后self.pos为 0 ######
再次调用on_bar之后self.pos为 0 ######
再次调用on_bar之后self.pos为 0 ######
buy(price, 1)
再次调用on_bar之后self.pos为 0 ######
再次调用on_bar之后self.pos为 0 ######
buy(price, 1)
再次调用on_bar之后self.pos为 1 ######
[2492.0, 2400.0, 2747.0, 2608.0]
再次调用on_bar之后self.pos为 1 ######
[2492.0, 2400.0, 2747.0, 2608.0]
再次调用on_bar之后self.pos为 2 ######
[2492.0, 2400.0, 2747.0, 2608.0]
再次调用on_bar之后self.pos为 2 ######

Member
avatar
加入于:
帖子: 21
声望: 0

数据多的时候就出错,少的时候还可以。
希望各位大佬能帮帮忙,说说出错的原因。
谢谢了。

Administrator
avatar
加入于:
帖子: 3566
声望: 189

buy(bar.close_price, 1),是以close_price的价格挂出一个买入限价单,这个限价单到下一根K线才会允许撮合,所以下一个K线如果涨了,你的这个委托就没法成交,导致继续等待。

因此如果希望立即成交的,可以用bar.close_price+10,这种超价的方式来实现,和现实中的交易是一回事。

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