Pine Script’te Yeni Özellikler: str.format() ve array.from()

May 21, 2021

Pine Script dilinin bu güncellemesi, dizeler ve metinlerle çalışmak için işlevler ekler.

str.format() işlevi, kendisine iletilen bağımsız değişkenleri belirtilen biçimde bir dizeye dönüştürmenize olanak tanır:

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

formatString, karşılık gelen biçimlendirilmiş argümanları (dizeler veya sayılar olan arg0, arg1..argN) ve aşağıda tartışılan bazı kalıpları değiştirmek için “{}” parantezleri içinde bir N alt indis içerir.

Bu nedenle, dizeleri ayrıştırmak için artık str.replace_all() işlevini kullanarak bir yapı kullanmanız gerekmez:

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

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

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

ancak bunu yeni, daha kullanışlı ve daha kısa bir yolla yapabilirsiniz:

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

The subscripts {0} and {1} enclosed in brackets are replaced with the corresponding ordinal arguments: {0} – the result of the ternary operator execution, the string “buy” or “sell”, is returned depending on the inequality of prices close and open, {1} – syminfo.ticker, the current symbol on the chart:

Parantez içindeki {0} ve {1} indisleri karşılık gelen sıralı argümanlarla değiştirilir: {0} – üçlü operatör uygulamasının sonucu, fiyatların eşitsizliğine bağlı olarak “satın al” veya “sat” dizesi döndürülür kapat ve aç, {1}syminfo.ticker, grafikteki geçerli sembol:

Sayı şablonu kullanılarak, bir dizeye dönüştürülen sayı, örneğin ondalık basamak sayısını sınırlamak için farklı bir temsile dönüştürülebilir.

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

Sayının kesirli kısmını atın:

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

Finansal bilgi alın:

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

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

Yüzdeleri alın:

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

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

str.format() işlevi, tarih/saati biçimlendirmek için tarih şablonunu destekler.

Bu komut dosyası, yılın başından bu yana geçen ayların, haftaların ve günlerin sayısını görüntüler:

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

UNIX zaman gösterimini içeren str.format() işlevine yalnızca bir timenow değişkeni seçilir: grafikteki bir sembolün değişimi için geçerli tarih, saat ve saat dilimi. Dize Y, M, D, F (yıl, ay, gün, ayın haftası) karakterleri, satır sonları için özel \n karakteri ve karakterler arasına metin eklemek için tek tırnaklar ” kullanılarak biçimlendirilir.

Bu komut dosyası, etikete biçimlendirilmiş dizeleri ve çeşitli karakterlerle str.format() işlevinin karşılık gelen sonucunu verir:

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

Etiketin sol sütunu {} içine alınmış karakterleri içerir, sağ sütun str.format işlevinin sonucudur:

t değişkeni, UNIX saat gösterimini içeren str.format() işlevine geçirilir: geçerli tarih, saat ve saat dilimi.

Sonraki yenilik, şu türlerden birinin değişken sayıda giriş bağımsız değişkenini alan array.from() işlevidir: float, int, bool, string, label, line, color ve karşılık gelen türde bir dizi döndürür. İşlev, bir dizi tanımlamanıza, ona başlangıç değerleri atamanıza ve sonucu yalnızca bir kod satırındaki herhangi bir değişkene atamanıza olanak tanır.

Önceden, bir dizi oluşturmak ve onu başlangıç değerleriyle doldurmak için array.new() işlevini ve array.push() veya array.set() işlevlerini kullanmanız gerekiyordu:

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

Şimdi, çizelgelerin renklerini içerecek bir dizi oluşturmak için sadece bir satır ile yapabilirsiniz:

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

İşlev, alınan bağımsız değişkenlere dayalı olarak plotColors dizisini otomatik olarak color[] türüne dönüştürür:

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

Bu str.format() ve array.from() işlevleriyle ilgili bilgiler her zaman başvuru kılavuzumuzda mevcuttur.

Pine Komut Dosyası güncellemeleri hakkında bilgi edinmek isterseniz, Sürüm notları bölümüne bakın. PineCoders hesabı ayrıca Squawk Box Telegram kanalında, Twitter‘da ve TradingView’deki Pine Script genel sohbetinde güncellemeler yayınlar.

Bu iyileştirmeleri yararlı bulacağınızı umuyoruz ve lütfen görüşlerinizi bizimle paylaşmaya devam edin. Kullanıcılarımız için TradingView oluşturuyoruz ve yeniliklerimiz hakkında ne düşündüğünüzü duymayı çok seviyoruz.

Look first Then leap

TradingView sizin için tasarlandı, bu nedenle muhteşem özelliklerimizden en iyi şekilde yararlandığınızdan emin olun
Grafiği Açın