Downloading...

Pine Script® v6 telah diluncurkan

Dec 10, 2024

Hari ini, kami dengan senang hati mengumumkan peluncuran Pine Script® v6! Versi upgrade dari bahasa pemrograman yang berfokus pada trader ini mencakup berbagai pengoptimalan dan peningkatan fitur yang telah lama diminta, yang menawarkan efisiensi dan utilitas yang lebih baik bagi programmer Pine Script®, yang menjadi persiapan untuk membawa bahasa pemrograman ini ke level yang lebih tinggi.

Artikel ini menguraikan beberapa upgrade paling penting dalam Pine v6. Lihat Catatan Rilis kami untuk mempelajari lebih lanjut tentang apa yang baru dalam v6 dan untuk tetap mendapatkan informasi terkini tentang peningkatan di masa mendatang.

Alat konversi v6

Seperti perubahan versi sebelumnya, upgrade yang disertakan dalam Pine v6 tidak mempengaruhi skrip pribadi atau yang diterbitkan yang ditulis dalam versi Pine sebelumnya. Semua fitur baru mulai dari peluncuran ini dan seterusnya akan diterapkan secara eksklusif dalam versi Pine terbaru, jadi kami sarankan untuk mengkonversi skrip anda ke v6 jika anda ingin mengakses fitur baru. Metode termudah adalah dengan menggunakan alat konversi v6 baru kami, yang dapat anda aktifkan dengan memilih “Konversi kode ke v6” dari menu “Kelola skrip” di Editor Pine.

Perlu dicatat bahwa tidak semua skrip dapat diubah ke v6 secara otomatis, dan dalam beberapa kasus, pengeditan manual dapat diperlukan untuk memastikan skrip yang diubah berfungsi seperti yang diharapkan. Jika anda mengalami masalah dengan konversi otomatis atau lebih suka mengubah skrip anda ke v6 secara manual, lihat Panduan Migrasi praktis kami.

Permintaan dinamis

TradingView menyediakan akses ke puluhan ribu simbol untuk instrumen yang dapat diperdagangkan, metrik keuangan, dan indikator ekonomi dari seluruh dunia. Rangkaian fungsi request.*() memungkinkan skrip Pine untuk mengambil data untuk simbol apa pun yang tersedia pada kerangka waktu yang berbeda, terlepas dari simbol dan kerangka waktu yang digunakan oleh chart.

Fungsi-fungsi ini adalah utilitas yang powerful dengan banyak kasus penggunaan. Namun, sebelumnya fungsi-fungsi ini memiliki keterbatasan yang signifikan: fungsi-fungsi ini memerlukan penggunaan nilai “simple string” untuk menentukan simbol dan kerangka waktu permintaan, yang berarti konteksnya harus diketahui pada bar pertama dan tidak dapat diubah setelahnya. Selain itu, semua panggilan request.*() dipaksa untuk dijalankan secara ketat dalam lingkup global skrip. Dengan kata lain, setiap instance request.*() tunggal dalam kode dapat mengambil data hanya untuk satu simbol dan kerangka waktu, dan tidak ada panggilan request.*() yang diizinkan di dalam loop, struktur kondisional, mau pun fungsi pustaka yang diekspor.

Di Pine Script® v6, kami telah menghapus batasan ini. Sekarang, skrip dapat menggunakan nilai “series string” untuk menentukan konteks dari setiap panggilan request.*(). Selain itu, panggilan request.*() sekarang diizinkan di dalam lingkup lokal. Dengan perubahan ini, anda dapat menghitung atau mengubah simbol pada bar historis mana pun dan meminta datanya secara dinamis, menciptakan koleksi simbol dan mengambil datanya dalam loop, dan melakukan banyak hal lain dengan fungsi request.*() yang sebelumnya tidak memungkinkan. Lihat bagian Permintaan dinamis dari Panduan Pengguna kami untuk mempelajari lebih lanjut.

Sebagai contoh tentang apa yang dapat anda lakukan dengan permintaan dinamis, lihat cara kerja internal indikator Performa bawaan. Ia membagi daftar simbol dan string kerangka waktu yang dipisahkan koma menjadi array, lalu memanggil request.security() secara dinamis di dalam loop untuk mengambil nilai dari setiap set data. Di masa lalu, skrip seperti ini akan memerlukan beberapa panggilan input.symbol() dan input.timeframe(), dan setiap kombinasi simbol-kerangka waktu akan memerlukan panggilan request.security() yang terpisah dalam kode:

Sebagai referensi tambahan, lihat skrip berikut yang dipublikasikan oleh akun TradingView, yang juga menggunakan permintaan dinamis untuk mengambil data dari konteks lain.

 

  • Heatmap Forex. Indikator ini membuat ID ticker untuk kombinasi pasangan mata uang berdasarkan daftar kode mata uang yang ditentukan pengguna. Indikator ini secara dinamis meminta data untuk setiap kombinasi pasangan di dalam loop, lalu menggunakan data tersebut untuk mengisi tabel berkode warna.
  • Ticker Tape. Indikator ini membuat array ID ticker dari daftar simbol yang ditentukan pengguna. Indikator ini secara dinamis meminta informasi harga dan perubahan harian untuk setiap ID ticker dari array di dalam loop, lalu menggunakan data tersebut untuk memperbarui tampilan “tape” yang berjalan.
  • LibraryCOT. Sebelumnya, pustaka ini hanya menyediakan peralatan untuk membuat ID ticker guna meminta data CFTC Commitment of Traders (COT) karena pustaka tidak dapat mengekspor fungsi yang berisi panggilan request.*(). Dengan permintaan dinamis, batasan ini tidak lagi berlaku. Pustaka kini mengekspor fungsi requestCommitmentOfTraders() yang memanggil request.security() secara internal untuk mengambil data COT secara langsung, sehingga memberikan kemudahan dan fleksibilitas lebih bagi programmer.

Selain itu, semua kode laporan CFTC yang sebelumnya disimpan di dalam pernyataan switch untuk mengembalikan nilai “simple”, yang secara signifikan membatasi ticker yang tersedia untuk permintaan. Dengan permintaan dinamis, ID ticker “simple string” tidak lagi diperlukan, sehingga pustaka dapat menyimpan kode laporan dalam peta, dan memberikan dukungan untuk lebih banyak simbol.

Optimasi Boolean

Salah satu peningkatan yang paling penting dalam Pine Script® v6 mungkin tidak terlihat di permukaan, namun anda mungkin akan melihat perbedaan dalam efisiensi kode. Kami telah mengerjakan ulang implementasi internal dari nilai “bool” di Pine, dan kami telah memperkenalkan evaluasi short-circuit (atau “lazy”), yang memungkinkan operasi and dan or untuk berhenti mengevaluasi ekspresi lebih lanjut saat tidak diperlukan untuk menentukan hasilnya.

Perubahan ini meningkatkan kinerja sebagian besar skrip di TradingView. Perbedaan efisiensi terutama terlihat pada skrip yang relatif besar yang sangat bergantung pada kondisi dan menggunakan banyak nilai “bool”, seperti yang kami konfirmasi dalam pengujian kami pada beberapa skrip Komunitas sumber terbuka yang paling populer.

Sebagai bonus, evaluasi “bool” lazy sering kali memungkinkan kode yang lebih bersih dan ringkas. Misalnya, jika anda memiliki kondisi yang bergantung pada item dari array, Anda mungkin harus memeriksa ukuran array untuk memastikan indeks item tersebut ada, karena skrip akan berhenti dan menimbulkan erro jika indeks berada di luar batas. Pine v6, dengan evaluasi lazy, memungkinkan anda membuat ekspresi kondisional tunggal yang memeriksa array sebelum mencoba mengakses sebuah elemen, yang tidak mungkin dilakukan di v5.

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

Ukuran dan pemformatan teks

Semua jenis gambar yang menampilkan teks (kotak, label, dan tabel) kini dapat menggunakan ukuran teks yang ditentukan dalam titik tipografi — titik yang sama yang digunakan dalam editor teks standar. Sebelumnya, anda harus memilih antara konstanta size.* yang berubah-ubah, seperti size.large (24) dan size.huge (36). Kini, dengan spesifikasi titik tipografi yang baru, anda dapat memastikan ukuran teks sesuai dengan keinginan anda. Anda bahkan dapat membuat ukuran teks yang sangat besar yang tidak mungkin dicapai dalam versi Pine sebelumnya.

Selain itu, kami telah memperkenalkan parameter text_formatting baru untuk jenis gambar berikut ini, yang dapat anda gunakan untuk membuat teks menjadi miring, tebal, atau keduanya.

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

Pemangkasan order strategi

Pengguna skrip strategi aktif mungkin tahu bahwa di Pine v5, sebuah strategi dapat mensimulasikan hingga 9000 trade sebelum menghentikan perhitungannya dan memunculkan error, kecuali jika anda menggunakan mode Backtesting Mendalam. Batasan ini khususnya tidak nyaman untuk strategi yang mensimulasikan trading yang lebih sering dan membuat pemicu peringatan.

Di Pine Script® v6, strategi tidak lagi berhenti menghitung atau nenimbulkan error setelah mencapai batas 9000 trade. Sebaliknya, strategi memangkas order terlama untuk memberi ruang bagi order yang baru. Order yang dipangkas tidak muncul di Penguji Strategy, namun strategi melanjutkan perhitungannya dengan tanpa masalah. Untuk memeriksa indeks trade dari order terlama yang tidak dipangkas, anda dapat menggunakan variabel strategy.closedtrades.first_index yang baru. Indeks tersebut dapat digunakan sebagai argumen trade_num dalam panggilan fungsi strategy.closedtrades.*().

Indeks array negatif

Di Pine v6, fungsi array.get(), array.set(), array.insert(), dan array.remove() kini dapat menerima argumen index negatif untuk mereferensikan item yang dimulai dari akhir array, yang menawarkan cara yang lebih ringkas dan mudah untuk mereferensikan elemen array dalam urutan terbalik. Misalnya, panggilan array.get(myArray, -2) mengambil elemen kedua hingga terakhir di myArray, yang setara dengan array.get(myArray, array.size(myArray) – 2).

Untuk tetap mendapatkan informasi terkini tentang peningkatan terbaru pada pengalaman Pine Script®, pantau terus Catatan Rilis Panduan Pengguna — bagian v6 bahkan menyertakan beberapa perubahan tambahan yang tidak tercantum dalam postingan blog ini.

Kami harap anda dapat merasakan manfaat dari fitur-fitur ini sebagaimana yang kami harapakan, dan mohon terus kirimkan masukan dan saran kepada kami sehingga kami dapat menjadikan platform ini sebaik mungkin. Kami membangun TradingView untuk anda, dan kami selalu ingin mendengar pendapat anda.

— Tim TradingView

Look first Then leap

TradingView dibangun untuk anda, karenanya manfaatkan fitur-fitur luar biasa kami semaksimal mungkin