序列数组排序不能通过编译

各位老师,

下面序列数组排序这几行(红色部分)不能通过编译是何原因?

Params

   Integer TOP(4);//排序前几名

   Numeric LOTS(1);//下单数量

   Numeric MP(1);//滑点设置

Vars

   Series<Numeric> ZD(0);//涨幅

   Numeric i;

   Numeric j;

   Numeric K;

   Series<Array<Numeric>> ArrayZD;//数据源涨幅数组

   Series<Array<Numeric>> ArrayZDind;//数据源索引

   Series<Array<Numeric>> ArrayH;//开盘第一根K线最高价

   Series<Array<Numeric>> ArrayL;//开盘第一根K线最低价    

   bool BuyCon;//开多条件

   bool SellCon;//开空条件

Events

OnInit()

{

  Range[0:DataCount-1]

   {

AddDataFlag(Enum_Data_RolloverBackWard());//设置后复权

   AddDataFlag(Enum_Data_RolloverRealPrice());//是否映射真实价格

   AddDataFlag(Enum_Data_AutoSwapPosition());//设置自动换仓

   AddDataFlag(Enum_Data_IgnoreSwapSignalCalc()); // 设置忽略换仓信号计算  

   SetSlippage(Enum_Rate_PointPerHand,MP); //设置滑点-跳/手

SetOrderPriceOffset(1); //设置委托价为叫买/卖价偏移1跳

   SetOrderMap2MainSymbol(); //设置委托映射到主力    

   SetInitCapital(1000000); //设置初始资金为100万

   }    

}

OnBar(ArrayRef<Integer> indexs)

{

  If(Time>=0.0905 AND Time<0.0910)//开盘5分钟后计算前5分钟涨幅

  {

 Range[0:DataCount-1]

         {

          ZD=100*((C[1]-C[2])/C[2]);

         //Commentary(\"涨幅=\"+Text(ZD));

         }                    

         for i=0 to datasourcesize-1//把需要排序的指标值写入数组

     {

   ArrayZDind[0][i]=i;

   ArrayZD[0][i]=data[i].ZD;

   ArrayH[0][i]=Data[i].H;

   ArrayL[0][i]=Data[i].L;

     }      

   }

  Na1Sort2(ArrayZD,ArrayZDind,0,(datasourcesize-1),False);//按照指标值对品种进行从大到小排序

  Na1Sort2(ArrayZD,ArrayH,0,(datasourcesize-1),False);

  Na1Sort2(ArrayZD,ArrayL,0,(datasourcesize-1),False);


 /*for i=0 to TOP-1

 {

Commentary(\"ArrayZD[i]=\"+Text(ArrayZD[0][i]));

Commentary(\"ArrayZDind[[i]=\"+Text(ArrayZDind[0][i]));

 }*/

for i=0 to GetArraySize(ArrayZD)-1//把排序筛选后的品种图层按照开仓信号筛选开仓操作

 {


      //==========================================================开仓条件

       j=ArrayZDind[0][i];

       BuyCon = i<=TOP-1 AND data[J].C[1]>data[J].OPEN[1] AND data[J].OPEN[1]==data[J].L[1];

       SellCon = i>=DataSourceSize()-TOP-1 AND data[J].C[1]<data[J].OPEN[1] AND data[J].OPEN[1]==data[J].H[1];

       

       If(data[J].MarketPosition<1 && BuyCon and Time>=0.090500 and Time<0.091000)

        {

            data[J].Buy(Lots,Open);

        }

     

       

       If(data[J].MarketPosition>-1 && SellCon and Time>=0.090500 and Time<0.091000)

        {

            data[J].SellShort(Lots,Open);

        }

       


  }

   IF(Time>=0.145000 AND Time<=0.150000)

        {

        For K=0 to DataSourceSize-1

        {

        If(Data[K].MarketPosition==1)

        {

          data[K].Sell(lots,Open);

        }

        }

        }

       IF(Time>=0.145000 AND Time<=0.150000)

        {

        For K=0 to DataSourceSize()-1

        {

        If(Data[K].MarketPosition==-1)

        {

          data[K].BuyToCover(lots,Open);

        }

        }

        }

}

数组排序取分位数
二维数组排序的例子
序列值和数组的区别
数组和变量序列相互赋值问题
二维数组排序
序列型数组存储问题
序列数组变量如何按索引取值
序列变量和一维数组相互赋值的问题
如何设置序列变量数组__请求老师解答
请给一个二维数组按列排序的例子

Na1Sort2 第二个参数是integer的数组

第二个参数改成整型数组,还是通过不了编译呀。

王老师,能否帮我改一下?

我帮助你修改好了,代码如下:   OnBar(ArrayRef<Integer> indexs)

{

  arraySize = DataSourceSize();

 

  // 方法1:使用标准数组初始化语法

  If (BarStatus () == 0 Or GetArraySize(tmpZD) == 0)

  {

     // 初始化或重新初始化数组

     tmpZD = tmpZD[arraySize];

     tmpZDind = tmpZDind[arraySize];

     tmpH = tmpH[arraySize];

     tmpL = tmpL[arraySize];

     

     For i = 0 To arraySize - 1

     {

        If (i < GetArraySize(tmpZDind))

        {

           tmpZDind[i] = i;

           tmpZD[i] = 0;

           tmpH[i] = 0;

           tmpL[i] = 0;

        }

     }

  }

  // 方法2:如果数组大小发生变化,重新创建数组

  Else If (GetArraySize(tmpZD) != arraySize)

  {

     // 重新初始化数组

     tmpZD = tmpZD[arraySize];

     tmpZDind = tmpZDind[arraySize];

     tmpH = tmpH[arraySize];

     tmpL = tmpL[arraySize];

     

     For i = 0 To arraySize - 1

     {

        If (i < GetArraySize(tmpZDind))

        {

           tmpZDind[i] = i;

           tmpZD[i] = 0;

           tmpH[i] = 0;

           tmpL[i] = 0;

        }

     }

  }

 

  // 在指定时间段计算涨幅并排序

  If (Time >= 0.0905 And Time < 0.0910 And Not HasSorted)

  {

     // 计算所有品种的涨幅

     For i = 0 To arraySize - 1

     {

        If (i < GetArraySize(tmpZD))

        {

           If (Data[i].C[2] != 0)

           {

              // 计算前一根K线的涨幅

              tmpZD[i] = 100 * ((Data[i].C[1] - Data[i].C[2]) / Data[i].C[2]);

           }

           Else

           {

              tmpZD[i] = 0;

           }

           tmpZDind[i] = i;

           tmpH[i] = Data[i].H;

           tmpL[i] = Data[i].L;

        }

     }

     

     // 使用冒泡排序按涨幅降序排列

     For i = 0 To arraySize - 2

     {

        For j = i + 1 To arraySize - 1

        {

           If (j < GetArraySize(tmpZD) And i < GetArraySize(tmpZD))

           {

              If (tmpZD[i] < tmpZD[j])

              {

                 // 交换值

                 tempVal = tmpZD[i];

                 tmpZD[i] = tmpZD[j];

                 tmpZD[j] = tempVal;

                 

                 // 交换索引

                 tempIdx = tmpZDind[i];

                 tmpZDind[i] = tmpZDind[j];

                 tmpZDind[j] = tempIdx;

              }

           }

        }

     }

     

     HasSorted = True; // 标记已排序

     

     // 输出排序结果用于调试

     Commentary("Top " + Text(TOP) + " 品种:");

     For i = 0 To Min(TOP-1, arraySize-1)

     {

        If (i < GetArraySize(tmpZDind))

        {

           j = tmpZDind[i];

           Commentary("第" + Text(i+1) + "名: 代码=" + Data[j].Symbol +

                     ", 涨幅=" + Text(tmpZD[i], 2) + "%");

        }

     }

  }


  // 其余的交易逻辑保持不变