Pada hari ini, kami teruja untuk mengumumkan keluaran Pine Script® v6! Versi kemas kini bahasa pemprograman berfokuskan pedagang kami ini mengandungi pelbagai pengoptimuman dan penambah baikan ciri yang sudah lama dipinta, menawarkan kecekapan lebih baik dan utiliti kepada pengaturcara Pine Script®, menetapkan pentas dalam membawa bahasa ini ke tingkatan baharu.
Catatan ini menunjukkan beberapa kemas kini paling penting kepada Pine v6. Lihat Nota keluaran kami untuk mengetahui lebih lanjut mengenai apakah yang baharu dalam v6 dan kekal termaklum pada penambah baikan masa depan.
Alat penukaran v6
Sama seperti perubahan versi sebelum ini, kemas kini yang termasuk dalam Pine v6 tidak mengganggu skrip peribadi atau diterbitkan yang sudah ditulis dalam versi Pine sebelumnya. Semua ciri baharu dari masa ini ke hadapan akan dilaksanakan secara ekslusif kepada versi Pine terkini, jadi kami menyarankan anda menukar skrip anda kepada v6 jika anda mahu menggunakan ciri baharu. Cara paling mudah untuk menggunakan alat penukaran v6 baharu kami, yang anda boleh aktifkan dengan memilih “Tukar kod kepada v6” dari menu Editor Pine “Urus skrip”.
Ambil maklum bahawa bukan semua skrip boleh ditukarkan kepada v6 secara automatik dan dalam beberapa kes, pengeditan secara manual diperlukan untuk memastikan skrip yang sudah ditukar berfungsi seperti yang diinginkan. Jika anda menemukan masalah dengan penukaran automatik atau lebih gemar menukar skrip anda kepada v6 secara manual, lihat Panduan migrasi kami.
Permintaan dinamik
TradingView memberikan akses kepada puluhan ribu simbol untuk instrumen yang boleh didagangkan, metrik kewangan dan penunjuk ekonomi dari seluruh dunia. Keluarga fungsi request.*() membenarkan skrip Pine untuk mendapatkan data untuk mana-mana simbol yang ada pada rangka masa berbeza, tidak mengira simbol dan rangka masa yang digunakan oleh carta.
Fungsi ini adalah utiliti berkuasa dengan pelbagai kes penggunaan. Akan tetapi, mereka sebelum ini ada sekatan ketara: mereka perlu menggunakan nilai “untaian mudah” untuk menjelaskan simbol dan rangka masa permintaan, bermaksud konteks hendaklah diketahui pada bar pertama dan tidak boleh ditukar lagi selepas itu. Selain daripada itu, semua panggilan request.*() adalah dipaksa untuk dilaksanakan hanya dalam skop sejagat skrip. Dalam maksud lain, mana-mana keadaan tunggal request.*() dalam kod boleh mengambil data hanya untuk satu simbol dan rangka masa dan tiada panggilan request.*() dibenarkan dalam gelung, struktur bersyarat atau fungsi perpustakaan dieksport.
Dalam Pine Script® v6, kami telah membuang sekatan ini. Sekarang, skrip boleh menggunakan nilai “untaian siri” untuk menentukan konteks untuk apa-apa panggilan request.*() . Selain daripada itu, panggilan request.*() sekarang dibenarkan dalam skop tempatan. Dengan perubahan ini, anda boleh mengira atau menukar simbol pada mana-mana bar sejarah dan memohon data mereka secara dinamik, mencipta koleksi simbol dan mengambil data mereka dalam gelung dan melakukan banyak perkara lain dengan fungsi request.*() yang sebelum ini tidak dibenarkan. Lihat bahagian Permintaan dinamik dalam Manual Pengguna kami untuk mengetahui dengan lebih lanjut.
Sebagai contoh tentang apa yang anda boleh lakukan dengan permintaan dinamik, adalah memeriksa tugas luaran penunjuk Prestasi terbina dalam. Ia memecahkan senarai diasingkan dengan koma untuk untaian simbol dan rangka masa kepada tatasusunan, kemudian memanggil request.security() secara dinamik di dalam gelung untuk mengambil nilai dari setiap set data. Sebelum ini, skrip seperti ini memerlukan beberapa input.symbol() dan panggilan input.timeframe(), dan setiap kombinasi simbol-rangka masa akan memerlukan panggilan request.security() berbeza dalam kod:
Untuk rujukan tambahan, sila periksa skrip-skrip ini yang diterbikan oleh akaun TradingView, yang juga menggunakan permintaan dinamik untuk mengambil data dari konteks lain.
- Peta Suhu Forex. Penunjuk ini mencipta ID ticker untuk kombinasi pasangan mata wang berdasarkan kepada senarai dijelaskan pengguna dalam kod mata wang. Ia secara dinamik memohon data untuk setiap untuk setiap kombinasi pasangan dalam gelung dan kemudian menggunakan data untuk mempopulasikan jadual dikodkan dengan warna.
- Pita Ticker. Penunjuk ini mencipta untaian ID dari senarai dijelaskan pengguna untuk symbol. Ia secara dinamik memohon maklumat harga dan perubahan harian untuk setiap ID ticker dari untaian dalam satu gelung, kemudian menggunakan data itu untuk mengemas kini paparan “pita” yang berpusing.
- LibraryCOT. Sebelum ini, perpustakaan ini hanya menyediakan alatan untuk mencipta ID ticker untuk memohon data CFTC Commitment of Traders (COT) kerana perpustakaan tidak boleh mengeksport data fungsi mengandungi panggilan request.*() . Dengan permintaan dinamik, sekatan ini tiada lagi. Perpustakaan sekarang mengeksport fungsi requestCommitmentOfTraders() yang memanggil request.security() secara dalaman untuk mendapatkan data COT secara terus, memberikan lebih kemudahan dan kepelbagaian kepada pengaturcara.
Selain daripada itu, semua kod laporan CFTC sebelum ini disimpan dalam penyata switch untuk memulangkan nilai “ringkas”, menunjukkan had ticker yang tersedia untuk permintaan. Dengan permintaan dinamik, ID ticker “untaian ringkas” tidak lagi diperlukan, membenarkan perpustakaan menyimpan kod laporan dalam satu peta, dan memberikan sokongan untuk lebih banyak simbol.
Pengoptimuman Boolean
Satu daripada penambah baikan penting dalam Pine Script® v6 mungkin tidak nampak jelas pada permukaan, tetapi anda akan merasakan perbezaan dalam kecekapan kod. Kami telah mengolah semula pelaksanaan dalaman nilai “bool” dalam Pine, dan kami telah memperkenalkan penilaian litar pintas (atau “malas”), membenarkan operasi and dan or untuk berhenti menilai ekspressi seterusnya apabila mereka tidak diperlukan dalam menentukan keputusan.
Perubahan ini meningkatkan prestasi untuk kebanyakan skrip dalam TradingView. Perbezaan kecekapan boleh dirasakan dengan ketara dengan skrip yang agak besar yang banyak bergantung kepada keadaan dan menggunakan banyak nilai “bool”, kerana kami mengesahkan dalam ujian kami pada beberapa skrip Komuniti sumber terbuka paling popular.
Sebagai bonus, penilaian “bool” malas selalunya membenarkan kod yang lebih bersih dan tepat. Sebagai contoh, jika anda ada keadaan yang bergantung kepada item dari satu tatasusunan, anda perlu memeriksa saiz tatasusunan untuk memastikan indeks item itu wujud, kerana skrip akan berhenti dan memberikan ralat jika indeks itu tiada. Pine v6, dengan penilaian malasnya, membenarkan anda mencipta ekspressi bersyarat tunggal untuk memeriksa tatasusunan sebelum cuba untuk mengakses satu elemen, yang sebelum ini tidak dibenarkan dalam 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")
Saiz teks dan pemformatan
Semua jenis lukisan yang memaparkan teks (kotak, label dan jadual) sekarang boleh menggunakan saiz teks ditentukan dalam titik tipografi — titik yang sama digunakan dalam editor teks standard. Sebelum ini, anda perlu memilih antara pemalar size.* arbitari, seperti size.large (24) dan size.huge (36). Sekarang, dengan spesifikasi titik tipografi, anda boleh memastikan saiz teks adalah tepat seperti yang anda kehendaki. Anda juga boleh mencipta saiz teks gergasi yang tidak boleh dilakukan dalam versi Pine sebelum ini.
Tambahan lagi, kami telah memperkenalkan parameter text_formatting baharu untuk jenis lukisan, yang anda boleh gunakan untuk menjadikan teks dicondongkan, tebal atau kedua-duanya.
//@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 pesanan strategi
Pengguna skrip strategi aktif mungkin tahu bahawa dalam Pine v5, satu strategi boleh mensimulasikan sehingga 9000 dagangan sebelum menghentikan pengiraannya dan mengeluarkan ralat, kecuali jika anda menggunakan mod Ujian Belakang Dalam. Sekatan ini adalah menyusahkan kepada strategi yang mensimulasikan dagangan yang kerap dan mencipta cetusan pemberitahuan.
Dalam Pine Script® v6, strategi tidak lagi perlu berhenti mengira atau mengeluarkan ralat selepas mencapai had 9000 dagangan, Sebaliknya, strategi memangkas pesanan terawal untuk memberikan ruang kepada yang baharu. Pesanan dipangkas tidak muncul dalam Penguji Strategi, tetapi strategi meneruskan pengiraannya tanpa masalah. Untuk memeriksa indeks dagangan untuk pesanan terawal yang tidak dipangkas, anda boleh menggunakan pemboleh ubah strategy.closedtrades.first_index baharu. Indeks boleh digunakan seperti argumen trade_num dalam panggilan fungsi strategy.closedtrades.*().
Indeks tatasusunan negatif
Dalam Pine v6, fungsi array.get(), array.set(), array.insert() dan array.remove() sekarang boleh menerima argument index negative untuk item rujukan bermula dari akhiran satu tatasusunan, menawarkan jalan yang lebih tepat dan mudah untuk merujukkan elemen tatasusunan dalam keadaan terbalik. Sebagai contoh, panggilan array.get(myArray, -2) mendapatkan elemen kedua hingga akhir dalam myArray, yang bersamaan dengan array.get(myArray, array.size(myArray) – 2).
Untuk kekal termaklum dalam penambahbaikan terkini kepada pengalaman Pine Script®, sentiasa perhatikan Nota keluaran Manual Pengguna — bahagian v6 nya turut mengandungi beberapa perubahan tambahan yang tidak disebut dalam catatan blog ini.
Kami harap anda mendapati ciri-ciri baharu ini berguna seperti yang kami rasakan, dan teruskan menghantar maklum balas dan cadangan anda supaya kami dapat menjadikan platform ini sebaik mungkin. Kami membina TradingView untuk anda dan kami sentiasa teruja mendengar pendapat anda.
— Pasukan TradingView