Các tính năng mới trong Pine Script: str.format () và array.from ()

May 21, 2021

Bản cập nhật này của ngôn ngữ Pine Script bổ sung các chức năng để làm việc với chuỗi và mảng.

Hàm str.format() cho phép bạn chuyển đổi các đối số được truyền cho nó thành một chuỗi có định dạng được chỉ định:

str.format(formatString, arg0, arg1, ...) -> string

formatString bao gồm  N chỉ số dưới trong ngoặc đơn “{}” để thay thế các đối số được định dạng tương ứng (arg0, arg1..argN, có thể là chuỗi hoặc số), và một số mô hình được thảo luận bên dưới.

Vì vậy, để phân tích cú pháp chuỗi, bạn không cần sử dụng cấu trúc bằng cách sử dụng str.replace_all() :

txt := "Time to {0} some {1}!"

txt := str.replace_all(txt, "{0}", close > open ? "buy" : "sell")

txt := str.replace_all(txt, "{1}", syminfo.ticker)

nhưng bạn có thể làm điều đó theo cách mới, tiện lợi hơn và ngắn hơn:

txt = str.format("Time to {0} some {1}!", close > open ? "buy" : "sell", syminfo.ticker)

Các chỉ số con {0}{1} đặt trong dấu ngoặc vuông được thay thế bằng các đối số thứ tự tương ứng: {0} – kết quả của việc thực thi toán tử bậc ba, chuỗi “buy” hoặc “sell”, được trả về tùy thuộc vào sự bất bình đẳng của giá đóng và mở, {1} – syminfo.ticker, biểu tượng hiện tại trên biểu đồ:

Bằng cách sử dụng mẫu số, số được chuyển đổi thành chuỗi có thể được chuyển đổi thành một biểu diễn khác, ví dụ: để giới hạn số lượng vị trí thập phân

str.format("{0,number,#.#}", 1.34) // returns: 1.3

Bỏ phần phân số của số:

str.format("{0,number,integer}", 1.34) // returns: 1

Nhận thông tin tài chính:

str.format("The cash turnover amounted to {0,number,currency}", 1340000) 

// “The cash turnover amounted to $1,340,000.00”.

Nhận phần trăm:

str.format("Expected return is {0,number,percent} - {1,number,percent}", 0.1, 0.2)  

// returns: Expected return is 10% - 20%. 

Hàm str.format() hỗ trợ mẫu ngày để định dạng ngày / giờ.

Tập lệnh này hiển thị số tháng, tuần và ngày kể từ đầu năm:

//@version=4
study("str_format_date")

//formatting string with date pattern
txt = str.format("Current bar date: {0,date, Y-MM-d'.' \n M 'months \n' F 'weeks \n' D 'days \n from the beginning of the year' }", timenow)

//printing label
var l1 = label.new(na, na, color = #FFFFFF00)
label.set_x(l1, bar_index)
label.set_yloc(l1, yloc.belowbar)
label.set_text(l1, txt)

plot(close)

Chỉ một biến timenow được truyền cho hàm str.format(), hàm này chứa biểu diễn thời gian UNIX: ngày, giờ và múi giờ hiện tại để trao đổi ký hiệu trên biểu đồ. Chuỗi được định dạng bằng cách sử dụng các ký tự Y, M, D, F (năm, tháng, ngày, tuần trong tháng),  ký tự đặc biệt \n để ngắt dòng và dấu ngoặc kép đơn ‘’ để chèn văn bản giữa các ký tự.

Tập lệnh này xuất các chuỗi được định dạng tới nhãn và kết quả tương ứng của hàm str.format() với các ký tự khác nhau:

//@version=4
study("str_format_date_time")

// creating date-time variable: 2021.05.04. 14:30:59
t = timestamp("GMT+0", 2021, 05, 04, 14, 30, 59)

// function for left side of the label
f_print_left(_text)  => var _label = label.new(bar_index, na, _text, xloc.bar_index, yloc.price, color(na), label.style_label_right, color.green, size.large, text.align_right), label.set_xy(_label, bar_index, 0), label.set_text(_label, _text)

// function for right side of the label
f_print_right(_text) => var _label = label.new(bar_index, na, _text, xloc.bar_index, yloc.price, color(na), label.style_label_left, color.red, size.large, text.align_left), label.set_xy(_label, bar_index, 0), label.set_text(_label, _text)

var string format = 
  "{0,date,y.MM.dd hh:mm:ss}\n" +
  "{1,date,short}\n" +
  "{2,date,medium}\n" +
  "{3,date,long}\n" +
  "{4,date,full}\n" +
  "{5,date,h a z (zzzz)}\n" +
  "{6,time,short}\n" +
  "{7,time,medium}\n" +
  "{8,time,long}\n" +
  "{9,time,full}\n" + 
  "{10,time,hh:mm:ss}\n" +
  "{11,time,HH:mm:ss}\n"

// printing format string 
f_print_left(format)
//printing formatted string
f_print_right(str.format(format, t, t, t, t, t, t, t, t, t, t, t, t))

Cột bên trái của nhãn chứa các ký tự trong dấu {}, bên phải là kết quả của hàm str.format:

Biến t được chuyển cho hàm str.format(), chứa biểu diễn thời gian UNIX: ngày, giờ và múi giờ hiện tại.

Sự đổi mới tiếp theo là hàm array.from(), hàm này nhận một số lượng biến đối số đầu vào thuộc một trong các kiểu sau: float, int, bool, string, label, line, color và trả về một mảng có kiểu tương ứng. Hàm cho phép bạn khai báo một mảng, gán các giá trị ban đầu cho nó và gán kết quả cho bất kỳ biến nào chỉ trong một dòng mã.

Trước đây, để tạo một mảng và điền vào nó các giá trị ban đầu, bạn phải sử dụng hàm array.new() và các hàm array.push() hoặc array.set():

color[] plotColors = array.new_color(size=0)
array.push(plotColors, color.red)
array.push(plotColors, color.green)
array.push(plotColors, #0000FF)

Bây giờ, để tạo một mảng chứa các màu của biểu đồ, bạn có thể thực hiện chỉ với một dòng:

plotColors = array.from(color.red, color.green, #0000FF)

Hàm sẽ tự động truyền mảng plotColors sang kiểu color[] dựa trên các đối số nhận được:

//@version=4
study(title="array_from")

f_arr (series1, series2, color1, color2) =>
    [ array.from(series1, series2), array.from(color1, color2) ]

[lines, colors] = f_arr(close, open, color.red, color.green)    

plot ( array.get(lines, 0), color = array.get(colors, 0))
plot ( array.get(lines, 1), color = array.get(colors, 1))

Thông tin thêm về hàm str.format() và array.from() có trong hướng dẫn sử dụng của chúng tôi.

Nếu bạn muốn tìm hiểu thêm về các cập nhật của Pine Script, hay đọc thêm trong Release notes. Các tài khoản PineCoders cũng sẽ cập nhật trong kênh Telegram Squawk Box , Twitter  và trong các hội thoại công khai public chat trên TradingView.

Chúng tôi hy vọng các cải tiến này sẽ có ích với các bạn, vui lòng hãy tiếp tục gửi đến cho chúng tôi các ý kiến đóng góp, phản hồi của các bạn để chúng tôi xây dựng cộng đồng TradingView cho tất cả chúng ta.

Look first Then leap

TradingView được xây dựng dành cho bạn, vì vậy nhớ đảm bảo bạn tận dụng hiệu quả nhất các tính năng tuyệt vời của chúng tôi
Khởi chạy Biểu đồ