[PEL] 复制代码
variable:index:=0;//全局变量记录最近一次标记的数值。如遇到无法连续进行标记情况,全局变量重置为0,标记过程重新开始
s1:"gd.s1";
s2:"gd.s2";
gd:=cross(s1,0);//高点条件
dd:=cross(s2,0);//低点条件
a:drawline(gd,h,cross(s2,0) or islastbar,l,0),coloryellow,linethick2;
b:drawline(dd,l,cross(s1,0) or islastbar,h,0),colorwhite,linethick2;
ma50:ma(c,50);
d_1:=sumbars(dd,1);//前一个低点位置
g_1:=sumbars(gd,1);//前一个高点位置
d_2:=sumbars(dd,2);
g_2:=sumbars(gd,2);
d1:=ref(l,d_1-1),nodraw;
g1:=ref(h,g_1-1),nodraw;
d2:=ref(l,d_2-1),nodraw;
g2:=ref(h,g_2-1),nodraw;
//算法思路是从历史迭代的方式来标记1-4点。每次标记不仅仅要判断当前条件,还要看前一个标记是不是满足条件,比如当前标记为3,前一个位置必须是2。
//如果不满足连续标记的条件,那么则重置这个标记过程,从标记1 重新开始标记
//初始起点选择从第一个低点开始
//第五个点 不影响正常标记的迭代过程,不做变量的迭代
if (index=4) and dd then
begin
drawtext(1 , (l*0.99995), 'i5',colorgreen,0),linethick6;
index:=0;
goto r;
end
if index=3 and gd then //高点条件满足;前面标记为是3 前提下进行后续的判断
begin
if d1<d2 and g1<g2 and g1<d2 and h<ma50 then
begin
index:=4;
drawtext(1, (h*1.008), 'i4',coloryellow,0),linethick6;
end else index:=0;
end
if index=2 and dd then
begin
if d1<d2 and d1<g1 and l<ma50 then
begin
index:=3;
drawtext(1 , (l*0.99995), 'i3',colorgreen,0),linethick6;
end
else index:=0;
end
if index=1 and gd then
begin
index:=2;
drawtext(1 , (h*1.002), 'i2',colorwhite,0),linethick6;
end
if (index=0 or index=4) and dd then
begin
index:=1;
drawtext(1 , (l*0.99995), 'i1',colorred,0),linethick6;
end
r@;
if index=0 and gd then
begin
drawtext(1 ,(h*1.002), 'i0',colorwhite,0),linethick6;
end