Fitur Baru pada Skrip Pine: str.format() dan array.from()

May 21, 2021

Update bahasa Skrip Pine kali ini menambahkan fungsi untuk bekerja dengan string dan array.

Fungsi str.format() memungkinkan anda mengkonversi argumen yang diberikan padanya kedalam sebuah string dengan suatu format tertentu:

str.format(formatString, arg0, arg1, ...) -> string

formatString mencakup sebuah subskrip N dalam tanda kurung “{}” untuk menggantikan argumen berformat yang sesuai (arg0, arg1..argN, yang merupakan string atau angka), dan beberapa dari pola yang didiskusikan dibawah ini.

Karenanya, untuk mengurai string, anda tidak perlu lagi menggunakan konstruksi menggunakan fungsi str.replace_all():

txt := "Time to {0} some {1}!"

txt := str.replace_all(txt, "{0}", close > open ? "buy" : "sell")

txt := str.replace_all(txt, "{1}", syminfo.ticker)

Tetapi anda dapat melakukannya dengan cara yang baru, lebih mudah dan lebih singkat:

txt = str.format("Time to {0} some {1}!", close > open ? "buy" : "sell", syminfo.ticker)

Subskrip {0} dan {1} yang diapit dalam tanda kurung diganti dengan argumen ordinal yang sesuai: {0} – hasil dari eksekusi operator ternary, string “pembelian” atau “penjualan”, dikembalikan tergantung pada ketidaksetaraan harga tutup dan buka, {1} – syminfo.ticker, simbol saat ini pada chart:

Menggunakan template angka, angka yang dikonversi menjadi string dapat dikonversi ke representasi yang berbeda, misalnya, untuk membatasi jumlah tempat desimal

str.format("{0,number,#.#}", 1.34) // returns: 1.3

Membuang bagian pecahan dari angka:

str.format("{0,number,integer}", 1.34) // returns: 1

Memperoleh informasi finansial:

str.format("The cash turnover amounted to {0,number,currency}", 1340000) 

// “The cash turnover amounted to $1,340,000.00”.

Memperoleh persentase:

str.format("Expected return is {0,number,percent} - {1,number,percent}", 0.1, 0.2)  

// returns: Expected return is 10% - 20%. 

Fungsi str.format() mendukung template tanggal untuk memformat tanggal/waktu.

Script ini menampilkan jumlah bulan, minggu dan hari sejak awal tahun:

//@version=4
study("str_format_date")

//formatting string with date pattern
txt = str.format("Current bar date: {0,date, Y-MM-d'.' \n M 'months \n' F 'weeks \n' D 'days \n from the beginning of the year' }", timenow)

//printing label
var l1 = label.new(na, na, color = #FFFFFF00)
label.set_x(l1, bar_index)
label.set_yloc(l1, yloc.belowbar)
label.set_text(l1, txt)

plot(close)

Hanya satu variabel timenow yang diteruskan ke fungsi str.format(), yang berisi representasi waktu UNIX: tanggal, waktu, dan zona waktu saat ini untuk pertukaran simbol pada bagan. String diformat menggunakan karakter Y, M, D, F (tahun, bulan, hari, minggu dalam sebulan), \n karakter khusus untuk jeda baris, dan tanda kutip tunggal ‘’ untuk menyisipkan teks di antara karakter.

Skrip ini menampilkan string yang diformat ke label dan hasil yang sesuai dari fungsi str.format() dengan berbagai karakter:

//@version=4
study("str_format_date_time")

// creating date-time variable: 2021.05.04. 14:30:59
t = timestamp("GMT+0", 2021, 05, 04, 14, 30, 59)

// function for left side of the label
f_print_left(_text)  => var _label = label.new(bar_index, na, _text, xloc.bar_index, yloc.price, color(na), label.style_label_right, color.green, size.large, text.align_right), label.set_xy(_label, bar_index, 0), label.set_text(_label, _text)

// function for right side of the label
f_print_right(_text) => var _label = label.new(bar_index, na, _text, xloc.bar_index, yloc.price, color(na), label.style_label_left, color.red, size.large, text.align_left), label.set_xy(_label, bar_index, 0), label.set_text(_label, _text)

var string format = 
  "{0,date,y.MM.dd hh:mm:ss}\n" +
  "{1,date,short}\n" +
  "{2,date,medium}\n" +
  "{3,date,long}\n" +
  "{4,date,full}\n" +
  "{5,date,h a z (zzzz)}\n" +
  "{6,time,short}\n" +
  "{7,time,medium}\n" +
  "{8,time,long}\n" +
  "{9,time,full}\n" + 
  "{10,time,hh:mm:ss}\n" +
  "{11,time,HH:mm:ss}\n"

// printing format string 
f_print_left(format)
//printing formatted string
f_print_right(str.format(format, t, t, t, t, t, t, t, t, t, t, t, t))

Kolom kiri label berisi karakter yang diapit {}, sedangkan yang kanan adalah hasil dari fungsi str.format:

Variabel t diteruskan ke fungsi str.format(), yang berisi representasi waktu UNIX: tanggal, waktu, dan zona waktu saat ini

Inovasi berikutnya adalah fungsi array.from(), yang mengambil sejumlah variabel argumen input dari salah satu tipe berikut: float, int, bool, string, label, line, color dan mengembalikan array dari tipe yang sesuai. Fungsi ini memungkinkan anda untuk mendeklarasikan array, menetapkan nilai awal padanya dan menetapkan hasilnya ke variabel apa pun hanya dalam satu baris kode.

Sebelumnya, untuk membuat array dan mengisinya dengan nilai awal, Anda harus menggunakan fungsi array.new() dan fungsi array.push() atau array.set():

color[] plotColors = array.new_color(size=0)
array.push(plotColors, color.red)
array.push(plotColors, color.green)
array.push(plotColors, #0000FF)

Sekarang, untuk membuat array yang akan berisi warna chart, anda dapat melakukannya hanya dengan satu baris saja:

plotColors = array.from(color.red, color.green, #0000FF)

Fungsi akan secara otomatis mentransmisikan array plotColors ke tipe color[] berdasarkan argumen yang diterimanya:

//@version=4
study(title="array_from")

f_arr (series1, series2, color1, color2) =>
    [ array.from(series1, series2), array.from(color1, color2) ]

[lines, colors] = f_arr(close, open, color.red, color.green)    

plot ( array.get(lines, 0), color = array.get(colors, 0))
plot ( array.get(lines, 1), color = array.get(colors, 1))

Informasi mengenai fungsi str.format() dan array.from() ini selalu tersedia pada panduan referensi kami.

Jika anda ingin mengetahui mengenai update Skrip Pine, lihatlah bagian Catatan rilis. Akun PineCoders juga menyiarkan update pada channel telegram Squawk Box, Twitter dan pada obrolan publik Skrip Pine di  TradingView.

Kami harap peningkatan ini bermanfaat bagi anda, dan teruslah berbagi pendapat Anda dengan kami. Kami sedang membangun TradingView untuk pengguna kami, dan kami senang mendengar pendapat anda tentang inovasi kami.

Look first Then leap

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