Baru di Pine: overload, fungsi string baru dan lebih banyak lagi!

Dec 23, 2021

Tim Pine telah bekerja keras untuk terus meningkatkan Pine sejak peluncuran v5. Mari kita bahas beberapa fitur yang telah lama ditunggu-tunggu yang telah mereka tambahkan selama dua bulan terakhir.

Fungsi overload

Fungsi overload adalah variasi fungsi yang dapat didefinisikan di perpustakaan atau disertakan dalam skrip. Overload memiliki nama yang sama dengan fungsi aslinya, tetapi menggunakan jumlah parameter yang berbeda, atau parameter dari jenis yang berbeda. Mereka sangat berguna di perpustakaan, di mana tipe parameternya diwajibkan.

Pada indikator ini, kami menentukan sebuah overload dari fungsi mult() yang menerima tiga argumennya:

//@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 overload yang beroperasi secara berbeda, tergantung pada jenis argumen yang digunakan. Ketika overload memiliki jumlah parameter yang sama dengan fungsi aslinya, parameter harus didefinisikan menggunakan tipe eksplisit yang berbeda:

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

Iterasi pada array dengan struktur for mencegah entri loop jika arraynya kosong dan melindungi indeks array keluar dari batasan.

Struktur baru for…in struktur membuat hidup anda lebih mudah dengan mengulangi semua elemen array untuk anda. Sintaksnya sederhana: for array_element in array_id akan mengiterasi diatas elemen dari array_id mulai dari indeks nol, menetapkan nilai elemen array ke variabel array_element pada setiap iterasinya. Tidak ada iterasi atau error yang akan terjadi jika arraynya kosong, dan elemen array dapat ditambahkan atau dihapus dalam iterasi loopnya.

Pada skrip dibawah ini, kami menggunakan for…in untuk menemukan angka terbesar dalam array 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 string baru

Fungsi baru ini menyediakan lebih banyak cara untuk memproses string, dan memperkenalkan ekspresi reguler ke Pine. Perhatikan bahwa, bertentangan dengan fungsi string yang ditentukan pengguna menggunakan array, mereka dapat mengembalikan nilai bentuk “sederhana”, yang dapat digunakan untuk membuat argumen symbol untuk request.security(), sebagai contohnya.

str.contains(source, str)

Menentukan apakah string source mengandung substring str . Misalnya, kita dapat menentukan apakah chart saat ini adalah chart kontrak berjangka berkelanjutan dengan mencari tanda substring “!” variabel bawaan syminfo.tickerid nya:

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

str.pos(source, str)

Mengembalikan posisi string str pada string source.

str.substring(source, begin_pos, end_pos)

Mengekstrak sebuah substring dari string source. Pada contoh ini kami menggunakan str.substring() dan str.pos() untuk mengambil substring “AAPL” dari string 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)

Berlawanan dengan yang ada, fungsi str.replace_all(), str.replace() memungkinkan penggantian selektif dari substring yang cocok dengan string penggantinya. Dalam contoh ini, kami mengganti awalan “FTX” dengan “BINANCE” untuk simbol pertama dalam string spreadnya:

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)

Mengkonversikan seluruh huruf dari string source ke huruf besar atau kecil:

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)

Menentukan string source dimulai atau berakhir dengan substring str.

str.match(source, regex)

Mengekstrak substring yang cocok dengan yang ditentukan ekspresi regulernya. Sebagai contoh, dengan regex [\\w]+:[\\w]+ memungkinkan untuk menemukan dan mengembalikan nama simbol dari string sumber “Saatnya menjual beberapa NASDAQ:AAPL!”:

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

Konversi mata uang

Sebagian fungsi dalam namespace request.* sekarang dapat mengonversi nilai yang mereka kembalikan dalam mata uang lain. Jika argumen currency ditentukan dalam panggilan fungsi, nilai harga yang dikembalikan oleh fungsi akan dikonversi dari mata uang sumber ke mata uang target. Parameter currency telah ditambahkan kedalam fungsi-fungsi berikut:

Kotak teks

Gambar kotak pada Pine kini mendukung teks! Cukup tambahkan argumen text ke fungsi box.new() setiap kali anda menggambar kotak dan teks akan ditampilkan di dalamnya. Anda dapat menyempurnakan perilaku teks dengan menyetel nilai untuk parameter text_size, text_color, text_valign, dan text_halign saat anda membuat kotaknya, atau dengan mengacu pada kotak dengan salah satu dari fungsi-fungsi baru berikut ini:

Sebagai contoh fitur ini, berikut adalah indikator Chart Periode Multi-Waktu bawaan yang dimodifikasi untuk menampilkan angka dan tertinggi/terendah minggu ini yang disorotnya:

Untuk tetap mendapat informasi tentang fitur baru Pine, ikuti Catatan rilis Panduan Pengguna Pine kami. PineCoders kami juga melakukan update pada kanal Telegram Squawk Box, Twitter, dan dari obrolan publik Skrip Pine di TradingView.

Kami harap fitur yang sangat diminta ini bermanfaat bagi anda. Harap terus mengirimkan umpan balik dan saran anda untuk peningkatan mendatang. Kami membangun TradingView untuk anda, dan kami selalu ingin mendengar dari anda.

Look first Then leap

TradingView dibangun untuk anda, karenanya manfaatkan fitur-fitur luar biasa kami semaksimal mungkin
Luncurkan Chart