遇到的问题:在实时行情下,当以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;
}
比如上一根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就行。