通达信公式股票代码写法里有一条容易被跳过的语法事实:品种代码在公式里是字符串,不是数值。CLOSE、VOL、HIGH 可以进算式,代码不行,把它写进加减乘除,语法检查这一关就过不去。
下面按取代码、比代码、显示代码三条线把通达信公式股票代码写法拆开讲。语法以通达信金融终端个人版为准,不同版本的函数名支持范围与界面措辞有差异,动手前先在自己软件的函数列表里核一遍。
一、代码在公式里是字符串,不能当数字参与运算
数值型数据在公式里有明确的运算规则,CLOSE、VOL、HIGH 都属于这一类。品种代码的存放形式不同,它在软件内部是一串字符,由数字字符与字母组成。字符串之间没有大小关系,600000 与 300750 分不出谁大谁小,字符串比较只给出相等与不相等两种结果。
这条性质决定了两件事。一是代码不能进算式,凡是需要把代码当数字算的地方,先回头检查是不是取错了对象。二是判断这个品种属于哪一类,靠的是一组专门处理字符串的判断函数,不是数值比较。
{ 代码与数值在写法上的差别 }
{ 数值:可以参与运算 }
价 := CLOSE * 1.05;
量 := MA(VOL, 5);
{ 代码:字符串,进不了算式 }
{ 下面这一行在语法检查阶段就会被拦下 }
错 := 600000 + 1;
{ 字符串之间比的是相等与不相等 }
是沪市 : STKLABEL = 'SH600000';
二、取当前品种代码:写法与它返回的东西
取当前品种代码,在通达信金融终端个人版里对应函数列表中的品种代码类函数,写法上直接把它写在表达式里。它返回的是一串字符,不是一串数据,所以不能当成序列去求均值、求极值、求排名。
返回值的形式有一处要留意:不同版本、不同数据源下,前缀形式不一样。有的返回纯数字,如 600000;有的带市场前缀,如 SH600000、SZ000001。核对的步骤是把光标停在看盘界面的品种上,看软件自己显示的那串字符长什么样,再把它和公式输出的结果并排比一次。
{ 取当前品种代码 }
代码串 := STKLABEL;
{ 取到的是字符串,下面这一行不成立 }
均 := MA(代码串, 5);
{ 前缀形式随版本与数据源不同,
以软件在看盘界面显示的字符为准 }
三、代码与品种类型的区分:板块判断的思路
同一张图上会遇到股票、指数、基金、债券几类品种,公式想按品种类型分流,用板块判断函数比自己去切代码前缀稳。板块判断函数接收一个前缀片段,返回真或假,字符串的截取交给函数去做,不用自己算位数。
{ 板块判断:下面的取值只作写法示例 }
是沪市主板 : CODELIKE('60');
是深市主板 : CODELIKE('00');
是创业板 : CODELIKE('30');
是科创板 : CODELIKE('68');
是基金 : CODELIKE('15') OR CODELIKE('51');
是债券 : CODELIKE('11') OR CODELIKE('12');
{ 名称也能参与判断 }
名含ST : NAMELIKE('ST');
{ 按品种类型分流 }
图类型 : IF(是基金 OR 是债券, 2, 1);
前缀取值与板块归属会随市场规则调整,判断之前拿软件里的板块列表核一次。把这一组判断集中写在公式头部,以后改动只动一处。
| 写法 | 返回什么 | 能用在哪 | 不能用在哪 |
|---|---|---|---|
| 品种代码类函数,如 STKLABEL | 当前品种的一串字符 | 文字输出、字符串比较 | 加减乘除、求均值、排大小 |
| 板块判断函数,如 CODELIKE(’60’) | 真或假 | 按代码前缀归到板块 | 判断品种名称里的文字 |
| 名称判断函数,如 NAMELIKE(‘ST’) | 真或假 | 按名称片段归类 | 代替代码前缀做判断 |
| 代码串直接进算式 | 不成立 | 无 | 语法检查阶段就会被拦下 |
四、把代码显示在副图上:文字输出与画线的差别
副图的纵轴是一根数值轴,画在上面的每条线背后都是一串数。代码是字符串,没有对应的数值,交给画线输出,结果要么被当成空值,要么在语法检查阶段过不去。想让它出现在副图上,用的是文字输出这一类函数。
{ 代码只能以文字形式出现在副图上 }
代码串 := STKLABEL;
DRAWTEXT_FIX(1, 0.02, 0.05, 0, 代码串);
{ 把字符串交给画线输出,写法不成立 }
{ 代码线: 代码串; 这一行过不去 }
文字输出的位置由坐标参数决定,取值落在指标区的比例范围内。文字不进纵轴刻度,也不参与指标数值的计算,这一点决定了它只能用来核对,不能用来做条件。想让代码同时当一个条件使用,把它放进判断语句里,不要放进输出语句里。
五、写法上的几处错误:引号、前缀与比较方式
代码相关的写法出问题,落点集中在三处:引号漏了、引号用了全角、以及把字符串比较写成了数值比较。
{ 三处写法错误 }
{ 1 字符串漏了引号:60 被当成数字 }
CODELIKE(60)
{ 2 引号用了全角:看着像,字符不同 }
CODELIKE(‘60’) 这一处的引号是全角引号
{ 3 拿代码串做数值比较:得不到想要的结果 }
IF(STKLABEL > 500000, 1, 0)
全角引号是从网页或聊天窗口里复制粘贴带进来的,字符间距比半角宽,扫一眼不容易看出来。核对的法子是把输入法切到英文状态,把那一处引号删掉重敲一次,报错跟着消失,就说明是它。
第三处容易被忽略,因为语法检查不报错,结果却对不上。代码串参与数值比较时,比的是字符而不是数,写出来的条件在图上给出的结果与预期不同。判断方式很简单:条件里出现代码串,看它左右用的是判断函数还是数学符号。
六、验证:把公式挂到副图,比对两边显示的代码
验证通达信公式股票代码写法有没有写对,用一个看得见的办法:把公式挂到副图上,让代码以文字形式显示出来,再和软件里显示的品种代码并排看一次。
- 在公式管理器里新建一个公式,类型选副图,把上面几行抄进去,保存
- 把公式挂到一张图上,指标区里应当出现那段文字
- 把文字和报价栏里的代码逐个字符对一遍,重点看前缀有没有差异
- 换一个另一市场的品种再挂一次,看前缀形式是否跟着变
- 换一个指数类的品种再挂一次,看板块判断函数的分流结果对不对
第 3 步是关键。前缀形式对不上,后面所有与代码有关的比较都会失效,核对从这一处开始,能少走弯路。
七、判断路径归纳
遇到与通达信公式股票代码写法有关的问题,照下面几条依次过一遍。
- 要的是取代码还是分类型?取代码用品种代码类函数,分类型用板块判断函数
- 返回值要不要参与运算?要运算的,说明取成的对象不对,代码本身不进算式
- 拿什么和它比?和另一串字符比,用相等与不相等;和前缀比,用板块判断函数
- 要不要显示在图上?用文字输出,不要用画线输出
- 语法检查报错指向引号?把输入法切到英文状态,把那一处重敲一遍
这几条过完之后,通达信公式股票代码写法剩下的问题落在前缀形式与板块判断两处,遇到再去软件里核一遍就行。
本文讲的是代码在公式里的书写形式与验证方法,只作技术研究口径,不涉及也不构成对任何标的的判断。代码是字符串还是数值,属于公式的写法问题,与行情无关。
