PINE LIBRARY
已更新 PineDraw

Extracted from TheStrat Suite, where these components render six timeframes of levels on a single chart without running out of drawing objects. Nothing here knows anything about TheStrat, or about any strategy. It is the layer underneath: put an object at an exact price and time, keep it updated, and keep the chart readable when several of them land on the same price.
The script ends with a small demo that marks the prior bar's high and low, so you can add the library to a chart and see the primitives run before importing anything.
Library "PineDraw"
Object primitives for indicators that draw price levels: update lines,
boxes and labels in place instead of deleting and recreating them every tick, pool
labels so a busy chart stays under the object limit, and merge labels that land on the
same price so they read as one row instead of overlapping.
updateLine(ref, x1, y1, x2, y2, col, w, style)
Update a line in place, or create it if the reference is na.
Parameters:
ref (line): Existing line, or na on the first call.
x1 (int): Left anchor, in bar time (ms).
y1 (float): Left price.
x2 (int): Right anchor, in bar time (ms).
y2 (float): Right price.
col (color): Line color.
w (int): Line width.
style (string): One of line.style_solid, line.style_dashed, line.style_dotted.
Returns: The line reference. Assign it back: `myLine := updateLine(myLine, ...)`.
updateBox(ref, x1, y1, x2, y2, bg, border)
Update a box in place, or create it if the reference is na.
Parameters:
ref (box): Existing box, or na on the first call.
x1 (int): Left anchor in bar time (ms).
y1 (float): Top price.
x2 (int): Right anchor in bar time (ms).
y2 (float): Bottom price.
bg (color): Fill color.
border (color): Border color.
Returns: The box reference.
clearLine(ref)
Delete a line if it exists. Assign the result back to clear your reference.
Parameters:
ref (line): Line to remove, or na.
Returns: na, typed as a line.
clearBox(ref)
Delete a box if it exists. Assign the result back to clear your reference.
Parameters:
ref (box): Box to remove, or na.
Returns: na, typed as a box.
newPool()
Create an empty pool. Assign to a `var` so it survives across bars.
Returns: A new LabelPool.
method reset(this)
Start a render pass. Hides any label left over from the previous pass.
Namespace types: LabelPool
Parameters:
this (LabelPool): The pool.
Returns: The pool, for chaining.
method acquire(this, x, y, txt, useBarIndex, bg, txtCol, sz)
Take the next label from the pool, creating one only if the pool is exhausted.
Namespace types: LabelPool
Parameters:
this (LabelPool): The pool.
x (int): Anchor, bar time in ms when useBarIndex is false, otherwise a bar index.
y (float): Price.
txt (string): Label text.
useBarIndex (bool): Anchor to bar_index instead of bar time. Use for labels that should
float at a fixed offset from the current bar rather than sit at a point in history.
bg (color): Background color.
txtCol (color): Text color.
sz (string): One of size.tiny, size.small, size.normal, size.large.
Returns: The label, already positioned and styled.
newSet()
Create an empty label set for one render pass.
Returns: A new LabelSet.
method add(this, price, txt, joiner, tolerance)
Add a label at a price, merging into an existing row if one is close enough.
Namespace types: LabelSet
Parameters:
this (LabelSet): The set.
price (float): The price to label.
txt (string): The text to add.
joiner (string): Placed between merged entries, for example " + ".
tolerance (float): How far apart two prices can be and still share a row, in price units.
Pass 0 to merge only exact ticks. syminfo.mintick is a sane floor; a fraction of
ta.atr() adapts across instruments.
Returns: The set, for chaining.
method flush(this, pool, x, useBarIndex, bg, txtCol, sz)
Draw a consolidated set through a pool, in one call.
Namespace types: LabelSet
Parameters:
this (LabelSet): The set to draw.
pool (LabelPool): The label pool to draw through.
x (int): Anchor for every label in the set.
useBarIndex (bool): Anchor to bar_index instead of bar time.
bg (color): Background color.
txtCol (color): Text color.
sz (string): Text size.
Returns: The number of labels drawn.
lineStyle(style)
Map a style name to a Pine line style constant.
Parameters:
style (string): "Solid", "Dashed" or "Dotted". Anything else returns dotted.
Returns: A line.style_* constant.
textSize(name)
Map a size name to a Pine size constant.
Parameters:
name (string): "Tiny", "Small", "Normal" or "Large". Anything else returns small.
Returns: A size.* constant.
LabelPool
A reusable set of labels. Hold one in a `var` at the top of your script.
Fields:
items (array<label>): Every label ever allocated by this pool.
used (series int): How many have been handed out in the current render pass.
LabelSet
A set of labels-to-be, grouped by price.
Fields:
prices (array<float>): One entry per distinct price.
texts (array<string>): The merged text for each price.
The script ends with a small demo that marks the prior bar's high and low, so you can add the library to a chart and see the primitives run before importing anything.
Library "PineDraw"
Object primitives for indicators that draw price levels: update lines,
boxes and labels in place instead of deleting and recreating them every tick, pool
labels so a busy chart stays under the object limit, and merge labels that land on the
same price so they read as one row instead of overlapping.
updateLine(ref, x1, y1, x2, y2, col, w, style)
Update a line in place, or create it if the reference is na.
Parameters:
ref (line): Existing line, or na on the first call.
x1 (int): Left anchor, in bar time (ms).
y1 (float): Left price.
x2 (int): Right anchor, in bar time (ms).
y2 (float): Right price.
col (color): Line color.
w (int): Line width.
style (string): One of line.style_solid, line.style_dashed, line.style_dotted.
Returns: The line reference. Assign it back: `myLine := updateLine(myLine, ...)`.
updateBox(ref, x1, y1, x2, y2, bg, border)
Update a box in place, or create it if the reference is na.
Parameters:
ref (box): Existing box, or na on the first call.
x1 (int): Left anchor in bar time (ms).
y1 (float): Top price.
x2 (int): Right anchor in bar time (ms).
y2 (float): Bottom price.
bg (color): Fill color.
border (color): Border color.
Returns: The box reference.
clearLine(ref)
Delete a line if it exists. Assign the result back to clear your reference.
Parameters:
ref (line): Line to remove, or na.
Returns: na, typed as a line.
clearBox(ref)
Delete a box if it exists. Assign the result back to clear your reference.
Parameters:
ref (box): Box to remove, or na.
Returns: na, typed as a box.
newPool()
Create an empty pool. Assign to a `var` so it survives across bars.
Returns: A new LabelPool.
method reset(this)
Start a render pass. Hides any label left over from the previous pass.
Namespace types: LabelPool
Parameters:
this (LabelPool): The pool.
Returns: The pool, for chaining.
method acquire(this, x, y, txt, useBarIndex, bg, txtCol, sz)
Take the next label from the pool, creating one only if the pool is exhausted.
Namespace types: LabelPool
Parameters:
this (LabelPool): The pool.
x (int): Anchor, bar time in ms when useBarIndex is false, otherwise a bar index.
y (float): Price.
txt (string): Label text.
useBarIndex (bool): Anchor to bar_index instead of bar time. Use for labels that should
float at a fixed offset from the current bar rather than sit at a point in history.
bg (color): Background color.
txtCol (color): Text color.
sz (string): One of size.tiny, size.small, size.normal, size.large.
Returns: The label, already positioned and styled.
newSet()
Create an empty label set for one render pass.
Returns: A new LabelSet.
method add(this, price, txt, joiner, tolerance)
Add a label at a price, merging into an existing row if one is close enough.
Namespace types: LabelSet
Parameters:
this (LabelSet): The set.
price (float): The price to label.
txt (string): The text to add.
joiner (string): Placed between merged entries, for example " + ".
tolerance (float): How far apart two prices can be and still share a row, in price units.
Pass 0 to merge only exact ticks. syminfo.mintick is a sane floor; a fraction of
ta.atr() adapts across instruments.
Returns: The set, for chaining.
method flush(this, pool, x, useBarIndex, bg, txtCol, sz)
Draw a consolidated set through a pool, in one call.
Namespace types: LabelSet
Parameters:
this (LabelSet): The set to draw.
pool (LabelPool): The label pool to draw through.
x (int): Anchor for every label in the set.
useBarIndex (bool): Anchor to bar_index instead of bar time.
bg (color): Background color.
txtCol (color): Text color.
sz (string): Text size.
Returns: The number of labels drawn.
lineStyle(style)
Map a style name to a Pine line style constant.
Parameters:
style (string): "Solid", "Dashed" or "Dotted". Anything else returns dotted.
Returns: A line.style_* constant.
textSize(name)
Map a size name to a Pine size constant.
Parameters:
name (string): "Tiny", "Small", "Normal" or "Large". Anything else returns small.
Returns: A size.* constant.
LabelPool
A reusable set of labels. Hold one in a `var` at the top of your script.
Fields:
items (array<label>): Every label ever allocated by this pool.
used (series int): How many have been handed out in the current render pass.
LabelSet
A set of labels-to-be, grouped by price.
Fields:
prices (array<float>): One entry per distinct price.
texts (array<string>): The merged text for each price.
發行說明
ColoredLabelSet: price-merged labels where each row keeps its first entry's color and, optionally, its own time anchor, so labels can sit at their own line's end rather than in one column. Later entries at the same price append their text, and an entry whose text is already present on the row is skipped instead of repeated. Two draw styles: flushChips uses each row's color as the label background - the classic level-tag look - and flushText draws transparent colored text.LabelPool.trim(): ends a render pass by deleting every pooled label beyond the ones acquired, so switching a feature off removes its labels instead of leaving blanks against the object cap. reset, acquire, trim is the recommended pass.
tablePos(): maps a position name from an input dropdown to the table position constant.
Pine腳本庫
秉持TradingView一貫精神,作者已將此Pine代碼以開源函式庫形式發佈,方便我們社群中的其他Pine程式設計師重複使用。向作者致敬!您可以在私人專案或其他開源發表中使用此函式庫,但在公開發表中重用此代碼須遵守社群規範。
Tools for traders and investors smart enough to keep it simple.
TheStrat Suite is now free & open source 😘👌 TheStratSuite.com
Build on it: github.com/natebking/345-strategies
Everything else: 345strategies.com
TheStrat Suite is now free & open source 😘👌 TheStratSuite.com
Build on it: github.com/natebking/345-strategies
Everything else: 345strategies.com
免責聲明
這些資訊和出版物並非旨在提供,也不構成TradingView提供或認可的任何形式的財務、投資、交易或其他類型的建議或推薦。請閱讀使用條款以了解更多資訊。
Pine腳本庫
秉持TradingView一貫精神,作者已將此Pine代碼以開源函式庫形式發佈,方便我們社群中的其他Pine程式設計師重複使用。向作者致敬!您可以在私人專案或其他開源發表中使用此函式庫,但在公開發表中重用此代碼須遵守社群規範。
Tools for traders and investors smart enough to keep it simple.
TheStrat Suite is now free & open source 😘👌 TheStratSuite.com
Build on it: github.com/natebking/345-strategies
Everything else: 345strategies.com
TheStrat Suite is now free & open source 😘👌 TheStratSuite.com
Build on it: github.com/natebking/345-strategies
Everything else: 345strategies.com
免責聲明
這些資訊和出版物並非旨在提供,也不構成TradingView提供或認可的任何形式的財務、投資、交易或其他類型的建議或推薦。請閱讀使用條款以了解更多資訊。