Pine Script® sekarang mempunyai peta!

Aug 31, 2023

Kami mempersembahkan satu alat baharu untuk pengekod Pine — Peta, satu koleksi yang memegang data dalam pasangan nilai utama (key-value pair). Mereka membenarkan pengguna untuk mempautkan elemen yang berkaitan untuk beberapa jenis bersama-sama untuk diakses kemudian dalam satu skrip. Tidak seperti koleksi Pine lain, skrip mengakses nilai-nilai satu peta secara pantas dengan menggunakan kunci-kunci dari pasangan nilai utama dan bukannya dari satu indeks dalaman.

Ruang nama map adalah rumah untuk semua fungsi berkait dengan peta kami. Untuk mencipta satu peta, gunakan fungsi map.new<key_type, value_type>() . Sebagai contoh:

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

Satu kunci peta boleh menjadi mana-mana jenis asas (int, float, bool, string, atau color), dan nilainya boleh menjadi apa-apa jenis, termasuk jenis ditentukan pengguna.

Selepas mencipta satu peta, anda boleh menggunakan mana-mana fungsi dalam ruang nama map dengannya. Sebagai contoh, anda boleh memasukkan pasangan nilai utama ke dalamnya menggunakan map.put() dan mendapatkan semula nilai yang dipautkan kepada satu key unik menggunakan map.get(). Anda juga boleh menjana satu tatasusunan dari semua kunci atau nilai yang telah dipetakan menggunakan map.keys() atau map.values(). Untuk lebih maklumat tentang penggunaan koleksi baharu dan fungsi-fungsi yang berkenaan, sila lihat halaman Manual Pengguna untuk Peta kami.

Dalam contoh di bawah, kami telah mencipta satu skrip menggunakan peta untuk mewarnakan latar belakang carta pada sesi perubahan harga. Ia menggunakan peta data untuk menyimpan maklumat masa tutup dan perubahan harga bersih untuk sesi harian, mengira nisbah perubahan harga sesi terkini kepada perubahan purata sepanjang satu bilangan sesi sejarah. Ia mewarnakan latar belakang carta berdasarkan kepada nisbah ini menggunakan kandungan peta colors dan memaparkan nilai nisbah dalam Tetingkap Data:

//@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)

Penerbitan berikut mengandungi contoh skrip menggunakan peta:

Volume/Market Profile oleh SamRecio

Volume Profile oleh LuxAlgo

Historical Pattern Matcher oleh Trendoscope

Untuk kekal terkini pada ciri-ciri baharu Pine Script® , pastikan anda sentiasa memerhatikan nota Keluaran Manual Pengguna. Akaun PineCoders juga menyiarkan kemas kini dari Squawk Box nya di Telegram, akaun Twitter nya, dan dari sembang awam Pine Script® Q&A di TradingView.

Kami harap anda akan mendapati ciri yang sangat dipinta ini berguna sebagaimana kami rasai, dan sila kekal menghantarkan kepada kami maklum balas dan cadangan anda supaya kami dapat menjadikan platform ini sebaik yang mungkin. Kami membina TradingView untuk anda dan kami sentiasa berminat untuk mendengar pandangan anda.

— Pasukan TradingView

Look first Then leap

TradingView dibina untuk anda, pastikan anda memanfaatkan semua ciri-ciri hebat kami
Lancarkan Carta