DATAPERIODNUMBER:=DATATYPE;
vn:=DATACOUNT;
vh:=HIGH;
vl:=LOW;
variable: vallding[]=0,valldi[]=0;
//找出所有顶分型和底分型
dingcount:=0;
dicount:=0;
for i=3 to vn do
begin
ktype:=0; //判断是独立K还是分型 初始0
if vh[i-1]>vh[i-2] && vh[i-1]>vh[i] && (vl[i-1]>=vl[i-2] || vl[i-1]>=vl[i]) then
ktype:=1;
if vl[i-1]<vl[i-2] && vl[i-1]<vl[i] && (vh[i-1]<=vh[i-2] || vh[i-1]<=vh[i]) then
ktype:=2;
if vh[i-1]>vh[i-2] && vh[i-1]>vl[i] && vl[i-1]<vh[i-2] && vh[i-1]<vh[i] then
ktype:=3;
else
ktype:=4;
if ktype=1 then //标准顶和含有包含关系的顶
begin
if vl[i-1]>vl[i-2] && vl[i-1]>vl[i] then //标准顶
begin
vallding[dingcount]:=i-1;
dingcount:=dingcount+1;
end;
else
begin
temp_bh:=i-1;
new_kh:=vh[temp_bh];
new_kl:=vl[temp_bh];
while (vh[temp_bh-1]<=new_kh) && (vl[temp_bh-1]>=new_kl) || (vh[temp_bh-1]>=new_kh) && (vl[temp_bh-1]<=new_kl) do
begin
new_kh:=max(vh[temp_bh-1],vh[temp_bh]);
new_kl:=max(vl[temp_bh-1],vl[temp_bh]);
temp_bh:=temp_bh-1;
end;
temp_bh:=i-1;
while (vh[temp_bh+1]<=new_kh) && (vl[temp_bh+1]>=new_kl) || (vh[temp_bh+1]>=new_kh) && (vl[temp_bh+1]<=new_kl) do
begin
new_kh:=max(vh[temp_bh+1],vh[temp_bh]);
new_kl:=max(vl[temp_bh+1],vl[temp_bh]);
temp_bh=temp_bh+1;
end;
vallding[dingcount]:=temp_bh;
dingcount:=dingcount+1;
end;
end;
else if ktype=2 then
begin
if vh[i-1]<vh[i-2] and vh[i-1]<vh[i] then //标准底
begin
valldi[dicount]:=i-1;
dicount:=dicount+1;
end;
else
begin
temp_bh:=i-1;
new_kh:=vh[temp_bh];
new_kl:=vl[temp_bh];
while (vh[temp_bh-1]<=new_kh) && (vl[temp_bh-1]>=new_kl) || (vh[temp_bh-1]>=new_kh) && (vl[temp_bh-1]<=new_kl) do
begin
new_kh:=min(vh[temp_bh-1],vh[temp_bh]);
new_kl:=min(vl[temp_bh-1],vl[temp_bh]);
temp_bh:=temp_bh-1;
end;
temp_bh=i-1;
while (vh[temp_bh+1]<=new_kh) && (vl[temp_bh+1]>=new_kl) || (vh[temp_bh+1]>=new_kh) && (vl[temp_bh+1]<=new_kl) do
begin
new_kh:=min(vh[temp_bh+1],vh[temp_bh]);
new_kl:=min(vl[temp_bh+1],vl[temp_bh]);
temp_bh:=temp_bh+1;
end;
valldi[dicount]:=temp_bh;
dicount:=dicount+1;
end;
end;
else if ktype=3 THEN
begin
dingordi:=0; //初始0 顶1 底2
temp_bh:=i-1;
new_kh:=vh[temp_bh];
new_kl:=vl[temp_bh];
while (vh[temp_bh-1]<=new_kh) && (vl[temp_bh-1]>=new_kl) || (vh[temp_bh-1]>=new_kh) && (vl[temp_bh-1]<=new_kl) do
temp_bh:=temp_bh-1;
if vh[temp_bh-1]<vh[temp_bh] && vl[temp_bh-1]<vl[temp_bh-1] then
dingordi:=1;
else
dingordi:=2;
if dingordi=1 then //判断是顶还是底
begin
temp_bh:=i-1;
new_kh:=vh[temp_bh];
new_kl:=vl[temp_bh];
while (vh[temp_bh-1]<=new_kh) && (vl[temp_bh-1]>=new_kl) || (vh[temp_bh-1]>=new_kh) && (vl[temp_bh-1]<=new_kl) do
begin
new_kh:=max(vh[temp_bh-1],vh[temp_bh]);
new_kl:=max(vl[temp_bh-1],vl[temp_bh]);
temp_bh:=temp_bh-1;
end;
temp_bh:=i-1;
while (vh[temp_bh+1]<=new_kh) && (vl[temp_bh+1]>=new_kl) || (vh[temp_bh+1]>=new_kh) && (vl[temp_bh+1]<=new_kl) do
begin
new_kh:=min(vh[temp_bh-1],vh[temp_bh]);
new_kl:=min(vl[temp_bh-1],vl[temp_bh]);
temp_bh:=temp_bh+1;
end ;
vallding[dingcount]:=temp_bh;
dingcount:=dingcount+1;
end ;
else
begin
temp_bh:=i-1;
new_kh:=vh[temp_bh];
new_kl:=vl[temp_bh];
while (vh[temp_bh-1]<=new_kh) && (vl[temp_bh-1]>=new_kl) || (vh[temp_bh-1]>=new_kh) && (vl[temp_bh-1]<=new_kl) do
begin
new_kh:=min(vh[temp_bh-1],vh[temp_bh]);
new_kl:=min(vl[temp_bh-1],vl[temp_bh]);
temp_bh:=temp_bh-1;
end;
temp_bh=i-1;
while (vh[temp_bh+1]<=new_kh) && (vl[temp_bh+1]>=new_kl) || (vh[temp_bh+1]>=new_kh) && (vl[temp_bh+1]<=new_kl) do
begin
new_kh:=min(vh[temp_bh-1],vh[temp_bh]);
new_kl:=min(vl[temp_bh-1],vl[temp_bh]);
temp_bh:=temp_bh+1;
end;
valldi[dicount]:=temp_bh;
dicount:=dicount+1;
end ;
end;
end;
for i=1 to ubound(vallding) do
drawicon(barpos=vallding[i],high,1);
这只做了第一步 想DATACOUNT求得加载K线数后 循环一遍 找出我想要的分型来