Baru di Pine: lebihan beban, fungsi rentetan dan banyak lagi!

Dec 23, 2021

Pasukan Pine telah bekerja keras untuk menambahbaik Pine semenjak keluaran v5. Jom kita melihat ciri-ciri yang telah lama dinantikan yang telah mereka tambahkan di dalam dua bulan lepas.

Fungsi lebihan beban

Fungsi lebihan beban adalah variasi-variasi satu fungsi yang boleh dijelaskan di dalam perpustakaan atau dimasukkan ke dalam skrip. Lebihan beban berkongsi nama sama dengan fungsi asal tetapi menggunakan bilangan parameter yang berbeza atau parameter yang berbeza jenis. Mereka adalah berguna di dalam perpustakaan dimana jenis-jenis parameter adalah mandatori.

Di dalam petunjuk ini, kami mendefinisikan satu lebihan beban untuk fungsi mult() yang menerima tiga argumen:

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

Di sini kami mendefinisikan lebihan beban yang beroperasi secara berbeza, bergantung kepada jenis argumen yang digunakan. Apabila lebihan beban mempunyai bilangan parameter yang sama seperti fungsi asal, parameter-parameter hendaklah didefinasikan menggunakan jenis yang berbeza dan eksplisit:

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

Mengulangi semula satu tatasusunan dengan struktur for memerlukan penghalangan kemasukan gelung jika tatasusunan adalah kosong dan melindungi dari satu index tatasusunan di luar sempadan.

Struktur baru for…in menjadikan hidup anda lebih mudah dengan mengulangi semula semua elemen-elemen dalam satu tatasusunan untuk anda. Sintaks adalah mudah: for array_element in array_id akan mengulangi elemen array_id bermula dari indeks kosong, menentukan nilai elemen untuk tatasusunan kepada pembolehubah array_element  pada setiap pengulangan. Tiada pengulangan atau ralat akan terjadi jika tatasusunan adalah kosong, dan elemen tatasusunan boleh ditambah atau dibuang di dalam pengulangan gelung.

Di dalam skrip di bawah, kami menggunakan for…in untuk mencari nombor tertinggi di dalam rentetan a1 :

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

Fungsi manipulasi rentetan baru

Fungsi-fungsi baru ini memberikan lebih banyak cara untuk memproses rentetan dan memperkenalkan ekspressi baru kepada Pine. Sila maklum bahawa bertentangan dengan fungsi rentetan yang didefinasikan oleh pengguna menggunakan tatasusunan, mereka boleh memulangkan nilai bentuk “mudah” di mana ia boleh digunakan untuk mencipta argument symbol untuk request.security(), sebagai contoh.

str.contains(source, str)

Menentukan jika rentetan source mengandungi  subrentetan str . Sebagai contoh, kita boleh menentukan jika carta semasa adalah carta hadapan berterusan dengan melihat kepada subrentetan “!” di dalam pembolehubah syminfo.tickerid tersedia:

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

str.pos(source, str)

Memulangkan posisi rentetan str di dalam rentetan source .

str.substring(source, begin_pos, end_pos)

Mengekstrak satu subrentetan daripada rentetan source . Di dalam contoh ini, kami menggunakan str.substring() dan str.pos() untuk mendapatkan subrentetan “AAPL” daripada rentetan input s :

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)

Bertentangan dengan fungsi sedia ada str.replace_all() , str.replace() membenarkan penggantian terpilih untuk satu subrentetan terpadan dengan satu rentetan penggantian. Di dalam contoh ini, kami menggantikan awalan “FTX” dengan “BINANCE” untuk simbol pertama di dalam rentetan 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) dan str.upper(source)

Menukarkan semua huruf di dalam rentetan source kepada huruf kecil atau huruf besar:

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) dan  str.endswith(source, str)

Determines if the source string starts or ends with the str substring.

Menentukan samada rentetan source bermula atau berakhir dengan subrentetan str.

str.match(source, regex)

Mengekstrakkan subrentetan yang terpadan dengan regular expression tertentu. Contohnya dengan regex [\\w]+:[\\w]+ adalah boleh untuk mencari dan memulangkan nama simbol dari rentetan sumber “It’s time to sell some NASDAQ:AAPL!”:

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

Penukaran Matawang

Most functions in the request.* namespace can now convert the values they return in another currency. If the currency argument is specified in the function call, price values returned by the function will be converted from the source currency to the target currency. The currency parameter was added to the following functions:

Kebanyakan fungsi-fungsi di dalam ruang nama request.* sekarang boleh menukar nilai yang mereka pulangkan di dalam matawang lain. Jika argumen currency adalah ditentukan di dalam fungsi panggil, nilai harga dikembalikan oleh fungsi akan ditukarkan daripada matawang sumber kepada matawang sasaran. Parameter currency telah ditambahkan kepada fungsi-fungsi berikut:

Kotak teks

Kotak lukisan di dalam Pine sekarang menyokong teks! Hanya tambahkan argumen text kepada fungsi box.new() setiap kali anda melukis kotak dan teks akan dipaparkan di dalamnya. Anda boleh memperhalusi perlakuan teks dengan menetapkan nilai untuk parameter text_size, text_color, text_valign, dan text_halign apabila anda mencipta kotak atau merujuk kepada kotak dengan satu daripada fungsi-fungsi baru ini:

Sebagai satu contoh untuk ciri ini, di sini adalah petunjuk Carta Pelbagai Jangka Masa tersedia yang telah diubahsuai untuk memaparkan nombor dan naik/turun untuk minggu yang ia tonjolkan:

Untuk sentiasa mendapat info terkini mengenai ciri-ciri Pine yang baru, sentiasa perhatikan nota Keluaran Manual Pengguna Pine.  PineCoders kami juga menyiarkan kemaskini di saluran Telegram Squawk Box , Twitter dan dari ruang sembang awam Skrip Pine di TradingView.

Kami harap anda akan mendapati ciri-ciri yang sangat tinggi permintaan ini berguna. Tolong sentiasa berikan kami maklumbalas dan cadangan anda untuk penambahbaikan. Kami membina TradingView untuk anda dan kami sentiasa menunggu-nunggu untuk mendengar dari anda.

Look first Then leap

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