Pine’da yenilik: aşırı yüklemeler, yeni dize işlevleri ve daha fazlası!

Dec 23, 2021

Pine ekibi, v5 piyasaya sürülmesinden bu yana Pine’ı geliştirmeye devam etmek için çok çalışıyor. Son iki ay içinde ekledikleri uzun zamandır beklenen bazı özelliklerin üzerinden geçelim.

İŞLEV AŞIRI YÜKLEMELERİ

İşlev aşırı yüklemeleri, kitaplıkta tanımlanabilen veya bir komut dosyasına dahil edilebilen bir işlevin varyasyonlarıdır. Aşırı yüklemeler özgün işlevle aynı adı paylaşır, ancak farklı miktarlarda parametre veya farklı türde parametreler kullanır. Parametre türlerinin zorunlu olduğu kitaplıklarda özellikle yararlıdırlar.

Bu göstergede, üç bağımsız değişkeni kabul eden mult() işlevinin aşırı yüklenmesini tanımlarız:

//@version=5
indicator("Function overload")

// İki parameter
mult(x1, x2) =>
    x1 * x2

// Üç parameter
mult(x1, x2, x3) =>
    x1 * x2 * x3

plot(mult(7, 4))
plot(mult(7, 4, 2))

Burada, kullanılan bağımsız değişkenlerin türüne bağlı olarak farklı çalışan aşırı yüklemeleri tanımlarız. Aşırı yüklemeler özgün işlevle aynı miktarda parametreye sahip olduğunda, parametreler farklı, açık türler kullanılarak tanımlanmalıdır:

//@version=5
indicator("Function overload")

// Hem 'int' hem de 'float' değerlerini kabul eder, çünkü herhangi bir 'int' otomatik olarak 'float'ya dönüştürülebilir
mult(float x1, float x2) =>
    x1 * x2

// Sayı yerine 'bool' değeri döndürür
mult(bool x1, bool x2) =>
    x1 and x2 ? true : false

mult(string x1, string x2) =>
    str.tonumber(x1) * str.tonumber(x2)

// Üç parametresi vardır, bu nedenle açık türler gerekli değildir
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

For yapısına sahip bir dizi üzerinde yineleme, dizi boşsa döngü girişini engellemeyi ve sınırların dışında bir dizi dizinine karşı koruma gerektirir.

Yeni için… yapıda sizin için bir dizinin tüm öğeleri üzerinde yineleme yaparak hayatınızı kolaylaştırır. Sözdizimi basittir: array_id array_element için, dizinin sıfır dizininden başlayarak array_id öğeleri üzerinde yineleme yapacak ve dizinin öğesinin değerini her yinelemedeki array_element değişkenine atayacaktır. Dizi boşsa ve dizi öğeleri döngü yinelemelerinde eklenebilir veya kaldırılabilirse yineleme veya hata oluşmaz.

Aşağıdaki komut dosyasında,… A1 dizisindeki en yüksek sayıyı bulmak için:

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

YENİ DİZE İŞLEME İŞLEVLERİ

Bu yeni işlevler dizeleri işlemek için daha fazla yol sağlar ve Pine’a normal ifadeler sunar. Dizileri kullanarak kullanıcı tanımlı dize işlevlerinin aksine, örneğin request.security() için sembol bağımsız değişkenleri oluşturmak için bunların kullanabileceği “basit” form değerlerini döndürebileceğini unutmayın.

str.contains(kaynak, str)

Kaynak dizenin str alt dizesini içerip içermediğine karar veriyor. Örneğin, syminfo.tickerid yerleşik değişkeninde “!” alt dizesini arayarak geçerli grafiğin sürekli bir vadeli işlem grafiği olup olmadığını belirleyebiliriz:

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

str.pos(kaynak, str)

R, str dizesinin kaynak dizedeki konumunu eturns.

str.substring(kaynak, begin_pos, end_pos)

Kaynak dizeden bir alt dize ayıklar. Bu örnekte, s giriş dizesinden “AAPL” alt dizesini getirmek için str.substring() ve str.pos() kullanıyoruz:

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(kaynak, hedef, değiştirme, oluşum)

Varolan str.replace_all() işlevinin aksine, str.replace() eşleşen bir alt dizenin değiştirme dizesiyle seçmeli olarak değiştirilmesine izin verir. Bu örnekte, forma dizeslerindeki ilk sembol için “FTX” önekini “BINANCE” ile değiştiriyoruz:

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(kaynak) ve str.upper(kaynak)

Kaynak dizenin tüm harflerini küçük veya büyük harfe dönüştürür:

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(kaynak, str) ve str.endswith(kaynak, str)

Kaynak dizenin str alt dizesiyle başlayıp başlayıp bitmeyeceğine karar.

str.match(kaynak, regex)

Belirtilen normal ifadeyle eşleşen alt dizeyi ayıklayın. Örneğin, regex [\\w]+:[\\w]+ ile sembol adını “Nasdaq:AAPL!” kaynak dizesini satmanın zamanı geldi:

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

PARA BIRIMI DÖNÜŞTÜRME

request.* ad alanındaki çoğu işlev artık döndürdüğü değerleri başka bir para biriminde dönüştürebilir. İşlev çağrısında para birimi bağımsız değişkeni belirtilirse, işlev tarafından döndürülen fiyat değerleri kaynak para biriminden hedef para birimine dönüştürülür. Para birimi parametresi aşağıdaki işlevlere eklendi:

METİN KUTULARI

Pine’daki kutu çizimi artık metni destekliyor! Kutuyu her çizdiğinizde ve metin içinde görüntülendiğinde metin bağımsız değişkenini box.new() işlevine eklemeniz yeterlidir. Kutuyu oluşturduğunuzda text_size , text_color, text_valignve text_halign parametrelerinin değerlerini ayarlayarak veya aşağıdaki yeni işlevlerden biriyle kutuya başvurarak metnin davranışına ince ayar yapabilirsiniz:

Bu özelliğe örnek olarak, sayıyı ve vurguladığı haftanın en yüksek/en düşük sayısını görüntülemek için değiştirilen yerleşik Çok Zamanlı Dönem Grafikleri göstergesi aşağıda verilmiştir:

Yeni Pine özelliklerinden haberdar olmak için Pine Kullanım Kılavuzumuzun Sürüm notlarına göz kulak olun. PineCoders’ımız ayrıca Squawk Box Telegram kanalında, Twitter’da ve TradingView’deki Pine Script genel sohbetinden güncellemeler yayınladı.

Umarız bu çok istenen özellikleri yararlı bulursunuz. Lütfen iyileştirme için geri bildirimlerinizi ve önerilerinizi bize vermeye devam edin. TradingView’i sizin için oluşturuyoruz ve sizden her zaman haber almak istiyoruz.

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