变量声明

Params String TRADESYMBOL(\"IF888.CFFEX\"); String INDEXSYMBOL(\"000300.SSE\"); String TRADESYMBOL1(\"IC888.CFFEX\"); String INDEXSYMBOL1(\"000905.SSE\"); String TRADESYMBOL2(\"IM888.CFFEX\"); String INDEXSYMBOL2(\"000852.SSE\"); Vars DefsEvents //此处实现事件函数 //初始化事件函数,策略运行期间,首先运行且只有一次,应用在订阅数据等操作 OnInit() { //与数据源有关 SubscribeBar(TRADESYMBOL,\"5M\",20210101,0,Enum_Data_FullPeriod); SubscribeBar(INDEXSYMBOL,\"5M\",20190101,0,Enum_Data_FullPeriod); SubscribeBar(INDEXSYMBOL,\"10M\",20080927,0,Enum_Data_FullPeriod); SubscribeBar(INDEXSYMBOL,\"15M\",20080927,0,Enum_Data_FullPeriod); SubscribeBar(INDEXSYMBOL,\"30M\",20080927,0,Enum_Data_FullPeriod); SubscribeBar(INDEXSYMBOL,\"1H\",20080927,0,Enum_Data_FullPeriod); SubscribeBar(INDEXSYMBOL,\"2H\",20080927,0,Enum_Data_FullPeriod); SubscribeBar(INDEXSYMBOL,\"1D\",20080927,0,Enum_Data_FullPeriod); SubscribeBar(TRADESYMBOL1,\"5M\",20210101,0,Enum_Data_FullPeriod); SubscribeBar(INDEXSYMBOL1,\"5M\",20190101,0,Enum_Data_FullPeriod); SubscribeBar(INDEXSYMBOL1,\"10M\",20080927,0,Enum_Data_FullPeriod); SubscribeBar(INDEXSYMBOL1,\"15M\",20080927,0,Enum_Data_FullPeriod); SubscribeBar(INDEXSYMBOL1,\"30M\",20080927,0,Enum_Data_FullPeriod); SubscribeBar(INDEXSYMBOL1,\"1H\",20080927,0,Enum_Data_FullPeriod); SubscribeBar(INDEXSYMBOL1,\"2H\",20080927,0,Enum_Data_FullPeriod); SubscribeBar(INDEXSYMBOL1,\"1D\",20080927,0,Enum_Data_FullPeriod); AddDataFlag(Enum_Data_AutoSwapPosition()); //设置自动换仓 SetInitCapital(10000000); //设置初始资金为100万 SetSlippage(Enum_Rate_PointPerHand,5); setCommissionRate(Enum_Rate_ByFillAmount,0.26); SetBeginBarMaxCount(1); //设置最大起始bar数为10 SetBackBarMaxCount(1000); //设置最大回溯bar数为10 } OnBar(ArrayRef<Integer> indexs) { Integer i; For i = 0 To 1 { CodeProperty CP1; GetProperty(DATA[0+i*8].Symbol,CP1); If(i==1) { Data[0+i*8].Commentary(\"Portfolio_CurrentEquity =\"+Text(Portfolio_CurrentEquity())); Data[0+i*8].Commentary(\"DATA[0+i*8].Close =\"+Text(DATA[0+i*8].Close)); Data[0+i*8].Commentary(\"CP1.bigPointValue =\"+Text(CP1.bigPointValue)); Data[0+i*8].Commentary(\"CP1.contractUnit =\"+Text(CP1.contractUnit)); Integer oldbar_Lots; oldbar_Lots = Portfolio_CurrentEquity()/(DATA[0+i*8].Close*CP1.bigPointValue*CP1.contractUnit); Data[8].Commentary(\"oldbar_Lots =\"+Text(oldbar_Lots)); } } }上面代码变量oldbar_lots在上面的位置声明运行正确,但在vars下声明出现赋值错误。是什么原因造成的?

这里加上一个data0因为vars变量定义的局部类型是分图层的,你上面oldbar_Lots赋值的时候没加data前缀,那么默认就赋值到data0图层。输出的时候用data8.commentary,里面的参数默认跟随外部对象data8,等于输出了data8.oldbar_Lots,不同图层的oldbar_Lots是不同的对象,所以错误了