如何用输入选项设置趋势线的颜色
在Pine Script中,我们可以创建多种类型的输入选项,为指标或策略的设置面板增加可供用户自定义的参数,方便手动调整脚本的各项设置。
其中一种输入类型是颜色输入,它的一大用途就是给Pine Script画的趋势线指定颜色。要通过输入选项控制趋势线的颜色,主要分两步走:先用input.color()函数创建一个颜色输入项;再用这个输入项设定线条的颜色——可以在创建线条时通过line.new()直接指定,也可以对已存在的线条用line.set_color()动态修改。下面看看具体代码。
第一步:创建颜色输入项
首先需要创建一个能让用户选择颜色的输入项,这通过input.color()函数完成。创建颜色输入项的方式不止一种,本节我们创建一个默认颜色带一定透明度的输入项:
// 步骤 1:创建颜色类型的输入项
lineColour = input.color(color.new(color.black, 70), title="线条颜色")
这段代码调用input.color()函数并传入两个参数。第一个参数是该输入项的默认值,我们用color.new()函数把color.black(黑色)设为70%的透明度作为初始颜色。第二个参数title为输入项设定标题,标题文本会显示在脚本设置界面的选项前面。
输入项返回的当前颜色值储存在lineColour变量中,后续代码通过引用这个变量获取用户设定的颜色。
第二步:用输入项为趋势线上色
创建好颜色输入项后,就可以用它给趋势线上色了。Pine Script提供两种途径:在创建线条的瞬间上色,或者线条创建之后再改颜色。
要在创建趋势线时直接设定颜色,把上一步创建的输入变量直接传给line.new()函数的color参数即可。例如:
// 步骤 2:使用输入选项来设置线条的颜色
// 创建一条新线,并立即为其设置颜色
line.new(x1=bar_index[40], y1=close[40],
x2=bar_index, y2=close, width=4, color=lineColour)
这段代码在40根K线前的收盘价与当前收盘价之间创建了一条趋势线。line.new()函数的color参数决定线条的颜色,这里我们把它设为先前创建的lineColour输入变量。
另一种方法是修改一条已经存在的趋势线的颜色,这需要line.set_color()函数:
// 也可以先创建一条线,之后再修改它的颜色
myLine = line.new(x1=bar_index[15], y1=close[15],
x2=bar_index, y2=close, width=4)
line.set_color(id=myLine, color=lineColour)
这段代码先调用line.new()创建一条连接当前收盘价和15根K线前收盘价的趋势线,函数返回的线条引用存入myLine变量,方便后续引用。
然后调用line.set_color()修改这条线的颜色:myLine变量指定要修改哪条线,lineColour输入变量指定要应用的新颜色。
图表示例
来看以上代码在TradingView图表上的效果。首先是脚本设置中的颜色输入选项,它看起来是这样的:

使用默认的半透明黑色时,图表上的趋势线是这个样子:

如果把颜色选项改成其他颜色,比如不带任何透明度的亮绿色,趋势线也会随之更新:

完整示例脚本
下面是一个完整的Pine Script指标,演示如何通过输入选项设置趋势线的颜色。它整合了上面讨论过的所有代码,可以直接添加到图表中:
//@version=5
indicator(title="通过输入设置趋势线颜色", overlay=true)
// 步骤 1:创建颜色类型的输入项
lineColour = input.color(color.new(color.black, 70), title="线条颜色")
// 步骤 2:使用输入选项来设置线条的颜色
if barstate.islastconfirmedhistory
// 创建一条新线,并立即为其设置颜色
line.new(x1=bar_index[40], y1=close[40],
x2=bar_index, y2=close, width=4, color=lineColour)
// 也可以先创建一条线,之后再修改它的颜色
myLine = line.new(x1=bar_index[15], y1=close[15],
x2=bar_index, y2=close, width=4)
line.set_color(id=myLine, color=lineColour)
这个指标在图表上的具体效果,参考上方的图片。
总结
要通过输入选项设定线条颜色,首先用input.color()函数创建一个颜色输入项,然后把输入项获取的颜色值配合line.new()函数(创建时上色)或line.set_color()函数(修改已有线条的颜色)使用即可。
如何用输入选项控制趋势线的延伸
在Pine Script中,我们可以创建多种类型的输入选项,让用户方便地调整脚本参数。一个很实用的做法,就是创建一个控制趋势线延伸方式的输入选项,允许用户手动配置趋势线是否延伸以及向哪个方向延伸。
实现这样的功能需要分三步走。第一步,用input.string()函数创建一个文本下拉菜单,菜单包含四种线条延伸方式的选项。第二步,把用户选择的文本值转换为Pine Script中有效的延伸常量(以extend.*开头的常量)。第三步,把转换后的延伸常量应用到趋势线上——创建新线时通过line.new()直接指定,或者对已存在的线用line.set_extend()修改。下面动手实现。
第一步:创建趋势线延伸输入选项
尽管Pine Script提供了多种输入类型,却没有专门用于控制趋势线延伸的现成输入框。不过没关系,可以先创建一个文本下拉菜单,之后再把它的值转换为趋势线延伸所需的常量。
首先用input.string()函数创建这个下拉菜单:
// 步骤 1. 创建带下拉菜单的输入选项
extendOption = input.string("none", title="Line Extension",
options=["none", "left", "right", "both"])
这段代码调用input.string()函数并传入几个参数。”none”是该选项的默认值;title参数为输入框设置标题,会显示在脚本设置界面中。
options参数定义了下拉菜单中可供选择的所有项目。趋势线有四种延伸方式,所以列表也包含四个字符串:none(不延伸)、left(向左延伸)、right(向右延伸)和both(双向延伸)。我们选”none”作为初始默认值。
输入选项的当前值储存在extendOption变量中,后续代码访问该变量就能获取用户在设置中选定的值。用户手动更改设置后,变量的值也会自动同步更新。
第二步:把输入值转换为extend.*常量
现在我们有了一个能告诉脚本如何延伸线条的输入选项,但它的值是文本字符串格式,不能直接用于控制线条延伸——延伸趋势线需要的是extend.*格式的专属常量。因此要做一次转换:
// 步骤 2. 将输入的当前值转换为
// 正确的 'extend' 常量
lineExtend = extendOption == "left" ? extend.left :
extendOption == "right" ? extend.right :
extendOption == "both" ? extend.both :
extend.none
这段代码创建了新变量lineExtend,它的最终值取决于一系列由条件运算符(?:)构成的判断逻辑。
首先检查extendOption变量的值是否等于(==)字符串”left”:如果用户在下拉菜单中选了left,extend.left常量就赋值给lineExtend变量(之后就用这个变量设定线条的延伸属性)。
第一个条件不满足时执行下一个判断,检查值是否等于”right”,成立则把extend.right赋给lineExtend。既不是left也不是right时,第三个判断检查值是否为”both”,是就返回extend.both。所有条件都不满足(用户选了none)时,默认返回不延伸的常量extend.none。
通过这套逻辑,无论用户在Line Extension输入框中选了哪个选项,lineExtend变量最终都会储存一个有效的、可直接用于设置趋势线延伸的常量。
第三步:用extend.*常量设置线条延伸
现在可以把转换后的延伸值应用到趋势线上了。Pine Script提供两种方式:创建线条时就设定延伸方式,或者创建后修改现有线条的延伸。分别来看。
第一种方式是调用line.new()创建新线时,立即通过extend参数设定延伸方式:
// 步骤 3. 将自定义的 `extend` 值应用于趋势线
// 创建一条新线并立即设定其延伸选项
line.new(x1=bar_index[50], y1=low[50],
x2=bar_index[15], y2=low[15], extend=lineExtend,
width=3, color=color.red)
这段代码画了一条连接50根K线前低点和15根K线前低点的线,width和color参数分别设定粗细和颜色。
关键的extend参数决定这条新线如何延伸,我们把前面处理好的lineExtend变量作为它的值,这样线条的延伸方式就与用户在输入框中的选择保持一致。
第二种方式是修改一条已经存在的趋势线,通过line.set_extend()函数实现:
// 首先创建一条趋势线,之后再修改其延伸属性
highLine = line.new(x1=bar_index[50], y1=high[50],
x2=bar_index[15], y2=high[15], width=3, color=color.green)
// ...
// 延伸已存在的趋势线
line.set_extend(id=highLine, extend=lineExtend)
这里先用line.new()创建一条连接两个高点的趋势线,引用储存在highLine变量中。然后调用line.set_extend()修改延伸属性:id参数通过highLine变量指定要操作的线,extend参数用的是我们从下拉菜单获取并转换好的lineExtend变量。
图表示例
理论讲完,来看它在TradingView上的实际效果。首先是脚本设置中的自定义输入选项,这个下拉菜单看起来是这样的:

输入框使用默认值none时,图表上的趋势线不会被延伸:

如果把输入选项改为left,脚本画的趋势线会向图表左侧无限延伸:

而选项设为both时,线条会同时向左和向右两个方向延伸:

完整示例脚本
下面是一个完整的Pine Script指标,实现了通过输入选项设置趋势线延伸的全部功能。它包含上文讨论的所有代码,可以直接复制到图表上运行:
//@version=5
indicator(title="Extend trend line with input", overlay=true)
// 步骤 1. 创建带下拉菜单的输入选项
extendOption = input.string("none", title="Line Extension",
options=["none", "left", "right", "both"])
// 步骤 2. 将输入的当前值转换为
// 正确的 'extend' 常量
lineExtend = extendOption == "left" ? extend.left :
extendOption == "right" ? extend.right :
extendOption == "both" ? extend.both :
extend.none
// 步骤 3. 将自定义的 `extend` 值应用于趋势线
if barstate.islastconfirmedhistory
// 创建一条新线并立即设定其延伸选项
line.new(x1=bar_index[50], y1=low[50],
x2=bar_index[15], y2=low[15], extend=lineExtend,
width=3, color=color.red)
// 或者先创建一条趋势线,之后再修改其延伸属性
highLine = line.new(x1=bar_index[50], y1=high[50],
x2=bar_index[15], y2=high[15], width=3, color=color.green)
line.set_extend(id=highLine, extend=lineExtend)
这个脚本在图表上的实际效果,参考上方的图片。
总结
要通过输入选项设置线条的延伸,首先用input.string()创建一个文本输入框,为每种趋势线延伸方式(左、右、双向、无)提供一个对应的文本选项。然后把用户选择的文本值转换为Pine Script内部使用的extend.*常量,最后把这个常量应用于line.new()或line.set_extend()函数即可。
如何用输入选项设置趋势线的粗细
Pine Script内置了多种输入选项,可以为脚本的设置窗口添加自定义参数。借助这些选项,我们不用编辑代码就能便捷地手动调整脚本参数。
其中一种输入类型是整数输入,用途很广,其中就包括调整趋势线的粗细。要通过输入项设定趋势线的粗细,需要两步:先用input.int()函数创建一个整数输入选项;再用这个输入项的值设定线条的粗细——创建线条时通过line.new()直接指定,或者对已存在的线条用line.set_width()动态修改。接下来深入代码一探究竟。
第一步:创建整数输入项
在Pine Script中,线条的粗细是通过一个整数设定的,所以第一步就是用input.int()函数创建一个整数输入项:
// 步骤 1:创建一个用于指定线条宽度的输入选项
lineWidth = input.int(1, title="线条宽度", minval=1)
这里调用input.int()函数并传入几个参数。第一个参数是输入项的默认值,设为1,这也是TradingView趋势线的标准粗细。
title参数把这个输入项命名为线条宽度,这段文字会显示在设置窗口的选项前方。minval参数设定输入项的最小值,同样设为1,因为线条的宽度至少是1像素,不能更小。
输入项的当前值储存在lineWidth变量中,后续代码通过这个变量获取用户设定的值。我们在设置中手动更改该选项时,lineWidth变量的值也会同步更新。
第二步:把线条宽度与输入值关联
现在已经有了一个能控制线条粗细的输入项,是时候把它投入使用了。有两种方式:创建线条时直接设定粗细,或者用它修改一条已存在线条的粗细。分别来看。
第一种方式是调用line.new()创建线条时就指定好粗细:
// 步骤 2:使用输入选项来设定线条的宽度
// 创建一条新线并立即设定其宽度
line.new(x1=bar_index[50], y1=low[50],
x2=bar_index[15], y2=low[15], width=lineWidth,
color=color.orange)
这里的line.new()函数在50根K线前的低点和15根K线前的低点之间画了一条趋势线,颜色(color)设为橙色(color.orange)。
关键在于width参数,它决定线条的粗细。我们把它设为lineWidth变量,该变量储存着输入项的当前值,这样新创建的线条就会采用通过输入选项设定的粗细。
另一种方法是修改一条已经存在的趋势线的粗细,通过line.set_width()函数完成:
// 首先,我们需要一条线(以便后续更新它的宽度)
highLine = line.new(x1=bar_index[50], y1=high[50],
x2=bar_index[15], y2=high[15], color=color.teal)
// ... 假设中间有其他代码 ...
// 修改这条已存在线条的宽度
line.set_width(id=highLine, width=lineWidth)
这段代码先用line.new()创建一条连接50根K线前高点和15根K线前高点的趋势线,返回的线条引用储存在highLine变量中。
接着调用line.set_width()改变这条线的粗细:id参数传入highLine变量指明要修改哪条线,width参数传入lineWidth输入变量,把线条的粗细更新为用户设定的值。
图表示例
以上代码在TradingView图表上会呈现怎样的效果?首先,脚本设置中会增加一个控制线条粗细的数字输入选项,它看起来是这样的:

输入项使用默认值1时,图表上的趋势线粗细如下:

现在,如果把输入项的值改为5,图上的线条也会立刻随之变粗:

完整示例脚本
下面是一个完整的TradingView指标脚本,演示如何通过输入选项设定趋势线的粗细。它整合了上面讨论过的所有代码,可以直接添加到图表中运行:
//@version=5
indicator(title="用于趋势线宽度的输入选项", overlay=true)
// 步骤 1:创建一个用于指定线条宽度的输入选项
lineWidth = input.int(1, title="线条宽度", minval=1)
// 步骤 2:使用输入选项来设定线条的宽度
if barstate.islastconfirmedhistory
// 创建一条新线并立即设定其宽度
line.new(x1=bar_index[50], y1=low[50],
x2=bar_index[15], y2=low[15], width=lineWidth,
color=color.orange)
// 或者,创建一条趋势线,然后更新它的宽度
highLine = line.new(x1=bar_index[50], y1=high[50],
x2=bar_index[15], y2=high[15], color=color.teal)
line.set_width(id=highLine, width=lineWidth)
这个指标在图表上的具体效果,参考上方的图片。
总结
要通过输入项控制线条的宽度,首先用input.int()函数创建一个整数输入设置,然后把该输入项的值配合line.new()函数(创建时设定)或line.set_width()函数(创建后修改)应用即可。
如何用输入选项设置趋势线的样式
Pine Script内置了多种输入选项类型,通过创建这类自定义的手动设置,我们可以轻松快速地调整脚本参数。一个很方便的做法,就是创建一个能改变趋势线样式的输入选项。
编写这样一个输入功能需要三个步骤。第一步,用input.string()函数创建一个文本下拉菜单,为每种趋势线样式提供一个对应的选项。第二步,把用户选择的字符串值转换为Pine Script内部可识别的趋势线样式,也就是名称以line.style_开头的特定常量。第三步,把这个样式常量应用到趋势线上——创建新线时通过line.new()直接指定,或者对已存在的线用line.set_style()修改。开始吧。
第一步:创建线条样式下拉菜单
尽管Pine Script提供了多种输入类型,却没有专门用于选择趋势线样式的现成输入框。不过这不成问题,可以先创建一个基于文本的下拉菜单,再把用户选择的文本值转换为相应的线条样式常量。
第一步就是用input.string()函数创建这个下拉菜单:
// 步骤 1. 创建带下拉菜单的输入选项
styleOption = input.string("solid (─)", title="Line Style",
options=["solid (─)", "dotted (┈)", "dashed (╌)",
"arrow left (←)", "arrow right (→)", "arrows both (↔)"])
这里调用input.string()函数并传入几个参数。第一个参数是输入框的默认值,设为”solid (─)”,代表实线。title参数为输入框命名,名称(Line Style)会显示在脚本的设置窗口中。
options参数定义了下拉菜单中所有可选的项目。列表包含6个值,分别对应6种趋势线样式。为了更直观,每个选项的括号里都附上了一个简单的视觉示例。
输入选项的当前值存储在styleOption变量中,后续代码访问该变量就能获取用户在设置中选定的值。用户手动更改设置后,变量的值也会同步更新。
第二步:把输入值转换为line.style_*常量
现在我们有了一个包含用户所选线条样式的输入变量,但它的值是字符串格式,不能直接用来设定线条样式——设置趋势线样式需要的是line.style_*格式的专属常量。因此要做一次转换:
// 步骤 2. 将输入值转换为正确的线条样式常量
lineStyle = styleOption == "dotted (┈)" ? line.style_dotted :
styleOption == "dashed (╌)" ? line.style_dashed :
styleOption == "arrow left (←)" ? line.style_arrow_left :
styleOption == "arrow right (→)" ? line.style_arrow_right :
styleOption == "arrows both (↔)" ? line.style_arrow_both :
line.style_solid
这里创建了新变量lineStyle,它的值将是Pine Script内置的线条样式之一,具体是哪种取决于一系列由条件运算符(?:)构成的判断逻辑。
每个条件运算符都把styleOption输入变量的值与一个特定字符串比较,这些字符串正是我们之前在下拉菜单中设定的选项。当输入变量的值与其中一个字符串匹配(==)时,对应的条件运算符就返回该样式所需的常量。
例如,输入值匹配”dotted (┈)”时,代码返回line.style_dotted,这个常量就成为lineStyle变量的值。
如果一个匹配测试的结果为false,Pine Script会继续执行下一个条件运算符,逐一检查styleOption变量是否匹配其他可能的样式。所有条件都不匹配时(通常是用户选择了默认值”solid (─)”),最后的运算符返回默认的实线样式(line.style_solid)作为lineStyle变量的值。
第三步:把线条样式设定为输入选项的值
至此,我们有了一个可以随时应用于趋势线的样式常量。Pine Script提供两种应用方式:创建线条时就指定样式,或者修改一条已存在线条的样式。分别来看。
第一种方式是调用line.new()创建趋势线的那一刻,直接设定好它的样式:
// 步骤 3. 使用输入选项来设定线条的样式
// 创建一条新线并立即设定其样式
line.new(x1=bar_index[55], y1=close[55],
x2=bar_index, y2=close, width=4, color=color.blue,
style=lineStyle)
这段代码画了一条连接55根K线前收盘价与当前收盘价的线,蓝色(color.blue),宽度为4。
关键的style参数决定这条新线的外观,我们把上一步处理好的lineStyle变量赋值给它,这样创建出的线条样式就和用户在输入框中的选择完全一致。
第二种方式是修改一条已经存在的趋势线的样式,通过line.set_style()函数实现:
// 首先创建一条趋势线,以便我们能修改它的样式
myLine = line.new(x1=bar_index[35], y1=close[35],
x2=bar_index, y2=close, width=4, color=color.orange)
// ...
// 修改已存在趋势线的样式
line.set_style(id=myLine, style=lineStyle)
这里先用line.new()创建一条连接35根K线前收盘价与当前收盘价的趋势线,引用存储在myLine变量中。
然后调用line.set_style()改变这条线的样式:id=myLine指定要修改哪条线,style=lineStyle告诉函数要应用哪种样式,这个样式值正是来源于我们之前创建的输入选项。
图表示例
来看上述代码的实际效果。首先是脚本设置中的自定义输入选项,这个带有线条样式的下拉列表显示如下:

输入框的默认值为实线,使用该样式的趋势线在图表上显示如下:

如果把输入选项改为虚线,趋势线会相应地改变:

而选择arrows both样式时,线条会变为带双向箭头的样式:

完整示例脚本
下面是一个完整的指标脚本,实现了通过输入选项设置趋势线样式的全部功能。它包含上文讨论的所有代码,可以直接复制到图表上运行:
//@version=5
indicator(title="Set line style with input", overlay=true)
// 步骤 1. 创建带下拉菜单的输入选项
styleOption = input.string("solid (─)", title="Line Style",
options=["solid (─)", "dotted (┈)", "dashed (╌)",
"arrow left (←)", "arrow right (→)", "arrows both (↔)"])
// 步骤 2. 将输入值转换为正确的线条样式常量
lineStyle = styleOption == "dotted (┈)" ? line.style_dotted :
styleOption == "dashed (╌)" ? line.style_dashed :
styleOption == "arrow left (←)" ? line.style_arrow_left :
styleOption == "arrow right (→)" ? line.style_arrow_right :
styleOption == "arrows both (↔)" ? line.style_arrow_both :
line.style_solid
// 步骤 3. 使用输入选项来设定线条的样式
if barstate.islastconfirmedhistory
// 创建一条新线并立即设定其样式
line.new(x1=bar_index[55], y1=close[55],
x2=bar_index, y2=close, width=4, color=color.blue,
style=lineStyle)
// 或者先创建一条线,然后修改它的样式
myLine = line.new(x1=bar_index[35], y1=close[35],
x2=bar_index, y2=close, width=4, color=color.orange)
line.set_style(id=myLine, style=lineStyle)
这个脚本在图表上的实际效果,参考上方的图片。
总结
要通过输入选项设置线条样式,首先用input.string()函数创建一个文本输入框,然后把每个可能的文本输入值转换为对应的line.style_*常量,最后把处理好的线条样式常量应用于line.new()或line.set_style()函数即可。


