Pine Script® hiện đã có bản đồ!

Aug 31, 2023

Chúng tôi giới thiệu công cụ mới dành cho nhân viên lập trình Pine — Bản đồ, bộ sưu tập chứa dữ liệu theo cặp khóa-giá trị. Bản đồ cho phép người dùng liên kết các phần tử liên quan thuộc các loại khác nhau với nhau để truy cập sau trong tập lệnh. Không giống như các bộ sưu tập Pine khác, tập lệnh truy cập nhanh vào các giá trị của bản đồ bằng cách sử dụng các khóa từ cặp khóa-giá trị thay vì chỉ mục nội bộ.

Không gian tên map là nơi có tất cả tính năng liên quan đến bản đồ. Để sử dụng bản đồ, hãy sử dụng hàm map.new<key_type, value_type>(). Ví dụ:

//@variable A map containing `int` keys and  `line` values.
m = map.new<int, line>()

Khoá của bản đồ có thể là bất kỳ loại cơ bản nào (int, float, bool, string, hoặc color). Giá trị của bản đồ có thể là bất kỳ loại nào, thậm chí là loại do người dùng quy định.

Sau khi tạo bản đồ, bạn có thể sử dụng bất kỳ hàm nào trong không gian tên bản đồ. Chẳng hạn, bạn có thể đặt các cặp khóa-giá trị vào đó bằng cách sử dụng map.put() và truy xuất giá trị được liên kết với một khóa duy nhất bằng cách sử dụng map.get(). Bạn cũng có thể tạo một mảng từ tất cả các khóa hoặc giá trị được ánh xạ bằng cách sử dụng map.keys() or map.values(). Để biết thêm thông tin về cách sử dụng các bộ sưu tập mới này và các chức năng liên quan của chúng, hãy xem trang Hướng dẫn Sử dụng về Bản đồ của chúng tôi.

Trong ví dụ bên dưới, chúng tôi đã tạo một tập lệnh sử dụng bản đồ để tô màu nền của biểu đồ khi thay đổi giá trong phiên. Tập lệnh sử dụng bản đồ dữ liệu để lưu trữ thông tin về thời gian đóng cửa và thay đổi giá ròng cho phiên trong mỗi ngày, sau đó tính tỷ lệ thay đổi giá của phiên hiện tại với thay đổi trung bình trên một số phiên lịch sử được chỉ định. Tập lệnh tô màu nền biểu đồ dựa trên tỷ lệ này bằng cách sử dụng nội dung của bản đồ màu và hiển thị giá trị của tỷ lệ trong Cửa sổ Dữ liệu:

//@version=5
indicator("Session change highlighter", overlay = true)

// Inputs
sessionInput = input.session("0800-1700", "Session")
timezone     = input.string("America/New_York", "Timezone")
length       = input.int(10, "Sessions to compare")

//@variable A map of `int` closing time keys and `float` price change values.
var data = map.new<int, float>()
//@variable A map of `string` keys and `color` values for calculating the `highlightColor`.
var colors = map.new<string, color>()

var float sessionOpen    = na
float     relativeChange = na
int       closeTime      = time_close("D", sessionInput, timezone)

// Put (`string`, `color`) pairs into the `colors` map on the first bar.
if barstate.isfirst
    colors.put("Purple", color.new(color.purple, 50))
    colors.put("Orange", color.new(color.orange, 50))
    colors.put("Yellow", color.new(color.yellow, 50))

if not na(closeTime)
    // Update the session's opening price.
    if na(closeTime[1])
        sessionOpen := open

    // Assign a new value to the `closeTime` key in the `data` map.
    data.put(closeTime, math.abs(close - sessionOpen) / sessionOpen)

    //@variable An `array` of price changes from each session in the `data` map.
    sessionHistory = data.values()
    //@variable The number of sessions included in the `data` map.
    dataSize = data.size()

    if dataSize >= length
        //@variable The average price change over `length` sessions.
        avgSessionChange = sessionHistory.slice(dataSize - length, dataSize).avg()
        relativeChange := data.get(closeTime) / avgSessionChange

//@variable Returns a color gradient based on the `relativeChange` using the values in the `colors` map.
highlightColor = switch
    relativeChange <= 1 => color.from_gradient(relativeChange, 0, 1, colors.get("Purple"), colors.get("Orange"))
    =>                     color.from_gradient(relativeChange, 1, 2, colors.get("Orange"), colors.get("Yellow"))

bgcolor(highlightColor, title = "Background highlight")
plot(relativeChange, "Relative Change Ratio", highlightColor, display = display.data_window)

Các bài viết sau đây là ví dụ về tập lệnh sử dụng bản đồ:

Khối lượng Giao dịch/Thị trường của SamRecio

Khối lượng Giao dịch của LuxAlgo

Cặp Mô hình Lịch sử của Trendoscope

Để luôn cập nhật các tính năng mới của Pine Script®, hãy theo dõi chú thích phát hành trong Hướng dẫn Sử dụng. Tài khoản PineCoders cũng phát các nội dung cập nhật từ tài khoản Squawk Box trên Telegram, tài khoản Twitter, và trong trò chuyện công khai Pine Script® Q&A trên TradingView.

Chúng tôi mong bạn thấy tính năng được nhiều người yêu cầu này hữu ích như chúng tôi mong mỏi. Vui lòng tiếp tục gửi cho chúng tôi phản hồi và gợi ý để chúng tôi có thể khiến nền tảng trở nên tốt nhất có thể. Chúng tôi xây dựng TradingView cho bạn nên chúng tôi luôn mong muốn lắng nghe suy nghĩ của bạn.

— Team TradingView

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