В Pine можно создавать произвольные фигуры

25 окт, 2023

Мы добавили новый функционал в Pine Script®: теперь вы можете рисовать произвольные фигуры с помощью объекта polyline. Создавайте открытые и закрытые фигуры с помощью полилиний, настраивайте параметры линий и заливки и делайте свой анализ уникальным.

Объекты polyline создаются с помощью массива точек с координатами, новых объектов chart.point, где X-координаты могут быть выражены как время или индекс бара, а Y-координаты — с помощью цены. Как только массив точек собран, он может быть использован для создания объекта polyline с помощью функции polyline.new().

Давайте посмотрим на скрипт ниже. Он использует аргументы, чтобы определить пять точек на графике и создать из них произвольную фигуру:

//@version=5
indicator("Polylines example", overlay = true)

//@variable If `true`, uses curved lines to connect the points.
bool curvedInput = input.bool(false, "Curved polyline")
//@variable If `true`, connects the polylines first and last points.
bool closedInput = input.bool(true,  "Closed polyline")
//@variable The color of the space filled by the polyline.
color fillcolor = input.color(color.new(color.blue, 90), "Fill Color")

// Time and price inputs for the polyline's points.
p1x = input.time(0,  "p1", confirm = true, inline = "p1")
p1y = input.price(0, "  ", confirm = true, inline = "p1")
p2x = input.time(0,  "p2", confirm = true, inline = "p2")
p2y = input.price(0, "  ", confirm = true, inline = "p2")
p3x = input.time(0,  "p3", confirm = true, inline = "p3")
p3y = input.price(0, "  ", confirm = true, inline = "p3")
p4x = input.time(0,  "p4", confirm = true, inline = "p4")
p4y = input.price(0, "  ", confirm = true, inline = "p4")
p5x = input.time(0,  "p5", confirm = true, inline = "p5")
p5y = input.price(0, "  ", confirm = true, inline = "p5")

// Draw only once on the last historical bar, so the script runs faster.
if barstate.islastconfirmedhistory
    //@variable An array of `chart.point` objects for the polyline.
    var points = array.new<chart.point>()
    // Add the user-defined points to the `points` array.
    points.push(chart.point.from_time(p1x, p1y))
    points.push(chart.point.from_time(p2x, p2y))
    points.push(chart.point.from_time(p3x, p3y))
    points.push(chart.point.from_time(p4x, p4y))
    points.push(chart.point.from_time(p5x, p5y))
    // Create a new polyline from the `points` array.
    polyline.new(points, curved = curvedInput, closed = closedInput, fill_color = fillcolor, xloc = xloc.bar_time)
    // Display the name of each point on the chart.
    for [pointNo, point] in points
        label.new(point, text = "p" + str.tostring(pointNo + 1), xloc = xloc.bar_time, color = na, textcolor = chart.fg_color)

Создавать полилинии и точки на графике позволяют два набора новых функций, chart.point и polyline.

Функции для создания точек:

  • chart.point.new(): создаёт объект chart.point на основе переданных времени, индекса бара и цены.
  • chart.point.from_index(): создаёт объект chart.point на основе переданных индекса бара и цены.
  • chart.point.from_time(): создаёт объект chart.point на основе переданных времени бара и цены.
  • chart.point.now(): создаёт объект chart.point на основе времени текущего бара и переданной цены.
  • chart.point.copy(): создаёт копию переданного объекта chart.point.

Функции для создания полилиний:

  • polyline.new(): создаёт новый объект polyline и отображает фигуру на графике, последовательно соединяя все точки в массиве points линиями.
  • polyline.delete(): удаляет указанный объект polyline и соответствующую фигуру с графика.
  • polyline.all: возвращает массив со всеми объектами polyline, созданными скриптом на графике.

Количество объектов на графике настраивается параметром max_polylines_count функций indicator() и strategy(). Значение по умолчанию равно 50, а максимальное количество — 100.

В Руководстве пользователя Pine есть новый раздел, который поможет вам лучше понять, как работают полилинии.

В публикациях из скриптов сообщества ниже можно увидеть примеры работы с полилиниями.

Индикатор Volume Profile with a few polylines от Fikira

Индикатор Zig-Zag Volume Profile от  KioseffTrading

Индикатор RSI Radar Multi Time Frame от LonesomeTheBlue

Индикатор MA Sabres [LuxAlgo] от LuxAlgo

Чтобы быть в курсе новых возможностей Pine Script®, следите за разделом Информация о релизах. Учётная запись PineCoders также транслирует обновления в канале Squawk Box в Telegram, в Twitter и в публичном чате Pine Script® Q&A на TradingView.

Мы надеемся, это обновление будет вам полезно. Обязательно делитесь с нами своими отзывами и предложениями — мы делаем TradingView для вас, и нам важно знать, что вы думаете.

Look first Then leap

Мы создали TradingView, чтобы вы могли пользоваться самыми крутыми функциями.
Открыть график