Params
//Series<Numeric> Price(1); //数值型序列值
Numeric EffRatioLength(10); //自适应周期数
Numeric FastAvgLength(2); //短周期数
Numeric SlowAvgLength(30); //长周期数
Numeric n(20);
Numeric percentage(0.1);
Vars
Numeric NetChg(0);
Numeric TotChg(0);
Numeric EffRatio(0);
Numeric ScaledSFSqr(0);
Series<Numeric> AMA;
Numeric SFDiff;
Series<Numeric> Filter;
Events
OnBar(ArrayRef<Integer> indexs)
{
if(CurrentBar == 0)
{
AMA = close;
}Else
{
NetChg = Abs( close - close[EffRatioLength] );
TotChg = Summation( Abs( close - close[1]), EffRatioLength );
EffRatio = IIF(TotChg > 0, NetChg / TotChg, 0);
SFDiff = 2 / ( FastAvgLength + 1 ) - 2 / ( SlowAvgLength + 1 );
ScaledSFSqr = Sqr( 2 / ( SlowAvgLength + 1 ) + EffRatio * SFDiff );
AMA = AMA[1] + ScaledSFSqr * ( close - AMA[1] );
}
Filter=percentage*standardDev(AMA-AMA[1],n);//过滤器
//入场规则:
IF(AMA-lowest(AMA,n)>Filter and MarketPosition<>1)
{
Buy(0,Max(Open,High[1]));
}
IF(highest(AMA,n)-AMA<Filter and MarketPosition<>-1)
{
SellShort(0,Min(Open,Low[1]));
}
//退出规则:
//多头获利了结:
if((AMA-AMA[1] < -filter or AMA-AMA[2] < -filter or AMA-AMA[3] < -filter) and MarketPosition==1) //确保做空前,多头仓位已经平仓
{
sell(0,Min(Open,Low[1]));
}
//空头获利了结:
if((AMA-AMA[1] > filter or AMA-AMA[2] > filter or AMA-AMA[3] > filter) and MarketPosition==-1) //确保做多前,空头仓位已经平仓
{
BuyToCover(0,Max(Open,High[1]));
}
//画Kline
if(MarketPosition==1) //判断是否有持仓
{
plotnumeric("open",min(open,close),open,Red);
plotnumeric("high",high,high,Red);
plotnumeric("low",low,low,Red);
plotnumeric("close", max(open,close),close,Red);
}
if(MarketPosition==-1) //判断是否有持仓
{
plotnumeric("open",max(open,close),open,Green);
plotnumeric("high",high,high,Green);
plotnumeric("low",low,low,Green);
plotnumeric("close", min(open,close),close,Green);
}
PlotNumeric("AMA",AMA);
}
序列类型的问题
这个只是警告,就是可能会计算出错,但是不一定
具体可能出错的原因,以及优化办法,可以在社区搜索 序列类型 相关说明贴看看,视频也有相关专题课