目前持仓是1,但是A函数获得的值找不到对应的值,想知道为什么?
根据实盘来看 POS体字段含义没有歧义 应该是TBQ对柜台数据的直接封装
猜测情况是 代码在获取结构体处理上 存在没有刷新 用了前一次残留值
大概率是这样的。这种字段属性本质就是直接把接口封装过来的,并不存在二次加工,理论上不可能出什么问题。
我感觉如果你打印日志的代码没有弄错的话(因为之前我弄错过),可能的原因是因为手动交易、日志打印、账户透视信息,不是同步显示造成的。可用下面回复的测试代码进行验证:
好像不太对,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));
}
运行结果日志:
只有【shortCloseVolume】和【longCloseVolume】猜对了,应该也不是【空头当前平仓量】或【多头当前平仓量】而是【空头今日累计平仓量】或【多头今日累计平仓量】。
顺便也发现之前的一个误解,就是OnPosition、OnOrder、OnFill这3个事件域的执行顺序,原来以为OnPosition的顺序是最后一个,结果发现OnPosition竟然是最早执行的。
另外两个Position结构体成员【当前持仓量】和【可平量】测试没有问题。
那么这2位同学反映的问题,多半是日志输出时间点和手动交易或其他交易源交叉执行,造成的。
这个问题与下面的这个帖子应该是类似的:
https://www.tbquant.net/forumDetail?cur=tbquan&id=12787&cid=all
我可以根据你这个猜测来测试确认一下。
挂上账户了吗
有没有一种可能是你的代码写错了呢