MarketPosition在onbar里始终为0是怎么回事?
写了个实盘交易测试程序,开仓后在onorder里打印日志明明MarketPosition的值已经变为1了(开了多单),但在onbar里还是为0,平仓操作sell不成功,没有产生实际的委托单,问下这是怎么回事?哪里设置不对吗?
写了个实盘交易测试程序,开仓后在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的值,对吧?
回复:对
回复:感谢,信号闪烁问题基本解决。又有个新问题,策略的图表信号操作如何实现锁仓功能?我在init中设了允许双向持仓: SetTradeSide(1);但是在持有空单的情况,调用buy反向开多,返回结果是0,无法反向开单。请教下该如何实现锁单的功能?
回复:这个不清楚,我不用这个功能。你重新发个贴问。