帮忙看看代码

Params //此处添加参数 Numeric lost(1);Vars //此处添加变量 Series<Numeric> PVIValue; Series<Numeric> PVI250; Series<Numeric> MAPVI; Series<Bool> upband(False); Series<Bool> downband(False); Series<Numeric> MedianPrice; Series<Numeric> MA1; Series<Numeric> rang; Series<Numeric> UpAvg(0); Series<Numeric> LowAvg(0); Series<Numeric> Barct(0); Series<Numeric> A(0); Series<Numeric> B(0); Numeric lenth(90); //默认区间周期参数 Numeric STbar(40); //加速的BAR数范围 Numeric Longma(120); // 长周期均线 Events OnInit() { //与数据源有关 Range[0:DataCount-1] { //=========数据源相关设置============== AddDataFlag(Enum_Data_RolloverBackWard()); //设置后复权 AddDataFlag(Enum_Data_RolloverRealPrice()); //设置映射真实价格 AddDataFlag(Enum_Data_AutoSwapPosition()); //设置自动换仓 AddDataFlag(Enum_Data_IgnoreSwapSignalCalc()); //设置忽略换仓信号计算 } } //Bar更新事件函数,参数indexs表示变化的数据源图层ID数组 OnBar(ArrayRef<Integer> indexs) { If(CurrentBar == 0) { PVIValue = 100; }Else { If(Vol > Vol[1]) { PVIValue = PVIValue[1]+(Close-Close[1])/Close[1]*PVIValue[1]; }Else { PVIValue = PVIValue[1]; } PVI250 = AverageFC(PVIValue,250); MAPVI = PVIValue - PVI250; } // 指标计算 MA1 = AverageFC(C,Longma);//均线 rang = High - Low;//最新价差 UpAvg = Highest(((High[1]+Close[1])-(2*Close[1]))+OpenD(0), lenth); //取LENTH周期内的日开盘价+波动幅度的最高值 LowAvg = Lowest(((Close[1]+low[1])-(2*Close[1]))+OpenD(0), lenth); //取LENTH周期内的日开盘价+波动幅度的最低值; MedianPrice = (High + Low)*0.5; //最新中间价 upband = MedianPrice > High[1] and rang > rang[1];//中间价大于 上一个BAR的最高价且最新价差大于上一个BAR的价差 downband = MedianPrice < Low[1] and rang > rang[1];//中间价小于 上一个BAR的最低价且最新价差大于上一个BAR的价差 // 多头入场 If(MarketPosition == 0 and C[1]>MA1[1] && MAPVI[1] > 0) //没有多头持仓的情况下,价格大于均线 { If(upband[1] and Close[1] > UpAvg[1]) // 上一个BAR线的upband条件满足且价格>区间上沿; { Buy(Lost,Open); A = A + 1; } } // 空头入场 If(MarketPosition == 0 and C[1]<MA1[1] && MAPVI[1] < 0) //没有空头持仓的情况下,价格小于均线 { If(downband[1] and Close[1] < LowAvg[1]) // 上一个BAR线的downband条件满足且价格<区间下沿; { Sellshort(Lost,Open);//开空 B = B + 1; } } Commentary("A = " + Text(A)); Commentary("B = " + Text(B)); }老师你好,帮我看看这段代码,我计算A跟B的累加是在开仓条件里面的。但是,我发现还没出现开仓信号,A跟B的值也在累加,帮忙看看什么原因

PVI250 = AverageFC(PVIValue,250); 这里使用了250的均值,在bar数量不够的时候,系统应该有不发单的机制。但是值是会计算的你可以尝试把你的开仓条件用bool打印,应该可以看到,在没有买卖信号的地方也有已经满足开仓的bar

回复:嗯不错不错