A_GetPositon为何与实际值不符

目前持仓是1,但是A函数获得的值找不到对应的值,想知道为什么?

程序的回测发单与账户的实际发单不符
组合报告里面的盈利与实际盈利严重不符!!!
图形与编码逻辑不符
关于条件语句判断与实际交易不符的问题
交易手数=可用资金/保证金率/一手价格;与实际不符
请教macd值收缩做多,bool值显示与定义不符合
为什么数据中心的数据与实际情况不符?
套利合约价格走势和实际不符
不符合时间条件,为何还会开仓?
请问Close[1]与Close有何区别?为何买卖结果相差甚远?

根据实盘来看 POS体字段含义没有歧义 应该是TBQ对柜台数据的直接封装

猜测情况是 代码在获取结构体处理上 存在没有刷新 用了前一次残留值

大概率是这样的。这种字段属性本质就是直接把接口封装过来的,并不存在二次加工,理论上不可能出什么问题。

data-href=我感觉如果你打印日志的代码没有弄错的话(因为之前我弄错过),可能的原因是因为手动交易、日志打印、账户透视信息,不是同步显示造成的。可用下面回复的测试代码进行验证:

https://www.tbquant.net/helper?navigate=tbfn&cid=1426

好像不太对,shortcurrentvolume显示的是空头持仓,不是空头净持仓,否则就没必要分成两个属性了,直接一个净头寸属性,正表示多,负表示空就好了。

我觉得你的这个结果我可能要重新确认测试一下

经过以下测试代码验证为了简单快速验证,数据源周期可以设置为10秒周期,设置模拟账号,启动自动化交易即可测试:

Events
	OnBar(ArrayRef<Integer> indexs){
		If(MarketPosition != 1 && Mod(CurrentBar, 2) == 0){
			Buy(1, High);
		}
		
		If(MarketPosition == 1 && Mod(CurrentBar, 2) == 1){
			Sell(0, Low);
		}
	}
	
	OnOrder(OrderRef ord){
		Print(============OnOrder==================);
		If(ord.status == Enum_Declare) Print(申报中);
		If(ord.status == Enum_Declared) Print(已申报);
		If(ord.status == Enum_Filled) Print(已成交);
	}
	
	OnFill(FillRef ordFill){
		Print(============OnFill==================);
		If(ordFill.side == Enum_Buy) Print(开多成交);
		If(ordFill.side == Enum_Sell) Print(平多成交);
	}
	
	OnPosition(PositionRef pos){
		Print(============OnPosition==================);
		Print(多头当前持仓量: + Text(pos.longCurrentVolume));
		Print(多头当前平仓量: + Text(pos.longCloseVolume));
		Print(多头可平仓量: + Text(pos.longCanSellVolume));
	}

运行结果日志:

data-href=

只有【shortCloseVolume】和【longCloseVolume】猜对了,应该也不是【空头当前平仓量】或【多头当前平仓量】而是【空头今日累计平仓量】或【多头今日累计平仓量】。

顺便也发现之前的一个误解,就是OnPosition、OnOrder、OnFill这3个事件域的执行顺序,原来以为OnPosition的顺序是最后一个,结果发现OnPosition竟然是最早执行的。

另外两个Position结构体成员【当前持仓量】和【可平量】测试没有问题。

那么这2位同学反映的问题,多半是日志输出时间点和手动交易或其他交易源交叉执行,造成的。

这个问题与下面的这个帖子应该是类似的:

https://www.tbquant.net/forumDetail?cur=tbquan&id=12787&cid=all

我可以根据你这个猜测来测试确认一下。

挂上账户了吗

有没有一种可能是你的代码写错了呢