Pine Script® artık haritalar içeriyor!

Aug 31, 2023

Pine kodlayıcıları için yeni bir araç sunuyoruz — Haritalar, verileri anahtar-değer çiftleri halinde tutan koleksiyonlardır. Kullanıcıların, bir komut dosyasında daha sonra erişmek üzere farklı türlerdeki ilgili öğeleri birbirine bağlamasına olanak tanır. Diğer Pine koleksiyonlarının aksine, kodlar bir haritanın değerlerine dahili bir dizin yerine anahtar-değer çiftlerindeki anahtarları kullanarak hızla erişir.

map ad alanı haritayla ilgili tüm işlevlerimize ev sahipliği yapar. Bir harita oluşturmak için, map.new<key_type, value_type>() fonksiyonunu kullanın. Örnek olarak:

//@variable A map containing `int` keys and  `line` values.
m = map.new<int, line>()

Bir haritanın anahtarları herhangi bir temel türde olabilir (int, float, bool, string, veya color), ve değerleri herhangi bir türde, hatta kullanıcı tanımlı bir türde olabilir.

Bir map oluşturduktan sonra, map isim alanındaki fonksiyonlardan herhangi birini onunla birlikte kullanabilirsiniz. Örneğin, map.put() kullanarak anahtar-değer çiftlerini içine koyabilir ve map.get() kullanarak benzersiz bir anahtara bağlı değeri alabilirsiniz. Ayrıca map.keys() veya map.values() kullanarak eşlenen tüm anahtarlardan veya değerlerden bir dizi oluşturabilirsiniz. Bu yeni koleksiyonları ve ilgili fonksiyonlarını kullanma hakkında daha fazla bilgi için Kullanıcı Kılavuzumuzun Haritalar sayfasına bakın.

Aşağıdaki örnekte, seans fiyat değişikliklerinde grafiğin arka planını renklendirmek için haritaları kullanan bir komut dosyası oluşturduk. Her günün seansı için kapanış saati ve net fiyat değişikliği bilgilerini depolamak için bir data haritası kullanır, ardından mevcut seansın fiyat değişikliğinin belirli sayıda geçmiş seansın ortalama değişikliğine oranını hesaplar. colors haritasının içeriğini kullanarak grafik arka planını bu orana göre renklendirir ve oranın değerini Veri Penceresinde görüntüler:

//@version=5
indicator("Session change highlighter", overlay = true)

// Inputs
sessionInput = input.session("0800-1700", "Session")
timezone     = input.string("America/New_York", "Timezone")
length       = input.int(10, "Sessions to compare")

//@variable A map of `int` closing time keys and `float` price change values.
var data = map.new<int, float>()
//@variable A map of `string` keys and `color` values for calculating the `highlightColor`.
var colors = map.new<string, color>()

var float sessionOpen    = na
float     relativeChange = na
int       closeTime      = time_close("D", sessionInput, timezone)

// Put (`string`, `color`) pairs into the `colors` map on the first bar.
if barstate.isfirst
    colors.put("Purple", color.new(color.purple, 50))
    colors.put("Orange", color.new(color.orange, 50))
    colors.put("Yellow", color.new(color.yellow, 50))

if not na(closeTime)
    // Update the session's opening price.
    if na(closeTime[1])
        sessionOpen := open

    // Assign a new value to the `closeTime` key in the `data` map.
    data.put(closeTime, math.abs(close - sessionOpen) / sessionOpen)

    //@variable An `array` of price changes from each session in the `data` map.
    sessionHistory = data.values()
    //@variable The number of sessions included in the `data` map.
    dataSize = data.size()

    if dataSize >= length
        //@variable The average price change over `length` sessions.
        avgSessionChange = sessionHistory.slice(dataSize - length, dataSize).avg()
        relativeChange := data.get(closeTime) / avgSessionChange

//@variable Returns a color gradient based on the `relativeChange` using the values in the `colors` map.
highlightColor = switch
    relativeChange <= 1 => color.from_gradient(relativeChange, 0, 1, colors.get("Purple"), colors.get("Orange"))
    =>                     color.from_gradient(relativeChange, 1, 2, colors.get("Orange"), colors.get("Yellow"))

bgcolor(highlightColor, title = "Background highlight")
plot(relativeChange, "Relative Change Ratio", highlightColor, display = display.data_window)

Aşağıdaki yayınlar harita kullanan komut dosyalarına örnektir:

SamRecio’dan Hacim/Piyasa Profili


LuxAlgo’dan Hacim Profili


Trendoscope’tan Tarihsel Desen Eşleştirici

Yeni Pine Script® özelliklerinden haberdar olmak için Kullanım Kılavuzunun Sürüm notlarına göz atın. PineCoders hesabı ayrıca Telegram’daki Squawk Box‘ından, Twitter hesabından ve TradingView’deki Pine Script® Q&A genel sohbetinden güncellemeler yayınlar. 

Bu çok talep edilen özelliği 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 geliştiriyoruz ve düşüncelerinizi her zaman duymak 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
Grafiği Açın