{==============================================================================}
{  缠论买点选股公式（通达信 · 条件选股）                                      }
{  依据《缠论主图》的买点信号，筛选当日出现买点的股票                          }
{                                                                              }
{  买点信号（与主图公式完全一致）：                                            }
{    线段买  = 线段低点 JDBL=-1（向下线段完成，主图标"买"）                   }
{    背驰买  = MACD底背驰（价新低而动能收敛，第一类买点依据）                 }
{    买一类  = ZIG第一类买点 [1买]                                             }
{    买二类  = ZIG第二类买点 [2买]                                             }
{    买类二  = ZIG类第二类买点 [类2买]                                         }
{                                                                              }
{  用法：                                                                      }
{    功能→选股器→条件选股→选"技术指标"，选中本公式，默认按 XG 选股          }
{    默认 XG = 线段买 OR 背驰买（稳健买点）                                    }
{    想改用 ZIG 买点，把末尾 XG 行换成注释里提示的那行即可                     }
{                                                                              }
{  注意：                                                                      }
{    · ZIG 是未来函数，买一类/二类/类二 信号会随行情漂移，选股务必谨慎         }
{    · 线段/背驰买点经 BACKSET 确认分型，信号滞后数根K线（属正常确认延迟）    }
{==============================================================================}

{===== 一、分型 =====}
JBDDYXA:=BACKSET(LLV(L,5)<REF(LLV(L,4),1),4);
JBDDYXB:=BACKSET(JBDDYXA=0 AND REF(JBDDYXA,1)=1,2);
JBDDYXC:=IF(JBDDYXB=1 AND REF(JBDDYXB,1)=0,-1,0);
JBGDYXA:=BACKSET(HHV(H,5)>REF(HHV(H,4),1),4);
JBGDYXB:=BACKSET(JBGDYXA=0 AND REF(JBGDYXA,1)=1,2);
JBGDYXC:=IF(JBGDYXB=1 AND REF(JBGDYXB,1)=0,1,0);

{===== 二、缺口 =====}
QKPD:=IF(L>REF(H,1),1,IF(H<REF(L,1),-1,0));

{===== 三、笔（第一层）=====}
JQTG:=BARSLAST(JBGDYXC=1);
JQDD:=BARSLAST(JBDDYXC=-1);
XZZQ:=LOWRANGE(L);
DZZQ:=TOPRANGE(H);
DBLAA:=IF(JBDDYXC=-1 AND REF(JQTG,1)>REF(JQDD,1) AND LLV(L,JQTG+1)<REF(LLV(L,JQTG+1),1),-1,0);
DBLAB:=IF(JBDDYXC=-1 AND REF(JQTG,1)<=REF(JQDD,1) AND (JQTG>=4 OR LLV(QKPD,JQTG)=-1 OR LLV(L,JQDD+2)<REF(LLV(L,JQDD+1),1)),-1,0);
DBLS:=IF((DBLAA=-1 OR DBLAB=-1) AND L<REF(H,JQTG+1),-1,0);
YP:=IF((JQDD<4 AND HHV(QKPD,JQDD)=1) OR REF(DBLS,JQDD)=0,1,0);
PD:=IF(JBGDYXC=1 AND REF(JQDD,1)<=REF(JQTG,1) AND YP=1 AND DZZQ>REF(XZZQ,JQDD+1) AND DZZQ>REF(XZZQ,JQDD) AND DZZQ>REF(DZZQ,JQTG),1,0);
GBLA:=IF(JBGDYXC=1 AND REF(JQDD,1)>REF(JQTG,1) AND HHV(H,JQDD+1)>REF(HHV(H,JQDD+1),1),1,0);
GBLB:=IF(JBGDYXC=1 AND REF(JQDD,1)<=REF(JQTG,1) AND REF(DBLS,JQDD)=-1 AND (JQDD>=4 OR HHV(QKPD,JQDD)=1),1,0);
GBL:=IF((GBLA=1 OR GBLB=1 OR PD=1) AND H>REF(L,JQDD+1),1,0);
YPA:=IF((JQTG<4 AND HHV(QKPD,JQTG)!=1) OR REF(GBL,JQTG)=0,1,0);
PDA:=IF(JBDDYXC=-1 AND REF(JQTG,1)<=REF(JQDD,1) AND YPA=1 AND XZZQ>REF(DZZQ,JQTG+1) AND XZZQ>REF(DZZQ,JQTG) AND XZZQ>REF(XZZQ,JQDD),-1,0);
DBLA:=IF(JBDDYXC=-1 AND REF(JQTG,1)>REF(JQDD,1) AND LLV(L,JQTG+1)<REF(LLV(L,JQTG+1),1),-1,0);
DBLB:=IF(JBDDYXC=-1 AND REF(JQTG,1)<=REF(JQDD,1) AND (JQTG>=4 OR LLV(QKPD,JQTG)=-1 OR PDA=-1),-1,0);
DBL:=IF((DBLA=-1 OR DBLB=-1) AND L<REF(H,JQTG+1),-1,0);

{===== 四、线段（第二层）=====}
JQTGA:=BARSLAST(GBL=1);
JQDDA:=BARSLAST(DBL=-1);
YPX:=IF((JQDDA<4 AND HHV(QKPD,JQDDA)=1) OR REF(DBL,JQDDA)=0,1,0);
PDX:=IF(JBGDYXC=1 AND REF(JQDDA,1)<=REF(JQTGA,1) AND YPX=1 AND DZZQ>REF(XZZQ,JQDDA+1) AND DZZQ>REF(XZZQ,JQDDA) AND DZZQ>REF(DZZQ,JQTGA),1,0);
GBLXA:=IF(JBGDYXC=1 AND REF(JQDDA,1)>REF(JQTGA,1) AND HHV(H,JQDDA+1)>REF(HHV(H,JQDDA+1),1),1,0);
GBLXB:=IF(JBGDYXC=1 AND REF(JQDDA,1)<=REF(JQTGA,1) AND REF(DBL,JQDDA)=-1 AND (JQDDA>=4 OR HHV(QKPD,JQDDA)=1),1,0);
GBLX:=IF((GBLXA=1 OR GBLXB=1 OR PDX=1) AND H>REF(L,JQDDA+1),1,0);
YPXA:=IF((JQTGA<4 AND HHV(QKPD,JQTGA)!=1) OR REF(GBLXA,JQTGA)=0,1,0);
PDXA:=IF(JBDDYXC=-1 AND REF(JQTGA,1)<=REF(JQDDA,1) AND YPXA=1 AND XZZQ>REF(DZZQ,JQTGA+1) AND XZZQ>REF(DZZQ,JQTGA) AND XZZQ>REF(XZZQ,JQDDA),-1,0);
DBLXA:=IF(JBDDYXC=-1 AND REF(JQTGA,1)>REF(JQDDA,1) AND LLV(L,JQTGA+1)<REF(LLV(L,JQTGA+1),1),-1,0);
DBLXB:=IF(JBDDYXC=-1 AND REF(JQTGA,1)<=REF(JQDDA,1) AND (JQTGA>=4 OR LLV(QKPD,JQTGA)=-1 OR PDXA=-1),-1,0);
DBLX:=IF((DBLXA=-1 OR DBLXB=-1) AND L<REF(H,JQTGA+1),-1,0);

{===== 五、大级别（第三层）=====}
JQTGYA:=BARSLAST(GBLX=1);
JQDDYA:=BARSLAST(DBLX=-1);
YPYX:=IF((JQDDYA<4 AND HHV(QKPD,JQDDYA)=1) OR REF(DBLX,JQDDYA)=0,1,0);
PDYX:=IF(JBGDYXC=1 AND REF(JQDDYA,1)<=REF(JQTGYA,1) AND YPYX=1 AND DZZQ>REF(XZZQ,JQDDYA+1) AND DZZQ>REF(XZZQ,JQDDYA) AND DZZQ>REF(DZZQ,JQTGYA),1,0);
GBLYXA:=IF(JBGDYXC=1 AND REF(JQDDYA,1)>REF(JQTGYA,1) AND HHV(H,JQDDYA+1)>REF(HHV(H,JQDDYA+1),1),1,0);
GBLYXB:=IF(JBGDYXC=1 AND REF(JQDDYA,1)<=REF(JQTGYA,1) AND REF(DBLX,JQDDYA)=-1 AND (JQDDYA>=4 OR HHV(QKPD,JQDDYA)=1),1,0);
GBLYX:=IF((GBLYXA=1 OR GBLYXB=1 OR PDYX=1) AND H>REF(L,JQDDYA+1),1,0);
YPYXA:=IF((JQTGYA<4 AND HHV(QKPD,JQTGYA)=1) OR REF(GBLYXA,JQTGYA)=0,1,0);
PDYXA:=IF(JBDDYXC=-1 AND REF(JQTGYA,1)<=REF(JQDDYA,1) AND YPYXA=1 AND XZZQ>REF(DZZQ,JQTGYA+1) AND XZZQ>REF(DZZQ,JQTGYA) AND XZZQ>REF(XZZQ,JQDDYA),-1,0);
DBLYXA:=IF(JBDDYXC=-1 AND REF(JQTGYA,1)>REF(JQDDYA,1) AND LLV(L,JQTGYA+1)<REF(LLV(L,JQTGYA+1),1),-1,0);
DBLYXB:=IF(JBDDYXC=-1 AND REF(JQTGYA,1)<=REF(JQDDYA,1) AND (JQTGYA>=4 OR LLV(QKPD,JQTGYA)=-1 OR PDYXA=-1),-1,0);
DBLYX:=IF((DBLYXA=-1 OR DBLYXB=-1) AND L<REF(H,JQTGYA+1),-1,0);

{===== 六、线段端点 =====}
AAAD:=IF(GBLYX=1 AND DBLYX=-1 AND H>REF(H,REF(JQTGYA,1)+2),1,IF(GBLYX=1 AND DBLYX=-1 AND L<REF(L,REF(JQDDYA,1)+2),-1,0));
JDBL:=IF(AAAD=0,GBLYX+DBLYX,AAAD);

{===== 七、买点信号 =====}
{买点A：线段低点（向下线段完成，主图标"买"）}
线段买:=JDBL=-1;

{买点B：MACD底背驰（价新低而动能收敛，第一类买点依据）}
DIFF:=EMA(CLOSE,12)-EMA(CLOSE,26);
DEA:=EMA(DIFF,9);
MACD柱:=2*(DIFF-DEA);
背驰买:=JDBL=-1 AND L=LLV(L,BARSLAST(JDBL=1)+1) AND MACD柱>REF(MACD柱,BARSLAST(JDBL=1));

{买点C/D/E：ZIG三类买点（原公式自带；注意ZIG为未来函数，信号会漂移）}
PL5:=ZIG(3,5);
EN1:=PL5>REF(PL5,1) AND REF(PL5,1)<=REF(PL5,2) AND REF(PL5,2)<=REF(PL5,3);
EX1:=PL5<REF(PL5,1) AND REF(PL5,1)>=REF(PL5,2) AND REF(PL5,2)>=REF(PL5,3);
PL10:=ZIG(3,10);
EN2:=PL10>REF(PL10,1) AND REF(PL10,1)<=REF(PL10,2) AND REF(PL10,2)<=REF(PL10,3);
EX2:=PL10<REF(PL10,1) AND REF(PL10,1)>=REF(PL10,2) AND REF(PL10,2)>=REF(PL10,3);
PL20:=ZIG(3,20);
EN3:=PL20>REF(PL20,1) AND REF(PL20,1)<=REF(PL20,2) AND REF(PL20,2)<=REF(PL20,3);
EX3:=PL20<REF(PL20,1) AND REF(PL20,1)>=REF(PL20,2) AND REF(PL20,2)>=REF(PL20,3);
走强1:=BARSLAST(PL5<REF(PL5,1));
走弱1:=BARSLAST(PL5>REF(PL5,1));
走强2:=BARSLAST(PL10<REF(PL10,1));
走弱2:=BARSLAST(PL10>REF(PL10,1));
走强3:=BARSLAST(PL20<REF(PL20,1));
走弱3:=BARSLAST(PL20>REF(PL20,1));
ZTJZ5:=IF(PL10>REF(PL10,1),COUNT(EN1,走强2),0);
ZTJD5:=IF(PL10>REF(PL10,1),COUNT(EX1,走强2),0);
DTJZ5:=IF(PL10<REF(PL10,1),COUNT(EN1,走弱2),0);
DTJD5:=IF(PL10<REF(PL10,1),COUNT(EX1,走弱2),0);
ZTJZ10:=IF(PL20>REF(PL20,1),COUNT(EN2,走强3),0);
ZTJD10:=IF(PL20>REF(PL20,1),COUNT(EX2,走强3),0);
DTJZ10:=IF(PL20<REF(PL20,1),COUNT(EN2,走弱3),0);
DTJD10:=IF(PL20<REF(PL20,1),COUNT(EX2,走弱3),0);
买类二:=EN2 AND DTJZ10=1;   {类第二类买点}
买一类:=EN3 AND ZTJZ10=1;   {第一类买点}
买二类:=EN2 AND PL20>REF(PL20,1) AND ZTJZ10=2;   {第二类买点}

{===== 八、选股输出 =====}
{默认：ZIG 三类买点（第一类买点 / 第二类买点 / 类第二类买点）。}
{想改稳健买点（线段低点 或 底背驰），把下面XG行改为：XG:线段买 OR 背驰买;}
XG:买一类 OR 买二类 OR 买类二;
