通达信代码优化


date: 2026-02-27 updated: 2026-02-27 conversation_id: 09bdfd73-811c-4873-84ca-ceb85474ee92 title: "通达信代码优化" tags: [deepseek, conversation] ---

通达信代码优化

创建时间: 2026-02-27 09:09

👤 用户:

MA10:MA(C,10),COLORWHITE; MA30:MA(C,30),COLORYELLOW; MA60:MA(C,60),COLORMAGENTA;

云数:="SDYS.三度云数; VAR1:=云数>= 3; STICKLINE(VAR1,C,O,3,0),COLORRED;

帮我优化这段通达信代码


💭 思考过程

我们被要求优化一段通达信代码。代码原始内容:

MA10:MA(C,10),COLORWHITE; MA30:MA(C,30),COLORYELLOW; MA60:MA(C,60),COLORMAGENTA;

云数:="SDYS.三度云数; VAR1:=云数>= 3; STICKLINE(VAR1,C,O,3,0),COLORRED;

这段代码有错误:云数:="SDYS.三度云数; 这一行引号没有闭合,并且缺少了右括号?实际上应该是引用外部指标"SDYS.三度云数"。通达信引用其他指标格式为:指标名称.指标线名称 或者 "指标名称.指标线名称"。这里应该是 "SDYS.三度云数" 或者 SDYS.三度云数(如果是在同一公式内?但"SDYS"可能是一个公式名)。可能正确的写法是:云数:="SDYS.三度云数#DAY" 之类的,但这里先简单修复为 "SDYS.三度云数"。并且最后STICKLINE画线,条件是VAR1,画在开盘价和收盘价之间,宽度3,0表示实心柱?但通常STICKLINE用法:STICKLINE(COND, PRICE1, PRICE2, WIDTH, EMPTY), 其中EMPTY为0则画实心柱。这里是C和O,也就是当VAR1成立时,在开盘价和收盘价之间画红色实心柱。但注意,如果收盘价小于开盘价,则柱子方向向下,但颜色为红色,可能会混淆。通常用C和O画K线颜色,但这里可能是想标记满足条件的K线为红色。优化可以考虑使其更清晰,比如直接改变K线颜色。

但用户要求“优化这段通达信代码”,可能是指代码风格、效率、可读性或修正错误。我们需要分析代码意图:它画了三条均线,然后从外部指标“SDYS.三度云数”获取数值,当该数值大于等于3时,将K线实体涂成红色。

可能的问题:

  1. 引用外部指标语法可能错误,应使用双引号并确保指标存在。
  2. 云数赋值语句缺少右引号,应该是:云数:="SDYS.三度云数"; 注意后面有个分号。
  3. STICKLINE在C和O之间画线,如果C
  4. 可以优化为直接在K线上显示,或者添加文字提示。
  5. 可能还需要考虑云数的数据周期,如果需要日线数据,需要加上#DAY。

此外,代码中使用了MA10等,但没有指定线宽,可以加上LINETHICK。另外,COLORWHITE等颜色在通达信中有效,但白色在白色背景下可能看不见,不过这是用户的选择。

优化建议:

  • 修正语法错误。
  • 增加注释。
  • 确保引用正确。
  • 可以考虑将STICKLINE改为更明显的标记,比如在K线底部画点或箭头,或者用DRAWNULL避免干扰。
  • 但用户只是要求优化,可能希望代码更规范。

我们提供优化后的代码,并解释改动。

最终输出:提供优化后的代码,并简要说明优化点。

原始代码存在语法错误,并且对K线的着色方式可能不够直观。以下是优化后的版本,修正了错误,并提升了代码的可读性和准确性:

MA10:MA(C,10),COLORWHITE,LINETHICK1;
MA30:MA(C,30),COLORYELLOW,LINETHICK1;
MA60:MA(C,60),COLORMAGENTA,LINETHICK1;

{引用外部指标“三度云数”,确保公式名为SDYS且输出线名为“三度云数”}
云数:="SDYS.三度云数#DAY";  {若需日线数据,加上#DAY;否则直接使用"SDYS.三度云数"}

VAR1:=云数>=3;

{当VAR1成立时,将K线实体染为红色,并加粗显示}
STICKLINE(VAR1, C, O, 3, 0), COLORRED;
{同时可在K线上方添加标记,便于识别}
DRAWICON(VAR1, H*1.02, 1);  {在满足条件的K线最高点上方2%处画笑脸图标}

优化说明:

  1. 修正语法:补全了外部指标引用格式,使用双引号和分号正确闭合语句。
  2. 数据周期明确:若“三度云数”需取日线级别数据,添加#DAY后缀,避免周期错乱。
  3. 增加线宽:为均线指定LINETHICK1,使显示更清晰(可自定义粗细)。
  4. 增强标记:除红色K线实体外,增加DRAWICON图标提示,避免因阴线(C
  5. 添加注释:对关键语句进行说明,方便后续维护。
  6. 颜色优化:红色柱体保留,同时图标进一步强调信号,双重确认。

根据个人偏好,也可将STICKLINE改为DRAWTEXT或调整图标样式。若不需要图标,可删除DRAWICON行。

👤 用户:

MA10:MA(C,10),COLORWHITE; MA30:MA(C,30),COLORYELLOW; MA60:MA(C,60),COLORMAGENTA;

云数:="SDYS.三度云数; VAR1:=云数>= 3; STICKLINE(VAR1,C,O,3,0),COLORRED;

以上通达信指标代码报错 当前公式 : 三度主图测试 (画线指标公式) 错误句 :

云数:="SDYS.三度云数 详细信息 : 某个操作数没有相应的操作符匹配! 错误起始位置 : 60 ; 长度: 2


💭 思考过程

我们被问到:用户提供的通达信指标代码报错。用户给出了代码,然后附上了错误信息:错误句:云数:="SDYS.三度云数,详细信息:某个操作数没有相应的操作符匹配! 错误起始位置 : 60 ; 长度: 2。

分析错误:在通达信公式中,引用外部指标时,格式应该是"指标名称.输出线名称",并且需要用双引号括起来。但是用户代码中写的是:云数:="SDYS.三度云数; 这里少了一个右双引号,并且分号在双引号外面。正确的写法应该是:云数:="SDYS.三度云数"; 或者如果指标名为SDYS,输出线名为"三度云数",则应为:"SDYS.三度云数"。

此外,需要注意外部指标引用的完整语法:在通达信中,引用其他公式的输出时,格式为 "公式名称.输出线名称#周期" (如需要周期)。这里没有指定周期,默认同周期。

所以错误在于:云数:="SDYS.三度云数; 缺少右双引号,导致解析器无法识别。

用户请求优化,但这里主要是修正错误。之前我们提供过优化版本,但用户可能没有正确应用。现在用户再次提到错误,我们需要给出具体修正方法。

我们应当直接指出错误所在,并提供正确的代码。同时也可以给出一些改进建议,但重点解决报错。

因此,回复应包括:

  1. 指出错误:外部指标引用缺少右引号,导致语法错误。
  2. 提供修正后的代码:云数:="SDYS.三度云数";
  3. 解释如果外部指标名称或输出线名称有误,需要确认。
  4. 提醒如果引用日线数据等,可添加周期后缀。
  5. 可附带一些优化建议,但保证修正后的代码可以运行。

我们应当用中文回答,清晰简洁。

您的代码报错是因为引用外部指标时缺少右双引号,导致语法不完整。通达信要求外部指标引用格式为 "公式名称.输出线名称",需要成对的双引号。

错误行:

云数:="SDYS.三度云数;

正确应为:

云数:="SDYS.三度云数";

修正后的完整代码:

MA10:MA(C,10),COLORWHITE;
MA30:MA(C,30),COLORYELLOW;
MA60:MA(C,60),COLORMAGENTA;

云数:="SDYS.三度云数";      {注意右双引号位置}
VAR1:=云数>=3;
STICKLINE(VAR1,C,O,3,0),COLORRED;

补充说明:

  • 请确保公式 SDYS 中存在输出线名为 三度云数(完全一致,包括全角/半角字符)。
  • 若需要引用日线级别的 三度云数(无论当前周期是什么),可改为:

` 云数:="SDYS.三度云数#DAY"; `

  • 如果依然报错,请检查 SDYS 公式是否已通过测试并保存,或尝试重新输入双引号为英文半角符号。

👤 用户:

报错当前公式 : 三度主图测试 (画线指标公式) 错误句 : 详细信息 : 输入字符串请用单引号'!' 错误起始位置 : 60 ; 长度: 2


💭 思考过程

我们被问到的问题是用户试图运行一段通达信指标代码,但遇到报错。用户提供了原始代码和两次报错信息。第一次报错是关于缺少双引号,第二次报错是“输入字符串请用单引号'!'”,这很奇怪,因为通达信通常使用双引号引用外部指标。可能是用户环境特殊,或者我们之前的建议与通达信版本不符。

我们需要重新理解报错信息:“输入字符串请用单引号'!'”可能意味着通达信要求字符串使用单引号而不是双引号。但通达信惯例是双引号引用外部指标,单引号用于字符串常量。也许用户的通达信版本或设置不同。

另外,注意原始代码中有一个明显错误:云数:="SDYS.三度云数; 缺少右双引号,而且分号应该在双引号外面。但用户报告第二次错误说“输入字符串请用单引号'!'”,这意味着解析器可能要求字符串用单引号括起来,而不是双引号。

让我们分析:在通达信中,外部指标引用格式通常为 "公式名称.输出线名称",使用双引号。而单引号一般用于字符串常量,例如在条件判断中写 CROSS(MA5,MA10) 等。所以“请用单引号”可能是一个误导?也可能用户误操作或代码中包含了其他字符。

用户第二次错误消息:

当前公式 : 三度主图测试 (画线指标公式)  
错误句 :  
详细信息 : 输入字符串请用单引号'!' 
错误起始位置 : 60 ; 长度: 2

错误位置60,长度2,可能指的就是 "SDYS.三度云数 这部分。通达信可能认为应该用单引号而不是双引号?但这是不符合常规的。或许是因为用户输入的双引号是全角字符?通达信要求半角符号。也有可能是因为用户在公式编辑器中复制粘贴时引入了不可见字符。或者我们提供的修正中,双引号是全角的?但用户原始代码中的双引号似乎是半角的,但缺少右引号。当加上右引号后,可能变成了 云数:="SDYS.三度云数";,如果双引号是全角的,会报错。但错误信息提到“输入字符串请用单引号'!'”,这很奇怪。

另一种可能是,用户是在某些特定的语境下,比如在条件语句中使用了字符串,通达信提示字符串常量要用单引号。但这里是外部指标引用,应该用双引号。难道是用户通达信版本要求外部指标引用也用单引号?不太可能。

让我们检查原始代码:云数:="SDYS.三度云数; 注意:末尾有一个分号,但双引号没有闭合。用户第二次报错是在我们建议添加右双引号之后吗?用户没有明确说是在修改后仍然报错,但第二次报错消息中错误句为空,详细信息说“输入字符串请用单引号'!'”,可能是用户再次尝试修改但仍有问题。

或许我们应该建议用户使用单引号试试,因为通达信在某些版本或某些功能下可能允许单引号引用外部指标?或者检查指标名称是否包含特殊字符。

另一个可能是“三度云数”这个字符串中有全角字符,通达信要求字符串用单引号括起来,如果包含全角字符,可能需要用单引号?不确定。

我们应提供明确的解决方案:先确认外部指标名称是否正确,然后尝试使用单引号。同时建议检查标点符号是否半角。

可以给出两种写法:

  • 使用双引号:云数:="SDYS.三度云数";
  • 使用单引号:云数:='SDYS.三度云数'; (不常见,但可以尝试)

并提醒用户确保引号为英文半角。

此外,注意原始代码中 STICKLINE(VAR1,C,O,3,0),COLORRED; 当C和O相等时柱线宽度为0可能看不见,可以调整宽度或条件。

我们也可以提供更稳健的引用方式,例如加上数据周期后缀。

但核心是解决引号错误。我们将提供清晰的指导。

最终回答:指出错误原因可能是引号不正确或全角字符,建议使用半角双引号或单引号尝试,并给出修改后的代码示例。

您的通达信代码报错是因为字符串引用格式有误。根据错误提示“输入字符串请用单引号'!'”,可能您的通达信版本要求字符串常量(如指标名称)使用单引号,或当前编辑环境下双引号被误认为全角字符。请按以下步骤修正:


修正方案

  1. 将双引号改为单引号(部分通达信版本要求):

`text 云数:='SDYS.三度云数'; `

  1. 确保所有符号为英文半角
  • 单引号 ' 应为英文半角(ASCII 39),而非中文全角
  • 分号 ;、等号 =、括号 () 均需为半角。
  1. 完整修正代码

`text MA10:MA(C,10),COLORWHITE; MA30:MA(C,30),COLORYELLOW; MA60:MA(C,60),COLORMAGENTA;

云数:='SDYS.三度云数'; {使用单引号,确保外部指标名称准确} VAR1:=云数>=3; STICKLINE(VAR1,C,O,3,0),COLORRED; `

  1. 若仍报错,请检查
  • 外部指标 SDYS 中是否确实存在输出线名为 三度云数(需完全一致,包括全角/半角字符,如“三度云数”是全角还是半角?)。
  • 可先测试单引号是否能通过公式编译。若通过,则问题解决;若依然提示单引号错误,可能是公式名称或输出线名包含非法字符。

备选方案

若单引号仍报错,尝试以下写法(添加数据周期后缀):

云数:='SDYS.三度云数#DAY';   {强制取日线数据}

如果问题依旧,请检查 SDYS 公式是否已通过编译并存放在同一目录下。


通达信的字符串引用在不同版本中可能有差异,单引号是字符串常量的标准写法,部分情况下外部指标名称也可用单引号。建议优先尝试单引号。