外观
绘图
约 5638 字大约 19 分钟
简介
plot()函数是Mine脚本中最常用的函数,用于显示通过脚本计算的信息。它具有多种用途,可以绘制不同样式的线条、直方图、面积图、柱形图(如成交量柱)、填充区域、圆形或十字标记。
该脚本展示了一个叠加脚本中plot()的几种不同用法:

Mine Script®
已复制
需要注意:
- 第一个plot()调用绘制跨越高点的1像素蓝色线条。
- 第二个plot()在实体中点绘制十字标记:阳线时为青柠色,阴线时为紫色。使用的
linewidth参数值为6,但这不是像素值,仅表示相对大小。 - 第三个调用绘制3像素宽的阶梯线,跟随实体低点。
- 第四个调用在K线低点绘制灰色圆点。
- 最后一个plot()需要一些准备工作:首先定义多头/空头颜色,计算Arnaud Legoux移动平均线,进行颜色计算。使用var仅在第0根K线初始化颜色变量为color.silver。在数据集的初始K线上,直到条件触发颜色变化前,线条保持银色。颜色变化条件要求当前值高于/低于两周期前的值(相比仅与前一周期的比较,这能减少颜色切换的噪音)。
该脚本展示了plot()函数在面板中的其他用途:

Mine Script®
已复制
需要注意:
- 我们使用宽柱状图在零轴上方绘制标准成交量数值(参见plot()调用中的
style = plot.style_columns)。 - 在绘制柱状图前,我们使用
barUp和barDn布尔变量的值计算volumeColor。当当前K线的收盘价高于/低于前一根K线时,这两个变量分别变为true。请注意内置的“Volume”指标不使用相同条件,它通过close > open识别上涨K线。我们使用GREEN_LIGHTER和PINK_LIGHTER颜色绘制成交量柱。 - 由于第一个
plot绘制的是柱状图,我们不使用linewidth参数,因为它对柱状图没有影响。 - 脚本的第二个
plot是成交量变化,我们之前使用ta.change(volume)计算了这个值。这个值以直方图形式绘制,linewidth参数控制直方图的宽度。我们将宽度设为12,使直方图元素比第一个plot的柱状图更细。正/负的volumeChange值分别绘制在零轴上方/下方,无需额外处理即可实现此效果。 - 在绘制
volumeChange值的直方图前,我们计算其颜色值,可能有四种不同颜色。当K线上涨/下跌且成交量较上一根K线增加(volumeChange > 0)时,我们使用明亮的GREEN或PINK颜色。由于此时volumeChange为正,直方图元素将绘制在零轴上方。当K线上涨/下跌但成交量未增加时,我们使用明亮的GREEN_LIGHT或PINK_LIGHT颜色。由于此时volumeChange为负,直方图元素将绘制在零轴下方。 - 最后,我们绘制零轴线。此处也可以使用
hline(0)。 - 我们在indicator()调用中使用
format = format.volume,使该脚本显示的大数值像内置的“Volume”指标一样被缩写。
plot() 调用必须始终位于行的第一个位置,这意味着它们始终处于脚本的全局作用域中。它们不能被放置在用户自定义函数或 if、for 等结构中。但是,可以通过两种方式设计条件性绘图的 plot() 调用,我们将在本页的条件性绘图部分进行介绍。
脚本只能在其自身的视觉空间中绘图,无论是在面板中还是作为图表上的叠加层。在面板中运行的脚本只能为图表区域的柱线着色。
plot() 参数
plot() 函数的声明格式如下:
plot(series, title, color, linewidth, style, trackprice, histbase, offset, join, editable, show_last, display, force_overlay) → plotplot()函数的参数如下:
series(序列)
这是唯一必需的参数。其参数必须是“series int/float”类型。请注意,由于Mine Script®中的自动转换规则是沿int→float→bool方向进行的,“bool”类型变量不能直接使用,必须先转换为“int”或“float”才能作为参数使用。例如,如果newDay是“bool”类型,则可以使用newDay ? 1 : 0,当变量为true时绘制1,为false时绘制0。
title(标题)
需要一个“const string”参数,因此必须在编译时确定。该字符串出现在:
- 脚本的刻度上(当勾选“图表设置/刻度/指标名称标签”时)
- 数据窗口中
- “设置/样式”选项卡中
- input.source()字段的下拉列表中
color(颜色)
接受“series color”,因此可以逐根K线动态计算。当不需要绘图时,使用na作为颜色或任何透明度为100的颜色是隐藏绘图的一种方法。
linewidth(线宽)
是绘制元素的大小,但不适用于所有样式。绘制线条时,单位是像素。使用plot.style_columns时没有影响。
style(样式)
可用参数包括:
- plot.style_line(默认):绘制连续线,使用
linewidth参数(以像素为单位)确定宽度。na值不会绘制为线条,但当出现非na值时会被桥接。只有当非na值在图表上可见时才会被桥接。 - plot.style_linebr:允许绘制不连续的线条,不在
na值上绘制,也不连接间隙(即不桥接na值)。 - plot.style_stepline:使用阶梯效果绘制。值之间的转换使用在K线中间绘制的垂直线完成,而不是连接K线中点的对角线。如果注意不在na值上绘制颜色,也可以实现类似于plot.style_linebr的效果。
- plot.style_area:绘制一条宽度为
linewidth的线,填充线与histbase之间的区域。color参数用于线条和填充。可以通过另一个plot()调用使线条具有不同的颜色。正值绘制在histbase上方,负值绘制在其下方。 - plot.style_areabr:类似于plot.style_area,但不桥接
na值。另一个区别是指标刻度的计算方式。只有绘制的值用于计算脚本视觉空间的y范围。例如,如果只绘制远离histbase的高值,这些值将用于计算脚本视觉空间的y刻度。正值绘制在histbase上方,负值绘制在其下方。 - plot.style_columns:绘制类似于内置“Volume”指标的柱状图。
linewidth值不影响柱的宽度。正值绘制在histbase上方,负值绘制在其下方。始终将histbase的值包含在脚本视觉空间的y刻度中。 - plot.style_histogram:绘制类似于内置“Volume”指标的柱状图,不同之处在于使用
linewidth值(以像素为单位)确定直方图柱的宽度。请注意,由于linewidth需要“input int”值,直方图柱的宽度不能逐根K线变化。正值绘制在histbase上方,负值绘制在其下方。始终将histbase的值包含在脚本视觉空间的y刻度中。 - plot.style_circles和plot.style_cross:这些样式绘制不跨K线连接的形状,除非同时使用
join = true。对于这些样式,linewidth参数变为相对大小度量——其单位不是像素。
trackprice(跟踪价格)
此参数的默认值为false。当为true时,将由小方块组成的虚线绘制到脚本视觉空间的整个宽度。通常与show_last = 1、offset = -99999一起使用,以隐藏实际绘图,只留下残留的虚线。
histbase(基准线)
这是与plot.style_area、plot.style_columns和plot.style_histogram一起使用的参考点。它确定分隔series参数正值和负值的水平。不能动态计算,需要“input int/float”。
offset(偏移)
允许使用正的/负的K线偏移量将绘图移动到过去/未来。该值不能在脚本执行期间更改。
join(连接)
仅影响plot.style_circles或plot.style_cross样式。当为true时,形状由一条1像素的线连接。
editable(可编辑)
此布尔参数控制是否可以在“设置/样式”选项卡中编辑绘图的属性。
show_last(最后显示)
允许控制绘制的值在最后多少根K线上可见。需要“input int”参数,因此不能动态计算。
display(显示)
默认为display.all。当设置为display.none时,绘制的值不会影响脚本视觉空间的刻度。绘图将不可见,也不会出现在指标值或数据窗口中。对于用作其他脚本外部输入的绘图,或用于alertcondition()调用中{{plot("[plot_title]")}}占位符的绘图,这可能很有用。
Mine Script®
已复制
force_overlay(强制叠加)
若设为true,即使脚本运行在独立面板中,绘图结果也将显示在主图表窗口。可选参数,默认值为false。
条件性绘图
plot()调用不能直接用于if等条件结构中,但可通过以下两种方式实现条件控制:
动态调整绘制值:不需要显示时传递na值 颜色控制:使用na作为颜色值,或采用透明度100%的颜色(两者均会使绘图不可见)
数值控制
控制绘图显示的一种方法是在不需要绘图时传递na值。某些情况下,当使用gaps = barmerge.gaps_on等参数时,request.security()等函数会返回na值。在这些场景中,绘制不连续线形通常很有实用价值。本脚本演示几种实现方式:

Mine Script®
已复制
请注意:
- 我们使用
bar_index % 3 == 0作为绘图条件,当K线索引能被3整除时返回true,即每3根K线触发一次绘制。 - 第一个
plot使用plot.style_linebr样式,在K线高点绘制紫红色线条,线条以K线水平中点为基准。 - 第二个
plot展示相同数值但未处理间断的效果:默认plot()调用的细蓝色线条会自动桥接na值(或间隙),因此不会出现中断。 - 随后我们在实体顶部和底部分别绘制藏青色十字标记和圆形标记。plot.style_circles和plot.style_cross样式是绘制间断值(如止损/止盈位、支撑/阻力位)的简便方式。
- 最后一个
plot使用plot.style_stepline在K线低点绘制绿色阶梯线。注意其线段比plot.style_linebr的紫红色线段更宽,且在最新K线上只绘制到中间位置直到下一根K线出现。 - 各
plot的绘制顺序由其在脚本中的出现顺序控制。
该脚本展示了如何将绘图限制在用户自定义日期之后的K线上。我们使用input.time()函数创建一个输入控件,允许脚本使用者选择日期和时间(默认值为2021年1月1日):
Mine Script®
已复制
颜色控制
关于颜色的页面中的条件着色部分讨论了绘图的颜色控制。我们将在此处看几个示例。
plot()中color参数的值可以是常量,例如内置常量颜色之一或颜色字面量。在Mine脚本中,此类颜色的限定类型称为“const color”(参见类型系统页面)。它们在编译时已知:
Mine Script®
已复制
绘图的颜色也可以根据脚本在图表第一个历史K线(第0根K线,即bar_index == 0或barstate.isfirst == true)开始执行时才可知的信息来确定。这种情况适用于颜色取决于脚本运行图表的场景。在此示例中,我们使用内置变量syminfo.type(返回图表品种的类型)来计算绘图颜色。此时plotColor的限定类型将为“simple color”:
Mine Script®
已复制
绘图颜色也可以通过脚本的输入参数来选择。在这种情况下,lineColorInput变量的类型为“input color”:
Mine Script®
已复制
最后,绘图颜色也可以是动态值,即可以在每根K线上变化的计算值。这些值的类型为“series color”:
Mine Script®
已复制
在绘制枢轴水平线时,一个常见需求是避免绘制水平线过渡。使用线条(line)是一种替代方案,但也可以按照以下方式使用plot():

Mine Script®
已复制
需要注意:
- 我们使用
pivotHigh = fixnan(ta.pivothigh(3,3))来保存枢轴点值。由于ta.pivothigh()仅在发现新枢轴点时返回值,因此使用fixnan()用最后返回的枢轴点值填充间隙。这里的间隙指的是当未发现新枢轴点时ta.pivothigh()返回的na值。 - 枢轴点在其实际出现3根K线后才被检测到,因为在ta.pivothigh()调用中,我们为
leftbars和rightbars参数都使用了参数值3。 - 最后一个
plot绘制连续值,但当枢轴点值变化时将绘图颜色设为na,因此此时绘图不可见。由于这个原因,只有在使用na颜色绘制的K线之后的那根K线上才会出现可见的绘图。 - 蓝色圆点表示检测到新的高点枢轴点,且在前一根K线和该K线之间没有绘制任何图形。请注意箭头指示的K线上的枢轴点是在实时K线上(3根K线后)刚被检测到的,此时没有绘制任何图形。该绘图只会在下一根K线上出现,使得绘图在实际枢轴点出现4根K线后才可见。
水平线绘制
Mine Script提供hline()函数来绘制水平参考线(详见水平线章节)。hline()的优势在于支持某些plot()不具备的线型样式,但存在两个主要限制:
- 不接受“series color”类型参数
price参数要求“input int/float”类型,无法在脚本执行期间动态变化
使用plot()绘制水平线有以下替代方案,本示例展示通过plot()实现的CCI指标水平参考线:

Mine Script®
已复制
需要注意:
- 零线水平使用plot.style_circles样式绘制
- 100水平线采用条件值绘制,仅每隔一根K线显示一次。为防止
na值被自动连接,我们使用plot.style_linebr线型样式 - 200水平线使用
trackprice = true参数绘制,生成贯穿整个面板宽度的特殊小方块图案。配合show_last = 1仅显示最后绘制的值(若不使用下文技巧将显示为单根直线段),通过offset = -99999将该线段推向过去使其永远不可见 - 300水平线使用连续线条绘制,但采用较低透明度使其不那么显眼
偏移参数
offset参数用于指定绘图时的位移量(负值表示向历史K线方向偏移,正值表示向未来K线方向偏移)。例如:

Mine Script®
已复制
如截图所示,红色序列向左偏移(参数值为负),而绿色序列向右偏移(参数值为正)。
绘图数量限制
每个脚本最多只能包含64个绘图调用。所有plot*()调用和alertcondition()调用都会计入脚本的绘图总数。某些类型的调用会占用多个绘图计数。
plot()调用在以下情况下占用1个绘图计数:
当color参数使用“const color”类型时(即在编译时已知),例如:
Mine Script®
已复制
当使用以下任一限定类型时,每个plot()调用将占用2个绘图计数:
Mine Script®
已复制
刻度范围
并非所有值都能在任何位置绘制。脚本的视觉空间始终受动态调整的上下限约束,这些限制会随绘图值变化。例如:
- RSI指标通常在0到100之间波动,因此通常显示在图表上方或下方的独立面板中
- 若将RSI值作为叠加层绘制在主图表上,除非恰巧接近0-100范围,否则会扭曲品种的正常价格刻度
本示例展示在独立面板中运行的RSI信号线和50水平中心线:

Mine Script®
已复制
需要注意,脚本视觉空间的y轴会根据所绘制值(即RSI值)的范围自动调整大小。有关脚本中使用的color.from_gradient()函数的更多信息,请参阅颜色页面。
如果尝试通过以下代码在相同空间绘制品种的收盘价:
Mine Script®
已复制
此时会出现以下情况:

该图表基于XAUUSD品种,此期间收盘价约3300。在该数值范围绘制图形会使0-100区间的RSI绘图完全无法辨识。若将RSI指标作为叠加层置于主图表上,同样会出现此类刻度扭曲现象。
合并两个指标
如果您计划在一个脚本中合并两个信号,首先需要考虑每个指标的刻度范围。例如,无法在同一脚本的视觉空间中正确绘制RSI和MACD,因为RSI具有固定范围(0到100),而MACD没有,因为它绘制的是基于价格计算的移动平均值。
如果您的两个指标都使用固定范围,可以通过偏移其中一个指标的值使它们不重叠。例如,我们可以通过位移其中一个指标来同时绘制RSI(0到100)和真实强度指标(TSI)(-100到+100)。我们的策略是压缩和偏移TSI值,使其在RSI上方绘制:

Mine Script®
已复制
需要注意: