Anexo A. pré-processador Pine Script v2

From TradingView Wiki
Jump to: navigation, search
Language: English  • 日本語 • Português • Русский

Algoritmo de @version=2 Pine Script pré-processador em pseudo-code:

  1. Remova os comentários
  2. Substitua \r\n ou \r por apenas \n
  3. Adicione \n no final do texto, se estiver faltando.
  4. Linhas que contém apenas espaço em branco substitua com apenas séries vazias.
  5. Adicione códigos |INDENT|. Eles indicam que a declaração está em um bloco de código, como o corpo da função, if ou for. Cada tab ou quatro espaços são substituídos por token |INDENT|.
  6. Adicione códigos |B| e |E|. Eles indicam a linha que inicia e a linha que termina. Substitua as linhas vazias com o código |EMPTY|.
  7. Junte linhas que representam instruções separadas.
  8. Adicione o bloco de códigos (|BEGIN| - início do bloco de códigos, |END| - fim do bloco de códigos, |PE| - possível fim do bloco de códigos).

Isso é ilustrado no exemplo. Texto de Pine Script inicial. Observe o comentário //@version=2 na primeira linha, é a diretriz que ajuda a escolher o pré-processador/versão de interpretação de Pine Script correta.

"//@version=2
study('Exemplo de pré-processador')
fun(x, y) =>
    if close > open // Essa linha tem um INDENT
        x + y // Essa linha possui dois INDENT
    também… 
        x - y
    // Algum espaço em branco e um comentário

a = sma(close, 10)
b = fun(a, 123)
c = security(tickerid, period, b)
plot(c, title='Out', color=c > c[1] ? lime : red, // Esta afirmação continua na próxima linha
     style=linebr, trackprice=true) // Está prefixado com 5 espaços, logo isso não será considerado como um INDENT
alertcondition(c > 100)"

Depois dos passos 1), 2), 3) e 4).

"
study('Exemplo de pré-processador')
fun(x, y) =>
    if close > open 
        x + y 
    else 
        x - y
    

a = sma(close, 10)
b = fun(a, 123)
c = security(tickerid, period, b)
plot(c, title='Out', color=c > c[1] ? lime : red, 
     style=linebr, trackprice=true) 
alertcondition(c > 100)
"

Depois do passo 5). Cada 4 espaços foi substituído pelo código |INDENT| Observe que 8 espaços pode ser substituído por dois códigos |INDENT| E assim por diante.

"
study('Exemplo de pré-processador')
fun(x, y) =>
|INDENT|if close > open 
|INDENT||INDENT|x + y 
|INDENT|else 
|INDENT||INDENT|x - y
    

a = sma(close, 10)
b = fun(a, 123)
c = security(tickerid, period, b)
plot(c, title='Out', color=c > c[1] ? lime : red, 
|INDENT| style=linebr, trackprice=true) 
alertcondition(c > 100)
"

Depois do passo 6).

"|EMPTY|
|B|study('Exemplo de pré-processador')|E|
|B|fun(x, y) =>|E|
|B||INDENT|if close > open |E|
|B||INDENT||INDENT|x + y |E|
|B||INDENT|else |E|
|B||INDENT||INDENT|x - y|E|
|EMPTY|
|EMPTY|
|B|a = sma(close, 10)|E|
|B|b = fun(a, 123)|E|
|B|c = security(tickerid, period, b)|E|
|B|plot(c, title='Out', color=c > c[1] ? lime : red, |E|
|B||INDENT| style=linebr, trackprice=true) |E|
|B|alertcondition(c > 100)|E|
|EMPTY|"

Após o passo 7). Observe que a linha plot(c, title= juntou-se à próxima linha.

"|EMPTY|
|B|study('Exemplo de pré-processador')|E|
|B|fun(x, y) =>|E|
|B||INDENT|if close > open |E|
|B||INDENT||INDENT|x + y |E|
|B||INDENT|else |E|
|B||INDENT||INDENT|x - y|E|
|EMPTY|
|EMPTY|
|B|a = sma(close, 10)|E|
|B|b = fun(a, 123)|E|
|B|c = security(tickerid, period, b)|E|
|B|plot(c, title='Out', color=c > c[1] ? lime : red, style=linebr, trackprice=true) |E|
|EMPTY|
|B|alertcondition(c > 100)|E|
|EMPTY|"

Após o passo 8).

"|EMPTY|
|B|study('Exemplo de pré-processador')|E|
|B|fun(x, y) =>|E|
|BEGIN||B|if close > open |E|
|BEGIN||B|x + y |E||END||PE|
|B|else |E|
|BEGIN||B|x - y|E|
|EMPTY|
|EMPTY||END||PE||END||PE|
|B|a = sma(close, 10)|E|
|B|b = fun(a, 123)|E|
|B|c = security(tickerid, period, b)|E|
|B|plot(c, title='Out', color=c > c[1] ? lime : red, style=linebr, trackprice=true) |E|
|EMPTY|
|B|alertcondition(c > 100)|E|
|EMPTY|"

Pronto. Este diálogo está pronto para ser processado pelo interpretador Pine Script. Existem gramáticas lexicais e interpretativas para sua referência.

Após processar a interpretação, nós temos AST:

"
(FUN_CALL study (FUN_ARGS 'Exemplo de pré-processador'))
(FUN_DEF fun (FUN_DEF_EXPR (FUN_HEAD x y) (FUN_BODY (FUN_RET (IF_THEN_ELSE (> close open) 
THEN (FUN_BODY (FUN_RET (+ x y))) 
ELSE (FUN_BODY (FUN_RET (- x y))))))))
(VAR_DEF a (FUN_CALL sma (FUN_ARGS close 10)))
(VAR_DEF b (FUN_CALL fun (FUN_ARGS a 123)))
(VAR_DEF c (FUN_CALL security (FUN_ARGS tickerid period b)))
(FUN_CALL plot (FUN_ARGS c (KW_ARG title 'Out') (KW_ARG color (? (> c (SQBR c 1)) lime red)) (KW_ARG style linebr) (KW_ARG trackprice true)))
(FUN_CALL alertcondition (FUN_ARGS (> c 100)))
"

Anterior: Onde eu posso encontrar mais informações?, Próxima: Anexo B. Gramática Lexical Pine Script v2, Acima: Tutorial de Pine Script