HH:=H; LL:=L; FOR I=2 TO DATACOUNT DO BEGIN N1:=HH[I]>HH[I-1] AND LL[I]>LL[I-1]; N2:=HH[I]<HH[I-1] AND LL[I]<LL[I-1]; N3:=(HH[I]>=HH[I-1] AND LL[I]<=LL[I-1]) OR (HH[I]<=HH[I-1] AND LL[I]>=LL[I-1]); IF N1 THEN BEGIN A[I]:=1;AA[I]:=1;END; IF N2 THEN BEGIN A[I]:=2;AA[I]:=2;END; IF N3 THEN BEGIN A[I]:=3;AA[I]:=AA[I-1];END; IF N3 THEN BEGIN IF AA[I-1]=1 THEN BEGIN HH[I]:=MAX(HH[I],HH[I-1]); LL[I]:=MAX(LL[I],LL[I-1]); END; IF AA[I-1]=2 THEN BEGIN HH[I]:=MIN(HH[I],HH[I-1]); LL[I]:=MIN(LL[I],LL[I-1]); END; END; IF A[I+1]=3 THEN BEGIN G[I]:=10;GG[I]:=10;END; END; 老师好,最后一个问题,AA[I-1]是否有错?副图显示数组越界操作,我的取值是I=2 TO DATACOUNT ,为什么AA[I-1]就越界了呢?求详细解答 |
A[]这个数组,I的取值范围是2到DATACOUNT, 当实际数组里I的值不在这个范围内就会越过数组下标或上标。这里建议您加个控制条件,例如
HH:=H;
LL:=L;
FOR I=2 TO DATACOUNT DO BEGIN
IF I>=3 AND I<=DATACOUNT-1 THEN
BEGIN
N1:=HH[I]>HH[I-1] AND LL[I]>LL[I-1];
N2:=HH[I]<HH[I-1] AND LL[I]<LL[I-1];
N3:=(HH[I]>=HH[I-1] AND LL[I]<=LL[I-1]) OR (HH[I]<=HH[I-1] AND LL[I]>=LL[I-1]);
IF N1 THEN BEGIN A[I]:=1;AA[I]:=1;END;
IF N2 THEN BEGIN A[I]:=2;AA[I]:=2;END;
IF N3 THEN BEGIN A[I]:=3;AA[I]:=AA[I-1];END;
IF N3 THEN BEGIN
IF AA[I-1]=1 THEN BEGIN
HH[I]:=MAX(HH[I],HH[I-1]);
LL[I]:=MAX(LL[I],LL[I-1]);
END;
IF AA[I-1]=2 THEN BEGIN
HH[I]:=MIN(HH[I],HH[I-1]);
LL[I]:=MIN(LL[I],LL[I-1]);
END;
END;
IF A[I+1]=3 THEN BEGIN G[I]:=10;GG[I]:=10;END;
END;
END;
恩,这个随K线长度变化导致的
我觉得可以对A[1]和A[DATACOUNT]你自行定义一个值,这样就不会有此情况
目前只能这样用着,后续我们再看下