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

日志:

账户透视:


通过日志打印发现在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结束===");

   }

策略交易里的持仓跟账户透视里的持仓不一样,策略报告下的交易记录里的交易记录跟账户透视下的委托成交的交易记录不一样。
实盘触发平仓逻辑,实际没有平掉问题
多图层打印日志次数
交易套利合约,满足平仓条件策略没有平仓且信号消失
策略交易与账户透视
策略交易与账户透视
账户空仓,开实盘后是居然先平仓再开仓。问题出在哪里?
为什么我自建的工作区调用orderReview,不能显示开平仓标识。而账户透视点复盘按钮可以显示
测试报告的交易记录与帐户透视的交易记录不一致
交易账户的持仓统计没有上日的商品持仓信息

我只能这么解释:

当满足条件产生开仓信号的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%是false

false就是告诉你执行失败,出不了信号。

或者输出一下marketposition,也是一样的效果,肯定是0。虚拟账户里没有持仓,这要怎么平?

出不了信号的原因很多,比如手数过大,价格不对等等,还有就是没仓硬要平。


“longCurrentContracts在持仓状态的时候,没有执行平仓代码或者建仓代码的时候,会发生变化”

不可能。

请提供完整的证据链证明你的结论

global buysignal

唉

谁教你这么用的呀

你看看平仓是谁平的,我盲猜是监控器。