请教:实时行情下MarketPosition不能实时更新
遇到的问题:在实时行情下,当以0为第1个参数调用平仓指令Sell或BuyToCover后,在下一个 tick数据的OnBar中调用MarketPosition,返回值不为0,也就是说本应该清仓的,但却一直没有成功,从而导致一直在不停调用平仓指令。直到当前Bar因为时间结束,开始下一个Bar时,MarketPosition才返回0。账户环境:模拟账户请教是我的代码逻辑有问题吗?伪代码如下:DefsMonitorLong(){ if (MarketPosition() != 1) { return; } // 因为实时行情时MarketPosition一直返回1,导致不停调用下面平仓代码 if (Low < my_exit_pric) { Sell(0, Low); }}MonitorShort(){ if (MarketPosition() != -1) { return; } // 因为实时行情时MarketPosition一直返回-1,导致不停调用下面平仓代码 if (High> my_exit_price) { BuyToCover(0, High); }}OnBar(){ MonitorLong(); MonitorShort(); pass;}
比如上一根K过来时MarketPosition是1,你判断需要平仓,结束后MarketPosition变为0同一根bar重复tick过来后,继续从MarketPosition=1开始,你继续判断需要平仓,结束后MarketPosition变为0这是序列变量的变现形式,也是基于K线序列的机制。因为当调用的sell出现后,后续每次都调用了sell所以信号是固定的,没有闪烁的。相反如果后续tick发生新情况,使得sell时有时无,则是闪烁
回复:您的意思是说,这种重复调用sell平仓本来就是tbq的机制是吗,我的代码逻辑是没有问题的?实盘中这样不停sell也是被允许的吗?当然很有可能我的第一次sell就已经成交了,后继的sell其实没有仓位可平。
回复:图表是映射信号,不会给你去平仓的你已经告诉账户要平,后续只是维持了这个要平的状态,下一根bar到来时一切固定了A函数是下单
回复:没有理解您的意思。1)调用sell函数不会真正去执行平仓操作是吗?2)调用这个函数后,会在下一根bar到来时才真正去执行平仓指令,是这个意思吗?3)只有调用A函数才会真正去立即执行下单指令是吗?
回复:sell实时也是下单,他是映射信号。非实时中,他只是把信号挂在图上。A函数只是下一个单,历史不会有信号。我建议你先跑图表模拟再来看,dualma就行。