Tính năng mới trong Pine: quá tải, các hàm chuỗi mới và hơn thế nữa!

Dec 23, 2021

Nhóm Pine đã làm việc chăm chỉ để tiếp tục cải thiện Pine kể từ khi ra mắt phiên bản v5. Hãy xem qua một số tính năng được mong đợi từ lâu mà họ đã thêm vào trong suốt hai tháng qua.

Chức năng Overloads

Quá tải hàm là các biến thể của một hàm có thể được định nghĩa trong thư viện hoặc bao gồm trong tập lệnh. Các hàm quá tải có cùng tên với hàm gốc, nhưng sử dụng số lượng tham số khác nhau hoặc các tham số thuộc các loại khác nhau. Chúng đặc biệt hữu ích trong các thư viện, nơi các loại tham số là bắt buộc.

Trong chỉ báo này, chúng tôi xác định overload của hàm mult() chấp nhận ba đối số:

//@version=5
indicator("Function overload")

// Two parameters
mult(x1, x2) =>
    x1 * x2

// Three parameters
mult(x1, x2, x3) =>
    x1 * x2 * x3

plot(mult(7, 4))
plot(mult(7, 4, 2))

Ở đây, chúng tôi xác định các overloads hoạt động khác nhau, tùy thuộc vào loại đối số được sử dụng. Khi overloads có cùng số lượng tham số như hàm ban đầu, các tham số phải được xác định bằng các kiểu rõ ràng, khác nhau:

//@version=5
indicator("Function overload")

// Accepts both 'int' and 'float' values because any 'int' can be automatically cast to 'float'
mult(float x1, float x2) =>
    x1 * x2

// Returns a 'bool' value instead of a number
mult(bool x1, bool x2) =>
    x1 and x2 ? true : false

mult(string x1, string x2) =>
    str.tonumber(x1) * str.tonumber(x2)

// Has three parameters, so explicit types are not required
mult(x1, x2, x3) =>
    x1 * x2 * x3

plot(mult(7, 4))
plot(mult(7.5, 4.2))
plot(mult(true, false) ? 1 : 0)
plot(mult("5", "6"))
plot(mult(7, 4, 2))

for…in

Lặp lại một mảng với cấu trúc for yêu cầu ngăn mục nhập vòng lặp nếu mảng trống và bảo vệ chống lại chỉ mục mảng nằm ngoài giới hạn.

Cấu trúc mới for…in làm cho cuộc sống của bạn dễ dàng hơn bằng cách lặp lại tất cả các phần tử của một mảng cho bạn. Cú pháp đơn giản: for array_element in array_id sẽ lặp lại các phần tử của array_id bắt đầu từ chỉ số 0, gán giá trị của phần tử của mảng cho array_element biến trên mỗi lần lặp. Không có lặp lại hoặc lỗi sẽ xảy ra nếu mảng trống và các phần tử mảng có thể được thêm hoặc bớt trong các lần lặp vòng lặp.

Trong ví dụ bên dưới, chúng tôi sử dụng for…in để tìm số cao nhất trong a1 array:

//@version=5
indicator("For...in cycle")
var int[] a1 = array.from(1, 3, 6, 3, 8, 0, -9, 5)

highest(array) =>
    var int highestNum = na
    for element in array
        if na(highestNum) or element > highestNum
            highestNum := element
    highestNum

plot(highest(a1))

Các hàm thao tác chuỗi mới

Các hàm mới này cung cấp nhiều cách hơn để xử lý chuỗi và giới thiệu các biểu thức chính quy cho Pine. Lưu ý rằng, trái với các hàm chuỗi do người dùng xác định bằng cách sử dụng mảng, chúng có thể trả về các giá trị ở dạng “đơn giản”, mà người ta có thể sử dụng để tạo symbol cho request.security(), ví dụ.

str.contains(source, str)

Xác định xem source chuỗi chứa str. Ví dụ: chúng ta có thể xác định xem biểu đồ hiện tại có phải là biểu đồ tương lai liên tục hay không bằng cách tìm dấu “!” chuỗi con trong syminfo.tickerid:

var isContinuous = str.contains(syminfo.tickerid, "!")  
plot(isContinuous ? 1 : 0)

str.pos(source, str)

Trả về vị trí của str chuỗi trong source.

str.substring(source, begin_pos, end_pos)

Trích xuất một chuỗi con từ chuỗi nguồn. Trong ví dụ này, chúng tôi sử dụng str.substring() và str.pos() to tìm nạp chuỗi con “AAPL” từ s input string:

s = input.string("Time to sell some NASDAQ:AAPL") 
pos = str.pos(s, ":")  // Get the position of the ":" character
tkr = str.substring(s, pos + 1) // "AAPL"

str.replace(source, target, replacement, occurrence)

Trái ngược với hiện tại str.replace_all() , str.replace() cho phép thay thế có chọn lọc một chuỗi con phù hợp bằng một chuỗi thay thế. Trong ví dụ này, chúng tôi sẽ thay thế tiền tố “FTX” bằng “BINANCE” cho ký hiệu đầu tiên trong chuỗi spread:

var source = "FTX:BTCUSD / FTX:BTCEUR"
// Replace the first occurrence of "FTX" with the "BINANCE" replacement string
var newSource = str.replace(source, "FTX",  "BINANCE", 0)

str.lower(source) và str.upper(source)

Chuyển đổi tất cả các chữ cái của source thành chữ thường hoặc chữ hoa:

s = str.lower("Time to Sell Some AAPL") // time to sell some aapl!
s = str.upper("Time to Sell Some AAPL!") // TIME TO SELL SOME AAPL!

str.startswith(source, str) và  str.endswith(source, str)

Xác định xem source bắt đầu hoặc kết thúc bằng str substring.

str.match(source, regex)

Trích xuất chuỗi con phù hợp với regular expression. Ví dụ với [\\w]+:[\\w]+ có thể tìm và trả lại tên biểu tượng từ “Đã đến lúc bán một số NASDAQ: AAPL!” chuỗi nguồn:

s = "It's time to sell some NASDAQ:AAPL!"
var string tickerId = str.match(s, "[\\w]+:[\\w]+") //"NASDAQ:AAPL"

Chuyển đổi tiền tệ

Hầu hết các chức năng trong request.* không gian tên bây giờ có thể chuyển đổi các giá trị mà chúng trả về bằng một đơn vị tiền tệ khác. Nếu currency được chỉ định trong lệnh gọi hàm, các giá trị giá do hàm trả về sẽ được chuyển đổi từ đơn vị tiền tệ nguồn sang đơn vị tiền tệ đích. Tham sốcurrency  đã được thêm vào các chức năng sau:

Textboxes

Bản vẽ hộp trong Pine hiện hỗ trợ văn bản! Chỉ cần thêm text vào hàm box.new()  bất cứ khi nào bạn vẽ hộp và văn bản sẽ được hiển thị bên trong hộp. Bạn có thể điều chỉnh hành vi của văn bản bằng cách đặt các giá trị cho text_size, text_color, text_valign, và text_halign khi bạn tạo hộp hoặc bằng cách tham chiếu hộp có một trong các chức năng mới sau:

Ví dụ về tính năng này, đây là chỉ báo Biểu đồ nhiều khoảng thời gian tích hợp được sửa đổi để hiển thị số và mức cao / thấp trong tuần mà nó làm nổi bật:

Để được cập nhật về các tính năng mới của Pine, hãy theo dõi Pine User Manual’s Release notes.  PineCoders cũng được cập nhật trong kênh Squawk Box Telegram, Twitter, và từ phần trò chuyện trên TradingView.

Chúng tôi hy vọng các tính năng cập nhật mới này có ích cho bạn. Vui lòng tiếp tục gửi đến chúng tôi những ý kiến đóng góp phản hồi của bạn để chúng tôi tiếp tục hoàn thiện hơn nữa. 

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 đồ