写了个实盘交易测试程序,开仓后在onorder里打印日志明明MarketPosition的值已经变为1了(开了多单),但在onbar里还是为0,平仓操作sell不成功,没有产生实际的委托单,问下这是怎么回事?哪里设置不对吗?
有点像出现了信号闪烁。最新的bar还没有运行完,当前出现信号后驱动onorder域,此时MarketPosition等于1,过一会价格回调或者其它原因,导致信号没了,onbar域再运行的时候MarketPosition又等于0了。
对啊,为什么啊?我达到条件开仓了,那onorder里成交后=1了,没有提交平仓操作,它MarketPosition为什么自动变回0了?
因为markeposition计算的是信号持仓,不是实际持仓。在程序运行onorder域的时候图表上是有信号的,所以markeposition=1。当信号闪烁没了以后,markeposition就会=0,即时你实际上已经有仓位也是=0,因为他是根据信号计算的。
那实盘里要平仓得怎么操作啊?sell函数明确要求marketposition要<>0:

我觉得最好的方法就是避免信号闪烁,把信号固定住,这样marketposition与实际持仓就能对应起来了。
所以说其实信号闪烁是不允许的,否则实际上实盘就会不一致,而信号闪烁表现在变量上就是marketposition的值,对吧?