Hôm nay, chúng tôi vui mừng thông báo Pine Script® v6 vừa ra mắt! Bản nâng cấp ngôn ngữ lập trình này tập trung vào nhà giao dịch, bao gồm nhiều tính năng tối ưu hóa và nhiều cải tiến tính năng được yêu cầu từ lâu, mang lại nhiều tiện ích và hiệu quả hơn cho lập trình viên Pine Script®, tạo nền tảng để đưa ngôn ngữ lập trình lên tầm cao mới.
Bài viết này giới thiệu một số điểm nâng cấp đáng chú ý nhất trong Pine v6. Hãy xem thêm Ghi chú Phát hành để tìm hiểu thêm về những điểm mới trong v6 và cập nhật những cải tiến trong tương lai nhé.
Công cụ chuyển đổi v6
Cũng như thay đổi trong bản trước, các bản nâng cấp có trong Pine v6 không ảnh hưởng đến các tập lệnh cá nhân hoặc đã xuất bản được viết trong các phiên bản Pine trước đó. Tất cả các tính năng mới từ thời điểm này trở đi sẽ được triển khai độc quyền trong phiên bản Pine mới nhất, vì vậy hãy chuyển đổi tập lệnh sang v6 nếu bạn muốn truy cập các tính năng mới. Phương pháp dễ nhất là sử dụng công cụ chuyển đổi v6 mới. Bạn có thể bật công cụ này bằng cách chọn “Chuyển đổi mã sang v6” từ menu “Quản lý tập lệnh” của Pine Editor.
Lưu ý: Không phải tất cả các tập lệnh đều có thể được chuyển đổi tự động sang v6. Trong một số trường hợp, cần phải chỉnh sửa thủ công để đảm bảo tập lệnh đã chuyển đổi hoạt động như mong đợi. Nếu bạn gặp sự cố với việc chuyển đổi tự động hoặc muốn chuyển đổi tập lệnh sang v6 theo cách thủ công, hãy xem Hướng dẫn di chuyển.
Yêu cầu động
TradingView cung cấp quyền truy cập vào hàng chục nghìn mã giao dịch cho các công cụ có thể giao dịch, số liệu tài chính và chỉ báo kinh tế từ khắp nơi trên thế giới. Gia đình hàm request.*() cho phép các tập lệnh Pine truy xuất dữ liệu cho bất kỳ mã giao dịch nào khả dụng trên các khung thời gian khác nhau, bất kể mã giao dịch và khung thời gian nào được biểu đồ sử dụng.
Các hàm này là tiện ích mạnh mẽ với nhiều trường hợp sử dụng. Tuy nhiên, trước đây hàm có một hạn chế đáng kể: yêu cầu sử dụng các giá trị “chuỗi đơn giản” để chỉ định mã giao dịch và khung thời gian của yêu cầu, nghĩa là ngữ cảnh phải được biết trên thanh đầu tiên và không thể thay đổi sau đó. Ngoài ra, tất cả các lệnh gọi request.*() đều bị buộc phải thực thi nghiêm ngặt trong phạm vi toàn cục của tập lệnh. Nói cách khác, bất kỳ phiên bản request.*() nào trong mã cũng chỉ có thể truy xuất dữ liệu cho một mã giao dịch và khung thời gian và không được phép gọi request.*() bên trong các vòng lặp, cấu trúc có điều kiện hoặc các hàm thư viện đã xuất.
Trong Pine Script® v6, chúng tôi đã xóa bỏ những hạn chế này. Bây giờ, các tập lệnh có thể sử dụng các giá trị “chuỗi chuỗi” để xác định ngữ cảnh của bất kỳ lệnh gọi request.*() nào. Ngoài ra, các lệnh gọi request.*() hiện được phép bên trong phạm vi cục bộ. Với những thay đổi này, bạn có thể tính toán hoặc sửa đổi các mã giao dịch trên bất kỳ thanh lịch sử nào và yêu cầu dữ liệu theo cách động, tạo các bộ sưu tập mã giao dịch và lấy dữ liệu trong các vòng lặp và thực hiện nhiều việc khác với các hàm request.*() mà trước đây không thể thực hiện được. Xem mục Yêu cầu động trong phần Hướng dẫn sử dụng của chúng tôi để tìm hiểu thêm.
Để biết ví dụ về điều bạn có thể làm với các yêu cầu động, hãy xem hoạt động bên trong của chỉ báo Hiệu quả. Chỉ báo chia các danh sách mã giao dịch và chuỗi thời gian được phân tách bằng dấu phẩy thành các mảng, sau đó gọi request.security() động bên trong các vòng lặp để lấy giá trị từ mỗi tập dữ liệu. Trước đây, một tập lệnh như thế này sẽ yêu cầu nhiều lệnh gọi input.symbol() và input.timeframe() các cuộc gọi và mỗi kết hợp mã giao dịch-khung thời gian sẽ yêu cầu lệnh gọi request.security() trong mã:
Để tham khảo thêm, hãy xem các tập lệnh này do tài khoản TradingView xuất bản, cũng sử dụng các yêu cầu động để lấy dữ liệu từ các bối cảnh khác.
- Bản đồ nhiệt Forex. Chỉ báo này tạo ID mã chứng khoán cho các kết hợp cặp tiền tệ dựa trên danh sách mã tiền tệ do người dùng chỉ định. Chỉ báo này yêu cầu dữ liệu động cho từng kết hợp cặp trong các vòng lặp, sau đó sử dụng dữ liệu để điền vào bảng mã màu.
- Ticker Tape. Chỉ báo này tạo ra một mảng ID mã chứng khoán từ danh sách mã giao dịch do người dùng xác định. Chỉ báo này yêu cầu thông tin giá và thay đổi hàng ngày một cách động cho mỗi ID mã chứng khoán từ mảng trong một vòng lặp, sau đó sử dụng dữ liệu để cập nhật màn hình “băng” xoay.
- LibraryCOT. Trước đây, thư viện này chỉ cung cấp các công cụ để tạo ID mã chứng khoán để yêu cầu dữ liệu Cam kết của Nhà giao dịch CFTC (COT) vì các thư viện không thể xuất các hàm chứa lệnh gọi request.*(). Với các yêu cầu động, giới hạn này không còn áp dụng nữa. Thư viện hiện xuất hàm requestCommitmentOfTraders() gọi request.security() bên trong để lấy dữ liệu COT trực tiếp, giúp lập trình viên tiện lợi và linh hoạt hơn.
Ngoài ra, tất cả các mã báo cáo CFTC trước đây đều được giữ bên trong các câu lệnh chuyển đổi để trả về các giá trị “simple”, hạn chế đáng kể các mã báo cáo có sẵn để yêu cầu. Với các yêu cầu động, ID mã báo cáo “simple string” không còn cần thiết nữa, cho phép thư viện lưu trữ các mã báo cáo trong bản đồ và cung cấp hỗ trợ cho nhiều mã giao dịch hơn.
Tối ưu hóa Boolean
Một trong những cải tiến đáng chú ý nhất trong Pine Script® v6 có thể không rõ ràng trên bề mặt, nhưng bạn có thể sẽ nhận thấy sự khác biệt về hiệu quả của mã. Chúng tôi đã làm lại việc triển khai nội bộ các giá trị “bool” trong Pine và chúng tôi đã giới thiệu đánh giá ngắn mạch (hoặc “lười biếng”), cho phép các hoạt động vận hành và và hoặc để dừng đánh giá các biểu thức tiếp theo khi chúng không cần thiết để xác định kết quả.
Những thay đổi này cải thiện hiệu suất của hầu hết các tập lệnh trên TradingView. Khác biệt về hiệu quả đặc biệt đáng chú ý với các tập lệnh tương đối lớn phụ thuộc nhiều vào các điều kiện và sử dụng nhiều giá trị “bool”, như chúng tôi đã xác nhận trong các thử nghiệm trên một số tập lệnh Cộng đồng nguồn mở phổ biến nhất.
Nhờ vậy mà, tính năng đánh giá “bool” rảnh tay thường cho phép mã sạch hơn, ngắn gọn hơn. Ví dụ: nếu có một điều kiện phụ thuộc vào các mục từ một mảng, bạn có thể phải kiểm tra kích thước của mảng để đảm bảo chỉ mục của mục tồn tại, vì tập lệnh sẽ dừng lại và đưa ra lỗi nếu chỉ mục nằm ngoài giới hạn. Pine v6, với tính năng đánh giá rảnh tay, cho phép bạn tạo một biểu thức điều kiện duy nhất kiểm tra mảng trước khi cố gắng truy cập một phần tử, điều không thể thực hiện được trong v5.
//@version=6
indicator("Lazy evaluation demo")
//@variable A "bool" array without a fixed size.
array<bool> myArray = array.new<bool>()
// Push a new value into `myArray` when the `close` is above the `open`.
if close > open
myArray.push(true)
// Line 13 causes an error in v5 because `myArray.first()` always executes, even if the first expression is `false`.
// It works in v6 though because `myArray.first()` executes only if the first expression evaluates to `true`.
if myArray.size() != 0 and myArray.first()
label.new(bar_index, high, "Test")
Kích thước và định dạng văn bản
Tất cả các loại bản vẽ hiển thị văn bản (hộp, nhãn và bảng) giờ đây có thể sử dụng kích thước văn bản được chỉ định theo điểm chữ — cùng các điểm được sử dụng trong trình soạn thảo văn bản chuẩn. Trước đây, bạn sẽ phải chọn giữa các hằng số size.* tùy ý, chẳng hạn như size.large (24) và size.huge (36). Giờ đây, với thông số điểm chữ mới, bạn có thể đảm bảo kích thước văn bản chính xác như bạn muốn. Bạn thậm chí có thể tạo kích thước văn bản lớn mà không thể đạt được trong các phiên bản Pine trước đây.
Ngoài ra, chúng tôi đã giới thiệu một tham số text_formatting mới cho các loại bản vẽ này, bạn có thể sử dụng tham số này để in nghiêng, in đậm hoặc cả hai cho văn bản.
//@version=6
indicator("Text size showcase", overlay = true)
var t = table.new(position.bottom_center, 1, 2, bgcolor = color.yellow, frame_color = color.black, frame_width = 1)
if barstate.islastconfirmedhistory
t.cell(0, 0, "text_size = size.huge", text_size = size.huge)
t.cell(0, 1, "text_size = 60, bold & italicized", text_size = 60, text_formatting = text.format_bold + text.format_italic)
Cắt tỉa thứ tự chiến lược
Người dùng tập lệnh chiến lược chủ động có thể biết rằng trong Pine v5, một chiến lược có thể mô phỏng tới 9000 giao dịch trước khi dừng tính toán và đưa ra lỗi, trừ khi bạn đang sử dụng chế độ Kiểm tra ngược sâu. Hạn chế này đặc biệt bất tiện đối với các chiến lược mô phỏng các giao dịch thường xuyên và tạo ra các kích hoạt cảnh báo.
Trong Pine Script® v6, các chiến lược không còn dừng tính toán hoặc đưa ra lỗi sau khi đạt đến giới hạn giao dịch 9000. Thay vào đó, chiến lược cắt bớt các lệnh cũ nhất để tạo chỗ cho các lệnh mới. Các lệnh đã cắt bớt không xuất hiện trong Trình kiểm tra Chiến lược, nhưng chiến lược vẫn tiếp tục tính toán mà không có vấn đề gì. Để kiểm tra chỉ số giao dịch của lệnh cũ nhất chưa cắt bớt, bạn có thể sử dụng biến strategy.closedtrades.first_index mới. Chỉ số có thể sử dụng làm đối số trade_num trong các lệnh gọi hàm strategy.closedtrades.*()
Chỉ số mảng âm
Trong Pine v6, các hàm array.get(), array.set(), array.insert() và array.remove() Các hàm hiện có thể chấp nhận các đối số chỉ mục âm để tham chiếu các mục bắt đầu từ cuối mảng, cung cấp một cách ngắn gọn và thuận tiện hơn để tham chiếu các phần tử mảng theo thứ tự ngược lại. Ví dụ, lệnh gọi array.get(myArray, -2) sẽ truy xuất phần tử thứ hai từ cuối trong myArray, tương đương với array.get(myArray, array.size(myArray) – 2).
Để cập nhật những cải tiến mới nhất cho trải nghiệm Pine Script®, hãy theo dõi Ghi chú phát hành của Sổ tay hướng dẫn sử dụng — phần v6 thậm chí còn bao gồm một số thay đổi bổ sung không có trong bài đăng trên blog này.
Chúng tôi hy vọng bạn thấy những tính năng này hữu ích như chúng tôi nghĩ và vui lòng tiếp tục gửi cho chúng tôi phản hồi và đề xuất của bạn để chúng tôi có thể cải thiện nền tảng này tốt nhất có thể. Chúng tôi xây dựng TradingView cho bạn và chúng tôi luôn mong muốn lắng nghe suy nghĩ của bạn.
— Nhóm TradingView