[TOC]
Struktur umum yang diikuti oleh kod dalam Pine:
<version>
<declaration_statement>
<code>
Simbol nota yang disokong oleh bahasa Pine FMZ: nota satu baris//
Di bawah ini adalah beberapa contoh:/* */
Sebagai contoh, tulisan komen dalam contoh berikut:
[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 penyimpang dalam bentuk berikut memberitahu penyimpang versi skrip yang ditulis oleh Pine:
//@version=5
Secara lalai, versi v5 boleh dilepaskan dalam kod.//@version=5
。
indicator()
strategy()
Perkataan pengisytiharan menentukan jenis skrip, yang juga menentukan apa kandungan yang diizinkan di dalamnya, dan bagaimana ia digunakan dan dilaksanakan. Menetapkan sifat-sifat penting skrip, seperti namanya, di mana ia akan muncul apabila ia ditambah ke dalam carta, ketepatan dan format nilai yang dipaparkan, dan mengawal beberapa nilai tindakan semasa ia dijalankan, seperti jumlah objek lukisan maksimum yang akan dipaparkan di carta. Untuk polisi, sifat termasuk parameter yang mengawal pengulangan semula, seperti modal awal, komisen, titik slaid, dan lain-lain. FMZ tidak memerlukan Pine untuk dimasukkan dalam kod strategi.indicator()
ataustrategy()
Pernyataan yang dibuat.
Baris skrip yang bukan komen atau arahan penyusun adalah ayat yang melaksanakan algoritma skrip. Sebuah ayat boleh menjadi salah satu daripada mereka.
if
,for
,while
atauswitch
Struktur setaraPerkataan boleh disusun dalam pelbagai cara
空格
atau制表符
(kunci tab) bermula. Karakter pertama mereka juga mesti menjadi watak pertama baris tersebut. Baris yang bermula di kedudukan pertama baris, oleh definisi, menjadi sebahagian daripada ruang lingkup global skrip.local block
│ Sebuah blok tempatan mesti dikurangkan ke dalam satu karakter tetingkap atau empat ruang (jika tidak, akan diselesaikan sebagai barisan kod bersiri sebelumnya, iaitu ditetapkan sebagai kandungan berterusan barisan kod sebelumnya), dan setiap blok tempatan mentakrifkan satu jangkauan tempatan yang berbeza.Sebagai contoh, termasuk tiga blok tempatan, satu dalam deklarasi fungsi kustom, dua dalam deklarasi pembolehubah menggunakan struktur if, dengan kod berikut:
indicator("", "", true) // 声明语句(全局范围),可以省略不写
barIsUp() => // 函数声明(全局范围)
close > open // 本地块(本地范围)
plotColor = if barIsUp() // 变量声明 (全局范围)
color.green // 本地块 (本地范围)
else
color.red // 本地块 (本地范围)
runtime.log("color", color = plotColor) // 调用一个内置函数输出日志 (全局范围)
Baris panjang boleh dibahagikan kepada beberapa baris, atau "dibungkus"; baris yang dibungkus mesti mengecilkan berapa banyak ruang, selagi ia bukan kelipatan 4 (batas-batas ini digunakan untuk mengecilkan bahagian).
a = open + high + low + close
Ia boleh dibungkus sebagai (perhatikan bahawa jumlah ruang yang dikurangkan setiap baris tidak merupakan kelipatan 4):
a = open +
high +
low +
close
Satu panggilan plot panjang (() boleh 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)
Perkataan dalam deklarasi fungsi yang ditakrifkan pengguna juga boleh dibungkus. Walau bagaimanapun, kerana blok tempatan secara sintetik mesti bermula dengan pengurangan ((4 ruang atau 1 tanda), apabila membahagikannya ke baris seterusnya, bahagian lanjutan pernyataan mesti bermula dengan lebih daripada satu pengurangan ((tidak sama dengan kelipatan 4 ruang); contohnya:
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 masa bukan jenis data atau format, tetapi merupakan konsep struktur asas dalam bahasa PINE. Ia digunakan untuk menyimpan nilai yang berubah secara berturut-turut dalam masa, setiap nilai yang sepadan dengan satu titik masa. Struktur urutan masa sesuai untuk digunakan untuk memproses dan merakam satu set data yang berubah dari masa ke masa.
Variabel terbina dalamopen
Sebagai contoh,open
Variabel terbina dalam merakam harga buka untuk setiap baris K BAR, jika iniopen
Jadi ini adalah data untuk 5 minit kitaran garis K.open
Yang dirakamkan dalam pembolehubah adalah harga pembukaan baris BAR (bar) K setiap 5 minit.open
Ini merujuk kepada harga bukaan BAR pada garis K yang kini berada. Untuk merujuk kepada nilai sebelumnya dalam urutan masa (nilai masa lalu), kita menggunakan[]
Operator sejarah, apabila dasar dijalankan pada bar baris Kopen[1]
Maksudnya adalah merujuk kepada harga buka bar bar K sebelum garis K semasa.
WalaupunUrutan masaIa mudah untuk memikirkan struktur data seperti "arry", walaupun bahasa PINE juga mempunyai jenis arry. Tetapi mereka adalah konsep yang sama sekali berbeza dengan urutan masa.
Perkembangan siri masa seperti ini dapat dengan mudah dikira sebagai nilai kumulatif harga penutupan dalam kod strategi tanpa menggunakan struktur berputar seperti for, hanya menggunakan fungsi terbina dalam bahasa PINE.ta.cum(close)
Untuk contoh lain, kita perlu mengira purata perbezaan antara harga tertinggi dan harga terendah untuk 14 baris K terakhir BAR (iaitu 14 baris K terdekat pada saat pelaksanaan kod semasa) yang boleh ditulis sebagai:ta.sma(high - low, 14)
Hasil panggilan fungsi pada urutan masa juga akan meninggalkan jejak pada urutan masa, yang juga boleh digunakan[]
Operator sejarah merujuk kepada nilai sebelum ini. Sebagai contoh, apabila harga penutupan baris K BAR semasa diuji melebihi nilai maksimum harga tertinggi dalam 10 baris K BAR terakhir (tidak termasuk baris K BAR semasa), kita boleh menulis sebagaibreach = close > ta.highest(close, 10)[1]
Ia juga boleh ditulis sebagai:breach = close > ta.highest(close[1], 10)
Oleh itu.ta.highest(close, 10)[1]
danta.highest(close[1], 10)
Saya tidak mahu mengkritiknya.
Anda boleh mengesahkan dengan menggunakan kod 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)
Kod ujian di atas akan mengeluarkan a dan b pada setiap BAR dengan nilai pada urutan masa masing-masing, dan anda dapat melihat bahawa nilai a dan b sentiasa sama, jadi kedua-dua kaedah penggambaran sama.
Panduan tetapan parameter untuk template terbina dalam dasar PINE "Pine Language Exchange Library".
定价货币精度
Parameter dan parameter ini menentukan harga geser semasa pesanan; sebagai contoh, penentuan ketepatan mata wang ditetapkan kepada 2, iaitu tepat ke tempat kedua bilangan kecil, tepat ke 0.01; maka nilai titik geser mewakili 0.01 unit harga; pada masa ini, nilai titik geser ditetapkan kepada 5, dan harga geser semasa pesanan adalah 0.05 ((Harga geser menunjukkan bahagian harga pemindahan pesanan untuk lebih baik dan perisian pesanan).javascript
Panggilan dalam strategiSetMaxBarLen
Fungsi berfungsi 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%持仓
Mekanisme pemegang PINE adalah serupa dengan pemegang satu arah. Sebagai contoh, apabila memegang kedudukan berbilang arah ("multi-head holding"), jika terdapat pesanan untuk menjual operasi, senarai rancangan, dan lain-lain (berbanding arah kebalikan dari arah pemegang), perintah pemicu pelaksanaan akan dilakukan terlebih dahulu untuk meratakan kedudukan berbilang arah ("meratakan semua pemegang berbilang arah) dan kemudian melaksanakan perintah pemicu berhubung arah kebalikan dari arah pemegang sebelum kedudukan.
Apabila menggunakan arahan order order, jika tidak menetapkan sebarang harga, anda akan memilih sebagai harga pasaran secara lalai. Selain daripada harga pasaran, anda juga boleh membuat order melalui order rancangan, yang tidak akan mengoperasikan order segera.Peranti sebenar / Ujian semulaMaklumat status masa (iaitu tetingkap status semasa pelaksanaan dasar) dilihat dalam tab penghapusan "pesanan yang dirancang"; sistem hanya akan benar-benar membuat pesanan apabila harga masa nyata pasaran memenuhi syarat untuk mencetuskan pesanan rancangan ini. Oleh itu, pesanan ini mempunyai sedikit kecacatan pada harga urus niaga adalah keadaan normal.strategy.entry
Apabila kita mengurutkan fungsi, kita boleh menetapkanlimit
、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 harga terhad untuk pesanan, apabila pesanan adalah pembayaran (iaitu)direction
Parameter ialahstrategy.long
Perintah hanya akan dicetuskan apabila harga pasaran semasa berada di bawah harga tersebut.
Apabila pesanan adalah pesanan jualan (iaitudirection
Parameter ialahstrategy.short
Perintah hanya akan dicetuskan apabila harga pasaran semasa lebih tinggi daripada harga tersebut.
Perintah berhenti
Tetapkan harga berhenti rugi untuk pesanan, apabila pesanan adalah untuk membeli, pesanan hanya akan dicetuskan apabila harga pasaran semasa lebih tinggi daripada harga tersebut. Apabila pesanan adalah pesanan jual beli, pesanan hanya akan dicetuskan apabila harga pasaran semasa berada di bawah harga tersebut.
Perintah stop-limit
Boleh diset pada masa yang samalimit
、stop
Parameter, pesanan dipicu pada harga yang memenuhi syarat terlebih dahulu.
var adalah kata kunci untuk pembahagian dan inisialisasi variabel sekali pakai. Selalunya, sintaks pemisahan pemboleh ubah yang tidak mengandungi kata kunci var akan menyebabkan nilai pemboleh ubah ditutup setiap kali data diperbaharui. Sebaliknya, apabila pemboleh ubah pemisahan menggunakan kata kunci var, walaupun data diperbaharui, mereka masih boleh mengekalkan status yang tidak stabil dan hanya mengubahnya apabila syarat dalam if-expressions dipenuhi.
var variable_name = expression
Menjelaskan:
variable_name
- Nama mana-mana pemboleh ubah pengguna yang dibenarkan dalam Pine Script (boleh mengandungi aksara Latin besar dan kecil, nombor dan tanda bawah (_), tetapi tidak boleh dimulakan dengan nombor)expression
- mana-mana ungkapan aritmatika, seperti menentukan pembolehubah biasa.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
Pada FMZ, model harga sebenar, model harga penutupan, dan model harga penutupan digunakan untukvar
、varip
Kami menggunakan kod berikut untuk menguji pemboleh ubah yang dinyatakan.
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 masa nyata
Kod ujian di atas dibahagikan kepada dua fasa semasa pelaksanaan: 1, K-Line Sejarah; 2, K-Line Riil; dan 3, K-Line Riil.var
、varip
Variabel yang dinyatakan i, ii akan dijalankan pada setiap kali pelaksanaan kod dasar keranaif true
Oleh itu pasti menjalankan blok kod syarat yang sepadan) ; jadi anda dapat melihat bahawa setiap nombor yang ditunjukkan pada BAR baris K hasil ulangan adalah beransur-ansur 1; apabila fasa baris K sejarah berakhir, mulakan fasa baris K masa nyata.var
、varip
Variabel yang diisytiharkan mula berubah. Oleh kerana model harga masa nyata, setiap perubahan harga dalam garis K BAR akan menjalankan kod strategi berulang kali.i := i + 1
danii := ii + 1
Ia akan dilaksanakan sekali sahaja. Perbezaan adalah bahawa ia akan diubah setiap kali. Walaupun ia akan diubah setiap kali, ia akan kembali ke nilai sebelumnya apabila logik strategi dijalankan pada pusingan seterusnya, sehingga ia tidak akan diperbaharui untuk menentukan nilai i (iaitu ia tidak akan kembali ke nilai sebelumnya apabila logik strategi dijalankan pada pusingan seterusnya). Jadi anda dapat melihat bahawa pembolehubah i masih menjadi tambahan BAR1 untuk setiap root; tetapi pembolehubah ii ditambah beberapa kali untuk setiap BAR.
Model harga penutupan
Oleh kerana model harga penutupan adalah satu logik strategi yang dijalankan apabila setiap garis K BAR berakhir. Jadi dalam model harga penutupan, peringkat K garis sejarah dan tahap K garis masa nyata,var
、varip
Variabel yang diisytiharkan dalam contoh di atas adalah sama sepenuhnya dengan peningkatan, iaitu peningkatan 1 untuk setiap baris K BAR.
varip (var intrabar persist) adalah kata kunci yang digunakan untuk mengagihkan dan menginisiatifkan pembolehubah secara serentak. Ia serupa dengan kata kunci var, tetapi pembolehubah yang menggunakan deklarasi varip menyimpan nilainya di antara kemas kini baris K masa nyata.
varip variable_name = expression
Menjelaskan:
variable_name
- Nama mana-mana pemboleh ubah pengguna yang dibenarkan dalam skrip Pine (boleh mengandungi huruf besar dan kecil, angka dan garis bawah, tetapi tidak boleh dimulakan dengan nombor)expression
- mana-mana ungkapan aritmatika, seperti ketika menentukan pembolehubah biasa. Pada baris K pertama, ungkapan hanya dikira sekali dan diberikan kepada pembolehubah sekali.Contoh
// varip
varip int v = -1
v := v + 1
plot(v)
Apabila var digunakan, grafik akan mengembalikan nilai bar_index. Menggunakan varip, tindakan yang sama berlaku pada baris K sejarah, tetapi pada baris K masa nyata, grafik akan mengembalikan satu nilai yang meningkat satu untuk setiap tik.
Nota:Hanya boleh digunakan dengan jenis mudah, seperti float, int, boolean, string, dan array jenis ini.
Menunjukkan nilai kepada pembolehubah jenis boolean atau apabila ungkapan digunakanPerbandinganatauLogikNilai yang boleh dikira apabila operator.
Nota:Sila lihatPerbandinganOperator danLogikPenerangan pengendali.
Sampai jumpa lagi
bool
Menunjukkan nilai pembolehubah jenis Boolean, serta hasil operasi perbandingan, operasi logik.
Nota:Sila lihatPerbandinganOperator danLogikPenerangan pengendali.
Sampai jumpa lagi
bool
Perkataan if mendefinisikan blok perkataan yang mesti dilaksanakan apabila memenuhi syarat ungkapan. Bahasa skrip Pine versi ke-4 membolehkan anda menggunakan sintaks
Kod yang digunakan ialah:
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
Nota:
var_declarationX
- Variabel ini mengambil nilai daripada if statementcondition
- Jika syarat adalah benar, block ayat digunakanthen
Logiknyavar_decl_then0
,var_decl_then1
dan sebagainya). Jika syarat adalah false, block ayat digunakan.else if
atauelse
Logiknyavar_decl_else0
,var_decl_else1
Dan sebagainya) ‖.return_expression_then , return_expression_else
- Ungkapan terakhir dalam modul atau ungkapan dari blokelse akan mengembalikan nilai akhir pernyataan tersebut. Jika ungkapan pembolehubah pada akhir, nilainya akan menjadi nilai hasil.
Jenis nilai yang dikembalikan oleh if statement bergantung kepadareturn_expression_then
danreturn_expression_else
Jenis. Apabila dijalankan pada TradingView, jenis mereka mesti sepadan: tidak mungkin untuk mengembalikan nilai bulat dari blok kalimat then apabila anda mempunyai nilai baris dalam blokelse. Apabila dijalankan pada FMZ, contoh berikut tidak akan memberikan error, apabila 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)
Boleh disingkirkanelse
Blok. Dalam kes ini, jika syarat adalah false, nilai terhad yang kosong akan diberikan kepada pembolehubah var_declarationX:
Contoh
// if
x = if close > open
close
// If current close > current open, then x = close.
// Otherwise the x = na.
plot(x)
Blok yang digunakan boleh menggunakan pelbagai blok if atau tidak digunakan. Blok then, if, dan if yang dipindahkan ke empat ruang:
Contoh
// if
x = if open > close
5
else if high > low
close
else
open
plot(x)
boleh diabaikan.if
Nilai hasil pernyataan ((
Contoh
if (ta.crossover(high, low))
strategy.entry("BBandLE", strategy.long, stop=low)
else
strategy.cancel(id="BBandLE")
If-statements boleh mengandungi satu sama lain:
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' membolehkan berulang kali menjalankan beberapa set statement:
[var_declaration =] for counter = from_num to to_num [by step_num]
statements | continue | break
return_expression
var_declaration
- Pengisytiharan pembolehubah pilihan yang akan ditetapkan sebagai nilai return_expression untuk putaran semula.counter
- Menyimpan nilai pemegang kira-kira, meningkatkan / mengurangkan nilai 1 atau step_num pada setiap pengulangan.from_num
- Nilai permulaan perhitung. Mengizinkan penggunaan int/float thresholds/expressions.to_num
- Nilai akhir penghitung. Loop terputus apabila penghitung lebih besar daripada to_num ((atau kurang daripada to_num dalam kes from_num > to_num).step_num
- Meningkatkan/mengurangkan nilai penghitung. Ia adalah pilihan. Nilai lalai adalah +1 atau-1, bergantung kepada yang terbesar dari_num atau to_num. Apabila menggunakan nilai, penghitung juga akan meningkat/mengurangkan mengikut yang terbesar dari_num atau to_num, jadi simbol +/- untuk step_num adalah pilihan.statements | continue | break
- Bilangan ayat yang dikehendaki, atau kata kunci "continue" atau "break" yang dikehendaki, dikurangkan kepada empat ruang atau satu tab.return_expression
- Nilai pulangan kitaran, jika ada, diberikan kepada pembolehubah dalam var_declaration. Jika kitaran keluar kerana kata kunci "continue" atau "break", nilai pulangan kitaran adalah nilai pulangan pembolehubah terakhir yang diberikan nilai sebelum kitaran keluar.continue
- Kata kunci yang hanya boleh digunakan dalam pusingan semula.break
- Kata kunci untuk keluar dari lingkaran semula.
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 ini membolehkan beberapa pernyataan untuk setiap elemen dalam array dilakukan berulang-ulang. Ia boleh digunakan bersama-sama dengan mana-mana parameter:array_element
, atau digunakan bersama dengan dua parameter:[index, array_element]
❏ Bentuk kedua tidak mempengaruhi fungsi putaran. ❏ Ia mengesan indeks yang sedang diulang pada pembolehubah pertama dalam kumpulan unsur. ❏ Bentuk kedua tidak mempengaruhi fungsi putaran. ❏ Bentuk kedua mengesan indeks yang sedang diulang pada pembolehubah pertama dalam kumpulan unsur.
[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
- Pengisytiharan pembolehubah pilihan yang akan diberikan kepada putaranreturn_expression
Nilai tersebut adalah:index
- Mengesan pembolehubah pilihan dalam indeks berulang semasa; indeks bermula dari 0; pembolehubah tidak berubah dalam lingkaran; apabila digunakan, ia mesti disertakan dalam satu yang juga disertakanarray_element
Perbandingan antara unsur-unsur ini adalah sebagai berikut:array_element
- Mengandung pembolehubah bagi setiap unsur barisan berturut-turut yang akan diuruskan dalam pusingan; pembolehubah ini tidak berubah dalam pusingan;array_id
- Array ID yang berulang-ulang berpusing.statements | continue | break
- Bilangan ayat yang dikehendaki, atau kata kunci "continue" atau "break" yang dikehendaki, dikurangkan kepada empat ruang atau satu tab.return_expression
- Nilai pulangan kitaran dialokasikan kepadavar_declaration
Variabel dalam, jika wujud. Jika gelung keluar kerana kata kunci "continue" atau "break", nilai balik gelung adalah variabel yang diberikan nilai terakhir sebelum gelung keluar.continue
- Kata kunci yang hanya boleh digunakan dalam pusingan semula.break
- Kata kunci untuk keluar dari lingkaran semula.
Ianya membolehkan anda mengubah elemen atau saiz array dalam gelung.
Di sini, kita gunakanfor...in
Bentuk parameter tunggal untuk menentukan berapa banyak baris K yang mempunyai nilai OHLC yang lebih besar daripada SMA yang mempunyai paras penutupan:
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 gunakan dua bentuk parameter for...in untuk merangkumi parameter kita.isPos
Nilai aritmatika ditetapkan sebagaitrue
Apabila mereka berada di kawasan kami,valuesArray
Nilai yang sepadan dalam aritmatika adalah pada masa yang tepat:
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
Perkataan membenarkan pengulangan syarat blok kod tempatan.
variable_declaration = while boolean_expression
...
continue
...
break
...
return_expression
Menjelaskan:variable_declaration
- Pengisytiharan pembolehubah pilihan.return expression
Nilai initialization boleh diberikan kepada pembolehubah ini.boolean_expression
- Jika benar, jalankanwhile
Blok tempatan ayat. Jika false, diwhile
Selepas kalimat, teruskan menjalankan skrip.continue
- continue
Kata kunci membawa kepada cabang berputar ke iterasi seterusnya.break
- break
Kata kunci membawa kepada penghentian gelung.while
Perkataan itu diteruskan selepas kalimat tersebut.return_expression
- Disediakanwhile
Baris pilihan yang dikembalikan oleh ayat tersebut.
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)
Nota:Permulaanwhile
Blok kod tempatan selepas baris mesti disempurnakan kepada empat ruang atau satu tanda jam.while
Pelanconganwhile
Ekspresi Boolean seterusnya mesti akhirnya menjadi false, atau mesti dijalankanbreak
。
Operator switch memindahkan kawalan ke salah satu daripada beberapa pernyataan berdasarkan nilai syarat dan ungkapan.
[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
Pertukaran dengan ungkapan:
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)
Pertukaran tanpa ungkapan:
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)
Nilai pulanganNilai ungkapan terakhir dalam blok ayat tempatan yang dijalankan.
Nota:Hanya boleh dilaksanakanlocal_block
contoh ataudefault_local_block
Salah seorang daripada mereka.default_local_block
Hanya dengan=>
Penanda masuk bersama-sama, dan hanya dijalankan apabila blok sebelumnya tidak dijalankan; jikaswitch
Hasil pernyataan diberikan kepada satu pembolehubah dan tidak ditentukandefault_local_block
Jika tidak dilaksanakan,local_block
Jika anda menggunakan kata yang sama, maka ia akan kembali kepada anda.na
◄ akanswitch
Apabila hasil pernyataan diberikan kepada pembolehubah, semualocal_block
Contoh mestilah mengembalikan nilai jenis yang sama.
Sampai jumpa lagi
if
?:
series adalah kata kunci yang menunjukkan jenis siri data.series
Kata kunci biasanya tidak diperlukan.
Digunakan untuk memberi nilai kepada pembolehubah, tetapi hanya apabila memaklumkan pembolehubah (untuk pertama kalinya).
Operator pemesanan, memberi pemesanan kepada pembolehubah di sebelah kiri.
Tidak sama dengan. Berlaku untuk mana-mana jenis ungkapan.
expr1 != expr2
Nilai pulanganNilai Boolean, atau satu set nilai Boolean.
Modul ((bilangan bilangan bulat) ⇒ digunakan untuk ungkapan bilangan ⇒
expr1 % expr2
Nilai pulanganBilangan bulat atau nilai fluktuasi, atau satu siri nilai.
Nota:Dalam skrip Pine, pedagang akan dipotong ketika mengira baki bilangan bulat; iaitu, menempatkannya kepada nilai mutlak terendah; nilai yang diperoleh akan mempunyai simbol yang sama dengan dividen.
Contoh: -1 % 9 = -1 - 9 * truncate ((-1/9) = -1 - 9 * truncate ((-0.111) = -1 - 9 * 0 = -1.
Tunjuk modem. ^ Untuk ekspresi nombor. ^
expr1 %= expr2
Contoh
// Equals to expr1 = expr1 % expr2.
a = 3
b = 3
a %= b
// Result: a = 0.
plot(a)
Nilai pulanganBilangan bulat atau nilai fluktuasi, atau satu siri nilai.
Perkalian.. digunakan untuk ungkapan bilangan..
expr1 * expr2
Nilai pulanganBilangan bulat atau nilai fluktuasi, atau satu siri nilai.
Tanda perkalian.. digunakan untuk ungkapan bilangan..
expr1 *= expr2
Contoh
// Equals to expr1 = expr1 * expr2.
a = 2
b = 3
a *= b
// Result: a = 6.
plot(a)
Nilai pulanganBilangan bulat atau nilai fluktuasi, atau satu siri nilai.
Tambahan atau satuan nombor sebenar. Untuk ungkapan nombor atau tali.
expr1 + expr2
+ expr
Nilai pulanganSistem binari pada senar+
Mengembalikan gabungan dari express1 dan express2
Nombor kembali bilangan bulat atau nilai titik terapung, atau satu siri nilai:
Benzene biner +'kembali express1 ditambah express2.
Satu unit + satu unit mengembalikan express (tidak menambah apa-apa pada simetri operator satu unit).
Nota:Anda boleh menggunakan pengendali aritmatika dengan nombor serta baris bilangan pembolehubah. Dalam kes menggunakan baris bilangan, pengendali digunakan untuk elemen.
Tanda-tanda penjumlahan. Untuk ungkapan nombor atau rentetan.
expr1 += expr2
Contoh
// Equals to expr1 = expr1 + expr2.
a = 2
b = 3
a += b
// Result: a = 5.
plot(a)
Nilai pulanganUntuk strings, kembalikan sambungan antara express1 dan express2; untuk digit, kembalikan bilangan bulat atau nilai floatpoint, atau satu siri nilai.
Nota:Anda boleh menggunakan pengendali aritmatika dengan nombor serta baris bilangan pembolehubah. Dalam kes menggunakan baris bilangan, pengendali digunakan untuk elemen.
Pengurangan atau nombor negatif tunggal.
expr1 - expr2
- expr
Nilai pulanganMengembalikan bilangan bulat atau nilai float, atau satu siri nilai:
Benzene biner +'kembali kepada express1 dikurangkan dari express2.
Satu Yuan-
Mengembalikan kata negatif dari express.
Nota:Anda boleh menggunakan pengendali aritmatika dengan nombor serta baris bilangan pembolehubah. Dalam kes menggunakan baris bilangan, pengendali digunakan untuk elemen.
Peruntukan pengurangan... digunakan untuk ungkapan bilangan...
expr1 -= expr2
Contoh
// Equals to expr1 = expr1 - expr2.
a = 2
b = 3
a -= b
// Result: a = -1.
plot(a)
Nilai pulanganBilangan bulat atau nilai fluktuasi, atau satu siri nilai.
Pengecualian. Berlaku untuk ungkapan bilangan.
expr1 / expr2
Nilai pulanganBilangan bulat atau nilai fluktuasi, atau satu siri nilai.
Kecuali penunjuk. Untuk ekspresi bilangan.
expr1 /= expr2
Contoh
// Equals to expr1 = expr1 / expr2.
a = 3
b = 3
a /= b
// Result: a = 1.
plot(a)
Nilai pulanganBilangan bulat atau nilai fluktuasi, atau satu siri nilai.
Lebih kecil daripada. Berlaku untuk ungkapan bilangan.
expr1 < expr2
Nilai pulanganNilai Boolean, atau satu set nilai Boolean.
Lebih kecil daripada atau sama dengan.
expr1 <= expr2
Nilai pulanganNilai Boolean, atau satu set nilai Boolean.
Ia sama dengan. boleh digunakan untuk mana-mana jenis ungkapan.
expr1 == expr2
Nilai pulanganNilai Boolean, atau satu set nilai Boolean.
Operator '=>' digunakan untuk pengisytiharan fungsi yang ditakrifkan pengguna danswitch
Dalam ayat-ayat tersebut.
Perkataan fungsi adalah:
<identifier>([<parameter_name>[=<default_value>]], ...) =>
<local_block>
<function_result>
Satu.<local_block>
Ia adalah satu daripada dua perkataan yang digunakan dalam bahasa Inggeris.<function_result>
Ia adalah satu variabel, satu ungkapan, atau satu kumpulan unsur.
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))
Nota:Anda boleh mempelajari lebih lanjut mengenai fungsi yang ditakrifkan pengguna di halaman fungsi pengisytiharan dan perpustakaan skrip dalam manual pengguna.
Lebih besar daripada. Berlaku untuk ungkapan bilangan.
expr1 > expr2
Nilai pulanganNilai Boolean, atau satu set nilai Boolean.
Lebih besar daripada atau sama dengan. Berlaku untuk ungkapan bilangan.
expr1 >= expr2
Nilai pulanganNilai Boolean, atau satu set nilai Boolean.
Operator tiga syarat.
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)
Nilai pulanganJika express1 dinilai sebagai true, express2 akan dinilai sebagai true, jika tidak, express3 akan dinilai sebagai true. Nilai sifar ((0 dan NaN+, Infinity,-Infinity) dianggap sebagai false dan semua nilai lain adalah true.
Nota:Jika anda tidak memerlukan, sila gunakan na sebagai cawangan??else??. Anda boleh menggunakan dua atau lebih operator: untuk mencapai pernyataan yang serupa dengan kata ganti (lihat contoh di atas). Anda boleh menggunakan pengendali aritmatika dengan nombor serta baris bilangan pembolehubah. Dalam kes menggunakan baris bilangan, pengendali digunakan untuk elemen.
Sampai jumpa lagi
na
Sub-label barisan↑ menyediakan akses kepada nilai terdahulu barisan expr1↑ expr2 ialah bilangan baris k yang lalu, mestilah nilai↑ float akan disampingkan ke bawah↑
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)
Nilai pulanganSatu siri nilai.
Sampai jumpa lagi
math.floor
Logik AND... digunakan untuk ungkapan Boolean...
expr1 and expr2
Nilai pulanganNilai Boolean, atau satu set nilai Boolean.
Logik OR↑ digunakan untuk ungkapan Boolean↑
expr1 or expr2
Nilai pulanganNilai Boolean, atau satu set nilai Boolean.
Permintaan logik sebaliknya ((NOT) ⇒ digunakan untuk ungkapan Boolean.
not expr1
Nilai pulanganNilai Boolean, atau satu set nilai Boolean.
Kata kunci jenis "Bool" yang digunakan untuk menyatakan secara jelas pembolehubah atau parameter. Nilai pembolehubah "Bool" boleh menjadi true, false atau na.
Contoh
// bool
bool b = true // Same as `b = true`
b := na
plot(b ? open : close)
Nota:Mengisytiharkan jenis secara jelas dalam deklarasi pembolehubah adalah pilihan, kecuali ia dimulakan dengan na. Baca lebih lanjut mengenai jenis Pine di halaman manual pengguna sistem jenis.
Sampai jumpa lagi
var
varip
int
float
color
string
true
false
Kata kunci jenis
Contoh
// int
int i = 14 // Same as `i = 14`
i := na
plot(i)
Nota:Mengisytiharkan jenis secara jelas dalam deklarasi pembolehubah adalah pilihan, kecuali ia dimulakan dengan na. Baca lebih lanjut mengenai jenis Pine di halaman manual pengguna sistem jenis.
Sampai jumpa lagi
var
varip
float
bool
color
string
Kata kunci jenis float float (float point) yang digunakan untuk menyatakan secara jelas pembolehubah atau parameter.
Contoh
// float
float f = 3.14 // Same as `f = 3.14`
f := na
plot(f)
Nota:Mengisytiharkan jenis secara jelas dalam deklarasi pembolehubah adalah pilihan, kecuali ia dimulakan dengan na.
Sampai jumpa lagi
var
varip
int
bool
color
string
Kata kunci jenis "string" yang digunakan untuk menyatakan secara jelas pembolehubah atau parameter.
Contoh
// string
string s = "Hello World!" // Same as `s = "Hello world!"`
// string s = na // same as ""
plot(na, title=s)
Nota:Mengisytiharkan jenis secara jelas dalam deklarasi pembolehubah adalah pilihan, kecuali ia dimulakan dengan na. Baca lebih lanjut mengenai jenis Pine di halaman manual pengguna sistem jenis.
Sampai jumpa lagi
var
varip
int
float
bool
str.tostring
str.format
Kata kunci jenis "color" yang digunakan untuk menyatakan secara jelas pembolehubah atau parameter.
Contoh
// color
color textColor = color.green
if barstate.islastconfirmedhistory
runtime.log("test", textcolor = textColor)
Nota:Aksara warna mempunyai 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 red, green, dan blue untuk warna. AA adalah nilai pilihan untuk ketelusan warna (atau alpha), di mana 00 tidak kelihatan, FF tidak telus. Apabila AA tidak disediakan, menggunakan FF. Huruf enam belas digit boleh ditulis besar atau kecil. Mengisytiharkan jenis secara jelas dalam deklarasi pembolehubah adalah pilihan, kecuali ia dimulakan dengan na. Lihat halaman panduan pengguna sistem jenis untuk mengetahui lebih lanjut mengenai jenis Pine.
Sampai jumpa lagi
var
varip
int
float
string
color.rgb
color.new
Kata kunci jenis array array yang digunakan untuk menyatakan secara jelas pembolehubah atau parameter; boleh digunakanarray.new<type>
,array.from
Fungsi mencipta objek array ((atau ID)).
Contoh
// array
array<float> a = na
a := array.new<float>(1, close)
plot(array.get(a, 0))
Nota:Objek barisan sentiasa dalam bentuk barisan baris.
Sampai jumpa lagi
var
array.new
array.from
Menghantar parameter apabila memanggil fungsi, anda boleh menetapkan penyerahan nama parameter, anda boleh menghantar pembolehubah secara langsung di lokasi parameter yang sesuai, dan juga menyokong penggunaan bercampur; contohnya:
plot(close, title="test plot") // 直接传参数 close ;指定参数 title ,赋值字符串"test plot"
Selepas penyampaian nama parameter ditentukan, pemindahan pemboleh ubah tidak boleh lagi dihantar secara langsung sebagai parameter, dan pemindahan seterusnya mesti ditulis dalam bentuk penyampaian nama parameter.
// plot(close, title="test", color.red) // 虽然plot第三个参数是颜色值,但是这样写就会报错
plot(close, title="test", color=color.red) // 正确写法
plot(close, "test", color.red) // 正确写法
akan dihantar kepadatimeframe
Tempoh tempoh parameter ditukar kepada saat.
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)
Nilai pulangan
timeframe
Int bagi bilangan saat dalam satu baris K adalah sebagai berikut:
Parameter
timeframe
(simple string) Jangka masa↑ opsional↑ nilai lalai adalah timeframe.period↑Nota:Untuktimeframe
>=
Sampai jumpa lagi
input.timeframe
timeframe.period
Membuat pengenal kod meminta rata-rata nilai baris K yang lancar.
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)
Nilai pulangan 股票代码的字符串值,可以提供给request.security函数。
Parameter
symbol
(simple string) Pengiktirafan kod barang.Sampai jumpa lagi
syminfo.tickerid
syminfo.ticker
request.security
Minta data luaran.
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)
Nilai pulanganParameterattribute
Rangkaian data yang ditetapkan.
Parameter
url
(simple string) URL sumber data yang diminta, format data sumber data yang dijawab mesti memenuhi syarat ((minimum mengandungi sifat time、data):{"data": [], "schema": ["time", "data"]}
◎ Boleh merujuk kepada format data dalam contoh:{
"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 sifat untuk mengembalikan data yang diperlukan; contohnya:"$.add_investor"
, kegunaan$.
Sebagai awalan, nama sifat konsisten dengan sifat dalam medan data dalam data yang dijawab apabila sumber data dimintaPermintaan untuk jenis / resolusi yang berbeza.
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)
Nilai pulanganPermintaan siri
Parameter
symbol
(simple string) Kod barang.timeframe
(simple string) Jangka masa. String kosong akan ditafsirkan sebagai tempoh masa semasa grafik.expression
(series int/float/bool/color) boleh dipanggil dari request.security dan mengembalikan satu ungkapan. Ia boleh menjadi satu siri atau satu kumpulan yang mengandungi unsur yang boleh ditukar kepada siri.gaps
(barmerge_gaps) Kebijakan penggabungan data yang diminta ((memerlukan data untuk digabungkan secara automatik dengan data OHLC siri utama) ). Nilai yang mungkin: barmerge.gaps_on, barmerge.gaps_off。 barmerge.gaps_on - data yang diminta digabungkan dengan jurang yang mungkin (na nilai) ─ barmerge.gaps_off - data yang diminta digabungkan secara berturut-turut tanpa henti, semua jurang diisi dengan nilai terkini yang ada sebelumnya。 Nilai lalai adalah barmerge.gaps_off。lookahead
(barmerge_lookahead) memberi dasar penggabungan data yang diminta. Nilai yang mungkin: barmerge.lookahead_on, barmerge.lookahead_off. Bermula dengan versi 3, nilai lalai adalah barmerge.lookahead_off.ignore_invalid_symbol
(const bool) Satu parameter pilihan. Jika barang yang ditentukan tidak dijumpai, tindakan fungsi ditentukan: jika false, skrip akan berhenti dan kembali kepada kesalahan semasa dijalankan; jika true, fungsi akan kembali ke na dan terus dijalankan. Nilai lalai adalah false.currency
(simple string) Mengubah mata wang yang berkaitan dengan mata wang barang tersebut (misalnya OHLC) kepada mata wang yang dikira; kemudian mengira nilai selepas penukaran berdasarkan mata wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wang wangNota:Kod PineScript yang menggunakan ciri ini boleh membuat pengiraan yang berbeza untuk rekod sejarah dan data masa nyata.Jika anda ingin menetapkan parameter tambahan untuk barang yang diminta, seperti tempoh urus niaga atau jenis penyesuaian, anda boleh mengeditnya.您可以使用ticker.newFungsi ini adalah sebagai berikut:
Tidak dapat menggunakan pembolehubah ticker tick untuk menyampaikan perbezaan titik kepada fungsi ini. Anda boleh menggunakan tick.ticker.newBentuk penyampaian baris bagi pembolehubah atau kod saham, seperti AAPL+MSFT*TSLAPada masa ini, satu skrip boleh mempunyai maksimum 40 panggilan request.security.
Sila ambil perhatian bahawa penggunaan pembolehubah / fungsi ini mungkin menyebabkan penunjuk digariskan semula.
Parameter resolusi dibenarkan untuk:
1S, 5S, 15S, 30S - selang detik (siklus grafik harus kurang daripada atau sama dengan tempoh yang diminta)
Dari 1 hingga 1440 minit
Dari 1D ke 365D hari.
Dari 1W kepada 52W dalam beberapa minggu.
Dari 1M hingga 12M dalam beberapa bulan.
Sampai jumpa lagi
syminfo.ticker
syminfo.tickerid
timeframe.period
ta.correlation
barmerge.lookahead_off
barmerge.lookahead_on
Jikasource
String mengandungistr
String anak, akan kembali ke benar, jika tidak akan kembali ke salah.
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)
Nilai pulanganJikasource
Dijumpai dalam tali.str
, adalah benar, jika tidak, adalah salah.
Parameter
source
(series string) String sumberstr
(series string) Substring untuk dicari.Sampai jumpa lagi
str.pos
str.match
Jikasource
String denganstr
Akhir baris yang ditentukan pada fail akan dikembalikan true, jika tidak akan dikembalikan false.
str.endswith(source, str)
Nilai pulanganJikasource
String denganstr
Akhir baris kecil yang ditetapkan di dalam adalah benar, jika tidak, adalah salah.
Parameter
source
(series string) String sumberstr
(series string) Substring untuk dicari.Sampai jumpa lagi
str.startswith
Jikasource
String denganstr
Pada permulaan strings yang ditetapkan pada fail, kembali ke benar atau false.
str.startswith(source, str)
Nilai pulanganJikasource
String denganstr
Permulaan baris kecil yang ditetapkan di dalam adalah benar, jika tidak, adalah salah.
Parameter
source
(series string) String sumberstr
(series string) Substring untuk dicari.Sampai jumpa lagi
str.endswith
dan kembalikan strings yang baru.source
String mempunyai substring.begin_pos
Bermula dengan karakter di dalam indeks yang ditentukan dan dilanjutkan 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)
Nilai pulanganString yang diambil daripada sumber strings.
Parameter
source
(series string) Mengekstrak string sumber daripada baris baris bawahnya.begin_pos
(series int) adalah kedudukan permulaan daripada baris baris yang diambil. Ia adalah eksklusif (serial baris yang diambil termasuk karakter dari baris tersebut).end_pos
(series int) berakhir di kedudukan. Ia adalah eksklusif (string yang diekstrak tidak termasuk watak di kedudukan) opsional.source
Panjang senar.Nota:Indeks senar bermula dari 0.begin_pos
sama denganend_pos
Fungsi ini akan mengembalikan satu baris kosong.
Sampai jumpa lagi
str.contains
str.pos
str.match
str.tonumber(string)
Nilai pulanganJika mengandungi nombor yang sah, ia adalah jenis titik terapung untuk baris, jika tidak, ia adalah na.
Parameter
string
(series string) int atau float sebagai bentuk penyampaian baris.Mengubah strings dan nilai format kepada strings format. String format boleh mengandungi satu penempatan dalam kurung besar {} dalam teks teks dan setiap nilai yang ingin diformat. Setiap penempatan termasuk indeks yang akan menggantikan parameter yang diperlukan (bermula dari 0), dan penunjuk format pilihan. Indeks menunjukkan tempat parameter dalam senarai 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)
Nilai pulanganString yang diformat.
Parameter
formatString
(series string) Senar format.arg0, arg1, ...
(series int/float/bool/string/na/int[]/float[]/bool[]/string[]) adalah nilai yang perlu diformat.Nota:Semua tanda kurung dalam gaya yang tidak dipetik mesti diimbangi. Sebagai contoh,
Mengembalikan bilangan bulat yang sepadan dengan bilangan aksara dalam tali tersebut.
str.length(string)
Nilai pulanganBilangan aksara dalam rentetan sumber.
Parameter
string
(series string) String sumberMengembalikan satu baris baru di mana semua huruf ditukar kepada huruf kecil.
str.lower(source)
Nilai pulanganSemua huruf telah ditukar kepada baris baru yang ditulis dengan huruf kecil.
Parameter
source
(series string) String yang akan ditukar.Sampai jumpa lagi
str.upper
Mengembalikan satu baris baru di mana semua huruf telah ditukar menjadi huruf besar.
str.upper(source)
Nilai pulanganSemua huruf telah ditukar kepada baris baru yang ditulis besar.
Parameter
source
(series string) String yang akan ditukar.Sampai jumpa lagi
str.lower
Jika ia sepadan.regex
Perkataan biasa akan kembali.source
String yang baru, jika tidak akan dikembalikan kepada
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
wuhuoyanBagaimana untuk menjalankan pelbagai transaksi pada masa yang sama untuk kontrak Bitcoin?
Awan ringanBolehkah anda beritahu saya, adakah pine boleh berdagang lebih banyak? Adakah ia boleh berdagang lebih banyak seperti JS? Terima kasih.
Lisa20231Terima kasih untuk maklumat lanjut.
seniWow! bagaimana skrip pine ini menggunakan okx simulator pada platform?
seniIni sama dengan strategi platform tradingview yang boleh disalin terus ke platform pencipta untuk digunakan!
Mimpi kecilBahasa PINE hanya boleh melakukan dasar varietasi tunggal, strategi pelbagai varietasi adalah yang terbaik atau menulis reka bentuk dengan python, javascript, c ++.
Mimpi kecilOh, ya, OKX agak istimewa, mereka mempunyai alamat yang sama di persekitaran analog dan persekitaran cakera sebenar, hanya membuat perbezaan di tempat lain.
Awan ringanTidak boleh menggunakan okx analog.
Mimpi kecilMasalah seni bina yang pelbagai ini tidak dapat diselesaikan dengan baik, kerana setiap pertukaran mempunyai antara muka yang berbeza, dan batasan frekuensi antara muka juga tidak sama, yang akan menimbulkan banyak masalah.
Mimpi kecilBaiklah, terima kasih kerana mencadangkan, dan laporkan permintaan ini di sini.
Awan ringanPerasaan yang lebih baik untuk disatukan dengan JS, JS boleh menyesuaikan diri dengan pelbagai cara berdagang.
Pemangsa trendAdakah anda akan mempertimbangkan lebih banyak varieti pada masa akan datang?
Mimpi kecilTidak sopan.
Awan ringanBaiklah, terima kasih banyak.
Mimpi kecilHalo, sementara, strategi bahasa PINE hanya boleh menggunakan satu jenis sahaja.
Mimpi kecilTidak sopan, terima kasih atas sokongan anda. Dokumen akan terus diperbaiki.
Mimpi kecilYa, saya faham.
Mimpi kecilPINE template library, parameter yang boleh ditetapkan untuk menukar alamat pangkalan pertukaran.