Params
Numeric Length(20); //周期
Numeric Offset(2);
Numeric Length1(5);
Numeric Length2(10);
Numeric Length3(53);
Numeric Lots(1);
Numeric FastLength(12);
Numeric SlowLength(26);
Numeric MACDLength(9); //标准差倍数 //此处添加参数
Vars
Numeric UpLine; //上轨
Numeric DownLine; //下轨
Series<Numeric> MidLine; //中间线
Numeric Band;
series<Numeric> ma1;
series<Numeric> ma2;
series<Numeric> ma3;
series<Bool> CrossUp;
series<Bool> CrossDown;
series<Bool> CrossUp1;
series<Bool> CrossDown1;
Numeric MACDDiff;
Numeric AvgMACD;
Numeric MACDValue; //此处添加变量
//此处添加变量
Defs
//此处添加策略函数
Events
OnReady()
{
Range[0:DataSourceSize() - 1]
{
setPlotOption("MACDDiff", "begin-bar", SlowLength);
setPlotOption("MACDDEA", "begin-bar", SlowLength + MACDLength);
setPlotOption("MACD", "begin-bar", SlowLength + MACDLength);
}
}//此处实现事件函数
//初始化事件函数,策略运行期间,首先运行且只有一次
OnInit()
{SetBackBarMaxCount(1+Length);
Range[0:DataSourceSize() - 1]
{
setPlotOption("MidLine", "begin-bar", Length);
setPlotOption("UpLine", "begin-bar", Length);
setPlotOption("DownLine", "begin-bar", Length);
}
}
//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组
OnBar(ArrayRef<Integer> indexs)
{Range[0:DataSourceSize() - 1]
{
MidLine = AverageFC(Close, Length);
Band = StandardDev(Close, Length, 2);
UpLine = MidLine + Offset * Band;
DownLine = MidLine - Offset * Band;
PlotNumeric("UpLine", UpLine);
PlotNumeric("DownLine", DownLine);
PlotNumeric("MidLine", MidLine);
}
ma1=Average(Close,length1);
ma2=Average(Close,length2);
ma3=Average(Close,length3);
PlotNumeric("ma1", ma1);
PlotNumeric("ma2", ma2);
PlotNumeric("ma3", ma3);
CrossUp = CrossOver(ma1[1],MidLine[1]) ;
CrossUp1 = CrossOver(ma1[1],MidLine[1]) ;
CrossDown = CrossUnder(ma1[1],MidLine[1]) ;
CrossDown1 = CrossUnder(ma1[1],MidLine[1]) ;
Range[0:DataSourceSize() - 1]
{
MACDDiff = XAverage( Close, FastLength ) - XAverage( Close, SlowLength ) ;
AvgMACD = XAverage(MACDDiff,MACDLength);
MACDValue = 2 * (MACDDiff - AvgMACD);
PlotNumeric("MACDDiff",MACDDiff);
PlotNumeric("MACDDEA",AvgMACD);
If (MACDValue >= 0)
PlotAuto("MACD",MACDValue,0,Color9(),Enum_Bar);
Else
PlotAuto("MACD",MACDValue,0,Color10(),Enum_Bar);
PlotNumeric("零线",0);
}
If(CrossUp And MarketPosition<>1 And ma2[1]>=ma3[1] )
{
Buy(Lots,Open);
}
If( CrossDown1 And MarketPosition==1 )
Sell(0,Open);
If(CrossDown And MarketPosition<>-1 And ma2[1]<=ma3[1] )
SellShort(Lots,open);
If(CrossUp1 And MarketPosition==-1 )
BuyToCover(0,Open);
}