Ciri baru dalam skrip Pine : str.format() dan array.from()

May 21, 2021

Kemas kini bahasa Skrip Pine ini telah menambahkan fungsi untuk bekerja dengan retentan dan array.

Fungsi str.format() membolehkan anda menukarkan argumen diterima kepada rentetan dengan format tertentu:

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

formatString mengandungi subskrip N dalam kurungan bulat “{}” untuk menggantikan argumenn diformat yang berkenaan (arg0, arg1..argN, yang merupakan rentetan atau nombor), dan beberapa corak yang dibincangkan di bawah.

Untuk penghuraian rentetan, anda tidak perlu lagi menggunakan pembinaan dengan 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 boleh melakukannya dengan cara yang baru dan lebih mudah:

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

Subskrip {0} dan {1} tertutup dalam kurungan dan digantikan dengan argument ordinal yang berkenaan: {0} – hasil daripada pelaksanaan operator, rentetan “buy” atau “sell”, dipulangkan bergantung kepada ketidaksamaan harga tutup dan buka, {1} – syminfo.ticker, simbol semasa carta:

Menggunakan template nombor, nombor ditukarkan kepada rentetan boleh dtukarkan kepada perwakilan yang berlainan, contohnya, mengehadkan bilangan titik perpuluhan

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

Buangkan bahagian pecahan nombor:

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

Dapatkan maklumat kewangan:

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

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

Dapatkan peratusan:

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

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

Fungsi str.format()  menyokong template date untuk format tarikh/masa:

Skrip memaparkan bilangan bulan, minggu, dan hari dari 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 pembolehubah timenow boleh dihantar kepada fungsi str.format() , yang mengandungi perwakilan masa UNIX: tarikh, masa dan zon masa semasa untuk pertukaran simbol di carta. Rentetan diformat menggunakan aksara Y, M, D, F (year, month, day, week of the month), aksara khas \n untuk garisan pecah, dan petikan tunggal ‘’ untuk masukkan teks di antara aksara.

Skrip ini menghasilkan rentetan diformat kepada label dan hasil yang bersepadan fungsi str.format()  dengan pelbagai aksara:

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

Kolum kiri label mengandungi aksara dalam {}, manakala bahagian kanan merupakan hasil fungsi str.format .

Pembolehubah t dihantar kepada fungsi str.format()  yang mengandungi perwakilan masa UNIX: tarikh , masa dan zon masa semasa.

Inovasi seterusnya ialah fungsi array.from() yang mengambil nombor pembolehubah argument input untuk salah satu jenis : : float, int, bool, string, label, line, color dan memulangkan array dengan jenis bersepadan. Fungsi membenarkan anda menyatakan array, menetapkan nilai awal kepadanya dan menetapkan hasil kepada sebarang pembolehubah dalam hanya satu baris kod.

Sebelum ini, untuk mencipta array dan mengisi nilai awal, anda perlu menggunakan fungsi array.new() dan 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)

Kini, untuk mencipta array yang mengandungi warna carta, anda boleh berbuat demikian dengan satu baris kod:

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

Fungsi ini akan menggunakan array plotColors untuk jenis color[]  berdasarkan argument diterima:

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

Maklumat tentang fungsi  str.format() dan array.from() sentiasa tersedia di manual rujukan kami.

Jika anda ingin mengetahui kemas kini Skrip Pine, sila semak bahagian nota Pelepasan. Akaun PineCoders juga akan menyiarkan kemas kini melalui channel Telegram Squawk Box, Twitter dan  sembang awam  Skrip Pine di TradingView.

Kami berharap penambahbaikan ini berguna dan sila terus berkongsi pandangan anda dengan kami. Kami membina TradingView untuk pengguna-pengguna kami dan bergembira mendapatkan pandangan anda terhadap inovasi kami.

Look first Then leap

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