ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

通达信主图叠加财务函数:一眼看穿市盈率与每股收益

通达信主图叠加财务函数:一眼看穿市盈率与每股收益 简介通达信主K线图直接显示市盈率、每股收益等基本面信息的指标公式文档适合经常使用通达信做盘中观察、又不想来回切换页面的散户投资者和技术分析爱好者。文档以成熟公式为主线讲解如何利用DRAWTEXT_FIX、DRAWNUMBER_FIX在主图左上方固定显示动态数据并通过FINANCE函数从通达信数据库读取每股收益、总股本、流通盘等关键指标同时给出市净率、所属板块的展示写法方便使用者将基本面信息与K线走势放在同一界面综合研判。资源为1个doc格式文档压缩包仅37KB内容精简、可直接复制到通达信公式编辑器使用。当前已有873人学习适合希望提升看盘效率、在牛市中后期警惕基本面风险的投资者参考。1. 主K线图直接显示市盈率、每股收益主图指标公式源码的思路盯盘时最常干的一件事是“看完 K 线形态再切 F10 看估值”几十只股票来回切效率很低。其实通达信公式系统早就把市盈率、每股收益、市净率这些基本面字段暴露给了公式只是大多数人只用它写选股没把它放回主K线图上。这篇博文要做的就是把 FINANCE 系列财务函数接进一个主图叠加指标用 DRAWTEXT_FIX 和 STICKLINE 把 PE、EPS、报告期直接画在K线图上并且处理掉新手最容易踩的复权、字段单位、数据更新节拍三个坑。适合用通达信做手动复盘、批量盯估值、以及想给自选股加“估值仪表盘”的从业者。2. 通达信FINANCE系列函数基础数据的获取路径与更新节拍写主图估值公式之前先要把通达信里“财务数据从哪来、什么时候更新、能用在哪个周期”这三件事说清楚否则后面代码跑出来一堆 0 或乱值你会怀疑是公式语法错了其实只是调用方式不对。2.1 财务指标在主图绘制中的角色与周期限制通达信的公式体系分两类数据源行情类OPEN、HIGH、LOW、CLOSE、VOL 等和财务类FINANCE 系列。行情数据跟着每根K线走是序列数据财务数据是“当前快照”可以理解为软件在最新报告期结束后把财报里的关键数值铺平供所有公式读取。这两类数据最大的区别是FINANCE 系列函数在日线、周线、月线上可用在分钟周期上返回的是无效值或上一日的缓存值。因为分钟K线的价格是实时的而财务字段的更新节拍是“日级”两者混在一个公式里会互相误导。所以我在写这个指标时默认只在日线或周线周期下使用并在公式说明里写清楚避免有人切到 30 分钟图看到 PE 显示成 0 就以为是 bug。另一个要理解的点是FINANCE 函数返回的是“最新已披露财务数据”而不是“K线对应时刻的历史财务数据”。也就是说你看到一根 2023 年 5 月的K线公式里 FINANCE(30) 返回的依然是当前最新报告期的市盈率而不是那根K线当天的市盈率。这个特性决定了我们只能把财务字段画在“当前”这根K线上或者画在屏幕固定位置不能拿它去历史上做逐根K线的回算。2.2 FINANCE函数族常用字段与参数表通达信 FINANCE 函数是一个整族接口参数编号决定取哪个字段。不同版本编号略有出入下面这张表是我在以日线为准的常见版本上核对过的你可以先照着用跑完最小测试后以软件自身的 F10 数据为准再校准一遍。函数写法含义单位典型返回示例FINANCE(1)总股本万股381000约38.1亿股FINANCE(2)流通股本万股与总股本接近FINANCE(3)每股净资产元32.55FINANCE(4)净利润万元3020000约302亿FINANCE(6)每股收益最新摊薄元4.92FINANCE(30)市盈率动态倍28.6FINANCE(33)市净率倍6.05FINANCE(34)每股收益部分版本字段元4.92FINANCE(43)报告期8位整数20240630注意 FINANCE(6) 和 FINANCE(34) 在多数版本里指向同一个 EPS 值但有的版本把 FINANCE(34) 定义为“扣除后每股收益”数值会略有差异。后者在计算市盈率时更严谨因为它剔除了非经常性损益但如果你只想看常规 EPS用 FINANCE(6) 就行。我的做法是公式里默认用 FINANCE(34)如果打印出来和 F10 对不上就改成 FINANCE(6)。这个“先打印、后引用”的习惯能省掉很多版本兼容上的麻烦。2.3 先做一段能编译的最小测试在写完整主图公式之前先做一个最小测试验证当前通达信版本里这些字段能不能正常读出。新建一个主图叠加公式复制以下代码{最小测试打印财务字段原始值} PE0:FINANCE(30); EPS0:FINANCE(34); PB0:FINANCE(33); RQ0:FINANCE(43); DRAWNUMBER(ISLASTBAR, HIGH*1.05, PE0, 1), COLORRED; DRAWTEXT(ISLASTBAR, HIGH*1.02, EPSCON2STR(EPS0,2)); DRAWTEXT(ISLASTBAR, HIGH*0.99, PBCON2STR(PB0,2)); DRAWTEXT(ISLASTBAR, HIGH*0.96, RQCON2STR(RQ0,0));保存后随便打开一只股票切到日线。正常情况下K线上方会横向排开四个数字PE、EPS、PB、报告期。如果某个字段显示 0 或空白先排除两种情况一是当前股票还没有披露过财报次新股常见二是你的通达信版本把字段编号改了这时需要打开“帮助-公式函数参考”核对 FINANCE 系列参数表。这段代码里的 ISLASTBAR 是“最后一根K线”条件保证这些文字只在最新一根K线上出现不会把历史K线区域刷满。HIGH*1.05 是把文本放到最高价上方 5% 的位置避免遮挡K线实体。CON2STR 是把数字转成字符串并保留指定位小数老版本通达信如果不识别这个函数编译会直接报错解决办法见第 5 章。3. 在主图上落字与落线DRAWTEXT、DRAWTEXT_FIX、STICKLINE 的组合用法最小测试能跑通之后接下来就是把它变成真正“能看”的主图指标。这里涉及三类绘图原语DRAWTEXT 在价格坐标上写文本DRAWTEXT_FIX 在屏幕固定位置写文本STICKLINE 在任意两个价格之间画柱线。三类工具各有各的适用场景组合起来才能既不影响看K线又能把估值信息钉在眼前。3.1 DRAWTEXT_FIX把文本固定到左上角不遮挡K线DRAWTEXT 的定位坐标是价格坐标也就是你写 HIGH*1.02它就画在“当前最高价上方 2%”的位置。这在K线图上有个问题不同股票的振幅差异很大茅台一天波动 2% 和一只ST股一天波动 15% 完全不同写死的百分比位置经常被后续K线顶到或者压住。更稳的做法是用 DRAWTEXT_FIX它把文字放在屏幕的固定位置。参数格式是DRAWTEXT_FIX(COND, X, Y, TYPE, TEXT)X 和 Y 是坐标值TYPE 为 0 时按图形区域比例取值范围是 0 到 10 是左边界/上边界1 是右边界/下边界。TYPE 为 1 时直接用像素坐标。我最常用的坐标系是DRAWTEXT_FIX(ISLASTBAR, 0.01, 0.01, 0, PE:CON2STR(PE,1)), COLORWHITE;这行代码把文本放在图形区左上角 1% 的位置无论K线怎么滚动它都固定在那里。好处有两点一是完全不影响看K线实体二是当你在多股同列窗口里同时看四只票时每只票的左上角都有一段自己的估值数据横向对比特别方便。文本显示位置和格式要提前规划好因为 DRAWTEXT_FIX 不支持换行。我一般把 PE、EPS、PB、报告期四段拼成一个字符串用英文冒号分隔避免中文冒号在不同字体下宽度不一致导致对齐错乱。3.2 用ISLASTBAR和CURRBARSCOUNT控制显示范围ISLASTBAR 只在最后一根K线上满足条件这在静态看盘时没问题但当你用鼠标把光标往左移动复盘历史走势时最后一根K线被移出可视区域左上角的 DRAWTEXT_FIX 依然会显示因为它跟K线无关而用 DRAWTEXT 写的价格坐标文本会消失因为条件已经不满足了。如果想要“最近10根K线都能看到估值提示”就用SHOWRANGE:CURRBARSCOUNT10; DRAWTEXT(SHOWRANGE, LOW*0.97, EPS:CON2STR(EPS,2)), COLORGREEN;CURRBARSCOUNT 表示当前K线距离最后一根的周期数数值越小越靠近最新K线。这样写以后光标往回拖 10 根以内文本始终跟着显示而且每根K线下方都有适合做“估值带”视觉参考。注意 CURRBARSCOUNT 是老版本就有的函数兼容性比 CON2STR 好得多如果公式因为 CON2STR 无法编译可以临时改用 DRAWNUMBER 代替文本拼接。3.3 用STICKLINE在K线下方画估值条文本之外我还会用 STICKLINE 画一条“PE 估值条”放在K线下方约 3% 的高度区域。这条线的长度随 PE 值变化PE 越高线越长PE 超过 200 倍时封顶避免长江电力这种低波动票和妖股在视觉上差出几十倍。{完整主图估值公式主图叠加日线周期} {公式名称MV_主图估值} PE:FINANCE(30); {动态市盈率} EPS:FINANCE(34); {每股收益} PB:FINANCE(33); {市净率} RQ:FINANCE(43); {报告期形如20240630} YR:INT(RQ/10000); MT:MOD(INT(RQ/100),100); {左上角信息区} MSG:PE:CON2STR(PE,1) EPS:CON2STR(EPS,2) PB:CON2STR(PB,2) 期:CON2STR(YR,0)-CON2STR(MT,0); DRAWTEXT_FIX(ISLASTBAR,0.01,0.01,0,MSG),COLORYELLOW; {PE估值条PE越高条越长200倍封顶} PELEV:IF(PE200,200,IF(PE0,0,PE))/200; BARH:LOW*0.97; STICKLINE(ISLASTBAR AND PE0 AND CREF(C,1), BARH, BARHPELEV*LOW*0.03, 3, 0), COLORRED; STICKLINE(ISLASTBAR AND PE0 AND CREF(C,1), BARH, BARHPELEV*LOW*0.03, 3, 0), COLORGREEN; {30倍PE参考刻度} MIDBAR:BARHLOW*0.03*(30/200); STICKLINE(ISLASTBAR AND PE0, MIDBAR, MIDBAR, 1, 0), COLORWHITE;这段代码里PELEV 先把 PE 压缩到 0 到 1 之间然后乘以 LOW 的 3% 作为柱高。BARH 是柱子的底部位置取最低价下方 3% 的位置这样柱子不会盖住下影线。柱子颜色按当日涨跌区分收盘价高于昨收用红色低于昨收用绿色这是把估值和日内情绪做了最简单的映射。最后的白色刻度线是 30 倍 PE 参考位方便一眼看出当前 PE 是高是低。我把这些代码存成独立的主图公式后通常还会再配一条 20 日均线让估值条和趋势线之间能看出一点联动凡是“PE 条缩短 价格站上20日线”的组合往往是一轮估值修复的初期。4. 让信息更像“看盘”格式化、配色与参数化调优上一章已经能在主图上同时显示文本和柱线。但要让这组信息真正进入日常看盘节奏还需要做三件小事统一数字格式、把颜色变成状态提示、以及把几个硬编码常量改成可调参数。4.1 数字格式化CON2STR 和 DRAWNUMBER 的取舍PE 显示一位小数就够两位是噪音EPS 必须显示两位因为很多股票 EPS 不到 1 元一位小数的精度损失太大市净率显示两位和金融终端默认一致报告期拆成“年-月”而不是显示 8 位数字否则信息区太挤。CON2STR 可以精确控制小数位但它是较新版本才支持的函数。如果你的通达信公式管理器编译报“未知函数 CON2STR”就把文本拼接改成 DRAWNUMBER 直接画数字DRAWNUMBER(ISLASTBAR, HIGH*1.05, PE, 1), COLORRED; DRAWNUMBER(ISLASTBAR, HIGH*1.02, EPS, 2), COLORWHITE; DRAWNUMBER(ISLASTBAR, HIGH*0.99, PB, 2), COLORYELLOW;DRAWNUMBER 的第四个参数是小数位数它不需要字符串转换所以兼容性更好但缺点是无法在数字前面加 “PE:” 这样的前缀只能通过颜色和图例区分。我一般建议能编译 CON2STR 就用 DRAWTEXT_FIX处于维护老版本公式库的场景才降级用 DRAWNUMBER。4.2 配色策略红绿涨跌与白色中性文本主图公式的配色不能太花哨K线上方已经有各种均线指标估值文本再搞成七彩视觉上就成灾了。我常用的规则是估值文本用黄色COLORYELLOW因为它和红绿K线都不冲突估值条按当日涨跌用红绿30 倍 PE 参考线用白色特殊状态如 PE 为负或 EPS 缺失用灰色。这里有一个容易踩的坑通达信的颜色参数直接写在绘图语句末尾用逗号分隔但 DRAWTEXT_FIX 的颜色前缀在某些版本里不能和 TEXT 表达式里的字符串拼接混用。也就是说下面这种写法可能编译失败DRAWTEXT_FIX(ISLASTBAR, 0.01, 0.01, 0, IF(PE0,PE:CON2STR(PE,1),--)), COLORRED;如果遇到这种情况改成先计算字符串再单独写颜色PESTR:IF(PE0, PE:CON2STR(PE,1), PE:--); DRAWTEXT_FIX(ISLASTBAR, 0.01, 0.01, 0, PESTR), COLORRED;建议把“条件判断 字符串拼接 颜色指定”分成三行写既利于编译也方便后续调格式。以下是我整理的显示项配置清单照着改参数即可显示项数据源格式要求建议颜色备注市盈率FINANCE(30)1 位小数黄色PE 为负时显示 --每股收益FINANCE(34)2 位小数白色与 F10 核对后确定用哪个字段市净率FINANCE(33)2 位小数黄色PB 大于 20 时高亮报告期FINANCE(43)年-月灰色判断数据新旧4.3 把硬编码改成参数N1 倍 PE 参考线和 N2 封顶值第 3 章的完整公式里30 倍 PE 参考线和 200 倍封顶值是直接写死在代码里的。不同行业对这组参数的敏感度完全不同银行板块的 PE 常年在 5 到 8 倍之间白酒普遍 20 到 40 倍科技股到 80 倍也不稀奇。所以我建议把这两个值改成公式参数区里的可调节项N1:30; {PE参考线画白色刻度} N2:200; {PE封顶值用于压缩估值条长度}修改后估值条的长度计算变为 PELEV:IF(PEN2,N2,IF(PE0,0,PE))/N2参考线位置改为 BARHLOW0.03(N1/N2)。这样你在看银行股的时候把 N1 改成 6看科技股的时候改成 60不需要动公式其他部分。参数化之后还有一个好处可以用通达信的“参数优化”功能批量测试哪组 N1/N2 在当前行情下区分度最好不过那是另一个话题了实际使用中手调就够。5. 五个边界条件与验证方法让公式在任何股票上都稳主图估值公式最怕的不是语法错而是“看起来能用、数值却不对”。最后这章集中处理五个我实际踩过的边界场景以及一稿三用的延伸写法。5.1 复权设置对 PE 计算的直接影响通达信主图默认可以切换不复权、前复权、后复权。FINANCE(30) 动态市盈率是用当前价格和财务数据算出来的当你把K线切到前复权历史价格会被等比压缩但当前价格不受影响所以 PV 显示正常。真正出问题的是“除权日当天”股价因除权跳空低开不复权图上会留一个大缺口此时直接用 C/FINANCE(6) 手算 PE 会得到一个大得离谱的值。解决办法是公式里的价格计算统一用当前价 C不要用 REF 引用除权前的历史价格主图就建议切到前复权看估值条才会在除权缺口附近保持连贯。5.2 新股、停牌股、长期无财报的股票次新股在上市初期 FINANCE(43) 会返回 0 或者空值此时 CON2STR(0,0) 会显示 “期:0-0”左侧信息区看起来很脏。我在公式里加了判定条件只有 FINANCE(43) 大于 20000000 时才显示报告期否则显示 “期:--”。同理ST 股或长期停牌股可能出现 FINANCE(30) 为负的情况直接用 IF 包一层即可PESTR:IF(PE0, PE:CON2STR(PE,1), PE:--);5.3 .doc后缀源码转 .txt 的导入方法很多网上流传的指标源码文件后缀是 .doc实际内容是一段纯文本不是真正的 Word 文档。拿到这种文件不要直接双击用记事本打开另存为 UTF-8 编码的 .txt然后在通达信公式管理器里选择“新建-主图叠加-从文件导入”把 .txt 内容贴进编辑器。如果公式管理器 6.06 提示编码错误就把文件编码改成 ANSI 再导入一次。5.4 主图公式转条件选股一稿三用把主图公式改写成条件选股公式很简单只用保留财务计算部分删掉所有绘图语句输出条件写到表达式里{条件选股PE在5到25之间且EPS为正} PE:FINANCE(30); EPS:FINANCE(34); COND: PE5 AND PE25 AND EPS0;这个条件可以直接放到通达信的“条件选股”里跑全市场也可以放进“预警系统”做盘中提醒。同一套财务字段主图上看位置选股里筛范围预警里盯突变这就是财务函数的一稿三用。5.5 收盘后核对五分钟验证公式准确性验证公式靠不靠谱方法很原始但最有效每天收盘后打开三只股票分别挑一只低 PE 银行股、一只高 PE 科技股、一只刚发过业绩预告的成长股把公式左上角的 PE、EPS 和软件自带 F10 里的“最新指标”页做对比。报告期、EPS、动态市盈率三个数对得上公式就是可用的对不上先看版本字段编号再看复权设置最后看财报是否刚更新过。这个五分钟的核对流程比看任何函数文档都能更快发现你本地通达信版本的财务字段偏移问题。本文还有配套的精品资源点击获取
返回列表