//------------------------------------------------------------------------
// 简称: DualMA
// 名称: 双均线交易系统
// 类别: 策略应用
// 类型: 内建应用
//------------------------------------------------------------------------
Params
Numeric FastLength(5); // 短期指数平均线参数
Numeric SlowLength(10); // 长期指数平均线参数
Vars
Series<Numeric> AvgValue1;
Series<Numeric> AvgValue2;
Bool bGoldenCross(false); // 标记是否出现完全金叉
Bool bDeathCross(false); // 标记是否出现完全死叉
Integer crossCount(0); // 用来记录从金叉/死叉到现在的天数
Events
OnBar(ArrayRef<Integer> indexs)
{
AvgValue1 = AverageFC(Close, FastLength);
AvgValue2 = AverageFC(Close, SlowLength);
PlotNumeric("MA1", AvgValue1);
PlotNumeric("MA2", AvgValue2);
// 判断是否发生金叉或死叉
if (AvgValue1[1] > AvgValue2[1] && AvgValue1[2] <= AvgValue2[2]) {
bGoldenCross = true;
bDeathCross = false;
crossCount = 0;
} else if (AvgValue1[1] < AvgValue2[1] && AvgValue1[2] >= AvgValue2[2]) {
bDeathCross = true;
bGoldenCross = false;
crossCount = 0;
}
// 如果是金叉,开始计数
if (bGoldenCross) {
crossCount=crossCount+1;
// 检查是否达到完全金叉条件
if (crossCount >= 4) {
if (MarketPosition <> 1) {
Buy(0, Open);
}
bGoldenCross = false; // 清除标记,等待下一次金叉
}
}
// 如果是死叉,开始计数
if (bDeathCross) {
crossCount=crossCount+1;
// 检查是否达到完全死叉条件
if (crossCount >= 4) {
if (MarketPosition <> -1) {
SellShort(0, Open);
}
bDeathCross = false; // 清除标记,等待下一次死叉
}
}
}
//------------------------------------------------------------------------
你这是在进行定义变量时出的错误,你定义的是普通变量,程序每运行一次,都会对普通变量重新分配内存,进行初始化操作,所以普通变量无法保存上一个Bar中程序运行的结果。你需要定义成序列或者全局变量。
谢谢您,解决啦!