同花顺公式编写教程

来源:百度文库 编辑:神马文学网 时间:2024/04/25 18:38:17

同花顺公式编辑器界面



除了可以在编辑器自己编写新公式外,还可以通过复制/粘贴方法将其他文件中的公式拷过来,这也是常用方法。









同花顺公式的导入,导出
导入,导出公式后按“退出”,退出公式编辑器













导入公式后还要进行一些设置,以便显示,如下图,按下图设置完后,就可以在K线图界面的副图上右键点击在弹出的对话框钟选‘选择指标“,找到你的指标,点击即可选中在副图中显示。{本文由分析家公式网www.88gs.com整理}

提供一个简单的例子给大家:



同花顺公式系统:
   公式系统可以编辑多种类型的公式,且每个类型中又又若干分细,分别是1,基本公式(软件全部函数指标的集合),2,技术指标(已自带公式的集合)、3,交易系统、4,条件选股,5,五彩K线公式,6,自用公式(自编的公式及以复制/粘贴过来的他人的公式)。技术指标公式是最基本的公式,它用于指标曲线的绘制。技术指标公式是条件选股,交易系统的基础。结合选股条件逻辑判断表达式,即得到条件选股公式,用于条件选股。技术指标公式结合买卖逻辑判断表达式,得到交易系统公式,用于交易系统指示。技术指标公式结合色彩逻辑判断表达式,即得到K线模式公式,用于描述特定的K线模式。公式的编辑在公式编辑器中完成。    
      公式系统处理的原始数据的分析周期(即相邻两组数据间的时间间隔)可以从1分钟到1000天间的任意值,也可以是分笔成交数据,改变分析窗口显示的分析周期,则公式处理新的分析周期的数据。    
     
      学习公式编写,使用的基本方法

    基本捷径是从软件公式或他人公式入手,多看多动手边理解其写法,为什么调用这个函数,这个函数的意义是什么,这一句预要表达什么意思等等。不动手永远不可能学会的。从简单公式入手,先弄懂一,两个公式。从修改公式加入自己的目标语句实现自己目标入手,几乎没有一个公式是那一个人自己完成的,或多或少都使用了前人的成果。
    在编写中多用“测试公式”按钮,让软件作判断,告诉你编写对错与否。
    使用彩色编辑可事半功倍。
    多用鼠标指针指向不懂的函数,软件马上会告诉你。

      公式编写步骤

    1.设定公式名称:每个公式都有自己的名称,它由字母或数字组成,最多可以有9个字符。请注意,公式名称在同类公式中不能重复,且不能为空。    2.描述公式:用于简单描述该公式的含义(可不填亦能通过),  3.注释公式:用于描述一个公式如何使用、计算方法等内容。输入后,在有关窗口按“用法注释”按钮可以查看公式注释(可省略)。    4. 设计技术指标公式语句:  公式的形式由若干语句组成。每个语句得到一个计算结果,对于技术指标,就是一条指标线,语句间用分号(“;”)隔开。 一个语句由若干函数通过四则运算或逻辑运算而组成。函数是公式系统的基本成分,它是对数据做某种操作,如CLOSE()函数表示调用该分析周期的收盘价。
    函数由函数名称和参数组成,参数用函数名后的括号括起来,每个函数调用的参数可以是变量或常量,变量是一个随着时间变化而变化的数据,例如收盘价;常量是一个不随时间变化而变的数据。例如函数REF(X,N)用于引用N周期前的X值,X是一个变量,N是一个常量,REF(close(),1)表示计算上一周期的收盘价。函数若需调用几个参数,则它们在括号内是有顺序的。若没有参数则可以省去括号,例如CLOSE()函数没有参数,所以写成 CLOSE和 CLOSE()都可以。函数计算得到的结果是一个变量。  

    计算符将函数连接成为语句。计算符分为算术计算符和逻辑计算符。算术计算符有+、-、*、/,分别是对计算符两边的数值进行加减乘除计算;逻辑计算符有>、<、<>、>=、<=、=、AND(与)、OR(或),分别是对计算符两边的数值做大于、小于、不等于、大于等于、小于等于、等于、逻辑与、逻辑或的逻辑运算,如果逻辑条件成立返回的计算结果为1,否则为0。例如:2>1的逻辑运算结果等于1,1>2的逻辑运算结果就等于0。    语句得到的计算结果连成线就是所谓的指标线,不同的语句就得到不同的线,为了在指标图形中互相区分,不同的线有不同的颜色,而且语句还可以有自己的名称,在指标图形中显示在左上角位置。语句名写在语句的前面,用一个冒号(“:”)将它与语句隔开。语句“上日收盘价:REF(close,1)”就表示该语句REF(close,1)的名称为“上日收盘价”。该语句后而的语句若需引用它,则写公式名即可,如MA(上日收盘价,20)意思是对上日收盘价求20日平均。  

    设计中间语句: 
  
   一个语句将显示一条指标线,一个复杂的公式往往有很多语句,而且有些语句没必要显示出来。这时我们可以把不需要显示语句定义为中间语句,中间语句的写法只需在一般语句的名称与语句之间的等号,即“=”即可(亦可用通用的冒号加等于号“:=”)。例如,语句“上日收盘价=REF(close,1)”就表示该语句为中间语句。重复使用的语句也可以定义成中间语句。
   
   设计其他公式语句:
    
    其他类型的公式显示的不是指标线,而是相应的操作,如条件选股公式显示的是选股结果,交易系统公式显示的是交易指示(用":>"表达),五彩K线公式显示的是K线颜色。这些公式需要有一条或几条逻辑表达式表示这些操作的语句,当语句返回0时表示不需要进行相应的操作,当返回非0时表示需要进行相应的操作。其他的语句都应设定为中间语句。    条件选股公式只有一条逻辑表达式语句,用来表示选股条件是否成立,例如CLOSE>REF(close,1)语句,表示选出当期收盘价高于上日收盘价的股票。其他的语句必须设定为中间语句,否则编辑器出现“只能有一个输出结果”的警示。    交易系统公式需要逻辑表达式语句,分别为买入(在语句后加buy)、卖出条件(在语句后加sell),当这些语句返回非0时,表示需要进行相应的操作。其他的语句必须设定为中间语句,否则编辑器出现“非交易信号变量只能用:=赋值”的警示。条件中必须至少设定一个条件。

   函数可以用简写,如收盘价开盘价分别用C,O来表示,在编写中往往可以自动变成大写字母,可以以此判断。函数名编写正确时字母变为大写。编写中要用彩色编辑,这样可以指示出软件对于此函数是否认可--应变成彩色。

   公式编写完测试公式通过后,还需进行曲线属性的设置,在“曲线属性”:如显示曲线的位置是主图,副图,成交量图等,还可以设置是否显示曲线参数或只显示参数而不显示曲线,选择显示的图标,提供象箭头,圆,凌形(buy红色向上箭头,buy1黄色箭头,1空心三角形,2空心圆,4空心菱形,5星花...),曲线颜色等...最后再测试通过,确定退出编辑。

   
   未来函数
     公式系统对数据的运算是基于一系列函数,函数必须满足时间不变性,即时间靠后的数据不对时间靠前的结果产生影响(判断是否未来函数的依据)。这个很重要!对于未来函数可以理解为:某一量依赖另一量,如量 A和量B,B变化使A改变,那么A是B的函数,如果B是稍后的量,A是稍早的量,A跟着B变,A是B的未来函数。未来函数是有时间周期的,在一个短的周期内可能是未来函数,但在稍长的周期内就不是未来函数,比如"HIGH"(最高价),在一天收市前都是不确定的.如在交易没有结束时我们可以看到某一个指标,如“卖出”跟着股价的高低一会出现,一会消失(这个现象很容易观察到)。所以对于一个日周期的指标在分时周期具有“未来函数”特征。但一旦收盘该指标是定值,不应随明日及以后的价而变,所以该指标在日周期中不是未来函数。
被人们普遍认为是未来函数的是比较长时间才被确认的ZIG函数,比如把参数设置为ZIG(3,5),就要等下一个ZIG(3,5)成立时才能被确认,就是说你把周期设置得越长,被确认的时间就越长(比如ZIG(3,30)),如果把它设置的很短(比如ZIG(3,1)),那就跟"high"差不多了.
有未来函数的公式对历史模拟的相当准确,对号称100%的.99%准确的公式要小心。
未来函数有:
zig
PEAK
PEAKBARS
TROUGH
TROUGHBARS
所以任何函数都具有未来函数特性,也没什么可怕。第一不要依据公式入市,第二还是不要依据公式入市!不要迷信公式。
公式只能给你一个信号,最终判断取舍要靠人。

关于未来函数的典型例子

有这么多人对一个叫鬼谷神算公式推崇,甚至将它说成'极品‘。我感到吃惊。应该把此公式的本质性的东西反映出来才是;该公式使用了未来函数,因而有“很高” 的准确率,因为它是马后炮所以100%准。这是需要大家十分注意的。

我不反对使用未来函数,但要充分认识其特有的“欺骗性”--已经出现的“结果"因后面的数据的改变而改变。

在此,我要说的是本来是一个及其简单的公式,故意弄成很复杂,高深,写了那么多行毫无相干的东西。是忽悠人的。我给“简化”了一下,只剩下6行。希望大家知道这样的公式人人可写。

这样的公式恐怕是别有用心之人忽悠卖钱的。

改成下面的公式,而且完全显示买卖两个信号。其核心是Z字转向于其他没关系。Z字转向即为未来函数
而ZIG函数的定义为 ,当前收盘价超过上次ZIG转向输出值的N%,则输出当前收盘价并ZIG转向。对该公式为50/5=10,即当价格变化量超过10%时转向。

对于下面的公式:
第一行,ZIG函数,它输出的是就是价格,为了欺骗乘以100;
第二行,是第一行的2日平均;
第三行,第四行是第一行,第二行的金叉,死叉;
而买卖信号的出现就是在于金叉,死叉。
请大家试试看。

简化的公式:
B:zIG(3,50/5)*100,colorwhite;
G:MA(B,2),coloryellow;
D:=CROSS(B,G)*1000,colorred;
W:=CROSS(G,B)*1000,colorblue;
DRAWTEXT(W=1000,B*1.05,'卖' ),colorgreen;
DRAWTEXT(D=1000,B*1.05,'买'),colorred;
 

原公式
公式名称:鬼谷神算
VAR1:=SUM(MAX(MAX(HIGH-LOW,ABS(HIGH-REF(CLOSE,1))),ABS(LOW-REF(CLOSE,1))),25);
VAR2:=HIGH-REF(HIGH,1);
VAR3:=REF(LOW,1)-LOW;
VAR4:=SUM(IF(VAR2>0 AND VAR2>VAR3,VAR2,0),25);
VAR5:=SUM(IF(VAR3>0 AND VAR3>VAR2,VAR3,0),25);
VAR6:=VAR4*100/VAR1;
VAR7:=VAR5*100/VAR1;
VAR8:=MA(ABS(VAR7-VAR6)/(VAR7+VAR6)*100,15);
VAR9:=(VAR8+REF(VAR8,15))/2;
A:=(VAR7>VAR6 AND VAR7>25 AND VAR6<25);
B:ZIG(3,50/5)*100,COLORWHITE;
G:MA(B,2),COLORYELLOW;
D:=CROSS(B,G)*1000,COLORRED;
W:=CROSS(G,B)*1000,COLORBLUE;
E:=REF(INDEXC,1);
F:=SMA(MAX(INDEXC-E,0),3,1)/SMA(ABS(INDEXC-E),3,1);
VAR10:=F AND F<8;
VAR11:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
VAR12:=SMA(VAR11,3,1);
VAR13:=SMA(VAR12,3,1);
VAR14:=VAR13 AND VAR13<20;
MM:=A AND D AND VAR10 AND VAR14 ;
DRAWTEXT(W=1000,B*1.05,'卖' ),COLORGREEN;
DRAWTEXT(D=1000,B*1.05,'买'),COLORRED;

语言规范:

在自定义公式里面的各种符号(如,“;” )只能用半角不能用全角。

关键字   if else while  break  continue  return (无大小写之分)
 
常数   浮点数、整数、字符串
 
分隔符  “ ”  ‘ ’  ( ) ;  {  }  注释/* */
 
标识符    由字母和数字组成,由字母开头,不分大小写
 
运算符(优先级从高到低排列,同级同行)
 *  /
 
+  -
 
 !=  >  <  >=  <= 
 
And
 
Or
 
语句 赋值    a = b 
 
条件    IF (a==b) c=d;
 
循环    while a==b  c=d;
 
函数调用    func(a,b)
 

赋值语句:

       其一般形式为:

       a=b;         含义为将b的值付给a。

       几个运算符“=”赋值、 “:=” 赋值“:”赋值并输出数值或字符串“:>”赋值并输出图形。

       注意:“=”和“:=”两个运算符的意义、用法完全相同。这样做主要是为了更好地兼容市场上目前的各种带有公式编辑功能的分析软件。


同花顺公式函数注释(常用部分)

逻辑函数:

1、条件函数:根据条件求不同的值。 

用法:IF(X,A,B)若X不为0则返回A,否则返回B。 例如:(CLOSE>OPEN,HIGH,LOW)表示该周期收阳则返回最高值,否则返回最低值。

引用函数:

1、满足条件的周期数:统计满足条件的周期数。

用法:COUNT(X,N),统计N周期中满足X条件的周期数,若N=0则从第一个有效值开始。例如:COUNT(CLOSE>OPEN,20)表示统计20周期内收阳的周期数。

2、第一个条件成立到当前的周期数:统计第一个条件成立到当前的周期数。

用法:BARSSINCE(X):第一次X不为0到现在的天数。例如:BARSSINCE(HIGH>10)表示股价超过10元时到当前的周期数。

3、上一次条件成立到当前的周期数:上一次条件成立到当前的周期数。

用法:BARSLAST(X),上一次X不为0到现在的天数。例如:BARSLAST(CLOSE/REF(CLOSE,1)>=1,1)表示上一个涨停板到当前的周期数。

4、有效周期数:求总的周期数。

用法:BARSCOUNT(X),第一个有效数据到当前的天数。

5、向前赋值:将当前位置到若干周期前的数据设为1。

用法:BACKSET(X,N),若X非0,则将当前位置到N周期前的数值设为1。例如:BACKSET(CLOSE>OPEN,2)若收阳则将该周期及前一周期数值设为1,否则为0。

6、求和:求总和。

用法:SUM(X,N),统计N周期中X的总和,N=0则从第一个有效值开始。例如:SUM(VOL,5)周期设为日线时,表示最近5个交易日的成交量之和。SUM(VOL,0)表示从传数据过来第一天起的成交量总和,具体如在区间统计里统计“总手” SUM(VOL,0)即是指全区间的成交量之和。

7、移动平均:求移动平均。

用法:SMA(X,N,M),求X的N日移动平均,M为权重。算法: 若Y=SMA(X,N,M)则 Y=[M*X+(N-M)*Y']/N,其中Y'表示上一周期Y值,N必须大于M。例如:SMA(CLOSE,30,1)表示求30日移动平均价。

8、向前引用:引用若干周期前的数据。

用法:REF(X,A),引用A周期前的X值。例如:REF(CLOSE,1)表示上一周期的收盘价,在日线上就是昨收。

9、简单移动平均:求简单移动平均。

用法:MA(X,N),求X的N日移动平均值。算法:(X1+X2+X3+,,,+Xn)/N。例如:MA(CLOSE,10)表示求10日均价。

10、最低值:求最低值。

用法:LLV(X,N),求N周期内X最低值,N=0则从第一个有效值开始。例如:LLV(LOW,0)表示求历史最低价。

11、最高值:求最高值。

用法:HHV(X,N),求N周期内X最高值,N=0则从第一个有效值开始。 例如:HHV(HIGH,30)表示求30日最高价。

12、指数平滑移动平均:求指数平滑移动平均。

用法:EMA(X,N),求X的N日指数平滑移动平均。算法:若Y=EMA(X,N)则Y=[2*X+(N-1)*Y']/(N+1),其中Y'表示上一周期Y值。例如:EMA(CLOSE,30)表示求30日指数平滑均价。

13、动态移动平均:求动态移动平均。

用法:DMA(X,A),求X的动态移动平均。算法: 若Y=DMA(X,A)则 Y=A*X+(1-A)*Y',其中Y'表示上一周期Y值,A必须小于1。例如:DMA(CLOSE,VOL/CAPITAL)表示求以换手率作平滑因子的平均价。

14、最高值周期数:求上一高点到当前的周期数。

用法:HHVBARS(X,N):求N周期内X最高值到当前周期数,N=0表示从第一个有效值开始统计。例如:HHVBARS(HIGH,0)求得历史新高到到当前的周期数。

15、最低值周期数:求上一低点到当前的周期数。

用法:LLVBARS(X,N):求N周期内X最低值到当前周期数,N=0表示从第一个有效值开始统计。例如:LLVBARS(HIGH,10)求得10日最低点到当前的周期数。

16、加权移动平均:求加权移动平均。

用法:WMA(X,A),求X的加权移动平均。
算法:若Y=WMA(X,A) 则Y=(N*X0+(N-1)*X1+(N-2)*X2)+...+1*XN)/(N+(N-1)+(N-2)+...+1) X0表示本周期值,X1表示上一周期值...。
例如:WMA(CLOSE,20)表示求20日加权均价。

17、求和:向前累加到指定值到现在的周期数。

用法:SUMBARS(X,A):将X向前累加直到大于等于A,返回这个区间的周期数。例如:SUMBARS(VOL,CAPITAL)求完全换手到现在的周期数。

 时间函数:

1、总开盘分钟:求当前代码类型的开市交易时间。

用法:TRADETIME。返回交易时间,单位为分钟。目前一般市场都返回242,与日期或具体的股票无关。

2、距开盘分钟:求当前时刻距开盘有多长时间。

用法:FROMOPEN。返回当前时刻距开盘有多长时间,单位为分钟。例如:当前时刻为早上十点,则返回31。

3、距午夜秒:求当前时刻距开盘有多长时间。

用法:FROMNIGHT。返回当前时刻距午夜有多长时间,单位为秒。例如:当前时刻为早上十点,则返回36000。

4、时间格式:转换时间格式。

用法:FORMATTIME(N)。目前只支持 N=1 把当前时间转换成距开盘分钟数返回。例如:分时中的量比曲线公式:(VOL*(TRADETIME+1)*5)/(FORMATTIME(1)*FIVEDAYVOL)。

5、时间差:计算两个时间之间的差。

用法:COUNTTIME(N,L,K)。N、L为时间,其格式为YYYYMMDD。K为1、2或者3。当K为1时返回第二个之间比第一个时间晚多少年。当K为2时返回第二个之间比第一个时间晚多少月。当K为3时返回第二个之间比第一个时间晚多少日。例如:COUNTTIME(20000808,19990606,2)其返回值为-2。注意:这里返回值有正负号。

算术函数:

1、绝对值:求绝对值。 

用法:ABS(X)返回X的绝对值。例如:ABS(-34)返回34。

2、介于:介于两个数之间。 

用法:BETWEEN(A,B,C)表示A处于B和C之间时返回1,否则返回0 

例如:BETWEEN(CLOSE,MA(CLOSE,10),MA(CLOSE,5))表示收盘价介于5日均线和10日均线之间。

3、最大值:求最大值。 

用法:MAX(A,B)返回A和B中的较大值。例如:MAX(CLOSE-OPEN,0)表示若收盘价大于开盘价返回它们的差值,否则返回0。

4、最小值:求最小值。 

用法:MIN(A,B)返回A和B中的较小值。例如:MIN(CLOSE,OPEN)返回开盘价和收盘价中的较小值。

5、求模运算:求模运算。 

用法:MOD(A,B)返回A对B求模。例如:MOD(26,10)返回6。

6、求逻辑非:求逻辑非。 

用法:NOT(X)返回非X,即当X=0时返回1,否则返回0。例如:NOT(5>3)返回0。

7、范围:介于某个范围之间。

用法:RANGE(A,B,C)表示A大于B同时小于C时返回1,否则返回0。例如:RANGE(CLOSE,MA(CLOSE,5),MA(CLOSE,10))表示收盘价大于5日均线并且小于10日均线。

8、求相反数:求相反数。 

用法:REVERSE(X)返回-X。 例如REVERSE(CLOSE)返回-CLOSE。

9、余弦值:求余弦值。

用法:COS(X)返回X的余弦值。

10、正弦值:求正弦值。

用法:SIN(X)返回X的正弦值。

11、平方根:开平方。

用法:SQRT(X)为X的平方根。例如:SQRT(CLOSE)收盘价的平方根。

12、上穿:两条线交叉。 

用法:CROSS(A,B)表示当A从下方向上穿过B时返回1,否则返回0。例如:CROSS(MA(CLOSE,5),MA(CLOSE,10))表示5日均线与10日均线交金叉。

13、维持:两条线维持一定周期后交叉。 

用法:LONGCROSS(A,B,N)表示A在N周期内都小于B,本周期从下方向上穿过B时返回1,否则返回0。例如:LONGCROSS(MA(CLOSE,5),MA(CLOSE,10),5)表示5日均线维持5周期后与10日均线交金叉。

14、空:判断是否为空。

用法:ISNULL(A)表示如果A为空(即没有数据)则返回1,否则返回0。

15、幂:求幂。

用法:POW(X,Y)。求X的Y次幂。例如:POW(2,3)为8。


绘图函数

  位图

含义:在图形上绘制位图。
用法:
DRAWBMP(COND,PRICE,BMPFILE),当COND条件满足时,在PRICE位置画BMPFILE文件名指定的BMP位图(缺省路径为软件安装目录登录用户名)。
例如:DRAWBMP(CLOSE>OPEN,LOW,'SUN')表示当收阳时在最低价位置画软件安装目录登录用户名Sun.BMP位图。
※BMPFILE参数指定的BMP文件默认路径为当前用户目录,如果不带后缀名即表示BMP文件,也可带后缀名使用JPG和GIF文件。
也可不用用户目录而使用全路径,路径中的''要写两个以下字符串作为参数都是合法的,如果文件存在的话:
"SUN","SUN.BMP","SUN.JPG","SUN.GIF","C:\hexin\SUN.JPG"

填充背景

含义:根据条件填充背景区域。
用法:
DRAWGBK(COND,COLOR),填充满足COND条件的背景区域。COLOR可以为渐变颜色STRIP,也可以为BMP图形文件名(缺省路径为"软件安装目录登录用户名"),若省略COLOR则使用指标线颜色填充(可以使用COLORRED等描述符设定)。
例如:DRAWGBK(CLOSE>OPEN),COLORRED;表示收阳时用红色填充背景。
DRAWGBK(CLOSE>OPEN,'MyBMP');表示收阳时用软件安装目录登录用户名MyBMP.BMP填充背景。

画图标

含义:在图形上绘制小图标。
用法:
DRAWICON(COND,PRICE,TYPE),当COND条件满足时,在PRICE位置画TYPE图标,TYPE是曲线标志的名称。
例如:DRAWICON(CLOSE>OPEN,LOW,"buy")表示当收阳时在最低价位置画买入图标。

显示文字

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

RGB颜色

含义:指定颜色。
用法:
RGB(R,G,B),表示用三原色红(R)绿(G)蓝(B)混合组成指定颜色,每种颜色值可以设定为0-255。
例如RGB(255,0,0)表示红色,RGB(0,0,255)表示蓝色

画柱线

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

提示文字

TIPTEXT(COND,PRICE,TEXT),当COND条件满足时,在PRICE位置显示图标,若PRICE为0,则在图形底部显示图标。
例如:TIPTEXT(CLOSE/OPEN>1.08,LOW,'大阳线,股价为:'+close)表示当日涨幅大于8%时在最低价位置显示图标,鼠标移近时显示文字'大阳线,股价为:15.88'字样。
※显示为三角图标

画垂直线

含义:在图形上绘制垂直线。
用法:
VERTLINE(COND,TYPE),当COND条件满足时,沿垂直方向绘制TYPE类型的线段,TYPE=0表示实线,1表示虚线'---',2表示点线'...',3表示点划线'-.-.-',4表示点点划线'-..-..-'。
例如:VERLINE(HIGH>=HHV(HIGH,20),1)表示在创20天新高画垂直虚线

画水平线

含义:在图形上绘制水平线。
用法:
HORLINE(COND,PRICE,TYPE,EXTEND),当COND条件满足时,在PRICE位置沿水平方向绘制TYPE类型的线段,TYPE=0表示实线,1表示虚线'---',2表示点线'...',3表示点划线'-.-.-',4表示点点划线'-..-..-'。EXTEND=1 表示向左延长,=2表示向右延长,=3表示左右

由简单的公式编写开始

   这里举一些最简单的例子,有些只有一条语句且函数简单,较复杂的公式中函数复杂且语句较多。
    收盘价线    CLOSE 均线的画法  计算N日内收盘价的算术平均值,公式为:MA(X,N)表示X的N日平均。   例如: MA1: MA (CLOSE,5) , coloryellow ; 表示为: 参数名 画一条5日收盘价的均线 设置该线为黄色 
MA2:MA(C,20),color0000ff(20日收盘价均线,颜色为红色)
MA3:MA(c,250),color00ff00(年线,绿色)
均线:MA(c,N);(周期N可设置最大,最小,缺省)

 换手率  换手率指当期的成交量占流通股本的比例。 
 公式: hs:VOL/CAPITAL; VOL为当期成交量,CAPITAL为流通股本。

   乖离率  当前股价与均线的偏差的程度
gl:(c-ma(c,20))/ma(c,20)*100;

量比  当期成交量与5日均量的比
lb:vol/ma(vol,5);


   涨幅  涨幅指今日收盘价相对于昨日收盘价的变动幅度,即(今日收盘价-昨日收盘价)/昨日收盘价*100%,  
昨日收盘价的公式为:REF(CLOSE,1),
涨幅的公式:    (CLOSE-REF(CLOSE,1))/REF(CLOSE,1) 

  创新高  创新高指当日最高价是最近一段时间的最高价:    HIGH=HHV(HIGH,N)   其中的HIGH为当期最高价,HHV(X,N)是求N周期内X最高值。因此该公式的含义是当日最高价创N日新高时返回值为1,否则为0。 


  横盘整理  横盘整理指最近一段时期价格在一定幅度之内摆动:    (HHV(CLOSE,10)-LLV(CLOSE,10))/CLOSE<0.05   其中的LLV(X,N)是求N周期内X最低值。因此该公式表示10日收盘价振幅振幅在5%以内。

 放量、缩量(成交量函数为VOL) 
     A、放量 
    a.今天成交量较昨天增加了1倍,表示如下:   VOL/REF(VOL,1)>2 b.今天成交量较10个交易日平均成交量放大了1倍,表示如下: 
a:=ma(vol,10); Vol/a>2 或者直接用如下公式表示: vol/ma(vol,10)>2; 
    c.今日的5日均量较10个交易日平均成交量放大了1倍,表示如下:   a:=ma(vol,10); b:=ma(vol,5); b/a>2; 
    d.今日的成交量超过了整个流通盘的5%,表示如下:   vol/capital>0.05;其中capital代表流通盘。 
    
    B、缩量  
    a.今日成交量较昨日减少了一半,表示如下: vol/ref(vol,1)<0.5; 
    b.今日成交量较10个交易日平均成交量减少一倍,表示如下:   a:=ma(vol,10); vol/a<2; 或者直接用如下公式表示:   vol/ma(vol,10)<2; 
    c.今日的5日均量较10个交易日平均成交量减少1倍,表示如下: a:=ma(vol,10); b:=ref(a,5); a/b<2; 
    d.今日的成交量低于了整个流通盘的5%,表示如下: vol/capital<0.05; 

上涨、下跌

上涨   今天的涨幅达到5%以上,表示如下: close>ref(close,1)>1.05; 
     5日均价连续上涨,表示如下: a:=ma(close,5); b:=ref(a,1); 

下跌  今天的跌幅达到5%以上,表示如下: close/ref(close,1)<0.95; 
     5日均价连续下跌,表示如下: a:=ma(close,5); b:=ref(a,1); a< b; 

描述K线   阳线  close>open; 阴线 close< open; 高开 open>ref(close,1); 低开 open< ref(close,1); 跳空高开(high为最高价) open>ref(high,1); 跳空低开(low为最低价) open< ref(low,1);

引用大盘数据

INDEXDATA(“N”,&X,K)    INDEXDATA 求某商品相关的数据
例:INDEXDATA("1a0001",&HIGH),n)沪指N周期最高值

个股于大盘的比较
CLOSE/INDEXDATA("1A0001",&CLOSE)*1000 只于沪指比较

股价在N日线附近--这可是反映股价调整幅度的好公式(选股)
a:=MA(C,N);  选股时输入20,30,60可选不同均线附近的股,
ABS(C-a)/C<=0.02;  在某均线的2/100附近的股票。也可根据需要改百分比。

只显示数值不显示曲线   在曲线属性-输出线形的勾去掉,在公式语句使用输出符出“:”
趋势【天】:BARSLAST(MA(C,250)
二,多语句的公式编写

     均线多头排列
a1:=ma(c,5); 
a2:=ma(c,10); 
a3:=ma(c,20); 
a4:=ma(c,30); 
count(a1>a2 and a2>a3 and a3>a4,3)=3 and close>open; (conut统计满足条件的周期数,5,10,20,30日均线呈多头排列),
    均线空头排列
a1:=ma(c,5); 
a2:=ma(c,10); 
a3:=ma(c,20); 
a4:=ma(c,30); 
count(a1< a2 and a2< a3 and a3< a4,3)=3 and not(close< open); (5,10,20,30日均线呈空头排列)。

     均线金叉
a;=ma(c,5); 
b:=ma(c,10); 
cross(a,b); (前二句是5、10日均线,cross是交叉函数,cross(a,b)表示5日均线上穿10日均线金叉)。
     
     均线死叉  
a;=ma(c,5); 
b:=ma(c,10); 
cross(b,a); (前二句是5、10日均线,cross是交叉函数,cross(b,a)表示5日均线下穿10日均线死叉)。
     
     均线粘合
 ma1:=ma(c,5); 
ma2:=ma(c,10); 
ma3:=ma(c,20); 
p1:=abs(ma1-ma2)+abs(ma2-ma3); 
p1/c< 2/100 and ma1>ref(ma1,1) and ma2>ref(ma2,1); (前三句是三根均线,p1是第一根均线减第二根均线差的绝对值与第二根均线减第三根均线差的绝对值之和,最后一句是p1与收盘价的比值小于一定比率2%(一般该比率为2%以下,同时前二均线今日比昨日上翘)。 

在个股主图叠加(引用大盘数据的)线:   
(HHV(H,n)-LLV(L,n))/(HHV(INDEXDATA("1a0001",&HIGH),n)-LLV(INDEXDATA("1a0001",&LOW),n))
*(INDEXDATA("1a0001",&CLOSE)-LLV(INDEXDATA("1a0001",&LOW),n)+LLV(L,n));

活跃度
CJBS:=MAX(0,SUBSAMEDAY(&VOLAMOUNT));  成交笔数
活跃度:CJBS/CAPITAL*100,VOLSTICK;
MA13:MA(活跃度,13);

每笔均量
CJBS:=MAX(0,SUBSAMEDAY(&VOLAMOUNT));
每笔均量:VOL/CJBS*100,COLORYELLOW;
每笔均量,STICK,COLORRED;
MA5:MA(每笔均量,5),COLORWHITE;
MA13;MA(每笔均量,13),COLORMAGENTA;
MA60:MA(每笔均量,60),COLORGREEN;

每笔均额
CJBS:=MAX(0,SUBSAMEDAY(&VOLAMOUNT));
每笔均额:AMOUNT/CJBS,COLORYELLOW;
每笔均额,STICK,COLORRED;
MA5:MA(每笔均额,5),COLORWHITE;
MA:MA(每笔均额,13),COLORMAGENTA;
MA:MA(每笔均额,60),COLORGREEN;

交易强度
CJBS:=MAX(0,SUBSAMEDAY(&VOLAMOUNT));
交易强度:VOL*100/CJBS/CAPITAL*100,VOLSTICK;

三,公式函数的活用

剔除选定股票,选股时剔除ST股票
STRFIND(STRLEFT(STKNAME,2),\'ST\')=0; 字符串函数,符合条件时返回为0。

获得成交笔数 
 MAX(0,SUBSAMEDAY(&VOLAMOUNT))


变色柱线(在个股于指数之间画不同颜色的柱线)
STICKLINE(个股>指数,个股,指数,4,0),color6666ff;
STICKLINE(个股<指数,个股,指数,4,1),color66bb66;

变色曲线(符合条件时改变颜色,下为用于KDJ公式)
k:PARTLINE(k,k>d,RGB(255,0,0),k[ 此文章的编辑者为: BCXYMMLL,   2007-03-17 15:26 ]

公式中引用其他公式

A2:=BARSLAST(REF(CROSS(KDJ.k,KDJ.d),1));引用KDJ公式的K,D并金叉
B2:=REF(C,A2+1)>C AND REF(KDJ.k,A2+1)DRAWTEXT(FILTER(B2>0,5),L+0.39,\'KDJ底背\'),coloryellow;

语言规范:

在自定义公式里面的各种符号(如,“;” )只能用半角不能用全角。

关键字   if else while  break  continue  return (无大小写之分)
 
常数   浮点数、整数、字符串
 
分隔符  “ ”  ‘ ’  ( ) ;  {  }  注释/* */
 
标识符    由字母和数字组成,由字母开头,不分大小写
 
运算符(优先级从高到低排列,同级同行)
 *  /
 
+  -
 
 !=  >  < >=  <=
 
And
 
Or
 
语句 赋值    a = b 
 
条件    IF (a==b) c=d;
 
循环    while a==b  c=d;
 
函数调用    func(a,b)
 

赋值语句:

       其一般形式为:

       a=b;         含义为将b的值付给a。

       几个运算符“=”赋值、 “:=” 赋值“:”赋值并输出数值或字符串“:>”赋值并输出图形。

       注意:“=”和“:=”两个运算符的意义、用法完全相同。这样做主要是为了更好地兼容市场上目前的各种带有公式编辑功能的分析软件。


同花顺公式函数注释(常用部分)

逻辑函数:

1、条件函数:根据条件求不同的值。 

用法:IF(X,A,B)若X不为0则返回A,否则返回B。 例如:(CLOSE>OPEN,HIGH,LOW)表示该周期收阳则返回最高值,否则返回最低值。

引用函数:

1、满足条件的周期数:统计满足条件的周期数。

用法:COUNT(X,N),统计N周期中满足X条件的周期数,若N=0则从第一个有效值开始。例如:COUNT(CLOSE>OPEN,20)表示统计20周期内收阳的周期数。

2、第一个条件成立到当前的周期数:统计第一个条件成立到当前的周期数。

用法:BARSSINCE(X):第一次X不为0到现在的天数。例如:BARSSINCE(HIGH>10)表示股价超过10元时到当前的周期数。

3、上一次条件成立到当前的周期数:上一次条件成立到当前的周期数。

用法:BARSLAST(X),上一次X不为0到现在的天数。例如:BARSLAST(CLOSE/REF(CLOSE,1)>=1,1)表示上一个涨停板到当前的周期数。

4、有效周期数:求总的周期数。

用法:BARSCOUNT(X),第一个有效数据到当前的天数。

5、向前赋值:将当前位置到若干周期前的数据设为1。

用法:BACKSET(X,N),若X非0,则将当前位置到N周期前的数值设为1。例如:BACKSET(CLOSE>OPEN,2)若收阳则将该周期及前一周期数值设为1,否则为0。

6、求和:求总和。

用法:SUM(X,N),统计N周期中X的总和,N=0则从第一个有效值开始。例如:SUM(VOL,5)周期设为日线时,表示最近5个交易日的成交量之和。SUM(VOL,0)表示从传数据过来第一天起的成交量总和,具体如在区间统计里统计“总手” SUM(VOL,0)即是指全区间的成交量之和。

7、移动平均:求移动平均。

用法:SMA(X,N,M),求X的N日移动平均,M为权重。算法: 若Y=SMA(X,N,M)则 Y=[M*X+(N-M)*Y']/N,其中Y'表示上一周期Y值,N必须大于M。例如:SMA(CLOSE,30,1)表示求30日移动平均价。

8、向前引用:引用若干周期前的数据。

用法:REF(X,A),引用A周期前的X值。例如:REF(CLOSE,1)表示上一周期的收盘价,在日线上就是昨收。

9、简单移动平均:求简单移动平均。

用法:MA(X,N),求X的N日移动平均值。算法:(X1+X2+X3+,,,+Xn)/N。例如:MA(CLOSE,10)表示求10日均价。

10、最低值:求最低值。

用法:LLV(X,N),求N周期内X最低值,N=0则从第一个有效值开始。例如:LLV(LOW,0)表示求历史最低价。

11、最高值:求最高值。

用法:HHV(X,N),求N周期内X最高值,N=0则从第一个有效值开始。 例如:HHV(HIGH,30)表示求30日最高价。

12、指数平滑移动平均:求指数平滑移动平均。

用法:EMA(X,N),求X的N日指数平滑移动平均。算法:若Y=EMA(X,N)则Y=[2*X+(N-1)*Y']/(N+1),其中Y'表示上一周期Y值。例如:EMA(CLOSE,30)表示求30日指数平滑均价。

13、动态移动平均:求动态移动平均。

用法:DMA(X,A),求X的动态移动平均。算法: 若Y=DMA(X,A)则 Y=A*X+(1-A)*Y',其中Y'表示上一周期Y值,A必须小于1。例如:DMA(CLOSE,VOL/CAPITAL)表示求以换手率作平滑因子的平均价。

14、最高值周期数:求上一高点到当前的周期数。

用法:HHVBARS(X,N):求N周期内X最高值到当前周期数,N=0表示从第一个有效值开始统计。例如:HHVBARS(HIGH,0)求得历史新高到到当前的周期数。

15、最低值周期数:求上一低点到当前的周期数。

用法:LLVBARS(X,N):求N周期内X最低值到当前周期数,N=0表示从第一个有效值开始统计。例如:LLVBARS(HIGH,10)求得10日最低点到当前的周期数。

16、加权移动平均:求加权移动平均。

用法:WMA(X,A),求X的加权移动平均。
算法:若Y=WMA(X,A) 则Y=(N*X0+(N-1)*X1+(N-2)*X2)+...+1*XN)/(N+(N-1)+(N-2)+...+1) X0表示本周期值,X1表示上一周期值...。
例如:WMA(CLOSE,20)表示求20日加权均价。

17、求和:向前累加到指定值到现在的周期数。

用法:SUMBARS(X,A):将X向前累加直到大于等于A,返回这个区间的周期数。例如:SUMBARS(VOL,CAPITAL)求完全换手到现在的周期数。

 时间函数:

1、总开盘分钟:求当前代码类型的开市交易时间。

用法:TRADETIME。返回交易时间,单位为分钟。目前一般市场都返回242,与日期或具体的股票无关。

2、距开盘分钟:求当前时刻距开盘有多长时间。

用法:FROMOPEN。返回当前时刻距开盘有多长时间,单位为分钟。例如:当前时刻为早上十点,则返回31。

3、距午夜秒:求当前时刻距开盘有多长时间。

用法:FROMNIGHT。返回当前时刻距午夜有多长时间,单位为秒。例如:当前时刻为早上十点,则返回36000。

4、时间格式:转换时间格式。

用法:FORMATTIME(N)。目前只支持 N=1 把当前时间转换成距开盘分钟数返回。例如:分时中的量比曲线公式:(VOL*(TRADETIME+1)*5)/(FORMATTIME(1)*FIVEDAYVOL)。

5、时间差:计算两个时间之间的差。

用法:COUNTTIME(N,L,K)。N、L为时间,其格式为YYYYMMDD。K为1、2或者3。当K为1时返回第二个之间比第一个时间晚多少年。当K为2时返回第二个之间比第一个时间晚多少月。当K为3时返回第二个之间比第一个时间晚多少日。例如:COUNTTIME(20000808,19990606,2)其返回值为-2。注意:这里返回值有正负号。

算术函数:

1、绝对值:求绝对值。 

用法:ABS(X)返回X的绝对值。例如:ABS(-34)返回34。

2、介于:介于两个数之间。 

用法:BETWEEN(A,B,C)表示A处于B和C之间时返回1,否则返回0 

例如:BETWEEN(CLOSE,MA(CLOSE,10),MA(CLOSE,5))表示收盘价介于5日均线和10日均线之间。

3、最大值:求最大值。 

用法:MAX(A,B)返回A和B中的较大值。例如:MAX(CLOSE-OPEN,0)表示若收盘价大于开盘价返回它们的差值,否则返回0。

4、最小值:求最小值。 

用法:MIN(A,B)返回A和B中的较小值。例如:MIN(CLOSE,OPEN)返回开盘价和收盘价中的较小值。

5、求模运算:求模运算。 

用法:MOD(A,B)返回A对B求模。例如:MOD(26,10)返回6。

6、求逻辑非:求逻辑非。 

用法:NOT(X)返回非X,即当X=0时返回1,否则返回0。例如:NOT(5>3)返回0。

7、范围:介于某个范围之间。

用法:RANGE(A,B,C)表示A大于B同时小于C时返回1,否则返回0。例如:RANGE(CLOSE,MA(CLOSE,5),MA(CLOSE,10))表示收盘价大于5日均线并且小于10日均线。

8、求相反数:求相反数。 

用法:REVERSE(X)返回-X。 例如REVERSE(CLOSE)返回-CLOSE。

9、余弦值:求余弦值。

用法:COS(X)返回X的余弦值。

10、正弦值:求正弦值。

用法:SIN(X)返回X的正弦值。

11、平方根:开平方。

用法:SQRT(X)为X的平方根。例如:SQRT(CLOSE)收盘价的平方根。

12、上穿:两条线交叉。 

用法:CROSS(A,B)表示当A从下方向上穿过B时返回1,否则返回0。例如:CROSS(MA(CLOSE,5),MA(CLOSE,10))表示5日均线与10日均线交金叉。

13、维持:两条线维持一定周期后交叉。 

用法:LONGCROSS(A,B,N)表示A在N周期内都小于B,本周期从下方向上穿过B时返回1,否则返回0。例如:LONGCROSS(MA(CLOSE,5),MA(CLOSE,10),5)表示5日均线维持5周期后与10日均线交金叉。

14、空:判断是否为空。

用法:ISNULL(A)表示如果A为空(即没有数据)则返回1,否则返回0。

15、幂:求幂。

用法:POW(X,Y)。求X的Y次幂。例如:POW(2,3)为8。


绘图函数

  位图

含义:在图形上绘制位图。
用法:
DRAWBMP(COND,PRICE,BMPFILE),当COND条件满足时,在PRICE位置画BMPFILE文件名指定的BMP位图(缺省路径为软件安装目录登录用户名)。
例如:DRAWBMP(CLOSE>OPEN,LOW,'SUN')表示当收阳时在最低价位置画软件安装目录登录用户名Sun.BMP位图。
※BMPFILE参数指定的BMP文件默认路径为当前用户目录,如果不带后缀名即表示BMP文件,也可带后缀名使用JPG和GIF文件。
也可不用用户目录而使用全路径,路径中的''要写两个以下字符串作为参数都是合法的,如果文件存在的话:
"SUN","SUN.BMP","SUN.JPG","SUN.GIF","C:\hexin\SUN.JPG"

填充背景

含义:根据条件填充背景区域。
用法:
DRAWGBK(COND,COLOR),填充满足COND条件的背景区域。COLOR可以为渐变颜色STRIP,也可以为BMP图形文件名(缺省路径为"软件安装目录登录用户名"),若省略COLOR则使用指标线颜色填充(可以使用COLORRED等描述符设定)。
例如:DRAWGBK(CLOSE>OPEN),COLORRED;表示收阳时用红色填充背景。
DRAWGBK(CLOSE>OPEN,'MyBMP');表示收阳时用软件安装目录登录用户名MyBMP.BMP填充背景。

画图标

含义:在图形上绘制小图标。
用法:
DRAWICON(COND,PRICE,TYPE),当COND条件满足时,在PRICE位置画TYPE图标,TYPE是曲线标志的名称。
例如:DRAWICON(CLOSE>OPEN,LOW,"buy")表示当收阳时在最低价位置画买入图标。

显示文字

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

RGB颜色

含义:指定颜色。
用法:
RGB(R,G,B),表示用三原色红(R)绿(G)蓝(B)混合组成指定颜色,每种颜色值可以设定为0-255。
例如RGB(255,0,0)表示红色,RGB(0,0,255)表示蓝色

画柱线

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

提示文字

TIPTEXT(COND,PRICE,TEXT),当COND条件满足时,在PRICE位置显示图标,若PRICE为0,则在图形底部显示图标。
例如:TIPTEXT(CLOSE/OPEN>1.08,LOW,'大阳线,股价为:'+close)表示当日涨幅大于8%时在最低价位置显示图标,鼠标移近时显示文字'大阳线,股价为:15.88'字样。
※显示为三角图标

画垂直线

含义:在图形上绘制垂直线。
用法:
VERTLINE(COND,TYPE),当COND条件满足时,沿垂直方向绘制TYPE类型的线段,TYPE=0表示实线,1表示虚线'---',2表示点线'...',3表示点划线'-.-.-',4表示点点划线'-..-..-'。
例如:VERLINE(HIGH>=HHV(HIGH,20),1)表示在创20天新高画垂直虚线

画水平线

含义:在图形上绘制水平线。
用法:
HORLINE(COND,PRICE,TYPE,EXTEND),当COND条件满足时,在PRICE位置沿水平方向绘制TYPE类型的线段,TYPE=0表示实线,1表示虚线'---',2表示点线'...',3表示点划线'-.-.-',4表示点点划线'-..-..-'。EXTEND=1 表示向左延长,=2表示向右延长,=3表示左右

网上搜集的公式

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

如果想显示年线向上的天数时(本人的指标):
趋势:BARSLAST(MA(C,250)<=REF(MA(C,250),1))/10,colorwhite;(注:显示天数和斜直线,由于天数太长时,如大牛股,可能长达400天,斜直线垂直高度太高,故用1/10。亦可不显示斜直线,在“曲线属性”内设置,只显示天数)。

怎么定义一阳线紧跟两阴线的函数?
ref(c,2)>ref(o,2) and ref(c,1)
股价创出新高后,又调整到30日均线附近的选股公式如何编写?

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

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


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


日macd翻绿3天内又翻红的个股。
count(cross(0,"MACD.MACD" ),3)=1 and  count(cross("MACD.MACD",0 ),3)=1


下面的公式也是应网上的朋友要求改的一个公式,公式中有一个飞狐的‘是否最后周期’(islastbar)的函数同花顺不支持,改起来难道较大。


 OK:=EMA(O,60);
BARSCOUNTOK:=EMA(O,60);
SUMBARSOK:=EMA(O,60);
CG:=EMA(C,60);
PDU:=IF(OK>REF(OK,1) AND CG>REF(CG,1),1,0);
Z1:=MA(C,13);
ZX:=REF(Z1,13/2+1);
LIFE:=(EMA(C,60)+EMA(C,90))/2;
VAR1:=(2*C+H+L)/4;
SNOOK:=EMA(VAR1,99)*0.91;
A1:=(C-REF(C,1))/REF(C,1)*100;
MA5:=BARSLAST(A1>3);
MA20:=IF(MA5>0,1,0);
STICKLINE(C>ZX AND C>=LIFE,O,C,3,0),COLOR0000FF;
STICKLINE(C>ZX AND C<=SNOOK,O,C,3,0),COLOR00FF00;
STICKLINE(C>ZX AND C>SNOOK AND CSTICKLINE(C>ZX AND MA20=0,O,C,3,0),COLOR00FFFF;
STICKLINE(C>ZX,O,C,1,0),COLORFFFFFF;
DRAWICON(CROSS(C,ZX),L*0.99,1);
DRAWICON(CROSS(ZX,C),H*1.01,5);
BY20:=MA(C,5);
招财猫:MA(C,20),LINETHICK2,COLOR00FFFF;
鼠变异:IF(BY20>招财猫,招财猫,BY20),LINETHICK2,COLOR808080;
CROSS(C,ZX) AND C>ZX AND MA20=0 ,LINETHICK0;
RB:=BARSCOUNT(C)=0;
RD:=BARSLAST(RB);
K2:=HHV(H,50);
K1:=LLV(L,50);
T1:=C>ZX AND C>=LIFE;
T2:=C>ZX AND C>SNOOK AND CT3:=C>ZX AND C<=SNOOK;
T4:=C<=ZX;
T5:=鼠变异>REF(鼠变异,1) AND 鼠变异!=招财猫 ;
T6:=鼠变异>REF(鼠变异,1) AND 鼠变异=招财猫 AND PDU!=1;
T7:=鼠变异>REF(鼠变异,1) AND 鼠变异=招财猫 AND PDU=1;
T8:=C>ZX AND MA20=0 ;
EEE:=T1+T2+T3+T4+T5+T6+T7+T8 ;
E:=(K2-K1)/(EEE+8) ;
j:=FILTER(C>0 AND t1>0,COUNT(C>0 AND t1>0,0));
j2:=FILTER(C>0 AND t2>0,COUNT(C>0 AND t2>0,0));
j3:=FILTER(C>0 AND t3>0,COUNT(C>0 AND t3>0,0));
j4:=FILTER(C>0 AND t4>0,COUNT(C>0 AND t4>0,0));
j5:=FILTER(C>0 AND t5>0,COUNT(C>0 AND t5>0,0));
DRAWTEXT(j,K2-E,'出洞了逮住它'),COLOR0000FF;
DRAWTEXT(j2 ,K2-E+0.2,'鼠玩猫守着它'),COLORFF9900;
DRAWTEXT(j3 ,K2-E,'露尾巴动作快'),COLOR00FF00;
DRAWTEXT(j4 ,K2-E,'没有了打个盹'),COLOR808080;
DRAWTEXT(j5,K2-E*2,'发现鼠迹'),COLOR00FF00;

2,3行可以去除不用,
39--48行为改动部分,用信号过虑+全部统计两个函数来达到上述函数目的。下面是它的原公式部分,可以看出改动较大。
DRAWTEXT(C>0 AND T1>0 AND ISLASTBAR,K2-E,'出洞了逮住它!'),COLOR0000FF;
DRAWTEXT(C>0 AND T2>0 AND ISLASTBAR,K2-E,'鼠玩猫守着它!,'),COLORFF7700;
DRAWTEXT(C>0 AND T3>0 AND ISLASTBAR,K2-E,'露尾巴动作快!,'),COLOR00FF00;
DRAWTEXT(C>0 AND T4>0 AND ISLASTBAR,K2-E,'没有了打个盹!,'),COLOR808080;
DRAWTEXT(C>0 AND T5>0 AND ISLASTBAR,K2-E*2,'发现鼠迹!'),COLOR00FF00;
DRAWTEXT(C>0 AND T6>0 AND ISLASTBAR,K2-E*2,'瞬间鼠影!'),COLORFF66FF;
DRAWTEXT(C>0 AND T7>0 AND ISLASTBAR,K2-E*2,'恶鼠难遁!'),COLOR0000FF;

据说是大智会新一代软件的最新公式,也改了一下,给喜欢公式的朋友,感觉抓大趋势较好,请朋友验证。

Var3:=LLV(HIGH,240); 
Var4:=100*(CLOSE-Var3)/Var3; 
Var5:=REF(LLV(CLOSE,480),1); 
Var6:=REF(HHV(CLOSE,480),1); 
Var7:=100*(CLOSE-Var5)/(Var6-Var5); 
Var8:=(CLOSE-LLV(CLOSE,981))/(HHV(CLOSE,981)-LLV(CLOSE,981))*100; 
Var9:=(CLOSE-LLV(CLOSE,393))/(HHV(CLOSE,393)-LLV(CLOSE,393))*100; 
VarA:=(CLOSE-LLV(LOW,981))/(HHV(HIGH,981)-LLV(LOW,981))*100; 
VarB:=(CLOSE-LLV(LOW,393))/(HHV(HIGH,393)-LLV(LOW,393))*100; 
VarC:=EMA(100*(CLOSE-LLV(LOW,100))/(HHV(HIGH,100)-LLV(LOW,100)),5)/4; 
VarD:=IF(VarC>23.16,VarC,0); 
VarE:=VarC<1; 
VarF:=VarD; 
Var10:=Var4<0 AND Var7<0; 
Var11:=1; 
Var12:=(HIGH+LOW+CLOSE*2)/4*Var11; 
Var13:=EMA(Var12,21); 
Var14:=STD(Var12,21); 
Var15:=((Var12-Var13)/Var14*100+200)/4*Var11; 
Var16:=(EMA(Var15,89)-25)*1.56*Var11; 
Var17:=EMA(Var16,5)*1.22*Var11; 
Var18:=EMA(Var17,3)*Var11; 
Var19:=3*Var17-2*Var18*Var11; 
Var1A:=IF(CROSS(Var19,Var17) AND CROSS(Var19,Var18) AND CROSS(Var17,Var18),1,0); 
Var1B:=IF(CROSS(Var17,Var19) AND CROSS(Var18,Var19) AND CROSS(Var18,Var17),1,0); 
买点:IF(FILTER(Var8=0 AND VarE AND Var10 AND Var1A,5)=1,10,0), colorred; 
卖点:IF(FILTER(Var8=100 AND VarF AND Var1B,5)=1,10,0),  colorgreen; 
Var1C:=EMA(100*(CLOSE-LLV(LOW,100))/(HHV(HIGH,100)-LLV(LOW,100)),13)/4; 
Var1D:=EMA(CLOSE,2)-EMA(CLOSE,89); 
Var1E:=EMA(Var1D,30); 
Var1F:=2*(Var1D-Var1E)*10; 
Var20:=POW(Var1F,3)*0.1+POW(Var1F,2); 
Var21:=SQRT(SQRT(LOW*HIGH*OPEN*CLOSE)); 
Var22:=EMA(Var21*0.97,3); 
Var23:=(HIGH+LOW+CLOSE)/3; 
Var24:=(Var23-MA(Var23,14))/(0.015*AVEDEV(Var23,14)); 
Var25:=IF(YEAR<2008 AND Var1F>0.015,Var20,0)/45; 
庄拉线: Var25,coloryellow ; 
Var26:=EMA(CLOSE,2)-EMA(CLOSE,150); 
Var27:=EMA(Var26,100); 
Var28:=2*(Var26-Var27); 
Var29:=POW(Var28,3)*0.1+POW(Var28,1); 
Var2A:=SQRT(SQRT(LOW*HIGH*OPEN*CLOSE)); 
Var2B:=EMA(Var2A*0.97,3); 
Var2C:=(HIGH+LOW+CLOSE)/3; 
Var2D:=(Var2C-MA(Var2C,14))/(0.015*AVEDEV(Var2C,14)); 
黑马线:IF( Var28>0.1,Var29,0)*5,  colorcyan; 
量价线:(CLOSE-MA(CLOSE,21))/MA(CLOSE,21)*100,  colorwhite; 
Var2E:=IF(FILTER(量价线>0 AND 量价线<3,5)=1,12,0); 
涨幅前兆: IF(FILTER(庄拉线>0 AND 庄拉线<0.5 AND Var2E AND Var1C<3,10)=1,10,0), colorred; 
选股利器: IF(FILTER(Var2E>0 AND Var1C<2 AND 庄拉线>0 AND 庄拉线<1 
AND 黑马线>0 AND 黑马线<1.5 AND Var2E>0,5)=1,10,0),colorff1166;
DRAWTEXT(买点>0,10,'买'),colorred; 
DRAWTEXT(卖点>0,10,'卖'),colorgreen; 
DRAWTEXT(涨幅前兆>0,10,'前兆'),colorred; 
DRAWTEXT(选股利器>0,10,'选股利器'),Colorff1166;