表格 (Table) 对象,可用于放置信息在脚本视觉空间中的特定和固定的位置。与在 Pine 中绘制的所有其他图或对象相反,表格不锚定到特定的K线:它们浮在脚本的空间中,无论是在叠加还是窗格模式下、在研究或策略中、与正在查看的图表K线或使用的缩放因子无关。
这一新功能使您能够以前所未有的方式呈现数据。您可以建立一个自动生成的显示面板,其中包含当前商品的相关数据并将其固定到屏幕的一侧,或建立动态热图,或提供对 Pine 中任何可用信息的快速访问 — 具有无限的可能性。不用说,表格可以与所有其他 PineScript 功能结合使用,以进一步改进您现有的指标。
到 Pine用户手册的表格页面,直接进入并开始建立表格。
此绩效表格的灵感来自我们侧边栏的“绩效(Performance)”部分,可帮助您追踪图表交易品种的绩效:
//@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")
以下示例显示了帮助我们测试 Pine 新功能的 PineCoders 在脚本中使用的表格:
Indicator Panel by LonesomeTheBlue
TA Information Panel by RicardoSantos:
Correlation Matrix Heatmap by RicardoSantos:
而且,如果您想从交易中休息一下,您可以使用 Pine 表格与您的朋友下棋:
//@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))
我们希望大家要求的这项新功能有用。请继续向我们发送您的改进建议。我们为您打造 TradingView,并喜欢收到您的反馈。
还没有关注我们的中文微信公众号?快来扫二维码吧!