请帮忙修改,124,131行代码提示错误
Params
//默认螺纹参数
Numeric XX(0.4); // 收敛系数
Numeric boLength(25); // 短周期 BreakOut Length
Numeric fsLength(65); // 长周期 FailSafe Length
Numeric TRS(15); //移动幅度
Numeric Fund(20000);
Vars
Numeric TurtleUnits; // 交易单位
Series<Numeric> DonchianHi; // 唐奇安通道上轨,延后1个Bar
Series<Numeric> DonchianLo; // 唐奇安通道下轨,延后1个Bar
Series<Numeric> fsDonchianHi; // 唐奇安通道上轨,延后1个Bar,长周期
Series<Numeric> fsDonchianLo; // 唐奇安通道下轨,延后1个Bar,长周期
Series<Bool> SendOrderThisBar(False); // 是否开仓交易
Series<Numeric> Myprice2;
Series<Numeric> Myprice3;
Series<Numeric> liQKA;
Series<Numeric> DliqPoint;
Series<Numeric> KliqPoint;
Series<Numeric> HighAfterEntry;
Series<Numeric> LowAfterEntry;
Series<Numeric> barcoutN;
Series<Numeric> out_range;
Series<Bool> Dcond_outTrs;
Series<Bool> Kcond_outTrs;
Series<Numeric> HL;
Series<Numeric> HLAverage;
Series<Numeric> X;
Series<Numeric> sumAG;
Bool condRHL;
Series<Bool> A_condD;
Series<Bool> A_condK;
Series<Bool> condRHLAverage;
Series<Numeric> RHLAverage;
Series<Numeric> Lots;
Events
OnBar(ArrayRef<Integer> indexs)
{
Lots=Max(1,IntPart(Fund/(O*ContractUnit*BigPointValue*0.1)));
If(DliqPoint>0 )PlotNumeric("DliqPoint[1]",DliqPoint[1],DliqPoint[1],red);
If(DliqPoint>0 and C[1] > DonchianHi[1] and C[1] < fsDonchianHi[1])PlotNumeric("DliqPoint[1]",DliqPoint[1],DliqPoint[1],Yellow);
If(DliqPoint>0 and C[1] >= fsDonchianHi[1] and C[1] >= DonchianHi[1])PlotNumeric("DliqPoint[1]",DliqPoint[1],DliqPoint[1],red);
If(BarStatus == 0)
{
out_range=TRS;
}
//记录开仓后高低点
If(BarsSinceentry == 0)
{
HighAfterEntry = High;
LowAfterEntry = Low;
}else
{
HighAfterEntry = Min(HighAfterEntry,High); // 空头止损,更新最低的最高价
LowAfterEntry = Max(LowAfterEntry,Low); // 多头止损,更新最高的最低价
}
TurtleUnits = IntPart(Lots); // 对小数取整
DonchianHi = HighestFC(C[1],boLength);
DonchianLo = LowestFC(C[1],boLength);
fsDonchianHi = HighestFC(C[1],fsLength);
fsDonchianLo = LowestFC(C[1],fsLength);
HL=(DonchianHi+DonchianLo)/2;
condRHL=HL<>HL[1];
If(condRHL)
{
X=X+1;
sumAG=sumAG+HL[1];
If(X>2)
{
HLAverage=sumAG/X;
sumAG=0;
X=0;
}
}
condRHLAverage=HLAverage[1]<>HLAverage;
if(condRHLAverage)
{
RHLAverage=HLAverage[1];
}
A_condD=HLAverage>RHLAverage and RHLAverage>0 and HLAverage>0;
A_condK=HLAverage<RHLAverage and RHLAverage>0 and HLAverage>0;
PlotNumeric("HLAverage",HLAverage);
PlotNumeric("RHLAverage",RHLAverage);
//Commentary("SendOrderThisBar="+IIFString(SendOrderThisBar,"True","False"));
PlotNumeric("DonchianHi",DonchianHi);
PlotNumeric("DonchianLo",DonchianLo);
PlotNumeric("fsDonchianHi",fsDonchianHi);
PlotNumeric("fsDonchianLo",fsDonchianLo);
//Commentary("TurtleUnits"+text(TurtleUnits));
If(MarketPosition == 0)
{
// 突破开仓
If(C[1] > DonchianHi[1] && TurtleUnits >= 1 and A_condD)
{
Buy(TurtleUnits,open);
SendOrderThisBar = True;
out_range=TRS;
LowAfterEntry = EntryPrice;//保存多头开仓价格;
}
If(C[1] < DonchianLo[1] && TurtleUnits >= 1 and A_condK)
{
SellShort(TurtleUnits,open);
SendOrderThisBar = True;
out_range=TRS;
HighAfterEntry = EntryPrice;//保存空头开仓价格;
}
}
// 长周期突破调节出场参数,变化幅度收敛,保住更多利润
If(MarketPosition <> 0)
{
Dcond_outTrs=CrossOver(C[1],fsDonchianHi[1]);
Commentary("fsDonchianHi="+Text(fsDonchianHi));
If(Dcond_outTrs and SendOrderThisBar==True)
{
out_range=TRS*XX;
SendOrderThisBar=False;
}
Kcond_outTrs=CrossUnder(C[1],fsDonchianLo[1]);
Commentary("fsDonchianLo="+Text(fsDonchianLo));
If(Kcond_outTrs and SendOrderThisBar==True)
{
out_range=TRS*XX;
SendOrderThisBar=False;
}
}
Commentary("CurrentEntries = " + Text(CurrentEntries));
//移动出场
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*out_range/1000)*liQKA; //经过计算,这根吊灯出场线会随着持仓时间的增加变的越来越敏感;
}
if(MarketPosition<0)
{
KliqPoint = HighAfterEntry + (Open*out_range/1000)*liQKA; //经过计算,这根吊灯出场线会随着持仓时间的增加变的越来越敏感;
}
// 画线
Commentary("(Open*out_range/1000)*liQKA"+text((Open*out_range/1000)*liQKA));
Commentary("(Open*TRS/1000)*liQKA"+text((Open*TRS/1000)*liQKA));
//If(KliqPoint[1]>0)PlotNumeric("KliqPoint[1]",KliqPoint[1]);
// 持有多单时
If(MarketPosition >0 And BarsSinceEntry >0 And Low <= DliqPoint[1] and DliqPoint[1]>0 and DliqPoint>0 and BarsSinceEntry>0)
{
Sell(0,Min(Open,DliqPoint[1]));
barcoutN=0;
DliqPoint=0;
}
// 持有空单时
If(MarketPosition <0 And BarsSinceEntry >0 And High >= KliqPoint[1] and KliqPoint[1]>0 and KliqPoint>0 and BarsSinceEntry>0)
{
BuyToCover(0,Max(Open,KliqPoint[1]));
KliqPoint=0;
barcoutN=0;
}
}
那是警告,不是错误。警告就是一个提醒,你只要清楚不会出问题就没事。
你的情况,我建议把crossover和crossunder的函数计算放到if结构外面 先提前运行完,不要放到信号判断结构里再运算。
具体原因可以论坛搜搜 序列类型 看专题帖子学习原理