End If '(5) Else '(3)包含
vbtegx(newtewei) = xianfang
If (vbted(tewei) >= vbted(newtewei) And vbteg(tewei) <= vbteg(newtewei))
Then
'后面包含前面 newtewei是后面的 tewei在前面 1为tewei被后一个包含 2为newtewei包含前一个 vbtebao(tewei) = 1 vbtebao(newtewei) = 2 Else
'前面包含后面 -1为tewei包含后一个 -2为newtewei被前一个包含 vbtebao(tewei) = -1 vbtebao(newtewei) = -2 End If
If (xianfang = -1) Then '线段方向向下取向下包含
temp = min(vbted(newtewei), vbted(tewei)) vbted(newtewei) = temp vbted(tewei) = temp
temp = min(vbteg(newtewei), vbteg(tewei)) vbteg(newtewei) = temp vbteg(tewei) = temp Else
'线段方向向上取向上包含
temp = max(vbted(newtewei), vbted(tewei)) vbted(newtewei) = temp vbted(tewei) = temp
temp = max(vbteg(newtewei), vbteg(tewei)) vbteg(newtewei) = temp vbteg(tewei) = temp End If
'判断与tewei的前面是否有连续的包含关系 temp = tewei - 1 ex = 0 bao = 0
Do While (ex = 0)
Do While ( temp >=0)
If (vbteg(temp) <> 0 ) then exit do end if
temp = temp - 1 Loop
if (temp<0) then
'msgbox(\当前的10 temp:\当前的nlast:\exit do end if
If (vbtebao(temp) = 0 Or vbtebao(temp) >= 2 Or vbtebao(temp) = -2 Or vbtegx(temp) <> xianfang) Then
ex = 1 Else
bao = bao + 1 End If
temp = temp - 1 Loop
'有几个连续包含,指大于三个K线的包含,BAO的值是包含的K线数减2,当只有两个连续K线包含时BAO为0 temp = tewei - 1 For i = 1 To bao
Do While ( temp >=0)
If (vbteg(temp) <> 0 ) then exit do end if
temp = temp - 1 Loop
if (temp<0) then
'msgbox(\当前的11 temp:\当前的nlast:\exit for end if
vbteg(temp) = vbteg(tewei) vbted(temp) = vbted(tewei) temp = temp - 1 Next
vbtebao(newtewei) = bao + 2 temp = tewei - 1
For i = 1 To bao + 2
If (i = 1 Or i = bao + 2) Then Else
Do While ( temp >0)
If (vbteg(temp) <> 0 ) then exit do end if
temp = temp - 1 Loop
if (temp<0) then
'msgbox(\当前的12 temp:\当前的nlast:\exit for end if
vbtebao(temp) = -3 temp = temp - 1 End If Next
tewei=newtewei
x2=x4 x3=x5
m = x5 + 1 End If '(3) Next '(2)
For i = 0 To nlast
If (vbtebao(i) = -2) Then vbtebao(i) = 2 End If
If (vbtebao1(i) = -2) Then vbtebao1(i) = 2 End If
Next
'包含关系标准化,即结束标志都为2及以上 '处理线段的两个端点满足条件顶>=底 i=0
do while (vbxian(i)=0) i=i+1
if (i>nlast) then Exit Do end if loop
lastfenxing=i
for m = lastfenxing+1+ nlast to nlast if (vbxian(m)<>0) then if (vbxian(m)>0) then
if (vbxiang(m)>=vbxiand(lastfenxing)) then '满足条件顶>=底 lastfenxing=m else
'不满足条件顶<底 两个全置为0,并查下一个 vbxian(m)=0
vbxian(lastfenxing)=0 vbxiang(m)=0
vbxiang(lastfenxing)=0 vbxiand(m)=0
vbxiand(lastfenxing)=0 m=m+1
do while (vbxian(m)=0) m=m+1
if (m>nlast) then
Exit Do end if loop
lastfenxing=m end if else
if (vbxiand(m)<=vbxiang(lastfenxing)) then '满足条件底<顶 lastfenxing=m else
'不满足条件底<顶 两个全置为0,并查下一个 vbxian(m)=0
vbxian(lastfenxing)=0 vbxiang(m)=0
vbxiang(lastfenxing)=0 vbxiand(m)=0
vbxiand(lastfenxing)=0 m=m+1
do while (vbxian(m)=0) m=m+1
if (m>nlast) then Exit Do end if loop
lastfenxing=m end if end if end if next
'计算线段的高点和低点 i=0
do while (vbxian(i)=0) i=i+1
if (i>nlast) then Exit Do end if loop
lastfenxing=i
'vbxiang(i)=vbh(i) 'vbxiand(i)=vbl(i) gg=vbxiang(i) dd=vbxiand(i)
for m = lastfenxing+1+ nlast to nlast
if (vbfenxing(m)<>0) then gg=max(gg,vbh(m)) dd=min(dd,vbl(m))
if (vbxian(m)<>0) then vbxiang(i)=gg vbxiand(i)=dd
if (vbxian(m)>0) then else end if
gg=vbh(m) dd=vbl(m) end if end if next
end if '(1) i=nlast
do while (vbxian(i)=0) i=i-1
if (i>nlast or i<0) then Exit Do end if loop
lastfenxing=i
'vbxian(nlast) = -vbxian(lastfenxing) 'vbxiang(nlast) = vbh(nlast) 'vbxiand(nlast) = vbl(nlast) 'vbteg(newtewei) = 0 'vbted(newtewei) = 0
'以下为自定义函数部分 Function max(a, b)