请教:实时行情下MarketPosition不能实时更新

遇到的问题:在实时行情下,当以0为第1个参数调用平仓指令Sell或BuyToCover后,在下一个 tick数据的OnBar中调用MarketPosition,返回值不为0,也就是说本应该清仓的,但却一直没有成功,从而导致一直在不停调用平仓指令。直到当前Bar因为时间结束,开始下一个Bar时,MarketPosition才返回0。

账户环境:模拟账户

请教是我的代码逻辑有问题吗?

伪代码如下:

Defs

MonitorLong()

{

   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;

}

我的TBQuant软件(1.3.8.9版本)不能链接实时行情,导致期货账号不能登录,实时行情不动
实时行情延缓
TBQuant实时行情失败
订阅实时行情的疑问
StatusQuote函数在实时行情下返回值有延迟变化
无法连接实时行情服务器
实时行情,A函数撤单成功,却返回false
开仓K实时开仓,并同K实时止损
连接不上实时行情源是怎么回事?
关于外部行情实时接入的方案构想,问一下可不可行

比如上一根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就行。