補足資料A Pineスクリプト v2 プリプロセッサ

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

擬似コードでの Pineスクリプト@version=2 プリプロセッサアルゴリズム

  1. コメントを削除
  2. \r\n\r\n に置き換える
  3. もし無い場合は、テキスト末尾に \n を追加
  4. 空白のみを含む行を空の文字列に置き換える
  5. |INDENT| の印が追加されます。これはブロック内のステートメントである事を示します。例えば関数の本体や if 文や for 文の内部の様なケースです。すべてのタブまたは4つのスペースが |INDENT| に置き換えられます。
  6. |B||E| の印が追加されます。これは行の始まりと行の終わりを示しています。空行は |EMPTY| という印に置き換えられます。
  7. 分割されたステートメントを表す行を結合します。
  8. コードブロックの印を追加します(|BEGIN| - ブロックの始まり。|END| - ブロックの終わり。|PE| - ブロック終了の可能性)。

これを例で示します。以下は初期のPineスクリプトコードです。最初の行に //@version=2 というコメントがある事に注意してください。この指示は、Pineスクリプトのプリプロセッサとパーサーのバージョンを正しく選択するのに役立ちます。

"//@version=2
study('Preprocessor example')
fun(x, y) =>
    if close > open // This line has one indent
        x + y // This line has two indents
    else 
        x - y
    // Some whitespace and a comment

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) // 先頭に5つのスペースがあるのでインデントと見なされます
alertcondition(c > 100)"

ステップ 1)、2)、3)、4) が実行された後、コードは次の様になります。

"
study('Preprocessor example')
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)
"

ステップ 5) の後です。すべての4つのスペースは |INDENT| の印に置き換えられます。8つのスペースは2つの |INDENT| の印に、またそれ以上も同様に置き換えらます。

"
study('Preprocessor example')
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)
"

ステップ 6) の後です。

"|EMPTY|
|B|study('Preprocessor example')|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|"

ステップ 7) の後です。plot(c, title= の行が、次の行と結合された事に注目してください。

"|EMPTY|
|B|study('Preprocessor example')|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|"

ステップ 8) の後です。

"|EMPTY|
|B|study('Preprocessor example')|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|"

完了しました。このテキストはPineスクリプトのレクサーとパーサーで処理される準備が整いました。レクサーとパーサーの文法のリファレンスがあります。

レクサー/パーサー処理の後、ASTがあります。

"
(FUN_CALL study (FUN_ARGS 'Preprocessor example'))
(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)))
"

前の項目: Pineについてより多くの情報を得る方法, 次の項目: 補足資料B Pineスクリプト v2 レキシカル文法, メニューに戻る: Pineスクリプトチュートリアル