
2021年同花顺公式编写程序及规则.docx
35页精品word学习资料可编辑同花顺公式编写 +现有公式公式编写规章语言规范:在自定义公式里面的各种符号(如, “; ”)只能用半角不能用全角;关键字if else while break continue return (无大小写之分)常数浮点数,整数,字符串名师归纳总结——欢迎下载精品word学习资料可编辑分隔符“ ” ‘ ( )注; {释}/* */名师归纳总结——欢迎下载精品word学习资料可编辑标识符由字母和数字组成,由字母开头,不分大小写名师归纳总结——欢迎下载精品word学习资料可编辑|精.|品.|可.|编.|辑.|学.|习.|资.|料.运算符(优先级从高到低排列,同级同行)* /+ -== .= > < >= <=And Or语句赋值 a = b条件 IF (a==b) c=d; 循环 while a==b c=d; 函数调用 func(a,b)直接拜望数据项的函数例如: OPEN[t] 为 t 周期之前的开盘价全部行情数据项( CLOSE 等)都与此相同;标识符:标识符在表达式中只存名称,值保留在符号表;标识符包括函数名,参数名和变量名;名师归纳总结——欢迎下载精品word学习资料可编辑函数名用来传递函数返回值; 参数名用于函数调用时的参数传递;变量名在运算中储备中间运算结果;分隔符: 符号含义“ ”引用字符串‘ 引用字符( )把握运算的优先级名师归纳总结——欢迎下载精品word学习资料可编辑|精.|品.|可.|编.|辑.|学.|习.|资.|料.;每行语句的终止标志{ }将多个语句组合成一个语句体/* */注释,无任何实际功能赋值语句: 其一般形式为 :a=b; 含义为将 b 的值付给 a;几个运算符 “=”“ := ”“ :;”其“含:义> ”分别为 “赋值 ”, “赋值 ”,“赋值并输出数值或字符串 ”, “赋值并输出图形 ”;留意: “= ”和“:=两”个运算符的意义,用法完全相同;这样做主要是为了更好地兼容市场上目前的各种带有公式编辑功能的分析软件;条件语句: 其一般形式为 :IF( 规律表达式 ) 语句 1; ELSE 语句 2;上述结构表示 : 假如规律表达式的值为非 0(TURE) 即真 , 就执行语句 1, 执行完语句 1 从名师归纳总结——欢迎下载精品word学习资料可编辑语句 2 后开头连续向下执行 ; 假如表达式的值为 0(FALSE) 即假 , 就跳过语句 1 而执行语句 2;留意:1,条件执行语句中 "ELSE 语句 2;" 部分是选择项 , 可以缺省 , 此时条件语句变成 : IF( 规律表达式 ) 语句 1;表示如规律表达式的值为非 0 就执行语句 1 , 否就跳过语句 1 连续执行;2,假如语句 1 或语句 2 有多于一条语句要执行时 , 必需使用 "{" 和"}" 把这些语句包括在其中 , 此时条件语句形式为 :IF( 规律表达式 ) { 语句体 1; } ELSE { 语句体 2; }名师归纳总结——欢迎下载精品word学习资料可编辑|精.|品.|可.|编.|辑.|学.|习.|资.|料.这里语句体指多个语句,每个语句都必需以 “;结”尾;3. 条件语句可以嵌套 , 这种情形经常遇到 , 但条件嵌套语句简洁出错 , 其缘由主要是不知道哪个 IF 对应哪个 ELSE;例如 :IF(x>20 OR x<-10) IF(y<=100 AND y>x)A= "Good";ELSEB="Bad";对于上述情形 , 规定 : ELSE 语句与最近的一个 IF 语句匹配 , 上例中的 ELSE 与 IF(y<=100 AND y>x) 相匹配;为了使 ELSE 与 IF(x>20 OR x<-10) 相匹配 , 必需用花括号;如下所示 :IF(x>20 OR x<-10){ IF(y<=100 AND y>x) A="Good"; }名师归纳总结——欢迎下载精品word学习资料可编辑ELSE B="Bad";4. 可用阶梯式 IF-ELSE-IF 结构;阶梯式结构的一般形式为 :IF( 规律表达式 1) 语句 1;ELSE IF( 规律表达式 2) 语句 2;ELSE IF( 规律表达式 3) 语句 3;循环语句:while 循环的一般形式为 : while( 条件 ) 语句;名师归纳总结——欢迎下载精品word学习资料可编辑|精.|品.|可.|编.|辑.|学.|习.|资.|料.while 循环表示当条件为真时 , 便执行语句; 直到条件为假才终止循环; 并连续执行循环程序外的后续语句;留意 :1,可以有多层循环嵌套;2,语句可以是语句体 , 此时必需用 "{" 和"}" 括起来;break 语句break 语句通常用在循环语句中;当 break 语句用 while 循环语句中时,可使程序终止循环而执行循环后面的语句 , 通常 break 语句总是与 if 语句联在一起; 即中意条件时便跳出循环;留意 :1,break 语句对 if-else 的条件语句不起作用;2,在多层循环中 , 一个 break 语句只向外跳一层;continue 语句continue 语句的作用是跳过循环本中剩余的语句而强行执行下一次循环;continue 语句只用在 while 循环体中 , 常与 if 条件语句一起使用 , 用来加速循环;名师归纳总结——欢迎下载精品word学习资料可编辑函数调用:调用函数的基本方式为:函数名(参数,参数, ⋯)其返回值为函数里面的 return 语句规定的返回值;如无 return 语句,就返回被调用函数里,以函数名命名的变量的值;如无以函数名命名的变量,就返回最终一个输出的值;如无输出的值,就返回最终一个被调用的语句的值;例如:调用 KDJ 指标; KDJ 函数的名称为 kdj,其参数和内容如下: 参数名最小值最大值默认值N1 11009名师归纳总结——欢迎下载精品word学习资料可编辑|精.|品.|可.|编.|辑.|学.|习.|资.|料.M1 2403M2 2403函数内容为: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,当传递的参数数目不等于被调用函数设置的参数数目时;名师归纳总结——欢迎下载精品word学习资料可编辑a,没有传递参数;就接受原先设置的默认参数运算;b,传递参数少于被调用函数设置的参数数目;就将参数传过去,依次转变前面同样数目参数的值,后面其它的参数接受原先设置的默认参数运算;c,传递参数大于被调用函数设置的参数数目;就将参数传过去,依次转变被调用函数的参数值,余外的参数不起作用;2,函数名称不区分大小写;3,新建的函数,其函数名可能与其它以存在的函数里面的内部变量重名;这样在调用那个函数时,那个内部变量将变成对这个新建函数的函数调用,从而产生错误;所以, 在新建函数起名时要留意;返回值: 自定义公式里面假如有多数据项输出,就调用此函数的时候返回值默认为最终一个输出;假如期望确定某项输出就可用 return,或者将函数名指定为其中一项输出;名师归纳总结——欢迎下载精品word学习资料可编辑|精.|品.|可.|编.|辑.|学.|习.|资.|料.关于 “空”:所谓 “空 ”即指没有数据;在某些情形下,一些数据项可能取不到数据,这时返回值为“空”;例如, yearrep(&jlr,4) ,其含义为取该公司 3 年前年报的净利润;假如某家公司上市时间较短,而无三年前的年报数据,就其值为 “空”;1,“空”与任何数据作运算时,相应运算被取消;例如: 7NULL (即 “空 ”)得到的结果为 7; 2,“空”与任何数据比较大小时, “空”较小;例如:- 7>NULL (即 “空”)得到的结果为 1(即条件中意) ;这样的结果可能与您原先期望得到的数值不符,假如您想防止这种情形可以用 ISNULL函数来判定某个数据是否为 “空”(相关说明见后面的系统函数说明部分) ;公式编写规章代码与周期:由于证券市场里的各项数据都与代码, 时间亲热相关,所以在这里的各项数据都只能用于特定的一类或几类代码及相应的一个或几个周期; (留意:同一个数据项可能适用于多类代码及多个周期,其详细的数值也将不同; )代码的分类:个股 (含债券);沪深指数(仅 1A0001(统计上海 A,B 股基金),1A0002(统计上海 A 股),1A0003(统计上海 B 股),399001(统计深圳 A ,B 股基金),399002(统计深圳 A 股),399003(统计深圳 B 股)六个指数) ;期货;名师归纳总结——欢迎下载精品word学习资料可编辑周期分类:实时(记录当前传过来的数据) ,成交明细(记录每一笔成交的数据) ,分时(记录每分钟成交的数据) ,分钟 K 线(以 1 分钟为单位的 K 线数据),日 K 线(以 1个交易日为单位的 K 线数据);留意: 一,分时与分钟 K 线的区分在于: 分钟 K 线数据较多, 包含了与 K 线相关的高,开,低,收,成交次数等数据;二,沪深指数没有成交明细周期的数据;三,适用于分钟 K 线,日 K 线周期的全部数据,都同时适用于个股与沪深指数,只不过其数据内容不同而已;名师归纳总结——欢迎下载精品word学习资料可编辑|精.|品.|可.|编.|辑.|学.|习.|资.|料.由于行情数据和财务数据同属于基本数据项, 即其数值是主站端直接发过来,所以他们自身并不带周期; 而其它运算项, 即由客户端编写公式运算得到的数据项都是带有周期的;也就是说在编写一个公式的时候我们需要确定一个周期(由于分钟 K 线,日 K 线周期里的各项数据仅有微小差别,所以统称为技术分析周期) ,并且想清楚这个公式里 调用的各项基本数据在这个周期下的详细含义; 以后只有在这个周期下才能调用这个公 式;留意: 基本数据项自身并不带周期,也就是说编写公式的时候,假如所选用的周期不在此数据项的适用范畴内, 测试公式的时候系统是不会报错的, 但这个数。












