通达信公式股票代码写法里有一条容易被跳过的语法事实:品种代码在公式里是字符串,不是数值。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)

全角引号是从网页或聊天窗口里复制粘贴带进来的,字符间距比半角宽,扫一眼不容易看出来。核对的法子是把输入法切到英文状态,把那一处引号删掉重敲一次,报错跟着消失,就说明是它。

第三处容易被忽略,因为语法检查不报错,结果却对不上。代码串参与数值比较时,比的是字符而不是数,写出来的条件在图上给出的结果与预期不同。判断方式很简单:条件里出现代码串,看它左右用的是判断函数还是数学符号。

六、验证:把公式挂到副图,比对两边显示的代码

验证通达信公式股票代码写法有没有写对,用一个看得见的办法:把公式挂到副图上,让代码以文字形式显示出来,再和软件里显示的品种代码并排看一次。

  1. 在公式管理器里新建一个公式,类型选副图,把上面几行抄进去,保存
  2. 把公式挂到一张图上,指标区里应当出现那段文字
  3. 把文字和报价栏里的代码逐个字符对一遍,重点看前缀有没有差异
  4. 换一个另一市场的品种再挂一次,看前缀形式是否跟着变
  5. 换一个指数类的品种再挂一次,看板块判断函数的分流结果对不对

第 3 步是关键。前缀形式对不上,后面所有与代码有关的比较都会失效,核对从这一处开始,能少走弯路。

七、判断路径归纳

遇到与通达信公式股票代码写法有关的问题,照下面几条依次过一遍。

  1. 要的是取代码还是分类型?取代码用品种代码类函数,分类型用板块判断函数
  2. 返回值要不要参与运算?要运算的,说明取成的对象不对,代码本身不进算式
  3. 拿什么和它比?和另一串字符比,用相等与不相等;和前缀比,用板块判断函数
  4. 要不要显示在图上?用文字输出,不要用画线输出
  5. 语法检查报错指向引号?把输入法切到英文状态,把那一处重敲一遍

这几条过完之后,通达信公式股票代码写法剩下的问题落在前缀形式与板块判断两处,遇到再去软件里核一遍就行。

本文讲的是代码在公式里的书写形式与验证方法,只作技术研究口径,不涉及也不构成对任何标的的判断。代码是字符串还是数值,属于公式的写法问题,与行情无关。

站内还有 通达信公式编写教程 的其他条目,主图与副图 里讲输出落在哪一层,新手问答 里讲报错的排查顺序,可对照查看。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。