图表信号NOK,假设OK但却没有向账户发出委托(未发生信号闪烁)

碳酸锂主力实盘时1120日14:23分满足买多条件成交1手,14:30图表显示满足K2的平仓条件(实际并未满足)如图1标识,

而且14:30的图表信号并没有向账户发出委托(未出现信号闪烁,断网等预警,图第二图)。


策略单元设置及代码见最后,请大神帮分析下原因。谢谢!


Params

   Numeric HCBL(0.03);       // 自高点的回撤比例

   Numeric SZBLJC(0.012);        //AJC建仓后的涨幅超过此时启动

   Numeric SZBLGW(0.008);        //A建仓后的高位涨幅超过此时启动

   Numeric EMAFast(10);        //A快速均线周期

   Numeric EMASlow(21);        //A慢速均线周期

   Numeric Length(9);         //BKDJ的最高最低值的bar数  

   Numeric LengthSlow(4);     //BKDJ的K周期

   //Numeric SmoothLength(8);   //BKDJ的D周期

   Numeric LCDQJ(20);              //B超跌区间

   Numeric CDBL(0.989);          //B比前低低的倍数

   Numeric CDlowB(3);           //B前CDlowB的low

   Numeric CCDBL(0.994);          //超跌后还超跌

   Numeric JXSZ(6);               //A调整后继续上涨的Bar数

   Numeric GWB(5);                //A高位调整Bar数量

   Numeric Per(1);             //开仓比例

   

Vars

   

   Series<Numeric> PriceEMAF;  // 当前快EMA价格

   Series<Numeric> PriceEMAS;  // 当前慢EMA价格

   Series<Numeric> PriceEMAFS; //F-S的值

   Series<Numeric> HighestK;

   Series<Numeric> LowestK;

   Series<Numeric> K;

   Series<Numeric> kValue;

   Series<Numeric> DValue;

   Series<Integer> XDSS;     // 开仓手数

   Numeric a;                //建仓后出现的最高价

   Numeric b;                //当前价格-最高价的差

   Numeric Y;               //建仓后最大涨幅

   Numeric Bprice;          //买入价格

   Numeric Sprice;          //平仓价格

   Numeric DS1;             //判断当前Bar是否有平仓

   Numeric GWXL;            //高位斜率

   Numeric CDlow;          //前CDlowB根low的最高价

   Numeric n1;              //n为价格转换为商品最小变动价的参数

   Numeric n3;  

   Numeric n4;  

   Numeric n5;  

   


Events

   OnBar(ArrayRef<Integer> indexs)

   {

       //计算价格的EMA值

       PriceEMAF = EMA(Open, EMAFast);

       PriceEMAS = EMA(Open, EMASlow);

       PriceEMAFS = PriceEMAF-PriceEMAS;

       //KDJ的计算

       HighestK = Highest(High, Length);

       LowestK = Lowest(Low, Length);

       k = (low - LowestK) / (HighestK - LowestK) * 100;

       kValue = SMA(k, LengthSlow, 1);

       //DValue = SMA(KValue, SmoothLength, 1);

       

       // 建仓手数

       XDSS = Max(IntPart((Portfolio_CurrentCapital() * Per) / (ContractUnit *MarginRatio * Close)), 0);   // 计算最大可开手数

       // 买入条件1:当前EMA金叉&& 当前bar平仓后不再买入&&当前图表显示空仓


       Bool DS;

       If(DS1 == 0 && longEntries()!=0) DS = False;

       Else DS = True;

     

       // 买入条件3:当前low比前面CDlowB根low的最高价超跌  && 当前bar平仓后不再买入&&当前图表显示空仓

       CDlow = Highest(low(), CDlowB);

       Bool D31 = low / CDlow < CDBL;

       Bool D3 = D31 && (kValue < LCDQJ) &&  (PriceEMAF < PriceEMAS);

       if(D3 && DS && MarketPosition == 0)

           {

               n1 = IntPart(CDlow * CDBL / (MinMove * PriceScale)) * MinMove * PriceScale;

               //Bprice = n1 + MinMove * PriceScale;

               Bprice = min(n1 + MinMove * PriceScale,open+ MinMove * PriceScale);

               Buy(XDSS, Bprice);

       

            }

       if(D3) Commentary("D3超跌买入");

       // 买入条件4:调整后继续上涨 &&当前图表显示空仓

      Bool D41 = PriceEMAF > PriceEMAS;

      Integer j;

      Bool D4 = True;

      for j=0 to JXSZ-1

          {

             if(PriceEMAFS[j] <= PriceEMAFS[j+1])

             {

                D4 = false;

                break;

             }

          }

       if(D4 && D41 && MarketPosition == 0)

       {

           Bprice = open + MinMove * PriceScale;  // 按开盘价+一个价位开仓XDSS手

           Buy(XDSS, Bprice);

       }  

       if(D4 && D41) Commentary("D4调整后持续上涨");  

       Commentary("持续上涨" + Text(PriceEMAFS));

       

       // 建仓后上涨比例达到SZBLGW后,无论D1 还是D2、D3 买入,未出现死叉前的高位调整;

       a = Highest(high(), BarsSinceLastEntry + 1);

       Y = a / EntryPrice - 1;

       Commentary("上涨比例" + Text(Y));

       GWXL = LinearRegSlope(PriceEMAF,GWB);

       Bool K211 = (GWXL < 0) && (GWXL != InvalidNumeric);

       Bool K21 = (Y >= SZBLGW) && K211 && (PriceEMAF >= PriceEMAS);

       If(K21 && MarketPosition != 0)

           {

               Sprice = open - MinMove * PriceScale;

               Sell(0, Sprice);

           }

       if(K21) Commentary("K21高位调整");


       // 建仓后上涨比例达到SZBLJC后,无论D1 还是D2、D3 买入,死叉就平仓;  

       Bool K2 = (Y >= SZBLJC) && CrossUnder(PriceEMAF, PriceEMAS);

       If(K2 && MarketPosition != 0)

           {

               Sprice = open - MinMove * PriceScale;

               Sell(0, Sprice);

           }

       if(K2) Commentary("K2死叉");

       b = low - Highest(high(), BarsSinceLastEntry + 1);

       Bool K3 = (b / a <= -HCBL);

       Commentary("回撤比例" + Text(b / a));

       if(K3) Commentary("K3HCBL");

       if(K3 && MarketPosition != 0)

           {

       

               

               if(Open < close[1])     //考虑低开超出止损;

                   {

                       n3 = IntPart(a * HCBL / (MinMove * PriceScale)) * MinMove * PriceScale;

                       Sprice = min((a - n3 - 2 * MinMove * PriceScale), (open - MinMove * PriceScale));

                   }

                   

               Else

                   {

                       n3 = IntPart(a * HCBL / (MinMove * PriceScale)) * MinMove * PriceScale;

                       Sprice = a - n3 - 2 * MinMove * PriceScale;

                   }

               

             

               Sell(0, Sprice);    // 平全部多仓

           }

       DS1 = BarsSinceExit();

       if(DS) Commentary("此Bar未过平仓");

       }





图表信号是ok,但未向账户发出委托
请教老师,为啥账户发出的信号和图表发出的信号会相反呢
关于信号发生闪烁
图表有信号,账户没有成交
出现闪烁后图表信号持仓如何与账户持仓同步
发生信号闪烁,实际执行了信号成交了,但是监控器却认为没有信号,没有持仓。
图表信号与自动交易委托不一致
关于信号闪烁问题
交易信号未刷新的问题
关于信号闪烁

补充说明,14:30图表K线上有平仓信号,图表单元里的多仓是不是应该为“0”,实际却仍为持仓1手(下图红圈)。