Downloading...

Helo kepada Skrip Pine v5

Oct 7, 2021

Hari ini, Pine telah dinaiktaraf ke v5! Versi baru bahasa pengaturcaraan penunjuk dan strategi kami membawa pelbagai ciri dan penambahbaikan baru yang menarik. Pine kini lebih hebat daripada sebelumnya, dan perubahan dalam v5 akan membantu kita membawa bahasa ini ke tahap yang baru. Catatan ini memperkenalkan hanya beberapa ciri terkini yang ada; pastikan anda membaca Nota Siaran dan Panduan Migrasi kami.

Penukar v4 ke v5

Skrip Pine sedia ada yang menggunakan Pine versi sebelumnya akan terus berjalan seperti biasa, tetapi kami telah menyediakan alat penukaran di Editor Pine untuk membantu pengekod menukar skrip v4 mereka menjadi v5. Penambahbaikan Pine pada masa depan akan berdasarkan v5 secara eksklusif, jadi kami mencadangkan supaya menukar penunjuk dan strategi anda jika anda ingin mendapat manfaat daripada ciri-ciri baru ini. Alat penukaran v4 kepada v5 tersedia apabila skrip v4 dimuatkan dalam Editor, daripada menu ke bawah Lagi:

Harap maklum bahawa tidak semua kod v4 boleh ditukar secara automatik. Sekiranya anda menghadapi masalah penukaran atau lebih suka menukar skrip anda secara manual, Panduan Migrasi kami yang mendokumentasikan semua perubahan antara v4 dan v5 akan membimbing anda.

Perpustakaan

Tambahan utama kepada Pine yang disertakan dengan v5 ialah perpustakaan. Perpustakaan ialah jenis penerbitan baharu yang membolehkan anda mencipta fungsi tersuai untuk digunakan semula dalam skrip lain. Sebaik sahaja perpustakaan diterbitkan, skrip lain (sama ada penunjuk, strategi, atau perpustakaan lain) boleh mengimportnya dan menggunakan fungsinya. Anda boleh menggunakan perpustakaan untuk memasukkan algoritma kompleks atau fungsi yang kerap digunakan supaya anda, atau seluruh komuniti Pine, boleh menggunakannya semula dengan mudah.

Untuk mula bekerja dengan perpustakaan, lihat halaman Manual Pengguna kami tentang perpustakaan. Pada penghujung siaran ini, anda akan menemui contoh perpustakaan yang diterbitkan oleh ahli pasukan PineCoders kami. Anda boleh melihat perpustakaan yang diterbitkan daripada suapan skrip di sini.

Nilai lalai untuk fungsi yang ditentukan pengguna

Penambahbaikan yang berjalan seiring dengan perpustakaan: nilai lalai boleh ditakrifkan untuk parameter dalam fungsi yang ditentukan pengguna, yang menjadikannya sebagai pilihan. Dalam contoh di bawah, kami mengisytiharkan fungsi tersuai customPow() yang meningkatkan asas kepada kuasa exp. Jika exp tidak dinyatakan apabila fungsi dipanggil, 2 digunakan:

//@version=5
indicator("")
customPow(base, exp = 2) =>
    result = 1
    for i = 1 to exp
        result *= base
plot(customPow(11)) // 11^2
plot(customPow(11, 4)) // 11^4

Switch

Pernyataan Switch adalah tidak sama dengan pernyataan if yang biasa digunakan. Sekiranya anda terpaksa membuat kenyataan besar pernyataan if-else, anda akan menghargai betapa senangnya mencapai hasil yang diinginkan dengan Switch. Anda boleh mengetahui lebih lanjut mengenainya di Manual Rujukan kami. Rujuk contoh kod di bawah. Ia merupakan penunjuk Average True Range terbina dalam kami, yang kini menggunakan pernyataan Switch untuk menyediakan algoritma pelicinan yang berbeza dalam pengiraannya:

//@version=5
indicator(title="Average True Range", shorttitle="ATR", timeframe="")
lengthInput = input.int(title="Length", defval=14, minval=1)
smoothingInput = input.string(title="Smoothing", defval="RMA", options = ["RMA", "SMA", "EMA", "WMA"])

maFunction(source, length) =>
    switch smoothingInput
        "RMA" => ta.rma(source, length)
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        => ta.wma(source, length)

plot(maFunction(ta.tr(true), lengthInput), title = "ATR", color=#B71C1C)

Koleksi Lukisan

Peningkatan kualiti hidup yang besar untuk bekerja dengan lukisan Pine: pembolehubah line.all, label.all, box.all dan table.all baru sentiasa mengandungi ID untuk semua lukisan jenis yang dilukis dengan skrip anda.

Anda boleh menggunakannya, misalnya, untuk memangkas jumlah gambar yang dipaparkan pada carta berdasarkan nilai yang ditentukan pengguna. Dalam skrip di bawah ini, kami menarik garis pada setiap buka harian baru (hingga batas ~ 50, berdasarkan had garis lalai skrip). Kami kemudian memeriksa sama ada bilangan baris yang dibenarkan walaupun input skrip melebih batasan, dan menghapuskan baris tertua jika demikian:

//@version=5
indicator("Daily Open", overlay = true)

qtyOfLinesInput = input.int(10, "Draw only last n lines", minval = 0, maxval = 50)

if ta.change(time("1D"))
    line.new(bar_index, open, bar_index + 1, open, extend = extend.right)
    if array.size(line.all) > qtyOfLinesInput
        line.delete(array.get(line.all, 0))

While

Satu lagi ciri Pine yang ditunggu-tunggu yang disertakan dengan v5 adalah While. Pernyataan While membuat gelung yang akan berhenti apabila syarat itu palsu atau perintah putus digunakan dalam gelung.

Sebagai contoh, berikut adalah petunjuk yang mengira perbezaan antara jarak purata yang perlu kita lihat kembali untuk mencari volum naik dan turun sama dengan jumlah isi bar n terakhir. Semakin jauh kita perlu melihat ke belakang untuk mencari volum naik atau turun, nilainya semakin bearis atau bulis:

//@version=5
var int MAX_BARS_BACK = 500
indicator("Volume bias", max_bars_back = MAX_BARS_BACK)

int lookBackInput = input.int(20, "Volume Look Back (bars)", minval = 2, maxval = int(MAX_BARS_BACK / 4))

// Stop the script if the chart does not contain volume data.
bool noVol = na(volume) and nz(math.sum(nz(volume), 200) == 0, true)
if noVol
    runtime.error("No volume data.")

volumeBias(lookBack, maxLookBack) =>
    bool  barUp = ta.rising(close, 1)
    bool  barDn = ta.falling(close, 1)
    float upVolume = 0.
    float dnVolume = 0.
    float avgVolume = math.sum(nz(volume), lookBack)
    int[] upBarNos = array.new_int(0)
    int[] dnBarNos = array.new_int(0)
    int   bar = 1
    bool  volumeFound = false
    while (not volumeFound) and bar < maxLookBack
        if barUp[bar] and upVolume < avgVolume
            upVolume += nz(volume[bar])
            array.push(upBarNos, bar)
        else if barDn[bar] and dnVolume < avgVolume
            dnVolume += nz(volume[bar])
            array.push(dnBarNos, bar)
        bar += 1
        volumeFound := upVolume >= avgVolume and dnVolume >= avgVolume
    float volumeBias = bar >= maxLookBack ? na : array.avg(dnBarNos) - array.avg(upBarNos)

float bias = volumeBias(lookBackInput, MAX_BARS_BACK)
plot(bias, "Volume Bias", bias > 0 ? color.lime : color.fuchsia)
hline(0)

Gelung While dalam skrip berjalan sehingga volum yang diperlukan ditemui dalam kedua-dua volum atas dan bawah, dan kami tidak melihat ke belakang melepasi bilangan maksimum bar yang dibenarkan. Skrip ini juga mempamerkan ciri lain yang ditambahkan ke Pine v5: runtime.error ().

runtime.error()

Fungsi runtime.error() kini membolehkan anda menghentikan pelaksanaan skrip dan memaparkan mesej ralat pada sebarang syarat yang anda boleh tentukan dalam Pine. Ini berguna untuk pencipta skrip yang ingin menghalang pengguna daripada menggunakan penunjuk mereka secara tidak betul. Sebagai contoh, alat ini juga dapat digunakan sebagai alat debug yang tidak ortodoks, untuk menghentikan pelaksanaan semasa gelung atau dari dalam fungsi.

Untuk menggunakan fungsi baru, hanya perlu memanggil fungsi runtime.error () apabila syarat anda dipenuhi. Apabila ia dilaksanakan, ia akan menghentikan skrip dan memaparkan tanda seru yang biasa di sebelah nama penunjuk. Apabila pengguna mengklik pada ikon tanda seru, mesej yang anda gunakan dalam panggilan fungsi akan muncul.

Kod di bawah adalah penunjuk VWAP tidak lengkap dengan dua kesalahan tersuai. Yang pertama muncul apabila simbol tidak memiliki data volume: VWAP dihitung berdasarkan volume, jadi jika tidak ada volume, skrip tidak dapat berfungsi. Yang kedua muncul apabila rangka masa pada carta 1D atau lebih tinggi. Pengiraan asas VWAP mengumpul data purata bergerak berwajaran volum pada setiap bar baharu dan menetapkan semula pada permulaan hari baru, jadi penunjuk hanya berguna pada rangka masa intrahari.

//@version=5
indicator("VWAP with custom errors")
if na(volume) // Will be true on symbols with no volume data e.g. TVC:SPX
    runtime.error("There is no volume data for this symbol.")
else if timeframe.isdwm // Will be true on 1D and higher timeframes
    runtime.error("Session-based VWAP does not show meaningful data on timeframes >= 1D.
     Please switch to a lower timeframe.")
plot(ta.vwap)

Parameter Strategi baru

Berita baik untuk pengkod strategi! Kami telah menambahkan sejumlah besar pemboleh ubah dan fungsi baru yang memberi anda kebolehlihatan mengenai ciri, statistik, dan metrik dagangan. Nilai mereka diperbaharui ketika emulator broker melaksanakan pesanan anda, jadi anda dapat mengikuti nilai semasa strategi anda berjalan.

Click here to see the Pine Reference Manual for details on each one

strategy.closedtrades.entry_price() / strategy.opentrades.entry_price()

strategy.closedtrades.entry_bar_index() / strategy.opentrades.entry_bar_index()

strategy.closedtrades.entry_time() / strategy.opentrades.entry_time()

strategy.closedtrades.size() / strategy.opentrades.size()

strategy.closedtrades.profit() / strategy.opentrades.profit()

strategy.closedtrades.commission() / strategy.opentrades.commission()

strategy.closedtrades.max_runup() / strategy.opentrades.max_runup()

strategy.closedtrades.max_drawdown() / strategy.opentrades.max_drawdown()

strategy.closedtrades.exit_price()

strategy.closedtrades.exit_bar_index()

strategy.closedtrades.exit_time()

strategy.convert_to_account()

strategy.convert_to_symbol()

strategy.account_currency

 

Namespaces Baru

Komuniti pengekod Pine kami memberitahu kami bahawa mereka menghargai kadar penambahan yang  kami buat pada Pine dalam beberapa tahun kebelakangan ini dan kami berhasrat untuk mengekalkan kadar yang sama pada masa hadapan. Ini, bagaimanapun, mewujudkan aliran berterusan fungsi Pine baharu dan pembolehubah terbina dalam. Untuk menyokong pertumbuhan gila ini, kami perlu menyusun lebih baik ~600 nama semasa yang digunakan dalam bahasa itu. Kami melakukan ini dengan menambahkan ruang nama baru untuk mengelompokkan fungsi dengan cara yang lebih mencerminkan penggunaannya. Banyak nama parameter fungsi juga telah dinamakan semula untuk menjadikannya lebih mudah difahami.

Contoh ruang nama baru adalah ta., yang kini merangkumi semua pemboleh ubah dan fungsi yang berkaitan dengan analisis teknikal. Ini memudahkan anda melayari Manual Rujukan dan mencari semua pemboleh ubah dan fungsi yang mengembalikan nilai penunjuk biasa. Oleh itu, sma () kini ta.sma (). Anda  tidak perlu mengingati ruang nama baru; jika anda menaip nama lama fungsi tanpa ruang namanya dalam Editor dan tekan kekunci pintas Autolengkap (Ctrl + Space atau Cmd + Space pada MacOS), pop timbul yang menunjukkan cadangan padanan muncul:

Begitu juga apabila mencari Manual Rujukan; menaip nama fungsi yang biasa tanpa ruang namanya akan memaparkan nama baharunya. Anda dapat melihat senarai lengkap perubahan pada v5 di Panduan Migrasi kami.

Perpustakaan yang diterbitkan

The following publications are examples of libraries published on TradingView by the PineCoders who help us test new Pine features:

ColorScheme by RicardoSantos

Matrix_Functions_Lib_JD by Duyck

Enchanced_ta by HeWhoMustNotBeNamed

Kami berharap anda mendapati ciri-ciri baru itu berguna. Dan sila teruskan meenghantar maklum balas dan cadangan anda — kami membina TradingView untuk anda, dan kami sentiasa berminat untuk mengetahui pendapat anda tentang kemas kini platform kami.

Look first Then leap

TradingView dibina untuk anda, pastikan anda memanfaatkan semua ciri-ciri hebat kami