Downloading...

Pine Script® v6 kullanıma sunuldu

Dec 10, 2024

Bugün, Pine Script® v6’nın kullanıma sunulduğunu duyurmaktan mutluluk duyuyoruz! Yatırımcı odaklı programlama dilimizin bu yükseltilmiş sürümü, çeşitli optimizasyonlar ve uzun süredir talep edilen özellik geliştirmelerini içeriyor ve Pine Script® programcılarına daha fazla verimlilik ve fayda sunarak bu dili yeni zirvelere taşımak için zemin hazırlıyor.

Bu gönderi, Pine v6’daki en önemli yükseltmelerden birkaçını özetlemektedir. v6’daki yenilikler hakkında daha fazla bilgi edinmek ve gelecekteki geliştirmelerden haberdar olmak için Sürüm notlarımıza bakın.

v6 Dönüştürme Aracı

Önceki sürüm değişikliklerinde olduğu gibi, Pine v6’da yer alan yükseltmeler, önceki Pine sürümlerinde yazılmış kişisel veya yayınlanmış komut dosyalarını etkilemez. Bu noktadan itibaren tüm yeni özellikler yalnızca en son Pine sürümünde uygulanacaktır, bu nedenle yeni özelliklere erişmek istiyorsanız komut dosyalarınızı v6’ya dönüştürmenizi öneririz. En kolay yöntem, Pine Editorü’nün “Komut dosyasını yönet” menüsünden “Kodu v6’ya dönüştür” seçeneğini seçerek etkinleştirebileceğiniz yeni v6 dönüştürme aracımızı kullanmaktır.

Tüm komut dosyalarının otomatik olarak v6’ya dönüştürülemeyeceğini ve bazı durumlarda dönüştürülen komut dosyasının beklendiği gibi çalıştığından emin olmak için manuel düzenlemelerin gerekli olduğunu unutmayın. Otomatik dönüştürme ile ilgili sorunlarla karşılaşırsanız veya komut dosyalarınızı manuel olarak v6’ya dönüştürmeyi tercih ederseniz, kullanışlı Dönüşüm kılavuzumuza bakın.

Dinamik istekler

TradingView, dünyanın dört bir yanından işlem yapılabilir araçlara, finansal ölçümlere ve ekonomik göstergelere yönelik on binlerce sembole erişim sağlar. request.*() işlev ailesi, Pine komut dosyalarının, grafik tarafından kullanılan sembol ve zaman dilimine bakılmaksızın, farklı zaman dilimlerinde mevcut herhangi bir sembol için veri almasına olanak tanır.

Bu işlevler, çok sayıda kullanım alanına sahip güçlü yardımcı programlardır. Bununla birlikte, daha önce önemli bir sınırlamaları vardı: İsteğin sembolünü ve zaman dilimini belirtmek için “simple string” değerlerinin kullanılmasını gerektiriyorlardı, bu da bağlamın ilk çubukta bilinmesi gerektiği ve daha sonra değişemeyeceği anlamına geliyordu. Ayrıca, tüm request.*() çağrıları kesinlikle komut dosyasının küresel kapsamında yürütülmek zorundaydı. Başka bir deyişle, koddaki herhangi bir tek request.*() örneği yalnızca bir sembol ve zaman dilimi için veri getirebilirdi ve döngüler, koşullu yapılar veya dışa aktarılan kütüphane işlevleri içinde hiçbir request.*() çağrısına izin verilmezdi.

Pine Script® v6’da bu sınırlamaları kaldırdık. Artık komut dosyaları, herhangi bir request.*() çağrısının bağlamını tanımlamak için “series string” değerlerini kullanabilir. Ayrıca, request.*() çağrılarına artık yerel kapsamlar içinde izin verilmektedir. Bu değişikliklerle, herhangi bir geçmiş çubuktaki sembolleri hesaplayabilir veya değiştirebilir ve verilerini dinamik olarak talep edebilir, sembol koleksiyonları oluşturabilir ve döngü içinde verilerini alabilir ve request.*() işlevleriyle daha önce mümkün olmayan diğer birçok şeyi yapabilirsiniz. Daha fazla bilgi edinmek için Kullanıcı Kılavuzumuzun Dinamik istekler bölümüne bakın.

Dinamik isteklerle neler yapabileceğinize dair bir örnek için, yerleşik Performans göstergesinin iç işleyişine göz atın. Virgülle ayrılmış sembol ve zaman dilimi dizeleri listelerini dizilere böler, ardından her veri kümesinden değerleri almak için döngülerin içinde dinamik olarak rrequest.security() işlevini çağırır. Geçmişte, bunun gibi bir komut dosyası birden fazla input.symbol() ve input.timeframe() çağrısı gerektirirdi ve her sembol-zaman çerçevesi kombinasyonu kodda ayrı bir request.security() çağrısı gerektirirdi:

Daha fazla referans için TradingView hesabı tarafından yayınlanan ve diğer içeriklerden veri almak için dinamik istekleri de kullanan bu komut dosyalarına göz atın.

  • Forex Heatmap (Foreks Isı Haritası). Bu gösterge, kullanıcı tarafından belirlenen bir para birimi kodları listesine dayalı olarak döviz çifti kombinasyonları için sembol kimlikleri oluşturur. Döngüler içindeki her bir çift kombinasyonu için dinamik olarak veri talep eder ve ardından renk kodlu bir tabloyu doldurmak için verileri kullanır.
  • Ticker Tape (Sembol Bandı). Bu gösterge, kullanıcı tanımlı bir sembol listesinden bir dizi sembol kimliği oluşturur. Bir döngü içinde diziden her bir sembol kimliği için fiyat ve günlük değişim bilgilerini dinamik olarak talep eder, ardından dönen bir “bant” ekranını güncellemek için verileri kullanır.
  • LibraryCOT. Önceden, bu kütüphane yalnızca CFTC Commitment of Traders (COT) verilerini talep etmek için sembol kimlikleri oluşturma araçları sağlıyordu çünkü kütüphaneler request.*() çağrıları içeren fonksiyonları dışa aktaramıyordu. Dinamik taleplerde bu sınırlama artık geçerli değildir. Kütüphane artık COT verilerini doğrudan almak için request.security() işlevini dahili olarak çağıran bir requestCommitmentOfTraders() işlevini dışa aktararak programcılara daha fazla kolaylık ve çok yönlülük sağlıyor.

Ayrıca, tüm CFTC rapor kodları daha önce “simple” değerleri döndürmek için switch deyimlerinin içinde tutuluyordu ve bu da istek için mevcut olan senetleri önemli ölçüde sınırlıyordu. Dinamik taleplerle, “simple string” sembol kimlikleri artık gerekli değildir, bu da kütüphanenin rapor kodlarını bir haritada (map) saklamasına ve daha fazla sembol için destek sağlamasına olanak tanır.

Boolean optimizasyonu

Pine Script® v6’daki en dikkate değer gelişmelerden biri yüzeyde görünmeyebilir, ancak kod verimliliğindeki değişikliği muhtemelen fark edeceksiniz. Pine’da “bool” değerlerinin dahili uygulamasını elden geçirdik ve ve veya işlemlerinin sonucu belirlemek için gerekli olmadıklarında daha fazla ifadeyi değerlendirmeyi durdurmasına izin veren kısa devre (veya “lazy”) değerlendirmeyi tanıttık.

Bu değişiklikler TradingView’deki çoğu komut dosyasının performansını artırır. Verimlilikteki fark, en popüler açık kaynaklı Topluluk komut dosyalarından bazıları üzerindeki testlerimizde doğruladığımız gibi, koşullara büyük ölçüde dayanan ve birçok “bool” değeri kullanan nispeten büyük komut dosyalarında özellikle belirgindir.

Ek olarak, tembel “bool” değerlendirmesi genellikle daha temiz, daha öz bir kod sağlar. Örneğin, bir dizideki öğelere dayanan bir koşulunuz varsa, öğenin dizininin var olduğundan emin olmak için dizinin boyutunu kontrol etmeniz gerekebilir, çünkü dizin sınırların dışındaysa kod duracak ve bir hata verecektir. Pine v6, tembel değerlendirme özelliğiyle, bir öğeye erişmeye çalışmadan önce diziyi kontrol eden tek bir koşullu ifade oluşturmanıza olanak tanır; bu, v5’te mümkün değildi.

//@version=6
indicator("Lazy evaluation demo")

//@variable A "bool" array without a fixed size.
array<bool> myArray = array.new<bool>()

// Push a new value into `myArray` when the `close` is above the `open`.
if close > open
   myArray.push(true)

// Line 13 causes an error in v5 because `myArray.first()` always executes, even if the first expression is `false`.
// It works in v6 though because `myArray.first()` executes only if the first expression evaluates to `true`.
if myArray.size() != 0 and myArray.first()
   label.new(bar_index, high, "Test")

Metin boyutu ve biçimlendirme

Metin görüntüleyen tüm çizim türleri (kutular, etiketler ve tablolar) artık standart metin düzenleyicilerde kullanılan tipografik noktalarla belirtilen metin boyutlarını kullanabilir. Önceden, size.large (24) ve size.huge (36) gibi arbitrary size.* sabitleri arasında seçim yapmanız gerekiyordu. Şimdi, yeni tipografik nokta spesifikasyonu ile metin boyutunun tam olarak istediğiniz gibi olmasını sağlayabilirsiniz. Önceki Pine sürümlerinde elde edilmesi imkansız olan devasa metin boyutları bile oluşturabilirsiniz.

Ayrıca, bu çizim türleri için metni italik, kalın veya her ikisini birden yapmak için kullanabileceğiniz yeni bir text_formatting parametresi ekledik.

//@version=6
indicator("Text size showcase", overlay = true)

var t = table.new(position.bottom_center, 1, 2, bgcolor = color.yellow, frame_color = color.black, frame_width = 1)

if barstate.islastconfirmedhistory
    t.cell(0, 0, "text_size = size.huge", text_size = size.huge)
    t.cell(0, 1, "text_size = 60, bold & italicized", text_size = 60, text_formatting = text.format_bold + text.format_italic)

Strateji emri kırpma

Aktif strateji komut dosyası kullanıcıları, Derin Geri Test modunu kullanmadığınız sürece, Pine v5’te bir stratejinin hesaplamalarını durdurmadan ve bir hata oluşturmadan önce 9000’e kadar işlemi simüle edebileceğini bilebilir. Bu sınırlama, özellikle sık alım satımları simüle eden ve alarm tetikleyicileri oluşturan stratejiler için elverişsizdir.

Pine Script® v6’da, stratejiler artık 9000 işlem sınırına ulaştıktan sonra hesaplamayı durdurmaz veya bir hata oluşturmaz. Bunun yerine, strateji yenilerine yer açmak için en eski emirleri kırpar. Kırpılan emirler Strateji Test aracı içinde görünmez, ancak strateji hesaplamalarına sorunsuz bir şekilde devam eder. Kırpılmamış en eski emrin işlem endeksini kontrol etmek için yeni strategy.closedtrades.first_index değişkenini kullanabilirsiniz. Endeks, strategy.closedtrades.*() fonksiyon çağrılarında trade_num argümanı olarak kullanılabilir.

Negatif dizi indeksleri

Pine v6’da, array.get(), array.set(), array.insert() ve array.remove() fonksiyonları artık bir dizinin sonundan başlayan öğelere başvurmak için negatif index bağımsız değişkenlerini kabul edebilir ve dizi öğelerine ters sırada başvurmak için daha kısa ve kullanışlı bir yol sunar. Örneğin, array.get(myArray, -2) çağrısı, array.get(myArray, array.size(myArray) – 2) ile eşdeğer olan myArray‘deki sondan ikinci öğeyi alır.

Pine Script® deneyimindeki en son gelişmelerden haberdar olmak için Kullanıcı Kılavuzunun Sürüm notlarına bakabilirsiniz — v6 bölümünde bu blog yazısında yer almayan bazı ek değişiklikler bile bulunmaktadır.

Bu özellikleri düşündüğümüz kadar yararlı bulacağınızı umuyoruz ve platformu olabildiğince iyi hale getirebilmemiz için lütfen bize geri bildirim ve önerilerinizi göndermeye devam edin. TradingView’i sizin için oluşturuyoruz ve düşüncelerinizi her zaman öğrenmek istiyoruz.

— TradingView Ekibi

Look first Then leap

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