FMZ PINE Script dokumentasi

Penulis:Mimpi kecil, Dicipta: 2022-05-06 14:27:06, Dikemas kini: 2024-02-23 15:36:48

[TOC]

Kata kunci, tatabahasa, seting resume

Struktur kod

Struktur umum yang diikuti oleh kod dalam Pine:

<version>
<declaration_statement>
<code>

Catatan

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')

Versi

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

Pernyataan

  • 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.

Kod

Baris skrip yang bukan komen atau arahan penyusun adalah ayat yang melaksanakan algoritma skrip. Sebuah ayat boleh menjadi salah satu daripada mereka.

  • Pernyataan pembolehubah
  • Nilai semula pembolehubah
  • Pernyataan fungsi
  • Panggilan fungsi terbina dalam, panggilan fungsi yang ditakrifkan pengguna
  • ifforwhileatauswitchStruktur setara

Perkataan boleh disusun dalam pelbagai cara

  • Sesetengah pernyataan boleh dinyatakan dengan satu baris, seperti kebanyakan pengisytiharan pembolehubah, yang hanya mengandungi satu baris panggilan fungsi atau pengisytiharan fungsi satu baris; yang lain, seperti struktur, selalu memerlukan lebih banyak baris kerana mereka memerlukan blok tempatan.
  • Perkataan dalam ruang global skrip (iaitu bahagian yang tidak termasuk dalam bahagian) tidak boleh digunakan untuk空格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.
  • Pernyataan struktur atau fungsi berbilang baris sentiasa memerlukanlocal 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.
  • Beberapa ayat tunggal boleh disambung dalam satu baris dengan menggunakan koma (,) sebagai pencacah.
  • Satu baris boleh mengandungi nota atau hanya nota.
  • Baris juga boleh dibungkus (berlanjut dalam pelbagai baris).

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)  // 调用一个内置函数输出日志 (全局范围)

Ganti kod barisan

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

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 dalamopenSebagai contoh,openVariabel terbina dalam merakam harga buka untuk setiap baris K BAR, jika iniopenJadi ini adalah data untuk 5 minit kitaran garis K.openYang dirakamkan dalam pembolehubah adalah harga pembukaan baris BAR (bar) K setiap 5 minit.openIni 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.

Parameter templat perpustakaan perdagangan bahasa Pine

Panduan tetapan parameter untuk template terbina dalam dasar PINE "Pine Language Exchange Library".

Tetapan urus niaga

  • Cara pelaksanaan Model harga penutupan: Model ini dijalankan sebelum BAR semasa selesai, dan perdagangan dijalankan pada permulaan BAR bawah. Model harga masa nyata: Model ini dijalankan setiap kali perubahan harga, dengan isyarat untuk melaksanakan dagangan dengan segera.
  • Bilangan perdagangan lalai: Jika arahan dagangan tidak menetapkan jumlah dagangan, dagangan akan dilaksanakan mengikut jumlah yang ditetapkan.
  • Jumlah pesanan tunggal maksimum: Berdasarkan akaun sebenar, seting parameter ini digabungkan untuk menentukan jumlah pesanan maksimum setiap kali, mengelakkan kejutan pada akaun.
  • Jumlah titik harga: mengikut定价货币精度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).
  • Bilangan kitaran terpanjang pembolehubah: mempengaruhi bilangan baris BAR grafik K, denganjavascriptPanggilan dalam strategiSetMaxBarLenFungsi berfungsi sama.

Pilihan niaga hadapan

  • Kod jenis: Kod kontrak, objek bursa hanya perlu ditetapkan apabila objek bursa bukan tunai.
  • Jumlah kontrak minimum: jumlah kontrak yang paling kecil ketika pesanan dibuat.

Pilihan cakera sebenar

  • Kembali ke kemajuan automatik: Kembali ke keadaan sebelum dasar terakhir dihentikan.
  • Jumlah percubaan semula pesanan: Perintah yang tidak ditandatangani akan membatalkan pesanan, memesan semula usaha transaksi, parameter ini digunakan untuk mengehadkan jumlah percubaan semula maksimum.
  • Julat pertanyaan rangkaian (millisecond): hanya berlaku untuk protokol REST, mengawal julat permintaan rangkaian, mengelakkan permintaan yang terlalu kerap dan melampaui had bursa.
  • Masa sinkronisasi akaun (second): Tempoh yang digunakan untuk menyinkronkan data akaun.
  • Masa sinkronisasi pos selepas pembukaan (milliseconds): hanya untuk beberapa pertukaran yang mengalami keterlambatan data yang disebabkan oleh pembukaan berulang, masa sinkronisasi yang lebih besar boleh mengurangkan masalah ini.
  • Pengganda Leverage: Tetapkan pengganda Leverage.

Perdagangan segera, tetapan lain

  • Jumlah dagangan satu tangan: Jumlah dagangan satu tangan lalai, hanya berlaku untuk barang tunai.
  • Jumlah urus niaga minimum: Jumlah urus niaga minimum.
  • Kecekapan mata wang: Kecekapan harga, iaitu bilangan kecil harga.
  • Kecekapan jenis urus niaga: Kecekapan unit seterusnya, iaitu bilangan digit kecil unit seterusnya.
  • Bayaran: Untuk mengira beberapa data mengikut tetapan ini, 0.002 bermaksud 2 per seribu.
  • Julat statistik keuntungan dan kerugian: hanya digunakan untuk menunjukkan statistik keuntungan dan kerugian pada cakera sebenar.
  • Percubaan semula gagal (millisecond): Jarak percubaan semula apabila permintaan rangkaian gagal.
  • Penggunaan ejen: hanya berlaku untuk protokol REST.
  • Hide Common Network Errors: Hide Common Error Logs di kawasan log.
  • Tukar alamat pangkalan: hanya berlaku untuk protokol REST.
  • Menghantar notis: Memindahkan mesej ke peti mel dan sebagainya.

Perdagangan bawah

Pembukaan

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)                          // 指定(较低的)价格,计划下买单订单,等待成交开仓,限价开仓

Perumahan

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 Perdagangan

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.

Senarai rancangan

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.entryApabila kita mengurutkan fungsi, kita boleh menetapkanlimitstopParameter.

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)directionParameter ialahstrategy.longPerintah hanya akan dicetuskan apabila harga pasaran semasa berada di bawah harga tersebut. Apabila pesanan adalah pesanan jualan (iaitudirectionParameter ialahstrategy.shortPerintah 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 samalimitstopParameter, pesanan dipicu pada harga yang memenuhi syarat terlebih dahulu.

Pernyataan, kata kunci struktur logik

var

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 a mengekalkan harga penutupan untuk baris pertama setiap baris dalam siri. Variabel aluminium b mengekalkan harga penutupan bar harga aluminium hijau pertama dalam siri ini. Variabel ketumbar c ketumbar mengekalkan harga penutupan ketumbar hijau ketumbar kesepuluh dalam siri.

Pada FMZ, model harga sebenar, model harga penutupan, dan model harga penutupan digunakan untukvarvaripKami 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.varvaripVariabel yang dinyatakan i, ii akan dijalankan pada setiap kali pelaksanaan kod dasar keranaif trueOleh 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.varvaripVariabel 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 + 1danii := ii + 1Ia 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,varvaripVariabel yang diisytiharkan dalam contoh di atas adalah sama sepenuhnya dengan peningkatan, iaitu peningkatan 1 untuk setiap baris K BAR.

berlainan

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.

betul

Menunjukkan nilai kepada pembolehubah jenis boolean atau apabila ungkapan digunakanPerbandinganatauLogikNilai yang boleh dikira apabila operator.

Nota:Sila lihatPerbandinganOperator danLogikPenerangan pengendali.

Sampai jumpa lagi bool

palsu

Menunjukkan nilai pembolehubah jenis Boolean, serta hasil operasi perbandingan, operasi logik.

Nota:Sila lihatPerbandinganOperator danLogikPenerangan pengendali.

Sampai jumpa lagi bool

jika

Perkataan if mendefinisikan blok perkataan yang mesti dilaksanakan apabila memenuhi syarat ungkapan. Bahasa skrip Pine versi ke-4 membolehkan anda menggunakan sintaks else if.

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 digunakanthenLogiknyavar_decl_then0var_decl_then1dan sebagainya). Jika syarat adalah false, block ayat digunakan.else ifatauelseLogiknyavar_decl_else0var_decl_else1Dan 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_thendanreturn_expression_elseJenis. 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 disingkirkanelseBlok. 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.ifNilai hasil pernyataan ((var_declarationX= boleh diabaikan) ). Ia mungkin berguna jika anda memerlukan kesan sampingan ekspresi, seperti dalam perdagangan strategi:

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)

untuk

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

untuk... dalam

for...inStruktur 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_expressionNilai 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_elementPerbandingan 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_declarationVariabel 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...inBentuk 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.isPosNilai aritmatika ditetapkan sebagaitrueApabila mereka berada di kawasan kami,valuesArrayNilai 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

sementara

whilePerkataan membenarkan pengulangan syarat blok kod tempatan.

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

Menjelaskan:variable_declaration- Pengisytiharan pembolehubah pilihan.return expressionNilai initialization boleh diberikan kepada pembolehubah ini.boolean_expression- Jika benar, jalankanwhileBlok tempatan ayat. Jika false, diwhileSelepas kalimat, teruskan menjalankan skrip.continue - continueKata kunci membawa kepada cabang berputar ke iterasi seterusnya.break - breakKata kunci membawa kepada penghentian gelung.whilePerkataan itu diteruskan selepas kalimat tersebut.return_expression- DisediakanwhileBaris 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:PermulaanwhileBlok kod tempatan selepas baris mesti disempurnakan kepada empat ruang atau satu tanda jam.whilePelanconganwhileEkspresi Boolean seterusnya mesti akhirnya menjadi false, atau mesti dijalankanbreak

menukar

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_blockcontoh ataudefault_local_blockSalah seorang daripada mereka.default_local_blockHanya dengan=>Penanda masuk bersama-sama, dan hanya dijalankan apabila blok sebelumnya tidak dijalankan; jikaswitchHasil pernyataan diberikan kepada satu pembolehubah dan tidak ditentukandefault_local_blockJika tidak dilaksanakan,local_blockJika anda menggunakan kata yang sama, maka ia akan kembali kepada anda.na◄ akanswitchApabila hasil pernyataan diberikan kepada pembolehubah, semualocal_blockContoh mestilah mengembalikan nilai jenis yang sama.

Sampai jumpa lagi if ?:

siri

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

Operator

=

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 danswitchDalam 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

dan

Logik AND... digunakan untuk ungkapan Boolean...

expr1 and expr2

Nilai pulanganNilai Boolean, atau satu set nilai Boolean.

atau

Logik OR↑ digunakan untuk ungkapan Boolean↑

expr1 or expr2

Nilai pulanganNilai Boolean, atau satu set nilai Boolean.

Tidak

Permintaan logik sebaliknya ((NOT) ⇒ digunakan untuk ungkapan Boolean.

not expr1

Nilai pulanganNilai Boolean, atau satu set nilai Boolean.

Kata kunci jenis data

bool

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

int

Kata kunci jenis int ((integer) yang digunakan untuk menyatakan secara jelas pembolehubah atau parameter.

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

mengambang

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

senar

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

warna

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

Array

Kata kunci jenis array array yang digunakan untuk menyatakan secara jelas pembolehubah atau parameter; boleh digunakanarray.new<type>,array.fromFungsi 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

Fungsi terbina dalam

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)             // 正确写法

jangka masa

jangka masa.dalam_detik

akan dihantar kepadatimeframeTempoh 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 timeframeInt bagi bilangan saat dalam satu baris K adalah sebagai berikut:

Parameter

  • timeframe(simple string) Jangka masa↑ opsional↑ nilai lalai adalah timeframe.period↑

Nota:Untuktimeframe>=1M Fungsi yang dihitung berdasarkan bilangan saat pada hari 30.4167 (365/12) dalam sebulan.

Sampai jumpa lagi input.timeframe timeframe.period

Tikal

ticker.heikinashi

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

permintaan

request.data

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 pulanganParameterattributeRangkaian 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 diminta

request.security

Permintaan 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 wang

Nota: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*TSLA;Pada 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

str

str.contains

JikasourceString mengandungistrString 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 pulanganJikasourceDijumpai dalam tali.str, adalah benar, jika tidak, adalah salah.

Parameter

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

Sampai jumpa lagi str.pos str.match

str.endswith

JikasourceString denganstrAkhir baris yang ditentukan pada fail akan dikembalikan true, jika tidak akan dikembalikan false.

str.endswith(source, str)

Nilai pulanganJikasourceString denganstrAkhir baris kecil yang ditetapkan di dalam adalah benar, jika tidak, adalah salah.

Parameter

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

Sampai jumpa lagi str.startswith

str.startswith

JikasourceString denganstrPada permulaan strings yang ditetapkan pada fail, kembali ke benar atau false.

str.startswith(source, str)

Nilai pulanganJikasourceString denganstrPermulaan baris kecil yang ditetapkan di dalam adalah benar, jika tidak, adalah salah.

Parameter

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

Sampai jumpa lagi str.endswith

str.substring

dan kembalikan strings yang baru.sourceString mempunyai substring.begin_posBermula dengan karakter di dalam indeks yang ditentukan dan dilanjutkan kesourceend_pos - 1.

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

Contoh

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

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.sourcePanjang senar.

Nota:Indeks senar bermula dari 0.begin_possama denganend_posFungsi ini akan mengembalikan satu baris kosong.

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

str.tonumber

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.

str.format

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, ab {0} de" dan "ab } de" adalah gaya yang sah, tetapi "ab {0} de, ab } de" dan {" bukan gaya yang sah.

str.length

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 sumber

str.lower

Mengembalikan 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

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

str.match

Jika ia sepadan.regexPerkataan biasa akan kembali.sourceString yang baru, jika tidak akan dikembalikan kepada na.

str.match(source, regex) 

Contoh

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

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

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

Lebih lanjut

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.