Le tabelle sono oggetti che possono essere usati per mostrare delle informazioni in zone specifiche dell’area di lavoro. A differenza degli altri strumenti grafici di Pine, queste non sono ancorate alle barre ma piuttosto ad un’area del grafico, sia essa in overlay o in un pannello separato, all’interno di una strategia o di un indicatore, indipendentemente dal tipo di grafico o dal grado di zoom utilizzato.
Una funzionalità che permette di presentare dei dati in una veste tutta nuova, diversa dal passato: potete creare un pannello automatico che contenga informazioni relative al simbolo corrente e fissarlo a lato dello schermo, o una mappa dinamica con colori di crescente intensità. Potete rendere accessibili statistiche ottenute direttamente da Pine, e chi più ne ha più ne metta. Queste tabelle sono ideali se usate in combinazione con la suite di funzioni già presenti su Pine, e danno nuova linfa ai vostri indicatori.
Per iniziare subito a sporcarvi le mani, vi consigliamo di leggere la pagina dedicata nella Guida a Pine (ENG).
Questa tabella di performance, ad esempio, replica quello che è già visibile nella finestra dei Dettagli della watchlist:
//@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")
Di seguito, alcuni script realizzati dalla nostra comunità di beta-tester del team PineCoders:
Indicator Panel by LonesomeTheBlue
TA Information Panel by RicardoSantos:
Correlation Matrix Heatmap by RicardoSantos:
E per chi volesse prendersi una pausa dal trading, con le tabelle potete persino ricreare una scacchiera sul grafico:
//@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))
Crediamo fortemente che le tabelle possano rivoluzionare il modo in cui Pine è utilizzato dagli sviluppatori. Ora tocca alla vostra fantasia. E non dimenticate di inviarci feedback o suggerimenti nel caso vogliate aiutarci a migliorare la piattaforma.