FMZ PINE Script dokumentasi

Penulis:Mimpi kecil, Dibuat: 2022-05-06 14:27:06, Diperbarui: 2024-02-23 15:36:48

[TOC]

Kata kunci, tata bahasa, dan pengaturan resume

Struktur kode

Struktur umum yang diikuti oleh kode di Pine:

<version>
<declaration_statement>
<code>

Komentar

Simbol komentar yang didukung oleh FMZ dalam bahasa Pine: single line commentary//Di sini, saya akan menjelaskan lebih lanjut./* */Seperti contoh di bawah ini:

[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)  // 计算MACD指标

/*
plot函数在图表上画出指标线
*/
plot(macdLine, color = color.blue, title='macdLine')
plot(signalLine, color = color.orange, title='signalLine')
plot(histLine, color = color.red, title='histLine')

Versi

Perintah pengkompilasi dalam bentuk berikut memberi tahu pengkompilasi versi mana dari skrip yang ditulis oleh Pine:

//@version=5

Versi v5 secara default dapat dihilangkan dalam kode//@version=5

Pernyataan

  • indicator()
  • strategy()

Pernyataan menentukan tipe skrip, yang juga menentukan apa yang diizinkan di dalamnya, dan bagaimana digunakan dan dieksekusi. Atribut kunci skrip diatur, seperti namanya, di mana akan muncul ketika ditambahkan ke grafik, akurasi dan format nilai yang ditampilkan, dan beberapa nilai yang mengatur perilaku saat dijalankan, seperti jumlah maksimum objek gambar yang akan ditampilkan di grafik. Untuk kebijakan, atribut termasuk parameter yang mengendalikan retrieval, seperti modal awal, komisi, titik geser, dll.indicator()Ataustrategy()Pernyataan tersebut ditulis oleh seorang blogger.

Kode

Baris dalam skrip yang bukan komentar atau instruksi kompilasi adalah kalimat yang mengimplementasikan algoritma skrip. Sebuah kalimat bisa menjadi salah satu dari mereka.

  • Deklarasi Variabel
  • Penetapan ulang variabel
  • Deklarasi fungsi
  • Panggilan fungsi built-in, panggilan fungsi yang didefinisikan pengguna
  • ifforwhileatauswitchStruktur e.g.

Kalimat dapat disusun dengan berbagai cara

  • Beberapa pernyataan dapat diekspresikan dengan satu baris, seperti sebagian besar pernyataan variabel, yang hanya berisi satu baris panggilan fungsi atau pernyataan fungsi satu baris; yang lain, seperti struktur, selalu membutuhkan lebih dari satu baris karena mereka membutuhkan satu blok lokal.
  • Pernyataan dalam ruang lingkup global dari skrip (yaitu bagian yang tidak termasuk dalam bagian) tidak dapat digunakan untuk空格atau制表符(tab) dimulai. Karakter pertama mereka juga harus menjadi karakter pertama baris tersebut. Baris yang dimulai dari posisi pertama baris, oleh definisi, menjadi bagian dari ruang lingkup global skrip.
  • Struktur atau multi-baris pernyataan fungsi selalu membutuhkanlocal blockSebuah blok lokal harus terkuras menjadi satu karakter atau empat ruang (jika tidak, akan diselesaikan sebagai baris kode serial sebelumnya, yang ditentukan sebagai konten lanjutan dari baris kode sebelumnya), dan setiap blok lokal mendefinisikan ruang lingkup lokal yang berbeda.
  • Beberapa kalimat baris tunggal dapat disambung dalam satu baris dengan menggunakan koma ((,) sebagai tanda pemisah.
  • Satu baris dapat berisi komentar atau hanya komentar.
  • Garis juga bisa dibungkus (berlanjut di beberapa baris).

Misalnya, termasuk tiga blok lokal, satu dalam deklarasi fungsi kustom, dua dalam deklarasi variabel menggunakan struktur if, dengan kode sebagai berikut:

indicator("", "", true)             // 声明语句(全局范围),可以省略不写

barIsUp() =>                        // 函数声明(全局范围)
    close > open                    // 本地块(本地范围)

plotColor = if barIsUp()            // 变量声明 (全局范围)
    color.green                     // 本地块 (本地范围)
else
    color.red                       // 本地块 (本地范围)

runtime.log("color", color = plotColor)  // 调用一个内置函数输出日志 (全局范围)

Pergantian kode

Baris panjang dapat dibagi menjadi beberapa baris, atau "dibungkus". Baris yang dibungkus harus menyusut ke dalam jumlah ruang apa pun, asalkan tidak merupakan kelipatan dari 4 (batas ini digunakan untuk menyusut bagian).

a = open + high + low + close

Ini dapat dibungkus sebagai (perhatikan bahwa jumlah ruang yang disempurnakan per baris tidak merupakan kelipatan dari 4):

a = open +
      high +
          low +
             close

Sebuah panggilan plot panjang dapat dibungkus menjadi.

close1 = request.security(syminfo.tickerid, "D", close)      // syminfo.tickerid 当前交易对的日线级别收盘价数据系列
close2 = request.security(syminfo.tickerid, "240", close)    // syminfo.tickerid 当前交易对的240分钟级别收盘价数据系列
plot(ta.correlation(close, open, 100),                       // 一行长的plot()调用可以被包装
   color = color.new(color.purple, 40),
   style = plot.style_area,
   trackprice = true)

Pernyataan dalam deklarasi fungsi yang didefinisikan pengguna juga dapat dibungkus. Namun, karena blok lokal secara sintetis harus dimulai dengan penyusutan ((4 ruang atau 1 karakter), ketika membaginya ke baris berikutnya, bagian lanjutan dari pernyataan harus dimulai dengan lebih dari satu penyusutan ((tidak sama dengan kelipatan 4 ruang); misalnya:

test(c, o) =>
    ret = c > o ?
       (c > o+5000 ? 
          1 :
              0):
       (c < o-5000 ? 
          -1 : 
              0)

a = test(close, open)
plot(a, title="a")

Urutan waktu

Serial waktu bukanlah jenis data atau format, tetapi merupakan konsep struktur dasar dalam bahasa PINE. Serial waktu digunakan untuk menyimpan nilai yang berubah secara berurutan dalam waktu, masing-masing nilai sesuai dengan titik waktu. Serial waktu memiliki struktur yang sangat cocok untuk digunakan untuk memproses, merekam, dan merekam serangkaian data yang berubah seiring waktu. Variabel internalopenMisalnya,openVariabel built-in mencatat harga buka untuk setiap garis K BAR, jika iniopenJadi ini adalah data dari siklus garis K selama 5 menit.openYang tercatat dalam variabel adalah harga awal dari setiap 5 menit K baris BAR (kolom); ketika program strategi Anda sedang dijalankan, referensi dalam kodeopenDengan kata lain, kita menggunakan harga awal dari garis BAR di mana kita berada saat ini. Untuk mengacu pada nilai sebelumnya dalam urutan waktu (nilai masa lalu), kita menggunakan[]Operator sejarah, ketika kebijakan dijalankan pada garis K BAR tertentu.open[1]Ini berarti bahwa harga awal dari garis K BAR sebelumnya adalah garis K BAR saat ini.

MeskipunUrutan waktuSangat mudah untuk mengingat struktur data yang disebut "array", meskipun bahasa PINE juga memiliki jenis arryx. Namun, mereka adalah konsep yang sama sekali berbeda dari urutan waktu.

Perancangan deret waktu seperti ini dapat dengan mudah dihitung dalam kode strategi dan tidak memerlukan struktur loop seperti for, hanya menggunakan fungsi built-in yang menggunakan bahasa PINE.ta.cum(close)Sebagai contoh lain, kita perlu menghitung rata-rata perbedaan antara harga tertinggi dan harga terendah dari 14 baris K terakhir BAR (yaitu 14 baris K BAR terdekat pada saat kode dijalankan) yang dapat ditulis sebagai:ta.sma(high - low, 14)

Hasil panggilan fungsi pada urutan waktu juga akan meninggalkan jejak pada urutan waktu.[]Operator sejarah mengacu pada nilai sebelumnya. Sebagai contoh, untuk menguji apakah harga penutupan baris K BAR saat ini melebihi nilai maksimum dari harga tertinggi dari 10 baris K BAR terakhir (tidak termasuk baris K BAR saat ini), kita dapat menulis sebagaibreach = close > ta.highest(close, 10)[1]Anda bisa menulisnya sebagai:breach = close > ta.highest(close[1], 10)Jadi.ta.highest(close, 10)[1]danta.highest(close[1], 10)Saya tidak tahu apa yang akan terjadi.

Anda dapat memverifikasi dengan kode berikut:

strategy("test pine", "test", true) 

a = ta.highest(close, 10)[1]
b = ta.highest(close[1], 10)

plotchar(true, title="a", char=str.tostring(a), location=location.abovebar, color=color.red)
plotchar(true, title="b", char=str.tostring(b), location=location.belowbar, color=color.green)

Kode pengujian di atas akan mengekspresikan nilai a dan b pada setiap BAR pada urutan waktu yang sesuai, dan Anda dapat melihat bahwa nilai a dan b selalu sama, jadi kedua metode penggambaran ini sama.

Parameter templat dari Pine Language Exchange Library

Peraturan parameter untuk template built-in dari kebijakan PINE "Pine Language Exchange Library".

Pengaturan transaksi

  • Cara pelaksanaannya Model harga penutupan: Model ini dijalankan sebelum BAR saat ini berakhir, dan transaksi dilakukan pada awal BAR akar bawah. Model harga real-time: setiap perubahan harga yang dilakukan model, dengan sinyal untuk segera melakukan transaksi.
  • Nomor Default: Jika instruksi trading tidak menentukan jumlah transaksi, maka transaksi akan dilakukan sesuai dengan jumlah yang ditetapkan.
  • Jumlah pesanan maksimum per transaksi: Berdasarkan transaksi yang sebenarnya, dengan pengaturan parameter ini, menentukan jumlah pesanan maksimum per transaksi, menghindari benturan dengan transaksi tersebut.
  • Jumlah titik harga: berdasarkan定价货币精度Parameter dan parameter ini menentukan harga geser pada saat pesanan dilakukan. Misalnya, penentuan harga dengan akurasi mata uang ditetapkan menjadi 2, yaitu tepat ke tempat kedua dari bilangan kecil, tepat ke 0.01; maka nilai titik geser masing-masing mewakili 0.01 unit harga. Pada saat ini, nilai titik geser ditetapkan menjadi 5, dan harga geser pada saat pesanan adalah 0.05 ((Harga geser menunjukkan harga geser pada saat pesanan untuk lebih baik dan untuk memperhitungkan bagian harga yang lebih tinggi dari transaksi pesanan)).
  • Nomor siklus terpanjang dari variabel: mempengaruhi jumlah garis BAR dari grafik K, denganjavascriptPanggilan dalam kebijakanSetMaxBarLenFungsi yang sama.

Opsi berjangka

  • Kode varietas: Kode kontrak, yang harus disetel jika objek bursa bukan objek bursa langsung.
  • Jumlah minimum tawaran kontrak: jumlah minimum transaksi kontrak saat dipesan.

Opsi disk nyata

  • Memperbaiki kemajuan secara otomatis: Memperbaiki status sebelum kebijakan terakhir berhenti.
  • Jumlah percobaan ulang pesanan: pesanan tidak ditransfer akan membatalkan pesanan dan mencoba melakukan transaksi lagi, parameter ini digunakan untuk membatasi jumlah percobaan ulang maksimum.
  • Interval pertanyaan jaringan (millisecond): hanya berlaku untuk protokol REST, untuk mengontrol interval permintaan jaringan, menghindari permintaan yang terlalu sering dan melampaui batas bursa.
  • Waktu sinkronisasi akun (second): Periode waktu sinkronisasi data akun.
  • Waktu sinkronisasi Posisi Setelah Pendaftaran (milliseconds): Hanya untuk beberapa transaksi yang terjadi karena keterlambatan data, pengaturan waktu sinkronisasi yang lebih besar dapat mengurangi masalah ini.
  • Penggandaan Leverage: Mengatur Penggandaan Leverage.

Perdagangan langsung, pengaturan lainnya

  • Volume transaksi satu tangan: Volume transaksi satu tangan secara default, hanya berlaku untuk transaksi langsung.
  • Jumlah transaksi minimum: Jumlah transaksi minimum.
  • Keakuratan mata uang: Keakuratan harga, yaitu angka-angka kecil harga.
  • Akurasi varietas transaksi: Akurasi unit berikutnya, yaitu bilangan kecil unit berikutnya.
  • Biaya: Untuk menghitung beberapa data berdasarkan pengaturan ini, 0.002 berarti 2 per seribu.
  • Interval statistik laba rugi: hanya digunakan untuk menunjukkan statistik laba rugi pada piringan nyata.
  • Percobaan ulang gagal (millisecond): Interval percobaan ulang ketika permintaan jaringan gagal.
  • Penggunaan agen: hanya berlaku untuk protokol REST.
  • Hide Common Network Errors: Hide Common Error Logs in the Log Area (Menyembunyikan kesalahan log yang sering terjadi di area log).
  • Mengganti alamat basis: hanya berlaku untuk protokol REST.
  • Push notifications: Push notifications: Push notifications to email boxes, dll. Push notifications: Push notifications: Push notifications: Push notifications to email boxes, dll.

Perdagangan

Pemasaran

strategy(title = "open long example", pyramiding = 3)                                // pyramiding 允许的同方向下单的次数
strategy.entry("long1", strategy.long, 0.01)                                         // 市价开多仓,指定分组标签为long1
strategy.entry("long2", strategy.long, 0.02, when = close > ta.ema(close, 10))       // 条件触发,执行下单,市价开多仓
strategy.entry("long3", strategy.long, 0.03, limit = 30000)                          // 指定(较低的)价格,计划下买单订单,等待成交开仓,限价开仓

Perkebunan

strategy(title = "close long example", pyramiding = 2)                              // pyramiding 允许的同方向下单的次数
strategy.entry("long1", strategy.long, 0.1)                                         // 市价开多仓,指定分组标签为long1
strategy.entry("long2", strategy.long, 0.1)                                         // 市价开多仓,指定分组标签为long2
strategy.close("long1", when = strategy.position_size > 0.1, qty_percent = 50, comment = "close buy entry for 50%")   // 平仓,指定平掉分组标签为long1的仓位的50%持仓
strategy.close("long2", when = strategy.position_size > 0.1, qty_percent = 80, comment = "close buy entry for 80%")   // 平仓,指定平掉分组标签为long2的仓位的80%持仓

Mekanisme transaksi

PINE memiliki mekanisme pemegang yang mirip dengan pemegang satu arah. Sebagai contoh, ketika memegang posisi multi-headed ("multi-headed holding"), jika ada pesanan untuk menjual operasi, daftar rencana, dll. (dibalik arah pemegang), maka pemegang pemegang pemegang pemegang pemegang pemegang pemegang pemegang pemegang pemegang pemegang pemegang pemegang pemegang pemegang pemegang pemegang pemegang pemegang).

Daftar jadwal

Saat menggunakan perintah order, jika tidak ditentukan harga apapun, default adalah order dengan harga pasar. Selain harga pasar, Anda juga dapat melakukan order dengan order rencana, yang tidak langsung dioperasikan.Disk nyata / retestingInformasi status waktu (misalnya status saat kebijakan berjalan) terlihat pada tab "Peraturan yang direncanakan" pada halaman pemisah. Sistem hanya akan benar-benar membuat pesanan ketika harga pasar real-time memenuhi kondisi untuk memicu pesanan tersebut. Jadi pesanan ini memiliki sedikit kesesuaian pada harga transaksi.strategy.entryJadi kita bisa menentukan fungsi yang akan kita atur.limitstopParameter.

var isTrade = false 
if not barstate.ishistory and not isTrade
    isTrade := true 
    strategy.entry("test 1", strategy.long, 0.1, stop=close*1.3, comment="test 1 order")                     // stop
    strategy.entry("test 2", strategy.long, 0.2, limit=close*0.7, comment="test 2 order")                    // limit
    strategy.entry("test 3", strategy.short, 0.3, stop=close*0.6, limit=close*1.4, comment="test 3 order")   // stop-limit    
  • Perintah limit

    Menetapkan batas harga untuk pesanan, yaitu ketika pesanan adalah pembayaran.directionParameternya adalahstrategy.longJika harga pasar saat ini lebih rendah dari harga tersebut, maka order akan dipicu. Bila pesanan adalah pesanan jual (yaitudirectionParameternya adalahstrategy.shortJika harga pasar saat ini lebih tinggi dari harga tersebut, maka order akan dipicu.

  • stop order

    Menetapkan harga stop loss untuk pesanan, ketika pesanan adalah pembayaran, pesanan hanya akan dipicu ketika harga pasar saat ini lebih tinggi dari harga tersebut. Saat pesanan adalah pesanan jual beli, pesanan hanya akan dipicu jika harga pasar saat ini lebih rendah dari harga tersebut.

  • Stop-limit Perintah

    Dapat disetel pada saat yang samalimitstopParameter, pemesanan dipicu pada harga pertama yang memenuhi syarat.

Pernyataan, kata kunci struktur logis

VAR

var adalah kata kunci yang digunakan untuk mengalokasikan dan menginisialisasi variabel sekaligus. Biasanya, sintaksis pembagian variabel tanpa kata kunci var akan menyebabkan nilai variabel tertutup setiap kali data diperbarui. Sebaliknya, ketika menggunakan kata kunci var untuk mendistribusikan variabel, meskipun data diperbarui, mereka masih dapat mempertahankan statusnya, hanya mengubahnya ketika kondisi dalam if-expressions terpenuhi.

var variable_name = expression

Penjelasan:

  • variable_name- Sebarang nama variabel pengguna yang diizinkan di Pine Script (bisa berisi huruf besar dan kecil, angka, dan tanda tipis, tetapi tidak dapat dimulai dengan angka)
  • expression- Setiap ekspresi aritmatika, seperti mendefinisikan variabel biasa. Menghitung ekspresi dan mengalihkannya ke variabel sekali.

Contoh

// Var keyword example
var a = close
var b = 0.0
var c = 0.0
var green_bars_count = 0
if close > open
    var x = close
    b := x
    green_bars_count := green_bars_count + 1
    if green_bars_count >= 10
        var y = close
        c := y
plot(a, title = "a")
plot(b, title = "b")
plot(c, title = "c")

Variabel a mempertahankan harga penutupan dari baris pertama dari setiap baris baris dalam seri. Variabel aluminium b mempertahankan harga penutupan bar harga aluminium hijau pertama dalam seri. Variabel berwarna c berwarna c mempertahankan harga penutupan dari berwarna hijau berwarna c yang merupakan yang kesepuluh dalam seri tersebut.

Di FMZ, model harga real-time, model harga penutupan, dan model harga akhir dibagi menjadi dua, yaitu model harga real-time dan model harga penutupan.varvaripVariabel yang dinyatakan kami uji dengan kode berikut.

strategy("test pine", "test 1", true) 

// 测试 var varip
var i = 0
varip ii = 0

// 将策略逻辑每轮改变的i、ii打印在图上
plotchar(true, title="ii", char=str.tostring(ii), location=location.abovebar, color=color.red)
plotchar(true, title="i", char=str.tostring(i), location=location.belowbar, color=color.green)

// 每轮逻辑执行都给i、ii递增1
if true
    i := i + 1
    ii := ii + 1
  • Model harga real-time Kode pengujian di atas dibagi menjadi dua tahap saat dijalankan: 1, K-line sejarah; 2, K-line real-time.varvaripVariabel i, ii yang dinyatakan akan melakukan operasi inkremental setiap kali kode kebijakan dijalankan karenaif trueJadi tentu saja menjalankan blok kode kondisi yang sesuai). Jadi kita dapat melihat bahwa angka-angka yang ditampilkan pada hasil retrieval K-line BAR masing-masing meningkat menjadi 1. Ketika fase K-line sejarah berakhir, fase K-line real-time dimulai.varvaripVariabel yang diproklamasikan mulai berubah. Karena model harga real-time, setiap perubahan harga dalam garis KBAR akan mengeksekusi kode strategi berulang kali.i := i + 1danii := ii + 1Perbedaan adalah bahwa ii setiap kali dimodifikasi. Meskipun setiap kali dimodifikasi, i akan kembali ke nilai sebelumnya saat menjalankan logika strategi pada putaran berikutnya, dan tidak akan diperbarui sampai garis K saat ini BAR habis (yaitu tidak kembali ke nilai sebelumnya saat menjalankan logika strategi pada putaran berikutnya).

  • Model Harga Penutupan Karena model harga penutupan hanya menjalankan satu strategi logis setiap kali garis K BAR berakhir. Jadi dalam model harga penutupan, tahap garis K historis dan fase garis K real-time,varvaripVariabel yang dinyatakan dalam contoh di atas secara inkremental menunjukkan konsistensi yang sempurna, yaitu setiap garis K BAR bertambah 1 {\displaystyle 1}.

bermacam-macam

varip (var intrabar persist) adalah kata kunci yang digunakan untuk mengalokasikan dan menginisialisasi variabel sekaligus. Ini mirip dengan kata kunci var, tetapi variabel yang menggunakan deklarasi varip mempertahankan nilainya di antara pembaruan baris K secara real-time.

varip variable_name = expression

Penjelasan:

  • variable_name- Sebarang nama variabel pengguna yang diizinkan dalam skrip Pine (bisa berisi huruf besar dan kecil, angka, dan garis tipis, tetapi tidak dapat dimulai dengan angka).
  • expression- Setiap ekspresi aritmatika, seperti ketika mendefinisikan variabel biasa. Pada baris K pertama, ekspresi hanya dihitung sekali dan diberikan kepada variabel sekali.

Contoh

// varip
varip int v = -1
v := v + 1
plot(v)

Saat menggunakan var, grafik akan mengembalikan nilai bar_index. Menggunakan varip, perilaku yang sama akan terjadi pada garis K sejarah, tetapi pada garis K real-time, grafik akan mengembalikan satu nilai, yang meningkat satu untuk setiap tik.

PenjelasanHanya dapat digunakan dengan tipe sederhana, seperti float, int, boolean, string, dan array dari jenis tersebut.

benar

Menunjukkan nilai dari variabel tipe Boolean, atau ketika ekspresi digunakanPerbandinganatauLogikaNilai yang dapat dihitung pada operator.

PenjelasanLihat juga:PerbandinganOperator danLogikaDeskripsi operator.

Sampai jumpa lagi bool

palsu

Menunjukkan nilai dari variabel tipe Boolean, dan hasil dari operasi perbandingan, operasi logis.

PenjelasanLihat juga:PerbandinganOperator danLogikaDeskripsi operator.

Sampai jumpa lagi bool

Jika

If statement mendefinisikan blok kalimat yang harus dieksekusi ketika memenuhi kondisi ekspresi. Bahasa skrip Pine versi 4 memungkinkan Anda menggunakan tata bahasa else if.

Kode umum berasal dari:

var_declarationX = if condition
    var_decl_then0
    var_decl_then1
    ...
    var_decl_thenN
    return_expression_then
else if [optional block]
    var_decl_else0
    var_decl_else1
    ...
    var_decl_elseN
    return_expression_else
else
    var_decl_else0
    var_decl_else1
    ...
    var_decl_elseN
    return_expression_else

Penjelasan var_declarationX- Variabel ini mengambil nilai dari pernyataan ifcondition- Jika kondisi adalah benar, gunakan blok kalimatthenLogika dalam (((var_decl_then0var_decl_then1Jika kondisi false, gunakan blok kalimat.else ifAtauelseLogika dalam (((var_decl_else0var_decl_else1Dan sebagainya).return_expression_then , return_expression_else- Ekspresi terakhir dalam modul atau ekspresi dari blokelse akan mengembalikan nilai akhir dari pernyataan tersebut. Jika variabel dinyatakan pada akhir, nilainya akan menjadi nilai hasil.

Jenis nilai yang dikembalikan untuk pernyataan if tergantung padareturn_expression_thendanreturn_expression_elseJenis. Pada saat berjalan pada TradingView, jenis mereka harus cocok: tidak mungkin untuk mengembalikan nilai bulat dari then statement block ketika Anda memiliki nilai string pada blokelse. Pada saat berjalan pada FMZ, contoh berikut tidak akan memberikan kesalahan, ketika nilai y diambil sebagai "open", nilai ketika plot digambar adalah n/a.

Contoh

// This code compiles
x = if close > open
    close
else
    open  

// This code doesn’t compile by trading view
// y = if close > open
//     close
// else
//     "open"
plot(x)

Bisa dihilangkanelseBlok. Dalam hal ini, jika kondisinya false, variabel var_declarationX akan diberikan ambang kosong ((na, false atau ):

Contoh

// if
x = if close > open
    close
// If current close > current open, then x = close.
// Otherwise the x = na.
plot(x)

Anda dapat menggunakan beberapa else if block atau tidak menggunakannya sama sekali. then , else if , else if , else if , else if , else if , else if , else if , else if .

Contoh

// if
x = if open > close
    5
else if high > low
    close
else
    open
plot(x)

Tidak bisa diabaikanifNilai hasil dari pernyataan ((var_declarationX= dapat diabaikan) ). Jika Anda membutuhkan efek samping dari ekspresi, itu mungkin berguna, misalnya dalam perdagangan strategi:

Contoh

if (ta.crossover(high, low))
    strategy.entry("BBandLE", strategy.long, stop=low)
else
    strategy.cancel(id="BBandLE")

Jika kalimat dapat saling memuat:

Contoh

// if
float x = na
if close > open
    if close > close[1]
        x := close
    else
        x := close[1]
else
    x := open
plot(x)

untuk

Struktur 'for' memungkinkan untuk mengulangi beberapa kalimat:

[var_declaration =] for counter = from_num to to_num [by step_num]
    statements | continue | break
    return_expression

var_declaration- Variabel opsional yang dinyatakan, yang akan ditugaskan sebagai nilai return_expression pada loop back.counter- Menyimpan variabel dari nilai penghitung loopback, meningkat/kurang 1 atau step_num nilai pada setiap iterasi loopback;from_num- Nilai awal dari counter. Mengizinkan penggunaan int/float threshold/ekspresi.to_num- Nilai akhir dari counter; loop terputus ketika counter lebih besar dari to_num (atau lebih kecil dari to_num dalam kasus from_num > to_num); penggunaan int/float thresholds/ekspresi yang diizinkan, tetapi mereka hanya dinilai pada iterasi pertama loop;step_num- Nilai meningkat/mengurangi dari kalkulator. Itu adalah opsional. Nilai default adalah +1 atau-1, tergantung pada yang terbesar dari from_num atau to_num. Ketika digunakan, kalkulator juga meningkat/mengurangi berdasarkan yang terbesar dari from_num atau to_num, sehingga simbol +/- untuk step_num adalah opsional.statements | continue | break- Jumlah kalimat yang diinginkan, atau kata kunci "continue" atau "break" yang dapat dikunci menjadi 4 ruang atau tab;return_expression- Nilai balik dari loop, jika ada, diberikan kepada variabel dalam var_declaration. Jika loop keluar karena kata kunci "continue loop" atau "break loop", nilai balik dari loop adalah nilai balik dari variabel terakhir yang diberikan nilai sebelum loop keluar.continue- Kata kunci yang hanya dapat digunakan dalam lingkaran kembali. Itu menyebabkan pengulangan lingkaran kembali berikutnya dijalankan.break- Kata kunci untuk keluar dari lingkaran kembali.

Contoh

// Here, we count the quantity of bars in a given 'lookback' length which closed above the current bar's close
qtyOfHigherCloses(lookback) =>
    int result = 0
    for i = 1 to lookback
        if close[i] > close
            result += 1
    result
plot(qtyOfHigherCloses(14))

Sampai jumpa lagi for...in while

untuk... dalam

for...inStruktur memungkinkan beberapa pernyataan untuk dilakukan berulang untuk setiap elemen dalam suatu array. Ia dapat digunakan bersama dengan parameter manapun:array_element, atau digunakan bersama dengan dua parameter:[index, array_element]❏ Bentuk kedua tidak mempengaruhi fungsi loop. ❏ Ini melacak indeks iterasi saat ini pada variabel pertama dari modul. ❏ Bentuk kedua tidak mempengaruhi fungsi loop. ❏ Bentuk kedua tidak mempengaruhi fungsi loop. ❏ Bentuk kedua tidak mempengaruhi fungsi loop. ❏ Bentuk kedua tidak mempengaruhi fungsi loop. ❏ Bentuk kedua tidak mempengaruhi fungsi loop.

[var_declaration =] for array_element in array_id
    statements | continue | break
    return_expression

[var_declaration =] for [index, array_element] in array_id
    statements | continue | break
    return_expression

var_declaration- Deklarasi variabel opsional yang akan diberikan pada loopreturn_expressionNilai tersebut adalah:index- Mengikuti variabel opsional dari indeks iterasi saat ini. Index dimulai dari 0. Variabel tidak dapat diubah dalam lingkaran.array_elementPada dasarnya, ini adalah bagian dari sebuah kelompok.array_element- berisi variabel dari setiap elemen array berturut-turut yang akan diproses dalam loop. Variabel ini tidak dapat diubah dalam loop.array_id- Array ID yang diulang kembali.statements | continue | break- Jumlah kalimat yang diinginkan, atau kata kunci "continue" atau "break" yang dapat dikunci menjadi 4 ruang atau tab;return_expression- Nilai balik dari siklus diberikan kepadavar_declarationVariabel di dalamnya, jika ada. Jika loop keluar karena kata kunci "continue loop" atau "break loop", maka nilai yang dikembalikan oleh loop adalah variabel yang diberi nilai terakhir sebelum loop keluar.continue- Kata kunci yang hanya dapat digunakan dalam lingkaran kembali. Itu menyebabkan pengulangan lingkaran kembali berikutnya dijalankan.break- Kata kunci untuk keluar dari lingkaran kembali.

Hal ini memungkinkan untuk memodifikasi elemen array atau ukurannya dalam loop. Di sini, kita menggunakanfor...inBentuk parameter tunggal untuk menentukan berapa banyak baris K yang memiliki nilai OHLC yang lebih besar dari SMA dari ambang dekat:

Contoh

// Here we determine on each bar how many of the bar's OHLC values are greater than the SMA of 'close' values
float[] ohlcValues = array.from(open, high, low, close)
qtyGreaterThan(value, array) =>
    int result = 0
    for currentElement in array
        if currentElement > value
            result += 1
        result
plot(qtyGreaterThan(ta.sma(close, 20), ohlcValues))

Di sini, kita menggunakan dua bentuk parameter for...in untuk membuat kitaisPosNilai dari array diatur sebagaitrueSaat mereka berada di tempat kami,valuesArrayNilai yang sesuai dalam arithmetic adalah:

Contoh

// for...in
var valuesArray = array.from(4, -8, 11, 78, -16, 34, 7, 99, 0, 55)
var isPos = array.new_bool(10, false)  

for [index, value] in valuesArray
    if value > 0
        array.set(isPos, index, true)  

if barstate.islastconfirmedhistory
    runtime.log(str.tostring(isPos))

Sampai jumpa lagi for while array.sum array.min array.max

sementara

whilePernyataan memungkinkan pengulangan kondisi pada blok kode lokal.

variable_declaration = while boolean_expression
    ...
    continue
    ...
    break
    ...
    return_expression

Penjelasan:variable_declaration- Deklarasi variabel opsional.return expressionAnda dapat memberikan nilai initialization untuk variabel ini.boolean_expression- Jika benar, lakukanwhileBlok lokal dari kalimat tersebut. Jika false, diwhileSetelah kalimat, lanjutkan dengan mengeksekusi skrip.continue - continueKata kunci menyebabkan cabang berputar ke iterasi berikutnya.break - breakKata kunci yang menyebabkan penghentian loop.whileSetelah kalimat, lanjutkan.return_expression- DisediakanwhileKata-kata yang dikembalikan adalah baris opsional.

Contoh

// This is a simple example of calculating a factorial using a while loop.
int i_n = input.int(10, "Factorial Size", minval=0)
int counter   = i_n
int factorial = 1
while counter > 0
    factorial := factorial * counter
    counter   := counter - 1

plot(factorial)

PenjelasanAwalnyawhileBlok kode lokal setelah baris harus dikompres menjadi empat ruang atau satu karakter.whileAnda bisa melihat gambarnya di bawah ini.whileEkspresi Boolean berikutnya harus akhirnya berubah menjadi false, atau harus dijalankanbreak

Pindah

Operator switch memindahkan kontrol ke salah satu dari beberapa kalimat berdasarkan nilai kondisi dan ekspresi.

[variable_declaration = ] switch expression
    value1 => local_block
    value2 => local_block
    ...
    => default_local_block

[variable_declaration = ] switch
    boolean_expression1 => local_block
    boolean_expression2 => local_block
    ...
    => default_local_block

Di sini, Anda dapat melihat beberapa gambar yang menarik.

Contoh

// Switch using an expression

string i_maType = input.string("EMA", "MA type", options = ["EMA", "SMA", "RMA", "WMA"])

float ma = switch i_maType
    "EMA" => ta.ema(close, 10)
    "SMA" => ta.sma(close, 10)
    "RMA" => ta.rma(close, 10)
    // Default used when the three first cases do not match.
    => ta.wma(close, 10)

plot(ma)

"Switch tanpa ekspresi:

Contoh

strategy("Switch without an expression", overlay = true)

bool longCondition  = ta.crossover( ta.sma(close, 14), ta.sma(close, 28))
bool shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))

switch
    longCondition  => strategy.entry("Long ID", strategy.long)
    shortCondition => strategy.entry("Short ID", strategy.short)

Kembali nilaiNilai dari ungkapan terakhir dalam blok kalimat lokal yang dijalankan.

PenjelasanHanya bisa dilakukanlocal_blockContoh ataudefault_local_blockSalah satunya.default_local_blockHanya dengan=>Tanda-tanda digabungkan, dan hanya dieksekusi jika blok sebelumnya tidak dijalankan.switchHasil pernyataan diberikan kepada variabel dan tidak ditentukandefault_local_blockJika tidak dilaksanakan,local_blockJika tidak, maka kalimat itu akan kembali.naAkan.switchHasil dari pernyataan diberikan kepada variabel, semualocal_blockContoh harus mengembalikan nilai dengan tipe yang sama.

Sampai jumpa lagi if ?:

seri

series adalah kata kunci yang menunjukkan jenis seri data.seriesKata kunci biasanya tidak diperlukan.

Operator

=

Digunakan untuk memberi nilai pada variabel, tetapi hanya ketika variabel dinyatakan (untuk pertama kalinya).

:=

Operator penugasan, memberikan penugasan pada variabel di sebelah kiri.

!=

Tidak sama dengan. berlaku untuk semua jenis ekspresi.

expr1 != expr2

Kembali nilaiNilai Boolean, atau serangkaian nilai Boolean.

%

Modul ((bilangan bilangan bulat) ⇒ digunakan untuk ungkapan angka ⇒

expr1 % expr2

Kembali nilaiAngka bulat atau nilai fluktuasi, atau rentang nilai.

PenjelasanDalam skrip Pine, ketika menghitung sisa bilangan bulat, pedagang akan terpotong; yaitu, menempatkannya ke dalam angka absolut terendah; nilai yang diperoleh akan memiliki simbol yang sama dengan dividen.

Contoh: -1 % 9 = -1 - 9 * truncate ((-1/9) = -1 - 9 * truncate ((-0.111) = -1 - 9 * 0 = -1.

%=

Nomor modular. Untuk ekspresi numerik.

expr1 %= expr2

Contoh

// Equals to expr1 = expr1 % expr2.
a = 3
b = 3
a %= b
// Result: a = 0.
plot(a)

Kembali nilaiAngka bulat atau nilai fluktuasi, atau rentang nilai.

*

Perkalian.. Untuk ekspresi numerik..

expr1 * expr2

Kembali nilaiAngka bulat atau nilai fluktuasi, atau rentang nilai.

*=

Penggambaran perkalian.

expr1 *= expr2

Contoh

// Equals to expr1 = expr1 * expr2.
a = 2
b = 3
a *= b
// Result: a = 6.
plot(a)

Kembali nilaiAngka bulat atau nilai fluktuasi, atau rentang nilai.

+

Tambahkan atau satuan nomor asli.

expr1 + expr2
+ expr

Kembali nilaiSistem biner dari string+Mengembalikan gabungan dari express1 dan express2 Nomor mengembalikan bilangan bulat atau nilai titik didih, atau rentang nilai: Bilal +'kembali express1 plus express2. Satu kata + satu kata kembali express (tidak menambahkan apa pun pada simetri operator satu kata).

PenjelasanAnda dapat menggunakan operator aritmatika dengan angka serta baris variabel. Operator diterapkan pada elemen jika baris bilangan digunakan.

+=

Penggambaran kata ganti.

expr1 += expr2

Contoh

// Equals to expr1 = expr1 + expr2.
a = 2
b = 3
a += b
// Result: a = 5.
plot(a)

Kembali nilaiUntuk string, kembalikan serangkaian expres1 dan expres2. Untuk angka, kembalikan bilangan bulat atau nilai floating point, atau rangkaian nilai.

PenjelasanAnda dapat menggunakan operator aritmatika dengan angka serta baris variabel. Operator diterapkan pada elemen jika baris bilangan digunakan.

-

Hukum pengurangan atau satuan negatif.

expr1 - expr2
- expr

Kembali nilaiMengembalikan bilangan bulat atau nilai floating point, atau rentang nilai: Benzene binomial +'kembali express1 dikurangi express2. Satu Yuan-Mengembalikan negasi dari express.

PenjelasanAnda dapat menggunakan operator aritmatika dengan angka serta baris variabel. Operator diterapkan pada elemen jika baris bilangan digunakan.

-=

Pengurangan fungsi......

expr1 -= expr2

Contoh

// Equals to expr1 = expr1 - expr2.
a = 2
b = 3
a -= b
// Result: a = -1.
plot(a)

Kembali nilaiAngka bulat atau nilai fluktuasi, atau rentang nilai.

/

Pengecualian. ====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

expr1 / expr2

Kembali nilaiAngka bulat atau nilai fluktuasi, atau rentang nilai.

/=

Selain penunjukan. ⇒ digunakan untuk ekspresi numerik.

expr1 /= expr2

Contoh

// Equals to expr1 = expr1 / expr2.
a = 3
b = 3
a /= b
// Result: a = 1.
plot(a)

Kembali nilaiAngka bulat atau nilai fluktuasi, atau rentang nilai.

<

Lebih kecil dari. Berlaku untuk ekspresi numerik.

expr1 < expr2

Kembali nilaiNilai Boolean, atau serangkaian nilai Boolean.

<=

Lebih kecil dari atau sama dengan.

expr1 <= expr2

Kembali nilaiNilai Boolean, atau serangkaian nilai Boolean.

==

Ini sama dengan. yang dapat digunakan untuk semua jenis ekspresi.

expr1 == expr2

Kembali nilaiNilai Boolean, atau serangkaian nilai Boolean.

=>

Operator '=>' digunakan untuk deklarasi fungsi yang didefinisikan pengguna danswitchSaya tidak tahu apa yang terjadi.

Fungsi yang dinyatakan dalam bahasa Inggris adalah:

<identifier>([<parameter_name>[=<default_value>]], ...) =>
    <local_block>
    <function_result>

Satu<local_block>Kata-kata ini memiliki angka nol atau lebih dari kata Pine.<function_result>Sebuah variabel, sebuah ekspresi, atau sebuah elemen.

Contoh

// single-line function
f1(x, y) => x + y
// multi-line function
f2(x, y) => 
    sum = x + y
    sumChange = ta.change(sum, 10)
    // Function automatically returns the last expression used in it
plot(f1(30, 8) + f2(1, 3))

PenjelasanAnda dapat mempelajari lebih lanjut tentang fungsi yang didefinisikan pengguna di halaman deklarasi dan skrip di manual pengguna.

>

Lebih besar dari. Untuk ekspresi numerik.

expr1 > expr2

Kembali nilaiNilai Boolean, atau serangkaian nilai Boolean.

>=

Lebih besar dari atau sama dengan.

expr1 >= expr2

Kembali nilaiNilai Boolean, atau serangkaian nilai Boolean.

?:

Operator kondisi tiga kata.

expr1 ? expr2 : expr3

Contoh

// Draw circles at the bars where open crosses close
s2 = ta.cross(open, close) ? math.avg(open,close) : na
plot(s2, style=plot.style_circles, linewidth=2, color=color.red)  

// Combination of ?: operators for 'switch'-like logic
c = timeframe.isintraday ? color.red : timeframe.isdaily ? color.green : timeframe.isweekly ? color.blue : color.gray
plot(hl2, color=c)

Kembali nilaiJika expres1 dinilai benar, expres2 akan dinilai benar, jika tidak, expres3 akan dinilai benar. Nilai nol ((0 dan NaN+, Infinity,-Infinity) dianggap salah, dan semua nilai lainnya adalah benar.

PenjelasanJika Anda tidak membutuhkannya, gunakan na sebagai cabang dari else. Anda dapat menggunakan dua atau lebih operator: untuk mencapai kalimat yang mirip dengan kata sandi (lihat contoh di atas). Anda dapat menggunakan operator aritmatika dengan angka serta baris variabel. Operator diterapkan pada elemen jika baris bilangan digunakan.

Sampai jumpa lagi na

[]

Serial subtitle↑ memberikan akses ke nilai sebelumnya dari seri expr1↑ expr2 adalah jumlah k baris yang lalu, yang harus menjadi nilai↑ float akan disampingkan↑

expr1[expr2]

Contoh

// [] can be used to "save" variable value between bars
a = 0.0 // declare `a`
a := a[1] // immediately set current value to the same as previous. `na` in the beginning of history
if high == low // if some condition - change `a` value to another
    a := low
plot(a)

Kembali nilaiSebuah seri nilai.

Sampai jumpa lagi math.floor

dan

Logika AND‬ digunakan untuk ekspresi Boolean‬.

expr1 and expr2

Kembali nilaiNilai Boolean, atau serangkaian nilai Boolean.

atau

Logika OR↑ berlaku untuk ekspresi Boolean↑

expr1 or expr2

Kembali nilaiNilai Boolean, atau serangkaian nilai Boolean.

Tidak

Permintaan logis sebaliknya ((NOT) ⇒ berlaku untuk ekspresi Boolean ⇒

not expr1

Kembali nilaiNilai Boolean, atau serangkaian nilai Boolean.

Kata kunci tipe data

bool

Kata kunci yang digunakan untuk menyatakan variabel atau parameter secara eksplisit. Variabel "Bool" dapat memiliki nilai true, false atau na.

Contoh

// bool
bool b = true    // Same as `b = true`
b := na
plot(b ? open : close)

PenjelasanMengutip tipe secara jelas dalam deklarasi variabel adalah opsional, kecuali jika ini initialized dengan na. Baca lebih lanjut tentang tipe Pine di halaman manual pengguna sistem tipe.

Sampai jumpa lagi var varip int float color string true false

int

Kata kunci dari tipe int ((integer) yang digunakan untuk menyatakan variabel atau parameter secara eksplisit.

Contoh

// int
int i = 14    // Same as `i = 14`
i := na
plot(i)

PenjelasanMengutip tipe secara jelas dalam deklarasi variabel adalah opsional, kecuali jika ini initialized dengan na. Baca lebih lanjut tentang tipe Pine di halaman manual pengguna sistem tipe.

Sampai jumpa lagi var varip float bool color string

mengambang

Kata kunci tipe float float (float point) yang digunakan untuk menyatakan variabel atau parameter secara eksplisit.

Contoh

// float
float f = 3.14    // Same as `f = 3.14`
f := na
plot(f)

PenjelasanMengutip tipe secara eksplisit dalam deklarasi variabel adalah opsional, kecuali jika ini initialized dengan na.

Sampai jumpa lagi var varip int bool color string

string

Kata kunci untuk tipe "string" yang secara eksplisit menyatakan variabel atau parameter.

Contoh

// string
string s = "Hello World!"    // Same as `s = "Hello world!"`
// string s = na // same as "" 
plot(na, title=s)

PenjelasanMengutip tipe secara jelas dalam deklarasi variabel adalah opsional, kecuali jika ini initialized dengan na. Baca lebih lanjut tentang tipe Pine di halaman manual pengguna sistem tipe.

Sampai jumpa lagi var varip int float bool str.tostring str.format

warna

Kata kunci untuk tipe "color" yang secara eksplisit menyatakan variabel atau parameter.

Contoh

// color
color textColor = color.green
if barstate.islastconfirmedhistory
    runtime.log("test", textcolor = textColor)

PenjelasanAksara warna memiliki format berikut: #RRGGBB atau #RRGGBBAA. Huruf mewakili nilai enam belas digit dari 00 hingga FF (dari 0 hingga 255 dalam sistem desimal), di mana RR, GG dan BB adalah nilai dari red, green, dan blue component warna. AA adalah opsional untuk transparansi warna (atau alpha component), di mana 00 tidak terlihat, FF tidak transparan. Ketika AA tidak disediakan, menggunakan FF. Huruf enam belas digit dapat ditulis besar atau kecil. Mengutip tipe secara jelas dalam deklarasi variabel adalah opsional, kecuali jika ini initialized dengan na. Baca lebih lanjut tentang tipe Pine di halaman manual pengguna sistem tipe.

Sampai jumpa lagi var varip int float string color.rgb color.new

Array

Kata kunci dari tipe array array array yang digunakan untuk menyatakan variabel atau parameter secara eksplisit.array.new<type>,array.fromFungsi membuat objek array ((atau ID)).

Contoh

// array
array<float> a = na
a := array.new<float>(1, close)
plot(array.get(a, 0))

PenjelasanObjek array selalu dalam bentuk array berurutan.

Sampai jumpa lagi var array.new array.from

Fungsi internal

Mengirim parameter saat memanggil fungsi, Anda dapat menentukan penunjukan nama parameter, Anda dapat mengirim variabel langsung di lokasi parameter yang sesuai, dan juga mendukung penggunaan campuran. Misalnya:

plot(close, title="test plot")     // 直接传参数 close ;指定参数 title ,赋值字符串"test plot"

Setelah parameter diberi nama, tidak dapat lagi ditransfer secara langsung sebagai parameter. Semua parameter yang ditransfer harus ditulis dalam bentuk parameter diberi nama.

// plot(close, title="test", color.red)    // 虽然plot第三个参数是颜色值,但是这样写就会报错
plot(close, title="test", color=color.red) // 正确写法
plot(close, "test", color.red)             // 正确写法

jangka waktu

waktu.dalam_detik

akan dikirimkan ketimeframePeriode waktu parameter dikonversi menjadi detik.

timeframe.in_seconds(timeframe)

Contoh

// Get chart timeframe:
i_tf = input.timeframe("1D")

// Convert timeframe to the int value (number of seconds in 1 Day):
tf = timeframe.in_seconds(i_tf)

plot(tf)

Kembali nilai timeframeInt adalah jumlah detik dalam satu baris K.

Parameter

  • timeframe(simple string) Periode waktu↑ opsional↑ default adalah timeframe.period↑

PenjelasanUntuktimeframe>= 1 M Fungsi menghitung detik berdasarkan 30.4167 (365/12) hari dalam sebulan.

Sampai jumpa lagi input.timeframe timeframe.period

Tick

ticker.heikinashi

Membuat kode pengidentifikasi meminta rata-rata nilai baris K yang halus.

ticker.heikinashi(symbol)

Contoh

heikinashi_close = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close)

heikinashi_aapl_60_close = request.security(ticker.heikinashi(syminfo.tickerid), "60", close)
plot(heikinashi_close)
plot(heikinashi_aapl_60_close)

Kembali nilai 股票代码的字符串值,可以提供给request.security函数。

Parameter

  • symbol(simple string) Pengidentifikasi kode barang.

Sampai jumpa lagi syminfo.tickerid syminfo.ticker request.security

permintaan

request.data

Permintaan data eksternal.

request.data(url, attribute)

Contoh

/*backtest
start: 2022-01-26 09:00:00
end: 2024-02-01 15:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
*/

// 图表地址https://www.datadata.cn/queries/a10ea45c-1674-48ef-b414-cc17a7e4a548
var chart_data = "https://www.datadata.cn/api/v1/query/a10ea45c-1674-48ef-b414-cc17a7e4a548/data"
add_investor = request.data(chart_data, "$.add_investor")
idx_price = request.data(chart_data, "$.close_price")

plot(add_investor, "股市新增人口")
plot(idx_price, "股指价格")
// 反指交易
avg_investor = ta.ema(add_investor[1], 30)
if strategy.position_size == 0
    if add_investor > avg_investor*1.1
        runtime.log("新增人口:", add_investor, "近30天平均:", avg_investor, "#ff0000")
        strategy.entry("Enter Short", strategy.short)
    else if add_investor < avg_investor*0.9
        runtime.log("新增人口:", add_investor, "近30天平均:", avg_investor, "#ff0000")
        strategy.entry("Enter Long", strategy.long)

Kembali nilaiParameterattributeSerial data yang ditentukan.

Parameter

  • url(simple string) Url sumber data yang diminta, format data sumber data yang dijawab harus memenuhi persyaratan (minimal termasuk atribut time、data):{"data": [], "schema": ["time", "data"]}◦ Contoh format data yang dapat digunakan:
    {
        "data": [
            [1430438400000, "2015年04月", "{\"add_investor\" : 497.53, \"close_price\" : 4441.655}"],
            [1433116800000, "2015年05月", "{\"add_investor\" : 415.87, \"close_price\" : 4611.744}"]
            // ...
        ],
        "schema": ["time", "date", "data"]
    }  
    
  • attribute(simple string) Menentukan nama atribut yang akan mengembalikan data yang dibutuhkan; misalnya:"$.add_investor"Menggunakan$.Sebagai kata pengantar, nama atribut konsisten dengan atribut dalam data field dalam data yang dijawab pada sumber data yang diminta

request.security

Anda bisa memilih jenis atau resolusi yang berbeda.

request.security(symbol, timeframe, expression, gaps, lookahead, ignore_invalid_symbol, currency) 

Contoh

s = request.security(syminfo.tickerid, "D", close)   // 1 Day
plot(s)

expr = ta.sma(close, 10)
s1 = request.security(syminfo.tickerid, "240", expr) // 240 Minutes
plot(s1)

// To avoid difference in calculation on history/realtime you can request not latest values and use merge strategy flags as follows:
s2 = request.security(syminfo.tickerid, "D", close[1], barmerge.gaps_off, barmerge.lookahead_on)
plot(s2)
f() => [open, high]
[o, h] = request.security(syminfo.tickerid, "D", f())
[l, c] = request.security(syminfo.tickerid, "D", [low, close])
plot((o + h + l + c) / 4)

Kembali nilaiPermintaan seri

Parameter

  • symbol(simple string) Kode barang.
  • timeframe(simple string) Periode waktu. String kosong akan diinterpretasikan sebagai periode waktu saat ini dari grafik.
  • expression(series int/float/bool/color) dapat dihubungi dari request.security untuk menghitung dan mengembalikan suatu ekspresi.
  • gaps(barmerge_gaps) Kebijakan penggabungan data yang diminta ((memerlukan data untuk digabungkan secara otomatis dengan data seri utama OHLC)). Nilai yang mungkin: barmerge.gaps_on, barmerge.gaps_off。 barmerge.gaps_on - data yang diminta digabungkan dengan kemungkinan kesenjangan ((na nilai) ). barmerge.gaps_off - data yang diminta digabungkan secara berturut-turut tanpa gangguan, dengan semua kesenjangan diisi dengan nilai yang paling baru sebelumnya. Default adalah barmerge.gaps_off。
  • lookahead(barmerge_lookahead) memberikan kebijakan penggabungan data yang diminta; kemungkinan nilai: barmerge.lookahead_on, barmerge.lookahead_off. Mulai dari versi 3, default adalah barmerge.lookahead_off. Perhatikan bahwa perilaku ini sama dengan real-time, hanya berbeda dalam sejarah.
  • ignore_invalid_symbol(const bool) Sebuah parameter opsional. Jika barang yang ditentukan tidak ditemukan, tindakan fungsi ditentukan: jika false, skrip akan berhenti dan kembali ke kesalahan saat dijalankan; jika true, fungsi akan kembali ke na dan melanjutkan eksekusi.
  • currency(simple string) Mengkonversi nilai mata uang yang terkait dengan komoditas (misalnya OHLC) ke mata uang yang dikonversi. Kemudian berdasarkan nilai yang dikonversi, dihitung dengan menggunakan ekspresi . Tingkat konversi yang digunakan didasarkan pada nilai tukar harian hari sebelumnya dari pasangan FX_IDC (relatif dengan K-line yang dihitung). Opsional. Nilai default adalah syminfo.currency.

PenjelasanKode PineScript yang menggunakan fitur ini dapat melakukan perhitungan yang berbeda pada catatan sejarah dan data real-time.Jika Anda ingin menentukan parameter tambahan untuk barang yang diminta, seperti periode transaksi atau jenis penyesuaian, Anda dapat mengklik tombol "Transfer".您可以使用ticker.newFungsi ini adalah Tidak dapat menggunakan variabel ticker tick untuk menyampaikan perbedaan titik ke fungsi ini. Anda dapat menggunakan tickticker.newBentuk penunjukan string dari variabel atau kode saham, misalnya AAPL+MSFT*TSLA.Saat ini, satu skrip dapat memiliki hingga 40 panggilan request.security. Harap dicatat bahwa penggunaan variabel/fungsi ini dapat menyebabkan indikator ditarik kembali. Parameter resolusi memungkinkan nilai: 1S, 5S, 15S, 30S - interval detik (siklus grafik harus kurang dari atau sama dengan periode yang diminta) Dari 1 sampai 1440 menit Dari 1D ke 365D hari. Dari 1W menjadi 52W dalam beberapa minggu. Dari 1M menjadi 12M dalam beberapa bulan.

Sampai jumpa lagi syminfo.ticker syminfo.tickerid timeframe.period ta.correlation barmerge.lookahead_off barmerge.lookahead_on

str

str.contains

JikasourceString berisistrString anak akan mengembalikan true, jika tidak akan mengembalikan false.

str.contains(source, str)

Contoh

// If the current chart is a continuous futures chart, e.g “BTC1!”, then the function will return true, false otherwise.
var isFutures = str.contains(syminfo.tickerid, "!")
plot(isFutures ? 1 : 0)

Kembali nilaiJika disourceDapat ditemukan dalam string.str, berarti true, jika tidak berarti false.

Parameter

  • source(series string) String sumber
  • str(series string) Substring yang akan dicari.

Sampai jumpa lagi str.pos str.match

str.endswith

JikasourceString denganstrAkhir dari substring yang ditunjuk di dalam akan mengembalikan true, jika tidak akan mengembalikan false.

str.endswith(source, str)

Kembali nilaiJikasourceString denganstrAkhir dari substring yang ditunjuk adalah true, jika tidak, false.

Parameter

  • source(series string) String sumber
  • str(series string) Substring yang akan dicari.

Sampai jumpa lagi str.startswith

str.startswith

JikasourceString denganstrPada awal string yang ditunjuk, kembali ke true, jika tidak kembali ke false.

str.startswith(source, str)

Kembali nilaiJikasourceString denganstrPada awalnya, string kecil yang ditunjuk adalah true, jika tidak, false.

Parameter

  • source(series string) String sumber
  • str(series string) Substring yang akan dicari.

Sampai jumpa lagi str.endswith

str.substring

Jadi jika kita kembali ke string baru, itu adalahsourceString memiliki substring.begin_posTanda-tanda di indeks yang ditentukan dimulai dan diperluas kesourceend_pos dari string - 1.

str.substring(source, begin_pos)
str.substring(source, begin_pos, end_pos)

Contoh

sym= "EXCHANGE_NAME:SYMBOL_NAME"
pos = str.pos(sym, ":")        // Get position of ":" character
tkr= str.substring(sym, pos+1) // "SYMBOL_NAME"
if barstate.islastconfirmedhistory
    runtime.log(tkr)

Kembali nilaiSebuah substring yang diambil dari string sumber.

Parameter

  • source(series string) Ekstrak string sumber dari substringnya.
  • begin_pos(series int) adalah posisi awal dari substring yang diekstrak.
  • end_pos(series int) posisi akhir. Ini eksklusif. (String yang diekstraksi tidak termasuk karakter dari posisi tersebut.) Opsional.sourcePanjang string.

PenjelasanIndeks string dimulai dari 0; jikabegin_possama denganend_posFungsi ini mengembalikan string kosong.

Sampai jumpa lagi str.contains str.pos str.match

str.tonumber

str.tonumber(string)

Kembali nilaiJika berisi angka yang valid, itu adalah tipe titik lebur dari string, jika tidak, itu adalah na.

Parameter

  • string(series string) bentuk ekspresi string int atau float.

str.format

Mengkonversi string dan nilai format menjadi string format. String format dapat berisi satu penggambaran dalam kurung besar {} dari teks teks dan setiap nilai yang akan diformat. Setiap penggambaran berisi indeks yang akan mengganti parameter yang dibutuhkannya (bermula dari 0), dan sebuah indikator format opsional. Indeks menunjukkan posisi parameter dalam daftar parameter str.format.

str.format(formatString, arg0, arg1, ...)

Contoh

// The format specifier inside the curly braces accepts certain modifiers:
// - Specify the number of decimals to display:
s1 = str.format("{0,number,#.#}", 1.34) // returns: 1.3
runtime.log(s1)

// - Round a float value to an integer:
s2 = str.format("{0,number,integer}", 1.34) // returns: 1
runtime.log(s2)

// - Display a number in currency:
s3 = str.format("{0,number,currency}", 1.34) // returns: $1.34
runtime.log(s3)

// - Display a number as a percentage:
s4 = str.format("{0,number,percent}", 0.5) // returns: 50%
runtime.log(s4)

// EXAMPLES WITH SEVERAL ARGUMENTS
// returns: Number 1 is not equal to 4
s5 = str.format("Number {0} is not {1} to {2}", 1, "equal", 4)
runtime.log(s5)

// returns: 1.34 != 1.3
s6 = str.format("{0} != {0, number, #.#}", 1.34)
runtime.log(s6)

// returns: 1 is equal to 1, but 2 is equal to 2
s7 = str.format("{0, number, integer} is equal to 1, but {1, number, integer} is equal to 2", 1.34, 1.52)
runtime.log(s7)

// returns: The cash turnover amounted to $1,340,000.00
s8 = str.format("The cash turnover amounted to {0, number, currency}", 1340000)
runtime.log(s8)

// returns: Expected return is 10% - 20%
s9 = str.format("Expected return is {0, number, percent} - {1, number, percent}", 0.1, 0.2)
runtime.log(s9)

Kembali nilaiString yang diformat.

Parameter

  • formatString(series string) String berformat.
  • arg0, arg1, ...(series int/float/bool/string/na/int[]/float[]/bool[]/string[]) adalah nilai yang akan diformat.

PenjelasanSemua tanda kurung dalam gaya yang tidak dikutip harus seimbang. Misalnya, ab {0} de" dan "ab } de" adalah gaya yang valid, tetapi "ab {0} de, ab } de" dan {" bukanlah gaya yang valid.

str.length

Mengembalikan bilangan bulat yang sesuai dengan jumlah karakter dalam string tersebut.

str.length(string)

Kembali nilaiJumlah karakter dalam string sumber.

Parameter

  • string(series string) String sumber

str.lower

Kembali ke string baru yang mengubah semua huruf menjadi huruf kecil.

str.lower(source)

Kembali nilaiSemua huruf telah dikonversi menjadi string baru yang ditulis dengan huruf kecil.

Parameter

  • source(series string) String yang ingin dikonversi.

Sampai jumpa lagi str.upper

str.upper

Kembali ke string baru yang mengubah semua huruf menjadi huruf besar.

str.upper(source)

Kembali nilaiSemua huruf telah dikonversi menjadi string baru yang dituliskan dengan huruf besar.

Parameter

  • source(series string) String yang ingin dikonversi.

Sampai jumpa lagi str.lower

str.match

Jika cocokregexJika kita menggunakan rumus normal, maka kita akan mendapatkansourceString yang baru adalah substring dari string, jika tidak akan dikembalikan na.

str.match(source, regex) 

Contoh

s = input.string("It's time to sell some EXCHANGE_NAME:SYMBOL_NAME!")

// finding first substring that matches regular expression "[\w]+:[\w]+"
var string tickerid = str.match(s, "[\\w]+:[\\w]+")

if barstate.islastconfirmedhistory
    runtime.log(tickerid) // "EXCHAN

Lebih banyak

WuhuanBagaimana cara menjalankan beberapa transaksi pada saat yang sama untuk kontrak bitcoin?

Awan ringanApakah pine dapat melakukan banyak transaksi seperti JS? Terima kasih.

Lisa20231Terima kasih atas informasinya.

seniWow! Bagaimana bisa script pine ini menggunakan simulasi okex di platform ini?

seniIni berarti bahwa strategi tradingview dapat disalin langsung ke platform penemu dan digunakan!

Mimpi kecilBahasa PINE hanya dapat melakukan strategi varietas tunggal, strategi multi-varietas adalah yang terbaik atau menulis desain dengan python, javascript, c++.

Mimpi kecilOh, ya, OKX agak istimewa, mereka memiliki alamat yang sama di lingkungan analog dan lingkungan nyata, hanya berbeda di tempat lain. Jadi tidak ada cara untuk beralih ke analog dengan mengubah alamat basis.

Awan ringanTidak bisa menggunakan okx analog...

Mimpi kecilMasalah arsitektur yang beragam ini tidak dapat diselesaikan dengan baik, karena setiap pertukaran memiliki antarmuka yang berbeda dan batas frekuensi antarmuka yang tidak sama, yang akan menimbulkan banyak masalah.

Mimpi kecilBaiklah, terima kasih atas saranmu, dan laporkan permintaan ini di sini.

Awan ringanPerasaan lebih baik untuk mengintegrasikan dengan JS, JS dapat lebih baik beradaptasi dengan berbagai cara transaksi.

Pemangsa TrendingApakah Anda akan mempertimbangkan lebih banyak varietas di masa depan?

Mimpi kecilTidak sopan.

Awan ringanBaiklah, terima kasih banyak.

Mimpi kecilHalo, sementara, strategi bahasa PINE hanya bisa menggunakan satu varietas.

Mimpi kecilTidak sopan, terima kasih atas dukungannya. Dokumen akan terus disempurnakan.

Mimpi kecilSaya tidak tahu.

Mimpi kecilPINE template library, dimana parameter dapat diatur untuk mengubah alamat basis pertukaran.