《飞狐公式编写基础》和《通达信公式教程》(二)

来源:百度文库 编辑:神马文学网 时间:2024/04/20 10:15:53
2008-12-20 09:51:03
新增函数应用:如何遍历板块股票代码
PHP代码:--------------------------------------------------------------------------------
bk:='深圳A股';
variable:j=1,k=0,dm_len=0,lstr[6]='00000',blksum:=STKCOUNT(bk),dmstr[blksum]='';
lstr[2]:='0000';lstr[3]:='000';lstr[4]:='00';lstr[5]:='0';lstr[6]:='';
while j<=blksum do begin
dm:=NumToStr(k,0);
dm_len:=strlen(dm);
dm:=lstr[dm_len]+dm;
if stkinblock(dm,bk) then begin
dmstr[j]:=dm;
j:=j+1;
end;
k:=k+1;
end;
//以下是一些字符串函数及运算的综合应用
EXPLAIN(1,dmstr[1]);  //在解盘中,输出深圳A股第1只股票的代码
EXPLAIN(1,stknameex(dmstr[2]));//第2只股票的名称
EXPLAIN(1,dmstr[3]+stknameex(dmstr[3]));//第3只股票的代码及名称
EXPLAIN(1,'深圳A股第4只股票的代码是:'+dmstr[4]);
EXPLAIN(1,dmstr[5]+'最后收盘价:'+numtostr(close,2));
EXPLAIN(1,'深圳A股共有股票:'+numtostr(blksum,0)+'只');--------------------------------------------------------------------------------
如果您有编程的功底,上面代码一看就明白,但对没有编程经验的狐友们来说就不容易了。下面尽量详细地对思路和公式代码做一些解说,并对代码进行适当扩展。
1、所谓遍历股票代码,就是能够访问某板块中所有的股票代码,如果连访问都不能实现,怎么做一些更加强大的诸如横向统计、排序的功能?
2、上面的公式代码是以深圳A股板块为例,我们看看深圳A股的股票代码,它们都是很有规律的,000001、000002、...、000999、001696、001896,请注意这些代码的特征:
①股票代码要理解成字符串,而不是数值,如果是数值的话,股票代码就成了1、2、...、999、1696、1896。
②这些代码如果转换成数值,大体集中在某个数的范围,如上面所示,深圳A股代码的数值目前都小于1896,代码的数值大多都是呈递增1的规律,少量有跳跃的情况,比如000040跳到000042,000041不存在。
因此,我们初步可以设计一个循环
PHP代码:--------------------------------------------------------------------------------
j:=0;
while j<=1896 do
begin
j:=j+1;
end;--------------------------------------------------------------------------------
上面这段代码,是个循环,每次循环都执行一次由begin和end所包围起来的语句,这里只有一条语句即j:=j+1,目的让变量j从1每次循环都递增1,直到j=1896为止。
j:=j+1这条赋值语句,初次接触的话不大好理解,大意是这样,右边的j比如现在等于2,这条语句是让右边的j现有的数值加上1,然后再送回到变量j之中,执行完这条语句后,j就由2递增1变成了等于3。
j:=j+1,看起来有点象计数器的功能吧?每循环一次,计数器就增加1,因此也可以称变量j为计数器(变量)。
好了,思路敏捷的狐友,马上就能想到,这个计数器会生成从0到1896总共1897个数值,如果进行转换,也就是把数值转换成字符串,则深圳A股所有的股票代码都包含在里面了。
呵呵,的确是这样,因此我们设计下面一个稍加改进的循环,来逼近我们要完成的任务:
PHP代码:--------------------------------------------------------------------------------
j:=0;
while j<=1896 do
begin
dm:=NumToStr(j,0);  //把数值j转换成字符串并赋值给变量dm,保留小数位数0
j:=j+1;
end;
EXPLAIN(islastbar,dm); //当处在最后一根K线位置时,输出字符串dm的内容--------------------------------------------------------------------------------
最后一行代码,是用解盘函数输出字符串变量dm的结果,我们可以在“解”中观察,不过这里由于dm是单值变量,不是序列变量,只能保存最后的一次结果,因此只能观察到结果是1896。
如果想观察其它的结果,只好改循环首语句,比如:
while j<=1 do
大家可以发现这些结果,还有一点小问题,没有前导的0,即我们要的是000001、0001896,而不是1、1896这样的字符串,怎么办呢?
给它们的前面加上0就可以了,但加上0的个数有讲究的,比如1在前面要加上5个0,1896前面只需加上2个0,很明显,要加的0的个数,等于6减字符串的字符个数。因此,设计公式代码如下:
PHP代码:--------------------------------------------------------------------------------
variable:lstr[6]='00000';//定义一个数组lstr[6],共6个元素,并让所有6个元素初始都等于字符串'00000'
//下面对字符串数组lstr[]第2至第6个元素重新进行赋值,以便巧妙应用
lstr[2]:='0000';lstr[3]:='000';lstr[4]:='00';lstr[5]:='0';lstr[6]:='';
j:=0;
while j<=1896 do
begin
dm:=NumToStr(j,0);  //把数值j转换成字符串并赋值给变量dm,保留小数位数0
dm_len:=strlen(dm); //求出dm的长度,并赋值给变量dm_len
dm:=lstr[dm_len]+dm;  //由dm的长度,确定应该给dm的前面加上多少个字符0
j:=j+1;
end;
EXPLAIN(islastbar,dm); //当处在最后一根K线位置时,输出字符串dm的内容--------------------------------------------------------------------------------  对这行代码稍加解释:dm:=lstr[dm_len]+dm,如果某次循环右边的dm等于'19',则它的字符串长度为dm_len等于2,则这行代码此时等价于dm:=lstr[2]+dm,而lstr[2]等于'0000',结果就是在'19'的前面加上4个字符'0'即成了'000019',然后再把'000019'赋值给dm,于是左边的dm就等于'000019'
到此为止,我们只是实现了所生成的字符串,可以让深圳A股的代码全部被包含在其中,但还有大量的“废”字符串,我们要把没用的字符串过滤掉。取出我们真正需要的。  要用到的函数  ①stkinblock(dm,bk),函数注释:如果股票代码dm从属于板块bk,则函数返回数值1,否则返回数值0  ②条件控制语句IF cond THEN expr1 ELSE expr2,意思是:当满足 cond 条件的时候,执行语句 expr1,否则执行 expr2 语句  设计代码如下:PHP代码:--------------------------------------------------------------------------------
variable:lstr[6]='00000';
lstr[2]:='0000';lstr[3]:='000';lstr[4]:='00';lstr[5]:='0';lstr[6]:='';
j:=0;
bk:='深圳A股'; //bk赋值为字符串'深圳A股'
while j<=1896 do
begin
dm:=NumToStr(j,0);  //把数值j转换成字符串并赋值给变量dm,保留小数位数0
dm_len:=strlen(dm); //求出dm的长度,并赋值给变量dm_len
dm:=lstr[dm_len]+dm;  //由dm的长度,确定应该给dm的前面加上多少个字符0
if stkinblock(dm,bk) then //如果股票代码dm属于bk,则执行下面由begin、end包含的语句
begin
dm1:=dm;  //真正需要的股票代码是这里的dm1
end;
j:=j+1;
end;
EXPLAIN(islastbar,dm1); //当处在最后一根K线位置时,输出字符串dm1的内容--------------------------------------------------------------------------------
公式代码设计到这里似乎可以结束了,因为我们要的结果都可以生成了。其实还有改进的余地:  ①dm1只是个单值的字符串变量,它只能保存最后的结果,而不能保存所有的结果。这里考虑使用数组,数组可以自行定义很多个元素,让每个元素保存一个结果。  ②循环首的j<1896总觉得不对劲,不够智能化,比如将来“深圳A股”板块最后的代码不是0001896,则这段公式代码的结果就不对了。  针对以上问题,设计公式代码如下: PHP代码:--------------------------------------------------------------------------------
variable:lstr[6]='00000';
lstr[2]:='0000';lstr[3]:='000';lstr[4]:='00';lstr[5]:='0';lstr[6]:='';
j:=0;  //记录循环次数的计数器
k:=1;  //记录股票代码的个数的计数器
bk:='深圳A股'; //bk赋值为字符串'深圳A股'
blksum:=STKCOUNT(bk); //板块所包含证券数量
variable:dmstr[blksum]='';  //定义一个字符串数组用于记录股票代码,元素个数为blksum,初始值为空
while k<=blksum do  //当计数器k<=blksum时,执行以下循环
begin
dm:=NumToStr(j,0);  //把数值j转换成字符串并赋值给变量dm,保留小数位数0
dm_len:=strlen(dm); //求出dm的长度,并赋值给变量dm_len
dm:=lstr[dm_len]+dm;  //由dm的长度,确定应该给dm的前面加上多少个字符0
if stkinblock(dm,bk) then //如果股票代码dm属于bk,则执行下面由begin、end包含的语句
begin
dmstr[k]:=dm;  //真正需要的股票代码,记录到字符串数组dmstr的第k个元素中
k:=k+1;  //记录找到的股票代码的个数
end;
j:=j+1;  //记录循环的次数
end;
EXPLAIN(islastbar,dmstr[1]); //当处在最后一根K线位置时,输出深圳A股第1只股票的代码--------------------------------------------------------------------------------
有了以上公式,我们就可以把范围扩大,比如遍历'A股板块'的所有股票代码,很简单,只需改一条语句,即把 bk:='深圳A股' 改成 bk:='A股板块'。  公式代码如下(且慢执行,等下面的解说):PHP代码:--------------------------------------------------------------------------------
variable:lstr[6]='00000';
lstr[2]:='0000';lstr[3]:='000';lstr[4]:='00';lstr[5]:='0';lstr[6]:='';
j:=0;  //记录循环次数的计数器
k:=1;  //记录股票代码的个数的计数器
bk:='A股板块'; //bk赋值为字符串'深圳A股'
blksum:=STKCOUNT(bk); //板块所包含证券数量
variable:dmstr[blksum]='';  //定义一个字符串数组用于记录股票代码,元素个数为blksum,初始值为空
while k<=blksum do  //当计数器k<=blksum时,执行以下循环
begin
dm:=NumToStr(j,0);  //把数值j转换成字符串并赋值给变量dm,保留小数位数0
dm_len:=strlen(dm); //求出dm的长度,并赋值给变量dm_len
dm:=lstr[dm_len]+dm;  //由dm的长度,确定应该给dm的前面加上多少个字符0
if stkinblock(dm,bk) then //如果股票代码dm属于bk,则执行下面由begin、end包含的语句
begin
dmstr[k]:=dm;  //真正需要的股票代码,记录到字符串数组dmstr的第k个元素中
k:=k+1;  //记录找到的股票代码的个数
end;
j:=j+1;  //记录循环的次数
end;
EXPLAIN(islastbar,dmstr[1]); //当处在最后一根K线位置时,输出字符串深圳A股第1只股票的代码--------------------------------------------------------------------------------  假如你试图执行这段代码,你会发现好慢哦~~  为何会这样?因为从深圳A股切换到上海A股的股票代码时,是从1896跳跃到600000,中间有508104次空循环,这中间没有一个代码是真正的股票代码,因此可以这样来提高循环的执行效率,在公式代码中插入如下几行代码:if j=1896 then j:=599999;if j=600999 then break;  优化后的代码如下: PHP代码:--------------------------------------------------------------------------------
variable:lstr[6]='00000';
lstr[2]:='0000';lstr[3]:='000';lstr[4]:='00';lstr[5]:='0';lstr[6]:='';
j:=0;  //记录循环次数的计数器
k:=1;  //记录股票代码的个数的计数器
bk:='A股板块'; //bk赋值为字符串'深圳A股'
blksum:=STKCOUNT(bk); //板块所包含证券数量
variable:dmstr[blksum]='';  //定义一个字符串数组用于记录股票代码,元素个数为blksum,初始值为空
while k<=blksum do  //当计数器k<=blksum时,执行以下循环
begin
dm:=NumToStr(j,0);  //把数值j转换成字符串并赋值给变量dm,保留小数位数0
dm_len:=strlen(dm); //求出dm的长度,并赋值给变量dm_len
dm:=lstr[dm_len]+dm;  //由dm的长度,确定应该给dm的前面加上多少个字符0
if stkinblock(dm,bk) then //如果股票代码dm属于bk,则执行下面由begin、end包含的语句
begin
dmstr[k]:=dm;  //真正需要的股票代码,记录到字符串数组dmstr的第k个元素中
k:=k+1;  //记录找到的股票代码的个数
end;
if j=1896 then j:=599999;  //计数器j直接跳到到上海A股对应的最小代码
if j=600999 then break;  //如果记录到这个代码则跳出循环
j:=j+1;  //记录循环的次数
end;
//以下是一些字符串函数及运算的综合应用
EXPLAIN(1,dmstr[1]);  //在解盘中,输出深圳A股第1只股票的代码
EXPLAIN(1,stknameex(dmstr[2]));//第2只股票的名称
EXPLAIN(1,dmstr[3]+stknameex(dmstr[3]));//第3只股票的代码及名称
EXPLAIN(1,'深圳A股第4只股票的代码是:'+dmstr[4]);
EXPLAIN(1,dmstr[5]+'最后收盘价:'+numtostr(close,2));
EXPLAIN(1,'深圳A股共有股票:'+numtostr(blksum,0)+'只');--------------------------------------------------------------------------------  这行代码 if j=600999 then break 有什么用?以防万一,如果有人改了市场规则,把500001之类的股票计入上海A股的话,这里的循环会出不来的,会造成电脑死循环,飞狐长时间没有响应。 以上公式代码,只是个示例,效率不太高,如果能有个方法,直接给出板块中所有的股票代码,那就不需要这段公式代码。  给出这个示例,是想通过大致解剖整个公式代码的设计过程,让大家对循环、条件语句有个初步的认识。  最后,给大家个练习的机会:  1、修改上述代码,计算“A股板块”的成交量(这就是横向统计了)  2、以上公式代码,使用的是while循环,有办法改成fox循环吗?(当心,在修改代码的过程中,如果不慎的话,有可能造成死循环,对于win9x操作系统,也许很难退出,对于NT以上操作系统,可以强行退出)  3、高级问题:通过以上代码,可以做出横向排序,不过建议不要用代码本身来实现排序(会很慢的),应使用今天发布的新函数SORTPOS(X,D,N1,N2)来实现。  4、借用论坛的一个问题:ff:=barslast(date=1030107);周期:=5;VERTLInE(ff=0 or ff=周期*1 or ff=周期*2 or ff=周期*3 or ff=周期*4 or ff=周期*5or ff=周期*6 or ff=周期*7 or ff=周期*8 or ff=周期*9 or ff=周期*10or ff=周期*11 or ff=周期*12 or ff=周期*13 or ff=周期*14 or ff=周期*15or ff=周期*16 or ff=周期*17 or ff=周期*18 or ff=周期*19 or ff=周期*20or ff=周期*21 or ff=周期*22 or ff=周期*23 or ff=周期*24 or ff=周期*25or ff=周期*26 or ff=周期*27 or ff=周期*28 or ff=周期*29 or ff=周期*30or ff=周期*31 or ff=周期*32 or ff=周期*33 or ff=周期*34 or ff=周期*35or ff=周期*36 or ff=周期*37 or ff=周期*38 or ff=周期*39 or ff=周期*40),POInTDOT;  把以上代码,改成用循环表示。  5、一个数列定义如下:f[1]=1,f[2]=1,f[n]=f[n-1]+f[n-2],你能用循环计算出f[10]等于多少吗?这个数列是很有名的,许多股票预测都会用到它。  呵呵,具体我也记不住了,谁能告诉我它叫什么?
VBS入门续:条件语句
VBS入门续:条件语句
条件语句是程序中的最基本、最重要的语句之一,今天通过一个简单实例学习条件语句。
问题:设计一个指标,除首日外,如果当日涨停(设10%为涨停),则公式输出1,否则输出0。
公式代码:
fc:=c;
n=1.099;
<%
vc=ffl.vardata("fc")
vn=ffl.vardata("n")
vs=ffl.vardata("js")
last=ubound(vc)
vc(0)=0
for i=last to 1 step -1
if vc(i)>=vn*vc(i-1) then
vc(i)=1
else
vc(i)=0
end if
next
ffl.vardata("fc")=vc
%>
fc
VBS程序条件语句部分解释,参阅VBS帮助文件,如下代码为条件语句:
if vc(i)>=vn*vc(i-1) then  ----如果...则,这里的条件是判断当日涨停否
vc(i)=1                             ----vc(i)赋值1
else                                      ----否则
vc(i)=0                             ----vc(i)赋值0
end if                                   ----条件语句结束
飞狐基本函数简介之指标线形描述函数
这一组中的函数,全部不能单独使用,一定要和其它指标一起用才能发挥效力,因为它们都是描述其它指标的。
指标在主图或副图中的显示,主要分为棒状(柱状)和线状两种。这一组中的函数,全部是为了指挥指标的显示而设计的。
掌握好这组函数,可以使指标输出显示丰富多彩,色彩缤纷。
使用的一般形式:
指标,描述函数1,描述函数2,...;
一、
函数: STICK
参数: 无
返回: 无
说明: 画棒状线
示例:
STICK的英文是棍、棒的意思。
一般指标的显示,在软件中默认是线状的。即如果不加指标线形描述函数,则指标以线状的形式输出显示。
如公式:
0.98*L;{主图叠加}
如加上棒状线的描述,则变成这样了:
0.98*L,STICK;{主图叠加}
一般的信号,不加描述函数,会成箭头状。加了STICK之后,就成棒状了。
副图1公式:  C>REF(C,1) AND C>REF(C,2);
副图2公式:  C>REF(C,1) AND C>REF(C,2),STICK;
我个人调试公式的体会,还是副图1的显示清楚,因为可以看到连续信号的出现。
二、
函数: COLORSTICK
参数: 无
返回: 无
说明: 以零轴为中心画彩色棒状线,零轴下为阴线颜色,零轴上为阳线颜色
示例:
这样零轴就如楚汉交界,泾渭分明了。
C-REF(C,1),COLORSTICK;{副图指标}
三、
函数: LINESTICK
参数: 无
返回: 无
说明: 同时画棒状线与指标线。
示例:
LINE是线,STICK是棒,LINESTICK自然是线棒一起显示了。
A:=C-REF(C,1);
A,LINESTICK;{不作说明,都认为是副图指标}
那么,即想显示指标线和棒状线,又想以零轴为中心显示彩色棒状线,怎么写公式呢?这样行吗?
A:=C-REF(C,1);
A,LINESTICK,COLORSTICK;
各位可以自己试一下,结论是否定的。结果是只有彩色柱,没有指标线了。
这样我们初步可以得出一个结论:在同一个指标中,有多个相同性质的描述函数时,软件只认最后一个描述函数。
即想显示指标线和棒状线,又想以零轴为中心显示彩色棒状线,可以用分开的两句语句来达成目标:
A:=C-REF(C,1);
A,LINESTICK;
A,COLORSTICK;
四、
函数: VOLSTICK
参数: 无
返回: 无
说明: 画成交量柱状线。
示例:
这是专门为显示成交量设计的。
股票软件不同,显示成交量的阴阳线是很不同的。总的来说,是根据价来定的,具体方法各有不同,很难说哪种方法就好了,哪种方法就不好了。
飞狐中的方法是这样的:今天的收盘价大于昨天的收盘价,显示阳柱;小于等于则显示阴柱。
五、
函数: CROSSDOT
参数: 无
返回: 无
说明: 画叉状线或x状线。
示例:
呵呵,叉状线和X状线有什么区别?应该是一样的吧。
CROSS是交叉,DOT是点。
当指标线连续性较好时,显示交叉点比较顺眼。连续性不好时,看起来比较凌乱。
0.98*L,CROSSDOT;
MA(C,30),CROSSDOT;{主图叠加}
六、
函数: CIRCLEDOT
参数: 无
返回: 无
说明: 画小圆圈线
示例:
CIRCLE,圆圈。把CROSSDOT的X显示换成圆圈的样子。如果结合后面的COLOR函数一起用,可以画出不同颜色的圈圈,有时也比较实用。
七、
函数: POINTDOT
参数: 无
返回: 无
说明: 画点状线
示例:
POINT是点、加点的意思。这个点状线,在K线显示数不多的情况下,看起来太小了。正因如此,在K线显示数较多的情况下,就可以弥补CIRCLEDOT显示太大的缺陷。
0.98*L,CIRCLEDOT;
MA(C,30),POINTDOT;{主图叠加}
八、
函数: SHIFT
参数: 1--127
返回: 无
说明: 指标线向后(向右)偏移x个周期
示例: ma1:ma(close,5),shift3;将MA1指标线向后偏移3个周期
SHIFT,移位。这是个飞狐比较有特色的的特色函数。
以以下公式为例子:
MA(C,30);
MA(C,30),POINTDOT,SHIFT5;{主图叠加}
要注意两个问题:
1、移位后的指标显示数值和不移位时的数值是不一样了。移位了五个时间单位,就显示五个时间单位之前的原数值。
2、所移位的周期数,不能设为参数来调整。移位的最大周期数是127。如果写成SHIFT666,调试公式也能通过,不过软件自动取了127来移位。
另外说点题外话。
用SHIFT10之后,当前日的指标显示的就是原10天前的指标数值。也就是说,把最近十天的K线数据,置之不理了。
从人的记忆的特征来看,越近发生的事,对目前的影响力就越大。这样看,用SHIFT就一无是处了,因为它抛弃了最近的数据,而去找较早的数据。
从混沌学牵一发就能动全身的观点看,SHIFT就大有道理了。佛教中说前世的因,后世的果,相差时间就长得不好说了。
这些讨论一般难得见到。易股论坛中有位台--湾的老兄,发了两帖,来讨论K线左移(或者说是指标线右移),我才留心了一下。巫山的朋友有体会的,不妨说说。
九、
函数: LINETHICK
参数: 0--7
返回: 无
说明: 改变指标线粗细,LINETHICK0 表示不画出指标线,不影响坐标,但可在顶部显示数值。
示例: ma1:ma(close,5),linethick3;
ma1:ma(close,5),linethick0;表示不画出ma1指标线,不影响坐标,但可在顶部显示ma1数值
THICK,厚的。LINETHICK就可以理解为线(棒)的粗细了。
V,STICK,LINETHICKN;
N分别取1、2、3、4、5、6、7,做七个副图公式。
这个N也不能做成参数调整的。
LINETHICK0是非常常用的,因为一个公式中指标一多,显示会很乱,把有些显示去掉,就用这一招。
有时会碰到相反的情况,指标线(柱)显示不多,而顶部数值的显示太多了,那么怎么画出指标线,而又在顶部不显示数值呢?
一般用STICKLINE(画柱),PARTLINE(画线)等绘图函数来解决。
PARTLINE(1,MA(C,30));{主图叠加}
十、
函数: COLOR
参数: 000000--FFFFFF
返回: 无
说明: 改变指标线颜色。
常用: 黑色:colorblack 红色:colorred  绿色:colorgreen 蓝色:colorblue
白色:colorwhite 灰色:colorgray 黄色:coloryellow 青色:colorcyan
晶红色:colormagenta 棕色:colorbrown
示例: ma1:ma(close,5),coloryellow; 或 ma1:ma(close,5),colorff0000;
附录: 238种常用颜色代码速查表
COLOR,颜色,色彩。是这组函数中最常用的一个。不但能定义指标线(柱)的颜色,而且能定义顶部指标文字的颜色--用LINETHICK0时也一样。
颜色的种类应该够用了。至于各指标线(柱)之间的颜色搭配,实在是一种很艺术性的事。既要有美感,又要不触目惊心,我只能凭感觉挑选,其它也没有什么招数了。要是有学过美术的人来指点几招就好了。
枫叶秋雨兄提供的“飞狐色彩值吸取器”,实在是好东西,给我们挑选颜色提供了很大的方便。
飞狐基本函数简介之行情函数
这些行情函数所取得的数据,是我们所编写的公式的原材料。
如果说公式是衣服,这些行情函数就是布。
有人会说做衣服不一定要布,野草树皮也可以做。对,一个公式中不一定非有行情函数不可,但总感觉透风,缺点什么。
一、
函数: OPEN
说明: 取得该周期开盘价,也可简写为 O.
函数: HIGH
说明: 取得该周期最高价,也可简写为 H.
函数: LOW
说明: 取得该周期最低价,也可简写为 L.
函数: CLOSE
说明: 取得该周期收盘价,也可简写为 C.
OPEN,打开。HIGH,高度。LOW,低的。CLOSE,关闭、结束。
常言道,巧妇难为无米之炊。此四者,就是我们做价格指标的“米”了。不同周期的K线,均由此四者为原材料画出。
(有人说,家里的米没有味道,于是去割野菜,采野花,日子一长,又说还是家里的米能填饱肚子。)
有人说,价、量、时、人是技术分析的四大要素,那么O、H、L、C便构成了“价”的四大要素。
道氏理论,主要关注的是长期趋势,所以,一般以CLOSE线为主要参考指标。所取前期高、低点,也是CLOSE线的高、低点。
人的心理,常以成败论英雄。所以CLOSE作为一根K线中的“结局”,被视为价格四大要素中的最关键因素。此论似成通论,但有些短线炒手认为,OPEN要比CLOSE更重要。股市本是无定论的地方,仁者见仁,智者见智,故不敢多作妄论。
这里随便谈些本人对未来函数和未来数据的看法。关于未来也者,在较为经典的书上很少直接见到这种说法,只是在网上见得多了,便有了些想法,说出与大家共同探讨。
如图,一般带公式平台的股票软件,有“公式检测”这一项,用来判断公式中是否含有未来函数。
目前的信号的产生和保持,如果全依赖于之前的数据,则可认为产生信号的公式中,不含有未来函数和未来数据。
目前的信号的产生和保持,如果部分依赖于之后的数据,则可认为产生信号的公式中,含有未来函数和未来数据。
换句话说,如果公式中产生的信号,随着行情的发展,信号永远不变,则此公式就绝无“未来”之嫌疑;信号可能要逃、要变,则此公式中就有“未来”。
如果此定义成立,则可将“未来”分为两种情况:
1、在一根K线(即时行情)中;
2、在多根K线(盘后)中。
在第一种情况中,以即时行情中的当前日K线为例,除了O之外,其它H、L、C全有未来之嫌。因为在收盘之前,拉高、打压是司空见惯的事,谁也不能保证H、L不会创出当天的新高和新低,更不用说C了。比如日线周期公式“C>REF(C,1);”,前一分钟信号成立,后一分钟可能信号就不成立了。这样说的话,在日K中包括H、L、C的指标,就全有“未来”之嫌疑了。
还有就是引用进来的信号,比如引用了周K和月K指标,因为当前周K和月K还在变动之中,所以也是未来数据。
在第二种情况中,因为在盘后,日K中的四大要素就没有未来之可能了。在多K线中,典型的未来函数有两个:BACKSET、ZIG。这两个未来函数到底未来到什么程度,到以后介绍时再说。就算在盘后,除了周五之外,引用的周K指标也是未来数据;除了在月末,引用的月K指标也是未来数据。
这样说的话,到处是“未来”,我们何处适从?
实际上未来也者,并不是新问题,而是老问题,从有技术分析之日起,这个问题就存在了,只是在经典著作中,并不是以“未来”的字眼出现。
“我们所采取的交易风格越保守,那么,耐心地等待趋势反转的验证信号就越为重要。到底需要等待多久呢?这就得从风险与报偿两个方面来权衡。如果我们选择较为保守的交易风格,宁愿等待趋势反转的验证信号,那么,确实可能承担较少的风险;但是另一方面,我们从交易中取得的报偿也可能减少了。等到趋势反转信号得到确认的时候,获利的空间也许已经缩小了。”
(<日本蜡烛图技术>P.159)
所以说即时行情中的“未来”也一样,体现的是技术分析中最古老的一个问题。
而多K线中的未来数据,是要好好注意的。如果在ZIG的低点买进,在ZIG的高点卖出,则是全世界最好的交易系统了--可惜是马后炮,因为当时谁也做不到这一点。但也不能说BACKSET、ZIG就一无是处了,有时甚至是不可或缺的。刀剑可能自伤,也可用于杀敌。只要我们熟悉了BACKSET和ZIG的本质,就可以了解它们“未来”到什么程度,拿来用也是不妨的。至于不熟悉的,还是少用为妙。
二、
函数: VOL
参数: 无
说明: 取得该周期成交量,也可简写为 V.
函数: AMOUNT
参数: 无
说明: 取得该周期成交额
VOLUME,量。AMOUNT,数量、总计。
成交量系统默认单位是手(一百股)。成交额系统默认单位是元(A股和基金是人民币、沪B股是美元、深B股是港元)。
成交量是仅次于价格的技术分析要素。成交额因为里面有价量因素,有些高手应用时喜欢用之代替成交量。
成交金额万元:AMOUNT/10000,LINETHICK0;
成交量手:VOL,VOLSTICK;
流通盘万股:CAPITAL/100,LINETHICK0;
换手率:100*V/CAPITAL,LINETHICK0;
三、
函数: ADVANCE
参数: 无
说明: 取得该周期上涨家数。(本函数仅对大盘有效)。
参数: DECLINE
参数: 无
说明: 取得该周期下跌家数。(本函数仅对大盘有效)。
ADVANCE,前进。DECLINE,下降。
用于上证指数和深圳成指。
A:=ADVANCE-DECLINE;
SUM(A,50);
这个线形状与指数C线有些不同,反映的是不加权的情况。
四、
函数: BUYVOL
参数: 无
说明: 取得主动性买单量。 当本笔成交为主动性买盘时,其数值等于成交量,否则为0. (本函数仅个股在分笔成交分析周期有效)
函数: SELLVOL
参数: 无
说明: 取得主动性卖单量。当本笔成交为主动性卖盘时,其数值等于成交量,否则为0. (本函数仅个股在分笔成交分析周期有效)
BUY,买。SELL,卖。VOL,VOLUME,量。
在分笔成交分析周期中看:
主动性买单量:BUYVOL;
主动性卖单量:SELLVOL;
之和:BUYVOL+SELLVOL;
总成交量:V;
两者之和必然为总成交量。所以说每笔之成交量,不是主动性买单量,就是主动性之卖单量。
主动性买单量代表多方的力量,主动将挂在卖盘档位的单子吃进,主动性卖单量则反之,代表的是空方的力量。
至于庄家对倒诱空诱多之动作,长期看另当别论,但在当时,确实也代表了多空之一方。
每日之SUM(BUYVOL,0)之类的数据,不能在其它周期中引用,要做成扩展数据才可。
五、
函数: ISBUYORDER
参数: 无
说明: 取得该成交是否为主动性买单。当本笔成交为主动性买盘时,返回1,否则为0. (本函数仅个股在分笔成交分析周期有效)
ORDER,定单。BUYORDER,买单(不是请客吃饭后的买单!)。
在分笔成交分析周期中可以看到,任一笔成交的单子,不是主动买单,就是主动卖单。
主动买单:ISBUYORDER;
主动卖单:NOT(ISBUYORDER)*0.5;
这也就是没有ISSELLORDER函数的原因,因为用NOT(ISBUYORDER)就可以取得相同功能。
六、
函数: BIDPRICE(N)
参数: N取1--3,表示买盘档位。
说明: 取得委买1--委买3价格。(本函数仅个股在分笔成交分析周期有效)
示例: BIDPRICE(1)
表示最高叫买价。
函数: BIDVOL(N)
参数: N取1--3,表示买盘档位。
说明: 取得委买1--委买3量。(本函数仅个股在分笔成交分析周期有效)
示例: BIDVOL(1)
表示最高叫买量。
BID,出价、投标,这里是买进报价的意思。PRICE,价格。
有人可能会说:图中不是有委买8的单子么?呵呵,那是推算出来的,撤单了亦未可知。
七、
函数: ASKPRICE(N)
参数: N取1--3,表示卖盘档位。
说明: 取得委卖1--委卖3价格。(本函数仅个股在分笔成交分析周期有效)
示例: ASKPRICE(1)
表示最低叫卖价。
函数: ASKVOL(N)
参数: N取1--3,表示卖盘档位。
说明: 取得委买1--委买3量。(本函数仅个股在分笔成交分析周期有效)
示例: ASKVOL(1)+ASKVOL(2)+ASKVOL(3)
表示三档卖盘量总和。
ASK,询问、要求,这里是卖出报价的意思。
副图公式一:
委买总量:BIDVOL(1)+BIDVOL(2)+BIDVOL(3);
委卖总量:ASKVOL(1)+ASKVOL(2)+ASKVOL(3);
副图公式二:
卖一买一空档:ASKPRICE(1)-BIDPRICE(1);
编仅个股在分笔成交分析周期有效的公式时要注意,编好了之后,公式的“禁用周期”就自动设置为如图的样子。
如果以后要把这个公式修改为其它周期的公式时,不可忘记把“禁用周期”中的设置改过来,否则公式指标输出会没有显示