[TOC]
Struktur umum yang diikuti oleh kode di Pine:
<version>
<declaration_statement>
<code>
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')
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
。
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.
Baris dalam skrip yang bukan komentar atau instruksi kompilasi adalah kalimat yang mengimplementasikan algoritma skrip. Sebuah kalimat bisa menjadi salah satu dari mereka.
if
,for
,while
atauswitch
Struktur e.g.Kalimat dapat disusun dengan berbagai cara
空格
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.local block
Sebuah 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.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) // 调用一个内置函数输出日志 (全局范围)
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")
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 internalopen
Misalnya,open
Variabel built-in mencatat harga buka untuk setiap garis K BAR, jika iniopen
Jadi ini adalah data dari siklus garis K selama 5 menit.open
Yang tercatat dalam variabel adalah harga awal dari setiap 5 menit K baris BAR (kolom); ketika program strategi Anda sedang dijalankan, referensi dalam kodeopen
Dengan 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.
Peraturan parameter untuk template built-in dari kebijakan PINE "Pine Language Exchange Library".
定价货币精度
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)).javascript
Panggilan dalam kebijakanSetMaxBarLen
Fungsi yang sama.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) // 指定(较低的)价格,计划下买单订单,等待成交开仓,限价开仓
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%持仓
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).
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.entry
Jadi kita bisa menentukan fungsi yang akan kita atur.limit
、stop
Parameter.
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.direction
Parameternya adalahstrategy.long
Jika harga pasar saat ini lebih rendah dari harga tersebut, maka order akan dipicu.
Bila pesanan adalah pesanan jual (yaitudirection
Parameternya adalahstrategy.short
Jika 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 samalimit
、stop
Parameter, pemesanan dipicu pada harga pertama yang memenuhi syarat.
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
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.var
、varip
Variabel 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.var
、varip
Variabel i, ii yang dinyatakan akan melakukan operasi inkremental setiap kali kode kebijakan dijalankan karenaif true
Jadi 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.var
、varip
Variabel yang diproklamasikan mulai berubah. Karena model harga real-time, setiap perubahan harga dalam garis KBAR akan mengeksekusi kode strategi berulang kali.i := i + 1
danii := ii + 1
Perbedaan 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,var
、varip
Variabel yang dinyatakan dalam contoh di atas secara inkremental menunjukkan konsistensi yang sempurna, yaitu setiap garis K BAR bertambah 1 {\displaystyle 1}.
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.
Menunjukkan nilai dari variabel tipe Boolean, atau ketika ekspresi digunakanPerbandinganatauLogikaNilai yang dapat dihitung pada operator.
PenjelasanLihat juga:PerbandinganOperator danLogikaDeskripsi operator.
Sampai jumpa lagi
bool
Menunjukkan nilai dari variabel tipe Boolean, dan hasil dari operasi perbandingan, operasi logis.
PenjelasanLihat juga:PerbandinganOperator danLogikaDeskripsi operator.
Sampai jumpa lagi
bool
If statement mendefinisikan blok kalimat yang harus dieksekusi ketika memenuhi kondisi ekspresi. Bahasa skrip Pine versi 4 memungkinkan Anda menggunakan tata bahasa
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 kalimatthen
Logika dalam (((var_decl_then0
,var_decl_then1
Jika kondisi false, gunakan blok kalimat.else if
Atauelse
Logika dalam (((var_decl_else0
,var_decl_else1
Dan 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_then
danreturn_expression_else
Jenis. 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 dihilangkanelse
Blok. 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
Contoh
// if
x = if open > close
5
else if high > low
close
else
open
plot(x)
Tidak bisa diabaikanif
Nilai hasil dari pernyataan ((
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)
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
for...in
Struktur 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_expression
Nilai tersebut adalah:index
- Mengikuti variabel opsional dari indeks iterasi saat ini. Index dimulai dari 0. Variabel tidak dapat diubah dalam lingkaran.array_element
Pada 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_declaration
Variabel 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...in
Bentuk 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 kitaisPos
Nilai dari array diatur sebagaitrue
Saat mereka berada di tempat kami,valuesArray
Nilai 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
while
Pernyataan memungkinkan pengulangan kondisi pada blok kode lokal.
variable_declaration = while boolean_expression
...
continue
...
break
...
return_expression
Penjelasan:variable_declaration
- Deklarasi variabel opsional.return expression
Anda dapat memberikan nilai initialization untuk variabel ini.boolean_expression
- Jika benar, lakukanwhile
Blok lokal dari kalimat tersebut. Jika false, diwhile
Setelah kalimat, lanjutkan dengan mengeksekusi skrip.continue
- continue
Kata kunci menyebabkan cabang berputar ke iterasi berikutnya.break
- break
Kata kunci yang menyebabkan penghentian loop.while
Setelah kalimat, lanjutkan.return_expression
- Disediakanwhile
Kata-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)
PenjelasanAwalnyawhile
Blok kode lokal setelah baris harus dikompres menjadi empat ruang atau satu karakter.while
Anda bisa melihat gambarnya di bawah ini.while
Ekspresi Boolean berikutnya harus akhirnya berubah menjadi false, atau harus dijalankanbreak
。
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_block
Contoh ataudefault_local_block
Salah satunya.default_local_block
Hanya dengan=>
Tanda-tanda digabungkan, dan hanya dieksekusi jika blok sebelumnya tidak dijalankan.switch
Hasil pernyataan diberikan kepada variabel dan tidak ditentukandefault_local_block
Jika tidak dilaksanakan,local_block
Jika tidak, maka kalimat itu akan kembali.na
Akan.switch
Hasil dari pernyataan diberikan kepada variabel, semualocal_block
Contoh harus mengembalikan nilai dengan tipe yang sama.
Sampai jumpa lagi
if
?:
series adalah kata kunci yang menunjukkan jenis seri data.series
Kata kunci biasanya tidak diperlukan.
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 danswitch
Saya 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
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
Logika AND digunakan untuk ekspresi Boolean.
expr1 and expr2
Kembali nilaiNilai Boolean, atau serangkaian nilai Boolean.
Logika OR↑ berlaku untuk ekspresi Boolean↑
expr1 or expr2
Kembali nilaiNilai Boolean, atau serangkaian nilai Boolean.
Permintaan logis sebaliknya ((NOT) ⇒ berlaku untuk ekspresi Boolean ⇒
not expr1
Kembali nilaiNilai Boolean, atau serangkaian nilai Boolean.
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
Kata kunci dari tipe
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
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
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
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
Kata kunci dari tipe array array array yang digunakan untuk menyatakan variabel atau parameter secara eksplisit.array.new<type>
,array.from
Fungsi 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
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) // 正确写法
akan dikirimkan ketimeframe
Periode 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
timeframe
Int adalah jumlah detik dalam satu baris K.
Parameter
timeframe
(simple string) Periode waktu↑ opsional↑ default adalah timeframe.period↑PenjelasanUntuktimeframe
>=
Sampai jumpa lagi
input.timeframe
timeframe.period
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 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 nilaiParameterattribute
Serial 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 dimintaAnda 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 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*TSLASaat 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
Jikasource
String berisistr
String 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 disource
Dapat ditemukan dalam string.str
, berarti true, jika tidak berarti false.
Parameter
source
(series string) String sumberstr
(series string) Substring yang akan dicari.Sampai jumpa lagi
str.pos
str.match
Jikasource
String denganstr
Akhir dari substring yang ditunjuk di dalam akan mengembalikan true, jika tidak akan mengembalikan false.
str.endswith(source, str)
Kembali nilaiJikasource
String denganstr
Akhir dari substring yang ditunjuk adalah true, jika tidak, false.
Parameter
source
(series string) String sumberstr
(series string) Substring yang akan dicari.Sampai jumpa lagi
str.startswith
Jikasource
String denganstr
Pada awal string yang ditunjuk, kembali ke true, jika tidak kembali ke false.
str.startswith(source, str)
Kembali nilaiJikasource
String denganstr
Pada awalnya, string kecil yang ditunjuk adalah true, jika tidak, false.
Parameter
source
(series string) String sumberstr
(series string) Substring yang akan dicari.Sampai jumpa lagi
str.endswith
Jadi jika kita kembali ke string baru, itu adalahsource
String memiliki substring.begin_pos
Tanda-tanda di indeks yang ditentukan dimulai dan diperluas kesource
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.source
Panjang string.PenjelasanIndeks string dimulai dari 0; jikabegin_pos
sama denganend_pos
Fungsi ini mengembalikan string kosong.
Sampai jumpa lagi
str.contains
str.pos
str.match
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.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,
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 sumberKembali 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
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
Jika cocokregex
Jika kita menggunakan rumus normal, maka kita akan mendapatkansource
String yang baru adalah substring dari string, jika tidak akan dikembalikan
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
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.