1.DMI指標改 ——主升浪DMI指標
DMI指標是趨勢指標,信號穩定,對捕捉主升浪有獨特作用。但DMI指標有一個很大的弱點——ADX線缺乏方向,導致與ADXR的組合無論在盤整,還是主升、主跌都不好判斷方向。產生原因是ADX設計中用了絕對值函數,將PDI、MDI兩線差值正數化了,差值如果是負數,ADX顯示的是對應正數,ADX、ADXR是扭曲的差值。
通達信DMI指標源碼: MTR:=EXPMEMA(MAX(MAX(HIGH-LOW,ABS(HIGH-REF(CLOSE,1))),ABS(REF(CLOSE,1)-LOW)),N); HD :=HIGH-REF(HIGH,1); LD :=REF(LOW,1)-LOW; DMP:=EXPMEMA(IF(HD>0 && HD>LD,HD,0),N); DMM:=EXPMEMA(IF(LD>0 && LD>HD,LD,0),N); PDI: DMP*100/MTR; MDI: DMM*100/MTR; ADX: EXPMEMA(ABS(MDI-PDI)/(MDI+PDI)*100,M); ADXR:EXPMEMA(ADX,M); N默認為14,M默認為6。 ADX線缺乏方向性原因是這句公式——ADX: EXPMEMA(ABS(MDI-PDI)/(MDI+PDI)*100,M),這里用了ABS函數。弄明白這個道理后,我將之修改為: EMA(PDI-MDI)/(MDI+PDI)*100,M)。修改的關鍵差別是原來的ABS(MDI-PDI)改為PDI-MDI了,轉換后即為EMA((DMP-DMM)/(DMP+DMM)*100,M)。用彩帶表示ADX與ADXR,便于與PDI、MDI醒目區分;新設計ADX與ADXR的乖離線AAJ,相當于KDJ指標中的J線作用;增加ADX-ADXR的差值MAAD。 tdx改進后源碼如下:
 N:=14; M:=6; TRR:=EMA(MAX(MAX(H-L,ABS(H-REF(C,1))),ABS(REF(C,1)-L)),N); HD:=H-REF(H,1); LD:=REF(L,1)-L; DMP:=EMA(IF(HD>0 && HD>LD,HD,0),N); DMM:=EMA(IF(LD>0 && LD>HD,LD,0),N); ADX0:=EMA((DMP-DMM)/(DMP+DMM)*100,M); ADXR0:=EMA(ADX0,M); DRAWBAND(ADX0,RGB(155,10,10),ADXR0,RGB(0,155,0)); PDI:DMP/TRR*100,COLORWHITE; MDI:DMM/TRR*100,COLORYELLOW; ADX:ADX0,NODRAW,COLORMAGENTA; ADXR:ADXR0,NODRAW,COLORGREEN; AAJ:(3*ADX-2*ADXR),COLORMAGENTA; MAAD:ADX-ADXR,COLORLIMAGENTA,COLORSTICK; STICKLINE(MAAD>=REF(MAAD,1) && MAAD<=0,0,MAAD,1,0),COLORCYAN; STICKLINE(MAAD>=REF(MAAD,1) && MAAD>0,0,MAAD,1,0),COLORLIMAGENTA; PDIL:=IF(PDI<=10,PDI,DRAWNULL);{超跌} MDIL:=IF(MDI<=10,MDI,DRAWNULL);{超漲} AAJT:=IF(PDI<REF(PDI,1) && AAJ>REF(AAJ,1) && MAAD>PDI,AAJ,DRAWNULL);{明日可能回調} DRAWBAND(PDIL,RGB(150,150,0),PDIL,RGB(150,150,0)),POINTDOT,LINETHICK4,COLORWHITE; DRAWBAND(MDIL,RGB(150,150,0),MDIL,RGB(150,150,0)),POINTDOT,LINETHICK4,COLORYELLOW; DRAWBAND(AAJT,RGB(150,150,0),AAJT,RGB(150,150,0)),POINTDOT,LINETHICK4,COLORGREEN; 下圖為上證指數近期日線截圖,附圖上為傳統DMI指標,下為改進后的DMIR指標。
dzh2改進后源碼如下:

N:=14; M:=6; HD:=H-REF(H,1); LD:=REF(L,1)-L; DMP:=EMA(IF(HD>0 and HD>LD,HD,0),N); DMM:=EMA(IF(LD>0 and LD>HD,LD,0),N); ADX0:=EMA((DMP-DMM)/(DMP+DMM)*100,M); ADXR0:=EMA(ADX0,M); fillrgn(ADX0,ADXR0,ADX0>ADXR0,RGB(155,10,10),ADX0<ADXR0,RGB(0,155,0)); TRR:=EMA(MAX(MAX(H-L,ABS(H-REF(C,1))),ABS(REF(C,1)-L)),N); PDI:=DMP/TRR*100;{,COLORWHITE;} MDI:=DMM/TRR*100;{,COLORYELLOW;} ADX:ADX0,linethick0,COLORMAGENTA; ADXR:ADXR0,linethick0,COLORGREEN; AAJ:(3*ADX-2*ADXR),COLORMAGENTA; MAAD:(ADX-ADXR)*1.5,COLORMAGENTA,COLORSTICK;
STICKLINE(MAAD<REF(MAAD,1) AND MAAD>0,0,MAAD,3,0 ),COLOR00BBFF; STICKLINE(MAAD>=REF(MAAD,1) AND MAAD>0,0,MAAD,3,0 ),COLOR0011BB; STICKLINE(MAAD>REF(MAAD,1) AND MAAD<0,0,MAAD,3,0),COLORBB11BB; STICKLINE(MAAD<=REF(MAAD,1) AND MAAD<0,0,MAAD,3,0),COLORFFBB11; {STICKLINE(MAAD>=REF(MAAD,1) and MAAD<=0,0,MAAD,3,0),COLORred; STICKLINE(MAAD>=REF(MAAD,1) and MAAD>0,0,MAAD,3,0),COLORred;} PDIL:=IF(PDI<=10,PDI,0);{超跌} MDIL:=IF(MDI<=10,MDI,0);{超漲} AAJT:=IF(PDI<REF(PDI,1) and AAJ>REF(AAJ,1) and PDI>MDI,AAJ,0);{明日可能回調} {fillrgn(PDIL,RGB(150,150,0),PDIL,RGB(150,150,0)),POINTDOT,LINETHICK4,COLORWHITE; fillrgn(MDIL,RGB(150,150,0),MDIL,RGB(150,150,0)),POINTDOT,LINETHICK4,COLORYELLOW; DRAWBAND(AAJT,RGB(150,150,0),AAJT,RGB(150,150,0)),POINTDOT,LINETHICK4,COLORGREEN;}; PARTLINE(AAJ,PDIL>0 ),CIRCLEDOT,LINETHICK2,COLORWHITE; PARTLINE(AAJ,MDIL>0),CROSSDOT,LINETHICK2,COLORYELLOW; PARTLINE(AAJ,AAJT>0),CROSSDOT,LINETHICK2,COLORGREEN;
2.KDJ月周日共振: 白虛線為日K線、白實線為日D線;紅虛線為周K線、紅實線為周D線;橙虛線為月K線、橙實線為月D線。白三角為日金叉、紅三角為周金叉、橙三角為月金叉(都是D值40以下或60以上的金叉,40-60之間的金叉不顯示)。0之下和100之上的橙虛柱為月J值、紅虛柱為周J值、白柱為日J值(0-100之間的J值不顯示)。月周日任意兩個金叉共振時,在共振處顯示一根黃色柱線。 1.tdx {KDJ月周日共振副圖源碼}
月K:"KDJ.K#MONTH"(9,3,3),COLOR0080FF,DOTLINE; 月D:"KDJ.D#MONTH"(9,3,3),COLOR0080FF,LINETHICK3; 月J:="KDJ.J#MONTH"(9,3,3); 周K:"KDJ.K#WEEK"(9,3,3),COLORRED,DOTLINE; 周D:"KDJ.D#WEEK"(9,3,3),COLORRED,LINETHICK3; 周J:="KDJ.J#WEEK"(9,3,3); 日K:"KDJ.K"(9,3,3),COLORWHITE,DOTLINE; 日D:"KDJ.D"(9,3,3),COLORWHITE,LINETHICK3; 日J:="KDJ.J"(9,3,3); 日金叉:IF(CROSS(日K,日D) AND (日D<40 OR 日D>60),20,0),COLORWHITE; 周金叉:IF(CROSS(周K,周D) AND (周D<40 OR 周D>60),30,0),COLORRED; 月金叉:IF(CROSS(月K,月D) AND (月D<40 OR 月D>60),40,0),COLOR0080FF; 共振:(周金叉 AND 日金叉) OR (周金叉 AND 月金叉) OR (日金叉 AND 月金叉),COLORYELLOW,NODRAW; STICKLINE(共振,0,50,1,0),COLORYELLOW; STICKLINE(月J<0,0,月J,2,-1),COLOR0080FF; STICKLINE(月J>100,100,月J,2,-1),COLOR0080FF; STICKLINE(周J<0,0,周J,1,-1),COLORRED; STICKLINE(周J>100,100,周J,1,-1),COLORRED; STICKLINE(日J<0,0,日J,0,0),COLORWHITE; STICKLINE(日J>100,100,日J,0,0),COLORWHITE;  2.dzh2 {KDJ月周日共振副圖源碼} {KDJ月周日共振副圖源碼} 月K:"KDJ.K#MONTH"(9,3,3),COLOR0080FF,DOTLINE; 月D:"KDJ.D#MONTH"(9,3,3),COLOR0080FF,LINETHICK3; 月J:="KDJ.J#MONTH"(9,3,3); 周K:"KDJ.K#WEEK"(9,3,3),COLORRED,DOTLINE; 周D:"KDJ.D#WEEK"(9,3,3),COLORRED,LINETHICK3; 周J:="KDJ.J#WEEK"(9,3,3); 日K:"KDJ.K"(9,3,3),COLORWHITE,DOTLINE; 日D:"KDJ.D"(9,3,3),COLORWHITE,LINETHICK3; 日J:="KDJ.J"(9,3,3); 日金叉:IF(CROSS(日K,日D) AND (日D<40 OR 日D>60),20,0),COLORWHITE; 周金叉:IF(CROSS(周K,周D) AND (周D<40 OR 周D>60),30,0),COLORRED; 月金叉:IF(CROSS(月K,月D) AND (月D<40 OR 月D>60),40,0),COLOR0080FF; 共振:(周金叉 AND 日金叉) OR (周金叉 AND 月金叉) OR (日金叉 AND 月金叉),COLORYELLOW,linethick0; STICKLINE(共振,0,50,1,0),COLORYELLOW,linethick2; STICKLINE(月J<0,0,月J,2,-1),COLOR0080FF; STICKLINE(月J>100,100,月J,2,-1),COLOR0080FF; STICKLINE(周J<0,0,周J,1,-1),COLORRED; STICKLINE(周J>100,100,周J,1,-1),COLORRED; STICKLINE(日J<0,0,日J,0,0),COLORWHITE; STICKLINE(日J>100,100,日J,0,0),COLORWHITE; 
|