//本源码适用于文华软件,版本号1.0
//一、在文华软件看盘界面右上角系统工具下拉菜单找到指标管理器---点自编----新建公式名后---点确定。请在公式编译界面右上角参数栏设置以下参数
//参数栏设置:K数量{0,9999,5};新笔{0,9999,4}
//以下源码请一定要从本文档里复制到WORD文档或文本文档里,并检查是否有错误,再复制到公式编制框内,属性选主图K线形态,测试通过后确定。
//使用说明:1、新笔参数值改为5为严格笔,默认4为新笔;K数量参数采用默认值即可,也可随自己规则修改成其他数值。2、公式中笔高(低)点相对于前高(低)创新高或新低,K数量不满足笔定义时请自行修改。3、公式中分型或笔不保证100%正确,错误之处请自行修正。
//免责声明,公式源码仅供缠论学习参考,不提供交易依据,据此操作赢亏自负,特此声明!!!如果本源码提供对您有所帮助,可以点赞关注转发支持作者一下,转发注明编写作者;
效果图


------------------------------------------------------------------------
DRAWCOLORKLINE(ISUP,COLORRED,0);//收盘价大于开盘价,绘制红色空心K线
DRAWCOLORKLINE(ISDOWN,COLORCYAN,0);//收盘价小于开盘价,绘制青色实心K线
DRAWCOLORKLINE(ISEQUAL,COLORWHITE,1);//收盘价等于开盘价,绘制白色十字线
上市:=BARSTATUS=1;
HH00:=BARSLAST(上市)+1,NODRAW;
上市最高:=HHV(H,HH00),NODRAW;
上市最低:=LLV(L,HH00),NODRAW;
最高距离:=BARSLAST(上市最高=H),NODRAW;
最低距离:=BARSLAST(上市最低=L),NODRAW;
X_1:=HIGH>=REF(HIGH,1) AND LOW>=REF(LOW,1);
X_2:=LOW<=REF(LOW,1) AND HIGH<=REF(HIGH,1);
X_3:=IF(X_1,1,IF(X_2,(-1),0));
X_4:=IF(REF(HIGH,1)>=REF(HIGH,2) AND REF(LOW,1)>=REF(LOW,2),1,IF(REF(LOW,1)<=REF(LOW,2) AND REF(HIGH,1)<=REF(HIGH,2),(-1),0));
X_5:=IF(X_3=0 AND X_4=1,MAX(HIGH,REF(HIGH,1)),IF(X_3=0 AND X_4=(-1),MIN(HIGH,REF(HIGH,1)),HIGH));
X_6:=IF(X_3=0 AND X_4=1,MAX(LOW,REF(LOW,1)),IF(X_3=0 AND X_4=(-1),MIN(LOW,REF(LOW,1)),LOW));
X_7:=HIGH>=REF(X_5,1) AND LOW>=REF(X_6,1);
X_8:=LOW<=REF(X_6,1) AND HIGH<=REF(X_5,1);
X_9:=IF(X_7,1,IF(X_8,(-1),0));
X_10:=IF(REF(X_5,1)>=REF(X_5,2) AND REF(X_6,1)>=REF(X_6,2),1,IF(REF(X_6,1)<=REF(X_6,2) AND REF(X_5,1)<=REF(X_5,2),(-1),0));
X_11:=IF(X_9=0 AND X_10=1,MAX(HIGH,REF(X_5,1)),IF(X_9=0 AND X_10=(-1),MIN(HIGH,REF(X_5,1)),HIGH));
X_12:=IF(X_9=0 AND X_10=1,MAX(LOW,REF(X_6,1)),IF(X_9=0 AND X_10=(-1),MIN(LOW,REF(X_6,1)),LOW));
X_13:=HIGH>=REF(X_11,1) AND LOW>=REF(X_12,1);
X_14:=LOW<=REF(X_12,1) AND HIGH<=REF(X_11,1);
X_15:=IF(X_13,1,IF(X_14,(-1),0));
X_16:=IF(REF(X_11,1)>=REF(X_11,2) AND REF(X_12,1)>=REF(X_12,2),1,IF(REF(X_12,1)<=REF(X_12,2) AND REF(X_11,1)<=REF(X_11,2),(-1),0));
X_17:=IF(X_15=0 AND X_16=1,MAX(HIGH,REF(X_11,1)),IF(X_15=0 AND X_16=(-1),MIN(HIGH,REF(X_11,1)),HIGH));
X_18:=IF(X_15=0 AND X_16=1,MAX(LOW,REF(X_12,1)),IF(X_15=0 AND X_16=(-1),MIN(LOW,REF(X_12,1)),LOW));
X_19:=HIGH>=REF(X_17,1) AND LOW>=REF(X_18,1);
X_20:=LOW<=REF(X_18,1) AND HIGH<=REF(X_17,1);
X_21:=IF(X_19,1,IF(X_20,(-1),0));
X_22:=IF(REF(X_17,1)>=REF(X_17,2) AND REF(X_18,1)>=REF(X_18,2),1,IF(REF(X_18,1)<=REF(X_18,2) AND REF(X_17,1)<=REF(X_17,2),(-1),0));
X_23:=IF(X_21=0 AND X_22=1,MAX(HIGH,REF(X_17,1)),IF(X_21=0 AND X_22=(-1),MIN(HIGH,REF(X_17,1)),HIGH));
X_24:=IF(X_21=0 AND X_22=1,MAX(LOW,REF(X_18,1)),IF(X_21=0 AND X_22=(-1),MIN(LOW,REF(X_18,1)),LOW));
X_25:=HIGH>=REF(X_23,1) AND LOW>=REF(X_24,1);
X_26:=LOW<=REF(X_24,1) AND HIGH<=REF(X_23,1);
X_27:=IF(X_25,1,IF(X_26,(-1),0));
X_28:=IF(REF(X_23,1)>=REF(X_23,2) AND REF(X_24,1)>=REF(X_24,2),1,IF(REF(X_24,1)<=REF(X_24,2) AND REF(X_23,1)<=REF(X_23,2),(-1),0));
X_29:=IF(X_27=0 AND X_28=1,MAX(HIGH,REF(X_23,1)),IF(X_27=0 AND X_28=(-1),MIN(HIGH,REF(X_23,1)),HIGH));
X_30:=IF(X_27=0 AND X_28=1,MAX(LOW,REF(X_24,1)),IF(X_27=0 AND X_28=(-1),MIN(LOW,REF(X_24,1)),LOW));
方向:=IF(X_29>=REF(X_29,1) AND X_30>=REF(X_30,1),1,IF(X_30<=REF(X_30,1) AND X_29<=REF(X_29,1),(-1),1));
X_31:=X_29<REFX(HIGH,1) AND X_30>REFX(LOW,1) OR (X_29>REFX(HIGH,1) AND X_30<REFX(LOW,1));
包含关系:=X_27=0;
//{二、K线方向修正}
XXL:=LLV(L,BARSLAST(方向=1)+1);
XXH:=LLV(H,BARSLAST(方向=1)+1);
XSL:=HHV(L,BARSLAST(方向=-1)+1);
XSH:=HHV(H,BARSLAST(方向=-1)+1);
预底0:=XXL=XSL AND XXH=XSH AND 方向=-1;
预顶0:=XXL=XSL AND XXH=XSH AND 方向=1;
XXL0:=LLV(L,BARSLAST(预底0=1)+1);
XXH0:=LLV(H,BARSLAST(预底0=1)+1);
XSL0:=HHV(L,BARSLAST(预顶0=1)+1);
XSH0:=HHV(H,BARSLAST(预顶0=1)+1);
上修:=方向=-1 AND H<=XSH0 AND L>=XSL0 AND 包含关系=0;
上修A:=方向=-1 AND H=XSH0 AND L<XSL0 AND XSH0>REF(XSH0,1) AND L>XXL0 AND 包含关系=1;
上修B:=方向=-1 AND H=XSH0 AND L<XSL0 AND XSH0=REF(XSH0,1) AND XXH0>REF(XXH0,1) AND L=XXL0 AND 包含关系=0;
上修C:=方向=-1 AND H>XXH0 AND L>XXL0 AND XSH0=REF(XSH0,1) AND H=XSH0 AND 包含关系=0;
上修D:=方向=-1 AND H<=XXH0 AND L>=XXL0 AND L=REF(L,1) AND REF(方向,1)=1 AND 包含关系=0;
下修B:=方向=1 AND H>XXH0 AND L=XXL0 AND L<>REF(L,1) AND 包含关系=0;
下修C:=方向=1 AND H=XSH0 AND L=XSL0 AND L=REF(L,1) AND 包含关系=0 AND (REF(上修D,1)=0 AND REF(方向,1)=-1) AND REF(包含关系,1)=0;
下修D:=方向=1 AND H>XXH0 AND L=XXL0 AND L<REF(L,1) AND (REF(上修B,1)=1 AND REF(方向,1)=1) AND 包含关系=1;
下修:=方向=1 AND H<=XXH0 AND L>=XXL0 AND REF(下修C,2)=0 AND 包含关系=0;
下修A:=方向=1 AND H<=XXH0 AND L>=XXL0 AND XXL0=REF(XXL0,1) AND REF(下修,1)=1 AND 包含关系=1;
下修E:=方向=1 AND H>XXH0 AND L=XXL0 AND XXL0<REF(XXL0,1) AND XXH0=REF(XXH0,1) AND (REF(下修,1)=1 AND REF(方向,1)=1) AND 包含关系=1;
预底修0:=(方向=-1 AND ((上修=0 OR 上修=NULL) AND 上修A=0 AND 上修B=0 AND 上修C=0 AND 上修D=0)) OR (下修A=1 OR 下修B=1 OR 下修C=1 OR 下修D=1 OR 下修E=1 OR 下修=1);
预顶修0:=(方向=1 AND (下修A=0 AND 下修B=0 AND 下修C=0 AND 下修D=0 AND 下修E=0 AND (下修=0 OR 下修=NULL))) OR (上修=1 OR 上修A=1 OR 上修B=1 OR 上修C=1 OR 上修D=1);
XXL1:=LLV(L,BARSLAST(预顶修0=1));
XXH1:=LLV(H,BARSLAST(预顶修0=1));
XSL1:=HHV(L,BARSLAST(预底修0=1));
XSH1:=HHV(H,BARSLAST(预底修0=1));
KXG1:=IF(预顶修0,XSH1,XXH1);
KXD1:=IF(预底修0,XXL1,XSL1);
预底修1:=预顶修0=1 AND KXG1<REF(KXG1,1);
预底修2:=预顶修0=1 AND H<KXG1 AND L<KXD1;
预底修3:=H>=LLV(H,BARSLAST(预底修0 AND L=KXD1)+1) AND L<=REF(L,BARSLAST(预底修0 AND L=KXD1)) AND 预顶修0=1 AND COUNT(L<=REF(L,BARSLAST(预底修0 AND L=KXD1)),BARSLAST(预底修0 AND L=KXD1))=BARSLAST(预底修0 AND L=KXD1);
预顶修1:=预底修0=1 AND KXD1>REF(KXD1,1);
预顶修2:=预底修0=1 AND H>KXG1 AND L>KXD1;
预顶修3:=L<=HHV(L,BARSLAST(预顶修0 AND H=KXG1)+1) AND H>=REF(H,BARSLAST(预顶修0 AND H=KXG1)) AND 预底修0=1 AND COUNT(H>=REF(H,BARSLAST(预顶修0 AND H=KXG1)),BARSLAST(预顶修0 AND H=KXG1))=BARSLAST(预顶修0 AND H=KXG1);
预底修:=(预底修0=1 AND (预顶修1=0 OR 预顶修1=NULL) AND (预顶修2=0 OR 预顶修2=NULL) AND (预顶修3=0 OR 预顶修3=NULL)) OR 预底修1=1 OR 预底修2=1 OR 预底修3=1;
预顶修:=(预顶修0=1 AND (预底修1=0 OR 预底修1=NULL) AND (预底修2=0 OR 预底修2=NULL) AND (预底修3=0 OR 预底修3=NULL)) OR 预顶修1=1 OR 预顶修2=1 OR 预顶修3=1;
XXL2:=LLV(L,IF(BARSLAST(预顶修=1)=NULL,HH00,BARSLAST(预顶修=1)));
XXH2:=LLV(H,IF(BARSLAST(预顶修=1)=NULL,HH00,BARSLAST(预顶修=1)));
XSL2:=HHV(L,IF(BARSLAST(预底修=1)=NULL,HH00,BARSLAST(预底修=1)));
XSH2:=HHV(H,IF(BARSLAST(预底修=1)=NULL,HH00,BARSLAST(预底修=1)));
KXG:=IF(预顶修,XSH2,XXH2);
KXD:=IF(预底修,XXL2,XSL2);
//{K线分型}
上:=KXG>REF(KXG,1) AND KXD>=REF(KXD,1),NODRAW;
下:=KXG<=REF(KXG,1) AND KXD<REF(KXD,1),NODRAW;
顶长:=BARSLAST(上),NODRAW;
底长:=BARSLAST(下),NODRAW;
上11:=(顶长<底长 OR 底长=NULL) AND KXG=REF(KXG,1) AND H=KXG,NODRAW;
下11:=(顶长>底长 OR 顶长=NULL) AND KXD=REF(KXD,1) AND L=KXD,NODRAW;
上包:=(顶长<底长 OR 底长=NULL) AND H<KXG AND L>=KXD,NODRAW;
下包:=(顶长>底长 OR 顶长=NULL) AND H<=KXG AND L>KXD,NODRAW;
预顶:=上 OR 上11,NODRAW;
预底:=下 OR 下11,NODRAW;
//{先把包含K处理信号}
顶个数0:=COUNT(预顶=1,HH00),NODRAW;
底个数0:=COUNT(预底=1,HH00),NODRAW;
顶长范围:=IF(BARSLAST(预顶=1)>0 AND 顶个数0>0,BARSLAST(预顶=1),0),COLORRED,NODRAW;
底长范围:=IF(BARSLAST(预底=1)>0 AND 底个数0>0,BARSLAST(预底=1),0),COLORYELLOW,NODRAW;
顶1:=预顶 OR 上包,COLORYELLOW,NODRAW;
底1:=预底 OR 下包,COLORYELLOW,NODRAW;
底TJ:=顶1=1 AND REF(底1,1)=1,NODRAW;//{底分型成立条件}
顶TJ:=底1=1 AND REF(顶1,1)=1,NODRAW;//{顶分型成立条件}
底TJ长:=IF(COUNT(底TJ,HH00)=0,HH00,BARSLAST(底TJ)),NODRAW;
顶TJ长:=IF(COUNT(顶TJ,HH00)=0,HH00,BARSLAST(顶TJ)),NODRAW;
//{处理每个分型的K位置,偏离后找分型极点}
BL0:=BARSLAST(KXD=L),COLORRED,NODRAW;
BH0:=BARSLAST(KXG=H),COLORGREEN,NODRAW;
底位置:=IF(底TJ=1,REF(BL0,1)+1,0),NODRAW;
顶位置:=IF(顶TJ=1,REF(BH0,1)+1,0),NODRAW;
底0TJ0:=BACKSET(底TJ,底位置+1),NODRAW;
底0TJ1:=IF(BACKSET(底TJ,底位置),1,0),NODRAW;
顶0TJ0:=BACKSET(顶TJ,顶位置+1),NODRAW;
顶0TJ1:=IF(BACKSET(顶TJ,顶位置),1,0),NODRAW;
分型底0:=IF(底0TJ0>底0TJ1,1,0)=1,NODRAW;
分型顶0:=IF(顶0TJ0>顶0TJ1,1,0)=1,NODRAW;
判断下包含:=IF(底1=1 AND H=KXG AND L=KXD AND KXG<REF(KXG,1) AND KXD<REF(KXD,1),-1,0),NODRAW;
判断上包含:=IF(顶1=1 AND H=KXG AND L=KXD AND KXG>REF(KXG,1) AND KXD>REF(KXD,1),1,0),NODRAW;
底分周期:=BARSLAST(底TJ=1),NODRAW;
顶分周期:=BARSLAST(顶TJ=1),NODRAW;
//{上市开始}
顶个数:=COUNT(分型顶0=1,HH00),NODRAW;
底个数:=COUNT(分型底0=1,HH00),NODRAW;
底TJ1:=BACKSET(分型顶0=1 AND 底个数=0 AND 顶个数=1,最低距离+1),NODRAW;
底TJ2:=IF(BACKSET(分型顶0=1 AND 底个数=0 AND 顶个数=1,最低距离),1,0),NODRAW;
底0:=底TJ1>底TJ2,NODRAW;
//{第一根K是底}
转顶TJ1:=BACKSET(分型顶0=1 AND 底个数=0 AND H<上市最高 AND REF(L,HH00-1)<>上市最低 AND 最低距离<>最高距离,最高距离+1),NODRAW;
转顶TJ2:=IF(BACKSET(分型顶0=1 AND 底个数=0 AND H<上市最高 AND REF(L,HH00-1)<>上市最低 AND 最低距离<>最高距离,最高距离),1,0),NODRAW;
转顶0:=转顶TJ1>转顶TJ2,NODRAW;
//{第一根K是底}
顶TJ1:=BACKSET(分型底0=1 AND 顶个数=0 AND 底个数=1,最高距离+1),NODRAW;
顶TJ2:=IF(BACKSET(分型底0=1 AND 顶个数=0 AND 底个数=1,最高距离),1,0),NODRAW;
顶0:=顶TJ1>顶TJ2,NODRAW;
//{第一根K是顶}
转底TJ1:=BACKSET(分型底0=1 AND 顶个数=0 AND L>上市最低 AND REF(H,HH00-1)<>上市最高 AND 最低距离<>最高距离,最低距离+1),NODRAW;
转底TJ2:=IF(BACKSET(分型底0=1 AND 顶个数=0 AND L>上市最低 AND REF(H,HH00-1)<>上市最高 AND 最低距离<>最高距离,最低距离),1,0),NODRAW;
转底0:=转底TJ1>转底TJ2,NODRAW;
//{第一根K是顶}
分型顶3:=IF(顶0=1,1,0),NODRAW;
分型底3:=IF(底0=1,1,0),NODRAW;
分型顶3转:=IF(转顶0=1,1,0),NODRAW;
分型底3转:=IF(转底0=1,1,0),NODRAW;
分型顶4:=分型顶0 OR 分型顶3 OR 分型顶3转,NODRAW;
分型底4:=分型底0 OR 分型底3 OR 分型底3转,NODRAW;
//最后一个底
当下底TJ1:=BACKSET(ISLASTBAR AND 顶长范围>底长范围,底长范围+1),NODRAW;
当下底TJ2:=IF(BACKSET(ISLASTBAR AND 顶长范围>底长范围,底长范围)=1,1,0),NODRAW;
当下底0:=IF(当下底TJ1>当下底TJ2,1,0)=1,NODRAW;
当下底1:=IF(ISLASTBAR AND 顶长范围>底长范围 AND 分型底0=1,1,0)=1,NODRAW;
//最后一个顶
当下顶TJ1:=BACKSET(ISLASTBAR AND 顶长范围<底长范围,顶长范围+1),NODRAW;
当下顶TJ2:=IF(BACKSET(ISLASTBAR AND 顶长范围<底长范围,顶长范围)=1,1,0),NODRAW;
当下顶0:=IF(当下顶TJ1>当下顶TJ2,1,0)=1,NODRAW;
当下顶1:=IF(ISLASTBAR AND 顶长范围<底长范围 AND 分型顶0=1,1,0)=1,NODRAW;
//{最终的顶底}
分型底:=分型底0 OR 分型底3 OR 分型底3转 OR 当下底0 OR 当下底1,NODRAW;
分型顶:=分型顶0 OR 分型顶3 OR 分型顶3转 OR 当下顶0 OR 当下顶1,NODRAW;
顶数:=COUNT(分型顶=1,HH00),NODRAW;
底数:=COUNT(分型底=1,HH00),NODRAW;
//{第一轮处理笔}
//{先处理低点第一次}
BI0:=IF(分型底=1,-1,IF(分型顶=1,1,0)),NODRAW;
GDTS0:=BARSLAST(BI0=1),NODRAW;
DDTS0:=BARSLAST(BI0=-1),NODRAW;
BHH0:=IF(BI0=1,H,-1000000),NODRAW;
BLL0:=IF(BI0=-1,L,1000000),NODRAW;
//{低点转换K}
ZHKXG:=IF(GDTS0>DDTS0 OR GDTS0=NULL,REF(KXG,IF(GDTS0=NULL,HH00-1,GDTS0)),REF(KXG,DDTS0+IF(GDTS0=NULL,0,REF(GDTS0,DDTS0))));
ZHKXD:=REF(KXD,DDTS0);
M:=IF(GDTS0>DDTS0,GDTS0+REF(DDTS0,GDTS0),DDTS0+REF(DDTS0,DDTS0+1)+1),NODRAW;
//{高点转换K}
ZHKXG1:=REF(KXG,GDTS0),COLORRED,NODRAW;
ZHKXD1:=IF(DDTS0>GDTS0 OR DDTS0=NULL,REF(KXD,IF(DDTS0=NULL,HH00-1,DDTS0)),REF(KXD,GDTS0+IF(DDTS0=NULL,0,REF(DDTS0,GDTS0)))),COLORYELLOW,NODRAW;
N:=IF(DDTS0>GDTS0,DDTS0+REF(GDTS0,DDTS0),GDTS0+REF(GDTS0,GDTS0+1)+1),NODRAW;
上K线数0:=COUNT(判断上包含=1,DDTS0),NODRAW;
下K线数0:=COUNT(判断下包含=-1,GDTS0),NODRAW;
底TJ0:=IF(GDTS0+1<K数量,1,IF(GDTS0+1>=K数量 AND 下K线数0+1<新笔,1,0)),NODRAW;
DFX1:=IF(BI0=-1 AND 底数>1 AND 底TJ0=1 AND KXD>ZHKXD1,0,IF(BI0=0,0,IF(BI0=1,0,IF(BI0=-1 AND 底数<=1 AND 底TJ0=1,-1,-1)))),NODRAW;//取消不满足5根K的底
DFX2:=IF(BI0=-1 AND 底数<=1,-1,0),NODRAW;//第一个底
DFX3:=IF(当下底0=1,-1,0),NODRAW;//当下底
DFX:=IF(DFX1=-1 OR DFX2=-1 OR DFX3=-1,-1,0),NODRAW;
//{先处理低点第二次}
BI0A1:=IF(DFX=-1,-1,IF(分型顶=1,1,0)),NODRAW;
GDTS0A1:=GDTS0,NODRAW;
DDTS0A1:=BARSLAST(BI0A1=-1),NODRAW;
BHH0A1:=BHH0,NODRAW;
BLL0A1:=IF(BI0A1=-1,L,1000000),NODRAW;
//上K线数A1:=COUNT(判断上包含=1,DDTS0A1),NODRAW;
下K线数A1:=COUNT(判断下包含=-1,GDTS0A1),NODRAW;
底TJ0A1:=IF(GDTS0A1+1<K数量,1,IF(GDTS0A1+1>=K数量 AND 下K线数A1+1<新笔,1,0)),NODRAW;//考虑包含K数量
DFX0A1:=IF(BI0A1=-1 AND 底数>1 AND 底TJ0A1=1AND REF(BHH0A1,GDTS0A1)=REF(HHV(BHH0A1,DDTS0A1),1) AND BLL0A1>=REF(BLL0A1,GDTS0A1+REF(DDTS0A1,GDTS0A1)),0,IF(BI0A1=0,0,IF(BI0A1=1,0,IF(BI0A1=-1 AND 底数<=1 AND 底TJ0A1=1,-1,-1)))),NODRAW;//取消不满足5根K的底
DFX0A2:=IF(BI0A1=-1 AND 底数<=1,-1,0),NODRAW;//第一个底
DFX0A3:=IF(当下底0=1,-1,0),NODRAW;//当下底
DFX0A:=IF(DFX0A1=-1 OR DFX0A2=-1 OR DFX0A3=-1,-1,0),NODRAW;//处理第二轮后的底
//处理连续无效底后,后顶比前顶低的情况
顶FXC:=GDTS0,NODRAW;
底FXC:=BARSLAST(DFX0A=-1),NODRAW;
FXH1:=BHH0,NODRAW;
FXD1:=IF(DFX0A=-1,L,100000),NODRAW;
顶FX次数:=COUNT(分型顶=1,底FXC),NODRAW;
//底FX次数:=COUNT(DFX0A=-1,顶FXC),NODRAW;
顶FX:=IF(顶数>1 AND 顶FX次数>1 AND FXH1>=HHV(KXG,底FXC),1,IF(BI0A1=1 AND 顶FX次数=1,1,IF(BI0A1=1 AND 顶数=1,1,0))),NODRAW;//处理连续无效底后,后顶比前顶低的情况
底FX:=DFX0A,NODRAW;//保持不变
顶数0:=COUNT(顶FX=1,HH00),NODRAW;
底数0:=COUNT(底FX=-1,HH00),NODRAW;
//{再处理高点第一次}
BI1:=IF(底FX=-1,-1,IF(顶FX=1,1,0)),NODRAW;
GDTS1:=BARSLAST(BI1=1),NODRAW;
DDTS1:=BARSLAST(BI1=-1),NODRAW;
BHH1:=IF(BI1=1,H,-1000000),NODRAW;
BLL1:=IF(BI1=-1,L,1000000),NODRAW;
上K线数1:=COUNT(判断上包含=1,DDTS1)+COUNT(判断下包含=-1,DDTS1),NODRAW;
无效顶数1:=COUNT(BI0=1,DDTS1),NODRAW;
无效底数1:=COUNT(BI0=-1,GDTS1),NODRAW;
顶TJ0:=IF(DDTS1+1<K数量,1,IF(DDTS1+1>=K数量 AND 上K线数1+1<新笔 AND 无效顶数1<=2,1,0)),NODRAW;//考虑包含K数量
顶FX11A:=IF(BI1=1 AND 顶TJ0=1 AND BHH1<REF(BHH1,DDTS1+REF(GDTS1,DDTS1)),0,IF(BI1=0,0,IF(BI1=-1,0,1))),NODRAW;
顶FX11B:=IF(BI1=1 AND 顶数0<=1,1,0),NODRAW;//第一个顶
顶FX11C:=IF(当下顶0=1,1,0),NODRAW;//当下顶
顶FX1:=IF(顶FX11A OR 顶FX11B OR 顶FX11C,1,0),NODRAW;
//{再处理高点第二次}
BI1A1:=IF(底FX=-1,-1,IF(顶FX1=1,1,0)),NODRAW;
GDTS1A1:=BARSLAST(BI1A1=1),NODRAW;
DDTS1A1:=DDTS1,NODRAW;//底没变
BHH1A1:=IF(BI1A1=1,H,-1000000),NODRAW;
BLL1A1:=BLL1,NODRAW;
上K线数1A1:=COUNT(判断上包含=1,DDTS1A1)+COUNT(判断下包含=-1,DDTS1A1),NODRAW;
下K线数1A1:=COUNT(判断下包含=-1,GDTS1A1)+COUNT(判断上包含=1,GDTS1A1),NODRAW;
无效顶数1A1:=COUNT(BI0=1,DDTS1A1),NODRAW;
无效底数1A1:=COUNT(BI0=-1,GDTS1A1),NODRAW;
顶TJ0A1:=IF(DDTS1A1+1<K数量,1,IF(DDTS1A1+1>=K数量 AND 上K线数1A1+1<新笔 AND 无效顶数1A1<=2,1,0)),NODRAW;//考虑包含K数量
顶FX11AA:=IF(BI1A1=1 AND 顶数>1 AND 顶TJ0A1=1AND REF(BLL1A1,DDTS1A1)=REF(LLV(BLL1A1,GDTS1A1),1) AND BHH1A1<REF(BHH1A1,DDTS1A1+REF(GDTS1A1,DDTS1A1)),0,IF(BI1A1=0,0,IF(BI1A1=-1,0,1))),NODRAW;
顶FX11BB:=IF(BI1A1=1 AND 顶数0<=1,1,0),NODRAW;//第一个顶
顶FX11CC:=IF(当下顶0=1,1,0),NODRAW;//当下顶
顶FX1A11:=IF(顶FX11AA OR 顶FX11BB OR 顶FX11CC,1,0),NODRAW;
//处理连续无效顶后,后底比前底高的情况
顶FXC1:=BARSLAST(顶FX1A11=1),NODRAW;
底FXC1:=DDTS1,NODRAW;//底没变
FXH2:=IF(顶FX1A11=1,H,-1000000),NODRAW;
FXD2:=BLL1,NODRAW;
//顶FX1次数:=COUNT(顶FX1A11=1,底FXC1),NODRAW;
底FX1次数:=COUNT(底FX=-1,顶FXC1),NODRAW;
顶FX2:=顶FX1A11,NODRAW;
底FX2:=IF(底数0>1 AND BI1A1=-1 AND 底FX1次数>1 AND IF(FXD2<=LLV(KXD,顶FXC1),1,0)=1,1,IF(BI1A1=-1 AND 底FX1次数=1,1,IF(BI1A1=-1 AND 底数0=1,1,0))),NODRAW;
//统一过滤一次高低点
顶FXCA1:=BARSLAST(顶FX2=1),NODRAW;
底FXCA1:=BARSLAST(底FX2=1),NODRAW;
FXH1A1:=IF(顶FX2=1,H,-1000000),NODRAW;
FXD1A1:=IF(底FX2=1,L,1000000),NODRAW;
顶FXA1次数:=COUNT(BI0=1,底FXCA1),NODRAW;
底FXA1次数:=COUNT(BI0=-1,顶FXCA1),NODRAW;
顶FXA1:=IF(顶FX2=1 AND 顶数>1 AND 顶FXA1次数>1 AND FXH1A1>=HHV(BHH0,底FXCA1+1),1,IF(顶FX2=1 AND 顶FXA1次数=1,1,IF(顶FX2=1 AND 顶数0=1,1,0))),NODRAW;
底FXA1:=IF(底FX2=1 AND 底数>1 AND 底FXA1次数>1 AND FXD1A1<=LLV(BLL0,顶FXCA1+1),1,IF(底FX2=1 AND 底FXA1次数=1,1,IF(底FX2=1 AND 底数0=1,1,0))),NODRAW;
//统一过滤一次高低点第二次
顶FXCA2:=BARSLAST(顶FXA1=1),NODRAW;
底FXCA2:=BARSLAST(底FXA1=1),NODRAW;
FXH1A2:=IF(顶FXA1=1,H,-1000000),NODRAW;
FXD1A2:=IF(底FXA1=1,L,1000000),NODRAW;
顶FXA2次数:=COUNT(BI0=1,底FXCA2),NODRAW;
底FXA2次数:=COUNT(BI0=-1,顶FXCA2),NODRAW;
顶FXA2:=IF(顶FXA1=1 AND 顶数>1 AND 顶FXA2次数>1 AND FXH1A2>=HHV(BHH0,底FXCA2+1),1,IF(顶FXA1=1 AND 顶FXA2次数=1,1,IF(顶FXA1=1 AND 顶数0=1,1,0))),NODRAW;
底FXA2:=IF(底FXA1=1 AND 底数>1 AND 底FXA2次数>1 AND FXD1A2<=LLV(BLL0,顶FXCA2+1),1,IF(底FXA1=1 AND 底FXA2次数=1,1,IF(底FXA1=1 AND 底数0=1,1,0))),NODRAW;
顶数00:=COUNT(顶FXA2=1,HH00),NODRAW;
底数00:=COUNT(底FXA2=1,HH00),NODRAW;
//{第二轮处理笔}
//{先处理低点第一次}
BI0A:=IF(底FXA2=1,-1,IF(顶FXA2=1,1,0)),NODRAW;
GDTS0A:=BARSLAST(BI0A=1),NODRAW;
DDTS0A:=BARSLAST(BI0A=-1),NODRAW;
BHH0A:=IF(BI0A=1,H,-1000000),NODRAW;
BLL0A:=IF(BI0A=-1,L,1000000),NODRAW;
上K线数2:=COUNT(判断上包含=1,DDTS0A)+COUNT(判断下包含=-1,DDTS0A),NODRAW;
下K线数2:=COUNT(判断下包含=-1,GDTS0A)+COUNT(判断上包含=1,GDTS0A),NODRAW;
无效顶数2:=COUNT(BI0=1,DDTS0A),NODRAW;
无效底数2:=COUNT(BI0=-1,GDTS0A),NODRAW;
底TJ0A:=IF(GDTS0A+1<K数量,1,IF(GDTS0A+1>=K数量 AND 下K线数2+1<新笔 AND 无效底数2<=2,1,0)),NODRAW;//考虑包含K数量
DFXA1:=IF(BI0A=-1 AND 底数00>1 AND底TJ0A=1 AND BLL0A>=REF(BLL0A,GDTS0A+REF(DDTS0A,GDTS0A)),0,IF(BI0A=0,0,IF(BI0A=1,0,IF(BI0A=-1 AND 底数00<=1 AND 底TJ0A=1,-1,-1)))),NODRAW;
DFXA2:=IF(BI0A=-1 AND 底数00<=1,-1,0),NODRAW;
DFXA3:=IF(当下底0=1,-1,0),NODRAW;//当下底
DFXA:=IF(DFXA1=-1 OR DFXA2=-1 OR DFXA3=-1,-1,0),NODRAW;
//{先处理低点第二次}
BI0A2:=IF(DFXA=-1,-1,IF(BI0A=1,1,0)),NODRAW;
GDTS0A2:=BARSLAST(BI0A2=1),NODRAW;
DDTS0A2:=BARSLAST(BI0A2=-1),NODRAW;
BHH0A2:=IF(BI0A2=1,H,-1000000),NODRAW;
BLL0A2:=IF(BI0A2=-1,L,1000000),NODRAW;
下K线数A2:=COUNT(判断下包含=-1,GDTS0A2)+COUNT(判断上包含=1,GDTS0A2),NODRAW;
无效顶数22:=COUNT(BI0=1,DDTS0A2),NODRAW;
无效底数22:=COUNT(BI0=-1,GDTS0A2),NODRAW;
底TJ0A2:=IF(GDTS0A2+1<K数量,1,IF(GDTS0A2+1>=K数量 AND 下K线数A2+1<新笔 AND 无效底数22<=2,1,0)),NODRAW;//考虑包含K数量
DFX0A11:=IF(BI0A2=-1 AND 底数>1 AND 底TJ0A2=1AND REF(BHH0A2,GDTS0A2)=REF(HHV(BHH0A2,DDTS0A2),1) AND BLL0A2>=REF(BLL0A2,GDTS0A2+REF(DDTS0A2,GDTS0A2)),0,IF(BI0A2=0,0,IF(BI0A2=1,0,IF(BI0A2=-1 AND 底数<=1 AND 底TJ0A2=1,-1,-1)))),NODRAW;//取消不满足5根K的底
DFX0A22:=IF(BI0A2=-1 AND 底数<=1,-1,0),NODRAW;//第一个底
DFX0A33:=IF(当下底0=1,-1,0),NODRAW;//当下底
DFX0A4:=IF(DFX0A11=-1 OR DFX0A22=-1 OR DFX0A33=-1,-1,0),NODRAW;//处理第二轮后的底
//过滤后高比前高低的顶,保留最高的顶
顶FXCA:=GDTS0A2,NODRAW;
底FXCA:=BARSLAST(DFX0A4=-1),NODRAW;
FXH1A:=BHH0A2,NODRAW;
FXD1A:=IF(DFX0A4=-1,L,1000000),NODRAW;
顶FXA次数:=COUNT(BI0=1,底FXCA),NODRAW;
底FXA次数:=COUNT(BI0=-1,顶FXCA),NODRAW;
顶FXA:=IF(BI0A=1 AND 顶数>1 AND 顶FXA次数>=1 AND FXH1A=HHV(BHH0,底FXCA+1),1,IF(BI0A=1 AND 顶FXA次数=1,1,IF(BI0A=1 AND 顶数00=1,1,0))),NODRAW;
底FXA:=IF(DFX0A4=-1 AND 底数>1 AND 底FXA次数>=1 AND FXD1A=LLV(BLL0,顶FXCA+1),-1,IF(DFX0A4=-1 AND 底FXA次数=1,-1,IF(DFX0A4=-1 AND 底数00=1,-1,0))),NODRAW;
DJLS8:=BARSLAST(底FXA=-1),NODRAW;
GJLS8:=BARSLAST(顶FXA=1),NODRAW;
底8TJ1:=BACKSET(顶FXA=1,DJLS8+1),NODRAW;
底8TJ2:=IF(BACKSET(顶FXA=1,DJLS8)=1,1,0),NODRAW;
底FX0A:=IF(底FXA=-1,1,0)=1,NODRAW;
顶8TJ1:=BACKSET(底FXA=-1,GJLS8+1),NODRAW;
顶8TJ2:=IF(BACKSET(底FXA=-1,GJLS8)=1,1,0),NODRAW;
顶8TJ3:=BACKSET(ISLASTBAR AND GJLS8<DJLS8,GJLS8+1),NODRAW;//考虑当下最后K无底但有顶的情况
顶8TJ4:=IF(BACKSET(ISLASTBAR AND GJLS8<DJLS8,GJLS8)=1,1,0),NODRAW;
顶FX0A:=IF(顶8TJ1>顶8TJ2,1,0)=1 OR IF(顶8TJ3>顶8TJ4,1,0)=1,NODRAW;
顶数000:=COUNT(顶FX0A=1,HH00),NODRAW;
底数000:=COUNT(底FX0A=1,HH00),NODRAW;
//{再处理高点}
BI1A:=IF(底FX0A=1,-1,IF(顶FX0A=1,1,0)),NODRAW;
GDTS1A:=BARSLAST(BI1A=1),NODRAW;
DDTS1A:=BARSLAST(BI1A=-1),NODRAW;
BHH1A:=IF(BI1A=1,H,-1000000),NODRAW;
BLL1A:=IF(BI1A=-1,L,1000000),NODRAW;
上K线数3:=COUNT(判断上包含=1,DDTS1A)+COUNT(判断下包含=-1,DDTS1A),NODRAW;
下K线数3:=COUNT(判断下包含=-1,GDTS1A)+COUNT(判断上包含=1,GDTS1A),NODRAW;
无效顶数3:=COUNT(BI0=1,DDTS1A),NODRAW;
无效底数3:=COUNT(BI0=-1,GDTS1A),NODRAW;
顶TJ1A:=IF(DDTS1A+1<K数量,1,IF(DDTS1A+1>=K数量 AND 上K线数3+1<新笔 AND 无效顶数3<=2,1,0)),NODRAW;//考虑包含K数量
顶FX1A1:=IF(BI1A=1 AND 顶TJ1A=1 AND REF(BLL1A,DDTS1A)=REF(LLV(BLL1A,GDTS1A),1) AND BHH1A<REF(BHH1A,DDTS1A+REF(GDTS1A,DDTS1A)),0,IF(BI1A=0,0,IF(BI1A=-1,0,1))),NODRAW;
顶FX1A2:=IF(BI1A=1 AND 顶数000<=1,1,0),NODRAW;
顶FX1A3:=IF(当下顶0=1,1,0),NODRAW;//当下顶
顶FX1A:=IF(顶FX1A1 OR 顶FX1A2 OR 顶FX1A3,1,0),NODRAW;
顶FXC1A:=BARSLAST(顶FX1A=1),NODRAW;
底FXC1A:=BARSLAST(底FX0A=1),NODRAW;
FXH2A:=IF(顶FX1A=1,H,-1000000),NODRAW;
FXD2A:=IF(底FX0A=1,L,1000000),NODRAW;
顶FX1A次数:=COUNT(顶FX1A=1,底FXC1A),NODRAW;
底FX1A次数:=COUNT(底FX0A=1,顶FXC1A),NODRAW;
顶FX2A:=IF(顶FX1A次数>1 AND FXH2A=HHV(FXH2A,底FXC1A+1),顶FX1A,IF(顶FX1A次数=1,顶FX1A,IF(顶数000=1,顶FX1A,0))),NODRAW;
底FX2A:=IF(底FX1A次数>1 AND FXD2A=LLV(FXD2A,顶FXC1A+1),底FX0A,IF(底FX1A次数=1, 底FX0A,IF(底数000=1, 底FX0A,0))),NODRAW;
DJLS9:=BARSLAST(底FX2A=1),NODRAW;
GJLS9:=BARSLAST(顶FX2A=1),NODRAW;
底9TJ1:=BACKSET(顶FX2A=1,DJLS9+1),NODRAW;
底9TJ2:=IF(BACKSET(顶FX2A=1,DJLS9)=1,1,0),NODRAW;
底9TJ3:=BACKSET(ISLASTBAR AND GJLS9>DJLS9,DJLS9+1),NODRAW;//考虑当下最后K无顶但有底的情况
底9TJ4:=IF(BACKSET(ISLASTBAR AND GJLS9>DJLS9,DJLS9)=1,1,0),NODRAW;
底FX00A:=IF(底9TJ1>底9TJ2,1,0)=1 OR IF(底9TJ3>底9TJ4,1,0)=1,NODRAW;
顶9TJ1:=BACKSET(底FX2A=1,GJLS9+1),NODRAW;
顶9TJ2:=IF(BACKSET(底FX2A=1,GJLS9)=1,1,0),NODRAW;
顶FX00A:=IF(顶FX2A=1,1,0)=1,NODRAW;
//划满足5根K的笔
BI:=IF(底FX00A=1,-1,IF(顶FX00A=1,1,0)),NODRAW;
GDTS:=BARSLAST(BI=1),NODRAW;
DDTS:=BARSLAST(BI=-1),NODRAW;
BHH:=IF(BI=1,H,0),NODRAW;
BLL:=IF(BI=-1,L,0),NODRAW;
DRAWLINE1(BI=1,BHH,BI=-1,BLL,0),COLORGREEN,LINETHICK2;
DRAWLINE1(BI=-1,BLL,BI=1,BHH,0),COLORMAGENTA,LINETHICK2;
DRAWNUMBER(BI=1,H,BHH,2,COLORFF00FF),FONTSIZE15;
DRAWNUMBER(BI=-1,L,BLL,2,COLORGREEN),FONTSIZE15;
//划分型连接的笔
BI10:=IF(分型底=1,-1,IF(分型顶=1,1,0)),NODRAW;
GDTS10:=BARSLAST(BI10=1),NODRAW;
DDTS10:=BARSLAST(BI10=-1),NODRAW;
BHH10:=IF(BI10=1,H,0),NODRAW;
BLL10:=IF(BI10=-1,L,0),NODRAW;
DRAWLINE1(BI10=1,BHH10,BI10=-1,BLL10,0),RGB(255,255,255),DOT;
DRAWLINE1(BI10=-1,BLL10,BI10=1,BHH10,0),RGB(255,255,255),DOT;
//DRAWNUMBER(BI10=1,H,BHH10,3,COLORFF00FF),FONTSIZE15;
//DRAWNUMBER(BI10=-1,L,BLL10,3,COLORGREEN),FONTSIZE15;
//最后一段画线
N1:=BARSLAST(BI10=1)+1;
N2:=BARSLAST(BI10=-1)+1;
N3:=BARSLAST(分型顶0=1)+1;
N4:=BARSLAST(分型底0=-1)+1;
DRAWLINE3(ISLASTBAR&&MIN(N1,N2)=N2&&L>REF(L,N2-1),REF(L,N2-1),N2-1,ISLASTBAR,REF(H,顶长范围),顶长范围,0),COLORYELLOW,DOT;//红色
DRAWLINE3(ISLASTBAR&&MIN(N1,N2)=N1&&H<REF(H,N1-1),REF(H,N1-1),N1-1,ISLASTBAR,REF(L,底长范围),底长范围,0),COLORYELLOW,DOT;//绿色
夜雨聆风