内容 第4页

通达信选股公式大全

阅读(3)

多方炮

TJ1:=C>O AND C=H AND (C-REF(C,1))/REF(C,1)*100>=5;
TJ2:=VOL<REF(VOL,1) AND C<O;
TJ4:=EVERY(MAX(C,O)>MA(C,7),3) AND CAPITAL/1000000<7;
TJ3:=C>O AND C=H;
XG:TJ1 AND REF(TJ2,1) AND REF(TJ3,2) AND TJ4;

向上跳空缺口三天不回补选股公式: 

XSTK:=LOW>REF(HIGH,1);

TT1:=BARSLAST(XSTK)+1;

HH:=REF(HIGH,TT1);

不回补:=TT1<=3 AND COUNT(XSTK,TT1)>=1 AND LOW>HH AND LOW<=HH*1.01 AND NOT(EXIST(CROSS(HH,LOW),TT1));

COUNT(LOW>REF(HIGH,1),3)>0 AND 不回补;

向上跳空缺口当天不回补选股公式:

XSTK:=LOW>REF(HIGH,1);

TT1:=BARSLAST(XSTK)+1;

HH:=REF(HIGH,TT1);

不回补:=TT1=1 AND COUNT(XSTK,TT1)>=1 AND LOW>HH AND LOW>=HH*1.001 AND NOT(EXIST(CROSS(HH,LOW),TT1));

缺口:=LOW>=HH*1.001;

去ST:=IF(NAMELIKE(‘*ST’),0,1) AND IF(NAMELIKE(‘S’),0,1) AND IF(DYNAINFO(9)=0,0,1){停牌};

未补:COUNT(LOW>REF(C,1),3)>0 AND 不回补 AND 去ST;

锤子线选股公式
B:=IF(C>O,O,C);
B1:=IF(C>O,C,O);
锤子线选股:if((B-L)/ABS(C-O)>=2 and (H-B1)/ABS(C-O)<1 and c>o,1,0);

启明星+选股预警公式

{启明星}
VARF1:=TROUGHBARS(3,15,1)<4;
DRAWTEXT(FILTER(VARF1=1,3),48.8,’启明星’),COLORRED ;
空:=EMA((CLOSE-MA((2*CLOSE+HIGH+LOW)/4,30))/MA((2*CLOSE+HIGH+LOW)/4,30)*100,3),COLORWHITE;
STICKLINE(FILTER(VARF1=1,5) AND 多空<-10,60,0,3,0),COLORF00FF0;
STICKLINE(FILTER(VARF1=1,5),60,0,1,0),COLORYELLOW;

=================

选股预警公式

VARF1:=TROUGHBARS(3,15,1)<4;
启明星:FILTER(VARF1=1,3);

平头底部形态的选股公式

K1:=ABS(LOW-REF(LOW,1))<0.02;
K2:=ABS(LOW-REF(LOW,2))<0.02;
K3:=ABS(LOW-REF(LOW,3))<0.02;
K4:=ABS(LOW-REF(LOW,4))<0.02;

K5:=ABS(LOW-LLV(LOW,5))<0.02;
K1 OR K2 OR K3 OR K4 AND K5;

20均线之上出现的平底(强势股)

K1:=ABS(LOW-REF(LOW,1))<0.02;
K2:=ABS(LOW-REF(LOW,2))<0.02;
K3:=ABS(LOW-REF(LOW,3))<0.02;
K4:=ABS(LOW-REF(LOW,4))<0.02;
K5:=LOW>MA(C,20)AND ABS(LOW-LLV(LOW,5))<0.02;
K1 OR K2 OR K3 OR K4 AND K5;

用这个公式选出来的股票,最好是回撤到前头部止跌的,是绝对强势,成功率极高。

上升三法选股公式

C1:=C*1.01;
O1:=O*0.99;

A1:=REF(C,3+1)-REF(O,3+1)>3;
A2:=RANGE(HHV(C,3),O1,C1) AND RANGE(HHV(O,3),O1,C1);
A3:=RANGE(LLV(C,3),O1,C1) AND RANGE(LLV(O,3),O1,C1);
A4:=RANGE(REF(O,3+1),O1,C1);
A5:=COUNT(ABS(C-O)<0.5,3+1)=3;

B1:=(REF(C,4+1)-REF(O,4+1))/REF(O,4+1)*100>2;
B2:=RANGE(HHV(C,4),O1,C1) AND RANGE(HHV(O,4),O1,C1);
B3:=RANGE(LLV(C,4),O1,C1) AND RANGE(LLV(O,4),O1,C1);
B4:=RANGE(REF(O,4+1),O1,C1);
B5:=COUNT(ABS(C-O)<0.5,4+1)=4;

E1:=(REF(C,5+1)-REF(O,5+1))/REF(O,5+1)*100>2;
E2:=RANGE(HHV(C,5),O1,C1) AND RANGE(HHV(O,5),O1,C1);
E3:=RANGE(LLV(C,5),O1,C1) AND RANGE(LLV(O,5),O1,C1);
E4:=RANGE(REF(O,5+1),O1,C1);
E5:=COUNT(ABS(C-O)<0.5,5+1)=5;

F1:=(REF(C,6+1)-REF(O,6+1))/REF(O,6+1)*100>2;
F2:=RANGE(HHV(C,6),O1,C1) AND RANGE(HHV(O,6),O1,C1);
F3:=RANGE(LLV(C,6),O1,C1) AND RANGE(LLV(O,6),O1,C1);
F4:=RANGE(REF(O,6+1),O1,C1);
F5:=COUNT(ABS(C-O)<0.5,6+1)=6;

T1:=(C-O)/O*100>3;
T2:=(A1 AND A2 AND A3 AND A4 AND A5) OR (B1 AND B2 AND B3 AND B4 AND B5) OR (E1 AND E2 AND E3 AND E4 AND E5) OR (F1 AND F2 AND F3 AND F4 AND F5);

T1 AND T2;

kdj的J从上向下穿越O轴发出信号

RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K:=SMA(RSV,3,1),COLORWHITE;
D:=SMA(K,3,1),COLORYELLOW;
J:=3*K-2*D,COLORFF00FF;
xg:cross(0,j);

量比大于1 同时换手大于2的公式
xg:v/ref(v,1)>1 and AMOUNT/CAPITAL*100>2;

30日均线走平或走高的个股(可修改)

xg:ma(c,30)>ref(ma(c,30),1);

连续三日收阳 后日收盘高于前日 且每日收于当日最高价附近 每日涨幅不大于4%

选股:count(c>o and c>ref(c,1) and abs((h-c)/c)<0.01 and c/ref(c,1)<1.04,3)=3;

第一天收阴,第二天,第三天,第四天,收出红三兵

XG:REF(C,3)<REF(C,4) AND COUNT(C>O,3)=3;

5日均线倾角大于60度

X:(ATAN((MA(C,5)/REF(MA(C,5),1)-1)*100)*180/3.1415926)>60;

也可以这样:

X:(ATAN((EMA(C,5)/REF(EMA(C,5),1)-1)*100)*180/3.1415926)>60;

“中阴之后,跳拉阳”

c/ref(c,1)>1.05;

MACD在8天以内两次金叉

DIFF:=(EMA(CLOSE,12) – EMA(CLOSE,26));
DEA:=EMA(DIFF,9),COLORBLUE,LINETHICK0;
MACD:=2*(DIFF-DEA);
w1:cross(DIFF,dea);
xg:count(w1,8)>=2;

3根阳线,并且第二根阳线的量比第一根小,第三根的量比第二根小

EY:=CLOSE>OPEN;
ZL:=VOL<REF(VOL,1);
XG:SUM(EY,3)=3 AND SUM(ZL,3)=3;

昨天大涨今收阴十字星大于昨收盘:

昨天大涨:=REF(C,1)/REF(C,2)>1.05;
阴十字星:=H/L>1.015 AND O>C AND H>O AND C>L AND O/C<1.005;
大于昨收盘:=C>REF(C,1);
选股:昨天大涨 AND 阴十字星 AND 大于昨收盘;

综合选股
1.换手率大于3%;2.量比大于2倍;3.现价小于10元;4.流通盘小于2亿股;5.每股收益大于0.1元;6.涨幅大于3%;7.MACD的DIFF上穿DEA,金叉;

X1:=DYNAINFO(37)>0.03;
X2:=DYNAINFO(17)>2;
X3:=C<10;
X4:=CAPITAL/1000000<2;
X5:=FINANCE(33)>0.1;
X6:=(C-REF(C,1))/REF(C,1)>0.03;
X7:=CROSS(MACD.DIF,MACD.DEA);
XG:X1 AND X2 AND X3 AND X4 AND X5 AND X6 AND X7;

均线多头排列
A1:=MA(C,N1);
A2:=MA(C,N2);
A3:=MA(C,N3);
A4:=MA(C,N4);
COUNT(A1>A2 AND A2>A3 AND A3>A4,3);

低位密集
A1:=COST(85);
A2:=COST(15);
A3:=A1-A2;
A4:=(A1+A2)/2;
A5:=A3/A4*100<10;
B1:=HHV(H,120);
B2:=LLV(L,120);
B3:=B1-B2;
B4:=(A4-B2)< B3/2;
A5 AND B4;

均线粘合:

设均线为a1,a2,a3

ff:=max(max(a1,a2),a3);
bb:=min(min(a1,a2),a3);
zz:=(ff/bb-1)*100<1;
count(zz,3)=3;

低位金叉选股
DIFF:=EMA(DCLOSE,12)-EMA(DCLOSE,26);
DEA:=EMA(DIFF,9);
MACD:=(DIFF-DEA)*2;
低位金叉:CROSS(DIFF,DEA) AND DIFF<-0.1;

二次金叉选股
DIFF:=EMA(DCLOSE,12)-EMA(DCLOSE,26);
DEA:=EMA(DIFF,9);
MACD:=(DIFF-DEA)*2;
JCCOUNT:=COUNT(CROSS(DIFF,DEA),BARSLAST(DEA>=0));
二次金叉:CROSS(DIFF,DEA) AND DEA<0 AND COUNT(JCCOUNT=2,21)=1;

绝地反弹
(1)
VAR1:=REF(LOW,1);
VAR2:=SMA(ABS(LOW-VAR1),13,1)/SMA(MAX(LOW-VAR1,0),13,1)*100;
VAR3:=EMA(IF(CLOSE*1.2,VAR2*13,VAR2/13),13);
VAR4:=LLV(LOW,34);
VAR5:=HHV(VAR3,34);
VAR6:=IF(LLV(LOW,55),1,0);
VAR7:=EMA(IF(LOW<=VAR4,(VAR3+VAR5*2)/2,0),3)/618*VAR6;
XL1:=MA(LOW,2)*0.96;
XL2:=MA(LOW,26)*0.85;
XL3:=REF(XL1,1)<XL2 AND REF(XL1,1)<XL1 AND REF(XL1,1)<REF(XL1,2);
启动:=IF(XL3,0,VAR7*3),COLORRED;
XG:启动>25;

(2)
BACKSET( (REF(CLOSE,1)<REF(OPEN,1) AND
CLOSE>OPEN AND ABS(CLOSE-REF(CLOSE,1))/CLOSE<0.002),2);
A2:=FILTER(A1<=V3,10);
ND CAPITAL<300000000
REF(V,1) = LLV(V,4) AND V >=REF(V,1)
HHV(V,3)=REF(V,1) AND HHV(V,5)=REF(V,1) AND HHV(V,21)=REF(V,1)
AND V >=REF(V,1)
01>0 AND T02>0;

聚宝盆
DIFF:=EMA(CLOSE,SHORT)-EMA(CLOSE,LONG);
DEA:=EMA(DIFF,M);
MACD2:=2*(DIFF-DEA);
HHV(MACD2,4)<0 AND MACD2>REF(MACD2,1) AND REF(MACD2,1)<REF(MACD2,2) AND REF(MACD2,2)<REF
(MACD2,3);

强势股
{SJXXG四均线选股}
MA3:=MA(C,3);
MA5:=MA(C,5);
MA10:=MA(C,10);
MA20:=MA(C,20);
V0:=MA(C,3)>REF(MA(C,3),1) AND MA(C,5)>REF(MA(C,5),1) AND C>MA(C,3)
AND MA(C,3)>MA(C,5) ; {均线C,MA3,MA5多头排列并向上;}
角度MA3:=ATAN((MA3/REF(MA3,1)-1)*100)*180/3.1416;
角度MA5:=ATAN((MA5/REF(MA5,1)-1)*100)*180/3.1416;
角度MA10:=ATAN((MA10/REF(MA10,1)-1)*100)*180/3.1416;
角度MA20:=ATAN((MA20/REF(MA20,1)-1)*100)*180/3.1416;
选股MA20:IF(角度MA3>45 AND 角度MA5>45 AND 角度MA10>60 AND 角度MA20>45 AND MA(C,250)>REF(MA(C,250),1),
1,0),COLOR00FF00;
{设计思路:
1.3日均线角度大于45度;
2:5日均线角度大于45度;
3:10日均线角度大于60度;
4.20日均线角度大于45度;
5.MA250向上;};

紫色冲关
(1).
CROSS( CLOSE,MA(C,30))
AND CLOSE>MA(C,22) AND CLOSE>MA(C,30)AND
COUNT(MA(CLOSE,13)>REF(MA(CLOSE,13),1),1)
AND COUNT(MA(CLOSE,8)>REF(MA(CLOSE,8),1),1)
AND COUNT(MA(CLOSE,20)>REF(MA(CLOSE,20),1),1)
AND CLOSE/OPEN>1.015
AND DYNAINFO(37)>0.2% COLORLIBLUE;

(2).
QSXS:=MA(CLOSE,8)>REF(MA(CLOSE,8),1) AND MA(CLOSE,3)>REF(MA(CLOSE,3),1) AND MA(CLOSE,5)>REF(MA(CLOSE,5),1);
DXJC:=CROSS(CLOSE,MA(C,21)) AND CLOSE>MA(C,13) AND CLOSE/OPEN>1.015;
HSL:=VOL/CAPITAL*100;
选股:QSXS AND DXJC AND HSL>2;

(3).
{SJXXG四均线选股}
MA3:=MA(C,1);
MA5:=MA(C,3);
MA10:=MA(C,5);
MA20:=MA(C,10);
V0:=MA(C,1)>REF(MA(C,1),0.5) AND MA(C,3)>REF(MA(C,3),0.5) AND C>MA(C,1)
AND MA(C,1)>MA(C,1) ; {均线C,MA3,MA5,MA10,MA20多头排列并向上;}
角度MA3:=ATAN((MA3/REF(MA3,1)-1)*100)*180/3.1416;
角度MA5:=ATAN((MA5/REF(MA5,1)-1)*100)*180/3.1416;
角度MA10:=ATAN((MA10/REF(MA10,1)-1)*100)*180/3.1416;
角度MA20:=ATAN((MA20/REF(MA20,1)-1)*100)*180/3.1416;
选股MA20:IF(角度MA3>50 AND 角度MA5>40 AND 角度MA10>30
AND 角度MA20>20 AND MA(C,250)>REF(MA(C,250),1),
1,0),COLOR00FF00;
{设计思路:
1.1日均线角度大于40度;
2:3日均线角度大于40度;
3:5日均线角度大于50度;
4.10日均线角度大于40度;
5.MA135向上;};

(4).
{SJXXG四均线选股}
MA3:=MA(C,5);
MA5:=MA(C,10);
MA10:=MA(C,15);
MA20:=MA(C,20);
V0:=MA(C,5)>REF(MA(C,10),1) AND MA(C,10)>REF(MA(C,15),1)
AND MA(C,15)>MA(C,20) ; {均线C,MA3,MA5多头排列并向上;}
角度MA3:=ATAN((MA3/REF(MA3,1)-1)*100)*180/3.1416;
角度MA5:=ATAN((MA5/REF(MA5,1)-1)*100)*180/3.1416;
角度MA10:=ATAN((MA10/REF(MA3,1)-1)*100)*180/3.1416;
角度MA20:=ATAN((MA20/REF(MA5,1)-1)*100)*180/3.1416;
选股MA20:IF(角度MA3>42 AND 角度MA5>25 AND 角度MA10>15 AND 角度MA20>10
AND MA(C,135)>REF(MA(C,135),1),
1,0),COLOR00FF00;
{设计思路:
1.3日均线角度大于30度;
2:5日均线角度大于40度;
3:10日均线角度大于45度;
4.20日均线角度大于40度;
5.MA135向上;};

5日最底
V5:=LLV(V,5);
QSXS:=MA(CLOSE,5)>REF(MA(CLOSE,5),1) AND MA(CLOSE,8)>REF(MA(CLOSE,8),1)
AND MA(CLOSE,21)>REF(MA(CLOSE,21),1);
DXJC:=CROSS(CLOSE,MA(C,21)) AND CLOSE>MA(C,21) AND CLOSE/OPEN>1.015;
HSL:=VOL/CAPITAL*100;
选股:V5 AND QSXS AND DXJC AND HSL>2;
1….{蓄势待发}
V0:=EMA(C,5);
EMA10:=EMA(C,10);
EMA20:=EMA(C,20);
EMA30:=EMA(C,30);
EMA60:=EMA(C,60);
M1:=1000*EMA10/EMA60<=1015 AND 1000*EMA10/EMA60>=975;
M2:=1000*EMA20/EMA60<=1020 AND 1000*EMA20/EMA60>=980;
M3:=1000*EMA30/EMA60<=1015 AND 1000*EMA30/EMA60>=985;
M4:=M1 AND M2 AND M3 AND CROSS(V0,EMA10);
M5:=M1 AND M2 AND M3 AND CROSS(V0,EMA30);
T1:=1000*EMA10/EMA30<=1010 AND 1000*EMA10/EMA30>=990;
T2:=1000*EMA20/EMA30<=1010 AND 1000*EMA20/EMA30>=990;
T3:=T1 AND T2 AND CROSS(V0,EMA10);
T4:=T1 AND T2 AND CROSS(V0,EMA30);
M4 OR M5 OR T3 OR T4;

短线之王
VAR1:=(-100)*(HHV(HIGH,3)-CLOSE)/(HHV(HIGH,3)-LLV(LOW,3));
CROSS(VAR1,-87) AND OPEN<MA(CLOSE,5) AND CLOSE>=1.099*REF(CLOSE,1) AND INDEXC>0.98*REF(INDEXC,1) AND CLOSE<=1.47*LLV
(CLOSE,58);

枪挑小梁王
W1:=C=HHV(C,20);
W2:=BARSLAST(W1);
W3:=IF(W2>0,REF(C,W2),REF(C,W2));
W4:=CROSS(C,REF(W3,1));
枪挑小梁王:W4 AND COUNT(W4,5)=1;

财务突破选股
{财务突破选股公式-明灯侠客-通信达专用}
年认同价:=MA(C,240);
价格中枢:=(SUM(年认同价,0)/(BARSSINCE(年认同价>0)+239));
箱顶:=价格中枢*1.2;
箱底:=价格中枢*0.8;
毛利润率:=FINANCE(21)/FINANCE(20);
成长价值:=年认同价*(1+毛利润率);
收益价值:=年认同价+FINANCE(33);
回调认同:=EMA(EXPMA(C,20),13);
多头:=(回调认同>REF(回调认同,1))AND(成长价值>REF(成长价值,1))AND(收益价值>REF(收益价值,1))AND(DYNAINFO(7)>0);
回调条件:=COUNT(C<回调认同,5)>=3;
回调突破:=(REF(C,1)<=REF(回调认同,1))AND(C>回调认同)AND(回调条件)AND 多头;
成长条件:=COUNT(C<成长价值,5)>=3;
成长突破:=(REF(C,1)<=REF(成长价值,1))AND(C>成长价值)AND(成长条件)AND 多头;
收益条件:=COUNT(C<收益价值,5)>=3;
收益突破:=(REF(C,1)<=REF(收益价值,1))AND(C>收益价值)AND(收益条件)AND 多头;
箱底条件:=COUNT(C<箱底,5)>=3;
箱底突破:=(REF(C,1)<=REF(箱底,1))AND(C>箱底)AND(箱底条件)AND 多头;
价格条件:=COUNT(C<价格中枢,5)>=3;
价格突破:=(REF(C,1)<=REF(价格中枢,1))AND(C>价格中枢)AND(价格条件)AND 多头;
箱顶条件:=COUNT(C<箱顶,5)>=3;
箱顶突破:=(REF(C,1)<=REF(箱顶,1))AND(C>箱顶)AND(箱顶条件)AND 多头;
突破买点:(回调突破+成长突破+收益突破+箱底突破+价格突破+箱顶突破);

横盘是银
VAR1:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
VAR2:=SMA(VAR1,3,1);
VAR3:=SMA(VAR2,3,1);
VAR4:=EMA(CLOSE,12)-EMA(CLOSE,26);
VAR5:=EMA(VAR4,9);
VAR6:=2*(VAR4-VAR5);
COUNT(CROSS(VAR2,VAR3),2)>=1 AND COUNT(CROSS(VAR6,0),5)>=1 AND MA(CLOSE,5)>MA(CLOSE,10) AND MA(CLOSE,10)>MA(CLOSE,20) AND
CLOSE>MA(CLOSE,5);
{“短线是银”的使用说明:
此组合选择比较简单,初学者易于掌握,短线有一定可操作性与准确性。但只适合于3天内的短线炒作,不能确定长期趋势。
选股设置:
2日内KD金叉,5日内MACD金叉,均线5日,10日,20日多头排列,收盘价涨过5日均线。};

黑马起步选股
VAR5:=EMA(SMA((CLOSE-LLV(LOW,100))/(HHV(HIGH,100)-LLV(LOW,100))*100,8,1),3);
选股:CROSS(VAR5,15) OR CROSS(VAR5,20) OR CROSS(VAR5,25);

起攀选股
{起攀选股}
VAR6:=(2*C+H+L)/4;
VAR7:=LLV(L,27);
VAR8:=HHV(H,27);
攀登:=EMA((VAR6-VAR7)/(VAR8-VAR7)*100,13)-50;
金山:=EMA(0.618*REF(攀登,1)+0.382*攀登,3);
起攀:CROSS(攀登,金山) AND C/REF(C,1)>1.02;

中短波选股
{中短波选股}
HZ:=EMA(CLOSE,13);
短波:=EMA(HZ,1);
中波:=EMA(HZ,26);
均线148天:=EMA(C,148);
成本:=SUM(AMOUNT,0)/SUM(VOL,0)/100;
HZ2:=EMA(HZ,8);
CROSS(短波,HZ2);
{结合中短波主图使用};

黑马摇篮之大黑马
{黑马摇篮之大黑马}
SS1:=(LOW+HIGH+CLOSE*2)/4;
SS2:= MA(SS1,4);
SS3:=HHV(SS2,10);
SS4:=MA(SS3,3);
SS5:=1.25*SS4-0.25*SS3;
XKKJ:=IF(SS5>SS3,SS3,SS5);
FF1:=LLV(SS2,10);
FF2:=MA(FF1,3);
FF3:=1.25*FF2-0.25*FF1;
DKKJ:=IF(FF3<FF1,FF1,FF3);
MA13:=MA(C,13);
ZDHM:=CROSS(C,DKKJ) AND CROSS(C,MA13) AND CROSS(C,XKKJ);
ZHM:=CROSS(C,MA13) AND CROSS(C,XKKJ);
大黑马:ZDHM OR ZHM;

黑马摇篮之小黑马
{黑马摇篮之小黑马}
A:=(3*CLOSE+LOW+OPEN+HIGH)/6;
D1:=(20*A+19*REF(A,1)+18*REF(A,2)+17*REF(A,3)+16*REF(A,4)+15*REF(A,5)+14*REF(A,6)
+13*REF(A,7)+12*REF(A,8)+11*REF(A,9)+10*REF(A,10)+9*REF(A,11)+8*REF(A,12)
+7*REF(A,13)+6*REF(A,14)+5*REF(A,15)+4*REF(A,16)+3*REF(A,17)+2*REF(A,18)+
REF(A,20))/211;
D2:=EMA(D1,2);
D3:=EMA(D2,2);
K1:=EMA(D3,2);
小黑马:CROSS(D1,K1);

蓄势待发
V0:=EMA(C,5);
EMA10:=EMA(C,10);
EMA20:=EMA(C,20);
EMA30:=EMA(C,30);
EMA60:=EMA(C,60);
M1:=1000*EMA10/EMA60<=1015 AND 1000*EMA10/EMA60>=975;
M2:=1000*EMA20/EMA60<=1020 AND 1000*EMA20/EMA60>=980;
M3:=1000*EMA30/EMA60<=1015 AND 1000*EMA30/EMA60>=985;
M4:=M1 AND M2 AND M3 AND CROSS(V0,EMA10);
M5:=M1 AND M2 AND M3 AND CROSS(V0,EMA30);
T1:=1000*EMA10/EMA30<=1010 AND 1000*EMA10/EMA30>=990;
T2:=1000*EMA20/EMA30<=1010 AND 1000*EMA20/EMA30>=990;
T3:=T1 AND T2 AND CROSS(V0,EMA10);
T4:=T1 AND T2 AND CROSS(V0,EMA30);
M4 OR M5 OR T3 OR T4;

对于 CAN ID 的理解

阅读(10)

本文主要讲的是自己对于 CAN ID 的理解,希望对需要的人有帮助,本文以通俗的方式来理解,不涉及到具体 CAN 通信。

在接触 CAN 之前,应该接触过 IIC 通信,在 IIC 通信中,在同一条 IIC 通信总线上每个 device 有唯一的 ID,后续对于 device 的操作都是通过唯一的 ID 号来区分。而 CAN ID 虽然也叫 ID,但是意义却不一样,每个 CAN device 可以接收和发送多条不同的 ID 报文。

比如在一条 CAN 总线上有三个 device,叫做 A,B,C 吧。

A device 有接收 ID:202,302;发送 ID:101,102;

B device 有接收 ID:101,303;发送 ID:201,202;

C device 有接收 ID:101,102,201;发送 ID:302,303;

如果 A device 发送了 ID 为 101 的一条报文,因为 B device 和 C device 都有接收为 101 的 ID,那么 B device 和 C device 都可以接收到这条报文。

如果 A device 发送了 ID 为 102 的一条报文,因为只有 C device 都有接收为 102 的 ID,那么只有 C device 可以接收到这条报文。

如果 B device 发送了 ID 为 202 的一条报文,因为只有 A device 都有接收为 202 的 ID,那么只有 A device 可以接收到这条报文。

可以看出,CAN ID 其实是个报文过滤器,当总线上报文的 ID 和自己接收的 ID 有相匹配的时候,就可以接收相应的报文。

CAN 中的 ID 是为了定义相应的报文的含义,每个 ID 对应有自己的具体含义。

比如,101 为电压信号,201 为电流信号,这样当 A device 要发送电压信号时候,就用 101 ID 的报文,B 和 C device 接收到 101 ID 的报文之后,知道这是电压信号。

CAN 总线报文浅析

阅读(39)

  • CAN 的报文格式

    在总线中传送的报文,每帧由 7 部分组成。CAN 协议支持两种报文格式,其唯一的不同是标识符(ID)长度不同,标准格式为 11 位,扩展格式为 29 位。

    在标准格式中,报文的起始位称为帧起始(SOF),然后是由 11 位标识符和远程发送请求位 (RTR) 组成的仲裁场。RTR 位标明是数据帧还是请求帧,在请求帧中没有数据字节。

    控制场包括标识符扩展位(IDE),指出是标准格式还是扩展格式。它还包括一个保留位 (ro),为将来扩展使用。它的最后四个位用来指明数据场中数据的长度(DLC)。数据场范围为 0~8 个字节,其后有一个检测数据错误的循环冗余检查 (CRC)。

    应答场(ACK)包括应答位和应答分隔符。发送站发送的这两位均为隐性电平(逻辑 1),这时正确接收报文的接收站发送主控电平(逻辑 0)覆盖它。用这种方法,发送站可以保证网络中至少有一个站能正确接收到报文。

    报文的尾部由帧结束标出。在相邻的两条报文间有一很短的间隔位,如果这时没有站进行总线存取,总线将处于空闲状态。

    如图 11 所示,具体某一位或某几位下面会详细介绍。

    图 11 CAN 总线报文结构


  • 数据帧

    数据帧是使用最多的帧,结构上由 7 段组成,其中根据仲裁段 ID 码长度的不同,分为标准帧(CAN2.0A)和扩展帧(CAN2.0B)。

    数据帧是由:帧起始,仲裁断,控制端,数据段,CRC 段,ACK 段和帧结束构成。

    如图 21 所示(具体的帧结构下面会详细介绍)。

    图 2–1 数据帧类型及结构


  • 帧起始和帧结束

    帧起始:由单个显性位组成,总线空闲时,发送节点发送帧起始,其他接收节点同步于该帧起始位。

    帧结束:由 7 个连续的隐形位组成。

    (注:显性电平和隐性电平是相对于 CAN_H 和 CAN_L 而言的差分信号电平,并非 TTL 电平上的高低电平,需要注意)如图 2-2 所示。

     

    图 2–2 帧起始和帧结束


  • 仲裁段

    CAN-bus 是如何解决多个节点同时发送数据,即总线竞争的问题?该问题由仲裁段给出答案。

    CAN-bus 并没有规定节点的优先级,但通过仲裁段帧 ID 规定了数据帧的优先级。根据 CAN2.0 标准版本不同,帧 ID 分为 11 位和 29 位两种。如图 23 所示

     

    图 2–3 数据帧结构

    如图 24 所示 CAN 控制器在发送数据的同时监测数据线的电平是否与发送数据对应电平相同,如果不同,则停止发送并做其他处理。

    图 2–4 仲裁处理

    假设节点 A、B 和 C 都发送相同格式相同类型的帧,如标准格式数据帧,它们竞争总线的过程是(如图 16 所示):

    图 2–5 仲裁机制

    从该分析过程得出结论是:帧 ID 值越小,优先级越高;

    对于同为扩展格式数据帧、标准格式远程帧和扩展格式远程帧的情况同理


  • 控制段

    控制段共 6 位,标准帧的控制段由扩展帧标志位 IDE、保留位 r0 和数据长度代码 DLC 组成;扩展帧控制段则由 IDE、r1、r0 和 DLC 组成如图 17 所示。

    图 2–6 数据帧结构


  • 数据段

    一个数据帧传输的数据量为 0~8 个字节,这种短帧结构使得 CAN-bus 实时性很高,非常适合汽车和工控应用场合如图 27 所示。

    图 2–7 数据段

    数据量小,发送和接收时间短,实时性高,被干扰的概率小,抗干扰能力强。


  • CRC 段

    CAN-bus 使用 CRC 校验进行数据检错,CRC 校验值存放于 CRC 段。 CRC 校验段由 15 位 CRC 值和 1 位 CRC 界定符构成如图 28 所示。

    图 2–8CRC 段


  • ACK 段

    当一个接收节点接收的帧起始到 CRC 段之间的内容没发生错误时,它将在 ACK 段发送一个显性电平如图 29 所示。

    图 2–9 ACK 段


  • 远程帧

    与数据帧相比,远程帧结构上无数据段,由 6 个段组成,同理分为标准格式和扩展格式,且 RTR 位为 1(隐性电平)如图 31 所示。

    图 3–1 远程帧结构

    如下图所示由于数据帧的 RTR 位为显性电平,远程帧的 RTR 位为隐性电平。

    所以帧格式和帧 ID 都相同情况下,数据帧的优先级比远程帧优先级高如图 32 所示:

    图 3–2 数据帧于远程帧仲裁机制

     

    图 3–3 数据帧远程帧比较

    数据帧与远程帧的区别如图 33 所示。

     


  • 错误帧

    尽管 CAN-bus 是可靠性很高的总线,但依然可能出现错误;CAN-bus 的错误类型共有 5 种(如图 41 所示)。

    图 4–1 错误帧类型

    当出现 5 种错误类型之一时,发送或接收节点将发送错误帧。错误帧的结构如下,其中错误标识分为主动错误标识和被动错误标识如图 42 所示。

    图 4–2 错误帧电平结构

    为防止自身由于某些原因导致无法正常接收的节点一直发送错误帧,干扰其他节点通信,CAN-bus 规定了节点的 3 种状态及其行为如图 43 所示。

    图 4–3 错误处理机制

    (注:这些错误处理的机制是由硬件自主完成的这样做的目的就是只要 CAN 在收到数据肯定是正确的数据)。

     


  • 过载帧与帧间隔


  • 过载帧

    当某个接收节点没有做好接收下一帧数据的准备时,将发送过载帧以通知发送节点;过载帧由过载标志和过载帧界定符组成如所示图 51。

    图 5–1 过载帧结构

    由于存在多个节点同时过载且过载帧发送有时间差问题,可能出现过载标志叠加后超过 6 个位的现象如所示图 52。

    图 5–2 过载帧具体结构


  • 帧间隔

    帧间隔用于将数据帧或远程帧和他们之前的帧分离开,但过载帧和错误帧前面不会插入帧间隔。

    帧间隔过后,如果无节点发送帧,则总线进入空闲。

    帧间隔过后,如果被动错误节点要发送帧,则先发送 8 个隐性电平的传输延迟,再发送帧。


  • CAN 总线发送总流程

    CAN-bus 整个链路层处理数据的流程是如图 61 所示:

    图 6–1CAN 总线发送总流程

     


  • 参考资料

    《项目驱动 –CAN-BUS 现场总线基础教程 —- 周立功,黄晓清》。

    《现场总线技术及其应用第二版–清华大学出版社》。

CAN 总线详解

阅读(11)

CAN(Controller Area Network)总线协议是由 BOSCH 发明的一种基于消息广播模式的串行通信总线,它起初用于实现汽车内 ECU 之间可靠的通信,后因其简单实用可靠等特点,而广泛应用于工业自动化、船舶、医疗等其它领域。相比于其它网络类型,如局域网(LAN, Local Area Network)、广域网(WAN, Wide Area Network)和个人网(PAN, Personal Area Network)等,CAN 更加适合应用于现场控制领域,因此得名。

CAN 总线是一种多主控(Multi-Master)的总线系统,它不同于 USB 或以太网等传统总线系统是在总线控制器的协调下,实现 A 节点到 B 节点大量数据的传输,CAN 网络的消息是广播式的,亦即在同一时刻网络上所有节点侦测的数据是一致的,因此比较适合传输诸如控制、温度、转速等短消息。

CAN 起初由 BOSCH 提出,后经 ISO 组织确认为国际标准,根据特性差异又分不同子标准。CAN 国际标准只涉及到 OSI(开放式通信系统参考模型 )的物理层和数据链路层。上层协议是在 CAN 标准基础上定义的应用层,市场上有不同的应用层标准。

 

发展历史

  • 1983 年,BOSCH 开始着手开发 CAN 总线;
  • 1986 年,在 SAE 会议上,CAN 总线正式发布;
  • 1987 年,Intel 和 Philips 推出第一款 CAN 控制器芯片;
  • 1991 年,奔驰 500E 是世界上第一款基于 CAN 总线系统的量产车型;
  • 1991 年,Bosch 发布 CAN 2.0 标准,分 CAN 2.0A (11 位标识符,标准帧)和 CAN 2.0B (29 位标识符,扩展帧);
  • 1993 年,ISO 发布 CAN 总线标准(ISO 11898),随后该标准主要有三部分:
    • ISO 11898-1:数据链路层协议
    • ISO 11898-2:高速 CAN 总线物理层协议
    • ISO 11898-3:低速 CAN 总线物理层协议

注意:ISO 11898-2 和 ISO 11898-3 物理层协议不属于 BOSCH CAN 2.0 标准。

2012 年,BOSCH 发布 CAN FD 1.0 标准(CAN with Flexible Data-Rate),CAN FD 定义了在仲裁后确使用不同的数据帧结构,从而达到最高 12Mbps 数据传输速率。CAN FD 与 CAN 2.0 协议兼容,可以与传统的 CAN 2.0 设备共存于同样的网络

标准化

CAN 标准分为底层标准(物理层和数据链路层)和上层标准(应用层)两大类。CAN 底层标准主要是 ISO 11898 系列的国际标准,也就是说不同厂商在 CAN 总线的物理层和数据链路层定义基本相同;而上层标准,涉及到例如流控制、设备寻址和大数据块传输控制等,不同应用领域或制造商会有不同的做法,没有统一的国际标准。

底层标准

CAN 底层标准涵盖 OSI 模型中的物理层和数据链路层,底层标准包括:

  • ISO 11898-1: 2015 定义 CAN 总线的数据链路层(DLL)和电气信号标准,描述 CAN 总线的基本架构,定义不同 CAN 总线设备在数据链路层通信方式,详细说明逻辑链接控制(LLC)和介质访问控制(MAC)子层部分;
  • ISO 11898-2: 2003 定义高速 CAN 总线(HS-CAN)物理层标准,最高数据传输速率 1Mbps ,应用为两线平衡式信号(CAN_H, CAN_L),HS CAN 是汽车动力和工业控制网络中应用最为广泛的物理层协议;
  • ISO 11898-3: 2006 定义低速 CAN 总线(LS-CAN, Fault-Tolerant CAN)物理层标准,数据传输速率在 40Kbps ~ 125Kbps 。Fault-Tolerant 是指总线上一根传输信号失效时,依靠另外的单根信号也可以通信,LS CAN 主要应用于汽车车身电控单元之间通信;
  • ISO 11898-4: 2004 定义 CAN 总线中的时间触发机制(Time-Triggered CAN, TTCAN),定义与 ISO 11898-1 配合的帧同步实体,实现汽车 ECU 之间基于时间触发的通信方式。注意,ISO 11898-1 是基于事件驱动(Event-Driven)的通信,它对于高负荷总线上,尤其是低优先级的消息会造成较大的延迟,而基于时间触发的 ISO 11898-4 标准的初衷也正是为解决该问题,确保 CAN 总线上可靠的消息传输;
  • ISO 11898-5: 2007 对 ISO 11898-2 高速 CAN 总线的补充,并参照 ISO 8802-2,定义在总线闲置时的节电特性;
  • ISO 11898-6: 2013 对 ISO 11898-2 和 ISO 11898-5 的补充,并参照 ISO 8802-2,定义使用可配置的帧实现选择性唤醒总线的机制;
  • ISO 16845-1: 2004 定义测试符合 ISO 11898-1 标准 CAN 应用的方法和条件;
  • ISO 16845-2: 2014 定义包括特定功能下可以选择性唤醒总线的 CAN 收发器的测试实例和测试要求,也称为 CAN 总线的一致性测试

CAN 总线底层标准与 ISO/OSI 模型的对应关系,如图 1 所示。对于媒体专用接口(Medium Dependent Interface, MDI),没有统一的国际标准。CiA DS-102 (CiA: CAN in Automation )仅定义使用专用连接器(DB9),并对 PIN 定义作出一定规范。

图 1. CAN 总线标准

上层标准

虽然底层标准相同,不同应用领域和组织会制定不同的上层标准。有的厂商开发并推广其应用层标准,在某些领域得以广泛应用。对于汽车行业来说,几乎每家厂商都有自己的 CAN 上层标准。比较流行的有工业自动化领域 CiA 的 CANopen ,Rockwell 的 DeviceNet;嵌入式控制领域 Kvaser 的 CAN Kingdom;智能设备控制 Honeywell 的 SDS;汽车诊断 ISO 14229 定义的 UDS,和中重型汽车 CAN 总线标准 SAE J1939 。如表 1 示。

表 1. CAN 上层标准举例

总线特点

  • 符合 OSI 开放式通信系统参考模型;
  • 两线式总线结构,电气信号为差分式
  • 多主控制,在总线空闲时,所有的单元都可开始发送消息,最先访问总线的单元可获得发送权;多个单元同时开始发送时,发送高优先级 ID 消息的单元可获得发送权;
  • 消息报文不包含源地址或者目标地址,仅通过标识符表明消息功能和优先级
  • 基于固定消息格式的广播式总线系统,短帧结构;
  • 事件触发型,只有当有消息要发送时,节点才向总线上广播消息;
  • 可以通过发送远程帧请求其它节点发送数据
  • 消息数据长度 0~8 Byte;
  • 错误检测功能,所有节点均可检测错误,检测处错误的单元会立即通知其它所有单元;
  • 发送消息出错后,节点会自动重发
  • 故障限制,节点控制器可以判断错误是暂时的数据错误还是持续性错误,当总线上发生持续数据错误时,控制器可将节点从总线上隔离
  • 通信介质可采用双绞线、同轴电缆和光导纤维,一般使用最便宜的双绞线;
  • 理论上,CAN 总线用单根信号线就可以通信,但还是配备了第二根导线,第二根导线与第一根导线信号为差分关系,可以有效抑制电磁干扰;
  • 在 40 米线缆条件下,最高数据传输速率 1Mbps;
  • 总线上可同时连接多个节点,可连接节点总数理论上是没有限制的,但实际可连接节点数受总线上时间延迟及电气负载的限制;
  • 未定义标准连接器,但经常用 9 脚 DSUB

应用

在当今汽车应用领域,车内电控单元(Electrical Control Unit, ECU)可能多达 70 个 (我们车好像 180 个),除了引擎控制单元(Engine Control Unit, ECU )外,还存在传动控制、安全气囊、ABS、巡航控制、EPS、音响系统、门窗控制和电池管理等模块,虽然某些模块是单一的子系统,但是模块之间的互连依然非常重要。例如,有的子系统需要控制执行器和接收传感器反馈,CAN 总线可以满足这些子系统数据传输的需求。汽车内子模块的总线互连架构使得软件可以更轻易地实现安全、经济和便利等新特性,相比传统汽车网络架构中模块单元直接连接更加经济。 CAN 总线实现汽车内互连系统由传统的点对点互连向总线式系统的进化,大大降低汽车内电子系统布线的复杂度,如图 2 所示。

背景:随着电气化和智能化,汽车上的电子单元越来越多,电控单元组网需求也日渐迫切!

福特 Fusion 汽车 @2013

  • 70 个 ECU 单元
  • 75 个传感器
  • 150 个激励器

自动驾驶汽车 @2030 -Prediction

  • 120 个 ECU 单元
  • 100 个传感器
  • 200 个激励器

 

图 2. 传统网络结构 VS 总线式结构

在 VW 的定义(SSP 269)中,根据应用范围将车内 CAN 总线分为三类:

  • Convenience CAN / 舒适 CAN 网络,主要控制车门窗、空调等设备,最高传输速度 100 kbps
  • Powertrain CAN / 动力 CAN 网络,主要控制动力相关设备,如发动机、制动、ABS 等,最高传输速度 500 kbps
  • Infotainment CAN / 信息娱乐 CAN 网络,主要控制收音机、电话和导航等设备,最高传输速度 100 kbps

根据数据传输速度不同 CAN 总线分两类:高速 CAN(ISO 11898-2)和低速 CAN(ISO 11898-3)。

高速 CAN(按 BOSCH 说法,也叫 CAN-C),数据速率在 125kbps ~ 1Mbps,应用在实时性要求高的节点,如引擎管理单元、电子传动控制、ESP 和仪表盘等;低速 CAN(CAN-B),数据速率在 5kbps ~ 125kbps,应用在实时性要求低的节点,主要在舒适和娱乐领域,如空调控制、座椅调节、灯光、视镜调整等,这些节点对实时性要求不高,而且分布较为分散,线缆较易收到损坏,低速 CAN 的传输速度即可满足要求,而且单根线缆也可以工作,很好地适应了以上需求。不同速度类型的 CAN 总线设备不能直接连在同一路总线上,它们之间需要通过网关隔离。

CAN 总线在汽车诊断领域的应用也非常广泛,ECU 直接挂载在总线上,可以很快地获取诊断所需的信息。传统的汽车诊断接口(如 KWP2000)应用逐渐减少。

图 2a 示意了汽车内总线系统及电子设备的逻辑分布,总线系统包括 CAN、LIN、FlexRay 和 MOST 。注意,车载以太网在图中未列出,但它的应用日渐广泛。以上不同类型和速度的总线,通过网关 Gateway 模块相互通信。(图片来源:链接)

 

图 2a. 汽车内总线系统举例

局限性

  • 由于 CAN 总线仲裁的特点,即使往总线上周期性发送消息,也不能保证节点可以确定(周期) 地收到消息,CAN 不适合对时间特别敏感的应用;
  • 最高传输速率只有 1Mbps ,对于汽车自动驾驶应用的数据传输,或者视频音频传输带宽不足。为解决这方面的需求,CAN FD 速度有所上升,另外还有 MOSTLVDS 以太网等;
  • 对于简单的应用,高成本的 CAN 总线虽然可靠性很高,但有点浪费。LIN 总线相比 CAN 具有成本优势,更适合应用于车窗座椅空调等设备

电路基础

硬件拓扑

连接在 CAN 总线上的设备叫做节点设备(CAN Node),CAN 网络的拓扑一般为线型。线束最常用为非屏蔽双绞线(UTP),线上传输为对称的电平信号(差分)。图 3 示为 CAN 总线网络示意图,节点主要包括 Host、控制器和收发器三部分。Host 常集成有 CAN 控制器 (现在的 MCU 一般都会搭载 CAN 控制器,特别是车载的 MCU),CAN 控制器负责处理协议相关功能,以减轻 Host 的负担。CAN 收发器将控制器连接到传输媒介。通常控制器和总线收发器通过光耦或磁耦隔离,这样即使总线上过压,损坏收发器,控制器和 Host 设备也可以得到保护。

图 3. CAN 总线节点示意图

高速 CAN 总线最高信号传输速率为 1Mbps,支持最长距离 40m。ISO 11898-2 规定要求在高速 CAN 总线的两端安装端接电阻(RL)以消除反射,而低速 CAN 最高速度只有 125Kbps,因此 ISO 11898-3 没有要求端接。ISO 11898 规定的 CAN 总线上最多 32 个节点。实际应用中要考虑到 CAN 总线收发器的性能,以及工作的 CAN 网络是高速 CAN 还是低速 CAN。在传输距离方面,由于距离越大,信号时延也越大,为确保消息的正确采样,总线上的信号速率相应也得下降,表 2 列出推荐的信号速率与距离的关系。

表 2. CAN 总线长度与信号速率关系(推荐)

收发器

CAN 收发器包括 CANH 和 CANL 两根信号,CANH 和 CANL 信号采用差分电平,这样可以取得更好的电磁兼容效果。CAN 总线物理传输媒介只需要两根线。

前面的标准部分有介绍,CAN 总线分高速 CAN 和低速 CAN,收发器因之也分为高速 CAN 收发器(1Mbps)和低速 CAN 收发器(125Kbps)。低速 CAN 也叫 Fault Tolerant CAN ,指的是即使总线上一根线失效,总线依然可以通信。图 4 示例高速 CAN 收发器的基本电路结构。当两个晶体管都关断时,CANH 和 CANL 上电压相同,且都为 0.5*VCC ;而当两个晶体管都打开时,CANH 和 CANL 上即存在一定的压差,且压差与负载电阻值相关。ISO 11898-2 要求此时 CANH 和 CANL 压差在 2V 左右。

CAN 收发器的特性包括非常低的电磁辐射和很强的抗击共模噪声的能力。另外,CAN 收发器可以提供高达 8KV 的 ESD 保护,在电路设计中可以在收发器附近增加共模电感以进一步降低电磁辐射(图 5)。

图 4. CAN 总线收发器(MCP2551)

图 5. 共模电感降低辐射

信号电平

高速 CAN 和低速 CAN 总线在物理层信号电平上定义有所不同 (还有这样的区别?)。图 6 和图 7 表示高速和低速 CAN 总线上信号电平与总线逻辑的对应关系。

  • 高速 CAN,定义 CANH 和 CANL 电压相同(CANH = CANL = 2.5V)时为逻辑 “1”,CANH 和 CANL 电压相差 2V(CANH = 3.5V, CANL = 1.5V) 时为逻辑 “0”。高速 CAN 收发器在共模电压范围内(-12V ~ 12V),将 CANH 和 CANL 电压相差大于 0.9V 解释为显性状态(Dominant),而将 CANH 和 CANL 电压相差小于 0.5V 解释为为隐性状态(Recessive)。收发器内部有迟滞电路可以降低干扰。
  • 低速 CAN,定义 CANH 和 CANL 电压相差 5V (CANH = 0V, CANL = 5V)时为逻辑 “1”,相差 2.2V (CANH = 3.6V, CANL = 1.4V)时为逻辑 “0”。

在 CAN 总线上,逻辑 “0” 和 “1” 之间显著的电压差是总线可靠通信的保证。参照上面的描述,CAN 总线上两种电平状态分别为:

  • 显性(Dominant ): 0
  • 隐性(Recessive ): 1

CAN 总线的信号电平具有线与特性,即显性电平(0)总是会掩盖隐性电平(1)。如果不同节点同时发送显性和隐性电平,总线上表现出显性电平(0),只有在总线上所有节点发送的都是隐性电平(1)时,总线才表现为隐性。线与特性是 CAN 总线仲裁的电路基础。详细仲裁过程见下文 “仲裁机制” 部分。

图 6. 高速 CAN 信号电平( ISO 11898-2)

 

图 7. 低速 CAN 信号电平( ISO 11898-3)

连接器

在前文有提到,业界只规定了 9 Pin D-Sub 类型的 CAN 总线连接器,其信号定义如图 8 所示。

 

图 8. CAN 9 Pin D-Sub 引脚定义

三种 CAN 标准物理层比较

除了上文介绍的高速 CAN 和低速 CAN 外,还有标准定义另外一种 CAN 物理层结构,即 Single Wire CAN。单线 CAN 可以减少一根传输线,但是要求节点间有良好的共地特性(相当于第二根信号线)。单线 CAN 的信号抗干扰能力相对较弱,在设计中需要提高信号幅度以增加信噪比,如此又会让它自身的辐射能力增加,因此必须降低其信号传输速率以达到电磁兼容的要求。综上,单线 CAN 仅适合应用在低速的车身电子单元、舒适及娱乐控制领域。低速 CAN 总线由于信号速度不高,在一根信号线失灵的情况下,仍可工作于单线模式。

三种 CAN 总线物理层的对比如表 3 列出。总线连接拓扑图如图 9,对于端接,高速 CAN 端接是在总线两端,而低速 CAN 和单线 CAN 的端接都是在各节点位置。

 

表 3. 三种 CAN 物理层标准比较

 

图 9. 三种 CAN 总线物理层的比较

 

通信原理

Multi-Master

安全敏感的应用,比如汽车动力,对通信系统的可靠性要求很高。将总线工作正常与否归结到单一节点是极其危险的,比较合理的方案是对总线接入的去中心化,亦即每个节点都有接入总线的能力。这也是 CAN 总线采用多主控(Multi-Master)线性拓扑结构的原因。在 CAN 总线上,每个节点都有往总线上发送消息的能力,而且消息的发送不必遵从任何预先设定的时序,通信是事件驱动的。只有当有新的信息传递时,CAN 总线才处于忙的状态,这使得节点接入总线速度非常快。CAN 总线理论最高数据传输速率为 1Mbps,对于异步事件反应迅速,基本上对于毫秒级的实时应用没有任何问题。

寻址机制

不同于其它类型的总线,CAN 总线不设定节点的地址,而是通过消息的标识符(Identifier)来区别消息。CAN 总线消息是广播式的,也就是说在同一时刻所有节点都检测到同样的电平信号。接受节点通过识别消息中的标识符,与该节点预设的过滤规则对比,如果满足规则就接收这条消息,发送应答,否则就忽略这条消息,关于这部分介绍见下文 “条件接收” 部分。这种机制虽然会增加消息帧的复杂度(增加标识符),但是节点在此情况下可以无须了解其它节点的状况,而相互间独立工作,在总线上增加节点时仅须关注消息类型,而非系统上其它节点的状况。这种以消息标识符寻址的方式,让在总线上增加节点变得更加灵活。

CSMA/CD+AMP

CAN 总线通信原理可简单描述为多路载波侦听 + 基于消息优先级的冲突检测和仲裁机制(CSMA/CD+AMP),CSMA(Carrier Sense Multiple Access )指的所有节点必须都等到总线处于空闲状态时才能往总线上发送消息;CD+AMP(Collision Detection + Arbitration on Message Priority)指的是如果多个节点往总线上发送消息时,具备最高优先级(标识符最小)的消息获得总线占有权。

帧分类

CAN 总线定义四种帧类型,分别为数据帧、远程帧、错误帧和过载帧。数据帧就是总线上传输用户数据的帧,其最高有效载荷是 8 Byte,除了有效载荷外,数据帧还包括必要的帧头帧位部分以执行 CAN 标准通信,比如消息标识符(Identifier)、数据长度代码、校验信息等。远程帧是用来向总线上其它节点请求数据的帧,它的帧结构与数据帧相似,只不过没有有效载荷部分;错误帧是表示通信出错的帧。数据帧和远程帧有标准格式和扩展格式两种格式。标准格式有 11 位的标识符 , 扩展格式有 29 位标识符。

各种帧的用途分别为:

  • 数据帧:用于发送单元向接收单元传送数据的帧;
  • 远程帧:用于接收单元向具有相同标识符的发送单元请求数据的帧;
  • 错误帧:用于当检测出错误时向其它单元通知错误的帧;
  • 过载帧:用于接收单元通知其尚未做好接收准备的帧

数据帧

数据帧的帧结构如图 10 所示,图中示例标准数据帧(Standard)和扩展数据帧(Extended)两种格式。各字段定义及长度分别为:

  • SOF:表示数据帧开始;(1 bit)
  • Identifier:标准格式 11 bit,扩展格式 29 bit 包括 Base Identifier(11 bit)和 Extended Identifier(18 bit),该区段标识数据帧的优先级,数值越小,优先级越高;
  • RTR:远程传输请求位,0 时表示为数据帧,1 表示为远程帧,也就是说 RTR=1 时,消息帧的 Data Field 为空;(1 bit)
  • IDE: 标识符扩展位,0 时表示为标准格式,1 表示为扩展格式;(1 bit)
  • DLC:数据长度代码,0~8 表示数据长度为 0~8 Byte;(4 bit)
  • Data Field:数据域;(0~8 Byte)
  • CRC Sequence:校验域,校验算法 G (x) = x15 + x14 + x10 + x8 + x7 + x4 + x3 + 1;(15 bit)
  • DEL:校验域和应答域的隐性界定符;(1 bit)
  • ACK:应答,确认数据是否正常接收,所谓正常接收是指不含填充错误、格式错误、 CRC 错误。发送节点将此位为 1,接收节点正常接收数据后将此位置为 0;(1 bit)
  • SRR:替代远程请求位,在扩展格式中占位用,必须为 1;(1 bit)
  • EOF:连续 7 个隐性位(1)表示帧结束;(7 bit)
  • ITM:帧间空间,Intermission (ITM),又称 Interframe Space (IFS),连续 3 个隐性位,但它不属于数据帧。帧间空间是用于将数据帧和远程帧与前面的帧分离开来的帧。数据帧和远程帧可通过插入帧间空间将本帧与前面的任何帧(数据帧、遥控帧、错误帧、过载帧)分开。过载帧和错误帧前不能插入帧间空间。

图 10. CAN 标准格式和扩展格式的数据帧 / 远程帧格式

远程帧

一般地,数据是由发送单元主动向总线上发送的,但也存在接收单元主动向发送单元请求数据的情况。远程帧的作用就在于此,它是接收单元向发送单元请求发送数据的帧。远程帧与数据帧的帧结构类似,如上图 X 所示。远程帧与数据帧的帧结构区别有两点:

数据帧的 RTR 值为 “0”,远程帧的 RTR 值为 “1”
远程帧没有数据块
远程帧的 DLC 块表示请求发送单元发送的数据长度(Byte)。当总线上具有相同标识符的数据帧和远程帧同时发送时,由于数据帧的 RTR 位是显性的,数据帧将在仲裁中赢得总线控制权。

错误帧

用于在接收和发送消息时检测出错误时,通知错误的帧。错误帧由错误标志和错误界定符构成。错误帧的帧结构如图 11 示。

  • 错误标志:6-12 个显性 / 隐性重叠位
  • 主动错误标志(6 个显性位): 处于主动错误状态的单元检测出错误时输出的错误标志
  • 被动错误标志(6 个隐性位): 处于被动错误状态的单元检测出错误时输出的错误标志
  • 错误界定符:8 个隐性位

图 11. 错误帧的帧结构

过载帧

过载帧是用于接收单元通知发送单元它尚未完成接收准备的帧。在两种情况下,节点会发送过载帧:

接收单元条件的制约,要求发送节点延缓下一个数据帧或远程帧的传输;
帧间空间(Intermission)的 3 bit 内检测到显性位
每个节点最多连续发送两条过载帧。过载帧由过载标志和过载界定符(8 个隐性位)构成。数据帧的帧结构如图 12 所示。

 

图 12. 过载帧的帧结构

仲裁机制

如果多个节点同时往总线上发送消息,总线的使用权是通过消息帧标识符的逐位仲裁机制决定的,在仲裁过程中消息是不会丢失的。这里的不会丢失的意思是指仲裁完成后,获得总线控制权的消息内容没有被仲裁过程篡改,将继续在总线上发送没有传输完的消息。
在 CAN 总线上,标识符值越小,消息的优先级越高。标识符全零的消息,由于它将总线电平保持在显性的时间最长,因此优先级最高。CAN 总线的仲裁机制如图 13 所示,几点说明:

  • Wire-AND Bus Logic:只有节点发送的全是隐性,总线电平才表现为隐性;
  • Arbitration Logic:所有发送节点在发送数据的同时,也检测总线上的电平状态。如果总线电平状态与它发送的电平状态一致,则继续发送(Next);如果发送为显性,总线电平状态为隐性,则传输出现故障(Fault);如果发送为隐性,总线电平状态为显性,则该节点退出对总线占用权的竞争(Stop);

仲裁机制:节点 A 和节点 C 同时向总线上发送数据,在仲裁阶段,逐位对比总线上电平与自身发送的电平,在标识符的第四位(ID7),节点 C 检测到总线上电平与其自身发送电平不一致,它自动退出对总线的竞争,节点 A 则继续发送数据

图 13. CAN 总线仲裁机制

如上介绍,CAN 总线上的逐位仲裁机制与 I2C 总线的仲裁都应用到线与逻辑的电路基础,不同的是 I2C 的仲裁只是在主机间进行,而 CAN 总线没有主从机的概念。另外 I2C 的消息本身是不分优先级的;CAN 消息则是带优先级,有的消息出身高贵(标识符值越小),在仲裁中总会取胜。

为消息划分优先级比较适合于实时控制系统,这样可以确保重要的信息优先发送,相对次要的消息延迟发送,系统设计师应该根据应用的特点为不同消息确定不同的优先级(标识符),在类似 DeviceNet 这些规范组织的定义中,对于同样类型的消息,比如温度传感器,即使它们可能来自不同的供应商,但消息标识符是一致的。

对于车身控制 CAN 网络(舒适 + 信息娱乐),其特点是消息标识符种类多,而且消息发送没有固定频率或规律,在此类应用的 CAN 控制器,例如 Freescale 的 MSCAN(Motorola Scalable Controller Area Network)的设计中,控制器内部包括 FIFO 寄存器,它将具有相同标识符的消息按顺序保存,从而避免接收缓冲器溢出。而对于动力系统控制的 CAN 网络,总线上的消息特点是速度快,但是存在一定规律,此类应用的 CAN 控制器,例如 Freescale 的 FlexCAN(CAN 2.0B-Compliant),它包括 16 ~ 64 个称为 “mailbox” 的接收缓冲器,运行时根据特定的过滤规则,将不同标识符的消息送到各自对应的 mailbox 。

条件接收

前面有提到消息在 CAN 总线上是广播式的,但并不是所有节点都会对总线上所有消息感兴趣。节点通过控制器中过滤码(Filter Code )和掩码(Mask Code),再检验总线上消息的标识符,来判断是否接收该消息(Message Filtering)。

对于掩码,“1” 表示该位与本节点相关,“0” 表示该位与本节点不相关。举例如下:

例 1:仅接收消息标识符为 00001567(十六进制)的帧

  • 设置过滤码为 00001567
  • 设置掩码为 1FFFFFFF

节点检测消息的标识符的所有位(29 位),如果标识符为 00001567 接收,否则舍弃。

例 2:接收消息标识符为 00001567 到 0000156F 的帧

  • 设置过滤码为 00001560
  • 设置掩码为 1FFFFFF0

节点检测消息的标识符的高 25 位,最低的 4 位则不 care。如果标识符最高 25 位相同则接收,否则舍弃。

例 3:接收消息标识符为 00001560 到 00001567 的帧

  • 设置过滤码为 00001560
  • 设置掩码为 1FFFFFF8

节点检测消息的标识符的高 26 位,最低的 3 位则不 care。如果标识符最高 26 位相同则接收,否则舍弃。

例 4:接收所有消息帧帧

  • 设置过滤码为 0
  • 设置掩码为 0

节点接收总线上所有消息。

 

应答机制

应答位(ACK)用来表示节点已经收到有效的帧任何节点如果准确无误地接收到帧,则要向总线上发送显性位,该显性位将掩盖发送节点输出的隐性位,使总线上表现为显性。如果发送节点检测应答位为隐性,那么说明没有节点收到有效帧。接收节点可能在应答位输出隐性表示它没有收到有效帧,但另外有收到有效帧的节点也可能输出显性表示它收到有效帧,这样总线上总体上表现为显性,发送节点也无从得知是否总线上所有节点都收到有效的帧。

 

位填充

CAN 总线使用到的是非归零编码(NRZ),NRZ 编码的优点是效率高但却不易区分哪里是 bit 开始,哪里是 bit 结束。因此为确保在同步通信过程中有足够的电平跳变,规范中应用到位填充机制,即在每连续 5 个相同电平后插入 1 个反相电平,接收节点在收到消息后自动将填充位删除。在帧内除了 CRC 界定符、ACK 域和 EOF 外,其余部分均应用到位填充机制。在应用到位填充的域,检测到连续 6 个显性位或隐性位均视为报错。检测到错误后,节点将发出主动错误标志。注意如前文述,主动错误标志为连续 6 个显性位,它是不符合位填充规则的,因此检测到该电平的所有节点都会报错。
位填充意味着实际传输的数据帧长度可能更长,图 14 示例位填充前后的数据帧的变化,紫色位是位填充增加的位,接收节点收到消息后会自动删除这些位。

 

图 14. 数据帧在位填充前后的比较

错误检验

完善的错误校验机制是 CAN 总线高可靠性的有效保证。CAN 总线包括 5 种错误校验机制,其中 3 种在消息层面(Message Level)2 种在比特层面(Bit Level) 。如果消息出现五种错误中的任何一种,接收节点将不接收消息,并且产生错误帧通知发送节点重新发送消息,直到接收节点正确地收到消息。如果失效的节点持续不断地报错,导致总线挂死,那么在报错次数达到设定的上限时,它将被控制器从总线上移除(详见 “故障限制” 部分)。
消息层面的错误校验机制体现在数据帧(图 10)中的 CRC 校验域和 ACK 域。CRC 校验域包括传输数据的 15 bit Checksum 值和 1 bit 界定符。ACK 域包括 1 bit ACK 位和 1 bit 界定符。消息层面的校验还包括格式错误校验,格式错误校验会检查消息帧中必须为隐性的位,如果这些位表现为显性,那么节点将报格式错误。格式错误检查的隐性位包括 SOF、EOF、ACK 界定符和 CRC 界定符。
在比特层面,发送节点在发送消息的同时会检测总线电平,如果检测到总线的状态和它发送的状态不符,则发送节点将报错。该过程的两处例外是消息帧处于标识符仲裁阶段和消息应答阶段。
最后一种错误校验机制源于 CAN 总线的位填充机制。除了错误标志和 EOF,如果节点检测到连续 6 个相同电平,它即报填充错误。主动错误标志包括连续 6 个显性位,总线上所有检测到主动错误标志的节点都会报错,而产生各自的错误帧,这意味着总线上的错误帧可能由原先的 6 bit 到反馈叠加至 12 bit 不等。错误帧后面紧接着 8 个隐性位界定符(如图 10)。在总线空闲时,消息通过竞争仲裁获得总线占用权后将重新传送。

综上,CAN 总线的错误类型包括以下五种:

  • CRC 错误(CRC Error)

在发送消息时,发送节点会根据特定的多项式计算出由数据帧 SOF 位到数据域最末位的 Checksum 值,并将该值放在数据帧的 CRC 域,随着数据帧广播到总线上。接收节点在收到数据后,应用同样的多项式计算 Checksum 值,并与收到的 Checksum 值对比。如果两者一致,正常接收;如果不一致,则舍弃该消息,并发送错误帧请求发送节点重传消息。CRC 校验过程如图 15 所示。

CAN 2.0 规范定义 CRC 校验应用的多项式为:

 

图 15. CRC 校验机制

  • 应答错误(ACK Error)

发送单元在 ACK 位中检测到隐性电平时所检测到的错误(ACK 没被传送过来时所检测到的错误)。

  • 格式错误(Form Error)

检测出与固定格式的位段相反的格式时所检测到的错误。

  • 位错误(Bit Error)

比较输出电平和总线电平(不含填充位),当两电平不一样时所检测到的错误。

  • 填充错误(Stuff Error)

在需要位填充的段内,连续检测到 6 位相同的电平时所检测到的错误。

故障限制

CAN 总线上的每个节点控制器都会检测消息是否出错,如果节点发现消息出错,它将发送错误标志,从而打断总线上正常的数据传输。总线上其它没有发现原始消息错误的节点,在收到错误标志后将采取必要的措施,比如舍弃当前总线上的消息。CAN 节点内部有两种错误状态计数器 TEC 和 REC 。节点通过特定的规则管理这两个计数器的值,其中:

  • TEC /Transmit Error Counter,发送错误状态计数器,出现一次错误该计数器值 +8;
  • REC /Receive Error Counter,接收错误状态计数器,出现一次错误该计数器值 +1;
  • 消息成功发送或接收一次,对应的 TEC 或 REC 值相应 -1

TEC 增加的速度快于 REC 增加的速度,这是因为有很大概率地是发送节点,而不是接受节点出错!基于 TEC 和 REC 数值的变化,CAN 规范定义了节点的 3 种基本错误状态:

  • Error Active:正常状态,在此状态下,节点可以发送所有类型的帧,包括错误帧;
  • Error Passive:节点可以发送除错误帧以外的所有帧;
  • Bus Off:节点被控制器从总线上隔离

节点的三种错误状态切换关系如图 16 所示。

 

图 16. CAN 总线节点错误状态切换图

波形举例

图 17 示例 CAN 通信过程信号波形。

  • 在 1 时刻,节点 A 向总线上发送消息;
  • 在 2 时刻,节点 B 和 C 收到消息,发送响应应答;
  • 在 3 时刻,节点 B 和 C 同时向总线上发送消息,竞争仲裁后节点 C 获得总线占用权,
  • 在 4 时刻继续发送未传输完毕的数据;
  • 节点 A 和 B 在 5 时刻响应 C 发送的消息;
  • 在总线空闲的 6 时刻,B 发送消息到总线上;
  • 在 7 时刻节点 A 和 B 响应节点 B 发送的消息;
  •  8 时刻,节点 A 向空闲总线上发送消息。

 

图 17. CAN 通信过程举例

 编后记

一直以来,对 CAN 总线的认识仅限于收发器、电平端接以及高低速的区分。作为 “业内人士”,对汽车电子行业内最为基础的通信协议却不甚了了,颇有些 “平生不识陈近南” 的遗憾,因此很早军规就萌生撰写一篇 CAN 总线文章的念头。然而手头资料太多,不知从何下手,终于好不容易鼓起勇气,在印象笔记内敲下 “CAN 总线协议” 的标题,也是整整一年前的事了(2016/05/31)。

拖延症如此严重,\Database\Portocol\CAN 文件夹中囤积的资料越来越多。军规悲观地发现,这些文档虽然保存在本地,但 99% 以上的文档,既然在下载的时候都没有认真地阅读和消化,又如何指望在未来的某一天与它再次重逢?

于是,自上月末起,军规每日下班后抽出 1-2 小时,如此持续将近两周,将先前搜集有关 CAN 总线的资料罗列、拼凑到这个地方,试图将该命题下所有的知识点收服在自己的知识框架下。每写完一个知识点,就删掉本地几篇讲解同样内容的文档。如同妖怪吸干人体之精华,吐掉无用的躯壳,大呼过瘾!

当然,本文还是很原始的版本,其中不免有许多错误,而且还有不少知识点,比如同步、加密等,都没有涉及到。鉴于此,军规会在后续不断地修正和完善它。(2017/05/06)

参考资料

CAN Bus -Wikipedia
CAN 入门书 -Renesas

Learning Module CAN -Vector

CAN -CANAUTO

Can Bus Id Filter And Mask -De Montfort University

Data Communication in the Automobile: CAN -Vector

CAN Protocol Tutorial -Kvaser

SSP269: Data Transfer on CAN Data Bus II -VW

Introduction to the Controller Area Network -TI

利用C8051F系列单片机实现CAN总线隔离器的设计方案

阅读(7)

1 、引言

CAN(Controller Area Network),即控制器局域网,是应用最广泛的现场总线之一,CAN总线以其实时性强,可靠性高,结构简单,互操作性好,价格低廉等优点,可应用于高速网络和低成本的线路网络。这里提出一种CAN总线隔离器的通讯系统,将其应用于某飞行器到地面的通讯网络,实现飞行器和地面的速度隔离,从而使飞行器和地面之间能够稳定实时通信。该系统设计在分析CAN总线2.0B协议的基础上,采用结构化方法独立设计飞行器和地面双方的通信协议。底层模块的硬件设计是以C8051F040高速型单片机为核心,其内部集成CAN协议控制器,因而只需增加CAN收发器就可实现CAN智能节点设计,比传统的由单片机与CAN 协议控制器共同组成的CAN节点更简单,可靠,易操作。而CAN总线应用层协议由用户自行定义编写,使其更符合该系统设计要求。目前整个系统运行良好,性能稳定,通信冗余度好,符合工业现场使用要求。

2 、基于C8051F040的CAN智能节点设计

图1是基于C8051F040的CAN总线硬件接口原理电路图。通过C8051F040内部所集成的CAN控制器,为了增强系统的抗十扰能力,在CAN控制器与TJA1040之间接入光电耦合器6N137,从而实现TJA1040与外界CAN通信。事实上,集成收发器TJA1040本身具有瞬间抗干扰能力,可保护总线,降低射频干扰,以实现热保护功能。因此,在干扰不严重的廊用场合,无需增加光电隔离,使得系统达到最大通信速率或距离。如果使用光电隔离器,应尽量选用高速光电隔离器,以减少CAN总线有效回路信号传输的延时时间。由于CAN隔离器需通过CAN总线采集输入输出模块的数据信息,干扰较大,为了系统的稳定可靠性,需加光电隔离器。通过CAN2.0B兼容CAN2.0A协议的连接通讯测试,光电耦合器6N137上升时间为30 ns(典型值),隔离电压为3 000 V,其支持最大频率值超过30 MHz。

利用C8051F系列单片机实现CAN总线隔离器的设计方案

为实现系统的稳定可靠性,该系统设计采用冗余设计,利用双通道光耦HCPL2631隔离并产生控制信号,控制两个单刀双掷开关MAX4635,从而实现CAN智能节点的切换。

3 、CAN总线隔离器设计

该系统设计的CAN总线隔离主要由发送和接收两部分组成。发送和接收部分都由数据指令配置、数据处理和数据传输3个单元组成,如图2所示。其中发送部分:上位机指令配置完后,通过FPGA传输给单片机,单片机利用自身所带的CAN总线,经隔离处理后到达总线驱动器,然后通过CAN总线输出数据。而接收部分正好相反。该系统设计将飞行器速度设置为500 kHz,地面速度设置为50 km/s,从而更好模拟飞行器和地面的通信。

4 、隔离器收发双方通信协议

总线隔离器分为飞行器高速接口和地面低速接口两部分,要求隔离器能通过所有地面上行到飞行器的数据。本系统CAN总线采用主从方式,所有总线数据统一采用数据帧,不用远程帧,数据长度最大为8字节,最小为0字节。根据数据链路层协议,仲裁场标准标识符共11位(ID1O“ID0),系统通过标识符确定数据传输的优先级。本协议规定,ID除表示优先级外,还是数据接收目的节点、数据发送源节点与数据类型。具体说明11位ID:ID(ID的0~3位)为数据接收目的节点;ID(ID的4”7位)为数据发送的源节点;ID(ID的8“10位)为数据类型。

本协议中,飞行器系统和地面系统都有3个节点,节点编号和ID号如表1所示。

利用C8051F系列单片机实现CAN总线隔离器的设计方案

5、 CAN隔离器的软件设计

5.1 CAN总线初始化

CAN总线初始化包括:I/O的配置、外部晶体振荡器的配置、CAN总线的开闭、发送和接收初始化。初始化程序如下:

void initial_can(unsigned char MsgNum,unsignedl int id)

{SFRPAGE=CONFIG_PAGE;

利用C8051F系列单片机实现CAN总线隔离器的设计方案

利用C8051F系列单片机实现CAN总线隔离器的设计方案

5.2 发送和接收程序

CAN报文发送是由CAN控制器自动完成,用户只需根据接收到的数据帧的识别符,将对应的数据转移到发送缓冲寄存器,然后将此报文对象的编码写入命令请求寄存器启动发送即可,而发送由硬件完成。这里使用定时更新发送报文对象中的数据,发送数据由控制器自动完成,当收到一个数据帧时,可将具有相同识别符的数据帧发送出去。其发送程序代码如下:

利用C8051F系列单片机实现CAN总线隔离器的设计方案

CAN报文的接收与发送相同,由CAN控制器自动完成,接收程序只需从接收缓存器中读取所接收的数据,再进行相应处理。其方法与发送程序基本一致,这里不再赘述。

6 、关键技术设计分析

6.1 冗余设计

工业控制现场状况复杂,因外力所致的电缆接触故障率远远高于节点的故障率,一旦电缆发生故障,总线就会失去通信能力,并导致系统瘫痪,对工控系统的健壮性构成威胁。解决这一故障最简单、有效的办法是对故障率较高的物理介质进行冗余设计。即使用2条总线电缆、2个CAN总线收发器,但只用1个总线控制器。仲裁电路自动监测总线状态,并自适应选择正常的电缆完成通信任务。发生电缆故障时,设备自动报警,提醒工作人员进行检修。检修过程中,设备使用备用电缆继续工作。电缆冗余设计可实现与通常的CAN总线通讯系统代码级兼容。仲裁电路设置于总线控制器与2个总线收发器之间,监测CAN总线电缆状态,实现自适应切换和报警。设备向其他节点发送报文时,总线控制器向2条总线同时发送相同的报文;而接收报文时,仲裁电路在无电缆故障时,一直使用总线1(主总线)进行报文接收。如果总线2(从总线)出现故障,故障监测电路就向主控计算机发出中断信号报故障,同时处于正常状态的总线1仍承担正常通讯任务;如果总线1出现故障,故障监测电路在向主控计算机发出中断信号的同时,自动切换成总线2,以保证设备正常工作。总线切换动作只会出现在正在使用的电缆发生故障时,这样可提高通讯的稳定性,降低应答失败的几率。

6.2 接收数据时ID不滤波的实现

在CAN总线的接收过程中,一般实现的都是发送ID和接收ID相匹配的方式,也就是说在接收方要进行接收,而ID滤波,而本设计实现任意接收方式,只要有数据就开始接收不进行ID号的滤波,这样可更好进行测试,例如某个设备所携带的ID号,由于各种原因与接收方所接收的ID不匹配,这样就可判断出所发设备可能收到干扰,或者所发设备自身出现了问题。这种ID号不过滤的方法主要通过对接收设备的命令请求寄存器、消息掩码寄存器、仲裁寄存器、消息控制寄存器和命令掩码寄存器的设置来实现。其实现程序如下:

利用C8051F系列单片机实现CAN总线隔离器的设计方案

7 、结论

本文提出一种CAN总线隔离器的实现方案。利用具有CAN总线控制器的C8051F系列单片机实现了CAN智能节点,增加CAN节点的冗余设计,提高通讯的稳定性,降低应答失败的几率;实现不滤波的CAN数据接收,可更好测试系统的可靠性和监测功能,当接收到不是已知设备发来的消息时,能够准确定位设备故障的位置。此方案实现的CAN总线隔离器已成功应用于某型号飞行器的地面测试台中,经测试和调试后,系统工作稳定,达到设计要求。并且由于采用内嵌的CAN 总线控制器,可为以后的系统升级预留大量空间。

从以下几个方面入手学好c8051f340单片机

阅读(1)

要学好c8051f340单片机,您可以从以下几个方面入手:

  1. 学习单片机的基础知识,包括单片机的结构、指令集、寄存器等。
  2. 学习单片机的编程语言,比如C语言或者汇编语言。
  3. 熟悉单片机的开发工具,比如Keil C51等。
  4. 实践编写一些简单的单片机程序,比如LED闪烁、按键控制等。
  5. 学习单片机的外设接口,比如ADC、DAC、串口等。
  6. 参加相关的培训课程或者参考相关的教材和文档。

通过以上的学习和实践,您可以逐步掌握c8051f340单片机的编程和应用技能,从而学好这门技术。

CAN总线详解

阅读(4)

1、简介

CAN是控制器局域网络(Controller Area Network, CAN)的简称,是一种能够实现分布式实时控制的串行通信网络。

优点:

传输速度最高到1Mbps,通信距离最远到10km,无损位仲裁机制,多主结构。近些年来,CAN控制器价格越来越低。

Ø 低成本:ECUs通过单个CAN接口进行通信,布线成本低。

Ø 高集成:CAN总线系统允许在所有ECUs上进行集中错误诊断和配置。

Ø 可靠性:该系统对子系统的故障和电磁干扰具有很强的鲁棒性,是汽车控制系统的理想选择。

Ø 高效率:可以通过id对消息进行优先级排序,以便最高优先级的id不被中断。

Ø 灵活性:每个ECU包含一个用于CAN总线收发芯片,随意添加CAN总线节点。

2、CAN总线网络

CAN总线网络主要挂在CAN_H和CAN_L,各个节点通过这两条线实现信号的串行差分传输,为了避免信号的反射和干扰,还需要在CAN_H和CAN_L之间接上120欧姆的终端电阻。为什么是120Ω,因为电缆的特性阻抗为120Ω,为了模拟无限远的传输线。

3、CAN收发器

CAN收发器的作用是负责逻辑电平和信号电平之间的转换。

即从CAN控制芯片输出逻辑电平到CAN收发器,然后经过CAN收发器内部转换将逻辑电平转换为差分信号输出到CAN总线上,CAN总线上的节点都可以决定自己是否需要总线上的数据。具体的引脚定义如下:

4、CAN信号表示

CAN总线采用不归零码位填充技术,也就是说CAN总线上的信号有两种不同的信号状态,分别是显性的(Dominant)逻辑0和隐形的(recessive)逻辑1,信号每一次传输完后不需要返回到逻辑0(显性)的电平。

显性与隐性电平的解释:

CAN的数据总线有两条,一条是黄色的CAN_High,一条是绿色的CAN_Low。当没有数据发送时,两条线的电平一样都为2.5V,称为静电平,也就是隐性电平。当有信号发送时,CAN_High的电平升高1V,即3.5V,CAN_Low的电平降低1V,即1.5V。

按照定义的:

CAN_H-CAN_L < 0.5V 时候为隐性的,逻辑信号表现为’逻辑1′- 高电平。

CAN_H-CAN_L > 0.9V 时候为显性的,逻辑信号表现为’逻辑0′- 低电平。

5、CAN信号传输

发送过程: CAN控制器将CPU传来的信号转换为逻辑电平(即逻辑0-显性电平或者逻辑1-隐性电平)。CAN发射器接收逻辑电平之后,再将其转换为差分电平输出到CAN总线上。

接收过程: CAN接收器将CAN_H 和 CAN_L 线上传来的差分电平转换为逻辑电平输出到CAN控制器,CAN控制器再把该逻辑电平转化为相应的信号发送到CPU上。

5、CAN数据传输

CAN总线传输的是CAN帧,CAN的通信帧分成五种,分别为数据帧、远程帧、错误帧、过载帧和帧间隔。

数据帧根据仲裁段长度不同分为标准帧(2.0A)和扩展帧(2.0B)

帧起始

由一个显性位(低电平)组成,发送节点发送帧起始,其他节点同步于帧起始;

帧结束

由7个隐形位(高电平)组成。

仲裁段

只要总线空闲,总线上任何节点都可以发送报文,如果有两个或两个以上的节点开始传送报文,那么就会存在总线访问冲突的可能。但是CAN使用了标识符的逐位仲裁方法可以解决这个问题。

CAN总线控制器在发送数据的同时监控总线电平,如果电平不同,则停止发送并做其他处理。如果该位位于仲裁段,则退出总线竞争;如果位于其他段,则产生错误事件。

帧ID越小,优先级越高。由于数据帧的RTR位为显性电平,远程帧为隐性电平,所以帧格式和帧ID相同的情况下,数据帧优先于远程帧;由于标准帧的IDE位为显性电平,扩展帧的IDE位为隐形电平,对于前11位ID相同的标准帧和扩展帧,标准帧优先级比扩展帧高。

数据段

一个数据帧传输的数据量为0~8个字节,这种短帧结构使得CAN-bus实时性很高,非常适合汽车和工控应用场合如下图所示。

数据量小,发送和接收时间短,实时性高,被干扰的概率小,抗干扰能力强。

通达信函数手册及用法详解

阅读(24)

一 、行情函数
HIGH 最高价
返回该周期最高价。
用法: HIGH
H 最高价
返回该周期最高价。
用法: H
LOW 最低价
返回该周期最低价。
用法: LOW
L 最低价
返回该周期最低价。
用法: L
CLOSE 收盘价
返回该周期收盘价。
用法: CLOSE
C 收盘价
返回该周期收盘价。
用法: C
VOL 成交量
返回该周期成交量。
用法: VOL
V 成交量
返回该周期成交量。
用法: V
OPEN 开盘价
返回该周期开盘价。
用法: OPEN
O: 开盘价
返回该周期开盘价。
用法: O
ADVANCE 上涨家数
返回该周期上涨家数。
用法: ADVANCE (本函数仅对大盘有效)
DECLINE 下跌家数
返回该周期下跌家数。
用法: DECLINE (本函数仅对大盘有效)
AMOUNT 成交额
返回该周期成交额。
用法: AMOUNT
ASKPRICE 委卖价
返回委卖1–委卖3价格。
用法: ASKPRICE(N) N取1—3。
(本函数仅个股在分笔成交分析周期有效)
ASKVOL 委卖量
返回委卖1–委卖3量。
用法: ASKVOL(N) N取1—3。
(本函数仅个股在分笔成交分析周期有效)
BIDPRICE 委买价
返回委买1–委买3价格。
用法: BIDPRICE(N) N取1—3。
(本函数仅个股在分笔成交分析周期有效)
BIDVOL 委买量
返回委买1–委买3量。
用法: BIDVOL(N) N取1—3。
(本函数仅个股在分笔成交分析周期有效)
BUYVOL 主动性买盘
返回主动性买单量。
用法: BUYVOL 当本笔成交为主动性买盘时,其数值等于成交量,否则为0。
(本函数仅个股在分笔成交分析周期有效)
SELLVOL 主动性卖盘
返回主动性卖单量。
用法: SELLVOL 当本笔成交为主动性卖盘时,其数值等于成交量,否则为0。
(本函数仅个股在分笔成交分析周期有效)
ISBUYORDER 主动性买单
返回该成交是否为主动性买单。
用法: ISBUYORDER 当本笔成交为主动性买盘时,返回1,否则为0。
(本函数仅个股在分笔成交分析周期有效)
ISSELLORDER 主动性卖单
返回该成交是否为主动性卖单。
用法:ISSELLORDER 当本笔成交为主动性卖盘时,返回1,否则为0。
(本函数仅个股在分笔成交分析周期有效)

 

 

二 、时间函数
DATE 日期
取得该周期从1900以来的年月日。
用法: DATE 例如函数返回1000101,表示2000年1月1日。
TIME 时间
取得该周期的时分秒。
用法: TIME 函数返回有效值范围为(000000-235959)。
YEAR 年份
取得该周期的年份。
用法:YEAR
MONTH 月份
取得该周期的月份。
用法:MONTH 函数返回有效值范围为(1-12)。
WEEK 星期
取得该周期的星期数。
用法: WEEK 函数返回有效值范围为(0-6),0表示星期天。
DAY 日期
取得该周期的日期。
用法: DAY 函数返回有效值范围为(1-31)。
HOUR 小时
取得该周期的小时数。
用法:HOUR 函数返回有效值范围为(0-23),对于日线及更长的分析周期值为0。
MINUTE 分钟
取得该周期的分钟数。
用法:MINUTE 函数返回有效值范围为(0-59),对于日线及更长的分析周期值为0。
FROMOPEN 分钟
求当前时刻距开盘有多长时间。
用法: FROMOPEN 返回当前时刻距开盘有多长时间,单位为分钟。
例如:  FROMOPEN 当前时刻为早上十点,则返回31。

 

 

三 、引用函数
DRAWNULL 无效数
返回无效数。
用法: DRAWNULL
例如: IF(CLOSE>REF(CLOSE,1),CLOSE,DRAWNULL) 表示下跌时分析图上不画线。
BACKSET 向前赋值
将当前位置到若干周期前的数据设为1。
用法: BACKSET(X,N) 若X非0,则将当前位置到N周期前的数值设为1。
例如: BACKSET(CLOSE>OPEN,2) 若收阳则将该周期及前一周期数值设为1,否则为0。
BARSCOUNT 有效数据周期数
求总的周期数。
用法: BARSCOUNT(X) 第一个有效数据到当前的天数。
例如: BARSCOUNT(CLOSE) 对于日线数据取得上市以来总交易日数,对于分笔成交取得当日成交笔数,对于1分钟线取得当日交易分钟数。
BARSLAST 上一次条件成立位置
上一次条件成立到当前的周期数。
用法: BARSLAST(X) 上一次X不为0到现在的天数。
例如: BARSLAST(CLOSE/REF(CLOSE,1)>=1.1) 表示上一个涨停板到当前的周期数。
BARSSINCE 第一个条件成立位置
第一个条件成立到当前的周期数。
用法: BARSSINCE(X) 第一次X不为0到现在的天数。
例如: BARSSINCE(HIGH>10) 表示股价超过10元时到当前的周期数。
COUNT 统计
统计满足条件的周期数。
用法: COUNT(X,N) 统计N周期中满足X条件的周期数,若N=0则从第一个有效值开始。
例如: COUNT(CLOSE>OPEN,20) 表示统计20周期内收阳的周期数。
DMA 动态移动平均
求动态移动平均。
用法: DMA(X,A) 求X的动态移动平均。
算法: 若Y=DMA(X,A)则Y=A*X+(1-A)*Y’,其中Y’表示上一周期Y值,A必须小于1。
例如: DMA(CLOSE,VOL/CAPITAL) 表示求以换手率作平滑因子的平均价。
HHV 最高值
求最高值。
用法: HHV(X,N) 求N周期内X最高值,N=0则从第一个有效值开始。
例如: HHV(HIGH,30) 表示求30日最高价。
HHVBARS 上一高点位置
求上一高点到当前的周期数。
用法: HHVBARS(X,N) 求N周期内X最高值到当前周期数,N=0表示从第一个有效值开始统计。
例如: HHVBARS(HIGH,0) 求得历史新高到到当前的周期数。
LLV 最低值
求最低值。
用法: LLV(X,N) 求N周期内X最低值,N=0则从第一个有效值开始。
例如: LLV(LOW,0) 表示求历史最低价。
LLVBARS 上一低点位置
求上一低点到当前的周期数。
用法: LLVBARS(X,N) 求N周期内X最低值到当前周期数,N=0表示从第一个有效值开始统计。
例如: LLVBARS(HIGH,20) 求得20日最低点到当前的周期数。
REVERSE 求相反数
求相反数。
用法: REVERSE(X) 返回-X。
例如: REVERSE(CLOSE) 返回-CLOSE。
REF 向前引用
引用若干周期前的数据。
用法: REF(X,A) 引用A周期前的X值。
例如: REF(CLOSE,1) 表示上一周期的收盘价,在日线上就是昨收。
REFDATE 指定引用
引用指定日期的数据。
用法: REFDATE(X,A) 引用A日期的X值。
例如: REF(CLOSE,20011208) 表示2001年12月08日的收盘价。
SUM 总和
求总和。
用法: SUM(X,N) 统计N周期中X的总和,N=0则从第一个有效值开始。
例如: SUM(VOL,0) 表示统计从上市第一天以来的成交量总和。
FILTER 过滤
过滤连续出现的信号。
用法: FILTER(X,N) X满足条件后,删除其后N周期内的数据置为0。
例如: FILTER(CLOSE>OPEN,5) 查找阳线,5天内再次出现的阳线不被记录在内。
SUMBARS 累加到指定值的周期数
向前累加到指定值到现在的周期数。
用法: SUMBARS(X,A) 将X向前累加直到大于等于A,返回这个区间的周期数。
例如: SUMBARS(VOL,CAPITAL) 求完全换手到现在的周期数。
SMA 累积平均
返回累积平均。
用法: SMA(X,N,M) X的M日累积平均,M为权重,如Y=(X*M+Y’*(N-M))/N
MA 简单移动平均
返回简单移动平均。
用法: MA(X,M) X的M日简单移动平均。
EMA 异同移动平均
返回异同移动平均。
用法: EMA(X,M) X的M日异同移动平均。
MEMA 平滑移动平均
返回平滑移动平均
用法: MEMA(X,M) X的M日平滑移动平均。
EXPMA 加权移动平均
返回加权移动平均。
用法: EXPMA(X,M) X的M日加权移动平均。
EXPMEMA 加权平滑平均
返回加权平滑平均。
用法: EXPMEMA(X,M) X的M日加权平滑平均。
RANGE 介于某个范围之间
用法: RANGE(A,B,C) A在B和C。
例如: RANGE(A,B,C)表示A大于B同时小于C时返回1,否则返回0。
CONST 取值设为常数
用法:  CONST(A) 取A最后的值为常量.
例如: CONST(INDEXC)表示取大盘现价。

 

四 、逻辑函数
CROSS 上穿
两条线交叉。
用法: CROSS(A,B) 表示当A从下方向上穿过B时返回1,否则返回0。
例如: CROSS(MA(CLOSE,5),MA(CLOSE,10)) 表示5日均线与10日均线交金叉。
LONGCROSS 维持一定周期后上穿
两条线维持一定周期后交叉。
用法: LONGCROSS(A,B,N) 表示A在N周期内都小于B,本周期从下方向上穿过B时返回1,否则返回0。
UPNDAY 连涨
返回是否连涨周期数。
用法: UPNDAY(CLOSE,M) 表示连涨M个周期。
DOWNNDAY 连跌
返回是否连跌周期。
用法: DOWNNDAY(CLOSE,M) 表示连跌M个周期。
NDAY 连大
返回是否持续存在X>Y。
用法: NDAY(CLOSE,OPEN,3) 表示连续3日收阳线。
EXIST 存在
是否存在。
用法: EXIST(CLOSE>OPEN,10) 表示前10日内存在着阳线。
EVERY 一直存在
一直存在。
用法: EVERY(CLOSE>OPEN,10) 表示前10日内一直阳线。
LAST 持续存在
用法: LAST(X,A,B)A>B,表示从前A日到前B日一直满足X条件。若A为0,表示从第一天开始,B为0,表示到最后日止。
例如: LAST(CLOSE>OPEN,10,5) 表示从前10日到前5日内一直阳线。

 

 

五 、算术函数
NOT 取反
求逻辑非。
用法: NOT(X) 返回非X,即当X=0时返回1,否则返回0。
例如: NOT(ISUP) 表示平盘或收阴。
IF 逻辑判断
根据条件求不同的值。
用法: IF(X,A,B) 若X不为0则返回A,否则返回B。
例如: IF(CLOSE>OPEN,HIGH,LOW)表示该周期收阳则返回最高值,否则返回最低值。
IFF 逻辑判断
根据条件求不同的值。
用法: IFF(X,A,B) 若X不为0则返回A,否则返回B。
例如: IFF(CLOSE>OPEN,HIGH,LOW) 表示该周期收阳则返回最高值,否则返回最低值。
IFN 逻辑判断
根据条件求不同的值。
用法: IFN(X,A,B) 若X不为0则返回B,否则返回A。
例如: IFN(CLOSE>OPEN,HIGH,LOW) 表示该周期收阴则返回最高值,否则返回最低值。
MAX 较大值
求最大值。
用法: MAX(A,B) 返回A和B中的较大值。
例如: MAX(CLOSE-OPEN,0) 表示若收盘价大于开盘价返回它们的差值,否则返回0。
MIN 较小值
求最小值。
用法: MIN(A,B) 返回A和B中的较小值。
例如: MIN(CLOSE,OPEN) 返回开盘价和收盘价中的较小值。

 

 

六 、数学函数
ACOS 反余弦
反余弦值。
用法: ACOS(X) 返回X的反余弦值。
ASIN 反正弦
反正弦值。
用法: ASIN(X) 返回X的反正弦值。
ATAN 反正切
反正切值。
用法: ATAN(X) 返回X的反正切值。
COS 余弦
余弦值。
用法: COS(X) 返回X的余弦值。
SIN 正弦
正弦值。
用法: SIN(X) 返回X的正弦值。
TAN 正切
正切值。
用法: TAN(X) 返回X的正切值。
EXP 指数
指数。
用法: EXP(X) e的X次幂。
例如: EXP(CLOSE) 返回e的CLOSE次幂。
LN 自然对数
求自然对数。
用法: LN(X) 以e为底的对数。
例如: LN(CLOSE) 求收盘价的对数。
LOG 对数
求10为底的对数。
用法: LOG(X) 取得X的对数。
例如: LOG(100) 等于2。
SQRT 开方
开平方。
用法: SQRT(X)  求X的平方根。
例如: SQRT(CLOSE) 收盘价的平方根。
ABS 绝对值
求绝对值。
用法: ABS(X) 返回X的绝对值。
例如: ABS(-34) 返回34。
POW 乘幂
乘幂。
用法: POW(A,B) 返回A的B次幂。
例如: POW(CLOSE,3) 求得收盘价的3次方。
CEILING 向上舍入
向上舍入。
用法: CEILING(A) 返回沿A数值增大方向最接近的整数。
例如: CEILING(12.3) 求得13,CEILING(-3.5)求得-3。
FLOOR 向下舍入
向下舍入。
用法: FLOOR(A) 返回沿A数值减小方向最接近的整数。
例如: FLOOR(12.3) 求得12,FLOOR(-3.5)求得-4。
INTPART 取整
用法: INTPART(A) 返回沿A绝对值减小方向最接近的整数。
例如: INTPART(12.3) 求得12,INTPART(-3.5)求得-3。
BETWEEN: 介于
介于。
用法: BETWEEN(A,B,C) 表示A处于B和C之间时返回1,否则返回0。
例如: BETWEEN(CLOSE,MA(CLOSE,10),MA(CLOSE,5))表示收盘价介于5日均线和10日均线之间。

 

 

七 、统计函数
AVEDEV 平均绝对方差
AVEDEV(X,N)  返回平均绝对方差。
DEVSQ 数据偏差平方和
DEVSQ(X,N)  返回数据偏差平方和。
FORCAST 线性回归预测值
FORCAST(X,N)  返回线性回归预测值。
SLOPE 线性回归斜率
SLOPE(X,N)  返回线性回归斜率。
STD 估算标准差
STD(X,N)  返回估算标准差。
STDP 总体标准差
STDP(X,N)  返回总体标准差。
VAR 估算样本方差
VAR(X,N)  返回估算样本方差。
VARP 总体样本方差
VARP(X,N)  返回总体样本方差 。

 

 

八 、横向统计
BLOCKSETNUM 板块股票个数
用法: BLOCKSETNUM(板块名称) 返回该板块股票个数。
HORCALC 多股统计
用法: HORCALC(板块名称,数据项,计算方式,权重)
数据项:100-HIGH,101-OPEN,102-LOW,103-CLOSE,104-VOL,105-涨幅
计算方式: 0-累加,1-排名次
权重: 0-总股本,1-流通股本,2-等同权重,3-流通市值

 

 

九 、形态函数
COST 成本分布
成本分布情况。
用法: COST(10),表示10%获利盘的价格是多少,即有10%的持仓量在该价格以下,其余90%在该价格以上,为套牢盘。
该函数仅对日线分析周期有效。
PEAK 波峰值
前M个ZIG转向波峰值。
用法: PEAK(K,N,M) 表示之字转向ZIG(K,N)的前M个波峰的数值,M必须大于等于1。
例如: PEAK(1,5,1) 表示%5最高价ZIG转向的上一个波峰的数值。
PEAKBARS 波峰位置
前M个ZIG转向波峰到当前距离。
用法: PEAKBARS(K,N,M) 表示之字转向ZIG(K,N)的前M个波峰到当前的周期数,M必须大于等于1。
例如: PEAKBARS(0,5,1) 表示%5开盘价ZIG转向的上一个波峰到当前的周期数。
SAR 抛物转向
抛物转向。
用法:  SAR(N,S,M),N为计算周期,S为步长,M为极值。
例如: SAR(10,2,20) 表示计算10日抛物转向,步长为2%,极限值为20%。
SARTURN 抛物转向点
抛物转向点。
用法: SARTURN(N,S,M) N为计算周期,S为步长,M为极值,若发生向上转向则返回1,若发生向下转向则返回-1,否则为0。
其用法与SAR函数相同。
TROUGH 波谷值
前M个ZIG转向波谷值。
用法: TROUGH(K,N,M) 表示之字转向ZIG(K,N)的前M个波谷的数值,M必须大于等于1。
例如: TROUGH(2,5,2) 表示%5最低价ZIG转向的前2个波谷的数值。
TROUGHBARS 波谷位置
前M个ZIG转向波谷到当前距离。
用法: TROUGHBARS(K,N,M) 表示之字转向ZIG(K,N)的前M个波谷到当前的周期数,M必须大于等于1。
例如: TROUGH(2,5,2) 表示%5最低价ZIG转向的前2个波谷到当前的周期数。
WINNER 获利盘比例
获利盘比例。
用法: WINNER(CLOSE) 表示以当前收市价卖出的获利盘比例。
例如: 返回0.1表示10%获利盘,WINNER(10.5)表示10.5元价格的获利盘比例。
该函数仅对日线分析周期有效。
LWINNER 近期获利盘比例
近期获利盘比例。
用法: LWINNER(5,CLOSE) 表示最近5天的那部分成本以当前收市价卖出的获利盘比例。例如返回0.1表示10%获利盘。
PWINNER 远期获利盘比例
远期获利盘比例。
用法: PWINNER(5,CLOSE) 表示5天前的那部分成本以当前收市价卖出的获利盘比例。例如返回0.1表示10%获利盘。
COSTEX 区间成本
区间成本。
用法: COSTEX(CLOSE,REF(CLOSE)),表示近两日收盘价格间筹码的成本,例如返回10表示区间成本为20元。
该函数仅对日线分析周期有效。
PPART 远期成本分布比例
远期成本分布比例。
用法: PPART(10),表示10前的成本占总成本的比例,0.2表示20%。
ZIG 之字转向
之字转向。
用法: ZIG(K,N) 当价格变化量超过N%时转向,K表示0:开盘价,1:最高价,2:最低价,3:收盘价,其余:数组信息
例如: ZIG(3,5) 表示收盘价的5%的ZIG转向。

 

 

十 、大盘函数
INDEXA   返回大盘成交额
INDEXADV   返回上涨家数
INDEXDEC   返回下跌家数
INDEXC   返回大盘收盘价
INDEXH   返回大盘最高价
INDEXL   返回大盘最低价
INDEXO   返回大盘开盘价
INDEXV   返回大盘成交量

 

十一、绘图函数
PLOYLINE 折线段
在图形上绘制折线段。
用法: PLOYLINE(COND,PRICE),当COND条件满足时,以PRICE位置为顶点画折线连接。
例如: PLOYLINE(HIGH>=HHV(HIGH,20),HIGH)表示在创20天新高点之间画折线。
DRAWLINE 绘制直线段
在图形上绘制直线段。
用法: DRAWLINE(COND1,PRICE1,COND2,PRICE2,EXPAND)
当COND1条件满足时,在PRICE1位置画直线起点,当COND2条件满足时,在PRICE2位置画直线终点,EXPAND为延长类型。
例如: DRAWLINE(HIGH>=HHV(HIGH,20),HIGH,LOW<=LLV(LOW,20),LOW,1) 表示在创20天新高与创20天新低之间画直线并且向右延长。
DRAWKLINE 绘制K线
用法: DRAWKLINE(HIGH,OPEN,LOW,CLOSE) 以HIGH为最高价,OPEN为开盘价,LOW为最低,CLOSE收盘画K线。
STICKLINE 绘制柱线
在图形上绘制柱线。
用法: STICKLINE(COND,PRICE1,PRICE2,WIDTH,EMPTY),当COND条件满足时,在PRICE1和PRICE2位置之间画柱状线,宽度为WIDTH(10为标准间距),EMPTH不为0则画空心柱。
例如: STICKLINE(CLOSE>OPEN,CLOSE,OPEN,0.8,1)表示画K线中阳线的空心柱体部分。
DRAWICON 绘制图标
在图形上绘制小图标。
用法: DRAWICON(COND,PRICE,TYPE),当COND条件满足时,在PRICE位置画TYPE号图标。
例如: DRAWICON(CLOSE>OPEN,LOW,1) 表示当收阳时在最低价位置画1号图标。图标一共有九个,图形如附图。序号,最下面的是“1”号,最上面的是“9”号。

DRAWTEXT 显示文字
在图形上显示文字。
用法: DRAWTEXT(COND,PRICE,TEXT),当COND条件满足时,在PRICE位置书写文字TEXT。
例如: DRAWTEXT(CLOSE/OPEN>1.08,LOW,’大阳线’)表示当日涨幅大于8%时在最低价位置显示’大阳线’字样。

 

十二、财务函数
FINANCE(1)   总股本(万股)
FINANCE(2)   `!、,D`!BB、股(万股)
FINANCE(3)   发起人法人股(万股)
FINANCE(4)   法人股(万股)
FINANCE(5)   B股(万股)
FINANCE(6)   H股(万股)
FINANCE(7)   流通股本(万股)
CAPITAL     流通股本(手)
FINANCE(8) 职工股(万股)
FINANCE(10) 总资产
FINANCE(11) 流动资产
FINANCE(12) 固定资产
FINANCE(13) 无形资产
FINANCE(14) 长期投资
FINANCE(15) 流动负债
FINANCE(16)   长期负债
FINANCE(17)   资本公积金
FINANCE(18) 每股公积金
FINANCE(19)   股东权益
FINANCE(20)   主营收入
FINANCE(21)   主营利益
FINANCE(22)   其它利益
FINANCE(23)   营业利益
FINANCE(24)   投资收益
FINANCE(25)   补贴收入
FINANCE(26)   营业外收支
FINANCE(27)   上年损益调整
FINANCE(28)   利益总额
FINANCE(29)   税后利益
FINANCE(30)   净利益
FINANCE(31)   未分配利益
FINANCE(32) 每股未分配利润
FINANCE(33) 每股收益
FINANCE(34)   每股净资产
FINANCE(35)   调整每股净资产
FINANCE(36)   股东权益比
FINANCE(40) 流通市值
FINANCE(41) 总市值
FINANCE(42) 上市日期

 

十三、动态行情函数
DYNAINFO(3) 前收盘价
DYNAINFO(4) 今开
DYNAINFO(5) 最高
DYNAINFO(6) 最低
DYNAINFO(7) 现价
DYNAINFO(8) 总手
DYNAINFO(9) 现手
DYNAINFO(10) 总成交金额
DYNAINFO(11) 均价
DYNAINFO(12) 日升跌
DYNAINFO(13) 振幅度
DYNAINFO(14) 涨幅度
DYNAINFO(15) 委托比
DYNAINFO(16) 委量差
DYNAINFO(17) 量比
DYNAINFO(20) 最新叫买价
DYNAINFO(21) 最新叫卖价
DYNAINFO(22) 内盘
DYNAINFO(23) 外盘
DYNAINFO(25) 买一量
DYNAINFO(26) 买二量
DYNAINFO(27) 买三量
DYNAINFO(28) 买一价
DYNAINFO(29) 买二价
DYNAINFO(30) 买三价
DYNAINFO(31) 卖一量
DYNAINFO(32) 卖二量
DYNAINFO(33) 卖三量
DYNAINFO(34) 卖一价
DYNAINFO(35) 卖二价
DYNAINFO(36) 卖三价
DYNAINFO(37) 换手率
DYNAINFO(39) 市盈率
DYNAINFO(40) 成交方向
DYNAINFO(50) 采样点数
DYNAINFO(51) 内外比
DYNAINFO(52) 多空平衡
DYNAINFO(53) 多头获利
DYNAINFO(54) 空头回补
DYNAINFO(55) 多头止损
DYNAINFO(56) 空头止损
DYNAINFO(57) 笔升跌

 

 

十四、线形和颜色属性
COLOR 自定义色
格式为COLOR+“RRGGBB”:RR、GG、BB表示红蓝色、绿色和蓝色的分量,每种颜色的取值范围是00-FF,采用了16进制。
例如:MA5:MA(CLOSE,5),COLOR00FFFF 表示纯红色与纯绿色的混合色:COLOR808000表示淡蓝色和淡绿色的混合色。
COLORBLACK 画黑色
COLORBLUE 画蓝色
COLORGREEN 画绿色
COLORCYAN 画青色
COLORRED 画红色
COLORMAGENTA 画洋红色
COLORBROWN 画棕色
COLORLIGRAY 画淡灰色
COLORGRAY    画深灰色
COLORLIBLUE 画淡蓝色
COLORLIGREEN 画淡绿色
COLORLICYAN 画淡青色
COLORLIRED 画淡红色
COLORLIMAGENTA 画淡洋红色
COLORYELLOW 画黄色
COLORWHITE 画白色
LINETHICK 线型粗细
格式:“LINETHICK+(1-9)” 参数的取值范围在1—9之间,“LINETHICK1”表示最细的线,而“LINETHICK9”表示最粗的线。
STICK 画柱状线
COLORSTICK 画彩色柱状线
VOLSTICK 画彩色柱状线
成交量柱状线,当股价上涨时显示红色空心柱,则显示绿色实心柱
LINESTICK 同时画出柱状线和指标线
CROSSDOT 画小叉线
CIRCLEDOT 画小圆圈线
POINTDOT 画小圆点线
附一:符号一览表

符号 名称 举例 符号 名称 举例
+ 加 X + Y && 并且 X>Y && Y>Z
– 减 X – Y || 或者 X>Y || Y>Z
* 乘 X * Y $ 修饰符号 “000014$CLOSE”
/ 除 X / Y ( 括号 HIGH/(CLOSE+OPEN)
< 小于 X < Y ) 反括号 HIGH/(CLOSE+OPEN)
> 大于 X > Y , 逗号 MA(Close,3)
<= 小于等于 X <= Y : 输出 输出:CLOSE+OPEN
>= 大于等于 X >= Y := 赋值 变量1:=HIGH
= 等于 X = Y ” 双引号 “000014$OPEN”
{} 注释符号 {注释部分} . 点号 KDJ.K
AND 并且 X>Y AND Y>Z ; 分号 A:=CLOSE;
OR 或者 X>Y OR Y>Z # 变周期符号 TMP1:=CLOSE#WEEK
<> 非 X <> Y ‘ 单引号 ‘大阳线’

 

 

附二:引用表达式

引用指标指标 “指标名称.指标线名称(参数表)”
引用交易系统指标 “SYSTEM.指标名称.交易类型(参数表)”
引用条件选股指标 “EXPLORER.指标名称(参数表)”
跨周期引用指标 “各种类型指标名称#周期类型(参数表)”
引用任意股票的数据 “股票代码$数据名称”
引用扩展数据 EXTDATA(N) 分析家N=1-11 飞狐N=1-13
引用横向统计日线数据(1-N) ESTDATA(N)
引用类函数第二个变量参数 类函数名称(第一参数,变量名或变量表达式)

000000 cccccc 000000 003300 006600 009900 00CC00 00FF00 000033 003333 006633 009933 00CC33 00FF33 000066 003366 006666 009966 00CC66 00FF66
111111 DDDDDD 330000 333300 336600 339900 33CC00 33FF00 330033 333333 336633 339933 33CC33 33FF33 330066 333366 336666 339966 33CC66 33FF66
222222 EEEEEE 660000 663300 666600 669900 66CC00 66FF00 660033 663333 666633 669933 66CC33 66FF33 660066 663366 666666 669966 66CC66 66FF66
333333 FFFFFF 990000 993300 996600 999900 99CC00 99FF00 990033 993333 996633 999933 99CC33 99FF33 990066 993366 996666 999966 99CC66 99FF66
444444 CC0000 CC3300 CC6600 CC9900 CCCC00 CCFF00 CC0033 CC3333 CC6633 CC9933 CCCC33 CCFF33 CC0066 CC3366 CC6666 CC9966 CCCC66 CCFF66
555555 0000FF FF0000 FF3300 FF6600 FF9900 FFCC00 FFFF00 FF0033 FF3333 FF6633 FF9933 FFCC33 FFFF33 FF0066 FF3366 FF6666 FF9966 FFCC66 FFFF66
666666 00FF00 000099 003399 006699 009999 00CC99 00FF99 0000CC 0033CC 0066CC 0099CC 00CCCC 00FFCC 0000FF 0033FF 0066FF 0099FF 00CCFF 00FFFF
777777 FF0000 330099 333399 336699 339999 33CC99 33FF99 3300CC 3333CC 3366CC 3399CC 33CCCC 33FFCC 3300FF 3333FF 3366FF 3399FF 33CCFF 33FFFF
888888 00FFFF 660099 663399 666699 669999 66CC99 66FF99 6600CC 6633CC 6666CC 6699CC 66CCCC 66FFCC 6600FF 6633FF 6666FF 6699FF 66CCFF 66FFFF
999999 FFFF00 990099 993399 996699 999999 99CC99 99FF99 9900CC 9933CC 9966CC 9999CC 99CCCC 99FFCC 9900FF 9933FF 9966FF 9999FF 99CCFF 99FFFF
AAAAAA FF00FF CC0099 CC3399 CC6699 CC9999 CCCC99 CCFF99 CC00CC CC33CC CC66CC CC99CC CCCCCC CCFFCC CC00FF CC33FF CC66FF CC99FF CCCCFF CCFFFF
BBBBBB FF0099 FF3399 FF6699 FF9999 FFCC99 FFFF99 FF00CC FF33CC FF66CC FF99CC FFCCCC FFFFCC FF00FF FF33FF FF66FF FF99FF FFCCFF FFFFFF

T0002目录下的文件说明

如果重装到一个新位置,只需将整个T0002拷贝过去就可以了,所有的个性化数据都在此目录下

Advhq.dat 星空图相关个性化数据
Block.cfg 板块设置文件
cbset.dat 筹码分析个性化数据
CoolInfo.Txt 系统备忘录
Line.dat 画线工具数据
MyFavZX.dat 资讯收藏夹数据
newmodem.ini 交易客户端个性化数据
padinfo.dat 定制版面个性化数据
PriCS.dat,PriGS.dat,PriText.dat 指标相关数据
recentsearch.dat 最近资讯搜索数据
Scheme.dat 配色方案
tmptdx.css 临时网页CSS文件
user.ini 全局个性化数据
userfx.dat K线图个性化数据
mark.dat 标识信息的存盘文件

以下文件与设置的预警信息有关:
Col_warn.dat
Col_warn_self.dat
Col_warn2.dat
ColwarnTj.dat

[blocknew] 板块目录
[cache] 系统数据高速缓存
[zst_cache] 分时图数据高速缓存
[coolinfo] 系统备忘录目录
[Invest] 个人理财数据目录
[PAD] 定制牘面存盘文件
通达信 飞狐 大智慧 分析家 指标函数一览 (指标爱好者必看
说明: H-飞狐 T-通达信 D-大智慧 F-分析家
绘图函数

这组函数的功能是在主图或副图上设定条件输出图象、图标、直线、文字、数字、指标线、指标柱等,全部可以单独使用。

飞狐的强大功能,在此组函数中有淋漓尽致的发挥。无论在表面(美感),还是实质(提高工作效率)上,都有良好表现。

毫无例外的是,这组函数中,都带有COND。CONDITION,条件,状态。COND在这里可作为条件理解。

为了能找到合适的COND,用于举例子,先介绍一组概念。

高点:在2N+1根K线中,中间这根K线的H,要大于等于左右N根K线的H。在N+1根K线中,有等高点出现,取最先出现的。

低点:在2N+1根K线中,中间这根K线的L,要小于等于左右N根K线的L。在N+1根K线中,有等低点出现,取最先出现的。

峰点:高点和低点,合称为峰点。

(这个定义,意合于技术分析的老祖宗道氏:“只要平均指数的最高点超过了前期的最高点,它就处于牛市时期;当最低点低于前期的最低点时,它处于熊市时期。”这里我们撇开向上、向下分形和分形峰状点等概念,以免把概念复杂化。)

也为了不让指标一来就过于复杂,我们先取N为2来做指标。简介到后面,可以看到,N是可以作为峰点指标的参数进行调整的。

指标名称:FENG2

指标说明:供引用

指标内容:

{峰点参数暂定为2}

A:=REF(H,2);{中间K线的最高价}

B:=A>=REF(H,4) AND A>=REF(H,3) AND A>=REF(H,1) AND A>=H;{中间K线的最高价大于等于两边共四根K线的最高价}

D:=BACKSET(B,3);{将当前位置和之前2个周期的数值设为1}

HD:FILTER(D,2);{找到高点后,过滤掉其后2周期内可能出现的等高点。输出高点}

A2:=REF(L,2);{中间K线的最低价}

B2:=A2<=REF(L,4) AND A2<=REF(L,3) AND A2<=REF(L,1) AND A2<=L;{中间K线的最低价小于等于两边共四根K线的最低价}

D2:=BACKSET(B2,3);{将当前位置和之前2个周期的数值设为1}

LD:FILTER(D2,2);{找到低点后,过滤掉其后2周期内可能出现的等低点。输出低点}

{后面有些例子,就从这个指标中引用信号。}

———————————-
H

函数:DRAWBKBMP

描述:设置背景图

类别:绘图

说明:根据条件设置背景图

用法: DRAWBKBMP(COND,BMP);当图形上最后一组COND条件满足时,以MyBMP做背景。

示例:DRAWBKBMP(C>O, ‘MyBMP’);表示图形上最后一组C>O时背景显示子FmlDLL目录下的MyBMP.bmp图。

———————————-
H

函数:DRAWGBK

描述:渐变背景色

类别:绘图

说明:绘制渐变背景色

用法: DRAWGBK(COND,COLOR1, COLOR2,D);当COND条件满足时,以COLOR1到COLOR2渐变色填充子图区域,D=0表示从左到右,D=1表示从上到下。

示例:DRAWGBK(C>O, COLORRGB(255,0,0), COLORRGB(255,255,0),0);表示图形上最后一组C>O时从左到右从红色到黄色渐变填充子图。

———————————-
H-F-T-D

函数:DRAWICON

描述:绘制小图标

类别:绘图

说明:在图形上绘制小图标

用法: DRAWICON(COND,PRICE,TYPE),当COND条件满足时,在PRICE位置画TYPE号图标。15种图标编码为1-15(1-3为小脸,4-5为上下箭头,6-7为红绿小旗,8-9为三角形,10-12为信号灯,13-15为O、X、四方形)。TYPE为字符串时可显示用户自制BMP图。

示例:DRAWICON(CLOSE>OPEN,LOW,4)表示当收阳时在最低价位置画4号图标。

DRAWICON(C>O, L, ‘MyBMP’)表示当收阳时在最低价位置画FmlDLL子目录下的自制图标MyBMP.BMP。

这个说明有点老了,飞狐升级飞快,以致帮助文件跟不上变化了。基本意思如说明一样,其它作些补充。

1、COND条件,一般是指判断的结果,不是0就是1。如用其它数据,大于等于1的,条件满足;小于1,条件就不满足。

2、TYPE图标,现在已经有12种,用下面的指标,在000829上可以全部显示出来。当TYPE取大于等于12的数时,都显示黄球。

当TYPE取0时,显示的是笑脸(这个指标中没有做进去,自己可以试一下)。

B:=”FENG2.HD”;

D:=BACKSET(ISLASTPERIOD,BARSLAST(B)+1);

A:=D>REF(D,1);

DRAWICON(REF(A,1),1.05*H,1);

DRAWICON(REF(A,2),1.05*H,2);

DRAWICON(REF(A,3),1.05*H,3);

DRAWICON(REF(A,4),1.05*H,4);

DRAWICON(REF(A,5),1.05*H,5);

DRAWICON(REF(A,6),1.05*H,6);

DRAWICON(REF(A,7),1.05*H,7);

DRAWICON(REF(A,8),1.05*H,8);

DRAWICON(REF(A,9),1.05*H,9);

DRAWICON(REF(A,10),1.05*H,10);

DRAWICON(REF(A,11),1.05*H,11);

DRAWICON(REF(A,12),1.05*H,12);

DRAWICON(REF(A,13),1.05*H,13);

DRAWICON(REF(A,14),1.05*H,100);{主图叠加}

当红球和绿球连续显示时,立体感会强一些。

DRAWICON(C>=MA(C,30),MA(C,30),10);

DRAWICON(C

3、PRICE是用于定位图标的位置的。一般用1.01*H,或者0.99*L等。现在可用ALIGN(0-5)指定对齐位置。

用这个指标来试(主图叠加)

B:=”FENG2.HD”;

D:=BACKSET(ISLASTPERIOD,BARSLAST(B)+1);

A:=D>REF(D,1);

E:=REF(H,1);

DRAWICON(A,E,10),ALIGN0;

DRAWICON(A,E,11),ALIGN1;

DRAWICON(A,E,12),ALIGN2;

DRAWICON(A,E,3),ALIGN3;

DRAWICON(A,E,4),ALIGN4;

DRAWICON(A,E,5),ALIGN5;

可以初步得出结论:

ALIGN0:信号出现在PRICE的正中;

ALIGN1:信号出现在PRICE下边(十分靠近);

ALIGN2:信号出现在PRICE上边(十分靠近);

ALIGN3:信号出现在主图的中间;

ALIGN4:信号出现在主图的最上边;

ALIGN5:信号出现在主图的最下边;

高低点上作图标,可以使高低点更明确了。

A:=”FENG2.LD”;

B:=”FENG2.HD”;

DRAWICON(A,L,11),ALIGN1;

DRAWICON(B,H,10),ALIGN2;{主图叠加}

4、可以自由调用MyBMP.BMP图到显示位置,大大增强了输出的效果。你只要看到好看的图,可以随时抓拍过来,做成BMP文件,放到FmlDLL子目录下,就可以调用了。

A:=”FENG2.LD”;

B:=”FENG2.HD”;

DRAWICON(A,L,’PIG’),ALIGN1;

DRAWICON(B,H,’PIG’),ALIGN2;{主图叠加。如果你没有PIG.BMP文件,则不可显示。}

DRAWICON(1,MA(C,5),’S28′);

DRAWICON(1,MA(C,10),’S31′);

DRAWICON(1,MA(C,20),’S14′);

DRAWICON(1,MA(C,30),’S25′);{主图叠加。如果你没有PIG.BMP文件,则不可显示。}

 

 

函数:DRAWLINE

描述:绘制直线

类别:绘图

说明:在图形上绘制直线段

用法: DRAWLINE(COND1,PRICE1,COND2,PRICE2,EXPAND),当COND1条件满足时,在PRICE1位置画直线起点,当COND2条件满足时,在PRICE2位置画直线终点,EXPAND为延长类型。

示例:DRAWLINE(HIGH>=HHV(HIGH,10),HIGH,LOW<=LLV(LOW,10),LOW,1)表示在创10天新高与创10天新低之间画直线并且向右延长。

DRAWLINE是唯一一个一句里面用到两个COND的绘图函数。因为它需要两个点来决定一直线。

COND1相当于指定K线位置(横坐标),PRICE1相当于是指定价位(纵坐标),这样一个点在平面上的位置就决定了。

DRAWLINE是从第一点画到第二点的,即有起点与终点的顺序关系:第一点出现的时间,要在第二点之前。否则线是画不出来的。

EXPAND,扩张、发展,这里是延伸的意思吧。一般取0,不延长;取1,延长。实际上是取大于等于1的数就延长,小于1就不延长。

DRAWLINE目前支持POINTDOT、LINETHICK、COLOR、SHIFT这四个描述函数。

举个例子吧。

A:=”FENG2.LD”;

B:=”FENG2.HD”;

DRAWICON(A,L,11),ALIGN1;

DRAWICON(B,H,10),ALIGN2;

D:=BACKSET(ISLASTPERIOD,BARSLAST(B)+1);

E:=D>REF(D,1);

F:=BACKSET(E,REF(BARSLAST(B),1)+2);

G:=F>REF(F,1);

DRAWLINE(G,H,E,H,1),pointdot,linethick1,coloryellow;{主图叠加}

这根线有些趋势线的意思了。由于趋势线的主观性颇强,只有多设参数才能满足多数人的要求。

DRAWLINE画出的线,应该比手工画出的线精确一些。(DRAWLINE画线的灵敏度,要比手工画线低,所以说DRAWLINE画出的线精确,就未必对。)

主要用于画斜线,水平线我们一般可以另想办法。因为在图中显示直线,并非DRAWLINE的“专利”。

比如:

A:=”FENG2.LD”;

B:=”FENG2.HD”;

D:=BACKSET(ISLASTPERIOD,BARSLAST(A)+1);

E:=D>REF(D,1);

F:=BACKSET(ISLASTPERIOD,BARSLAST(B)+1);

G:=F>REF(F,1);

前高:REF(H,BARSLAST(G));

前低:REF(L,BARSLAST(E));{主图叠加}

———————————-
H

函数:DRAWNUMBER

描述:显示数字

类别:绘图

说明:在图形上显示数字

用法: DRAWNUMBER(COND,PRICE,NUMBER,PRECISION),当COND条件满足时,在PRICE位置书写数字NUMBER(可以为常数或数组序列),PRECISION为小数显示位数(取值范围0-3)。可ALIGN0-5定义对齐方式。

示例:DRAWNUMBER(CLOSE/OPEN>1.08,HIGH,(CLOSE-REF(C,1))/REF(C,1)*100,2)表示当日涨幅大于8%时在最高价位置显示涨幅(相对开盘价的百分比)。

这个函数的特色是,在NUMBER位置可以放变量。

NUMBER,数字。DRAWNUMBER是DRAWTEXT的“兄弟”,也可以用ALIGN(0-5)来定义水平位置,方法相同。

A:=”FENG2.LD”;

B:=”FENG2.HD”;

DRAWICON(A,L,11),ALIGN1;

DRAWICON(B,H,10),ALIGN2;

D1:=BACKSET(ISLASTPERIOD,BARSLAST(B)+1);

E1:=D1>REF(D1,1);{离目前最近的一个高点}

D2:=BACKSET(E1,REF(BARSLAST(B),1)+2);

E2:=D2>REF(D2,1);{倒数第二个高点}

DRAWTEXT(E1,H*1.02,’高点价:’),COLORGREEN,ALIGN2;

DRAWNUMBER(E1,H*1.02,H,2),COLORGREEN,ALIGN1;

DRAWTEXT(E2,H*1.02,’高点价:’),COLORYELLOW,ALIGN2;

DRAWNUMBER(E2,H*1.02,H,2),COLORYELLOW,ALIGN1;{主图叠加}

———————————-
H-F-T-D

函数:DRAWTEXT

描述:加入文字

类别:绘图

说明:在图形上显示文字

用法: DRAWTEXT(COND,PRICE,TEXT),当COND条件满足时,在PRICE位置书写文字TEXT,可用’n’换行,可ALIGN0-5定义对齐方式,分析家、通达信不可换行。

示例:DRAWTEXT(CLOSE/OPEN>1.08,LOW,’大阳线’)表示当日涨幅大于8%时在最低价位置显示’大阳线’字样。

DRAWTEXT(CLOSE/OPEN>1.08,LOW,’好呀n大涨啦’);可显示多行文本,用”n”换行。

在某些满足条件的地方直接显示文字或字符,比显示图标要更直观一些。

此函数可以用ALIGN来定位水平位置。而ALIGN用在DRAWICON上定位的是高低的位置。

从下面例子可以看到,ALIGN(0~2)定义水平位置的意义:

ALIGN0:居中;

ALIGN1:偏右;

ALIGN2:偏左。

也可以用SHIFT函数进行向右水平移位。

所显示的文字或字符,可以用COLOR函数来定义颜色。至于文字的大小,则采用系统默认的大小,在此函数中无法定义。

此函数单独使用有其用途,与DRAWNUMBER配合应用时,效果更不错。后面介绍到DRAWNUMBER时再举例子。

A:=”FENG2.LD”;

B:=”FENG2.HD”;

DRAWICON(A,L,11),ALIGN1;

DRAWICON(B,H,10),ALIGN2;

D1:=BACKSET(ISLASTPERIOD,BARSLAST(B)+1);

E1:=D1>REF(D1,1);{离目前最近的一个高点}

D2:=BACKSET(E1,REF(BARSLAST(B),1)+2);

E2:=D2>REF(D2,1);{倒数第二个高点}

D3:=BACKSET(E2,REF(BARSLAST(B),1)+2);

E3:=D3>REF(D3,1);{倒数第三个高点}

DRAWTEXT(E1,H*1.01,’☆TEXT:’),COLORRED,ALIGN0;

DRAWTEXT(E2,H*1.01,’★TEXT:’),COLORGREEN,ALIGN1;

DRAWTEXT(E3,H*1.01,’▓TEXT:’),COLORYELLOW,ALIGN2;{主图叠加}

———————————-
H

函数:DRAWYITEXT

描述:易学文字

类别:绘图

说明:在图形上显示易学文字,可ALIGN0-3定义对齐方式

用法: DRAWYITEXT(COND,PRICE,CODE,TYPE),当COND条件满足时,在PRICE位置书写TYPE类型的CODE的对应文字。TYPE为常数,取0–1,分别表示计算的是干支、64卦,CODE为对应的代码。

示例:DRAWYITEXT(CLOSE/OPEN>1.05,LOW, GANZHI(DATE*100, 2),0)表示当日涨幅大于5%时在最低价位置显示日干支。

DRAWYITEXT(REF(CLOSE,2)>REF(OPEN,2) AND REF(CLOSE,1)>REF(OPEN,1) AND CLOSE>OPEN, LOW, KGUA(1, 1), 1 )表示连二阳时在最低价位置显示K线卦象。

———————————————–

H

函数:FILLRGN

描述:区间彩带

类别:绘图

说明:绘制指标区间彩带

用法: FILLRGN(COND,PRICE1,PRICE2),当COND条件满足时,以COLOR填充PRICE1和PRICE2的区间。

示例:FILLRGN(MA1>MA2, MA1,MA2),colorred 表示MA1>MA2时以红色填充MA1和MA2之间的区域。

FILL,充满,填充。RGN可能是REGION,地区,地域。

用这个函数,再加DRAWICON可以调用BMP图象文件的功能,可以作出象风景一样的图。

这里举个简单的例子:

A:=MA(C,5);

B:=MA(C,10);

FILLRGN(1,H*1.01,H*1.02),COLORFFFF66;

FILLRGN(A>=B,A,B),COLORMAGENTA;

FILLRGN(A

FILLRGN(1,L*0.99,L*0.98),COLORFF99CC;{主图叠加}

———————————-
H

函数:PARTLINE

描述:分段绘制指标线

类别:绘图

说明:分段绘制指标线

用法: PARTLINE(COND,PRICE),满足COND条件绘制PRICE连线。

示例:PARTLINE(C>REF(C,1),C),colorred表示收盘大于前收以红色绘制收盘价连线。

PART,部分,局部。值得一提的是,PARTLINE支持多种描述函数,如例所见。

A:=MA(C,5);

B:=MA(C,10);

PARTLINE(A>=B,A),COLORRED,POINTDOT;

PARTLINE(A>=B,B),COLORGREEN,CIRCLEDOT;

PARTLINE(A

PARTLINE(A

———————————-
H-F-T-D

函数:POLYLINE

描述:绘制折线段

类别:绘图

说明:在图形上绘制折线段

用法: POLYLINE(COND,PRICE),当COND条件满足时,以PRICE位置为顶点画折线连接。

示例:POLYLINE(HIGH>=HHV(HIGH,10),HIGH)表示在创10天新高点之间画折线。

POLY,多个的。

支持POINTDOT、LINETHICK、COLOR、SHIFT这四个描述函数。

A:=”FENG2.LD”;

B:=”FENG2.HD”;

DRAWICON(A,L,11),ALIGN1;

DRAWICON(B,H,10),ALIGN2;

POLYLINE(A,L),POINTDOT,COLORGREEN;

POLYLINE(B,H),LINETHICK2,COLORMAGENTA;{主图叠加}

———————————-
H-F-T-D

函数:STICKLINE

描述:绘制柱线

类别:绘图

说明:在图形上绘制柱线

用法: STICKLINE(COND,PRICE1,PRICE2,WIDTH,EMPTY),
当COND条件满足时,在PRICE1和PRICE2位置之间画柱状线,宽度为WIDTH可为0-100(10为标准间距),EMPTH不为0大于等于1则画空心柱。宽度为WIDTH(10为标准间距)。

示例:STICKLINE(CLOSE>OPEN,CLOSE,OPEN,8,1)表示画K线中阳线的空心柱体部分。STICKLINE(CLOSE>OPEN,HIGH,LOW,0.8,1)表示画K线中阳线的高低线部分。

说明三点:

1、PRICE1和PRICE2没有顺序关系,即何者在前何者在后都不影响语句的执行。

2、WIDTH宽度,支持小数。用1和用0.1,会有很大的差别。取7时和主图的K线宽度差不多。

 

以下的副图指标,画出的K线,与主图中显示的K线差不多。有些“主图叠加指标”,叠加在副图中也未尝不可了。

STICKLINE(C>O OR (C=O AND C>REF(C,1)),O,C,7,1),colorred;{画出红K实体}

STICKLINE((C>O AND C<>H) OR (C=O AND C>REF(C,1)),C,H,0.1,0),colorred;{画出红K上影线}

STICKLINE((C>O AND L<>O) OR (C=O AND C>REF(C,1)),L,O,0.1,0),colorred;{画出红K下影线}

STICKLINE(C<=REF(C,1)),C,O,7,0),colorcyan;{画出青K实体}

STICKLINE(C<=REF(C,1)),L,H,0.1,0),colorcyan;{画出青K影线。因为青K是实心的,所以影线从中穿过}

MA(C,5);

3、用STICKLINE可以用两种方法做出多色彩K线效果。

一种是横向的,将K线实体从O到C分为N等份,每个小格中放入不同的但比较连续的颜色。

这里随便举个例子,N取4,只对阳线加了效果。其它变化,道理是一样的。

A:=C-O;

B:=C>O;

STICKLINE(B,O,O+A/4,8,0),COLORFF99FF;

STICKLINE(B,O+A/4,O+A*2/4,8,0),COLORFF00FF;

STICKLINE(B,O+A*2/4,O+A*3/4,8,0),COLOR9900FF;

STICKLINE(B,O+A*3/4,O+A,8,0),COLOR0000FF;{主图叠加}

还有一种方法就是纵向的了。先在较宽的K线中加颜色,然后把宽度逐步收窄,再加颜色覆盖以前的,这样从纵向看,一根K线中就有不同颜色了。效果做得好的,可以做到赏心悦目。

B:=C>O;

STICKLINE(B,O,C,8,0),COLORFF99FF;

STICKLINE(B,O,C,6,0),COLORFF00FF;

STICKLINE(B,O,C,4,0),COLOR9900FF;

STICKLINE(B,O,C,2,0),COLOR0000FF;{主图叠加}

———————————-
H

函数:VERTLINE

描述:绘制垂直线段

类别:绘图

说明:在图形上绘制垂直线段

用法: VERTLINE(COND),在COND条件满足的周期处画垂直线。

示例:VERTLINE(HIGH>=HHV(HIGH,20))表示在创20天新高时画垂直线。

VERTICAL,垂直的。

VERTLINE目前可以用POINTDOT、LINETHICK、COLOR、SHIFT这四个描述函数来描述。

这个函数,主要是用于画线看时间的。费波纳契周期,可以用这个函数画出来的。

这里举个例子,把日K线中每月的第一个交易日中,画一根垂直线。

A:=MONTH>REF(MONTH,1);

VERTLINE(A),COLOR808040,POINTDOT;{主图叠加}

 

 

XMA到底是什么?揭开XMA的面纱!

1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20.。。。。。。。。

如果在10这个地方统计MA(C,5)=(6+7+8+9+10)/5;这是以10为终点,向前统计法;

如果在10这个地方统计XMA(C,5)=(8+9+10+11+12)/5;这是以10为中点,从中间向前和向后统计法;

如果在10这个地方统计MA(C,7)=(4+5+6+7+8+9+10)/7;这是以10为终点,向前统计法;

如果在10这个地方统计XMA(C,7)=(7+8+9+10+11+12+13)/7;这是以10为中点,从中间向前和向后统计法;

如果在10这个地方统计MA(C,9)=(2+3+4+5+6+7+8+9+10)/9;这是以10为终点,向前统计法;

如果在10这个地方统计XMA(C,9)=(6+7+8+9+10+11+12+13+14)/9;这是以10为中点,从中间向前和向后统计法;

假如今天就是10号收盘,前面的数据已经发生了,但是11号、12、13、14、15、16、17、18、19、20……没有发生,没有发生就没数据,但XMA如何给没发生的赋值数据呢?
原理很简单:
假如是XMA(C,7),以10号收盘来统计XMA(C,7),7、8、9、10数据已经有了,但11、12、13还没发生,数据没有,怎么办?就是这用7、8、9、10这4天的平均价赋值分别给11、12、13;然后全部求平均。
如果是N天呢?N天后的没有发生的怎么赋值?那就用N天前的包括N天的((N+1)/2)天的平均价赋值;

但是有一点,XMA还怪在这里:当今天10号已经过去,11号变成今天,昨天对11号没发生的赋值又会用今天的实际值来取代。用11号实际发生的数值取代昨天对今天的赋值;
XMA(C,N)里的一般为奇数,当N设定为偶数时候,它怎么办呢?就是自动采用N+1法自动调整为奇数。

 

 

XMA均线的看法
MA和XMA的一部分算法一样。比如:
MA(C,N)=(REF(C,N-1)+–REF(C,N-2)+REF(C,N=1)+C)/N
XMA(C,N)=(REF(C,N-1)+–REF(C,N-2)+REF(C,N=1)+C)/N
这两个函数的这个值算法相同。不同的是这个值放到什么位置上。
MA是把这个值放到计算当天。而XMA把这个值放到向前数第(N+1)/2的位置上。所以从这个角度看,XMA更符合平均值的计算原理,把平均值赋给中间数才是合理的。MA虽然使数值固定不变,但对原理来讲并不合理。
因为XMA把数值赋给中间位置的数,所以就存在一个问题,就是所有在中间数值{(N+1)/2}这个位置以前的数都是固定不变的了,那么就出现一个问题,在中间数值{(N+1)/2}这个位置以后的{(N-1)/2}位的数值怎么给定?这些位置数值的算法是什么样的那?
我们这里举个容易判断的例子。给定N值=5。
那么(5+1)/2=3,3位和其之前的数都固定了,只有本位数和{(N-1)/2}位数没有固定,这两个数值怎么给出那?
当日本位XMA(C,N)的数值=[当日起向前((N+1)/2)位的数值之和]/(N+1)/2。
当日向前M日位置的数值:
=[当日起向前((N+1)/2+M)位的数值之和]/[(N+1)/2+M]。
一直到((N+1)/2+M)+1=N为止。
期间位数为偶数时等同加一位,例如N=2相当于N=3来处理。
例:
A B C D E F G H J K L M N O P
1 2 3 4 5 6 7 8 9 1
字母代表XMA价格,数字代表实际价格。
如果一个7日XMA均线。XMA(X,N);
N=7;M=前一数距离A的位置数;
A=(1+2+3+4)/4;B=(1+2+3+4+5)/5;C=(1+2+3+4+5+6)/6;
D=(1+2+3+4+5+6+7)/7;E=(2+3+4+5+6+7+8)/7;
A=[(N+1)/2位数之和]/(N+1)/2位;
B=[(N+1)/2+M位数之和]/(N+1)/2+M位;这里的M=1;

C=[(N+1)/2+M位数之和]/(N+1)/2+M位;这里的M=2;
D=[N位数之和/N位];此值向后数值全部固定。
E=[A倒退一位后的N位数之和/N位];此值固定。
这里我们看到A值其实就是4日均线值,等同于MA(C,4),B值等同于从A开始的5日均线值,依次类推。
这样我们只要做出一个XMA(Q,N)中的N日平均线就能得到历史上没有漂移时期的XMA(Q,N)的值了。这样就可以考察各个时期XMA的均线漂移情况了。

XMA(C,N)嵌套循环,其中N值取的小一些,这样,如果循环的次数越多,对以前的数值影响长度就越大,但数值变化幅度减小,对近期的数值变化幅度也减小,这样的好处是使越接近现在的数值变化的范围可以小一些,减少近期失真或过度漂移的现象,不利的地方是使整条均线数值的大部分成为动态值,只不过动态范围很小。

如果XMA(C,N)不使用嵌套循环,N值取的过小,均线不平滑。N值取得大一些,近期N的后半期数值变化(漂移)幅度会比嵌套循环的幅度大一些,也就是说接近近期的数值漂移会比嵌套的严重些,但优点是在N/2之前的数值全部固定不变,不会有任何漂移了。

下面是我为了分析做的图表,从图表中可以看出,(这里我做的是一个3天23层循环套XMA的原理)循环的层数等于向前影响的天数,就是说一个3天23层的XMA循环套的均线值从收盘当日起向前23天都是变化的,而且随着嵌套层的增加,这种向前的影响不断增加,但幅度不断减小。因为层数越多其中参与计算的固定下来的数值越多,第一天没有固定值,第二天有两个固定值,第三天有三个,不断增加。我们假设一下,如果这种嵌套接近无穷,那么可以认为这条均线每天都变化,是整体变化,就是说当天的收盘数值将影响到上市前3天的均线数值,哈哈,这个未来影响满大的,不过幅度会很小很小,因为他平均了上市以来的所有波动,因为时间漫长,摊到每一天上就很小了很小了。

 

 

通达信公式编辑中部分函数(注释)

HIGH――最高价—-返回该周期最高价。用法:HIGH

LOW――最低价—-返回该周期最低价。用法:LOW

CLOSE――收盘价—-返回该周期收盘价。用法:CLOSE

VOL――成交量—-返回该周期成交量。用法:VOL

OPEN――开盘价—-返回该周期开盘价。用法:OPEN

ADVANCE――上涨家数—-返回该周期上涨家数。用法:ADVANCE(本函数仅对大盘有效)

DECLINE――下跌家数—-返回该周期下跌家数。用法:DECLINE(本函数仅对大盘有效)

AMOUNT――成交额—-返回该周期成交额。用法:AMOUNT

ASKPRICE――委卖价—-返回委卖1–委卖3价格。用法:ASKPRICE(N),N取1–3(本函数仅个股在分笔成交分析周期有效)

ASKVOL――委卖量—-返回委卖1–委卖3量。用法:ASKVOL(N),N取1–3(本函数仅个股在分笔成交分析周期有效)

BIDPRICE――委买价—-返回委买1–委买3价格。用法:BIDPRICE(N),N取1–3(本函数仅个股在分笔成交分析周期有效)

ASKVOL――委卖量—-返回委卖1–委卖3量。用法:ASKVOL(N),N取1–3(本函数仅个股在分笔成交分析周期有效)

BUYVOL――主动性买盘—-返回主动性买单量。用法:BUYVOL
当本笔成交为主动性买盘时,其数值等于成交量,否则为0(本函数仅个股在分笔成交分析周期有效)

SELLVOL――主动性卖单—-返回主动性卖单量。用法:SELLVOL
当本笔成交为主动性卖盘时,其数值等于成交量,否则为0(本函数仅个股在分笔成交分析周期有效)

DATA――日期—-取得该周期从1900以来的的年月日。用法:DATE
例如函数返回1000101,表示2001年1月1日
TIME――时间—-取得该周期的时分秒。用法::TIME
函数返回有效值范围为(000000-235959)
YEAR――年份—-取得该周期的年份。用法:YEAR
MONTH――月份—-取得该周期的月份。用法:MONTH
函数返回有效值范围为(1-12)
WEEKDAY――星期—-取得该周期的星期数。用法:WEEK
函数返回有效值范围为(0-6),0表示星期天
DAY――日—-取得该周期的日期。用法:DAY
函数返回有效值范围为(1-31)
HOUR――小时—-取得该周期的小时数。用法:HOUR
函数返回有效值范围为(0-23),对于日线及更长的分析周期值为0
MINUTE――分钟—-取得该周期的分钟数。用法:MINUTE
函数返回有效值范围为(0-59),对于日线及更长的分析周期值为0
BACKSET――向前赋值—-将当前位置到若干周期前的数据设为1。
用法:BACKSET(X,N),若X非0,则将当前位置到N周期前的数值设为1。
例如:BACKSET(CLOSE>OPEN,2)若收阳则将该周期及前一周期数值设为1,否则为0
BARSCOUT――有效数据周期数—-求总的周期数。
用法:BARSCOUNT(X)第一个有效数据到当前的天数
例如:BARSCOUNT(CLOSE)对于日线数据取得上市以来总交易日数,对于分笔成交取得当日成交笔数,对于1分钟线取得当日交易分钟数
BARSLAST――上一条件成立位置—-上一次条件成立到当前的周期数。
用法:BARSLAST(X):上一次X不为0到现在的天数
例如:BARSLAST(CLOSE/REF(CLOSE,1)>=1.1)表示上一个涨停板到当前的周期数
BARSSINCE――第一个条件成立位置—-第一个条件成立到当前的周期数。
用法:BARSSINCE(X):第一次X不为0到现在的天数
例如:BARSSINCE(HIGH>10)表示股价超过10元时到当前的周期数
COUNT――统计—-统计满足条件的周期数。
用法:
COUNT(X,N),统计N周期中满足X条件的周期数,若N=0则从第一个有效值开始。
例如:COUNT(CLOSE>OPEN,20)表示统计20周期内收阳的周期数
DMA――动态移动车前均—-求动态移动平均。

 

 

用法:DMA(X,A),求X的动态移动平均。
算法: 若Y=DMA(X,A)则 Y=A*X+(1-A)*Y’,其中Y’表示上一周期Y值,A必须小于1。
例如:DMA(CLOSE,VOL/CAPITAL)表示求以换手率作平滑因子的平均价
HHV――最高值—-求最高值。
用法:HHV(X,N),求N周期内X最高值,N=0则从第一个有效值开始。
例如:HHV(HIGH,30)表示求30日最高价
HHVBARS――上一高点位置—-求上一高点到当前的周期数。
用法:
HHVBARS(X,N):求N周期内X最高值到当前周期数,N=0表示从第一个有效值开始统计
例如:HHVBARS(HIGH,0)求得历史新高到到当前的周期数
LLV――最低值—-求最低值。
用法:LLV(X,N),求N周期内X最低值,N=0则从第一个有效值开始。
例如:LLV(LOW,0)表示求历史最低价
LLVBARS――上一低点位置—-求上一低点到当前的周期数。
用法:
LLVBARS(X,N):求N周期内X最低值到当前周期数,N=0表示从第一个有效值开始统计
例如:LLVBARS(HIGH,20)求得20日最低点到当前的周期数
REF――目前的—-引用若干周期前的数据。
用法:REF(X,A),引用A周期前的X值。
例如:REF(CLOSE,1)表示上一周期的收盘价,在日线上就是昨收
SUM――累积—-求总和。
用法:SUM(X,N),统计N周期中X的总和,N=0则从第一个有效值开始。
例如:SUM(VOL,0)表示统计从上市第一天以来的成交量总和
SUMBARS―― 累加到指定周期数—-向前累加到指定值到现在的周期数。
用法:SUMBARS(X,A):将X向前累加直到大于等于A,返回这个区间的周期数
例如:SUMBARS(VOL,CAPITAL)求完全换手到现在的周期数
SMA――累积平均—-返回累积平均
用法:SMA(X,N,M):X的M日累积平均,M为权重,如Y=(X*M+Y’*(N-M))/N
MA:――简单移动平均—-返回简单移动平均
用法:MA(X,M):X的M日简单移动平均
EMA:――异同移动平均—-返回异同移动平均
用法:EMA(X,M):X的M日异同移动平均
MEMA―― 平滑移动平均—-返回平滑移动平均
用法:MEMA(X,M):X的M日平滑移动平均
EXPMA――加权移动平均—-返回加权移动平均
用法:EXPMA(X,M):X的M日加权移动平均
EXPMEMA――加权平滑平均—-返回加权平滑平均
用法:EXPMEMA(X,M):X的M日加权平滑平均
RANGE――幅差—- RANGE(A,B):AB幅差。
用法:RANGE(CLOSE,OPEN)
表示(CLOSE-OPEN)/OPEN
CROSS:上穿—-两条线交叉。
用法:CROSS(A,B)表示当A从下方向上穿过B时返回1,否则返回0
例如:CROSS(MA(CLOSE,5),MA(CLOSE,10))表示5日均线与10日均线交金叉
UPNDAY――连涨—-返回是否连涨周期数。
用法:UPNDAY(CLOSE,M)
表示连涨M个周期
DOWNNDAY――连跌—-返回是否连跌周期。
用法:DOWNNDAY(CLOSE,M)
表示连跌M个周期
NDAY――连大—-返回是否持续存在X>Y
用法:NDAY(CLOSE,OPEN,3)
表示连续3日收阳线
EXIST――存在—-是否存在。
用法:EXIST(CLOSE>OPEN,10)
表示前10日内存在着阳线
EVERY――一直存在—-一直存在。
用法:EVERY(CLOSE>OPEN,10)
表示前10日内一直阳线
LAST――持续存在—- LAST(X,A,B):持续存在。
用法:LAST(CLOSE>OPEN,10,5) 表示从前10日到前5日内一直阳线
若A为0,表示从第一天开始,B为0,表示到最后日止
NOT――取反—-求逻辑非。
用法:NOT(X)返回非X,即当X=0时返回1,否则返回0
例如:NOT(ISUP)表示平盘或收阴
IF――逻辑判断—-根据条件求不同的值。
用法:IF(X,A,B)若X不为0则返回A,否则返回B
例如:IF(CLOSE>OPEN,HIGH,LOW)表示该周期收阳则返回最高值,否则返回最低值
IFF―― 逻辑判断—- 根据条件求不同的值。
用法:IFF(X,A,B)若X不为0则返回A,否则返回B
例如:IFF(CLOSE>OPEN,HIGH,LOW)表示该周期收阳则返回最高值,否则返回最低值
IFN―― 逻辑判断—-根据条件求不同的值。
用法:IFN(X,A,B)若X不为0则返回B,否则返回A
例如:IFN(CLOSE>OPEN,HIGH,LOW)表示该周期收阴则返回最高值,否则返回最低值
MAX――较大值—-求最大值。
用法:MAX(A,B)返回A和B中的较大值
例如:MAX(CLOSE-OPEN,0)表示若收盘价大于开盘价返回它们的差值,否则返回0
MIN――较小值—-求最小值。
用法:MIN(A,B)返回A和B中的较小值
例如:MIN(CLOSE,OPEN)返回开盘价和收盘价中的较小值
ACOS―― 反余弦—-反余弦值。用法:ACOS(X)返回X的反余弦值
ASIN―― 反正弦—-反正弦值。用法:ASIN(X)返回X的反正弦值
ATAN―― 反正切—-反正切值。用法:ATAN(X)返回X的反正切值
COS――余弦—-余弦值。用法:COS(X)返回X的余弦值
SIN――正弦—-正弦值。用法:SIN(X)返回X的正弦值
TAN――正切—-正切值。用法:TAN(X)返回X的正切值
EXP――指数—-指数。用法:EXP(X)为e的X次幂。例如:EXP(CLOSE)返回e的CLOSE次幂
LN――自然对数—-求自然对数。用法:LN(X)以e为底的对数
例如:LN(CLOSE)求收盘价的对数
LOG――对数—-求10为底的对数。用法:LOG(X)取得X的对数
例如:LOG(100)等于2
SORT――开方—-开平方。用法:SQRT(X)为X的平方根
例如:SQRT(CLOSE)收盘价的平方根
POW――乘幂—-乘幂。用法:POW(A,B)返回A的B次幂
例如:POW(CLOSE,3)求得收盘价的3次方
ABS――绝对值—-求绝对值。用法:ABS(X)返回X的绝对值。
例如:ABS(-34)返回34
AVEDEV―― 平均绝对方差—- AVEDEV(X,N) 返回平均绝对方差
DEVSQ―― 数据偏差平方和—- DEVSQ(X,N) 返回数据偏差平方和
FORCAST――线性回归预测值—- FORCAST(X,N) 返回线性回归预测值
SLOPE―― 线性回归斜率—- SLOPE(X,N) 返回线性回归斜率
STD――估算标准差—- STD(X,N) 返回估算标准差
STDP―― 总体标准差—- STDP(X,N) 返回总体标准差
VAR―― 估算样本方差—– VAR(X,N) 返回估算样本方差
VARP―― 总体样本方差—- VARP(X,N) 返回总体样本方差

COST―― 成本分布—-成本分布情况。
用法:
COST(10),表示10%获利盘的价格是多少,即有10%的持仓量在该价格以下,其余90%在该价格以上,为套牢盘
该函数仅对日线分析周期有效
PEAK―― 波峰值—-前M个ZIG转向波峰值。
用法:
PEAK(K,N,M)表示之字转向ZIG(K,N)的前M个波峰的数值,M必须大于等于1
例如:PEAK(1,5,1)表示%5最高价ZIG转向的上一个波峰的数值
PEAKBARS―― 波峰位置—-前M个ZIG转向波峰到当前距离。
用法:
PEAKBARS(K,N,M)表示之字转向ZIG(K,N)的前M个波峰到当前的周期数,M必须大于等于1
例如:PEAK(0,5,1)表示%5开盘价ZIG转向的上一个波峰到当前的周期数
SAR―― 抛物转向—-抛物转向。
用法:SAR(N,S,M),N为计算周期,S为步长,M为极值
例如SAR(10,2,20)表示计算10日抛物转向,步长为2%,极限值为20%
SARTURN―― 抛物转向点—-抛物转向点。
用法:
SARTURN(N,S,M),N为计算周期,S为步长,M为极值,若发生向上转向则返回1,若发生向下转向则返回-1,否则为0
其用法与SAR函数相同
TROUGH―― 波谷值—-前M个ZIG转向波谷值。
用法:
TROUGH(K,N,M)表示之字转向ZIG(K,N)的前M个波谷的数值,M必须大于等于1
例如:TROUGH(2,5,2)表示%5最低价ZIG转向的前2个波谷的数值
TROUGHBARS―― 波谷位置—-前M个ZIG转向波谷到当前距离。
用法:
TROUGHBARS(K,N,M)表示之字转向ZIG(K,N)的前M个波谷到当前的周期数,M必须大于等于1
例如:TROUGH(2,5,2)表示%5最低价ZIG转向的前2个波谷到当前的周期数
WINNER―― 获利盘比例—-获利盘比例。
用法:
WINNER(CLOSE),表示以当前收市价卖出的获利盘比例,例如返回0.1表示10%获利盘;WINNER(10.5)表示10.5元价格的获利盘比例
该函数仅对日线分析周期有效
ZIG―― 之字转向—-之字转向。
用法:
ZIG(K,N),当价格变化量超过N%时转向,K表示0:开盘价,1:最高价,2:最低价,3:收盘价
例如:ZIG(3,5)表示收盘价的5%的ZIG转向

INDEXA―― 返回大盘成交额 INDEXADV ―― 返回上涨家数 INDEXDEC ―― 返回下跌家数
INDEXC ―― 返回大盘收盘价 INDEXH ―― 返回大盘最高价 INDEXL ―― 返回大盘最低价
INDEXO ―― 返回大盘开盘价 INDEXV ―― 返回大盘成交量

 

 

FINANCE(1) ―― 流通市值
FINANCE(2) ―― 流通股本
FINANCE(3) ―― 总市值
FINANCE(4) ―― 每股未分配利润
FINANCE(5) ―― 每股收益
FINANCE(6) ―― 每股公积金
FINANCE(7) ―― 每股净资产
FINANCE(8) ―― 股东权益比
FINANCE(9) ―― 上市日期
FINANCE(10) ――总股本
FINANCE(11)―― 国家股
FINANCE(12) ――发起人法人股
FINANCE(13) ――法人股
FINANCE(14) ――B股
FINANCE(15) ――H股
FINANCE(16) ――职工股
FINANCE(17) ――流动资产
FINANCE(18) ――固定资产
FINANCE(19) ――无形资产
FINANCE(20) ――长期投资
FINANCE(21) ――流动负债
FINANCE(22) ――长期负债
FINANCE(23) ――资本公积金
FINANCE(24) ――股东权益
FINANCE(25) ――主营收入
FINANCE(26) ――主营利益
FINANCE(27) ――其它利益
FINANCE(28) ――营业利益
FINANCE(29) ――投资收益
FINANCE(30) ――补贴收入
FINANCE(31) ――营业外收支
FINANCE(32) ――上年损益调整
FINANCE(33) ――利益总额
FINANCE(34) ――税后利益
FINANCE(35) ――净利益
FINANCE(36) ――未分配利益
FINANCE(37) ――调整每股净资产
FINANCE(38) ――总资产
DYNAINFO(1)―― 前收盘价
DYNAINFO(2) ―― 今开
DYNAINFO(3) ―― 最高
DYNAINFO(4) ―― 最低
DYNAINFO(6) ―― 现价
DYNAINFO(7) ―― 最新叫买价
DYNAINFO(8) ―― 最新叫卖价
DYNAINFO(9) ―― 总成交金额
DYNAINFO(10) ――内盘
DYNAINFO(11) ――外盘
DYNAINFO(12) ――总手
DYNAINFO(13) ――现手
DYNAINFO(14) ――笔升跌
DYNAINFO(15) ――买一价
DYNAINFO(16) ――买二价
DYNAINFO(17) ――买三价
DYNAINFO(18) ――买一量
DYNAINFO(19) ――买二量
DYNAINFO(20) ――买三量
DYNAINFO(21) ――卖一价
DYNAINFO(22) ――卖二价
DYNAINFO(23) ――卖三价
DYNAINFO(24) ――卖一量
DYNAINFO(25) ――卖二量
DYNAINFO(26) ――卖三量
DYNAINFO(27) ――市盈率
DYNAINFO(28) ――换手率
DYNAINFO(29) ――日升跌
DYNAINFO(30) ――笔升跌
DYNAINFO(31) ――内外比
DYNAINFO(32) ――委量差
DYNAINFO(33) ――委托比
DYNAINFO(34) ――涨幅度
DYNAINFO(35) ――振幅度
DYNAINFO(36) ――均价
DYNAINFO(37) ――量比

横向统计函数

BLOCKSETNUM 板块股票个数
用法: BLOCKSETNUM(板块名称) 返回该板块股票个数。

HORCALC 多股统计
用法: HORCALC(板块名称,数据项,计算方式,权重)
数据项:100-HIGH,101-OPEN,102-LOW,103-CLOSE,104-VOL,105-涨幅
计算方式: 0-累加,1-排名次
权重: 0-总股本,1-流通股本,2-等同权重,3-流通市值

绘图函数

PLOYLINE 折线段
在图形上绘制折线段。
用法: PLOYLINE(COND,PRICE),当COND条件满足时,以PRICE位置为顶点画折线连接。
例如: PLOYLINE(HIGH>=HHV(HIGH,20),HIGH)表示在创20天新高点之间画折线。

DRAWLINE 绘制直线段
在图形上绘制直线段。
用法: DRAWLINE(COND1,PRICE1,COND2,PRICE2,EXPAND)
当COND1条件满足时,在PRICE1位置画直线起点,当COND2条件满足时,在PRICE2位置画直线终点,EXPAND为延长类型。
例如: DRAWLINE(HIGH>=HHV(HIGH,20),HIGH,LOW<=LLV(LOW,20),LOW,1) 表示在创20天新高与创20天新低之间画直线并且向右延长。

DRAWKLINE 绘制K线
用法: DRAWKLINE(HIGH,OPEN,LOW,CLOSE) 以HIGH为最高价,OPEN为开盘价,LOW为最低,CLOSE收盘画K线。

STICKLINE 绘制柱线
在图形上绘制柱线。
用法: STICKLINE(COND,PRICE1,PRICE2,WIDTH,EMPTY),当COND条件满足时,在PRICE1和PRICE2位置之间画柱状线,宽度为WIDTH(10为标准间距),EMPTH不为0则画空心柱。
例如: STICKLINE(CLOSE>OPEN,CLOSE,OPEN,0.8,1)表示画K线中阳线的空心柱体部分。

DRAWICON 绘制图标
在图形上绘制小图标。
用法: DRAWICON(COND,PRICE,TYPE),当COND条件满足时,在PRICE位置画TYPE号图标。
例如: DRAWICON(CLOSE>OPEN,LOW,1) 表示当收阳时在最低价位置画1号图标。图标一共有九个,图形如附图。序号,最下面的是“1”号,最上面的是“9”号。

DRAWTEXT 显示文字
在图形上显示文字。
用法: DRAWTEXT(COND,PRICE,TEXT),当COND条件满足时,在PRICE位置书写文字TEXT。
例如: DRAWTEXT(CLOSE/OPEN>1.08,LOW,’大阳线’)表示当日涨幅大于8%时在最低价位置显示’大阳线’字样。

以上函数均为通达信的,目的熟悉函数,能够编写简单的公式和修改一些公式,能看懂一些公式是如何编的

常用语句,以方便朋友们编写公式时参考使用,初学的可以尝试对照一些简单的公式先试着自己修改以下.看看公式发生了哪些变化.

 

公式指标编辑必备(一)

1)今收盘对于N日内最低收盘价的涨幅(%)(c-llv(c,n))/llv(c,n)*100;

2)今收盘价对于N日最高收盘价的跌幅(%)(HHV(C,N)-C)/HHV(C,N)*100;

3)股价在过去N日内运行空间的相对位置 (C-LLV(L,N))/(HHV(H,N)-LLV(L,N))*100;

4)股价上方N1%至N2%处的筹码(%)
aa:=winner(c+c*n2/100)*100;
bb:=winner(c+c*n1/100)*100;
aa-bb

5)股价下方N1%至N2%处的筹码(%)
(winner(c-c*n1/100)-winner(c-c*n2/100))*100;

6)收盘价N%处的套牢盘 100-(winner(c*N/100))*100;

7)收盘价N%处的获利盘 winner(c*N/100)*100;

8)下影线 (MIN(O,C)-L)/L*100;

9)上影线 (h-**x(o,c))/**x(o,c)*100;

10)本周期的涨跌幅 (c-ref(c,1))/ref(c,1)*100;

11)振幅 (h-l)/l*100;

12)均线金叉(M.N为均线周期) cross(**(c,m),**(c,n))

13)均线多头排列
a1:=**(c,n1);
a2:=**(c,n2);
a3:=**(c,n3);
a4:=**(c,n4);
count(a1>a2 and a2>a3 and a3>a4,3);

14)均线空头排列
a1:=**(c,n1);
a2:=**(c,n2);
a3:=**(c,n3);
a4:=**(c,n4);
count(a1

15)N日均线向下
aa:=**(c,n);
bb:=ref(aa,2);
aa
16)向前N日至M日出现过均线死叉(P1
aa:=**(c,p1);
bb:=**(c,p2);
cc:=ref(cross(bb,aa),n);
count(cc,m);

17)今日成交量大于N日以来的均量 VOL>MA(VOL,N);

18)低位密集
A1:=COST(85);
A2:=COST(15);
A3:=A1-A2;
A4:=(A1+A2)/2;
A5:=A3/A4*100<10;
B1:=HHV(H,120);
B2:=LLV(L,120);
B3:=B1-B2;
B4:=(A4-B2)
A5 AND B4;

19)换手率 VOL/CAPITAL*100;

20)N日盈亏
V1:=VOL/SUM(VOL,N);
V2:=DMA(CLOSE,V1);
V3: (CLOSE-V2)/V2*100;

21)强势整理
{参数M、N分别代表周期和幅度 m:1 20 2 n:1 20 5}
a1:=abs(close-open)/open<0.015;
a2:=count(a1,m)=m;
a3:=ref(o,m)
ref(close,m)/ref(close,m+1)>1+n/100;
a2 and a3

22)高开大阴
{参数m,n分别代表幅度 m:1 10 4 n:1 20 5}
OPEN>CLOSE AND OPEN/REF(C,1) >= 1+M/100 AND CLOSE/OPEN<=1-N/100

23)低开大阳线
{参数m,n分别代表幅度 m:1 10 4 n:1 20 7}
OPEN<= 1-M/100 AND CLOSE/OPEN>=1+N/100

公式指标编辑必备(二)

编写条件选股公式时常用的通式。

一、放量、缩量(成交量函数为VOL)
1、放量:
(1).今天成交量较昨天增加了1倍,表示如下:
VOL/REF(VOL,1)>2

(2).今天成交量较10个交易日平均成交量放大了1倍,表示如下:
a:=**(vol,10);
Vol/a>2
或者直接用如下公式表示:
vol/**(vol,10)>2;

(3).今日的5日均量较10个交易日平均成交量放大了1倍,表示如下:
a:=**(vol,10);
b:=**(vol,5);
b/a>2;

(4).今日的成交量超过了整个流通盘的5%,表示如下:
vol/capital>0.05;其中capital代表流通盘。

2、缩量
(1).今日成交量较昨日减少了一半,表示如下:
vol/ref(vol,1)<0.5;

(2).今日成交量较10个交易日平均成交量减少一倍,表示如下:
a:=**(vol,10);
vol/a<2;
或者直接用如下公式表示:
vol/**(vol,10)<2;

(3).今日的5日均量较10个交易日平均成交量减少1倍,表示如下:
a:=**(vol,10);
b:=ref(a,5);
a/b<2;

(4).今日的成交量低于了整个流通盘的5%,表示如下:
vol/capital<0.05;

二、上涨、下跌

上涨:

今天的涨幅达到5%以上,表示如下:
close/ref(close,1)>1.05;

5日均价连续上涨,表示如下:
a:=**(close,5);
b:=ref(a,1);
b;

下跌:

今天的跌幅达到5%以上,表示如下:
close/ref(close,1)<0.95;

5日均价连续下跌,表示如下:
a:=**(close,5);
b:=ref(a,1);
a

(3)、K线的描述
close>open;阳线
close
open>ref(close,1);高开
open
open>ref(high,1);跳空高开(high为最高价)
open

三、走势特征选股公式的编制

(1)、n日内创新高
hhv(high,n)=hhv(high,0) and barscount(c)>=n;
注:n为指标参数,可在参数设定范围内设定参数范围。Hhv(x,n),求n周期内x最高值,n=0则从第一个有效值开始;barscount(x),将当前位置到n周期前的数值设为1,若x非0,则将当前位置到n周期前的数值设为1。

(2)、n日内创新低
llv(low,n)=llv(low,0) and barscount(close)>=n;
注n为指标参数,可在参数设定范围内设定参数范围。Llv(x,n),求n周期内x最低值,n=0则从第一个有效值开始;barscount(x)第一个有效数据到当前的天数,例如,barscount(close)以于日线数据取得上市以来总交易日数。

(3)、n日内阴线多于阳线
count(open>close,n)/n<0.5;
注:n为指标参数,可在参数设定范围内设定参数范围。同时可以自由编辑里面的数值(如0.5等 ,达到确定阴线占全部K线个数的比例)。

(4)、n日内阳线多于阴线
count(open0.5;
注:n为指标参数,可在参数设定范围内设定参数范围。同时可以自由编辑里面的数值(如0.5等 ,达到确定阳线占全部K线个数的比例)。

(5)、n日内上涨多于下跌(第二天开盘高于前一天收盘)
count(c>ref(c,1),n)/n>0.5;
注:n为指标参数,可在参数设定范围内设定参数范围。同时可以自由编辑里面的数值(如0.5等 ,达到确定其中比例)。

(6)、n日内上涨少于下跌(第二天开盘低于前一天收盘)
count(c>ref(c,1),n)/n<0.5;
注:n为指标参数,可在参数设定范围内设定参数范围。同时可以自由编辑里面的数值(如0.5等,达到确定其中比例)。

(7)、连续n日收阳线
up:=close>open;
count(up,n)=n;
注:count(x,n),统计n周期中满足x条件的周期数,若n=0则从第一个有效值开始。n为指标参数,可在参数设定范围内设定参数范围。

(8)、连续n日内收阴线
up:=close
count(up,n)=n;
注:count(x,n),统计n周期中满足x条件的周期数,若n=0则从第一个有效值开始。N为指标参数,可在参数设定范围内设定参数范围。

(9)、连续n天上涨
count(close>ref(close,1),n)=n;
注:count(x,n),统计n周期中满足x条件的周期数,若n=0则从第一个有效值开始。N为指标参数,可在参数设定范围内设定参数范围。

(10)、连续n天下跌
count(c
注:count(x,n),统计n周期中满足x条件的周期数,若n=0则从第一个有效值开始。N为指标参数,可在参数设定范围内设定参数范围。

(11)、首次创新高
barssince(c>hhv(if(barscount(c)=1,high,0),0))+1=1;
注:barscount(x),若x非0,则将当前位置到n周期前的数值设为1。

(12)、创历史新高
hhv(close,0)=close;
注:hhv(x,n),求n周期内x最高值,n=0则从第一个有效值开始。

(13)、创历史新低
llv(close,0)=close;
注:llv(x,n),求n周期内x最小值,n=0则从第一个有效值开始。

(14)、单日放量
a:=ref(**(vol,5),1);
vol/a>n and vol/capital*100>m;
注:n为指标参数,代表今日成交量和前一日的5日均量的比值,可在参数设定范围内设定参数范围。

(15)、阶段缩量
sum(vol,n1)/capital<=n2;
注:n1为要统计的阶段时间,n2为缩量比例,可在参数设定范围内设定参数范围。

(16)、阶段放量
sum(vol,n1)/capital>=n2;
注:n1为要统计的阶段时间,n2为y放量比例,可在参数设定范围内设定参数范围。

(17)、持续放量
a:=vol>ref(vol,1);
count(a,n)=n;
注:其中条件a的含义为成交量较上一交易日放大,n为要统计的阶段时间,可在参数设定范围内设定参数范围。

(18)、持续缩量
a:=vol
count(a,n)=n;
注:其中条件a的含义为成交量较上一交易日缩小,n为要统计的阶段时间,可在参数设定范围内设定参数范围。

(19)、间隔放量
a:=**(vol,5);
barscount(c)>=n and hhv(a,n)n2*a,n)>n3;
注:a.barscount(x)第一个有效数据到当前的天数。Barscount(c)对于日线数据取得上市以来总交易日数。
b.完整含义:n日内五日均量的最大值小于最小值的n1倍,成交量大于等于五日均量的n2倍的情况发生的次数多于n3次。

(20)、放量上攻
a:=(c-ref(c,1))/ref(c,1)>=(n/100);
sum(vol,n1)/capital>=(n2/100) and count(vol>ref(vol,1),n3 )=n3 and count(a,n3)=n3;
完整含义:每日股价涨幅均大于n%,n1日内累计换手率大于n2%,并且成交量连续在n3日内放大。

 

 

(21)、温和放量上攻
股价小幅上扬
a1:=close/ref(close,1);
a2:=a1>1 and a1<1.03;
成交量小幅上扬
b1:=vol/ref(vol,1);
b2:=b1>1 and b1<2;
c1:=**(vol,n)/capital<0.05;
count(a2 and b2,n)/n>0.6 and c1;
完整公式为:
a1:=close/ref(close,1);
a2:=a1>1 and a1<1.03;
b1:=vol/ref(vol,1);
b2:=b1>1 and b1<2;
c1:=**(vol,n)/capital<0.05;
count(a2 and b2,n)/n>0.6 and c1;
注:公式分为股价小幅上扬和成交量小幅上扬两个部分,请在指标编写时注意其结构。

(22)、突然放量
vol>ref(hhv(vol,n),1*m;
注:当前成交量高于n个周期中最大成交量的m倍。

(23)、平台整理
count(close,0)>n and (hhv(close,n)-llv(close,n))/llv(close,n)<=(n1/100);
注:count(close,0)>n为平台整理n个周期的设定。(hhv(close,n)-llv(close,n))/llv(close,n)<=(n1/100)为平台整理幅度n1%的设定。

(24)、突破长期盘整
ref(((hhv(h,n)-llv(l,n))/llv(l,n))/llv(l,n)),1)<=(n1/100) and c>=ref(hhv(h,n),1) and barscount(c)>n;
注:前n日在上下n1%的幅度内整理:ref(((hhv(h,n)-llv(l,n))/llv(l,n))/llv(l,n)),1)<=(n1/100);
今日突破:c>=ref(hhv(h,n),1)。

(25)、阶段强势股
a:=sum(if(date-n=0,indexc,0),0);
b:=sum(if(date-n1=0,indexc,0)0);
e:=sum(if(date-n=0,c,0),0);
f:=sum(if(date-n1=0,c,0),0);
((f-e)/e)>((b-a)/a);
注:该公式求的是n日-n1日之间涨幅高于大盘的股票。n、n1参数的表达格式为yymmdd,注意在2000年前的表达为年份的后两位,例如1999年为99,从2000年开始以100依次向后累加,例如2001年9月14日为1010914,indexc函数表示同期大盘的收盘价,该函数对分笔成交分析周期无效。

(26)、阶段弱势股
a:=sum(if(date=n,indexc,0),0);
b:=sum(if(date=n1,indexc,0)0);
e:=sum(if(date=n,c,0),0);
f:=sum(if(date=n1,c,0),0);
((f-e)/e)<((b-a)/a);
注:该公式求的是n日-n1日之间涨幅低于大盘的股票。n、n1参数的表达格式为yymmdd,注意在2000年前的表达为年份的后两位,例如1999年为99,从2000年开始以100依次向后累加,例如2001年9月14日为1010914,indexc函数表示同期大盘的收盘价,该函数对分笔成交分析周期无效。

(27)、大盘同步
count((c>o and indexc>indexo) or (cm/100;
注:含义为n周期中与大盘走势相同(同收阴线或同收阳线)的例超过m%。此处的o不是数字的零,而是开盘价open的首写字母o。

(28)、n日内强势股
a:=(c-ref(o,n))/ref(o,n);
b:=(indexc-ref(indexo,n))/ref(indexo,n);
a>b and a/b>=m;
注:n日内个股涨幅大于等于大盘涨幅的m倍。

四、形态特征选股公式的编制

(1)、均线多头排列
a1:=**(c,n1);
a2:=**(c,n2);
a3:=**(c,n3);
a4:=**(c,n4);
count(a1>a2 and a2>a3 and a3>a4,3)=3 and isup;
注:n1、n2、n3、n4j日均线呈多头排列,isup也可以用close>open表示。

(2)、均线空头排列
a1:=**(c,n1);
a2:=**(c,n2);
a3:=**(c,n3);
a4:=**(c,n4);
count(a1
注:n1、n2、n3、n4j日均线呈空头排列,isup也可以用close

(3)、早晨之星
ref(close,2)/ref(open,2<0.95 and ref(open,1)<0.03 andclose/open>1.05 and close>ref(close,2);
注:早晨之星,这种形态和叫法自然是后市向好,为买进信号。早晨之星由三根K线组成,其顺序是:第一天在下跌过程中已形成一根阴线:
ref(close,2)/ref(open,2<0.95
第二天呈裂口下跌,K线实体较短,构成星的主体部分,阴线或阳线均可,有无上下影线均不重要。
ref(open,1)<0.03
关键是第三根K线必须是阳线,且其长度至少要升至第一根阴线实体(如果能够“包容”第一根阴线则最好不过了)
close/open>1.05 and close>ref(close,2)

(4)、强势整理
a1:=abs(close-open)/open<0.015;
a2:=count(a,m)=m;
a3:=ref(o,m)1+n/100;
a2 and a3;
注:一根实体超过n的长阳,后面跟m个K线实体不超过1.5%的K线。

(5)、高开大阴线
open>close and open/ref(c,1)>=1+m/100 and close/open<=1-n/100;
注:跳空高开m%,当日股价较开盘价跌幅大于n。股价经过一段持续攀升之后,某一日突然跳高开盘:
open/ref(c,1)>=1+m/100
后股价一路下行,尾市以接近最低点收市:
close/open<=1-n/100
此信号出现,往往意味着股价已形成短期头部,应注意回避风险。

(6)、低开大阳线
open<=1-m/100 and close/open>=1+n/100;
注:跳空低开m%,当日股价较开盘价涨幅大于n,其他描述请参见(5)。

(7)、黄昏之星
ref(close,2)/ref(open,2)>1.03 and ref(open,1)>ref(close,2) andabs(ref(open,1)-ref(close,1)/ref(close,1)<0.02 andclose/open<0.97 and close
注:黄昏之星表示股价回落,是卖出信号,应伺机抛货。幕星同样由三根K线组成,其形态晨星正好相反:
第一天股价继续上升,拉出一根阳线:
ref(close,2)/ref(open,2)>1.03
第二天波动较小,形成一根小阳线或小阴线,构成星的主体部分:
ref(open,1)>ref(close,2) and abs(ref(open,1)-ref(close,1)/ref(close,1)<0.02
第三天形成一根包容第二天并延伸至第一天阳线实体:
close/open<0.97 and close

(8)、跳空缺口
highref(high,1);
注:从内容上看,分别是向下跳空缺口和向上跳空缺口。

(9)、均线金叉
a;=**(c,5);
b:=**(c,10);
cross(a,b);
注:前二句是5、10日均线,cross是交叉函数,cross(a,b)表示5日均线与10日均线金叉。

(10)、均线死叉
a;=**(c,5);
b:=**(c,10);
cross(b,a);
注:前二句是5、10日均线,cross是交叉函数,cross(b,a)表示5日均线与10日均线死叉。

(11)、均线粘合
**1:=**(c,5);
**2:=**(c,10),
**3:=**(c,20);
p1:=abs(**1-**2)+abs(**2-**3);
p1/cref(**1,1) and **2>ref(**2,1);
注:前三句是三根均线,p1是第一根均线减第二根均线差的绝对值与第二根均线减第三根均线差的绝对值之和,最后一句是p1与收盘价的比值小于一定比率m%(一般该比率为2%以下,同时前二均线今日比昨日上翘。

指标公式编辑必备(三)

1.成交量连续5天超过30天均量点
count(vol>**(vol,30),5)=5

2.编一选股公式;要求1;日均线多头排列的情况下(5,10,30,60。。。)2:5日。10日均线高度粘合–相等或相差1-2分钱,30均线与5,10均线相差1角以下。3:日量比大于2。先谢谢!!!

1.**(c,5)>**(c,10) and **(c,10)>**(c,30) and **(c,30)>**(c,60) and 。。。

2.abs(**(c,5)-**(c,10))<0.03 and abs(**(c,30)-**x(**(c,5),**(c,10)))<0.1

3.DYNAINFO(17)>2

3.威力雷达rad7日内连续上扬怎样编写?谢谢
V1:=(c/ref(c,1)-indexc/ref(indexc,1))*200;
RAD:=sum(v1,0);

count(rad>ref(rad,1),7)=7

威力雷达Mrad在7日内连续上扬怎样编写?谢谢
V1:=(c/ref(c,1)-indexc/ref(indexc,1))*200;
RAD:=sum(v1,0);

MRAD:=MA(RAD,30);

count(mrad>ref(mrad,1),7)=7

4.请问。10日内涨幅大于10%的选股公式怎样编?
c/ref(c,10)>1.1

5.如何编写股价在一个上涨或下跌的行情中第3次触及30日均线时发出提醒的指标?
M3:=MA(C,30);

N1:=BARSLAST(M3>REF(M3,1));

AA:=CROSS(C,M3);

COUNT(AA,N1)=3

6.请问:cys指标中数值要小于-5,怎样编写到其他指标中.,谢谢!
(C-CYC(13))/CYC(13)*100<-5

7.当涨幅大于5%,要主图K线的实体的一半变为另一色。如何表达?
STICKLINE(c/ref(c,1)>1.05,(c+o)/2,c,10,1),coloryellow;

8.成交量连续3天涨的公式
COUNT(VOL>REF(VOL,1),3)=3

9.请问怎样用公式表示年线摆脱下降趋势出现向上拐头?
COUNT(MA(C,250)>REF(MA(C,250),1),3)=3

10.股价创出新高后,又调整到30日均线附近的选股公式如何编写?

COUNT(C>=HHV(C,N),5)=1 AND C/MA(C,30)>=1 AND C/MA(C,30)<1.02

11.怎么定义一阳线紧跟两阴线的函数?
ref(c,2)>ref(o,2) and ref(c,1)

12.60日线在过去的10天内涨跌幅度在 1%
COUNT(BETWEEN(**(c,60),ref(**(c,60),10)*1.01,ref(**(c,60),10)*0.99),10)=10;

13.RSI(周线)在70天内第二次上穿80,如何编制?
COUNT(CROSS(“RSI.RSI1#WEEK”,80),70)=2

14.今天涨幅3%昨天涨幅2%前天涨幅1%的个股
(c-ref(c,1))/ref(c,1)>0.3 and (ref(c,1)-ref(c,2))/ref(c,2)>0.2 and (ref(c,2)-ref(c,3))/ref(c,3)>0.1

15.破5天线,3天后又重新站上5天线的个股
cross(ref(**(c,5),3),ref(c,3)) and cross(c,**(c,5))

16.今天一阳上穿5,10,30天线个股
cross(c,**(c,5) and cross(c,**(c,10)) and cross(c,**(c,30))

17.3天内5天线上穿10天线,10天线上穿20天线的个股
count(cross(**(c,5),**(c,10)),3)>=1 and count(cross(**(c,10),**(c,20)),3)>=1

如何开展大单元教学设计?

阅读(0)

01

什么是大单元教学设计?

新时代教学变革,新课标、新教材、新高考、新评价“四新”背景下的“新教学”,其中很重要的一点就是素养本位的大单元教学。如何改变落后的教学和学习方式,让学习由浅层走向深度,是教育教学改革的核心问题,也是很多教师所面临的重要教研课题。

义务教育课程方案修订组组长,华东师范大学课程与教学研究所所长、教授崔允漷在其《学科核心素养呼唤大单元教学设计》一文中指出:“大单元教学有三层内涵:一是学科核心素养导向的教学倡导大概念、大任务、大观念与大问题的设计,以此来改变教师的格局;二是针对许多教师只关注知识、技能与分数等,而忽视学生能力、品格与观念培养的问题,应着眼于全面育人的‘大道理’;三是从时间维度来看,大单元教学有利于教师正确理解时间与学习的关系,确立‘以学习者为中心’的观念。”

简而言之,作为教师应该在深度研读和分析课标和教材的基础上,从学生的角度出发,站在更高的角度上开展课程设计。在设计之前,老师应该做到以下几个方面:

1.详细分解课标

2.研读单元教材

3.研读单元章前页(如有)

4.认真研读单元课文

5.分析单元内容并整合

6.单元拓展运用

7.深解单元习题

事实上,大单元教学设计既可以依据教材的自然单元进行设计,也可以根据本学科或多学科整合进行重组,当然重组大单元对教师的能力也提出了更高的要求。

02

怎样开展大单元设计?

如何研究落实新课标,进行大单元设计,实现教学评一致?教育部2022年义务教育语文课程标准修订组核心成员,西南大学教授荣维东在《大单元教学的基本要素与实施路径》中指出教学实施的基本步骤大致有如下四个:

第一,确定情境性任务目标。

衡量教学目标,一要依据国家的课程标准,进行课程标准目标分解;二要依据学生学情,了解学生的学习水平和学习需要;三要合理利用教材文本,对教材的单元目标和课时目标进行分析梳理;四要将这些教学目标转化为情境性的任务和活动设计,这也是更为关键的。

第二,设计统整性教学内容。

进行教学内容统整,首先面对的是基于情境性任务的核心知识(大概念)研发。此外,教师要合理选择和利用各种课程资源。这也对教师的业务能力提出了更高的要求。因而,教师是否是一个“爱读书、广涉猎”的人,学校能否为学生提供学习活动所需要的各种材料、文本和课程资源,对于大单元教学以及任务群教学极为关键。

第三,课程活动和经验设计。

即设计教学活动、支架、策略、流程,促使学生形成有效课程经验。如何设计富有创意的、学生喜欢参与且切实有效的学习活动,是大单元教学最重要的一环。

第四,课程经验交流和评价。

这个环节与课程目标、课程内容是紧密联系的。现在越来越多的教师注重过程性评价甚至前置性评价。逆向教学设计将这个环节前置,就是想发挥评价的引领、指导、监控作用。

在备课实际中,教师可这样来操作:

1.分析:把握与理解课标,分析教材和学情,明确大单元目标(核心素养)。

2.设计:根据单元目标撰写大单元设计理念,并制作教学结构图、课时规划表。

3.开发:对大单元主题下的教材进行开发与利用,梳理教学流程和教学活动,选择合适的教学策略以及教学方式。

4.实施:分课时实施。

5.评价。

【案例】

下面通过一个案例具体了解如何进行大单元设计。实施案例节选自湖南地质中学黄尚喜团队——高中语文必修上册《第一单元 青春激扬》大单元教学设计。

01

教材分析

本单元以“青春激扬”为人文主题,由三课构成,选入诗歌五首《沁园春·长沙》《立在地球边上放号》《红烛》《峨日朵雪峰之侧》《致云雀》,小说两篇《百合花》《哦,香雪》。

本单元学习中外现当代诗歌与小说,与必修上册第三单元的中国古代诗歌、必修上册第七单元的中国古今散文、必修下册第二单元的中外古今戏剧、必修下册第六单元的中外古今小说,共同构成“文学阅读与写作”任务群的学习内容。

《普通高中语文课程标准(2017年版2020年修订)》(以下简称“课程标准”)指出:“本任务群旨在引导学生阅读古今中外诗歌、散文、小说、剧本等不同体裁的优秀文学作品,使学生在感受形象、品味语言、体验情感的过程中提升文学欣赏能力,并尝试文学写作,撰写文学评论,借以提高审美鉴赏能力和表达交流能力。”

02

单元目标

1.感受革命领袖的伟大革命抱负和豪放胸襟,理解文章作者对国家前途命运的关注,激发青春的热情,理解春青的价值,敞开心扉,追寻理想,拥抱未来。

2.领会本单元诗歌与小说的内容,理解诗歌运用意象抒发情感的手法,把握小说叙事和抒情的特点,体会诗歌和小说的独特魅力。

3.学习从语言、形象、情感特点等不同角度欣赏作品,获得审美体验,提高文学作品的鉴赏能力。

4.结合本单元诗作的学习,尝试写作诗歌。可以以本单元的作品为学习的范本,也可以选择自己喜欢的中外诗歌作为研习的材料,从生活出发,寻找素材,激发诗情,抒发真情实感。掌握诗歌写作的一般技巧,注重语言的锤炼。

03

单元大任务

根据课程标准、教材文本及助读系统,以单元目标为导向,确定本单元的大任务为“编写班级诗册”:

在阅读、鉴赏本单元五首诗的基础上,总结诗歌创作规律,制定诗歌鉴赏评价标准,并以此为依据,结合阅读本单元诗歌和小说所引发的对青春的感受和思考,为班级诗册《青春之歌》创作诗歌。依据诗歌鉴赏评价标准,对创作的诗歌进行鉴赏与评价,并将评选出的优秀作品结集成班级诗册《青春之歌》。举办“青春礼赞——以诗歌的名义”诗歌朗诵会,从班级诗册《青春之歌》中挑选适合朗诵的作品进行朗诵表演。

04

具体任务与课时分配

本单元教学设计从诗歌意象和小说叙述艺术两个维度,分两个板块教学。

第一板块 如何阅读、创作诗歌(七课时)

重点研读第1课《沁园春•长沙》和第2课《立在地球边上放号》《红烛》《峨日朵雪峰之侧》《致云雀》。

第一课时 初读感知,知人论世

第二课时 分析诗中意象,把握诗歌情感

第三课时 分析抒情主人公形象,把握诗歌情感

第四课时 分析诗中意象与抒情主人公形象,把握诗歌情感

第五课时 把握诗歌语言特点,学习创作诗歌

第六课时 制定诗歌鉴赏评价标准,评选诗歌

第七课时 诗歌朗诵会

第二板块 如何阅读小说(三课时)

重点研读第3课《百合花》《哦,香雪》。

第八课时 梳理情节,总结小说叙述技巧

第九课时 鉴赏人物,分析细节描写和环境描写作用

第十课时 鉴赏物象,深入探究小说主题

05

思维导图

图片

学无止境,关于教学设计永远不止于一个定义、一种做法。大单元教学、跨学科融合、信息技术融合最终都是为了更好地育人。相信好学、勤学的老师一定可以变得更加优秀。

英语学习——轻松搞定七选五两步走

阅读(23)

高考阅读理解信息匹配的七选五题型,主要考查考生对文章的整体内容和结构以及上下文逻辑意义的理解和掌握。下面我们一起来看看如何两步搞定七选五吧!

第一步 看位置→定类型

句子在段中的位置不同,所起的作用也不同。出题人之所以采用段首、段中和段尾三种挖空方式,正是利用挖空位置的暗示作用和挖空上下文的提示作用,来考查考生的逻辑思维能力。

【段首题】

  1. 主旨句:常以段落小标题或主题句的形式出现。
  2. 承上启下句:此空处的答案能够将上段和下段的内容连贯起来。

【段中题】

  1. 并列关系:常见的表示并列关系的标志词语有:and, first(ly), second(ly), first, then / next, to begin with, some … others …, for one thing … for another thing …, then / next, finally / last等。
  2. 转折关系:若空格前后两句之间是逻辑上的逆转,则空格处很有可能表示转折。常见的表示转折关系的标志词语有:but, however, yet, while / though / although, or / otherwise, on the contrary, instead, nevertheless(然而), still, in contrast / comparison, by comparison等。
  3. 递进关系:若空格前后两句之间是逻辑上的递进关系,则空格处很有可能是个表示递进的句子。常见的表示递进关系的标志词语有:too, also, besides, further, furthermore, moreover, likewise, similarly, what’s more, what’s worse, in addition, as well, to make matters worse, not … but …, not only … but also …等。
  4. 因果关系:常见的表示因果关系的标志词语有:so, therefore, thus, consequently(结果), as a result (of), so / such … that …, so that …等。
  5. 例证关系:前后的某句是为了证明另一句而举的例子。例证的形式具有多样性,思维过程基本是归纳(从例子到观点)和推理(从观点到例子)。常见的表示例证关系的标志词语有:for example, for instance, in fact/as a matter of fact, actually, in other words / that is to say等。

【段尾题】

  1. 总结句用于总结本段内容,常含有总结性的词语。
  2. 承上启下句:此空处的答案能够将上段和下段的内容连贯起来。

第二步 由类型→定技法

【主旨概括题】

主旨概括题主要考查考生对文章或段落进行概括的能力,它要求考生在阅读文章时,能够提炼其中心思想,体会作者的写作意图,充分运用概括能力提取文章的主题、观点以及作者的情感态度。这类题常以考查段落标题为主,设题位置一般在段首,有时总结性的语句也会出现在段中或段尾。这类题有时也会考查整篇文章的主旨大意,即文章的主题句,一般会在首段设空。概括起来讲,命题人通常从两个方面设题:①概括文章或段落的主题句或结论性语句;②段落标题。

解答主旨概括题通常采用浏览的方式,即重点搜索本段的主题线索词并快速理清主旨大意,然后浏览选项,准确判定出与主旨大意匹配的选项。

【语段过渡题】

语段过渡题所涉及的句子是过渡句,具有承上启下的作用,该题型主要考查考生对篇章的理解能力和对上下文之间逻辑关系的分析能力。其设空位置比较灵活,可位于段首、段中或段尾。解这类题通常可采用位置判断法

如果设空位于段首,要前瞻后望找提示,即阅读上一段结尾部分,通常正确答案与之衔接,并结合本段内容,看所选的答案是否能将两段内容连贯起来。

如果设空位于段中重点阅读该空的前一句和后一句,找出它们之间的逻辑关系或根据意义的连贯性得出答案;如果还没有把握,再分析该段的中心句。

如果设空位于段尾在选项中找不出与前文之间的关联时,可考虑与下一段开头之间的衔接。仔细阅读下一段开头几句,看是否能与所选选项紧密连接起来。

【细节线索题】

细节线索类的试题要求考生更加注重文章中的细节,比如某个关键的单词或数字等。解答这类试题经常用到的方法有:词汇复现法词汇同现法代词线索法逻辑关系线索法等。

  1. 词汇复现法

复现法是保证文章前后衔接而经常使用的一种写作手段,即在文章中不同的位置对同一个概念进行重复描述,从而使得同样的意思在文章中不同的地方重复出现。复现的形式主要包括原词复现、同义词复现、反义词复现等。考生可利用文章的这一特点,在解题时注意选项中出现的与正文意思相同、相近或相反的词

  1. 词汇同现法

词汇同现是指属于同一词汇范畴或者某一领域的词汇在文章中同时出现,达到语意衔接的目的。一般来说,上下文中词汇的范畴越小,上下文的衔接关系越紧密。

  1. 代词线索法

英语文章中代词出现的频率极高,代词一般用来指代前面提及的名词,考生如果能巧妙地利用这样的指代关系或根据代词的单复数就可以准确而快速地解题。

  1. 逻辑关系线索法

一篇文章往往是一个有机的整体,各部分之间存在着一定的联系。从逻辑意义上来看,句子与句子之间常常有并列、顺承、递进、转折、总分、解释、因果、过渡、例证等关系,有时甚至包含不止一种这样的关系。因此,理解阅读材料时一定要把握文章脉络,弄清其中的逻辑关系。如果文中或选项中出现了逻辑关系词,考生就可以利用其来进行推理判断;如果文中或选项中未出现逻辑关系词,这就需要考生全面理解文章大意,根据上下文语境弄清文章内在的逻辑关系,作出正确的判断。

【案例分析(2022新高考I卷)】

Fitness Magazine recently ran an article titled “Five Reasons to Thank Your Workout Partner.” One reason was: “You’ll actually show up if you know someone is waiting for you at the gym,” while another read: “  1  ” With a workout partner, you will increase your training effort as there is a subtle (微妙) competition.

So, how do you find a workout partner?

First of all, decide what you want from that person.   2   Or do you just want to be physically fit, able to move with strength and flexibility? Think about the exercises you would like to do with your workout partner.

You might think about posting what you are looking for on social media, but it probably won’t result in a useful response.   3   If you plan on working out in a gym, that person must belong to the same gym.

My partner posted her request on the notice board of a local park. Her notice included what kind of training she wanted to do, how many days a week and how many hours she wanted to spend on each session, and her age. It also listed her favorite sports and activities, and provided her phone number.   4

You and your partner will probably have different skills.   5   Over time, both of you will benefit — your partner will be able to lift more weights and you will become more physically fit. The core (核心) of your relationship is that you will always be there to help each other.

  1. Your first meeting may be a little awkward.
  2. A workout partner usually needs to live close by.
  3. You’ll work harder if you train with someone else.
  4. Do you want to be a betterathlete in your favorite sport?
  5. How can you write a good “seeking training partner”notice?
  6. Just accept yourdifferences and learn to work with each other.
  7. Any notice for a training partner should include such information.

第一步(看位置):1、2、3、5位于段中,4位于段尾。

第二部(定技法):

  1. 1. C(位置判断法):空前提到感谢健身搭档的五个理由,其中一个是“如果知道有人在健身房等你,你就会去健身房”,由“while another read”可知,空处应该是另一个理由,且空后提到“和健身搭档一起,你会更努力训练,因为你们之间有一种微妙的竞争”。C选项“如果你和别人一起训练,你会更努力”承上启下,符合语境。
  2. 2. D(逻辑关系线索法)第二段和本段开头提到关于如何找到健身搭档,首先要决定你想从健身搭档那里得到什么,根据空后一句“Or do you just want to be physically fit…?”可知,D选项“你想在你最喜欢的运动上成为更好的运动者吗?”和它是并列关系,均是用提问方式提示读者思考想要在健身搭档那里获得什么,承接上文,符合语境。
  3. 3. B (位置判断法)空后讲的是如果你打算在健身房锻炼,你和健身搭档一定得在同一个健身房,由此可知,空处应该和距离健身搭档远近有关,B选项“健身搭档通常需要住在附近”承接下文,符合语境。
  4. G (词汇复现法)本段开头提到我的搭档把她的要求贴在了当地公园的布告栏(thenotice board)上,接下来又对布告(notice)的内容做了具体的介绍。作者以自己搭档发布的布告为例,目的是介绍发布告的注意事项,故G选项“任何健身搭档的布告(notice)都应包括这些信息”符合语境。
  5. F (位置判断法)空前作者提到你和你的搭档可能有不同的技能,空后提到随着时间的推移,你和你的搭档都会受益,由此可以推断,F选项“接受你们的不同,学会彼此合作”承上启下,符合语境。