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 應用於所有副圖軸標籤和工具提示數值。主圖(蠟燭圖)價格軸無論此欄位為何值,始終使用價格格式。

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 許可證發佈。