В Pine Script существует 5 типов данных: целое число (int), дробное число (float), строка (str), логический тип данных (bool) и цвет. Разные функции работают только с определенным типом данных, так что иногда нам приходится преобразовывать данные одного типа в данные другого типа — такой процесс называется преобразование типов (или приведение типов).
Поговорим о том, как преобразовать числа (int) в строковый тип данных (или в текст) (str).
Преобразуем числовые данные в текстовые с помощью функции str.tostring
Большинство операций, которые мы выполняем в скриптах TradingView связаны с числами. Но иногда нам нужно использовать функцию, которая принимает строку текста и не может работать с числами.
Для этого мы используем функцию str.tostring, она преобразует числовое значение в текстовую строку в TradingView.
В 5-й версии PineScript существует 4 типа функций str.tostring:
- str.tostring (value) → series string (возвращает серию строковых данных)
- str.tostring (value, format) → series string (возвращает серию строковых данных в указанном формате)
- str.tostring (value) → simple string (возвращает строку, текст)
- str.tostring (value, format) → simple string (возвращает строку, текст в указанном формате)
У функции str.tostring есть 2 аргумента:
- value — обязательный аргумент (серия данных или 1 значение), которое функция должна преобразовать в текст. Когда value принимает значение na, функция возвращает строку «NaN».
- format — необязательный аргумент, указывающий, как число должно быть преобразовано в текст. Этот аргумент имеет значение по умолчанию #.##########, которое форматирует число в строку с 10 ненулевыми значениями. (Каждый знак # представляет одно число.) Если мы используем #.## в качестве строки формата, то tostring преобразует значение 1,42345 в строку (текст) «1,42». Чтобы отображать конечные нули, используйте ‘0’ вместо символа ‘#’. Например, ‘#.000’.
Приведем пример, как преобразовать числа в текст с помощью str.tostring
Нужно вывести значение bar_index на каждом баре
bar_index — индекс текущего бара, численный тип (int) данных. Чтобы вывести значение bar_index на каждом баре будем использовать функцию label.new. Нам нужно преобразовать числовое значение bar_index в строковое при помощи str.tostring.
1 2 3 |
indicator("tostring", overlay=true) label.new(x=bar_index, y=high, text=str.tostring(bar_index)) |
Результат на графике:
В 5-й версии PineScript у некоторых функций текстовые аргументы принимают серию данных только const str — постоянный текст, а некоторые series str (серию данных), что позволяет нам передавать серию изменяющихся данных.
Так у функции label.new аргумент text принимает тип series string, поэтому мы можем использовать не только статический текст, но и добавить к нему изменяющийся текст, например:
1 2 3 |
indicator("tostring", overlay=true) label.new(x=bar_index, y=high, text="покупай" + str.tostring(open), color=color.lime) |
«покупай» — статический текст
«str.tostring(open)» — функция преобразует динамическое значение — цену открытия open в строковый тип
open — меняется на каждом баре, поэтому называется динамическим (изменяющимся)
У функции strategy.entry первый аргумент id тоже может принимать серию изменяющихся данных (series string).
Рассмотрим следующую стратегию:
- На каждой свечке проверяем объем продаж, если он больше 30 000 и свечка зеленая, то мы входим в лонг.
- При этом на графике выводим id позиции «long at + цена закрытия (str.tostring(close))».
- Если объем продаж меньше 10 000, то все продаем.
1 2 3 4 5 6 7 |
strategy("VOLUME", overlay=true, process_orders_on_close=true) if volume > 30000 and close > open // если объем продаж больше 30 000 и свечка зеленая, то входим в лонг strategy.entry("long at " + str.tostring(close), strategy.long) if volume < 10000 and close < open // если объем продаж меньше 10 000 и свечка красная, то закрываем все позиции strategy.close_all() |
Результат на графике:
В функциях plotshape и plotchar аргумент text может принимать только значения const string, так что обе строчки кода будут выдавать одну и ту же ошибку:
1 |
plotshape (series=close>ta.ema(close, 20), text="Close" + str.tostring(close)) |
1 |
plotchar (series=close, text="close" + str.tostring(close)) |
Код не может быть обработан, потому что str.tostring(close) — возвращает series string, серию изменяющихся данных, а text может принимать только const string — постоянный текст.
Подведем итог
Функция str.tostring преобразует числовые данные в строковые. Она может работать как с одиночными значениями, так и с сериями данных.
У некоторых функций текстовые аргументы могут принимать только постоянные значения, а у некоторых еще и изменяющиеся. Во втором случае мы можем передавать постоянный текст, плюс серию преобразованных строковых данных из функции str.tostring.