实盘平仓,日志打印显示平仓,但账户透视里没有交易记录,且继续持仓。

日志:账户透视:通过日志打印发现在11:06的时候以803.46价格多头建仓了,接着又平仓了,账户透视里没有平仓记录,同时代码里的longCurrentContracts这个参数显示也为0了。这个是什么原因导致的平仓没有记录,但是longCurrentContracts的数字显示平仓了,请帮忙答疑一下这个问题。以下附上代码:Params Numeric FastMA(6); //macd短周期值 Numeric SlowMA(13); //macd长周期值 Numeric AvgMA(12); //MACD慢线周期值 Numeric FastMA2(3); //macd短周期值 Numeric SlowMA2(13); //macd长周期值 //Numeric DuoDiffValue(1.5); // 多头快线入场差值Vars Series<Numeric> MACDLine(0); Series<Numeric> MACDLine2(0); Series<Numeric> SignalLine(0); Series<Numeric> SignalLine2(0); Numeric ATRValue; Numeric DuoDiffValue(0); Global Integer BuySignal; Events OnBar(ArrayRef<Integer> indexs) { Print("当前时间:" + Text(Date)+ "-" + Text(Time)); Print("现有持仓:" + Text(longCurrentContracts)); // 计算macd快线 MACDLine = XAverage( Close, FastMA ) - XAverage( Close, SlowMA ); //计算macd慢线 SignalLine = XAverage( MACDLine, AvgMA ); //当快线上穿慢线的时候,为多头趋势 If (BuySignal == 0) { If (MACDLine >= SignalLine AND MACDLine[1] < SignalLine[1]) { Print("快线上穿慢线"); Print("多头建仓。"); Buy(1, Close); BuySignal = 1; Print("多头建仓代码已执行。建仓价格:" + Text(Close)); Print("多头建仓后,现有持仓:" + Text(longCurrentContracts)); Print("-------------------------"); } } // 死叉出手 If (MACDLine <= SignalLine And BuySignal == 1) { Sell(1, Close); BuySignal = 0; Print("多头平仓后,现有持仓:" + Text(longCurrentContracts)); Print("-------------------------"); } Print("===当前Bar结束==="); }

我只能这么解释:当满足条件产生开仓信号的tick驱动时,执行代码图上出现开仓信号。你的global buysignal被拨成1。下一tick驱动的时候,因为你的buysignal是1,所以不满足开仓条件,于是执行不了buy,图上就没信号了。然后你大概率是开了自动同步,监控器一看你图上没信号,但是账户里有头寸,判定为不匹配,就给你平了。你会这样写的根本原因就是你对行情事件域驱动机制,数据结构中的global和series类型的特点不熟悉导致的。图表信号系统,一般都是用series作为状态变量,不会用global零基础课程里其实都有详细说明并且举过例子。 https://video.tbquant.net/video?id=video395 这个视频如果看不明白说明你要往前把数据结构再看看

回复:下一tick驱动的时候,因为你的buysignal是1,所以不满足开仓条件,于是执行不了buy。这一段是我就是我想要的,这段逻辑没问题,我期望就是不想让它再买,只买入一手。然后你大概率是开了自动同步,监控器一看你图上没信号,但是账户里有头寸,判定为不匹配,就给你平了。你这里理解反了,我的问题是它这里执行了平仓,但是为什么账户里没有被平掉?我使用Global的原因是longCurrentContracts在持仓状态的时候,没有执行平仓代码或者建仓代码的时候,会发生变化,这个是什么问题?

回复:......你这是有点自作聪明了朋友。前面没有开仓信号,那就没有持仓,你要怎么平???你可以输出一下sell命令的返回值,100%是falsefalse就是告诉你执行失败,出不了信号。或者输出一下marketposition,也是一样的效果,肯定是0。虚拟账户里没有持仓,这要怎么平?出不了信号的原因很多,比如手数过大,价格不对等等,还有就是没仓硬要平。

回复:“longCurrentContracts在持仓状态的时候,没有执行平仓代码或者建仓代码的时候,会发生变化”不可能。请提供完整的证据链证明你的结论

global buysignal唉谁教你这么用的呀你看看平仓是谁平的,我盲猜是监控器。