求老师解答下代码逻辑
Params Numeric N(20); Numeric X(10); Numeric TRS(45); Numeric Fund(20000); Vars Series<Numeric> HH; Series<Numeric> LL; Series<Numeric> upband; Series<Numeric> dnband; Series<Numeric> H0Slope; Series<Numeric> H1Slope; Series<Numeric> L0Slope; Series<Numeric> L1Slope; Series<Numeric> Hdelta; Series<Numeric> Ldelta; Series<Bool> beta; Series<Numeric> HL; Series<Bool> buycond; Series<Bool> sellcond; Series<Numeric> KG(0); Series<Numeric> HighAfterEntry;//开仓后出现的最高价 Series<Numeric> LowAfterEntry;//开仓后出现的最低价 Series<Numeric> liQKA; Series<Numeric> DliqPoint; Series<Numeric> KliqPoint; Series<Numeric> barcoutN; Series<Numeric> Lots; Series<Numeric> Ma1; Series<Numeric> callkg; Events //此处实现事件函数 OnInit() { //=========数据源相关设置============== AddDataFlag(Enum_Data_RolloverBackWard()); //设置后复权 AddDataFlag(Enum_Data_RolloverRealPrice()); //设置映射真实价格 AddDataFlag(Enum_Data_AutoSwapPosition()); //设置自动换仓 AddDataFlag(Enum_Data_IgnoreSwapSignalCalc()); //设置忽略换仓信号计算 } onBar(ArrayRef<Integer> indexs) { Lots=Max(1,IntPart(Fund/(O*ContractUnit*BigPointValue*0.1))); //计算开仓手数 //计算斜率 HL=(H+L)/2; H0Slope=LinearRegSlope(HL,N); H1Slope=LinearRegSlope(HL[1],N); buycond=crossover(H0Slope,H1Slope); Sellcond= CrossUnder(H0Slope,H1Slope); HH=Highest(H,X); LL=Lowest(L,X); //保存斜率交叉时的高低点 if(buycond[1]) { upband=HH; KG=1; } if(Sellcond[1]) { dnband=LL; KG=-1; } PlotNumeric("unband",upband); PlotNumeric("dnband",dnband); if (KG[1]==1 and H>=upband[1] and MarketPosition==0) { Buy(Lots,Max(open,upband[1])); LowAfterEntry=Max(open,upband[1]); callkg=1; } if(KG[1]==-1 and L<=dnband[1] and MarketPosition==0) { SellShort(Lots,Min(open,dnband[1])); HighAfterEntry=Min(open,dnband[1]); callkg=-1; } //加仓模块 Ma1=Average(C,5); PlotNumeric("Ma1",Ma1); if (callkg==1 and MarketPosition>0 and C[1]>EntryPrice and C[1]<Ma1[2] and C[1]>Ma1[1]) { Buy(Lots/2,open); callkg=0; } if(callkg==-1 and MarketPosition<0 and C[1]<EntryPrice and C[1]>Ma1[2] and C[1]<Ma1[1]) { SellShort(Lots/2,open); callkg=0; } //记录开仓后高低点 If(BarsSinceentry == 0) { HighAfterEntry = High; LowAfterEntry = Low; }else { HighAfterEntry = Min(HighAfterEntry,High); // 空头止损,更新最低的最高价 LowAfterEntry = Max(LowAfterEntry,Low); // 多头止损,更新最高的最低价 } //移动出场 If(MarketPosition == 0) // 自适应参数默认值; { liQKA = 1; barcoutN=0; }Else if(BarsSinceEntry>barcoutN) //当有持仓的情况下,liQKA会随着持仓时间的增加而逐渐减小,即止损止盈幅度乘数的减少。 { liQKA = liQKA - 0.1; liQKA = Max(liQKA,0.3); barcoutN=BarsSinceEntry; } if(MarketPosition>0) { DliqPoint = LowAfterEntry - (Open*TRS/1000)*liQKA; //经过计算,这根吊灯出场线会随着持仓时间的增加变的越来越敏感; } if(MarketPosition<0) { KliqPoint = HighAfterEntry + (Open*TRS/1000)*liQKA; //经过计算,这根吊灯出场线会随着持仓时间的增加变的越来越敏感; } //If(KliqPoint[1]>0 and MarketPosition<0)PlotNumeric("KliqPoint[1]",KliqPoint[1]); //if(DliqPoint[1]>0 and MarketPosition>0)PlotNumeric("DliqPoint[1]",DliqPoint[1]); // 持有多单时 If(MarketPosition >0 And BarsSinceEntry >0 And Low <= DliqPoint[1] and DliqPoint[1]>0 and DliqPoint[1]>0 and BarsSinceEntry>0) { Sell(0,Min(Open,DliqPoint[1])); DliqPoint=0; barcoutN=0; } // 持有空单时 If(MarketPosition <0 And BarsSinceEntry >0 And High >= KliqPoint[1] and KliqPoint[1]>0 and KliqPoint[1]>0 and BarsSinceEntry>0) { BuyToCover(0,Max(Open,KliqPoint[1])); KliqPoint=0; barcoutN=0; } }