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);
整个实际是个大循环 里面又写了一些代码
运行在序列模式下 一运行 金字塔就崩溃退出
循环程序进入死循环了。
建议你按照下列步骤进行:
1、不开打开含有该公式的图表,防止再次进入死循环。如果已经进入死循环,按 Ctrl+Alt+Ins键退出死循环关掉图表。
2、打开该公式编辑器,点“调试菜单”-》开始调试。 建议你使用单步跟踪,然后代码中设置断点的方式进行调试,可以逐步的找到死循环的原因。