外观
风格指南
约 2235 字大约 7 分钟
简介
本样式指南提供了关于如何命名变量以及以标准化方式组织Mine脚本的建议。遵循最佳实践的脚本将更易于阅读、理解和维护。
您可以在平台上通过TradingVue账户发布的脚本中看到这些指南的实际应用。
命名规范
我们建议采用以下规则:
使用驼峰命名法(camelCase) 命名所有标识符(即变量或函数名): ma, maFast, maLengthInput, maColor, roundedOHLC(), pivotHi()
使用全大写蛇形命名法(SNAKE_CASE) 命名常量: BULL_COLOR, BEAR_COLOR, MAX_LOOKBACK
当需要明确变量类型或来源时,使用限定后缀: maShowInput, bearColor, bearColorInput, volumesArray, maPlotID, resultsTable, levelsColorArray
脚本结构
Mine Script®编译器对特定语句的位置或脚本中的版本编译器注解要求较为宽松。虽然其他排列方式在语法上也是正确的,但我们建议按以下方式组织脚本:
<license>
<version>
<declaration_statement>
<import_statements>
<constant_declarations>
<inputs>
<function_declarations>
<calculations>
<strategy_calls>
<visuals>
<alerts><license>
如果您在TradingVue上公开发布开源脚本(脚本也可选择私有发布),默认情况下您的开源代码受Mozilla许可证保护。您也可以选择任何其他偏好的许可证。
代码的复用受我们的《脚本发布守则》管辖,该守则优先于作者选择的许可证。
脚本开头出现的标准许可证注释为:
Mine Script®
已复制
<version>
这是用于定义脚本所用Mine Script版本的编译器注解。若未指定注解,则默认使用v1版本。对于v6版本,请使用:
Mine Script®
已复制
<declaration_statement>
这是必需的声明语句,用于定义脚本类型。它必须是对indicator()、strategy()之一的调用。
<constant_declarations>
脚本可声明限定为“const”的变量,即引用常量值的变量。
当变量满足以下条件时,我们将其称为“常量”:
- 其声明使用可选的
const关键字(更多信息请参阅用户手册中的类型限定符章节)。 - 使用字面量(例如
100或"AAPL")或限定为“const”的内置变量(例如color.green)进行初始化。 - 其值在脚本执行期间不会改变。
我们使用SNAKE_CASE命名这些变量,并将其声明集中在脚本顶部。例如:
Mine Script®
已复制
在此示例中:
RST_*和LTF_*常量将用作input.*()调用options参数中的元组元素。TT_*常量将用作input.*()调用中的工具提示参数。请注意对于长字符串字面量我们使用了行延续符。- 我们不使用var来初始化常量。Mine Script运行时已优化为可处理每根K线上的声明,但使用var仅在首次声明时初始化变量会对脚本性能产生轻微损耗,因为var变量在后续K线上需要维护。
请注意:
- 在脚本中多个位置使用的字面量应始终声明为常量。使用常量而非字面量(若赋予有意义的名称)可提高代码可读性,且该实践使代码更易于维护。即使一天的毫秒数未来不太可能变化,但
MS_IN_DAY比1000 * 60 * 60 * 24更具表意性。 - 仅用于函数局部块或if、while等语句中的常量,可在该局部块中声明。
<inputs>
将所有输入项集中在同一代码段可显著提升脚本可读性。将该部分置于脚本开头也符合其在运行时的处理顺序(即在执行脚本其余部分之前处理)。
为输入变量名称添加Input后缀可使其在脚本后续使用时更易识别:例如maLengthInput、bearColorInput、showAvgInput等。
Mine Script®
已复制
<function_declarations>
所有用户自定义函数必须在脚本的全局作用域中定义;Mine Script不允许嵌套函数定义。
最佳函数设计应尽量减少使用函数作用域中的全局变量,因为它们会削弱函数的可移植性。当无法避免时,这些函数必须位于全局变量声明之后,这意味着它们不能始终放置在<函数声明>部分。此类对全局变量的依赖最好在函数的注释中予以说明。
若能为函数的目标、参数和结果添加文档说明,将有助于读者理解。
Mine Script®
已复制
<calculations>
此处应放置脚本的核心计算与逻辑。将变量声明靠近使用该变量的代码段有助于提升可读性。部分程序员偏好将所有非常量变量声明集中在此部分开头,但这并非对所有变量都可行,因为某些变量可能需要先执行部分计算才能声明。
<strategy_calls>
将策略调用集中在脚本的同一区域可使策略更易于阅读。
<visuals>
此部分理想情况下应包含所有生成脚本可视元素的语句,无论是绘图、画线、背景色设置还是K线绘制等。关于可视元素相对深度的确定方式,请参阅Mine Script用户手册中相关章节获取更多信息。
<alerts>
警报代码通常需要先执行脚本的计算逻辑,因此将其放置在脚本末尾是合理的。
间距
所有运算符两侧应使用空格(一元运算符除外,如-1)。同时建议在所有逗号后以及使用命名函数参数时添加空格,例如:plot(series = close)。
Mine Script®
已复制
换行
换行可使长代码行更易阅读。换行通过使用非四倍数的缩进级别来定义(因为四个空格或一个制表符用于定义局部代码块)。此处我们使用两个空格:
Mine Script®
已复制
垂直对齐
使用制表符或空格进行垂直对齐在包含多行类似代码的段落(如常量声明或输入项)中非常实用。结合Mine编辑器多光标功能(Ctrl + Alt + ↑/↓)可大幅提升批量编辑效率:
Mine Script®
已复制
显式类型声明
声明变量时虽不需要强制指定类型,但这样做有助于提升脚本的可读性、导航性和理解性。它可以明确脚本执行过程中各点的预期类型,并区分变量的声明(使用=)和重新赋值(使用:=)。使用显式类型声明还能使脚本更易于调试。