同花顺公式编写程序及规则.docx
- 文档编号:15837470
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:23
- 大小:27.05KB
同花顺公式编写程序及规则.docx
《同花顺公式编写程序及规则.docx》由会员分享,可在线阅读,更多相关《同花顺公式编写程序及规则.docx(23页珍藏版)》请在冰点文库上搜索。
同花顺公式编写程序及规则
同花顺公式编写+现有公式
公式编写规则
语言规范:
在自定义公式里面的各种符号(如,“;”)只能用半角不能用全角。
关键字
ifelsewhilebreakcontinuereturn(无大小写之分)
常数
浮点数、整数、字符串
分隔符
“”‘'();{}注释/**/
标识符
由字母和数字组成,由字母开头,不分大小写
运算符(优先级从高到低排列,同级同行)
*/
+-
==!
=><>=<=
And
Or
语句
赋值a=b
条件IF(a==b)c=d;
循环whilea==bc=d;
函数调用func(a,b)
直接访问数据项的函数
例如:
OPEN[t]为t周期之前的开盘价
所有行情数据项(CLOSE等)都与此相同。
标识符:
标识符在表达式中只存名称,值保留在符号表。
标识符包括函数名、参数名和变量名。
函数名用来传递函数返回值;参数名用于函数调用时的参数传递;变量名在计算中存储中间计算结果。
分隔符:
符号
含义
“”
引用字符串
‘'
引用字符
()
控制运算的优先级
;
每行语句的结束标志
{}
将多个语句组合成一个语句体
/**/
注释,无任何实际功能
赋值语句:
其一般形式为:
a=b;含义为将b的值付给a。
几个运算符“=”“:
=”“:
”“:
>”。
其含义分别为“赋值”、“赋值”、“赋值并输出数值或字符串”、“赋值并输出图形”。
注意:
“=”和“:
=”两个运算符的意义、用法完全相同。
这样做主要是为了更好地兼容市场上目前的各种带有公式编辑功能的分析软件。
条件语句:
其一般形式为:
IF(逻辑表达式)语句1;
ELSE语句2;
上述结构表示:
如果逻辑表达式的值为非0(TURE)即真,则执行语句1,执行完语句1从语句2后开始继续向下执行;如果表达式的值为0(FALSE)即假,则跳过语句1而执行语句2。
注意:
1、条件执行语句中"ELSE语句2;"部分是选择项,可以缺省,此时条件语句变成:
IF(逻辑表达式)语句1;
表示若逻辑表达式的值为非0则执行语句1,否则跳过语句1继续执行。
2、如果语句1或语句2有多于一条语句要执行时,必须使用"{"和"}"把这些语句包括在其中,此时条件语句形式为:
IF(逻辑表达式){语句体1;}
ELSE{语句体2;}
这里语句体指多个语句,每个语句都必须以“;”结尾。
3.条件语句可以嵌套,这种情况经常碰到,但条件嵌套语句容易出错,其原因主要是不知道哪个IF对应哪个ELSE。
例如:
IF(x>20ORx<-10)
IF(y<=100ANDy>x)
A="Good";
ELSE
B="Bad";
对于上述情况,规定:
ELSE语句与最近的一个IF语句匹配,上例
中的ELSE与IF(y<=100ANDy>x)相匹配。
为了使ELSE与IF(x>20ORx<-10)相匹配,必须用花括号。
如下所示:
IF(x>20ORx<-10)
{IF(y<=100ANDy>x)
A="Good";}
ELSEB="Bad";
4.可用阶梯式IF-ELSE-IF结构。
阶梯式结构的一般形式为:
IF(逻辑表达式1)语句1;
ELSEIF(逻辑表达式2)语句2;
ELSEIF(逻辑表达式3)语句3;
循环语句:
while循环的一般形式为:
while(条件)语句;
while循环表示当条件为真时,便执行语句。
直到条件为假才结束循环。
并继续执行循环程序外的后续语句。
注意:
1、可以有多层循环嵌套。
2、语句可以是语句体,此时必须用"{"和"}"括起来。
break语句
break语句通常用在循环语句中。
当break语句用while循环语句中时,可使程序终止循环而执行循环后面的语句,通常break语句总是与if语句联在一起。
即满足条件时便跳出循环。
注意:
1、break语句对if-else的条件语句不起作用。
2、在多层循环中,一个break语句只向外跳一层。
continue语句
continue语句的作用是跳过循环本中剩余的语句而强行执行下一次循环。
continue语句只用在while循环体中,常与if条件语句一起使用,用来加速循环。
函数调用:
调用函数的基本方式为:
函数名(参数,参数,…)
其返回值为函数里面的return语句规定的返回值。
若无return语句,则返回被调用函数里,以函数名命名的变量的值。
若无以函数名命名的变量,则返回最后一个输出的值。
若无输出的值,则返回最后一个被调用的语句的值。
例如:
调用KDJ指标。
KDJ函数的名称为kdj,其参数和内容如下:
参数名
最小值
最大值
默认值
N1
1
100
9
M1
2
40
3
M2
2
40
3
函数内容为:
RSV:
=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:
SMA(RSV,M1,1);
D:
SMA(K,M2,1);
J:
3*K-2*D
则当您在其它函数里输入a=KDJ(8,6,6)的时候,相当于计算N1=8,M1=6,M2=6时的J值,并把这个值赋给a。
注意:
1、当传递的参数数目不等于被调用函数设置的参数数目时。
a、没有传递参数。
则采用原来设置的默认参数计算。
b、传递参数少于被调用函数设置的参数数目。
则将参数传过去,依次改变前面同样数目参数的值,后面其它的参数采用原来设置的默认参数计算。
c、传递参数大于被调用函数设置的参数数目。
则将参数传过去,依次改变被调用函数的参数值,多余的参数不起作用。
2、函数名称不区分大小写。
3、新建的函数,其函数名可能与其它以存在的函数里面的内部变量重名。
这样在调用那个函数时,那个内部变量将变成对这个新建函数的函数调用,从而产生错误。
所以,在新建函数起名时要注意。
返回值:
自定义公式里面如果有多数据项输出,则调用此函数的时候返回值默认为最后一个输出。
如果希望确定某项输出则可用return,或者将函数名指定为其中一项输出。
关于“空”:
所谓“空”即指没有数据。
在某些情况下,一些数据项可能取不到数据,这时返回值为“空”。
例如,yearrep(&jlr,4),其含义为取该公司3年前年报的净利润。
如果某家公司上市时间较短,而无三年前的年报数据,则其值为“空”。
1、“空”与任何数据作计算时,相应计算被取消。
例如:
7×NULL(即“空”)得到的结果为7。
2、“空”与任何数据比较大小时,“空”较小。
例如:
-7>NULL(即“空”)得到的结果为1(即条件满足)。
这样的结果可能与您原来希望得到的数值不符,如果您想避免这种情况可以用ISNULL函数来判断某个数据是否为“空”(相关说明见后面的系统函数说明部分)。
公式编写规则
代码与周期:
由于证券市场里的各项数据都与代码、时间密切相关,所以在这里的各项数据都只能用于特定的一类或几类代码及相应的一个或几个周期。
(注意:
同一个数据项可能适用于多类代码及多个周期,其具体的数值也将不同。
)
代码的分类:
个股(含债券)。
沪深指数(仅1A0001(统计上海A、B股基金)、1A0002(统计上海A股)、1A0003(统计上海B股)、399001(统计深圳A、B股基金)、399002(统计深圳A股)、399003(统计深圳B股)六个指数)。
期货。
周期分类:
实时(记录当前传过来的数据)、成交明细(记录每一笔成交的数据)、分时(记录每分钟成交的数据)、分钟K线(以1分钟为单位的K线数据)、日K线(以1个交易日为单位的K线数据)。
注意:
一、分时与分钟K线的区别在于:
分钟K线数据较多,包含了与K线相关的高、开、低、收、成交次数等数据。
二、沪深指数没有成交明细周期的数据。
三、适用于分钟K线、日K线周期的所有数据,都同时适用于个股与沪深指数,只不过其数据内容不同而已。
由于行情数据和财务数据同属于基本数据项,即其数值是主站端直接发过来,所以他们自身并不带周期。
而其它计算项,即由客户端编写公式计算得到的数据项都是带有周期的。
也就是说在编写一个公式的时候我们需要确定一个周期(由于分钟K线、日K线周期里的各项数据仅有微小差别,所以统称为技术分析周期),并且想清楚这个公式里调用的各项基本数据在这个周期下的具体含义。
以后只有在这个周期下才能调用这个公式。
注意:
基本数据项自身并不带周期,也就是说编写公式的时候,如果所选用的周期不在此数据项的适用范围内,测试公式的时候系统是不会报错的,但这个数据项的数值将为“空”,即取不到任何数据。
注意:
所有的基本数据项都可以直接拖到表格里,它将依照表格的代码、周期而显示相应的数值。
也都可以直接拖到窗口里作为一个曲线输出,但一般不推荐这样做,如果要画曲线最好新编写一个“曲线公式”。
另外,各个数据项用于期货时的意义另文说明。
通用数据项:
NEW(现价)
含义:
用于个股时为最近一笔成交的价格。
用于沪深指数时为最近一次从交易所传来的指数值。
用于:
个股的实时、成交明细周期。
沪深指数的实时周期。
NEWVOL(现手)
含义:
用于个股时为最近一笔成交的成交量。
用于沪深指数时为对应市场的所有股票的最后一笔成交量之和。
用于:
个股的实时、成交明细周期。
沪深指数的实时周期。
INVOL(内盘)、OUTVOL(外盘)
含义:
内盘、外盘(又称为主动性抛盘、主动性买盘)成交量。
判断依据为若某笔成交,其价格小于等于前一次传过来的买一的价格,则称为内盘;若其价格大于等于前一次传过来的卖一的价格,则称为外盘。
(注意,内外盘之和一般不等于总成交量)在周期为“实时”、“分时”时,为当日的内、外盘。
在周期为“分钟K线”和“日K线”时,分别为某一分钟和某一日的内、外盘。
用于指数时指所有相应股票的内、外盘之和。
用于:
个股的实时、分时、分钟K线、日K线周期。
沪深指数的实时、分时、分钟K线、日K线周期。
OPEN(开盘)、HIGH(最高)、LOW(最低)
含义:
在实时周期时,为当日的开盘价、最高价、最低价。
在分钟K线、日K线周期时,分别为当周期的开盘价、最高价、最低价。
用于:
个股的实时、分钟K线、日K线周期。
沪深指数的实时、分钟K线、日K线周期。
CLOSE(收盘)
含义:
当周期的收盘价。
用于:
个股的分钟K线、日K线周期。
沪深指数的分钟K线、日K线周期。
PRE(昨收)
含义:
上一交易日的收盘价。
(注意,在分钟K线周期,也是昨日收盘价,而不是上一周期的收盘价。
)如果当天有除权,则其值为除权之后的昨日收盘价。
例如:
某股票昨天收盘20元,今天除权,10送10。
则今日PRE值为10元。
用于:
所有类型、所有周期。
MONEY(金额)
含义:
在实时、分时周期时代表当日的成交金额只和。
在分钟K线、日K线周期时代表那一个周期的成交金额只和。
当用于指数时,指此指数所包含所有交易品种成交金额之和。
用于:
个股的实时、分时、分钟K线、日K线周期。
沪深指数的实时、分时、分钟K线、日K线周期。
VOL(总手)
含义:
在实时、分时、成交明细周期时代表当日的成交量只和。
在分钟K线、日K线周期时代表那一个周期的成交量只和。
当用于指数时,指此指数所包含所有交易品种成交量之和。
用于:
个股的实时、分时、成交明细、分钟K线、日K线周期。
沪深指数的实时、分时、分钟K线、日K线周期。
(注意,VOL与MONEY相比多了一个成交明细周期。
)
OPENVOL(开盘量)
含义:
开盘时第一笔成交的成交量。
当用于指数时,指此指数所包含所有交易品种开盘集合竞价成交量之和。
用于:
个股的实时、日K线周期。
沪深指数的实时、日K线周期。
ZQMC(名称)、CODE&TYPE(代码)
含义:
证券的名称、代码。
用于:
个股的所有周期。
沪深指数的所有周期。
DATETIME(时间)
含义:
显示时间。
当用于不同周期的时候,系统会自动传送相应的时间类型。
而具体的显示方案则在“窗口属性”的“时间坐标”项里的“时间格式”一栏里选择。
用于:
个股、沪深指数所有的周期。
VALIDBEGIN(起始)、VALIDEND(终止)
含义:
区间统计的起始、终止时间。
当用于不同周期的时候,系统会自动传送相应的时间类型。
而具体的显示方案则在“窗口属性”的“时间坐标”项里的“时间格式”一栏里选择。
与DATETIME(时间)的用法类似。
用于:
个股、沪深指数所有的周期。
仅用于个股的数据项:
FIVEDAYVOL(五日总量)
含义:
过去五日各交易成交量之和。
用于:
个股的所有的周期。
(主要用来计算量比)
BUYPRICE1(买一)、BUYPRICE2(买二)、BUYPRICE3(买三)、SELLPRICE1(卖一)、SELLPRICE2(卖二)、SELLPRICE3(卖三)、BUYCOUNT1(买一量)、BUYCOUNT2(买二量)、BUYCOUNT3(买三量)、SELLCOUNT1(卖一量)、SELLCOUNT2(卖二量)、SELLCOUNT3(卖三量)
含义:
委托买入、卖出价格一、二、三及对应的委托数量。
用于:
个股的实时周期。
VOLAMOUNT(成交次数)
含义:
在周期为“实时”时,为当日的成交次数。
在周期为“分钟K线”和“日K线”时,分别为某一分钟和某一日的成交次数。
用于:
个股的实时、分钟K线、日K线周期。
VOLCLASS(成交量分类)
含义:
其数值与该笔成交的价位关系为:
“3”为“成交价<=买三价”,“2”为“买三价<成交价<=买二价”,“1”为“买二价<成交价<=买一价”,“0”为“买一价<成交价<卖一价”,“5”为“卖一价<=成交价<卖二价”,“6”为“卖二价<=成交价<卖三价”,“5”为“卖三价<=成交价”。
(注意,这里的买卖盘的价格都是指上一次传过来的价格,与内外盘原理相同。
也可以将“成交量分类”视为划分更为详细的内外盘。
)
用于:
个股的实时、分时、成交明细。
SELLPRICE(卖出)、BUYPRICE(买入)
含义:
本次成交时的委托卖出、买入价。
即用于成交明细的买一价、卖一价。
用于:
个股的成交明细周期。
仅适用于大盘的数据项:
SELLCOUNT(委卖)、BUYCOUNT(委买)
含义:
当前本类指数所有股票的卖出数量、买入数量之和。
用于:
沪深指数的实时、分时周期。
FALLTREND(下跌趋势)、RISETREND(上涨趋势)
含义:
当前本类指数所有下跌、上涨股票的最新价之和除以本类指数所有股票的最新价之和。
用于:
沪深指数的实时、分时周期。
FALLCOUNT(下跌家数)、RISECOUNT(上涨家数)
含义:
当前本类指数所有下跌、上涨股票的家数之和。
用于:
沪深指数的实时、分时周期。
INDEXLEAD(领先指标)
含义:
即不加权的指标涨跌幅再乘以10000。
具体地说就是,设A=“当前本类指数所有股票的最新价之和”,B=“当前本类指数所有股票的昨日收盘价”。
那么INDEXLEAD=(A-B)/B×10000。
用于:
沪深指数的实时、分时周期。
TOTALSTOCK(本类股票总数)
含义:
本类股票家数之和。
用于:
沪深指数的实时周期。
其它数据项:
CODETYPE(证券类型)
含义:
指明当前商品的类型。
当返回值是0时为指数、1是A股、2是B股、3是债券、4是基金。
用于:
个股、指数的各种周期。
MARKETTYPE(市场类别)、INDEXTYPE(指数种类)
这两个数据项属于保留数据项,目前暂时没用,可能会在以后用到。
财务数据说明
这里的财务数据项都是根据财政部制定的《企业会计制度》(于2001年1月1日起执行)里面规定的季报、中报、年报的各种报表里面的项目编列的。
每一项的具体含义都与《企业会计制度》(2001)里面的规定完全相同。
另外我们还依照上市公司的特性将十大股东的名称、持股数,股东人数,股本结构,权息资料都列在财务数据项中。
由于数据众多(公司、基本有1300多家,几乎每家的数据项都达400多项,且每项又分不同的时期)所以这个数据库相当庞大,检索起来较慢且消耗大量系统资源。
因此我们设立了“常用数据项”目录,这里面有100项左右常用的财务数据,含盖了股民在绝大多数情况下的需求。
这些数据被放在一个特殊的数据文件里面检索速度很快且系统资源占用量较小。
所以大家一般编写公式就在“常用数据项”目录里面找相关的数据就可以了。
而其它的那些数据都是用SQL数据库检索,建议只提供给少数重要客户。
注意:
用纯财务数据写的计算项放在表格里面的时候,周期要选择日线,否则无法显示。
而在其它情况下,财务数据项适用于任何周期。
资讯数据说明
这里列出了您可以使用的各种资讯数据。
您可以将这些资讯数据加入到页面和表格里面。
例如:
您可以将“维赛特资讯”——“个股资讯”——“个股历史资讯”项拖到K线图里,您可以看到出现一个个与相应资讯所对应的图标,即我们通常说的信息地雷。
注意:
这里的各个资讯数据项要主站的支持,即主站要有数据。
财务分析说明
“比较”目录下面是相应数据从97年到2001年年报数据的输出,共5项输出,在表格里先选择“支持多数据项目分解”再拖进去就可以看见5年的内容了。
注意:
“股东权益”等同于“净资产”
MGXJZJ,每股现金及现金等价物净增加额。
计算方法:
现金及现金等价物净增加额/股数
JYXJLRBL,经营活动产生的现金流量净额与净利润比率。
计算方法:
经营活动产生的现金流量净额/净利润
XSXJZYSRBL,销售商品收到现金与主营业务收入比率。
计算方法:
销售商品、提供劳务收到的现金/主营业务收入×100
含义:
正常周转企业该指标应大于1。
如果指标较低,可能是关联交易较大、虚构销售收入或透支将来的销售,都可能会使来年的业绩大幅下降。
ZCBL,资产倍率。
计算方法:
每股市场价/每股资产值
ZZCHBL,总资产回报率。
计算方法:
净利润/总资产期末数×100
JZCSYL,净资产收益率。
计算方法:
净利润/净资产×100
含义:
又称股东权益收益率,这个指标反应股东投入的资金能产生多少利润。
ZCSYL,资产收益率。
计算方法:
净利润×2/(期初资产总额+期末资产总额)×100%
含义:
资产收益率反应了企业的总资产利用效率,或者说是企业所有资产的获利能力。
SHLRL,税后利润率。
计算方法:
净利润/主营业务收入×100
SQLRL,税前利润率。
计算方法:
利润总额/主营业务收入×100
YYLRL,营业利润率。
计算方法:
营业利润/主营业务收入×100=(主营业务利润+其它利润-营业费用-管理费用-财务费用)/主营业务收入×100
ZYYWLRL,主营业务利润率。
计算方法:
主营业务利润/主营业务收入×100
含义:
一个企业如果要实现可持续性发展,主营业务利润率处于同行业前列并保持稳定十分重要。
但是如果该指标异忽寻常地高于同业平均水平也应该谨慎了。
XSMLL,销售毛利率。
计算方法:
(主营业务收入-主营业务成本)/主营业务收入×100
YYCBBL,营业成本比率。
计算方法:
营业成本/主营业务收入×100
含义:
在同行之间,营业成本比率最具有可比性,原因是原材料消耗大体一致,生产设备及工资支出也较为一致,发生在这一指标上的差异可以说明各公司之间在资源优势、区位优势、技术优势及劳动生产率等方面的状况。
那些营业成本比率较低的同行,往往就存在某种优势,而且这些优势也造成了盈利能力上的差异。
相反,那些营业成本比率较高的同行,在盈利能力不免处于劣势地位。
QTYSZKL,其他应收帐款率。
计算方法:
其他应收帐款/流动资产
含义:
其他应收帐款主要核算与生产经营销售活动无关的款项来往,一般应该较小。
如果该指标较高则说明流动资金运用在非正常经营活动的比例高,就应该注意是否与关联交易有关。
GDQYZZL,股东权益周转率。
计算方法:
销售收入/平均股东权益(注意:
此处平均指的是期初值和期末值的算术平均值)
ZZCZZL,总资产周转率。
计算方法:
销售收入/平均资产总额
含义:
该指标越大说明销售能力越强。
GDZCZZL,固定资产周转率。
计算方法:
销售收入/平均固定资产
含义:
该比率是衡量企业运用固定资产效率的指标,指标越高表示固定资产运用效果越好。
ZHZZTS,存货周转天数。
计算方法:
360天×(期初存货+期末存货)/销货成本×2
ZHZZL,存货周转率。
计算方法:
销货成本×2/(期初存货+期末存货)
含义:
存货周转率(天数)表达了公司产品的产销率,如果和同行业其它公司相比周转率太小(或天数太长),就要注意公司产品是否能顺利销售。
SXFYHJ,三项费用合计。
计算方法:
营业费用+管理费用+财务费用
含义:
三项费用之和反应了企业的经营成本如果三项费用合计相对于主营业务收入大幅增加(或减少)则说明企业产生了一定的变化,要提起注意。
GLFYL,管理费用率。
计算方法:
管理费用/主营业务收入
YYFYL,营业费用率。
计算方法:
营业费用/主营业务收入
CWFYL,财务费用率。
计算方法:
财务费用/主营业务收入
YXFZBL,有息负债比率。
计算方法:
(短期借款+一年内到期的长期负债+长期借款+应付债券+长期应付款)/股东权益期末数×100
含义:
无息负债与有息负债对利润的影响是完全不同的,前者不直接减少利润,后者可以通过财务费用减少利润;因此,公司在降低负债率方面,应当重点减少有息负债,而不是无息负债,这对于利润增长或扭亏为盈具有重大意义。
在揭示公司偿债能力方面,100%是国际公认的有息负债对资本的比率的资本安全警戒线。
GDQYYGDZCBL,股东权益与固定资产比率。
计算方法:
(股
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 同花顺 公式 编写 程序 规则