一、通达信的,源码如下:
1、趋势画线预警 HIGHN:=10;LOWN:=10;HIGHDISPLAY:=0;LOWDISPLAY:=0;ZGDISPLAY:=0;MADISPLAY:=0; AA:=REF(H,HIGHN)=HHV(H,2*HIGHN+1); QY:=BACKSET(AA,HIGHN+1); CC:=FILTER(QY,HIGHN) AND H=HHV(H,HIGHN+1); DDD:=BARSLAST(CC); GDTS:=IF(CC,CURRBARSCOUNT,0); DINGBU:=IF(DDD,REF(H,DDD),H);{顶部} DINGBUTS:=IF(DDD,REF(GDTS,DDD),GDTS); DINGBU1:=REF(DINGBU,DDD+1); GDCS1:=CONST(DINGBUTS); DINGBUTS1:=REF(DINGBUTS,DDD+1); GDCS2:=CONST(DINGBUTS1); DINGBU2:=REF(DINGBU1,DDD+1); MM:=IF(CURRBARSCOUNT>GDCS2,0,1); 高点压力:=DRAWLINE(CURRBARSCOUNT=GDCS2,H,CURRBARSCOUNT=GDCS1,H,1); 压力线选股:CROSS(C,高点压力); 2、成交量放大(如果直接用成交量的话,经合前面的画线预警,可能股价已经涨很高了,所以用虚拟量来做变量) 虚拟量:=IF(CURRBARSCOUNT=1 AND PERIOD=5,VOL*240/FROMOPEN,DRAWNULL); 量突破:虚拟量>REF(V,1); 3、组合前面趋势线及后面的成交量放大,确定其有效性。 HIGHN:=10;LOWN:=10;HIGHDISPLAY:=0;LOWDISPLAY:=0;ZGDISPLAY:=0;MADISPLAY:=0; AA:=REF(H,HIGHN)=HHV(H,2*HIGHN+1); QY:=BACKSET(AA,HIGHN+1); CC:=FILTER(QY,HIGHN) AND H=HHV(H,HIGHN+1); DDD:=BARSLAST(CC); GDTS:=IF(CC,CURRBARSCOUNT,0); DINGBU:=IF(DDD,REF(H,DDD),H);{顶部} DINGBUTS:=IF(DDD,REF(GDTS,DDD),GDTS); DINGBU1:=REF(DINGBU,DDD+1); GDCS1:=CONST(DINGBUTS); DINGBUTS1:=REF(DINGBUTS,DDD+1); GDCS2:=CONST(DINGBUTS1); DINGBU2:=REF(DINGBU1,DDD+1); MM:=IF(CURRBARSCOUNT>GDCS2,0,1); 高点压力:=DRAWLINE(CURRBARSCOUNT=GDCS2,H,CURRBARSCOUNT=GDCS1,H,1); 虚拟量:=IF(CURRBARSCOUNT=1 AND PERIOD=5,VOL*240/FROMOPEN,DRAWNULL); 量突破:=虚拟量>REF(V,1); 选股:CROSS(C,高点压力) and 量突破; 二、大智慧的,思路及代码来自于西天取金老师,同时有一个问题,就是预警没有问题,但盘后直接选股会出错,我解决不了。 1、趋势画线预警代码: input: N(5,1,100);{调整参数,能取得不同的效果哟,大家可以试试} A1:=ref(h,N)=hhv(h,2*N+1); B1:=filter(A1,N); C1:=backset(B1,N+1); D1:=filter(C1,n);{高点} A2:=ref(l,N)=llv(l,2*N+1); B2:=filter(A2,N); C2:=backset(B2,N+1); D2:=filter(C2,N);{低点} E1:=(ref(llv(l,2*N),1)+ref(hhv(h,2*N),1))/2; E2:=(h+l)/2;{高低点出现在同一K线上时可作取舍} H1:=(D1 AND not(D2 AND E1>=E2)) OR barstatus=2 OR barscount(c)=1; L1:=(D2 AND not(D1 AND E1<E2)); H2:=D1 AND not(D2 AND E1>=E2); X1:=ref(barslast(H1),1)+1; F1:=backset(H1 AND count(L1,X1)>0,llvbars (if(L1,l,10000),X1)); G1:=F1>ref(F1,1); I1:=backset(G1,2); LD:=I1>ref(I1,1);{过滤后低点} L2:=LD OR barstatus=2 OR barscount(c)=1; X2:=ref(barslast(L2),1)+1; F2:=backset(L2 AND count(H2,X2)>0,hhvbars (if(H2,h,0),X2)); G2:=F2>ref(F2,1); I2:=backset(G2,2); HD:=I2>ref(I2,1);{过滤后高点} R1:=backset(barstatus=2,barslast(HD)+1); S1:=R1>ref(R1,1); {前一高} T1:=backset(barstatus=2,barslast(LD)+1); U1:=T1>ref(T1,1); {前一低} R2:=backset(S1,ref(barslast(HD),1)+2); S2:=R2>ref(R2,1); {前二高} T2:=backset(U1,ref(barslast(LD),1)+2); U2:=T2>ref(T2,1); {前二低} HH1:=if(s2,H,ref(H,BARSLAST(s2))); HH2:=if(s1,H,ref(H,BARSLAST(s1))); LL1:=if(u2,l,ref(l,BARSLAST(u2))); LL2:=if(u1,l,ref(l,BARSLAST(u1))); 上线:=HH1+(HH2-HH1)*BARSLAST(s2)/(BARSLAST(s2)-BARSLAST(s1));{这两句就是趋势线能预警的核心代码} 下线:=LL1+(LL2-LL1)*BARSLAST(U2)/(BARSLAST(U2)-BARSLAST(u1)); 安破:cross(c,上线) and 上线<ref(上线,3);{加入这一句,是为了让压力线方向是向下的,相对安全一些,朋友们可以去掉} 2、成交量大于前一天,同样用虚拟量,理由在前面通达信中,已经说明 T日:=if(CURRENTTIME>93000 and CURRENTTIME<150000, if(CURRENTTIME<113000,(TIMETOT0(CURRENTTIME)-34200), if(CURRENTTIME>130000,(TIMETOT0(CURRENTTIME)-39600),7200)),14400); T60:=if(MOD(T日,3600)=0,3600,MOD(T日,3600)); T30:=if(MOD(T日,1800)=0,1800,MOD(T日,1800)); T15:=if(MOD(T日,900)=0,900,MOD(T日,900)); T5:=if(MOD(T日,300)=0,300,MOD(T日,300)); T1:=if(MOD(T日,60)=0,60,MOD(T日,60)); TT:=if(DATATYPE=8,vol*14400/ T日, if(DATATYPE=7,vol*3600/T60, if(DATATYPE=6,vol*1800/T30, if(DATATYPE=5,vol*900/T15, if(DATATYPE=4,vol*300/T5, if(DATATYPE=4,vol*60/T1,0)))))); 量:=IF(BARSTATUS=2,TT,0); 放大:量>ref(v,1); 3、组合预警公式,不需要的可以只使用前面的趋势线预警。 input: N(5,1,100);{调整参数,能取得不同的效果哟,大家可以试试} A1:=ref(h,N)=hhv(h,2*N+1); B1:=filter(A1,N); C1:=backset(B1,N+1); D1:=filter(C1,n);{高点} A2:=ref(l,N)=llv(l,2*N+1); B2:=filter(A2,N); C2:=backset(B2,N+1); D2:=filter(C2,N);{低点} E1:=(ref(llv(l,2*N),1)+ref(hhv(h,2*N),1))/2; E2:=(h+l)/2;{高低点出现在同一K线上时可作取舍} H1:=(D1 AND not(D2 AND E1>=E2)) OR barstatus=2 OR barscount(c)=1; L1:=(D2 AND not(D1 AND E1<E2)); H2:=D1 AND not(D2 AND E1>=E2); X1:=ref(barslast(H1),1)+1; F1:=backset(H1 AND count(L1,X1)>0,llvbars (if(L1,l,10000),X1)); G1:=F1>ref(F1,1); I1:=backset(G1,2); LD:=I1>ref(I1,1);{过滤后低点} L2:=LD OR barstatus=2 OR barscount(c)=1; X2:=ref(barslast(L2),1)+1; F2:=backset(L2 AND count(H2,X2)>0,hhvbars (if(H2,h,0),X2)); G2:=F2>ref(F2,1); I2:=backset(G2,2); HD:=I2>ref(I2,1);{过滤后高点} R1:=backset(barstatus=2,barslast(HD)+1); S1:=R1>ref(R1,1); {前一高} T1:=backset(barstatus=2,barslast(LD)+1); U1:=T1>ref(T1,1); {前一低} R2:=backset(S1,ref(barslast(HD),1)+2); S2:=R2>ref(R2,1); {前二高} T2:=backset(U1,ref(barslast(LD),1)+2); U2:=T2>ref(T2,1); {前二低} HH1:=if(s2,H,ref(H,BARSLAST(s2))); HH2:=if(s1,H,ref(H,BARSLAST(s1))); LL1:=if(u2,l,ref(l,BARSLAST(u2))); LL2:=if(u1,l,ref(l,BARSLAST(u1))); 上线:=HH1+(HH2-HH1)*BARSLAST(s2)/(BARSLAST(s2)-BARSLAST(s1));{这两句就是趋势线能预警的核心代码} 下线:=LL1+(LL2-LL1)*BARSLAST(U2)/(BARSLAST(U2)-BARSLAST(u1)); T日:=if(CURRENTTIME>93000 and CURRENTTIME<150000, if(CURRENTTIME<113000,(TIMETOT0(CURRENTTIME)-34200), if(CURRENTTIME>130000,(TIMETOT0(CURRENTTIME)-39600),7200)),14400); T60:=if(MOD(T日,3600)=0,3600,MOD(T日,3600)); T30:=if(MOD(T日,1800)=0,1800,MOD(T日,1800)); T15:=if(MOD(T日,900)=0,900,MOD(T日,900)); T5:=if(MOD(T日,300)=0,300,MOD(T日,300)); T1:=if(MOD(T日,60)=0,60,MOD(T日,60)); TT:=if(DATATYPE=8,vol*14400/ T日, if(DATATYPE=7,vol*3600/T60, if(DATATYPE=6,vol*1800/T30, if(DATATYPE=5,vol*900/T15, if(DATATYPE=4,vol*300/T5, if(DATATYPE=4,vol*60/T1,0)))))); 预量:=IF(BARSTATUS=2,TT,0); 放大:=预量>ref(v,1); 放量突破:cross(c,上线) and 上线<ref(上线,3) and 放大; 三、飞狐的 1、趋势画线预警代码 input: N(5,1,100); A1:=ref(h,N)=hhv(h,2*N+1); B1:=filter(A1,N); C1:=backset(B1,N+1); D1:=filter(C1,n);{高点} A2:=ref(l,N)=llv(l,2*N+1); B2:=filter(A2,N); C2:=backset(B2,N+1); D2:=filter(C2,N);{低点} E1:=(ref(llv(l,2*N),1)+ref(hhv(h,2*N),1))/2; E2:=(h+l)/2;{高低点出现在同一K线上时可作取舍} H1:=(D1 AND not(D2 AND E1>=E2)) OR barstatus=2 OR barscount(c)=1; L1:=(D2 AND not(D1 AND E1<E2)); H2:=D1 AND not(D2 AND E1>=E2); X1:=ref(barslast(H1),1)+1; F1:=backset(H1 AND count(L1,X1)>0,llvbars (if(L1,l,10000),X1)); G1:=F1>ref(F1,1); I1:=backset(G1,2); LD:=I1>ref(I1,1);{过滤后低点} L2:=LD OR barstatus=2 OR barscount(c)=1; X2:=ref(barslast(L2),1)+1; F2:=backset(L2 AND count(H2,X2)>0,hhvbars (if(H2,h,0),X2)); G2:=F2>ref(F2,1); I2:=backset(G2,2); HD:=I2>ref(I2,1);{过滤后高点} R1:=backset(barstatus=2,barslast(HD)+1); S1:=R1>ref(R1,1); {前一高} T1:=backset(barstatus=2,barslast(LD)+1); U1:=T1>ref(T1,1); {前一低} R2:=backset(S1,ref(barslast(HD),1)+2); S2:=R2>ref(R2,1); {前二高} T2:=backset(U1,ref(barslast(LD),1)+2); U2:=T2>ref(T2,1); {前二低} 压力线:=LINEVALUE(S2,最高价,S1,最高价,0,1);{不知道是哪个老师教过我的,这个统计函数,谢谢} cross(c,压力线); 2、成交量放大 交易分钟数:=if(CURRENTTIME>93000 and CURRENTTIME<150000, if(CURRENTTIME<113000,(TIMETOT0(CURRENTTIME)-34200)/60, if(CURRENTTIME>130000,(TIMETOT0(CURRENTTIME)-39600)/60,120)),240); 日期差:=DATEDIFF(DATE,CURRENTDATE); 预量:=IF(BARSTATUS=2 and 日期差=0,VOL/交易分钟数*240,VOL); 量突破:预量>ref(v,1); 3、组合预警,不需要放量的可以只用前面的趋势线预警指标 input: N(5,1,100); A1:=ref(h,N)=hhv(h,2*N+1); B1:=filter(A1,N); C1:=backset(B1,N+1); D1:=filter(C1,n);{高点} A2:=ref(l,N)=llv(l,2*N+1); B2:=filter(A2,N); C2:=backset(B2,N+1); D2:=filter(C2,N);{低点} E1:=(ref(llv(l,2*N),1)+ref(hhv(h,2*N),1))/2; E2:=(h+l)/2;{高低点出现在同一K线上时可作取舍} H1:=(D1 AND not(D2 AND E1>=E2)) OR barstatus=2 OR barscount(c)=1; L1:=(D2 AND not(D1 AND E1<E2)); H2:=D1 AND not(D2 AND E1>=E2); X1:=ref(barslast(H1),1)+1; F1:=backset(H1 AND count(L1,X1)>0,llvbars (if(L1,l,10000),X1)); G1:=F1>ref(F1,1); I1:=backset(G1,2); LD:=I1>ref(I1,1);{过滤后低点} L2:=LD OR barstatus=2 OR barscount(c)=1; X2:=ref(barslast(L2),1)+1; F2:=backset(L2 AND count(H2,X2)>0,hhvbars (if(H2,h,0),X2)); G2:=F2>ref(F2,1); I2:=backset(G2,2); HD:=I2>ref(I2,1);{过滤后高点} R1:=backset(barstatus=2,barslast(HD)+1); S1:=R1>ref(R1,1); {前一高} T1:=backset(barstatus=2,barslast(LD)+1); U1:=T1>ref(T1,1); {前一低} R2:=backset(S1,ref(barslast(HD),1)+2); S2:=R2>ref(R2,1); {前二高} T2:=backset(U1,ref(barslast(LD),1)+2); U2:=T2>ref(T2,1); {前二低} 压力线:=LINEVALUE(S2,最高价,S1,最高价,0,1);{不知道是哪个老师教过我的,这个统计函数,谢谢} 交易分钟数:=if(CURRENTTIME>93000 and CURRENTTIME<150000, if(CURRENTTIME<113000,(TIMETOT0(CURRENTTIME)-34200)/60, if(CURRENTTIME>130000,(TIMETOT0(CURRENTTIME)-39600)/60,120)),240); 日期差:=DATEDIFF(DATE,CURRENTDATE); 预量:=IF(BARSTATUS=2 and 日期差=0,VOL/交易分钟数*240,VOL); 量突破:预量>ref(v,1); cross(c,压力线) and 量突破; |
|