Skip to content

图表渲染

执行 Pine Script 后,调用 instance.chart() 可获取 Chart —— 脚本产生的完整视觉输出集合。本文档描述图表数据模型,以便你可在任何前端(Canvas、SVG、WebGL、原生 UI 等)中进行渲染。

基本访问图表和脚本信息的 Rust API 模式请参阅读取输出

概述

Chart 包含两类视觉元素:

类别访问方式描述
序列图chart.series_graphs()逐 K 线数据:每根 K 线一个值。包括 plot()plotshape()plotchar()plotarrow()plotcandle()plotbar()bgcolor()fill()
非序列图chart.graphs()*.new() 创建的时间点绘图对象。包括 labellineboxtablepolylinehlinelinefill

序列图按 K 线索引(索引 0 = 第一根 K 线)。非序列图为具有显式坐标的独立对象。


访问图表

rust
use openpine_vm::*;

// 1. Build an instance with bar data
let mut instance = Instance::builder(candlesticks, source, TimeFrame::days(1), "NASDAQ:AAPL")
    .build().await?;

// 2. Run the script against all bars
instance.run_to_end("NASDAQ:AAPL", TimeFrame::days(1)).await?;

// 3. Access the chart (borrow)
let chart = instance.chart();

// Or take ownership (consumes the instance)
let chart = instance.into_chart();

// 4. Access script configuration
let info = instance.script_info();

关键图表方法

方法返回类型描述
background_color()Option<Color>图表级背景色
series_graphs()Iterator<(SeriesGraphId, &SeriesGraph)>所有逐 K 线视觉序列
series_graph(id)Option<&SeriesGraph>按 ID 查找特定序列图
graphs()Iterator<(GraphId, &Graph)>所有绘图对象
graph(id)Option<&Graph>按 ID 查找特定绘图对象
series_len()usizeK 线总数
bar_colors()&BarColors每根 K 线的 K 线颜色覆盖
filled_orders_on_bar(i)&[FilledOrder]i 根 K 线上的成交订单(信号名、价格、数量)

图表结构

Chart
 |-- background_color: Option<Color>
 |-- bar_colors: BarColors
 |-- filled_orders: { bar_index -> [FilledOrder] }
 |
 |-- series_graphs: { SeriesGraphId -> SeriesGraph }
 |     |-- Plot
 |     |-- PlotShape
 |     |-- PlotChar
 |     |-- PlotArrow
 |     |-- PlotBar
 |     |-- PlotCandle
 |     |-- BackgroundColor
 |     |-- Fill
 |
 |-- graphs: { GraphId -> Graph }
       |-- Hline
       |-- Label
       |-- Line
       |-- LineFill
       |-- Box
       |-- Polyline
       |-- Table

脚本配置 (ScriptInfo)

通过 instance.script_info() 访问。这描述脚本如何声明自身 —— 控制窗格布局、绘制顺序和数值格式。indicator()strategy() 共享相同的渲染相关字段。

rust
let info = instance.script_info();

// Access rendering fields via script_type
let is_overlay = match &info.script_type {
    ScriptType::Indicator(ind) => ind.overlay,
    ScriptType::Strategy(strat) => strat.overlay,
    ScriptType::Library(lib) => lib.overlay,
};
字段类型默认值描述
titleString显示名称,用于图表图例和数据窗口
short_titleOption<String>None紧凑显示的缩写名称(状态行、价格刻度)
overlayboolfalsetrue = 绘制在主图价格窗格;false = 在单独副图中绘制
formatFormatInherit价格刻度、工具提示、数据窗口上显示数值的格式
precisionOption<u8>None数值小数位。None = 使用品种默认值
scaleScaleTypeNone价格刻度位置:None(自动)、LeftRight
explicit_plot_zorderboolfalsetrue = 按声明顺序渲染(先声明 = 底层)。false = 默认绘制顺序
behind_chartboolfalsetrue = 在 K 线后方绘制而非上方

overlay 是最重要的渲染决策:

  • true -> 在主图价格窗格绘制所有视觉元素,共享价格 Y 轴。
  • false -> 在图表下方创建单独副图,拥有自己的 Y 轴。

overlay 同时设置脚本创建的每个视觉元素的 force_overlay 默认值。当 overlay = true 时,所有视觉元素默认为 force_overlay = true(主图)。当 overlay = false 时,默认为 force_overlay = false(副图)。Pine 用户可通过显式传递 force_overlay 参数,按视觉元素覆盖此设置。

format 控制副图 Y 轴标签及十字准线/工具提示中数值的格式化方式,应用于所有副图数值标签:

  • Inherit / Price — 格式化为价格(如 150.250.0042
  • Percent — 添加百分号(如 3.14%
  • Volume — 缩写大数值(如 1.5M200K
  • MinTick — 使用品种最小 tick 格式化(不可用时视为 Price

explicit_plot_zorder 控制图层:

  • false(默认)— 由渲染器决定绘制顺序
  • true — 按 series_graphs() 中的出现顺序绘制(先出现 = 底层)

常见类型

Color

打包为 32 位 RGBA 的值,以 0xRRGGBBAA 格式存储为 u32

方法描述
red() -> u8红色通道 (0-255)
green() -> u8绿色通道 (0-255)
blue() -> u8蓝色通道 (0-255)
alpha() -> u8透明通道 (0 = 透明,255 = 不透明)
transparency() -> u8alpha 的倒数 (0 = 不透明,100 = 透明)
as_u32() -> u32原始打包值

转换为 CSS:rgba(color.red(), color.green(), color.blue(), color.alpha() as f64 / 255.0)

序列化为 JSON 时,Color 显示为普通整数(例如红色 0xFF0000FF4294901760)。

值为 NoneOption<Color> 表示“使用默认颜色”或“不可见”,取决于上下文。

Series<T>

Series<T> 是逐 K 线值的顺序数组,由 VecDeque<T> 支持。索引 0 为第一根 K 线,索引 len() - 1 为最后一根 K 线。

方法描述
get(index) -> Option<&T>获取 K 线索引处的值
len() -> usizeK 线数量
is_empty() -> bool序列是否为空
last() -> Option<&T>最后一根 K 线的值

大多数序列类型为 Series<Option<f64>>Series<Option<Color>>None 条目表示 na(不可用/该 K 线无数值)。渲染时跳过 None 条目 —— 该 K 线不绘制任何内容。

序列化为 JSON 时,Series 显示为普通数组:[null, 150.0, 153.2, null, ...]

PlotDisplay (Bitflags)

控制视觉元素的显示位置。为位掩码 —— 可组合多个标志。

标志描述
ALL0xFFFF随处显示(默认)
NONE0x0隐藏 —— 不渲染任何地方
PANE0x2在图表窗格中显示(视觉图形本身)
DATA_WINDOW0x1在数据窗口面板中显示
PRICE_SCALE0x8在价格刻度轴上显示数值
STATUS_LINE0x10在状态/图例行上显示数值

渲染规则:仅当 display 包含 PANE 标志(display & 0x2 != 0)时,在图表窗格中渲染视觉元素。若 displayNONE0x0),则完全跳过渲染。


序列图(逐 K 线数据)

使用 chart.series_graphs() 迭代。每项为 (SeriesGraphId, &SeriesGraph) 对。使用模式匹配识别类型:

rust
for (id, sg) in chart.series_graphs() {
    match sg {
        SeriesGraph::Plot(plot) => { /* render plot */ }
        SeriesGraph::PlotShape(shape) => { /* render shapes */ }
        SeriesGraph::PlotChar(pchar) => { /* render characters */ }
        SeriesGraph::PlotArrow(arrow) => { /* render arrows */ }
        SeriesGraph::PlotCandle(candle) => { /* render candles */ }
        SeriesGraph::PlotBar(bar) => { /* render OHLC bars */ }
        SeriesGraph::BackgroundColors(bg) => { /* render bg colors */ }
        SeriesGraph::Fill(fill) => { /* render fill area */ }
    }
}

或使用访问方法:sg.as_plot()sg.as_plot_shape() 等。


Plot

最常见的序列图。由 Pine plot() 函数产生。

Pine 示例:

pinescript
plot(close, "Close", color.blue, linewidth=2, style=plot.style_line)

字段:

字段类型描述
titleOption<String>图形标题。显示在图表图例、数据窗口中,用作默认工具提示标签。None = 无标题。
seriesSeries<Option<f64>>逐 K 线数值。每项对应一根 K 线。None = na(该 K 线无点 —— 根据 stylejoin 断开或留空)。
colorsSeries<Option<Color>>图形的逐 K 线颜色。可随 K 线动态变化(如上涨绿色、下跌红色)。None = 使用默认颜色。
line_widthi32线条或轮廓的像素宽度。默认:1。适用于所有样式。
stylePlotStyle决定序列数据的视觉渲染方式:连续线、阶梯线、面积填充、直方图柱、列或点标记(圆、十字、菱形)。参见 PlotStyle 枚举的所有选项。
line_stylePlotLineStyle基于线条样式的描边模式:SolidDashedDotted。仅适用于 LineLineBrStepLineStepLineBr 样式。
track_pricebool若为 true,从最后绘制值向右延伸一条水平虚线至图表右边缘,并在价格刻度上显示该值。用于突出当前指标值。
histbasef64HistogramAreaAreaBrColumns 样式的基准值。这些样式填充序列值与 histbase 之间的区域。默认:0.0。例如 histbase = 50.0 时,数值 80 的直方图柱从 50 向上绘至 80,数值 30 的柱从 50 向下绘至 30。
offseti32将整个图形按给定 K 线数左右偏移。正值向右(未来),负值向左(过去)。默认:0。渲染器应在 bar_index + offset 而非 bar_index 处绘制。
joinbool控制 LineStepLineArea 样式的空值处理。true = 连接连续的 non-na 点,即使中间有 na 值(跨越空值)。false = 在 na 处断开。*Br 样式(LineBrStepLineBrAreaBr)无论此设置如何,始终在 na 处断开。
show_lastOption<usize>若设置,仅渲染图形最后 N 根 K 线。更早的 K 线隐藏。用于减少视觉杂乱。None = 显示全部。
displayPlotDisplay控制图形可见位置的位标志:图表窗格、数据窗口、价格刻度、状态行,或全部/无。仅当设置 PANE 标志时在图表上渲染。参见 PlotDisplay
force_overlaybooltrue = 在主图窗格绘制。false = 在副图绘制。默认为脚本的 overlay 设置(参见 ScriptInfo)。可通过 plot()force_overlay 参数按调用覆盖。

渲染逻辑:

for bar_index in 0..chart.series_len():
    value = plot.series[bar_index]   // Option<f64>
    color = plot.colors[bar_index]   // Option<Color>

    if value is None:
        if style is Line/StepLine/Area and join is true:
            // skip but connect to next valid point
        else:
            // break the line / skip the bar
        continue

    actual_bar = bar_index + plot.offset
    y = value_to_pixel(value)
    x = bar_to_pixel(actual_bar)

    match plot.style:
        Line/LineBr     -> draw line segment to (x, y)
        StepLine/...    -> draw horizontal then vertical to (x, y)
        Area/AreaBr     -> fill between y and histbase
        Histogram       -> draw thin vertical bar from histbase to y
        Columns         -> draw wide vertical bar from histbase to y
        Circles         -> draw circle at (x, y)
        Cross           -> draw + at (x, y)
        Diamond         -> draw diamond at (x, y)

PlotShape

在图表上渲染形状符号。由 Pine plotshape() 函数产生。

Pine 示例:

pinescript
plotshape(close > open, style=shape.triangleup, location=location.belowbar, color=color.green)

字段:

字段类型描述
titleString图形标题,显示在图表图例和数据窗口中。
series(private)逐 K 线值,决定是否绘制形状。通过 bool_value(i)(若形状应在 K 线 i 上显示则返回 Some(true))或 float_value(i)(原始数值)访问。当 locationAbsolute 时,float 值用作 Y 坐标。
styleShape要绘制的形状符号类型(如三角形、箭头、圆、十字、菱形、旗帜、标签、方形、X 形)。
locationLocation控制形状的垂直位置。AboveBar/BelowBar 在 K 线最高/最低价上下固定偏移处放置。Top/Bottom 锚定到窗格顶部/底部。Absolute 将序列 float 值用作精确 Y 价格坐标。
colorsSeries<Option<Color>>形状的逐 K 线颜色。可为常量或随 K 线动态变化(如看涨信号绿色、看跌信号红色)。
offseti32按给定 K 线数左右偏移形状。默认:0
textOption<String>形状旁显示的可选文本。支持 \n 多行。在形状位置附近渲染。
text_colorsSeries<Option<Color>>文本的逐 K 线颜色。与形状颜色独立。
sizeSize控制图表上形状的视觉大小:AutoTinySmallNormalLargeHuge
show_lastOption<usize>若设置,仅在最末 N 根 K 线上绘制形状(从最近 K 线向前计数)。
displayPlotDisplay控制可见性的位标志。参见 PlotDisplay
force_overlaybooltrue = 在主图窗格绘制。false = 在副图绘制。默认为脚本的 overlay 设置。

访问方法:

  • bool_value(bar_index) -> Option<bool> — 值非零时返回 true(应绘制形状),零时 false,na 时 None
  • float_value(bar_index) -> Option<f64> — 返回原始 float 值。

渲染逻辑:

for bar_index in 0..chart.series_len():
    show = plotshape.bool_value(bar_index)    // Option<bool>
    if show is None or show == false:
        continue

    x = bar_to_pixel(bar_index + offset)
    y = match location:
        AboveBar  -> bar_high_pixel - margin
        BelowBar  -> bar_low_pixel + margin
        Absolute  -> value_to_pixel(plotshape.float_value(bar_index))
        Top       -> pane_top
        Bottom    -> pane_bottom

    draw_shape(style, x, y, size, colors[bar_index])
    if text is not None:
        draw_text(text, x, y, text_colors[bar_index])

PlotChar

PlotShape 类似,但渲染单个字符。由 Pine plotchar() 函数产生。

Pine 示例:

pinescript
plotchar(crossover, char='*', location=location.abovebar, color=color.yellow)

字段:

字段类型描述
titleString图形标题,显示在图表图例和数据窗口中。
series(private)逐 K 线值。通过 bool_value(i)/float_value(i) 访问。与 PlotShape 行为相同:locationAbsolute 时 float 值决定 Y 位置;否则布尔值决定字符是否显示。
charchar用作视觉标记的任意单个 Unicode 字符(如 '*''✓''❄')。
locationLocation垂直位置。与 PlotShape 相同:AboveBarBelowBarTopBottomAbsolute
colorsSeries<Option<Color>>字符的逐 K 线颜色。
offseti32按给定 K 线数左右偏移字符。默认:0
textOption<String>字符旁显示的可选额外文本。支持 \n 多行。
text_colorsSeries<Option<Color>>额外文本的逐 K 线颜色。
sizeSize图表上字符的大小:AutoTinySmallNormalLargeHuge
show_lastOption<usize>若设置,仅在最末 N 根 K 线上绘制。
displayPlotDisplay控制可见性的位标志。参见 PlotDisplay
force_overlaybooltrue = 在主图窗格绘制。false = 在副图绘制。默认为脚本的 overlay 设置。

渲染与 PlotShape 相同,仅用 char 字符替代形状符号。


PlotArrow

渲染方向箭头。由 Pine plotarrow() 函数产生。箭头方向由值的符号决定。

Pine 示例:

pinescript
plotarrow(close - open, colorup=color.green, colordown=color.red)

字段:

字段类型描述
titleString图形标题,显示在图表图例和数据窗口中。
seriesSeries<Option<f64>>决定箭头方向和相对高度的逐 K 线数值。正值在 K 线上方绘制向上箭头;负值在 K 线下方绘制向下箭头None (na) = 该 K 线不绘制箭头。绝对值决定箭头相对于序列中其他箭头的高度 —— 更大绝对值产生更高箭头。
up_colorsSeries<Option<Color>>向上箭头的逐 K 线颜色(序列值为正时绘制)。可随 K 线动态变化。None = 使用默认颜色。
down_colorsSeries<Option<Color>>向下箭头的逐 K 线颜色(序列值为负时绘制)。可随 K 线动态变化。None = 使用默认颜色。
offseti32按给定 K 线数左右偏移箭头。默认:0。渲染器应在 bar_index + offset 而非 bar_index 处绘制箭头。
min_heightusize箭头最小可能高度(像素)。序列中最小绝对值映射到此高度。默认:5
max_heightusize箭头最大可能高度(像素)。序列中最大绝对值映射到此高度。默认:100。箭头高度根据该 K 线绝对值与整个序列最大绝对值的比例,在 min_heightmax_height 之间线性插值。
show_lastOption<usize>若设置,仅在最末 N 根 K 线上绘制箭头(从最近 K 线向前计数)。更早的 K 线隐藏。None = 显示全部。
displayPlotDisplay控制箭头数据可见位置的位标志:图表窗格、数据窗口、价格刻度、状态行,或全部/无。仅当设置 PANE 标志时在图表上渲染。参见 PlotDisplay
force_overlaybooltrue = 在主图窗格绘制。false = 在副图绘制。默认为脚本的 overlay 设置。

渲染逻辑:

for bar_index in 0..chart.series_len():
    value = series[bar_index]
    if value is None:
        continue

    x = bar_to_pixel(bar_index + offset)

    if value > 0:
        // Up arrow: draw above the bar
        color = up_colors[bar_index]
        height = scale(abs(value), min_height, max_height)
        draw_up_arrow(x, bar_high - margin, height, color)
    else:
        // Down arrow: draw below the bar
        color = down_colors[bar_index]
        height = scale(abs(value), min_height, max_height)
        draw_down_arrow(x, bar_low + margin, height, color)

箭头高度根据绝对值相对于序列最大绝对值的比例,在 min_heightmax_height 之间成比例缩放。


PlotCandle

渲染 OHLC K 线。由 Pine plotcandle() 函数产生。用于绘制自定义 K 线叠加(如 Heikin Ashi)。

Pine 示例:

pinescript
plotcandle(haOpen, haHigh, haLow, haClose, title="Heikin Ashi", color=haClose >= haOpen ? color.green : color.red)

字段:

字段类型描述
titleString图形标题,显示在图表图例和数据窗口中。
seriesSeries<Option<Bar>>逐 K 线 OHLC 数据(开、高、低、收)。每项为 Bar 结构体。None = 该 K 线不绘制。若四个 OHLC 值中有 NaN,则不应绘制该 K 线。四个值的最大值用作最高价,最小值用作最低价,与来自哪个字段无关。
colorsSeries<Option<Color>>K 线实体(开收之间的矩形)的逐 K 线颜色。可随 K 线动态变化 —— 通常 close >= open 时为绿色/看涨,否则红色/看跌。None = 使用默认颜色。
wick_colorsSeries<Option<Color>>K 线影线(从实体延伸至最高最低价的细垂线)的逐 K 线颜色。None = 使用默认影线颜色(通常与实体或边框色相同)。
border_colorsSeries<Option<Color>>K 线实体边框的逐 K 线颜色。作为实体矩形周围的描边绘制。None = 使用默认边框颜色。
show_lastOption<usize>若设置,仅在最末 N 根 K 线上绘制 K 线(从最近 K 线向前计数)。更早的 K 线隐藏。None = 显示全部。
displayPlotDisplay控制 K 线数据可见位置的位标志。仅当设置 PANE 标志时在图表上渲染。参见 PlotDisplay
force_overlaybooltrue = 在主图窗格绘制。false = 在副图绘制。默认为脚本的 overlay 设置。

Bar 结构体(OHLC 数据):

字段类型描述
openf64开盘价
highf64最高价
lowf64最低价
closef64收盘价

渲染:

对每根具有非 None OHLC 值的 K 线:

  1. 使用 wick_colors 绘制影线(从 lowhigh 的垂线)。
  2. 使用 colors 填充绘制实体(从 openclose 的矩形)。
  3. 使用 border_colors 绘制实体边框
  4. close >= open 为看涨;否则看跌。颜色已由脚本按 K 线设置。

PlotBar

渲染 OHLC 条形图(细线,非 K 线)。由 Pine plotbar() 函数产生。

字段:

字段类型描述
titleString图形标题,显示在图表图例和数据窗口中。
seriesSeries<Option<Bar>>逐 K 线 OHLC 数据。每项为 Bar 结构体。None = 该 K 线不绘制。若四个值中有 NaN,则不应绘制。四个值的最大值用作最高价,最小值用作最低价。
colorsSeries<Option<Color>>应用于整个 OHLC 条的逐 K 线颜色(垂线、开盘标记、收盘标记均用此颜色绘制)。可随 K 线动态变化。None = 使用默认颜色。
show_lastOption<usize>若设置,仅在最末 N 根 K 线上绘制 OHLC 条。None = 显示全部。
displayPlotDisplay控制 OHLC 条数据可见位置的位标志。仅当设置 PANE 标志时在图表上渲染。参见 PlotDisplay
force_overlaybooltrue = 在主图窗格绘制。false = 在副图绘制。默认为脚本的 overlay 设置。

渲染:

每根 K 线:绘制从 lowhigh 的垂线,在 open 处的左侧标记,在 close 处的右侧标记。均使用 colors[bar_index] 的颜色。


BackgroundColor (bgcolor)

用逐 K 线颜色填充图表背景。由 Pine bgcolor() 函数产生。

Pine 示例:

pinescript
bgcolor(close > open ? color.new(color.green, 90) : color.new(color.red, 90))

字段:

字段类型描述
colorsSeries<Option<Color>>逐 K 线背景色。每项用指定颜色填充该 K 线的整个垂直条(从窗格顶部到底部)。通常使用半透明颜色(高 alpha/透明度)以着色背景而不遮挡图表数据。None = 该 K 线无填充/透明。
offseti32将背景色序列按给定 K 线数左右偏移。默认:0。渲染器应在 bar_index + offset 而非 bar_index 处应用颜色。
titleOption<String>图表图例和数据窗口中显示的标题。None = 无标题。
show_lastOption<usize>若设置,仅对最末 N 根 K 线应用背景色。更早的 K 线不填充。None = 应用至全部。
displayPlotDisplay控制 bgcolor 数据可见位置的位标志。仅当设置 PANE 标志时在图表上渲染。参见 PlotDisplay
force_overlaybooltrue = 在主图窗格绘制。false = 在副图绘制。默认为脚本的 overlay 设置。

渲染:

每根 K 线:若 colors[bar_index]None,用指定颜色填充该 K 线的垂直条(从窗格顶到底)。通常为半透明。


Fill

填充两个锚点(两个图形或两条 hline)之间的区域。由 Pine fill() 函数产生。

Pine 示例:

pinescript
p1 = plot(sma(close, 10))
p2 = plot(sma(close, 20))
fill(p1, p2, color=color.new(color.blue, 80))

字段:

字段类型描述
fromFillAnchor填充区域的第一边界。引用 Plot 序列图(通过 SeriesGraphId)或 Hline 图形(通过 GraphId)。两个锚点必须为同一类型 —— 不能混合 Plot 与 Hline。
toFillAnchor填充区域的第二边界。与 from 锚点类型相同。每根 K 线在 fromto 的 Y 值之间绘制填充。
colorsSeries<Option<FillColor>>逐 K 线填充颜色或渐变。每项可为 Solid(Color) 表示均匀填充,或 Gradient(Gradient) 表示基于 Y 位置在两种颜色间插值的垂直渐变。None = 该 K 线无填充。可随 K 线动态变化。
titleOption<String>图表图例和数据窗口中显示的标题。None = 无标题。
show_lastOption<usize>若设置,仅填充最末 N 根 K 线。更早的 K 线不填充。None = 填充全部。
fillgapsbool当一个锚点在 K 线上有 na(缺失)值时控制行为。true = 使用缺失锚点的最后已知值,因此填充跨越空值。false = 任锚点为 na 的 K 线上填充中断。
displayPlotDisplay控制填充数据可见位置的位标志。仅当设置 PANE 标志时在图表上渲染。参见 PlotDisplay

Gradient 结构体(由 FillColor::Gradient 使用):

字段类型描述
top_valuef64color1 完全生效的 Y 轴价格。等于或高于此值的点完全以 color1 渲染。
bottom_valuef64color2 完全生效的 Y 轴价格。等于或低于此值的点完全以 color2 渲染。
color1Colortop_value 处应用的颜色。渐变在两值之间从 color1 线性插值到 color2
color2Colorbottom_value 处应用的颜色。

渲染逻辑:

// Resolve anchor Y values
for bar_index in 0..chart.series_len():
    y1 = resolve_anchor(fill.from, bar_index)   // f64 or None
    y2 = resolve_anchor(fill.to, bar_index)      // f64 or None

    if y1 is None or y2 is None:
        if fillgaps: use last known values
        else: skip this bar

    fill_color = fill.colors[bar_index]
    if fill_color is None:
        continue

    match fill_color:
        Solid(color) -> fill_rect(x, min(y1,y2), bar_width, abs(y1-y2), color)
        Gradient(g)  -> fill_gradient(x, y1, y2, g.color1, g.color2, g.top_value, g.bottom_value)

解析锚点:

  • FillAnchor::Plot(id) -> chart.series_graph(id)?.as_plot()?.series[bar_index]
  • FillAnchor::Hline(id) -> chart.graph(id)?.as_hline()?.value(对所有 K 线恒定)

非序列图(绘图对象)

使用 chart.graphs() 迭代。每项为 (GraphId, &Graph) 对。这些为时间点对象 —— 不按 K 线索引。它们具有显式坐标。

rust
for (id, graph) in chart.graphs() {
    match graph {
        Graph::Hline(h) => { /* render horizontal line */ }
        Graph::Label(l) => { /* render label */ }
        Graph::Line(l)  => { /* render line */ }
        Graph::LineFill(lf) => { /* render line fill */ }
        Graph::Box(b)   => { /* render box */ }
        Graph::Polyline(p) => { /* render polyline */ }
        Graph::Table(t) => { /* render table */ }
    }
}

或使用访问方法:graph.as_hline()graph.as_label() 等。


Hline

固定价格水平的水平线。由 Pine hline() 函数产生。

Pine 示例:

pinescript
hline(70, "Overbought", color=color.red, linestyle=hline.style_dashed)

字段:

字段类型描述
valuef64绘制水平线的固定 Y 轴值。该值处线条横跨整个窗格宽度。必须为常量(非逐 K 线)。
colorOption<Color>水平线颜色。必须为常量。None = 使用默认颜色。
titleOption<String>图表图例和数据窗口中显示的标题。None = 无标题。
line_styleHlineStyle水平线描边模式:SolidDashedDotted。参见 HlineStyle
line_widthi32水平线像素宽度。默认:1
displayPlotDisplay控制 hline 可见位置的位标志。注意:hline 使用简化的 display,仅支持 display.nonedisplay.all。参见 PlotDisplay
force_overlaybooltrue = 在主图窗格绘制。false = 在副图绘制。默认为脚本的 overlay 设置 —— hline 无 Pine 级 force_overlay 参数。

渲染: 根据 force_overlay 确定目标窗格及其值范围(与其他视觉元素逻辑相同)。在该窗格全宽处,绘制与 value 对应像素 Y 处的水平线。


Label

带可选背景形状的定位文本标注。由 Pine Script 中的 label.new() 产生。

Pine 示例:

pinescript
label.new(bar_index, high, "Buy Signal", style=label.style_label_down, color=color.green)

字段:

字段类型描述
xi64标签锚点的 X 坐标。解释取决于 xlocXLocation::Index 时为 0 基 K 线索引;XLocation::Time 时为毫秒级 Unix 时间戳。
yf64标签锚点的 Y 坐标(价格值)。ylocAboveBarBelowBar 时忽略此值,标签相对于给定 X 处 K 线的最高/最低价定位。
textString标签内显示的文本内容。支持 \n 多行。
xlocXLocationX 轴坐标系。Index = K 线索引(默认),Time = 毫秒级 Unix 时间戳。决定 x 的解释方式。
ylocYLocationY 轴定位模式。Price(默认)= 将 y 用作精确价格坐标。AboveBar = 在给定 X 处 K 线最高价上方定位。BelowBar = 在给定 X 处 K 线最低价下方定位。
colorOption<Color>标签形状的背景填充色。视觉形状由 style 决定。None = 透明背景。
styleLabelStyle控制标签背景的视觉形状:方向性气泡(上、下、左、右)、箭头、几何形状(圆、菱形、方形、三角)或纯文本(None)。参见 LabelStyle
text_colorOption<Color>标签内文本颜色。None = 使用默认文本颜色。
sizeu32文本字体大小(磅)。
text_alignHorizontalAlign文本在标签区域内的水平对齐:LeftCenterRight。仅对多行或比文本宽的标签有意义。
tooltipOption<String>用户悬停标签时在工具提示弹窗中显示的文本。None = 无工具提示。支持 \n 多行。
text_font_familyFontFamily标签文本字体族:Default(比例)或 Monospace
text_formattingTextFormatting文本样式:None(常规)、BoldItalic
force_overlaybooltrue = 在主图窗格绘制。false = 在副图绘制。默认为脚本的 overlay 设置。

Line

两点之间的线段。由 Pine Script 中的 line.new() 产生。

Pine 示例:

pinescript
line.new(bar_index[10], high[10], bar_index, high, color=color.blue, width=2)

字段:

字段类型描述
x1i64线段起点的 X 坐标。解释取决于 xloc:K 线索引或毫秒级 Unix 时间戳。
y1f64线段起点的 Y 坐标(价格)。
x2i64线段终点的 X 坐标。与 x1 相同坐标系。
y2f64线段终点的 Y 坐标(价格)。
xlocXLocationX 轴坐标系。Index = K 线索引(默认),Time = 毫秒级 Unix 时间戳。适用于 x1x2
extendExtend控制线段是否在其定义端点之外延伸。None(默认)= 仅在 (x1,y1) 与 (x2,y2) 之间绘制。Left = 在 (x1,y1) 左侧无限延伸。Right = 在 (x2,y2) 右侧无限延伸。Both = 双向延伸。延伸沿线段斜率。
colorOption<Color>线段描边颜色。None = 使用默认颜色。
styleLineStyle描边模式:SolidDashedDotted,或端点带箭头的样式(ArrowLeftArrowRightArrowBoth)。参见 LineStyle
widthi32线段描边像素宽度。默认:1
force_overlaybooltrue = 在主图窗格绘制。false = 在副图绘制。默认为脚本的 overlay 设置。

LineFill

填充两条 Line 对象之间的区域。由 Pine Script 中的 linefill.new() 产生。

字段:

字段类型描述
line1GraphId第一条 Line 绘图对象的 ID。通过 chart.graph(line1) 解析获取线段端点。两条线必须存在且有效才能渲染填充。
line2GraphId第二条 Line 绘图对象的 ID。通过 chart.graph(line2) 解析。填充绘制在两条线之间的区域。
colorOption<Color>两条线之间区域的填充颜色。通常为半透明。None = 透明(不渲染填充)。

渲染: 通过各自的 GraphId 解析两条线,然后填充它们形成的多边形/区域。填充区域由两条线段(或若任一线设置了 extend 则为其延伸)界定。若任一线被删除或缺失,则不渲染填充。


Box

带可选文本的轴对齐矩形。由 Pine Script 中的 box.new() 产生。

Pine 示例:

pinescript
box.new(bar_index - 10, high, bar_index, low, bgcolor=color.new(color.blue, 80))

字段:

字段类型描述
lefti64左边缘的 X 坐标。解释取决于 xloc:K 线索引或毫秒级 Unix 时间戳。
topf64上边缘的 Y 坐标(较高价格值)。
righti64右边缘的 X 坐标。与 left 相同坐标系。
bottomf64下边缘的 Y 坐标(较低价格值)。
border_colorOption<Color>矩形边框描边颜色。None = 不绘制边框。
border_widthi32矩形边框像素宽度。默认:1。设为 0 表示无边框。
border_styleLineStyle矩形边框描边模式:SolidDashedDotted。箭头样式通常不用于矩形。参见 LineStyle
extendExtend控制矩形是否在左右边缘外延伸。None(默认)= 仅在 leftright 之间绘制。Left = 左边缘延伸至图表起始。Right = 右边缘延伸至图表末端。Both = 双向延伸。上下 Y 值保持不变。
xlocXLocationleftright 的 X 轴坐标系。Index = K 线索引(默认),Time = 毫秒级 Unix 时间戳。
background_colorOption<Color>矩形内部填充色。通常为半透明。None = 透明(无填充)。
textString矩形内显示的文本,根据 text_haligntext_valign 定位。空字符串 = 无文本。支持 \n 多行。
text_sizeu32文本字体大小(磅)。
text_colorOption<Color>矩形内文本颜色。None = 使用默认文本颜色。
text_halignHorizontalAlign文本在矩形内的水平对齐:LeftCenter(默认)或 Right
text_valignVerticalAlign文本在矩形内的垂直对齐:TopMiddle(默认)或 Bottom
text_wrapTextWrap文本换行行为:Auto = 换行以适应矩形宽度,None = 不换行(文本可能溢出)。
text_font_familyFontFamily文本字体族:Default(比例)或 Monospace
text_formattingTextFormatting文本样式:None(常规)、BoldItalic
force_overlaybooltrue = 在主图窗格绘制。false = 在副图绘制。默认为脚本的 overlay 设置。

Polyline

连接的线段序列(可选闭合和/或曲线)。由 Pine Script 中的 polyline.new() 产生。

字段:

字段类型描述
pointsVec<(i64, f64)>定义折线路径的 (x, y) 顶点有序列表。X 为 K 线索引,Y 为价格。点按顺序连接。空列表表示不绘制任何内容。
curvedbool控制点之间的插值。true = 作为通过点的平滑曲线渲染(使用三次样条或贝塞尔插值)。false = 用直线段连接点。
closedbool控制路径是否形成闭合形状。true = 将最后点连接回第一点形成多边形。false = 路径开放(首尾点不连接)。
line_colorOption<Color>折线路径描边颜色。None = 不绘制描边。
fill_colorOption<Color>内部填充颜色。仅当 closedtrue 时有意义 —— 填充闭合多边形内部。closedfalse 时忽略。None = 无填充。通常为半透明。
line_styleLineStyle折线描边模式:SolidDashedDotted。参见 LineStyle
line_widthi32折线描边像素宽度。默认:1
force_overlaybooltrue = 在主图窗格绘制。false = 在副图绘制。默认为脚本的 overlay 设置。

渲染:

  1. 将所有 (x, y) 点转换为像素坐标。
  2. curved:使用三次样条或贝塞尔插值。
  3. closed:将最后点连接至第一点。
  4. line_colorline_styleline_width 描边路径。
  5. 若设置 fill_colorclosed:填充内部。

Table

锚定在图表固定位置的单元格网格。由 Pine Script 中的 table.new() 产生。

Pine 示例:

pinescript
var t = table.new(position.top_right, 2, 3)
table.cell(t, 0, 0, "Header", text_color=color.white, bgcolor=color.blue)

字段:

字段类型描述
positionPosition表格在图表上的锚定位置。表格作为浮动叠加层在 9 个位置之一渲染(如 TopRightBottomCenterMiddleLeft)。表格不随图表滚动 —— 保持在指定位置。参见 Position
background_colorOption<Color>整个表格的背景色。应用于所有单元格后方。None = 透明。
frame_colorOption<Color>外框(整个表格周围边框)颜色。None = 无外框。
frame_widthi32外框像素宽度。默认:0(无框)。
border_colorOption<Color>单元格之间网格线的默认边框颜色。None = 无单元格边框。
border_widthi32单元格边框默认像素宽度。默认:0(无边框)。
force_overlaybooltrue = 在主图窗格绘制。false = 在副图绘制。默认为脚本的 overlay 设置。

方法:

方法返回类型描述
num_columns()usize列数
num_rows()usize行数
cell(row, col)&TableCell访问单元格(越界时 panic)
cell_opt(row, col)Option<&TableCell>访问单元格(越界时返回 None)

TableCell 字段:

字段类型描述
textString单元格内显示的文本内容。支持 \n 多行。空字符串 = 无文本。
widthf32单元格宽度占图表可用宽度的百分比。0.0 = 根据内容自动调整。值为百分比(如 25.0 = 图表宽度的 25%)。
heightf32单元格高度占图表可用高度的百分比。0.0 = 根据内容自动调整。
text_colorOption<Color>单元格内文本颜色。None = 使用默认文本颜色。
text_halignHorizontalAlign文本在单元格内的水平对齐:LeftCenter(默认)或 Right
text_valignVerticalAlign文本在单元格内的垂直对齐:TopMiddle(默认)或 Bottom
text_sizeu32文本字体大小(磅)。
background_colorOption<Color>该单元格的背景色。覆盖表格级 background_colorNone = 继承自表格。
tooltipOption<String>用户悬停单元格时在工具提示弹窗中显示的文本。None = 无工具提示。
text_font_familyFontFamily单元格文本字体族:Default(比例)或 Monospace
text_formattingTextFormatting文本样式:None(常规)、BoldItalic
colspanusize该单元格跨列的列数。默认:1。大于 1 时将该单元格与右侧相邻单元格合并。
rowspanusize该单元格跨行的行数。默认:1。大于 1 时将该单元格与下方相邻单元格合并。

K 线颜色

通过 chart.bar_colors() 访问。控制主 K 线/条形图的逐 K 线颜色覆盖。由 Pine barcolor() 函数产生。

Pine 示例:

pinescript
barcolor(close > open ? color.green : color.red)

字段:

字段类型描述
colorsSeries<Option<Color>>主 K 线/条形图的逐 K 线颜色覆盖。设置后,整根 K 线或条(实体、影线、边框)以此颜色绘制,覆盖默认的涨跌配色。None = 该 K 线无覆盖(使用图表默认配色)。
offseti32将颜色序列按给定 K 线数左右偏移。默认:0。渲染器应在 bar_index + offset 而非 bar_index 处应用颜色覆盖。
show_lastOption<usize>若设置,仅对最末 N 根 K 线应用颜色覆盖。更早的 K 线使用默认配色。None = 应用至全部。
titleOption<String>图表图例和数据窗口中显示的标题。None = 无标题。
displayPlotDisplay控制 barcolor 数据可见位置的位标志。仅当设置 PANE 标志时应用颜色覆盖。参见 PlotDisplay

渲染: 绘制主 OHLC K 线/条时,检查 bar_colors.colors[bar_index]。若为 Some(color),使用该颜色替代默认涨跌配色。


成交订单(策略)

对于策略脚本,chart.filled_orders_on_bar(bar_index) 返回给定 K 线上的成交订单列表。每项为 FilledOrder(信号/订单 ID、价格、带符号数量)。

FilledOrder 字段:

字段类型描述
order_idStringstrategy.entry()strategy.exit()strategy.order() 中的信号名(入场/出场 ID)。显示在图表上成交标记旁(TradingView 风格)。
pricef64订单成交价格。用作在图表上渲染成交标记时的 Y 坐标。
quantityf64该次执行的成交量(合约/股数)。正 = 买入,负 = 卖出。用符号决定标记方向(如买入用上箭头,卖出用下箭头)。

渲染器应绘制每笔成交,并显示其信号名(order_id)和带符号数量:买入在 K 线上方,卖出在下方;同一 K 线多笔成交叠加。若需每 K 线总量,对列表中的 quantity 求和。


枚举参考

ScriptInfo Enums

Format — 副图 Y 轴标签及十字准线/工具提示中的数值格式:

变体描述示例输出
Inherit使用图表默认格式(默认)150.25
Price格式化为价格150.25
Volume使用成交量缩写1.5M200K
Percent格式化为百分比3.14%
MinTick使用品种最小 tick 大小格式化(不可用时视为 Price

format 应用于所有副图轴标签和工具提示数值。主图价格轴(K 线图窗格)始终使用价格格式,不受此字段影响。

ScaleType — 价格刻度位置:

变体描述
None自动/无专用刻度(默认)
Left显示在左侧刻度
Right显示在右侧刻度

Plot Enums

PlotStylePlot 的渲染样式:

变体描述
Line用直线段连接点(默认)
LineBr类似 Line,但在 na 处断开
StepLine阶梯线(先水平后垂直)
StepLineBr类似 StepLine,但在 na 处断开
Area线条与 histbase 之间的填充区域
AreaBr类似 Area,但在 na 处断开
Histogramhistbase 到值的细垂直柱
Columnshistbase 到值的宽垂直柱
Circles每点处圆形标记
Cross每点处十字 (+) 标记
Diamond每点处菱形标记

PlotLineStyle — 基于线条图形的描边模式:

变体描述
Solid实线描边(默认)
Dashed虚线描边
Dotted点线描边

HlineStyle — 水平线描边模式:

变体描述
Solid实线描边
Dashed虚线描边
Dotted点线描边

Shape / Marker Enums

ShapePlotShape 的符号类型:

变体视觉
XCrossX 形(默认)
Cross+ 形
Circle圆形
Square方形
Diamond菱形
TriangleUp向上三角形
TriangleDown向下三角形
ArrowUp向上箭头
ArrowDown向下箭头
Flag旗帜
LabelUp指向上方的标签
LabelDown指向下方的标签

LocationPlotShape / PlotChar 的垂直位置:

变体描述
AboveBarK 线最高价上方的固定偏移(默认)
BelowBarK 线最低价下方的固定偏移
Absolute将序列值用作 Y 坐标
Top在窗格顶部
Bottom在窗格底部

Size — 形状和字符的大小:

变体描述
Auto自动调整大小(默认)
Tiny超小
Small
Normal标准大小
Large
Huge超大

Drawing Enums

LineStyleLineBox 边框、Polyline 的描边样式:

变体描述
Solid实线描边(默认)
Dashed虚线描边
Dotted点线描边
ArrowLeft带左指向箭头的线
ArrowRight带右指向箭头的线
ArrowBoth两端带箭头的线

Extend — 线/矩形延伸模式:

变体描述
None不延伸(默认)
Left向左无限延伸
Right向右无限延伸
Both双向无限延伸

LabelStyleLabel 的形状样式:

变体描述
None仅文本,无背景形状
LabelDown向下的标签气泡(默认)
LabelUp向上的标签气泡
LabelLeft向左的标签气泡
LabelRight向右的标签气泡
LabelCenter居中的标签气泡
LabelLowerLeft左下标签气泡
LabelLowerRight右下标签气泡
LabelUpperLeft左上标签气泡
LabelUpperRight右上标签气泡
ArrowDown向下箭头
ArrowUp向上箭头
Circle圆形
Cross十字 (+) 形
Diamond菱形
Square方形
Flag旗帜形
TriangleDown向下三角形
TriangleUp向上三角形
XCrossX 形
TextOutline带轮廓的文本,无填充

Coordinate Enums

XLocation — X 轴坐标系:

变体描述
IndexX 值为 K 线索引(0 基整数)
TimeX 值为毫秒级 Unix 时间戳

YLocation — Y 轴定位(仅标签):

变体描述
PriceY 为 Y 轴上的价格值(默认)
AboveBar在给定 X 处 K 线最高价上方
BelowBar在给定 X 处 K 线最低价下方

Position Enum

表格在图表上的锚定位置:

变体描述
TopLeft左上角
TopCenter顶部居中
TopRight右上角
MiddleLeft左侧居中
MiddleCenter图表中心
MiddleRight右侧居中
BottomLeft左下角
BottomCenter底部居中
BottomRight右下角

Text Enums

枚举变体描述
HorizontalAlignLeftCenterRight文本水平对齐
VerticalAlignTopMiddleBottom文本垂直对齐
FontFamilyDefaultMonospace字体选择
TextFormattingNoneBoldItalic文本样式
TextWrapAutoNone文本换行行为

Fill Enums

FillAnchorFill 的边界引用:

变体描述
Plot(SeriesGraphId)引用 Plot 序列图
Hline(GraphId)引用 Hline 图形

FillColor — 填充颜色类型:

变体描述
Solid(Color)均匀填充颜色
Gradient(Gradient)两值间的垂直渐变

渲染顺序

推荐的绘制顺序(从后到前):

  1. 图表背景 — 用主题背景色清空。
  2. 网格线 — 价格和时间轴网格线。
  3. 背景色 — 迭代 series_graphs,绘制 BackgroundColor 条。
  4. 填充 — 迭代 series_graphs,绘制锚点之间的 Fill 区域。
  5. 主 K 线/条 — 输入 OHLC 数据(应用 bar_colors 覆盖)。若 behind_chartfalse,在其上绘制脚本视觉元素;否则在其后绘制。
  6. Hline — 迭代 graphs,绘制水平线。
  7. Plot 序列 — 迭代 series_graphs,绘制 Plot(线、面积、直方图、标记)。
  8. 扩展序列 — 迭代 series_graphs,绘制 PlotCandlePlotBarPlotArrowPlotCharPlotShape
  9. 绘图对象 — 迭代 graphs,绘制 LineBoxPolylineLineFill
  10. Label — 迭代 graphs,绘制 Label(文本 + 形状)。
  11. Table — 迭代 graphs,在其锚定位置绘制 Table
  12. 坐标轴 — 价格刻度、时间刻度、成交量刻度。
  13. 订单成交 — 对于策略,从 filled_orders 绘制成交标记。
  14. 十字线/交互叠加层 — 鼠标跟踪、工具提示。

explicit_plot_zordertrue,严格按迭代顺序(即脚本中的声明顺序)绘制序列图。先声明 = 底层。

若任何视觉元素的 force_overlaytrue,无论脚本是否为叠加,均在主图价格窗格渲染。

当设置 show_last 时,仅渲染最后 N 项。当设置 offset 时,按该 K 线数偏移视觉元素。

下一步

基于 MIT 许可证发布。