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
Defs
Events
//此处实现事件函数
//初始化事件函数,策略运行期间,首先运行且只有一次,应用在订阅数据等操作
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是不同的对象,所以错误了