Memperkenalkan Tabel Pine

May 25, 2021

Tabel adalah objek yang dapat digunakan untuk memposisikan informasi pada suatu lokasi yang spesifik dan tetap pada sebuah ruang visual dari skrip. Berlawanan dengan plot atau objek yang digambar dalam Pine lainnya, tabel tidak dijangkarkan pada bar tertentu: ini melayang didalam sebuah ruang skrip, baik dalam mode menumpuk atau panel, dalam studi atau strategi, secara independen dan tidak tergantung pada jumlah bar yang sedang dilihat atau faktor zoom yang digunakan.

Fungsionalitas baru ini memungkinkan anda untuk menyajikan data dengan cara yang tidak dapat dilakukan sebelumnya. Anda dapat membuat sebuah panel tampilan yang diciptakan secara otomatis dengan data yang relevan terhadap simbol saat ini dan mematenkannya di sisi layar anda, atau membuat sebuah peta panas dinamis, atau menyediakan akses cepat ke dalam informasi apapun yang tersedia dalam Pine — kemungkinannya tidak terbatas. Selain itu, tabel juga dapat digunakan bersamaan dengan fitur-fitur Skrip Pine lainnya untuk meningkatkan kemampuan dari indikator anda yang telah ada.

Lihatlah Panduan Pengguan Pine untuk tabel untuk memulai dan membuat tabelnya.

Tabel performa ini, terinspirasi akan bagian “Performa” di sidebar kami, membantu anda melacak performa dari simbol pada chart:

//@version=4
study("Performance", overlay=true)

var table perfTable = table.new(position.top_right, 3, 2, border_width = 3)

LIGHTTRANSP = 90
AVGTRANSP   = 80
HEAVYTRANSP = 70

i_posColor = input(color.rgb(38, 166, 154), title="Positive Color")
i_negColor = input(color.rgb(240, 83, 80), title="Negative Color")

f_rateOfreturn(_v1, _v2) => (_v1 - _v2) * 100 / abs(_v2)

f_performance(_barsBack) =>
    _performance = security(syminfo.tickerid, "1D", f_rateOfreturn(close, close[_barsBack]))
    _performance
   
lastYearClose = security(syminfo.tickerid, "12M", close[1], lookahead=barmerge.lookahead_on)

f_fillCell(_table, _column, _row, _value, _timeframe) =>
    _c_color = _value >= 0 ? i_posColor : i_negColor
    _transp = abs(_value) > 10 ? HEAVYTRANSP : abs(_value) > 5 ? AVGTRANSP : LIGHTTRANSP
    _cellText = tostring(_value, "#.##") + "%\n" + _timeframe
    table.cell(_table, _column, _row, _cellText, bgcolor = color.new(_c_color, _transp), text_color = _c_color, width = 6)

if barstate.islast
    f_fillCell(perfTable, 0, 0, f_performance(5), "1W")
    f_fillCell(perfTable, 1, 0, f_performance(21), "1M")
    f_fillCell(perfTable, 2, 0, f_performance(63), "3M")
    f_fillCell(perfTable, 0, 1, f_performance(126), "6M")
    f_fillCell(perfTable, 1, 1, f_rateOfreturn(close, lastYearClose), "YTD")
    f_fillCell(perfTable, 2, 1, f_performance(251), "1Y")

Contoh dibawah ini menunjukkan tabel yang digunakan pada skrip oleh para PineCoder yang membantu kami menguji fitur baru Pine ini:

Indicator Panel oleh LonesomeTheBlue

TA Information Panel oleh RicardoSantos:

Correlation Matrix Heatmap oleh RicardoSantos:

Dan, jika anda ingin beristirahat dari trading, anda dapat menggunakan tabel Pine untuk bermain catur dengan teman-teman anda:

//@version=4
study("Chess", overlay=true)

// Coordinate conversion system
var a_xString = array.from(na, "a", "b", "c", "d", "e", "f", "g", "h")
var a_yString = array.from(na, "8", "7", "6", "5", "4", "3", "2", "1")

// Creating base table
f_even(_num) =>
    _isEven = true
    if _num % 2 == 0
        _isEven := false
    _isEven
   
f_cellColor(_column, _row) =>
    color _cellColor = color.white
    if f_even(_column)
        if not f_even(_row)
            _cellColor := color.gray
    else
        if f_even(_row)
            _cellColor := color.gray
    _cellColor
   
PADDING = "◯"

var table chessBoard = table.new(position.middle_right, 10, 10, frame_color = color.black, 
     border_color = color.black, frame_width = 3, border_width = 1, bgcolor = color.black)

if barstate.isfirst
    for _column = 1 to 8
        for _row = 1 to 8
            table.cell(chessBoard, _column, _row, text = PADDING, bgcolor = f_cellColor(_column, _row), text_size = size.huge, text_color = #00ff0000)

    for _row = 1 to 8
        table.cell(chessBoard, 0, int(abs(9 - _row)), text = tostring(_row), text_size = size.small, text_color = color.white)
        table.cell(chessBoard, 9, int(abs(9 - _row)), text = tostring(_row), text_size = size.small, text_color = color.white)

    for _column = 1 to 8
        table.cell(chessBoard, _column, 0, text = array.get(a_xString, _column), text_size = size.small, text_color = color.white)
        table.cell(chessBoard, _column, 9, text = array.get(a_xString, _column), text_size = size.small, text_color = color.white)

// Two letters before the input signify the piece color/type

// White pieces
var i_whitePawn1 = "wp" + input("a2", "", group="White Pawns", inline="White Pawns #1")
var i_whitePawn2 = "wp" + input("b2", "", group="White Pawns", inline="White Pawns #1")
var i_whitePawn3 = "wp" + input("c2", "", group="White Pawns", inline="White Pawns #1")
var i_whitePawn4 = "wp" + input("d2", "", group="White Pawns", inline="White Pawns #1")
var i_whitePawn5 = "wp" + input("e2", "", group="White Pawns", inline="White Pawns #2")
var i_whitePawn6 = "wp" + input("f2", "", group="White Pawns", inline="White Pawns #2")
var i_whitePawn7 = "wp" + input("g2", "", group="White Pawns", inline="White Pawns #2")
var i_whitePawn8 = "wp" + input("h2", "", group="White Pawns", inline="White Pawns #2")

var i_whiteRook1   = "wr" + input("a1", inline="White Rooks"  , group="White Pieces", title="Rooks   ") 
var i_whiteRook2   = "wr" + input("h1", inline="White Rooks"  , group="White Pieces", title="") 
var i_whiteKnight1 = "wn" + input("b1", inline="White Knights", group="White Pieces", title="Knights")
var i_whiteKnight2 = "wn" + input("g1", inline="White Knights", group="White Pieces", title="")
var i_whiteBishop1 = "wb" + input("c1", inline="White Bishops", group="White Pieces", title="Bishops")
var i_whiteBishop2 = "wb" + input("f1", inline="White Bishops", group="White Pieces", title="")
var i_whiteQueen   = "wq" + input("d1", inline="White Queen"  , group="White Pieces", title="Queen  ")
var i_whiteKing    = "wk" + input("e1", inline="White King"   , group="White Pieces", title="King      ")

var a_whitePieces = array.from(i_whitePawn1, i_whitePawn2, i_whitePawn3, i_whitePawn4, i_whitePawn5, i_whitePawn6, i_whitePawn7, i_whitePawn8, 
                         i_whiteRook1, i_whiteRook2, i_whiteKnight1, i_whiteKnight2, i_whiteBishop1, i_whiteBishop2, i_whiteQueen, i_whiteKing)

// Black pieces
var i_blackPawn1 = "bp" + input("a7", "", group="Black Pawns", inline="Black Pawns #1")
var i_blackPawn2 = "bp" + input("b7", "", group="Black Pawns", inline="Black Pawns #1")
var i_blackPawn3 = "bp" + input("c7", "", group="Black Pawns", inline="Black Pawns #1")
var i_blackPawn4 = "bp" + input("d7", "", group="Black Pawns", inline="Black Pawns #1")
var i_blackPawn5 = "bp" + input("e7", "", group="Black Pawns", inline="Black Pawns #2")
var i_blackPawn6 = "bp" + input("f7", "", group="Black Pawns", inline="Black Pawns #2")
var i_blackPawn7 = "bp" + input("g7", "", group="Black Pawns", inline="Black Pawns #2")
var i_blackPawn8 = "bp" + input("h7", "", group="Black Pawns", inline="Black Pawns #2")

var i_blackRook1   = "br" + input("a8", inline="Black Rooks"  , group="Black Pieces", title="Rooks   ") 
var i_blackRook2   = "br" + input("h8", inline="Black Rooks"  , group="Black Pieces", title="") 
var i_blackKnight1 = "bn" + input("b8", inline="Black Knights", group="Black Pieces", title="Knights")
var i_blackKnight2 = "bn" + input("g8", inline="Black Knights", group="Black Pieces", title="")
var i_blackBishop1 = "bb" + input("c8", inline="Black Bishops", group="Black Pieces", title="Bishops")
var i_blackBishop2 = "bb" + input("f8", inline="Black Bishops", group="Black Pieces", title="")
var i_blackQueen   = "bq" + input("d8", inline="Black Queen"  , group="Black Pieces", title="Queen  ")
var i_blackKing    = "bk" + input("e8", inline="Black King"   , group="Black Pieces", title="King      ")

var a_blackPieces = array.from(i_blackPawn1, i_blackPawn2, i_blackPawn3, i_blackPawn4, 
 i_blackPawn5, i_blackPawn6, i_blackPawn7, i_blackPawn8, i_blackRook1, i_blackRook2, 
 i_blackKnight1, i_blackKnight2, i_blackBishop1, i_blackBishop2, i_blackQueen, i_blackKing)

f_getIcon(_str) =>
    var _pieces = array.from( "k", "♔", "♚", 
                             "q", "♕", "♛",
                             "r", "♖", "♜",
                             "b", "♗", "♝",
                             "n", "♘", "♞",
                             "p", "♙", "♟")

    _split = str.split(_str, "")
   
    if array.size(_split) == 4
        _color = array.get(_split, 0)
        _piece = array.get(_split, 1)
        _piece_offset = _color == "w" ? 1 : _color == "b" ? 2 : na
        array.get(_pieces, array.indexof(_pieces, _piece) + _piece_offset)

f_placePiece(_piece_input) =>
    _split = str.split(_piece_input, "")
    if array.size(_split) == 4
        _icon = f_getIcon(_piece_input)
        _x = array.indexof(a_xString, array.get(_split, 2))
        _y = array.indexof(a_yString, array.get(_split, 3))
        table.cell_set_text(chessBoard, _x, _y, _icon)
        table.cell_set_text_color(chessBoard, _x, _y, color.black)

if barstate.islast
    for i = 0 to array.size(a_whitePieces) - 1
        f_placePiece(array.get(a_whitePieces, i))
   
    for i = 0 to array.size(a_blackPieces) - 1
        f_placePiece(array.get(a_blackPieces, i))

Kami harap fitur baru yang anda minta ini dapat berguna. Harap terus kirimkan kritik dan saran anda. Kami membangun TradingView untuk anda dan kami senang menerima tanggapan anda.

Look first Then leap

TradingView dibangun untuk anda, karenanya manfaatkan fitur-fitur luar biasa kami semaksimal mungkin
Luncurkan Chart