外观
输入
约 5707 字大约 19 分钟
简介
输入参数用于接收用户通过脚本「设置/输入」选项卡修改的数值。通过使用输入参数,程序员可以编写更易适配用户偏好的脚本。
以下脚本使用ta.sma(close, 20)绘制20周期简单移动平均线(SMA)。虽然编写简单,但由于函数调用采用固定的源数据和周期参数(用户必须修改代码才能调整),其灵活性较差:
Mine Script®
已复制
若改用以下方式编写脚本,用户将可直接通过“设置/输入”选项卡选择所需的source与length参数,无需修改源代码,灵活性显著提升:
Mine Script®
已复制
输入参数仅在脚本运行于图表时可访问。用户可通过以下方式打开“设置”对话框调整参数:
- 双击图表上的指标名称
- 右键点击指标名称 → 选择下拉菜单中的“设置”选项
- 悬停指标名称时点击“更多”菜单图标(三点图标)→ 选择“设置”
- 通过数据窗口(图表右侧第四个图标)双击指标名称
“设置”对话框始终包含“样式”和“可见性”选项卡,用户可通过它们自定义脚本的视觉效果及可显示输出的图表时间范围。
当脚本包含input.*()函数调用时,“设置”对话框中还会显示“输入参数”选项卡。

当用户将脚本添加到图表或修改“设置/输入”选项卡中的参数值时,脚本会立即处理这些输入。任何输入参数的变更都会触发脚本使用新指定值在所有可用数据上重新执行。
输入函数
MIne Script® 提供以下输入函数:
- input() - 通用输入函数
- input.int() - 整数输入
- input.float() - 浮点数输入
- input.bool() - 布尔值输入
- input.color() - 颜色选择输入
- input.string() - 字符串输入
- input.text_area() - 多行文本输入
- input.timeframe() - 时间框架输入
- input.symbol() - 交易品种输入
- input.price() - 价格输入
- input.source() - 数据源输入
- input.session() - 交易时段输入
- input.time() - 时间输入
- input.enum() - 枚举输入
脚本通过调用不同的input.*()函数,在“输入参数”选项卡中创建不同类型的输入控件。默认情况下,每个输入项按照input.*()调用顺序在选项卡中独占一行显示。程序员还可通过input.*()函数的group和inline参数对输入项进行分组排列(详见下文)。
根据代码风格指南,建议将所有input.*()调用集中在脚本开头。
输入函数通常包含多个参数,用于定义默认值、取值范围、在“输入参数”选项卡中的排列方式等属性。
由于input.*()本质上属于MIne Script函数,程序员可结合算术、比较、逻辑及三元运算符将表达式赋值给变量。如下例所示,脚本通过比较input.string()返回值与字符串"On",将结果赋值给plotDisplayInput变量(该变量因==运算符返回“布尔”值而自动转为“输入布尔”类型):
Mine Script®
已复制
所有通过input.*()函数返回的值(除“数据源”类型外)均具有“输入参数”类型限定。详见用户手册中关于类型限定符的章节。
输入函数参数
所有输入函数的通用参数包括:defval(默认值)、title(标题)、tooltip(提示文本)、inline(行内显示)、group(分组)和display(显示控制)。部分输入函数还包含以下专属参数:options(选项列表)、minval(最小值)、maxval(最大值)、step(步长)和confirm(确认选项)。
这些参数通常要求“常量”参数,仅input.source()的defval参数(接受“序列浮点”值)和input.enum()的options参数(接受枚举类型成员)属于例外。
由于input.*()参数大多只接受“常量”参数,且“输入参数”等类型限定符优先级高于“常量”,因此不可将一个input.*()调用的结果作为另一个input.*()调用的参数。
以下是各参数的详细说明:
defval作为所有输入函数的首个参数,定义输入控件的默认值。其参数类型必须与函数输入类型匹配。title接受“常量字符串”参数,作为输入字段的标签文本。tooltip接受“常量字符串”参数。启用后字段右侧将显示问号图标,悬停时展示提示文本(支持\n换行符)。若通过inline将多个输入字段合并为一行,提示图标始终显示在最右侧字段旁,且仅展示该行最后一个tooltip的内容。inline接受“常量字符串”参数。在多个input.*()调用中使用相同参数值,可将对应控件排列在同一行(受“输入参数”选项卡宽度限制)。单独使用唯一参数值时,输入控件将紧贴标签右侧显示(覆盖默认左对齐样式)。group接受“常量字符串”参数。用于创建分组标题,相同分组名的所有输入控件将归入同一折叠区域。options接受方括号包裹的逗号分隔列表(如["ON", "OFF"],[1, 2, 3],[myEnum.On, myEnum.Off]),生成下拉菜单控件。defval必须为列表元素之一。启用本参数后不可同时使用minval/maxval/step。minval/maxval根据defval类型接受“常量整数/浮点数”,定义输入值的合法范围。step定义点击控件箭头时的数值步进量。confirm接受“常量布尔值”。设为true时,脚本添加到图表时将自动弹出“设置/输入”选项卡,确保用户必须配置该参数。
minval(最小值)、maxval(最大值)和step(步长)参数仅存在于input.int()和input.float()函数的参数列表中。
输入类型
接下来的章节将逐一说明每种输入函数的功能。我们将通过具体示例,展示不同输入函数的使用方法及其界面布局技巧。
通用输入函数
input()是一个支持MIne Script基础类型的通用函数,包括:“整数”、“浮点数”、“布尔值”、“颜色”和“字符串”类型。同时支持“数据源”输入(可接收价格相关值如close、hl2、hlc3、hlcc4,或其他脚本的输出值)。
函数定义如下:
input(defval, title, tooltip, inline, group) → input int/float/bool/color/string | series float该函数通过分析defval参数的类型自动识别输入类型。以下脚本展示了所有支持的类型,以及当使用不同类型的defval参数时,函数返回的限定类型:
Mine Script®
已复制

整数输入函数
input.int()函数存在两种定义形式,分别对应是否使用options参数的情况:
input.int(defval, title, minval, maxval, step, tooltip, inline, group, confirm) → input int
input.int(defval, title, options, tooltip, inline, group, confirm) → input int此调用通过options参数为移动平均线提供预定义的长度选项列表:
Mine Script®
已复制
此调用使用minval参数限制最小长度值:
Mine Script®
已复制
当使用options参数时,控件显示为下拉菜单;未使用时则显示为普通数值输入框:

浮点数输入函数
input.float()函数存在两种定义形式,分别对应是否使用options参数的情况:
input.float(defval, title, minval, maxval, step, tooltip, inline, group, confirm) → input int
input.float(defval, title, options, tooltip, inline, group, confirm) → input int此处我们使用“浮点型”输入参数作为计算布林带的标准差乘数因子:
Mine Script®
已复制
浮点数输入控件与整数输入控件的界面形式类似:

布尔值输入函数
我们继续完善脚本,这次添加一个布尔型输入参数,允许用户切换布林带的显示状态:

Mine Script®
已复制
请注意:
- 我们通过input.bool()添加了
showBBInput布尔型输入参数 - 我们在该输入参数以及
bbFactorInput参数中都使用了inline参数,使它们显示在同一行。在这两种情况下,我们都使用"01"作为参数值。MIne Script编译器正是通过这种方式识别它们属于同一行。用作参数的具体字符串并不重要,且不会显示在"输入"选项卡中的任何位置;该字符串仅用于标识哪些输入应该显示在同一行。 - 对输入项的
title参数进行垂直对齐,提升代码可读性 - 在plot()调用中使用
showBBInput实现条件绘图:当用户取消勾选时,变量值变为false导致绘制na值(默认值设为true保持布林带默认可见) - 使用
inline参数的bbFactorInput输入框会与未使用该参数的maLengthInput产生错位显示
颜色输入函数
如“颜色”页面本节所述,通过“设置/样式”选项卡选择脚本输出颜色并非总是可行。当无法从“样式”选项卡选择颜色时,程序员可以使用input.color()函数创建颜色输入,从而允许通过“设置/输入”选项卡进行颜色自定义。
假设我们希望当最高价和最低价高于/低于布林带时,以更浅的透明度绘制布林带。我们可以使用如下代码创建颜色:
Mine Script®
已复制
当使用动态(“序列”)颜色参数(如上述代码中的transp)时,“设置/样式”选项卡中的颜色控件将不再显示。此时我们需要在“设置/输入”选项卡中创建自定义颜色选择参数:

Mine Script®
已复制
请注意:
- 我们通过input.color()添加了两个调用来收集
maColorInput和bbColorInput变量的值。我们直接在plot(ma, "MA", maColorInput)调用中使用maColorInput,并使用bbColorInput构建bbHiColor和bbLoColor变量,这些变量通过价格相对于布林带的位置来调整透明度。我们为color.new()调用的transp参数使用条件值,以生成相同基础颜色的不同透明度。 - 我们没有为新的颜色输入使用
title参数,因为它们与其他输入在同一行,用户可以通过上下文理解它们适用于哪些绘图。 - 我们重新组织了
inline参数,以反映输入分两组显示在两行的事实。
时间周期输入函数
当需要调整脚本计算所使用的时间周期时,时间周期输入功能非常实用。
让我们移除前几节中的布林带指标,为一个简单的移动平均线脚本添加时间周期输入:

Mine Script®
已复制
请注意:
- 使用input.timeframe()函数接收时间周期输入
- 该函数创建的下拉菜单包含标准时间周期选项,以及用户在图表界面中收藏的所有周期
- 在request.security()调用中使用
tfInput参数,并设置gaps = barmerge.gaps_on确保仅在高阶周期完成时返回数据
交易品种输入函数
input.symbol()函数创建一个控件,允许用户像在图表界面中一样搜索和选择交易品种。
让我们为脚本添加交易品种输入:
Mine Script®
已复制
请注意:
- 我们使用空字符串作为
defval参数值,这使得request.security()函数(使用包含该输入的symbolInput变量时)默认采用当前图表品种。用户如需恢复默认值,需通过“输入参数”选项卡的“默认设置”菜单选择“重置设置”。 - 使用自定义函数
securityNoRepaint()来调用request.security(),确保不会重绘——仅当更高时间周期完成时才返回值。
交易时段输入函数
input.session()内置函数创建的输入控件,允许用户通过下拉菜单或直接输入“hh:mm”格式时间值来指定交易时段的开始和结束时间。
该函数返回符合交易时段格式的有效字符串(详见手册中关于交易时段的说明)。
交易时段信息还可包含适用日期数据,此处我们使用input.string()函数输入日期信息:
Mine Script®
已复制
请注意:
- 本脚本默认交易时段设置为
“0600-1700” - input.string()调用通过
tooltip参数提供日期格式输入指引 - 通过拼接两个输入字符串构建完整交易时段字符串
- 使用string关键字显式声明两个输入变量的字符串类型
- 通过time()函数检测当前K线是否处于用户定义时段:当K线开盘时间不在时段内时time()返回na,因此
inSession变量在time()返回非na时为true

数据源输入函数
数据源输入可用于选择两种类型的源数据:
- 价格数据:包括开盘价(open)、最高价(high)、最低价(low)、收盘价(close)、高低均值(hl2)、高低收均值(hlc3)和开高低收均值(ohlc4)
- 图表上其他脚本绘制的数值。通过将一个脚本的输出作为另一个脚本的输入,可实现多脚本的“联动”
以下脚本简单地绘制用户选择的数据源,默认值为最高价(high):
Mine Script®
已复制
如图所示,在加载了“Arnaud Legoux移动平均线”指标的图表中,我们通过脚本的“数据源输入”控件选择ALMA指标的输出作为输入。由于本脚本使用浅紫色粗线绘制该数据源,您可以看到两个脚本的绘图完全重叠——因为它们绘制的是相同的数值。

时间输入函数
时间输入使用input.time()函数,该函数返回以毫秒为单位的Unix时间(详见“时间”章节说明)。由于此类数据同时包含日期信息,input.time()函数返回的既是时间也是日期,因此其控件允许同时选择日期和时间。
在此示例中,我们将K线时间与输入值进行比较,当超过该值时绘制箭头标记:
Mine Script®
已复制
请注意,我们使用的defval参数值是通过调用timestamp()函数生成的。
枚举输入函数
input.enum()函数创建一个下拉菜单输入控件,用于显示枚举类型各成员(可选值)对应的字段标题。该函数返回声明枚举中的某个具名值,脚本可将其用于需要严格管控可选值和操作的计算逻辑中。通过options参数提供枚举成员列表,定义用户可选范围。若未指定枚举字段标题,则默认使用成员名称的字符串形式。
本示例声明了包含四个成员的SignalType枚举类型,分别代表不同的信号显示模式:long, short, both, 和 none。脚本在input.enum()调用中使用该枚举成员作为defval参数,在“输入参数”选项卡生成下拉菜单,用户可通过选择枚举标题来控制图表显示的信号类型:

Mine Script®
已复制
请注意:
sigInput变量的值是用户所选标题对应的SignalType枚举成员- 由于未指定
none枚举字段的标题,其显示内容为成员名称的字符串形式(即"none"),如枚举输入下拉菜单截图所示
默认情况下,枚举输入会显示所有枚举成员的标题。若在input.enum()调用中提供options参数,则下拉菜单仅显示该列表包含的成员,例如:
Mine Script®
已复制
上述options参数限定用户只能从SignalType枚举中选择long和short字段的标题,其他选项均不可见:

使用技巧
您脚本输入项的设计对脚本的可用性有重要影响。精心设计的输入项更直观易用,能提供更好的用户体验:
- 选择清晰简洁的标签(使用输入项的
title参数) - 谨慎选择默认值
- 提供
minval和maxval值以防止代码产生意外结果,例如根据您使用的MA类型将长度最小值限制为1或2 - 提供与所获取值相符合的
step步长值。例如在0-200范围内使用5为步长更合适,或在0.0-1.0范围内使用0.05步长 - 使用
inline将相关输入项分组到同一行,例如多头和空头颜色,或线条的宽度和颜色 - 当输入项较多时,使用
group将它们分组到有意义的区块中。将最重要的区块放在顶部 - 对区块内的各个输入项也采用相同的排序原则
在代码中对多个input.*()调用的不同参数进行垂直对齐会很有优势。当您需要进行全局修改时,这将允许您使用编辑器的多光标功能一次性操作所有行。
有时为了在输入项中实现最佳对齐效果,需要使用Unicode空格字符。这是一个示例:

Mine Script®
已复制
请注意:
- 使用
group参数划分输入参数区块,并通过常量存储分组名称(便于统一修改) - 第一区块的输入控件未垂直对齐:由于
ma1SourceInput和long1SourceInput的标签长度不同,且使用inline参数使控件紧贴标签右侧,导致Y轴位置不一致 - 对齐解决方案:在
ma2SourceInput的title参数前添加三个Unicode EN空格(U+2002)。必须使用Unicode空格(普通空格会被过滤),可通过组合不同宽度Unicode空格实现精确对齐(详见Unicode空格宽度列表)