Params
Numeric FastLength(5);
Numeric SlowLength(60);
Numeric SlowLength2(150);
Numeric SlowLength3(300);
enum<String> sym(["br888.SHFE","ni888.SHFE","jm888.DCE","nr888.INE","si888.GFEX",
"ag888.SHFE","ru888.SHFE","rb888.SHFE","eb888.DCE"]); //br合成橡胶,ni镍 ,jm 焦炭,nr20号胶 ag银 ru橡胶 rb螺纹eb苯乙烯
enum<String> freq1(["1m","5m","15m","30m","1h","2h","4h","1d"]); //数据源周期1
enum<String> freq2(["1m","5m","15m","30m","1h","2h","4h","1d"]); //数据源周期2
Numeric beginTime(20251007.000000);//数据开始时间
Vars
Series<Numeric> AvgValue1;
Series<Numeric> AvgValue2;
Series<Numeric> AvgValue3;
Series<Numeric> AvgValue4;
Global Integer layer1;
Global Integer layer2;
Series<Numeric> Avg_kaofuma;
Series<Numeric> VarSum;
Series<Numeric> Highestvar;
Series<Numeric> lowline;
Series<Numeric> pinjun;
Series<Numeric> CrossStdDev;
Plot plt3;//画图窗口
Plot plt4;//画图窗口
Series<Numeric> Area_100; // 关键:面积必须是序列
Series<Numeric> Area_100_CrossLow;
Bool AlreadyBought(False); // 新增:本K线是否已开多
Bool AlreadySold(False); // 新增:本K线是否已开空
Events
OnInit()
{
SetBackBarMaxCount(1+Max(FastLength,SlowLength3));
layer1 = subscribebar(sym, freq1, beginTime, 0, Enum_Data_RolloverForWard() + Enum_Data_ActivePeriod());
layer2 = subscribebar(sym, freq2, beginTime, 0, Enum_Data_RolloverForWard() + Enum_Data_ActivePeriod());
plt3.figure(0);
plt4.figure(0);
}
OnBar(ArrayRef<Integer> indexs)
{
Range[0: DataSourceSize() - 1]
{
AvgValue1 = AverageFC(Close, FastLength);
AvgValue2 = AverageFC(Close, SlowLength);
AvgValue3 = AverageFC(Close, SlowLength2);
AvgValue4 = AverageFC(Close, SlowLength3);
}
PlotNumeric("MA1", AvgValue1);
PlotNumeric("MA2", AvgValue2);
PlotNumeric("MA3", Data[layer2].AvgValue3);
PlotNumeric("MA4", Data[layer2].AvgValue4);
Avg_kaofuma = (Data[layer1].AvgValue1 + Data[layer1].AvgValue2 + Data[layer2].AvgValue3 + Data[layer2].AvgValue4) / 4;
//方差
VarSum = (Sqr(Data[layer1].AvgValue1 - Avg_kaofuma) +
Sqr(Data[layer1].AvgValue2 - Avg_kaofuma) +
Sqr(Data[layer2].AvgValue3 - Avg_kaofuma) +
Sqr(Data[layer2].AvgValue4 - Avg_kaofuma) ) / 4;
//标准差
CrossStdDev = Sqrt(VarSum) ;
//data[layer1].plt3.line("VarSum", VarSum);
plt3.line("CrossStdDev", CrossStdDev);
Highestvar = Highest(CrossStdDev[1], 10000);
lowline = Lowest(CrossStdDev[1], 10000);
pinjun = (lowline + Highestvar) / 2;
plt3.line("Highestvar", Highestvar);
plt3.line("lowline", lowline);
plt3.line("pinjun", pinjun);
AlreadyBought = False;
AlreadySold = False;
// If( Data[layer2].AvgValue3 > Data[layer2].AvgValue4)
{
If (MarketPosition > 0 && CrossUnder(CrossStdDev , pinjun))
Sell(1, Open);
If (!AlreadyBought && MarketPosition < 1 and CrossOver(CrossStdDev , pinjun ))
Buy(1, Open);
AlreadyBought = True;
}
//If( Data[layer2].AvgValue3 < Data[layer2].AvgValue4)
{
If (MarketPosition < 0 && CrossOver(CrossStdDev , pinjun ) )
BuyToCover(1, Open );
If (!AlreadySold && MarketPosition > -1 And CrossUnder(CrossStdDev , pinjun) )
SellShort(1, Open);
AlreadySold = True;
}
}
取出来的值和想取的值不一样,麻烦大佬们给看一下,目的是想用 Highestvar = Highest(CrossStdDev[1], 10000);
lowline = Lowest(CrossStdDev[1], 10000);取10000以内的最大值和最小值,或还有其他函数或方法麻烦介绍一下,谢谢
策略单元设置
最大回溯范围调整下,比10000大
