这个自适应均线程序哪里有问题,请老师改写一下,谢谢
Params
Series<Numeric> Price(1); //数值型序列值
Numeric EffRatioLength(10); //自适应周期数
Numeric FastAvgLength(2); //短周期数
Numeric SlowAvgLength(30); //长周期数
//系统相关
Numeric ConfirmPeriod(3); //确认均线趋势次数
Numeric StdMultiplier(1); //过滤器百分比
//交易相关
Numeric Slipes(2); //滑点
Vars
//AMA相关
Numeric STDLen(0); //标准差长度
Numeric PriceSTD(0);
Numeric STDRatio(1); //进入标准差的倍数
Bool LongIndicator(True);
Bool ShortIndicator(True);
Numeric i;
Numeric NetChg(0);
Numeric TotChg(0);
Numeric EffRatio(0);
Numeric ScaledSFSqr(0);
Series<Numeric> AMAValue;
Numeric SFDiff;
Events
OnBar(ArrayRef<Integer> indexs)
{
if(CurrentBar == 0)
{
AMAValue = Price;
}Else
{
NetChg = Abs( Price - Price[EffRatioLength] );
TotChg = Summation( Abs( Price - Price[1] ), EffRatioLength );
EffRatio = IIF(TotChg > 0, NetChg / TotChg, 0);
SFDiff = 2 / ( FastAvgLength + 1 ) - 2 / ( SlowAvgLength + 1 );
ScaledSFSqr = Sqr( 2 / ( SlowAvgLength + 1 ) + EffRatio * SFDiff );
AMAValue = AMAValue[1] + ScaledSFSqr * ( Price - AMAValue[1] );
}
STDLen=SlowAvgLength;
PriceSTD=StandardDev(Close[1],STDLen);
//当不持多仓的情况下,如果做多条件满足,则做多
If(MarketPosition <>1 && AMAValue[1]-Lowest(AMAValue[1],ConfirmPeriod) > PriceSTD*STDRatio*StdMultiplier/100 )
{
Buy(0,Open+Slipes);
PlotString ("top","jdc",Portfolio_TotalProfit,Red);
}
//当不持空仓的情况下,如果做空条件满足,则做空
If(MarketPosition <>-1 && Highest(AMAValue[1],ConfirmPeriod)-AMAValue[1] > PriceSTD*STDRatio*StdMultiplier/100 )
{
SellShort(0,Open-Slipes);
PlotString ("top","jkc",Portfolio_TotalProfit,Red);
}
PlotNumeric("PL",Portfolio_TotalProfit);
}
懂了,谢谢老师。这个问题出现很多此,现在才明白。
编译报了一个错误一个警告
错误是这一行
序列变量只能作为函数参数,不可以作为公式参数
而警告是这一行
警告不是错误,是提醒你这么写可能计算结果是错误的。
序列对象不能放在分支结构中,否则可能造成计算结果错误。
原因这个帖子里由简单介绍
语法问题,这里sum求和不对,不过我已经找到了老师的正确答案,写法不一样.sum函数不能用吗
您好!如果不是语法问题的话,您应该描述清楚哪里有问题,否则我们也不知道该改动哪里。
这就好比检查英文文章,只有拿着中文文章参照意思才能确认英文文章表达的意思对不对。