缠论一买、三买选股公式(飞狐+悟多公式)MA10:=MA(CLOSE,10);MA5:=MA(CLOSE,5);MA1:=MA5-MA10;MA2:=MA10;MA3:=MA10;DATANUMBER:=DATATYPE;DATANUMBER1:=DATATYPE;DATANUMBER2:=DATATYPE;DATANUMBER3:=DATATYPE;LING:=HIGH;<%vbdatanumber = ("datanumber")vbdatanumber1 = ("datanumber1")vbdatanumber2 = ("datanumber2")vbdata=1vbdata1=vbdata2=1Select Case vbdatanumberCase 0vbdata=vbdata1=vbdata2=Case 1vbdata=vbdata1=vbdata2=Case 2vbdata=vbdata2= Case 3 vbdata= vbdata1= vbdata2= Case 4 vbdata= vbdata1= vbdata2= Case 5 vbdata= vbdata1= vbdata2= Case 6 vbdata= vbdata1= vbdata2= Case 7 vbdata= vbdata1= vbdata2= Case 8 vbdata= vbdata1= vbdata2= Case 9 vbdata= vbdata1= vbdata2= Case 10 vbdata= vbdata1= vbdata2= Case 11 vbdata= vbdata1= vbdata2= Case 12 vbdata= vbdata1= vbdata2= Case else vbdata=2vbdata2=2End Select ("datanumber") =vbdata ("datanumber1") =vbdata1 ("datanumber2") =vbdata2 vbling = ("ling")vbma = ("ma1")vbma2 = ("ma2")vbma3 = ("ma3")nlast = UBound( vbma ) nvalue =nvaluefu =bianhua = 2oldbianhua = 0for m = 0 to nlastvbma2(m) = 0vbma3(m) = 0vbling(m)=0nextm= 0for i = 0 to nlastm=m+1'nlast - m'vbma2(i) = 0if (vbma(i) > 0) then bianhua = 1nvalue = nvalue + vbma(i) elsebianhua = 2nvaluefu = nvaluefu + vbma(i) end ifif (oldbianhua = bianhua) then elsevbma3(i) = mm=0if (bianhua = 1) thenvbma2(i) = nvaluefu nvaluefu = 0'nvaluefu = 0elsevbma2(i) = nvaluenvalue = 0'nvalue = 0end ifend ifoldbianhua = bianhuanext("ma2") = vbma2("ma3") = vbma3("ling") =vbling%>DRAWNUMBER(REF(MA2,0)<0 AND 0=1,LLV(LOW,5),REF(MA2,0)*1000,0),colorFF00;DRAWNUMBER(REF(MA2,0)<0 AND 0=1,LLV(LOW,5)-DATANUMBER,REF(MA3,0),0),colorFFFF;DRAWNUMBER(REF(MA2,0)<0 AND 0=1,LLV(LOW,5)-DATANUMBER*2,REF(MA2,0)*1000/REF(MA3,0),0),colorFF00; DRAWNUMBER(REF(MA2,0)>0 AND 0=1,HHV(HIGH,5),REF(MA2,0)*1000,0),colorFF;DRAWNUMBER(REF(MA2,0)>0 AND 0=1,HHV(HIGH,5)+DATANUMBER,REF(MA3,0),0),colorFFFF;DRAWNUMBER(REF(MA2,0)>0 AND 0=1,HHV(HIGH,5)+DATANUMBER*2,REF(MA2,0)*1000/REF(MA3,0),0),colorFF; MA1:=MA5-MA10;WEIHE:=LING;WEIPING:=LING;<%vbhe=("weihe")vbping=("weiping")vbma = ("ma1")nlast = UBound( vbma )nvalue =nvaluefu =bianhua = 2oldbianhua = 0i= 0m= nlastif (vbma(nlast) > 0) thenDo While (vbma(m)>0)nvalue = vbma(m) + nvaluei=i+1m=m-1if(m<0) thenexit doend ifLoopelseDo While (vbma(m)<0)nvalue = vbma(m) + nvaluei=i+1m=m-1if(m<0) thenexit doend ifLoopend ifif (i=0) theni=1end ifnvaluefu = nvalue/ivbhe(nlast) = nvaluevbping(nlast) = nvaluefu("weihe") =vbhe("weiping")= vbping%>DRAWNUMBER(WEIHE<>0 AND 0=1,IF(WEIHE>0,HIGH,LOW),WEIHE*1000,0),colorFF;DRAWNUMBER(WEIHE<>0 AND 0=1,(IF(WEIHE>0,HIGH,LOW))-DATANUMBER*2,WEIPING*1000,0),colorFF00; DRAWNUMBER(WEIPING<>0 AND 0=1,(IF(WEIHE>0,HIGH,LOW))-DATANUMBER,WEIHE/WEIPING,0),colorFFFF; DIFF:=EMA(CLOSE,12)-EMA(CLOSE,26);DEA:=EMA(DIFF,9);MACD:=2*(DIFF-DEA);MA1:=MACD;MA2:=MACD;MA3:=MACD;MA1WE:=MACD;HE:=MA2;WEIHEMACD:=0;WEIPINGMACD:=0;H1:=HIGH;L1:=LOW;FOXH:=HIGH;FOXL:=LOW;FOXBAOHAN:=LING;FOXBAOHAN1:=LING;FOXGUANXI:=LING;FOXFENXING:=LING;FOXFENXING1:=LING;FOXFENNUMBER:=LING;FOXQUEKOU:=LING;FOXBICOUNT:=LING;FOXWEIBI:=LING;<%vbquekou=("foxquekou")vbfennumber=("foxfennumber") vbdatanumber = ("datanumber")vbh = ("foxh")vbL = ("foxl")vbh1 = ("foxh")vbL1 = ("foxl")vbbaohan = ("foxbaohan")vbbaohan1 = ("foxbaohan1")vbguanxi = ("foxguanxi")vbfenxing = ("foxfenxing")vbfenxing1 = ("foxfenxing1")vbbicount=("foxbicount")vbweibi=("foxweibi")nlast = UBound( vbh )nvalue =nvaluefu =bianhua = 2vbguanxi(0) = 1for m = 1 to nlastif (vbh(m)>vbh(m-1) and vbl(m)>vbl(m-1)) then vbguanxi(m)=1elseif (vbh(m)<vbh(m-1) and vbl(m)<vbl(m-1)) then vbguanxi(m)=-1elsevbguanxi(m) = 0if (vbguanxi(m-1)=1) thenvbguanxi(m)=1if (vbh(m)>=vbh(m-1) and vbl(m)<=vbl(m-1)) then vbbaohan(m) = 2vbbaohan(m-1) = 1vbh(m-1)=vbh(m)vbl(m)=vbl(m-1)elsevbbaohan(m-1) = -1vbbaohan(m) = -2vbh(m)=vbh(m-1)vbl(m-1)=vbl(m)end ifelsevbguanxi(m)=-1if (vbh(m)>=vbh(m-1) and vbl(m)<=vbl(m-1)) thenvbbaohan(m) = 2vbbaohan(m-1) = 1vbh(m)=vbh(m-1)vbl(m-1)=vbl(m)elsevbbaohan(m-1) = -1vbbaohan(m) = -2vbh(m-1)=vbh(m)vbl(m)=vbl(m-1)end ifend ifend ifend ifnext'处理连续包含即:连续3个及以上K线间存在的包含关系for m = 0 to nlastvbbaohan1(m) = vbbaohan(m)NEXTi=0do while (vbbaohan(i)=0)i=i+1if (i>nlast) thenExit Doend ifloop'第一个包含的位置lastfenxing=ibao=0existbao=0for m = i to nlastif (vbbaohan(m) <> 0) thenbao=bao+1if (bao>=2) thenif (vbbaohan(m)=2 and vbbaohan(m-1)=1 or vbbaohan(m)=-2 and vbbaohan(m-1)=-1) thenvbbaohan1(m) = baoif (bao>2) thenexistbao=BAOfor i = 1 to baovbh(m-bao+i)=vbh(m)vbL(m-bao+i)=vbl(m)if (i = 1 or i=bao ) thenelsevbbaohan1(m-bao+i)=-3end ifnextend if'do while (bao>1)'vbh(m-bao+1)=vbh(m)'vbL(m-bao+1)=vbl(m)'if (existbao=BAO or bao=existbao-1) then'else'vbbaohan1(m-bao+1)=-3'end if'bao=bao-1'loopbao=0end ifend ifelsebao=0end ifnext'分型预处理existbao=vbguanxi(0)for m = 1 to nlast'if (vbh(m-1)>=vbh(m-2) and vbh(m-1)>=vbh(m) and vbl(m-1)>=vbl(m-2) and vbl(m-1)>=vbl(m) or vbh(m-1)<=vbh(m-2) and vbh(m-1)<=vbh(m) and vbl(m-1)<vbl(m-2) and vbl(m-1)<=vbl(m)) then'end ifif (vbguanxi(m)<>existbao) thenif (vbguanxi(m-1)=1) thenvbfenxing(m-1) = 1'顶elsevbfenxing(m-1) = -1'底end ifexistbao=vbguanxi(m)end ifnext'以上分型预处理for m = 0 to nlastvbfenxing1(m) = vbfenxing(m)vbfenxing1(m) = 0nexti=0do while (vbfenxing(i)=0)i=i+1if (i>nlast) thenExit Doend iflooplastfenxing=i'取第一个分型位置'下面去掉连续的顶或底for m = lastfenxing+1+nlast to nlastif (vbfenxing(m)<>0) thenif (vbfenxing(m)<>vbfenxing(lastfenxing)) thenlastfenxing=melseif (vbfenxing(m)=1) thenif (vbh(m)>vbh(lastfenxing)) thenvbfenxing(lastfenxing)=0lastfenxing=melsevbfenxing(m)=0end ifelseif (vbl(m)<vbl(lastfenxing)) thenvbfenxing(lastfenxing)=0lastfenxing=melsevbfenxing(m)=0end ifend if'顶要高的底要低的相等时要选时间在前面的'vbfenxing(m)=0end ifend ifnext'以下处理分型间距离不小于4的要求同时处理连续的顶和底的问题bao=0i=0n=0existbao=vbfenxing(0)m=0do while (vbbaohan1(i) <2)i=i+1if (i>nlast) thenExit Doend iflooplastbaohan=i'第一个包含位置i=0do while (vbfenxing(i)=0)i=i+1if (i>nlast) thenExit Doend ifloop'第一个预备分型位置lastfenxing=ilastfenxing1=lastfenxingi=0for m = lastfenxing+1 to nlastif (vbbaohan(m) = 0) thenbao=bao+1elseif (vbbaohan1(m) >=2 ) thenn=n+1end ifend ifvbfenxing1(m) = bao+n'包含关系只视为一个k线'vbfenxing1(m)=vbbaohan1(m)'if (m>735) then'exit for'end ifif (vbfenxing(m)<>0) thenif (bao+n>= 4) then'分型间距离大于等于4 符合要求if (vbfenxing(m)<>vbfenxing(lastfenxing)) then 'vbfenxing1(m)=vbfenxing(m)n=0bao=0lastfenxing1=lastfenxinglastfenxing=melseif (vbfenxing(m)=1) thenif (vbh(m)>vbh(lastfenxing)) then'exit forvbfenxing(lastfenxing)=0n=0bao=0lastfenxing1=lastfenxinglastfenxing=melsevbfenxing(m)=0end ifelseif (vbl(m)<vbl(lastfenxing)) thenvbfenxing(lastfenxing)=0n=0bao=0lastfenxing1=lastfenxinglastfenxing=melsevbfenxing(m)=0end ifend if'顶要高的底要低的相等时要选时间在前面的end if'将上一个分开型位置数据更新为当下位置else'分型间距离小于4 要看情况若与前分型不同且破坏前笔,可保留其它情况要去掉'破坏前笔即相邻分型不同且高于上上个顶或低于上上个底if (vbfenxing(m)<>vbfenxing(lastfenxing)) then'vbfenxing1(m)=vbfenxing(m)'i=lastfenxing-1'do while (vbfenxing(i)<>vbfenxing(m))'i=i-1'if (i=0) then'Exit Do'end if'loop'lastfenxing1=lastfenxingi=lastfenxing1if (vbfenxing(m)=1) thenif (vbl(m)>vbl1(m))thent1=vbl1(m)elset1=vbl(m)end ifif (vbh(i)>vbh1(i))thent2=vbh(m)t2=vbh1(m)end ifif (t1>t2) thenn=0bao=0lastfenxing1=lastfenxing lastfenxing=melsevbfenxing(m)=0end ifelseif (vbh(m)>vbh1(m))thent1=vbh(m)elset1=vbh1(m)end ifif (vbl(i)>vbl1(i))thent2=vbl(m)elset2=vbl1(m)end ifif (t1<t2) then'if (vbh(m)<vbl(i)) thenn=0bao=0lastfenxing1=lastfenxing lastfenxing=melsevbfenxing(m)=0end ifend ifelseif (vbfenxing(m)=1) thenif (vbh(m)>vbh(lastfenxing)) then 'exit forvbfenxing(lastfenxing)=0n=0bao=0lastfenxing1=lastfenxing lastfenxing=melsevbfenxing(m)=0end ifif (vbl(m)<vbl(lastfenxing)) thenvbfenxing(lastfenxing)=0n=0bao=0lastfenxing1=lastfenxinglastfenxing=melsevbfenxing(m)=0end ifend if'顶要高的底要低的相等时要选时间在前面的end ifend ifend ifnext'以上处理分型间距离不小于4的要求'以下去掉连续的顶或底i=0do while (vbfenxing(i)=0)i=i+1if (i>nlast) thenExit Doend iflooplastfenxing=i'取第一个分型位置'下面去掉连续的顶或底for m = lastfenxing+1+nlast to nlastif (vbfenxing(m)<>0) thenif (vbfenxing(m)<>vbfenxing(lastfenxing)) then lastfenxing=melseif (vbfenxing(m)=1) thenif (vbh(m)>vbh(lastfenxing)) thenvbfenxing(lastfenxing)=0lastfenxing=melsevbfenxing(m)=0end ifelseif (vbl(m)<vbl(lastfenxing)) thenvbfenxing(lastfenxing)=0lastfenxing=melsevbfenxing(m)=0end ifend if'顶要高的底要低的相等时要选时间在前面的'vbfenxing(m)=0end ifend ifnext'以下处理一个顶要大于相邻的两个底及一个底要小于相邻的两个顶的问题'取第一个分型位置i=0do while (vbfenxing(i)=0)i=i+1if (i>nlast) thenExit Doend iflooplastfenxing=ifor m = lastfenxing+1 to nlastif (vbfenxing(m)<>0) thenif (vbfenxing(m)>0) thenif (vbh(m)>vbl(lastfenxing)) then'满足条件顶>底lastfenxing=melse'不满足条件顶>底两个全置为0,并查下一个vbfenxing(m)=0vbfenxing(lastfenxing)=0m=m+1do while (vbfenxing(m)=0)m=m+1if (m>nlast) thenExit Doend iflooplastfenxing=mend ifelseif (vbl(m)<vbh(lastfenxing)) then'满足条件底<顶lastfenxing=m'不满足条件底<顶两个全置为0,并查下一个vbfenxing(m)=0vbfenxing(lastfenxing)=0m=m+1do while (vbfenxing(m)=0)m=m+1if (m>nlast) thenExit Doend iflooplastfenxing=mend ifend ifend ifnexti=0for m = 0 to nlastif (vbfenxing(m)<>0) theni=i+1vbfennumber(m)=iend ifnext'vbfennumber(nlast)=0'vbfenxing(nlast)=-vbfenxing(lastfenxing)x1=0x2=0x3=0x4=0x5=0x6=0x7=0bi=0maxbi=0zhsh=0'先取三个分型数据,然后进入循环处理a=0'Do While (vbfenxing(a) = 0 and a <= nlast) Do While ( a < nlast)if ( vbfenxing(a) <> 0) thenexit doend ifa = a + 1Loopa=x1+1Do While ( a < nlast)if ( vbfenxing(a) <> 0) thenexit doend ifa = a + 1Loopx2=aa=x2+1Do While ( a < nlast)if ( vbfenxing(a) <> 0) thenexit doend ifa = a + 1Loopx3=aa=x3+1bi=0zhshbegin=x1zzg=0zzd=0zgg=0zdd=0zg=0zd=0gg=0dd=0FOR m=a TO nlast'(1)开始按照找出不能形成线段(中枢)的连续三笔中的中间那笔是两个线段(中枢)的分界标志'其它则是不同级别的中枢和线段的思路设计'在大盘和指数中分笔与1分中1分级别要大一些,在个股中1分要大一些因有的个股1分钟内可能无成交if (vbfenxing(m)<>0) then'(2) begin 只在分型不为0时进行处理,即:是分型时处理bi=bi+1x4=mif (zhshbegin=0) thenzhshbegin=x4end ifif (vbfenxing(x1)>0) then'以顶分型开始,x1,x3取高点x2,x4取低点,线段及中枢区间取高点中的低者,低点中的高者zg=min(vbh(x1),vbh(x3))'临时中枢高点zd=max(vbl(x2),vbl(x4))'临时中枢低点gg=max(vbh(x1),vbh(x3))'临时中枢高高点dd=min(vbl(x2),vbl(x4))'临时中枢低低点else'以底分型开始,x2,x4取高点x1,x3取低点zg=min(vbh(x2),vbh(x4))'临时中枢高点zd=max(vbl(x1),vbl(x3))'临时中枢低点gg=max(vbh(x2),vbh(x4))'临时中枢高高点dd=min(vbl(x1),vbl(x3))'临时中枢低低点end ifif (zd>zg ) then'(3)中枢低点大于高点,即未形成中枢,要将x2,x3的位置记录出来vbweibi(x2)=1vbweibi(x3)=2'msgbox("当前的vbweibi(x3):" & cstr(vbweibi(x3)))maxbi=max(maxbi,bi)vbbicount(x2)=bibi=-1zhshbegin=0else'(3)中枢低点小于等于高点,即形成中枢,不用记录位置end if'(3)结束,将x1,x2,x3的值分别换成x2,x3,x4的值,也即向前推进一个分型,然后再返回进行比较x1=x2x2=x3x3=x4end if'(2) 结束NEXT'(1)结束找出所有连续三笔无重叠的位置,即不能形成中枢的候选位置,以下要对这些位置进行筛选并逐个分析,看图时要特别注意这些位置'以下为自定义函数部分Function max(a, b)If (a >= b) Thenmax = aElsemax = bEnd IfEnd FunctionFunction min(a, b)If (a <= b) Thenmin = aElsemin = bEnd IfEnd Function("foxweibi")=vbweibi ("foxbicount")=vbbicount ("foxh") =vbh("foxl") =vbl("foxbaohan") = vbbaohan ("foxbaohan1") = vbbaohan1 ("foxguanxi") = vbguanxi ("foxfenxing") = vbfenxing ("foxfenxing1") = vbfenxing1 ("foxfennumber") = vbfennumber ("foxquekou") = vbquekou%>FOXXIAN:=LING;FOXXIANG:=LING;FOXXIAND:=LING;FOXTEG:=LING;FOXTED:=LING;FOXTEGX:=LING;FOXTEG1:=LING;FOXTED1:=LING;FOXTEGX1:=LING; FOXDATATYPE:=DATATYPE; FOXTEBAO:=LING;FOXTEBAO1:=LING; FOXTEGUANXI1:=LING; FOXFENNUMXIAN:=LING; FOXZQDM:=STRLEFT(STKLABEL,2); FOXXIAOSHU:=0;<%vbquekou=("foxquekou") vbfennumber=("foxfennumber")vbdatanumber = ("foxdatatype")vbfennumxian=("foxfennumxian")vbxiaoshu=("foxxiaoshu")vbh = ("foxh")vbL = ("foxl")vbh1 = ("foxh")vbL1 = ("foxl")vbbaohan = ("foxbaohan")vbbaohan1 = ("foxbaohan1")vbguanxi = ("foxguanxi")vbfenxing = ("foxfenxing")vbfenxing1 = ("foxfenxing1")vbzqdm = ("foxzqdm")vbxian=("foxxian")vbxiang=("foxxiang")vbxiand=("foxxiand")vbteg=("foxteg")vbted=("foxted")vbtegx=("foxtegx")vbtebao=("foxtebao")vbtebao1=("foxtebao1")vbteg1=("foxteg1")vbted1=("foxted1")vbtegx1=("foxtegx1")vbweibi=("foxweibi")vbbicount=("foxbicount")nlast = UBound( vbh )'msgbox("当前的数据类型为:" & cstr(vbzqdm))IF ( vbzqdm ="58" or vbzqdm ="90" or vbzqdm ="03" or vbzqdm ="18" or vbzqdm ="50" or vbzqdm ="51" or vbzqdm ="52" ) THENvbxiaoshu=3elsevbxiaoshu=2end ifIF ((vbdatanumber>=0 OR vbdatanumber=1 ) )THEN'IF ((vbdatanumber=0 OR vbdatanumber=1 ) and ( vbzqdm ="88" or vbzqdm ="1b" or vbzqdm ="1B" or vbzqdm ="1a" or vbzqdm ="1A" or vbzqdm ="39" ) )THENELSEFOR m=0 TO nlastif (vbfenxing(m)<>0) thenvbxian(m)=vbfenxing(m)vbxiang(m)=vbh(m)vbxiand(m)=vbl(m)end ifNEXTENd IF'笔的数据是按K线数据自动计算的即:vbfenxing'初始计算相关数据置为0 当数据类型为0和1即分笔和1分钟时要按笔-线段的过程组成中枢'其它级别(指5分钟及以上)时用笔组成中枢此时要将笔的数据即:分型位置代入线段数组中IF ((vbdatanumber>=0 OR vbdatanumber=1 ) )THEN'IF ((vbdatanumber=0 OR vbdatanumber=1 ) and ( vbzqdm ="88" or vbzqdm ="1b" or vbzqdm ="1B" or vbzqdm ="1a" or vbzqdm ="1A" or vbzqdm ="39" ) )THEN'(1)分笔和1分钟计算线段数据 vbzqdm =0 为指数'公式还未考虑开始连续三笔无重叠不能形成线段的处理,缠论中对此也未明确不能形成线段的笔应发生属于那个线段'对走势中间连续三笔无重叠不能形成线段的处理也未明确不能形成线段的笔应属于那个线段'缠论中规定线段是连续的且以不同的分型作为两个端点即:不能顶到顶和底到底,此规定要考虑的i = 0ex=0Do While ( i <= nlast)If (vbfenxing(i) <> 0 ) thenexit doend ifi = i + 1Loopx1 = ixianbegin = x1i = x1 + 1Do While ( i <= nlast)If (vbfenxing(i) <> 0 ) thenexit doend ifi = i + 1Loopx2 = ii = x2 + 1Do While ( i <= nlast)If (vbfenxing(i) <> 0 ) thenexit doend ifi = i + 1Loopx3 = ii = x3 + 1Do While ( ex=0 )'()if (x3>nlast or x2>nlast ) then'msgbox("当前的1 x2:" & cstr(x2) & "当前的1 x3:" & cstr(x3) & "当前的nlast:" & cstr(nlast) )exit doend ifif ( vbweibi(x2)=0 or vbweibi(x3)=0 or vbweibi(x3)=1 or vbweibi(x2)=2 ) then'msgbox("当前的1 x2:" & cstr(x2) & "当前的1 x3:" & cstr(x3) & "当前的nlast:" & cstr(nlast) )exit doelsex1=x2x2=x3Do While ( i <= nlast)If (vbfenxing(i) <> 0 ) thenexit doend ifi = i + 1Loopx3 = ii = x3 + 1end ifloop'()i = x3 + 1xianbegin = x1tewei = x2if (x3<=nlast) thenIf (vbfenxing(x1) = 1) Thenxianfang = -1'以顶分型开始,线段方向向下vbted(tewei) = vbl(tewei)vbteg(tewei) = vbh(x3)Elsexianfang = -1'以底分型开始,线段方向向上vbteg(tewei) = vbl(tewei)vbted(tewei) = vbh(x3)End Ifvbtegx(tewei) = xianfang'定义出第一个特征序列,及关系即:是上升的还是下降的end if'tewei = x4tenumber = 0i = x3 + 1vbxian(xianbegin) = vbfenxing(xianbegin)vbxiang(xianbegin) = vbh(xianbegin)vbxiand(xianbegin) = vbl(xianbegin)'vbxiang(xianbegin) = gg'vbxiand(xianbegin) = ddFor m = i To nlast'(2)Do While ( m <= nlast)If (vbfenxing(m) <> 0 ) thenexit doend ifm = m + 1Loopx4 = mm = x4 + 1Do While ( m <= nlast)If (vbfenxing(m) <> 0 ) thenexit doend ifm = m + 1Loopx5 = mm = x5 + 1newtewei = x4if ( x5 > nlast) thenexit forend ifIf (xianfang = -1) Then'xianfang=-1 以顶分型开始,线段方向向下vbted(newtewei) = vbl(newtewei)vbteg(newtewei) = vbh(x5)Else'xianfang=1 以底分型开始,线段方向向上vbteg(newtewei) = vbh(newtewei)vbted(newtewei) = vbl(x5)End If'判断方向/缺口及包含vbtegx(newtewei) = xianfangtenumber = 1 + tenumber'if (tenumber >= 1) thenIf (vbted(newtewei) > vbted(tewei) And vbteg(newtewei) > vbteg(tewei) Or vbted(newtewei) < vbted(tewei) And vbteg(newtewei) < vbteg(tewei)) Then'(3)向上或向下即:不是包含If (vbted(newtewei) > vbted(tewei) And vbteg(newtewei) > vbteg(tewei)) Then'(4) 特征序列的方向向上tefang = 1Elsetefang = -1'(4)特征序列的方向向下End Ifvbtegx(newtewei) = tefangIf (xianfang <> tefang) Then'(5)线段方向与特征序列的方向不同,即:出现了特征序列的分型线段方向与特征序列关系不同,出现分型,'首先判断自tewei(x2)开始的三笔是否构成线段,构成线段则下一步,不构成线段返回原线段继续,再判断第一个(tewei的前一个特征序列)与第二个(tewei)之间是否有缺口if ( vbweibi(x4)=0 or vbweibi(x3)=0 or vbweibi(x4)=1 or vbweibi(x3)=2 ) then'if ( vbweibi(x6)=0 or vbweibi(x5)=0 ) then'{}构成线段,新线段从newtewei开始,原线段在newtewei处结束还要判断顶是否大于底if (tenumber <= 1) then'(tenumber)此情况发生在三笔构成线段但线段的两端不是其最高点或最低点的情况,当下只有三笔不能开始新线段否则就出现一笔构成一个线段的现象了i=mDo While ( i <= nlast)If (vbfenxing(i) <> 0 ) thenexit doend ifi = i + 1Loopx6 = iif ( x6 > nlast) then'msgbox( " {}当前的x6:" & cstr(x6) & "当前的nlast:" & cstr(nlast) )exit forend if'再判断x5,x6是否构成线段,构成则新线段否则原线段继续if ( vbweibi(x6)=0 or vbweibi(x5)=0 or vbweibi(x6)=1 or vbweibi(x5)=2 ) then'开始构成新线段,新线段在newtewei开始xianbegin=newteweivbxian(xianbegin) = vbfenxing(xianbegin)vbxiang(xianbegin) = vbh(xianbegin)vbxiand(xianbegin) = vbl(xianbegin)x2=x5x3=x6tewei=x2m = x6 + 1If (vbfenxing(xianbegin) = 1) Then xianfang = -1'以顶分型开始,线段方向向下vbted(tewei) = vbl(tewei)vbteg(tewei) = vbh(x3)Elsexianfang = 1'以底分型开始,线段方向向上vbteg(tewei) = vbh(tewei)vbted(tewei) = vbl(x3)End Ifvbtegx(tewei) = xianfangtenumber = 0else'else 原线段继续tewei=newteweivbtegx(newtewei) = xianfangx2=x4x3=x5m = x5 + 1end if'开始结束else'(tenumber)tenumber = 0bao = 0xianbegin = teweivbxian(xianbegin) = vbfenxing(xianbegin) vbxiang(xianbegin) = vbh(xianbegin) vbxiand(xianbegin) = vbl(xianbegin)x2 = X3x3 = x4tewei = x2If (vbfenxing(xianbegin) = 1) Then xianfang = -1'以顶分型开始,线段方向向下vbted(tewei) = vbl(tewei)vbteg(tewei) = vbh(x3)Elsexianfang = 1'以底分型开始,线段方向向上vbteg(tewei) = vbh(tewei)vbted(tewei) = vbl(x3)End Ifvbtegx(tewei) = xianfangm = x3+1end if'(tenumber)else'{}不构成线段,原线段继续tewei=newteweivbtegx(newtewei) = xianfangx2=x4x3=x5m = x5 + 1end if'{}Else'(5)线段方向与特征序列关系相同,未出现分型tewei的值更新为newtewei'tenumber = 1+tenumbervbtegx(newtewei) = xianfangtewei=newteweix2=x4x3=x5End If'(5)Else'(3)包含vbtegx(newtewei) = xianfangIf (vbted(tewei) >= vbted(newtewei) And vbteg(tewei) <= vbteg(newtewei)) Then'后面包含前面 newtewei是后面的tewei在前面1为tewei被后一个包含2为newtewei包含前一个vbtebao(tewei) = 1vbtebao(newtewei) = 2Else'前面包含后面-1为tewei包含后一个-2为newtewei被前一个包含vbtebao(tewei) = -1vbtebao(newtewei) = -2End IfIf (xianfang = -1) Then'线段方向向下取向下包含temp = min(vbted(newtewei), vbted(tewei))vbted(newtewei) = tempvbted(tewei) = temptemp = min(vbteg(newtewei), vbteg(tewei))vbteg(newtewei) = tempvbteg(tewei) = tempElse'线段方向向上取向上包含temp = max(vbted(newtewei), vbted(tewei))vbted(newtewei) = tempvbted(tewei) = temptemp = max(vbteg(newtewei), vbteg(tewei))vbteg(newtewei) = tempvbteg(tewei) = tempEnd If'判断与tewei的前面是否有连续的包含关系temp = tewei - 1ex = 0bao = 0Do While (ex = 0)Do While ( temp >=0)If (vbteg(temp) <> 0 ) thenexit doend iftemp = temp - 1Loopif (temp<0) then'msgbox("当前的10 temp:" & cstr(temp) & "当前的nlast:" & cstr(nlast) )exit doend ifIf (vbtebao(temp) = 0 Or vbtebao(temp) >= 2 Or vbtebao(temp) = -2 Or vbtegx(temp) <> xianfang) Thenex = 1Elsebao = bao + 1End Iftemp = temp - 1Loop'有几个连续包含,指大于三个K线的包含,BAO的值是包含的K线数减2,当只有两个连续K线包含时BAO为0temp = tewei - 1For i = 1 To baoDo While ( temp >=0)If (vbteg(temp) <> 0 ) thenexit doend iftemp = temp - 1Loopif (temp<0) then'msgbox("当前的11 temp:" & cstr(temp) & "当前的nlast:" & cstr(nlast) )exit forend ifvbteg(temp) = vbteg(tewei)vbted(temp) = vbted(tewei)temp = temp - 1Nextvbtebao(newtewei) = bao + 2temp = tewei - 1For i = 1 To bao + 2If (i = 1 Or i = bao + 2) ThenElseDo While ( temp >0)If (vbteg(temp) <> 0 ) thenexit doend iftemp = temp - 1Loopif (temp<0) then'msgbox("当前的12 temp:" & cstr(temp) & "当前的nlast:" & cstr(nlast) ) exit forend ifvbtebao(temp) = -3temp = temp - 1End IfNexttewei=newteweix2=x4x3=x5m = x5 + 1End If'(3)Next'(2)For i = 0 To nlastIf (vbtebao(i) = -2) Thenvbtebao(i) = 2End IfIf (vbtebao1(i) = -2) Thenvbtebao1(i) = 2End IfNext'包含关系标准化,即结束标志都为2及以上'处理线段的两个端点满足条件顶>=底i=0do while (vbxian(i)=0)i=i+1if (i>nlast) thenExit Doend iflooplastfenxing=ifor m = lastfenxing+1+ nlast to nlastif (vbxian(m)<>0) thenif (vbxian(m)>0) thenif (vbxiang(m)>=vbxiand(lastfenxing)) then'满足条件顶>=底lastfenxing=melse'不满足条件顶<底两个全置为0,并查下一个vbxian(m)=0vbxian(lastfenxing)=0vbxiang(m)=0vbxiang(lastfenxing)=0vbxiand(m)=0vbxiand(lastfenxing)=0m=m+1do while (vbxian(m)=0)m=m+1if (m>nlast) thenExit Doend iflooplastfenxing=mend ifelseif (vbxiand(m)<=vbxiang(lastfenxing)) then'满足条件底<顶lastfenxing=melse'不满足条件底<顶两个全置为0,并查下一个vbxian(m)=0vbxian(lastfenxing)=0vbxiang(m)=0vbxiang(lastfenxing)=0vbxiand(m)=0vbxiand(lastfenxing)=0m=m+1do while (vbxian(m)=0)if (m>nlast) thenExit Doend iflooplastfenxing=mend ifend ifend ifnext'计算线段的高点和低点i=0do while (vbxian(i)=0)i=i+1if (i>nlast) thenExit Doend iflooplastfenxing=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) thengg=max(gg,vbh(m))dd=min(dd,vbl(m))if (vbxian(m)<>0) thenvbxiang(i)=ggvbxiand(i)=ddif (vbxian(m)>0) thenelseend ifgg=vbh(m)dd=vbl(m)end ifend ifnextend if'(1)i=nlastdo while (vbxian(i)=0)if (i>nlast or i<0) thenExit Doend iflooplastfenxing=i'vbxian(nlast) = -vbxian(lastfenxing) 'vbxiang(nlast) = vbh(nlast)'vbxiand(nlast) = vbl(nlast)'vbteg(newtewei) = 0'vbted(newtewei) = 0'以下为自定义函数部分Function max(a, b)If (a >= b) Thenmax = aElsemax = bEnd IfEnd FunctionFunction min(a, b)If (a <= b) Thenmin = aElsemin = bEnd IfEnd Function ("foxxiaoshu") =vbxiaoshu ("foxteg")=vbteg("foxted")=vbted ("foxtegx")=vbtegx("foxteg1")=vbteg1("foxted1")=vbted1("foxtegx1")=vbtegx1 ("foxtebao")=vbtebao ("foxtebao1")=vbtebao1 ("foxxian")=vbxian ("foxxiang")=vbxiang ("foxxiand")=vbxiand%>FOXWEI:=LING; FOXBUYSELL:=LING;<%vbdatanumber3 = ("datanumber3") vbbicount=("foxbicount") vbweibi=("foxweibi") vbquekou=("foxquekou") vbfennumber=("foxfennumber") vbfennumxian=("foxfennumxian") vbh = ("foxh")vbL = ("foxl")vbh1 = ("foxh")vbL1 = ("foxl")vbbaohan = ("foxbaohan") vbbaohan1 = ("foxbaohan1") vbguanxi = ("foxguanxi") vbfenxing = ("foxfenxing") vbfenxing1 = ("foxfenxing1") vbbuysell=("foxbuysell")vbwei=("foxwei")vbxian=("foxxian")vbxiang=("foxxiang")vbxiand=("foxxiand")vbteg=("foxteg")vbted=("foxted")vbtegx=("foxtegx")vbteg1=("foxteg1")vbted1=("foxted1")vbtegx1=("foxtegx1")nlast = UBound( vbh )i=0for m = 0 to nlastif (vbxian(m)<>0) theni=i+1vbfennumxian(m)=iend ifnext'vbfennumxian(nlast)=0x1=0x2=0x3=0x4=0x5=0x6=0x7=0bi=0maxbi=0。