@pineforge/codegen-pyodide 1.1.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +261 -0
- package/README.md +5 -0
- package/glue.py +4 -0
- package/package.json +6 -4
- package/pineforge_codegen/__init__.py +1 -0
- package/pineforge_codegen/codegen/base.py +48 -2
- package/pineforge_codegen/codegen/capabilities.py +319 -0
- package/pineforge_codegen/codegen/checked_settings.py +64 -5
- package/pineforge_codegen/codegen/emit_top.py +5 -3
- package/pineforge_codegen/codegen/helpers.py +7 -0
- package/pineforge_codegen/codegen/order_shapes.py +356 -0
- package/pineforge_codegen/codegen/security.py +54 -5
- package/pineforge_codegen/codegen/tables.py +12 -0
- package/pineforge_codegen/codegen/visit_call.py +61 -0
- package/pineforge_codegen/codegen/visit_expr.py +8 -2
- package/pineforge_codegen/codegen/visit_stmt.py +2 -4
- package/pineforge_codegen/diagnostic_codes.py +341 -0
- package/pineforge_codegen/diagnostics_catalog.json +631 -0
- package/pineforge_codegen/errors.py +23 -0
- package/pineforge_codegen/external_requests.py +16 -0
- package/pineforge_codegen/support_checker.py +19 -10
- package/pineforge_codegen-1.3.0.tar.gz +0 -0
- package/release.json +2 -2
- package/tables.json +1 -1
- package/transpile.worker.mjs +4 -0
- package/pineforge_codegen-1.1.0.tar.gz +0 -0
|
@@ -0,0 +1,631 @@
|
|
|
1
|
+
{"schema": "pineforge-diagnostics-catalog/v1",
|
|
2
|
+
"codes": {
|
|
3
|
+
"PF-E0000": {"severity": "error", "area": "uncatalogued", "message": "{message}", "hint": "{hint}", "explanation": "A diagnostic whose text no catalog template renders; the test suite refuses it, so a release never emits it.", "args": {"message": {"kind": "text"}, "hint": {"kind": "text"}}},
|
|
4
|
+
"PF-E0001": {"severity": "error", "area": "source", "message": "Block nesting depth exceeds {max_nesting_depth} levels.", "hint": null, "explanation": "Indented blocks (if, for, while, functions) are nested deeper than PineForge allows; flatten the structure.", "args": {"max_nesting_depth": {"kind": "number"}}},
|
|
5
|
+
"PF-E0002": {"severity": "error", "area": "source", "message": "Invalid color literal: expected hex digits after ''#''", "hint": "Color literals must be #RRGGBB or #RRGGBBAA", "explanation": "A '#' starts a color literal but no hex digits follow it; write the color as #RRGGBB or #RRGGBBAA.", "args": {}},
|
|
6
|
+
"PF-E0003": {"severity": "error", "area": "source", "message": "Delimiter nesting depth exceeds {max_nesting_depth} levels.", "hint": null, "explanation": "Parentheses or square brackets are nested deeper than PineForge allows; split the expression into simpler steps.", "args": {"max_nesting_depth": {"kind": "number"}}},
|
|
7
|
+
"PF-E0004": {"severity": "error", "area": "source", "message": "Unexpected character: ''{ch}''", "hint": null, "explanation": "The script contains a character that is not valid Pine syntax outside a string; remove or replace it.", "args": {"ch": {"kind": "identifier"}}},
|
|
8
|
+
"PF-E0005": {"severity": "error", "area": "source", "message": "Malformed scientific notation: expected digits after exponent", "hint": "Example: 1.5e-3 or 2E10", "explanation": "A number in scientific notation has an exponent marker (e or E) with no digits after it; add the exponent digits or drop the marker.", "args": {}},
|
|
9
|
+
"PF-E0006": {"severity": "error", "area": "source", "message": "Unterminated string literal: the line ends before its closing quote and the next line is not indented as a wrapped line.", "hint": "Close the string on its line, indent the line it wraps onto, or use a multiline string (\"\"\"...\"\"\").", "explanation": "A string is not closed on its line and the next line is not an indented continuation; close the quote or use a triple-quoted string.", "args": {}},
|
|
10
|
+
"PF-E0007": {"severity": "error", "area": "source", "message": "Unterminated multiline string literal: no closing {delimiter} before the end of the script.", "hint": "A multiline string ends at the next \"\"\" (or '''''' for one opened with ''''''); escape a quote that would end it early.", "explanation": "A triple-quoted string never reaches its closing delimiter before the script ends; add the closing triple quote or escape an early quote.", "args": {"delimiter": {"kind": "identifier"}}},
|
|
11
|
+
"PF-E0008": {"severity": "error", "area": "source", "message": "Source size exceeds {max_source_chars} characters.", "hint": null, "explanation": "The script is larger than the maximum source size PineForge accepts; shorten it.", "args": {"max_source_chars": {"kind": "number"}}},
|
|
12
|
+
"PF-E0009": {"severity": "error", "area": "source", "message": "AST nesting depth exceeds {max_nesting_depth} nodes.", "hint": null, "explanation": "An expression or operator chain is so long that its syntax tree is deeper than PineForge allows; break it into several statements.", "args": {"max_nesting_depth": {"kind": "number"}}},
|
|
13
|
+
"PF-E0010": {"severity": "error", "area": "source", "message": "Transpilation time exceeds {max_transpile_seconds} seconds.", "hint": null, "explanation": "Transpiling the script ran past the time limit; simplify it, for example by reducing very large or deeply nested code.", "args": {"max_transpile_seconds": {"kind": "number"}}},
|
|
14
|
+
"PF-E0011": {"severity": "error", "area": "source", "message": "Expected {expected_token}, got {token_type}(''{token}''). {msg}", "hint": null, "explanation": "The parser required one specific token here and found another; fix the syntax at the reported position.", "args": {"expected_token": {"kind": "keyword"}, "token_type": {"kind": "keyword"}, "token": {"kind": "identifier"}, "msg": {"kind": "text"}}},
|
|
15
|
+
"PF-E0012": {"severity": "error", "area": "source", "message": "Nesting depth exceeds {max_nesting_depth} levels.", "hint": null, "explanation": "Blocks, else-if chains, prefix operators or nested expressions go deeper than PineForge's nesting limit; flatten the code.", "args": {"max_nesting_depth": {"kind": "number"}}},
|
|
16
|
+
"PF-E0013": {"severity": "error", "area": "source", "message": "Unexpected token {token_type}(''{token}'') after statement; expected a line break or comma", "hint": null, "explanation": "Two expressions sit on one line with nothing between them; separate statements with a line break or a comma.", "args": {"token_type": {"kind": "keyword"}, "token": {"kind": "identifier"}}},
|
|
17
|
+
"PF-E0014": {"severity": "error", "area": "source", "message": "''export'' declarations belong to Pine libraries; PineForge transpiles strategies only", "hint": null, "explanation": "export marks a Pine library declaration, but PineForge transpiles strategies only; remove export or write a strategy.", "args": {}},
|
|
18
|
+
"PF-E0015": {"severity": "error", "area": "source", "message": "Expected LPAREN, got {token_type}(''{token}'').", "hint": null, "explanation": "A '(' is missing where a call, a declaration's argument list or a function definition requires one.", "args": {"token_type": {"kind": "keyword"}, "token": {"kind": "identifier"}}},
|
|
19
|
+
"PF-E0016": {"severity": "error", "area": "source", "message": "Expected RPAREN, got {token_type}(''{token}'').", "hint": null, "explanation": "A ')' is missing or misplaced: a call, parameter list or parenthesized expression is not closed properly.", "args": {"token_type": {"kind": "keyword"}, "token": {"kind": "identifier"}}},
|
|
20
|
+
"PF-E0017": {"severity": "error", "area": "source", "message": "''export'' must precede a function, method, type, enum or const declaration", "hint": null, "explanation": "In a library, export must be followed by a function, method, type, enum or const declaration; nothing else can be exported.", "args": {}},
|
|
21
|
+
"PF-E0018": {"severity": "error", "area": "source", "message": "Expected IMPORT, got {token_type}(''{token}'').", "hint": null, "explanation": "The parser expected the import keyword to start an import statement but found another token; check the line's spelling.", "args": {"token_type": {"kind": "keyword"}, "token": {"kind": "identifier"}}},
|
|
22
|
+
"PF-E0019": {"severity": "error", "area": "source", "message": "Expected IDENT, got {token_type}(''{token}'').", "hint": null, "explanation": "A name was expected here (a variable, function, parameter, field, type or loop variable) but another token was found.", "args": {"token_type": {"kind": "keyword"}, "token": {"kind": "identifier"}}},
|
|
23
|
+
"PF-E0020": {"severity": "error", "area": "source", "message": "Expected EQUALS, got {token_type}(''{token}'').", "hint": null, "explanation": "An '=' was expected after the declared name (variable, tuple or for-loop start); add it or fix the declaration.", "args": {"token_type": {"kind": "keyword"}, "token": {"kind": "identifier"}}},
|
|
24
|
+
"PF-E0021": {"severity": "error", "area": "source", "message": "Expected LBRACKET, got {token_type}(''{token}'').", "hint": null, "explanation": "A tuple declaration must start with '[' as in [a, b] = f(); the opening bracket is missing or misplaced.", "args": {"token_type": {"kind": "keyword"}, "token": {"kind": "identifier"}}},
|
|
25
|
+
"PF-E0022": {"severity": "error", "area": "source", "message": "Expected RBRACKET, got {token_type}(''{token}'').", "hint": null, "explanation": "A ']' is missing: a tuple declaration, for-in destructuring, array literal or index expression is not closed.", "args": {"token_type": {"kind": "keyword"}, "token": {"kind": "identifier"}}},
|
|
26
|
+
"PF-E0023": {"severity": "error", "area": "source", "message": "Expected FAT_ARROW, got {token_type}(''{token}'').", "hint": null, "explanation": "A function or method definition, or a switch case, needs '=>' here; it is missing or misplaced.", "args": {"token_type": {"kind": "keyword"}, "token": {"kind": "identifier"}}},
|
|
27
|
+
"PF-E0024": {"severity": "error", "area": "source", "message": "Expected IF, got {token_type}(''{token}'').", "hint": null, "explanation": "The parser expected the if keyword at the start of an if statement but found another token.", "args": {"token_type": {"kind": "keyword"}, "token": {"kind": "identifier"}}},
|
|
28
|
+
"PF-E0025": {"severity": "error", "area": "source", "message": "Expected NEWLINE, got {token_type}(''{token}'').", "hint": null, "explanation": "An if, else, for, while or switch header must end its line before its indented body; other tokens follow it on the same line.", "args": {"token_type": {"kind": "keyword"}, "token": {"kind": "identifier"}}},
|
|
29
|
+
"PF-E0026": {"severity": "error", "area": "source", "message": "Expected INDENT, got {token_type}(''{token}'').", "hint": null, "explanation": "An indented block was expected after the header or definition, but the next line is not indented further; indent the block's statements.", "args": {"token_type": {"kind": "keyword"}, "token": {"kind": "identifier"}}},
|
|
30
|
+
"PF-E0027": {"severity": "error", "area": "source", "message": "Expected DEDENT, got {token_type}(''{token}'').", "hint": null, "explanation": "The parser expected an indented block to end but found other tokens; check the indentation of the block's lines.", "args": {"token_type": {"kind": "keyword"}, "token": {"kind": "identifier"}}},
|
|
31
|
+
"PF-E0028": {"severity": "error", "area": "source", "message": "Expected FOR, got {token_type}(''{token}'').", "hint": null, "explanation": "The parser expected the for keyword at the start of a for loop but found another token.", "args": {"token_type": {"kind": "keyword"}, "token": {"kind": "identifier"}}},
|
|
32
|
+
"PF-E0029": {"severity": "error", "area": "source", "message": "Expected IN, got {token_type}(''{token}'').", "hint": null, "explanation": "A for-in loop with destructured variables is missing the in keyword after them.", "args": {"token_type": {"kind": "keyword"}, "token": {"kind": "identifier"}}},
|
|
33
|
+
"PF-E0030": {"severity": "error", "area": "source", "message": "Expected TO, got {token_type}(''{token}'').", "hint": null, "explanation": "A counted for loop is missing the to keyword between its start and end values, as in for i = 0 to n.", "args": {"token_type": {"kind": "keyword"}, "token": {"kind": "identifier"}}},
|
|
34
|
+
"PF-E0031": {"severity": "error", "area": "source", "message": "Expected WHILE, got {token_type}(''{token}'').", "hint": null, "explanation": "The parser expected the while keyword at the start of a while loop but found another token.", "args": {"token_type": {"kind": "keyword"}, "token": {"kind": "identifier"}}},
|
|
35
|
+
"PF-E0032": {"severity": "error", "area": "source", "message": "Expected SWITCH, got {token_type}(''{token}'').", "hint": null, "explanation": "The parser expected the switch keyword at the start of a switch but found another token.", "args": {"token_type": {"kind": "keyword"}, "token": {"kind": "identifier"}}},
|
|
36
|
+
"PF-E0033": {"severity": "error", "area": "source", "message": "Expected COLON, got {token_type}(''{token}''). Expected '':'' in ternary", "hint": null, "explanation": "A ternary condition ? value must be followed by ':' and an else value; add the colon or complete the expression.", "args": {"token_type": {"kind": "keyword"}, "token": {"kind": "identifier"}}},
|
|
37
|
+
"PF-E0034": {"severity": "error", "area": "source", "message": "Expected IDENT, got {token_type}(''{token}''). Expected member name", "hint": null, "explanation": "A '.' must be followed by a member name (a field or method); the token after the dot is not a name.", "args": {"token_type": {"kind": "keyword"}, "token": {"kind": "identifier"}}},
|
|
38
|
+
"PF-E0035": {"severity": "error", "area": "source", "message": "duplicate keyword argument ''{key_tok}''", "hint": "Remove one ''{key_tok}='' binding; a keyword argument may be specified only once.", "explanation": "A call binds the same keyword argument twice; keep only one binding.", "args": {"key_tok": {"kind": "identifier"}}},
|
|
39
|
+
"PF-E0036": {"severity": "error", "area": "source", "message": "Numeric literal exceeds the generated C++ range.", "hint": null, "explanation": "A numeric literal is too large to be written in the generated C++ code; use a smaller number.", "args": {}},
|
|
40
|
+
"PF-E0037": {"severity": "error", "area": "source", "message": "Unexpected token {token_type}(''{token}'')", "hint": null, "explanation": "The parser found a token that cannot start or continue an expression here; look for a stray or misplaced token.", "args": {"token_type": {"kind": "keyword"}, "token": {"kind": "identifier"}}},
|
|
41
|
+
"PF-E1001": {"severity": "error", "area": "support", "message": "{context}: map keys must be string in PineForge''s supported map subset.", "hint": null, "explanation": "PineForge supports maps with string keys only; declare the map's key type as string.", "args": {"context": {"kind": "text"}}},
|
|
42
|
+
"PF-E1002": {"severity": "error", "area": "support", "message": "{context}: map values must be primitive in PineForge''s supported map subset.", "hint": null, "explanation": "PineForge supports maps whose values are float, int, bool or string only; use one of those as the value type.", "args": {"context": {"kind": "text"}}},
|
|
43
|
+
"PF-E1003": {"severity": "error", "area": "support", "message": "matrix<{element_type}> is not supported when the UDT contains a map field; rollback would retain live map aliases.", "hint": "Use array<UDT> for recursively checkpointed state.", "explanation": "A matrix of a user-defined type with a map field is refused because rollback would keep live map references; use an array of that type instead.", "args": {"element_type": {"kind": "type"}}},
|
|
44
|
+
"PF-E1004": {"severity": "error", "area": "support", "message": "matrix<{element_type}>: nested collection element types not supported in v1.", "hint": null, "explanation": "A matrix cannot hold another collection as its element type in PineForge; use float, int, bool, string, color or a user-defined type.", "args": {"element_type": {"kind": "type"}}},
|
|
45
|
+
"PF-E1005": {"severity": "error", "area": "support", "message": "input.color(...) requires a color defval (e.g. color.red or color.new(color.red, 50)).", "hint": null, "explanation": "input.color needs a color as its default value, for example color.red or color.new(color.red, 50).", "args": {}},
|
|
46
|
+
"PF-E1006": {"severity": "error", "area": "support", "message": "input.color(...) defval must be a color constant (color.red, ...), a color literal (#rrggbb), or a color.new(...) / color.rgb(...) builder. Arbitrary expressions are not supported: the engine has no color helper, so codegen routes input.color through the int getter — any non-color defval would silently store a numeric value with no color encoding.", "hint": "Replace the defval with color.<name> or color.new(...).", "explanation": "The default of input.color must be a color constant, a #rrggbb literal or a color.new or color.rgb call; other expressions are refused.", "args": {}},
|
|
47
|
+
"PF-E1007": {"severity": "error", "area": "support", "message": "input.source(...) requires a native series defval (close, open, high, low, hl2, hlc3, ohlc4, ...).", "hint": null, "explanation": "input.source needs a default chart series such as close as its first argument or defval.", "args": {}},
|
|
48
|
+
"PF-E1008": {"severity": "error", "area": "support", "message": "input.source(...) defval must be a native chart series (open, high, low, close, volume, hl2, hlc3, ohlc4, hlcc4). User series, computed expressions, and indicator outputs are not supported: input.source is restricted to native OHLCV series.", "hint": "Use one of: close, open, high, low, hl2, hlc3, ohlc4.", "explanation": "The default of input.source must be a native chart series (open, high, low, close, volume, hl2, hlc3, ohlc4, hlcc4); computed series are refused.", "args": {}},
|
|
49
|
+
"PF-E1009": {"severity": "error", "area": "support", "message": "{kind}() declarations are not supported; PineForge runs strategies only.", "hint": "Replace the declaration with strategy(...) and add explicit entry/exit calls.", "explanation": "PineForge runs strategies only, so a script declared with indicator() or library() is refused; declare it with strategy() and add orders.", "args": {"kind": {"kind": "identifier"}}},
|
|
50
|
+
"PF-E1010": {"severity": "error", "area": "support", "message": "Tuple reassignment [..] {op} is not Pine syntax: TradingView declares a tuple with ''='' and has no tuple reassignment.", "hint": "Declare new names with [a, b] = f(), then reassign each variable on its own line.", "explanation": "Pine has no tuple reassignment: declare a tuple once with '=' and reassign each variable on its own line.", "args": {"op": {"kind": "keyword"}}},
|
|
51
|
+
"PF-E1011": {"severity": "error", "area": "support", "message": "A tuple literal [..] cannot be a variable''s value: TradingView rejects it here (Syntax error at input ''['', CE10156). A tuple is only a function''s or an if/switch arm''s value or a request.security expression.", "hint": "Declare each variable on its own line (a = x, b = y), or return the tuple from a function: f() => [x, y], then [a, b] = f().", "explanation": "A tuple literal such as [a, b] cannot be assigned to a variable; return it from a function or if/switch arm and destructure the result.", "args": {}},
|
|
52
|
+
"PF-E1012": {"severity": "error", "area": "support", "message": "A ternary cannot return a tuple: TradingView rejects [a, b] = c ? [..] : [..] (\"Ternary operations cannot return tuples\").", "hint": "Select the tuple with an if or switch: [a, b] = if c, each arm ending in its tuple.", "explanation": "A ternary cannot produce a tuple (TradingView rejects it too); choose between tuples with an if or switch instead.", "args": {}},
|
|
53
|
+
"PF-E1013": {"severity": "error", "area": "support", "message": "ta.stoch(...) returns a single series in PineForge; tuple destructuring is not supported.", "hint": "Use k = ta.stoch(...) and compute smoothing separately if needed.", "explanation": "ta.stoch returns one series in PineForge, so destructuring it into a tuple is refused; assign it to a single variable.", "args": {}},
|
|
54
|
+
"PF-E1014": {"severity": "error", "area": "support", "message": "History references on UDT drawing fields are not supported in PineForge.", "hint": "{var_name}.{object_member}[...] would be read as the current-bar field, not prior-bar history. Copy the field to a bare drawing variable first, or remove the history reference.", "explanation": "A history index on a drawing field of a user-defined type would silently read the current field, so it is refused; copy the field to a variable first.", "args": {"var_name": {"kind": "identifier"}, "object_member": {"kind": "identifier"}}},
|
|
55
|
+
"PF-E1015": {"severity": "error", "area": "support", "message": "History references on tuple-destructured drawing handles are not supported in PineForge.", "hint": "{object_name}[...] is a drawing handle from tuple destructuring; PineForge cannot historize that tuple element safely.", "explanation": "A drawing handle bound by tuple destructuring cannot be read through a history index; remove the history reference.", "args": {"object_name": {"kind": "identifier"}}},
|
|
56
|
+
"PF-E1016": {"severity": "error", "area": "support", "message": "x[k].{member}(): TradingView refuses a method call straight after the history-referencing operator (CE10010; CE10011 after an array''s or a matrix''s history).", "hint": "Call the method on the history reference in parentheses: (x[k]).{member}().", "explanation": "TradingView rejects a method call written straight after a history index, x[k].method(); put the history reference in parentheses.", "args": {"member": {"kind": "identifier"}}},
|
|
57
|
+
"PF-E1017": {"severity": "error", "area": "support", "message": "x[k].{member}(): TradingView refuses a method call straight after the history-referencing operator (CE10010; CE10011 after an array''s or a matrix''s history).", "hint": "Call the method on the history reference in parentheses: ({object_name}[{index}]).{member}().", "explanation": "TradingView rejects a method call written straight after a history index, x[k].method(); put the history reference in parentheses.", "args": {"member": {"kind": "identifier"}, "object_name": {"kind": "identifier"}, "index": {"kind": "identifier"}}},
|
|
58
|
+
"PF-E1018": {"severity": "error", "area": "support", "message": "{object_name}[{index}].{member}(): TradingView refuses a method call straight after the history-referencing operator (CE10010; CE10011 after an array''s or a matrix''s history).", "hint": "Call the method on the history reference in parentheses: (x[k]).{member}().", "explanation": "TradingView rejects a method call written straight after a history index, x[k].method(); put the history reference in parentheses.", "args": {"object_name": {"kind": "identifier"}, "index": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
59
|
+
"PF-E1019": {"severity": "error", "area": "support", "message": "{object_name}[{index}].{member}(): TradingView refuses a method call straight after the history-referencing operator (CE10010; CE10011 after an array''s or a matrix''s history).", "hint": "Call the method on the history reference in parentheses: ({object_name}[{index}]).{member}().", "explanation": "TradingView rejects a method call written straight after a history index, x[k].method(); put the history reference in parentheses.", "args": {"object_name": {"kind": "identifier"}, "index": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
60
|
+
"PF-E1020": {"severity": "error", "area": "support", "message": "x[k].{member}: TradingView refuses a field read straight after the history-referencing operator (CE10011: \"User variable identifiers should not contain ''.''\").", "hint": "Read the field of the history reference in parentheses: (x[k]).{member}.", "explanation": "TradingView rejects a field read written straight after a history index, x[k].field; put the history reference in parentheses.", "args": {"member": {"kind": "identifier"}}},
|
|
61
|
+
"PF-E1021": {"severity": "error", "area": "support", "message": "x[k].{member}: TradingView refuses a field read straight after the history-referencing operator (CE10011: \"User variable identifiers should not contain ''.''\").", "hint": "Read the field of the history reference in parentheses: ({object_name}[{index}]).{member}.", "explanation": "TradingView rejects a field read written straight after a history index, x[k].field; put the history reference in parentheses.", "args": {"member": {"kind": "identifier"}, "object_name": {"kind": "identifier"}, "index": {"kind": "identifier"}}},
|
|
62
|
+
"PF-E1022": {"severity": "error", "area": "support", "message": "{object_name}[{index}].{member}: TradingView refuses a field read straight after the history-referencing operator (CE10011: \"User variable identifiers should not contain ''.''\").", "hint": "Read the field of the history reference in parentheses: (x[k]).{member}.", "explanation": "TradingView rejects a field read written straight after a history index, x[k].field; put the history reference in parentheses.", "args": {"object_name": {"kind": "identifier"}, "index": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
63
|
+
"PF-E1023": {"severity": "error", "area": "support", "message": "{object_name}[{index}].{member}: TradingView refuses a field read straight after the history-referencing operator (CE10011: \"User variable identifiers should not contain ''.''\").", "hint": "Read the field of the history reference in parentheses: ({object_name}[{index}]).{member}.", "explanation": "TradingView rejects a field read written straight after a history index, x[k].field; put the history reference in parentheses.", "args": {"object_name": {"kind": "identifier"}, "index": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
64
|
+
"PF-E1024": {"severity": "error", "area": "support", "message": "footprint.{footprint}(...) is not supported.", "hint": "PineForge reads a footprint''s delta() only: the fp_delta_<ticks>_<va> column of the feed a requests manifest pins for the symbol requested.", "explanation": "PineForge reads only the delta of a footprint value; every other footprint member is refused.", "args": {"footprint": {"kind": "identifier"}}},
|
|
65
|
+
"PF-E1025": {"severity": "error", "area": "support", "message": "{full}(...) is not supported.", "hint": "Currency conversion data not available in PineForge.", "explanation": "PineForge has no currency-conversion data, so request.currency_rate is refused; supply the rate yourself, for example as an input.", "args": {"full": {"kind": "identifier"}}},
|
|
66
|
+
"PF-E1026": {"severity": "error", "area": "support", "message": "{full}(...) is not supported.", "hint": "External Quandl data not available in PineForge.", "explanation": "PineForge cannot load external Quandl data, so request.quandl is refused; remove it.", "args": {"full": {"kind": "identifier"}}},
|
|
67
|
+
"PF-E1027": {"severity": "error", "area": "support", "message": "{full}(...) is not supported.", "hint": "External seed data feeds not available in PineForge.", "explanation": "PineForge cannot load external seed data feeds, so request.seed is refused; remove it.", "args": {"full": {"kind": "identifier"}}},
|
|
68
|
+
"PF-E1028": {"severity": "error", "area": "support", "message": "{full}(...) is not supported.", "hint": "ticker.kagi() chart-type modifier / cross-symbol construction not supported — PineForge runs same-symbol MTF only via request.security with the chart''s own tickerid.", "explanation": "ticker.kagi builds a Kagi symbol, which PineForge cannot run; PineForge supports multi-timeframe requests on the chart's own symbol only.", "args": {"full": {"kind": "identifier"}}},
|
|
69
|
+
"PF-E1029": {"severity": "error", "area": "support", "message": "{full}(...) is not supported.", "hint": "ticker.linebreak() chart-type modifier / cross-symbol construction not supported — PineForge runs same-symbol MTF only via request.security with the chart''s own tickerid.", "explanation": "ticker.linebreak builds a Line Break symbol, which PineForge cannot run; PineForge supports multi-timeframe requests on the chart's own symbol only.", "args": {"full": {"kind": "identifier"}}},
|
|
70
|
+
"PF-E1030": {"severity": "error", "area": "support", "message": "{full}(...) is not supported.", "hint": "ticker.modify() chart-type modifier / cross-symbol construction not supported — PineForge runs same-symbol MTF only via request.security with the chart''s own tickerid.", "explanation": "ticker.modify builds a modified symbol identifier, which PineForge cannot request; PineForge supports multi-timeframe requests on the chart's own symbol only.", "args": {"full": {"kind": "identifier"}}},
|
|
71
|
+
"PF-E1031": {"severity": "error", "area": "support", "message": "{full}(...) is not supported.", "hint": "ticker.new() chart-type modifier / cross-symbol construction not supported — PineForge runs same-symbol MTF only via request.security with the chart''s own tickerid.", "explanation": "ticker.new builds another symbol identifier, which PineForge cannot request; PineForge supports multi-timeframe requests on the chart's own symbol only.", "args": {"full": {"kind": "identifier"}}},
|
|
72
|
+
"PF-E1032": {"severity": "error", "area": "support", "message": "{full}(...) is not supported.", "hint": "ticker.pointfigure() chart-type modifier / cross-symbol construction not supported — PineForge runs same-symbol MTF only via request.security with the chart''s own tickerid.", "explanation": "ticker.pointfigure builds a Point and Figure symbol, which PineForge cannot run; PineForge supports multi-timeframe requests on the chart's own symbol only.", "args": {"full": {"kind": "identifier"}}},
|
|
73
|
+
"PF-E1033": {"severity": "error", "area": "support", "message": "{full}(...) is not supported.", "hint": "ticker.renko() chart-type modifier / cross-symbol construction not supported — PineForge runs same-symbol MTF only via request.security with the chart''s own tickerid.", "explanation": "ticker.renko builds a Renko symbol, which PineForge cannot run; PineForge supports multi-timeframe requests on the chart's own symbol only.", "args": {"full": {"kind": "identifier"}}},
|
|
74
|
+
"PF-E1034": {"severity": "error", "area": "support", "message": "ticker.heikinashi(...) is supported only for the chart''s own symbol.", "hint": "Pass syminfo.tickerid: PineForge applies the Heikin-Ashi candle transform to the chart symbol inside request.security, but cannot load an alternate symbol''s HA candles.", "explanation": "ticker.heikinashi is accepted only for the chart's own symbol (syminfo.tickerid); another symbol's Heikin-Ashi candles cannot be loaded.", "args": {}},
|
|
75
|
+
"PF-E1035": {"severity": "error", "area": "support", "message": "{full}(...) is not implemented yet.", "hint": "timeframe.from_seconds is not yet implemented; codegen would emit ''false'' and silently produce wrong TF strings.", "explanation": "This call names a function on PineForge's not-yet-implemented list, so it is refused rather than compiled into something that silently misbehaves.", "args": {"full": {"kind": "identifier"}}},
|
|
76
|
+
"PF-E1036": {"severity": "error", "area": "support", "message": "{name}(...) is not implemented yet.", "hint": "timeframe.from_seconds is not yet implemented; codegen would emit ''false'' and silently produce wrong TF strings.", "explanation": "This call names a function on PineForge's not-yet-implemented list, so it is refused rather than compiled into something that silently misbehaves.", "args": {"name": {"kind": "identifier"}}},
|
|
77
|
+
"PF-E1037": {"severity": "error", "area": "support", "message": "{full}: footprint.* (bid/ask volume rows) is not supported in PineForge batch backtests; it requires tick-level data the engine does not consume.", "hint": "Remove the call or replace it with native OHLCV-based logic.", "explanation": "footprint.* calls need tick-level bid/ask volume rows, which a PineForge batch backtest does not load.", "args": {"full": {"kind": "identifier"}}},
|
|
78
|
+
"PF-E1038": {"severity": "error", "area": "support", "message": "{full}: volume_row.* is not supported in PineForge batch backtests; same reason as footprint.*.", "hint": "Remove the call or replace it with native OHLCV-based logic.", "explanation": "volume_row.* calls need tick-level volume rows, which a PineForge batch backtest does not load.", "args": {"full": {"kind": "identifier"}}},
|
|
79
|
+
"PF-E1039": {"severity": "error", "area": "support", "message": "library() declarations are not supported; PineForge runs strategies only.", "hint": "Use strategy(...) and inline or pre-expand library code before uploading.", "explanation": "PineForge runs strategies only, so a library() declaration is refused; use strategy() and paste any library code into the script.", "args": {}},
|
|
80
|
+
"PF-E1040": {"severity": "error", "area": "support", "message": "Bare barssince(...) is broken in PineForge codegen.", "hint": "Use ta.barssince(...) instead.", "explanation": "The bare barssince(...) form does not work in PineForge; call ta.barssince(...) instead.", "args": {}},
|
|
81
|
+
"PF-E1041": {"severity": "error", "area": "support", "message": "ta.sum is not a PineScript v6 function.", "hint": "Use math.sum(...) instead.", "explanation": "ta.sum does not exist in Pine v6; use math.sum(source, length) for a rolling sum.", "args": {}},
|
|
82
|
+
"PF-E1042": {"severity": "error", "area": "support", "message": "ta.{name} is a PineScript v6 variable, not a function.", "hint": "Use ta.{name} without parentheses.", "explanation": "This ta.* name is a built-in variable, not a function, so write it without parentheses.", "args": {"name": {"kind": "identifier"}}},
|
|
83
|
+
"PF-E1043": {"severity": "error", "area": "support", "message": "{full}(...) is not implemented in PineForge runtime.", "hint": null, "explanation": "This strategy.closedtrades or strategy.opentrades accessor is not available in PineForge; use one of the supported trade accessors.", "args": {"full": {"kind": "identifier"}}},
|
|
84
|
+
"PF-E1044": {"severity": "error", "area": "support", "message": "{full}(...) is not implemented in PineForge runtime.", "hint": "{hint}", "explanation": "Open trades have no exit data in Pine v6: this accessor exists only on strategy.closedtrades, so it cannot be read from strategy.opentrades.", "args": {"full": {"kind": "identifier"}, "hint": {"kind": "text"}}},
|
|
85
|
+
"PF-E1045": {"severity": "error", "area": "support", "message": "strategy.{name}(...) is not implemented in PineForge runtime.", "hint": null, "explanation": "This strategy.* function is not implemented in PineForge; check the spelling or use a supported strategy function.", "args": {"name": {"kind": "identifier"}}},
|
|
86
|
+
"PF-E1046": {"severity": "error", "area": "support", "message": "strategy.exit(...) requires at least one price or trailing parameter in PineForge.", "hint": "Use strategy.close(...) for market exits.", "explanation": "strategy.exit needs a price or trailing parameter (profit, loss, limit, stop or a trail setting); use strategy.close for a plain market exit.", "args": {}},
|
|
87
|
+
"PF-E1047": {"severity": "error", "area": "support", "message": "{full}(...) is not supported. Only request.security(...) and request.security_lower_tf(...) are available in PineForge.", "hint": "External request feeds and other request.* variants are intentionally unavailable.", "explanation": "Only request.security and request.security_lower_tf are supported; other request.* calls need data feeds PineForge does not provide.", "args": {"full": {"kind": "identifier"}}},
|
|
88
|
+
"PF-E1048": {"severity": "error", "area": "support", "message": "ta.{name}(...) is not implemented in PineForge runtime.", "hint": null, "explanation": "PineForge has no implementation of this ta.* function, so the call is refused instead of compiling to a silent stub.", "args": {"name": {"kind": "identifier"}}},
|
|
89
|
+
"PF-E1049": {"severity": "error", "area": "support", "message": "math.{name}(...) is not implemented in PineForge runtime.", "hint": null, "explanation": "PineForge has no implementation of this math.* function, so the call is refused instead of compiling to a silent stub.", "args": {"name": {"kind": "identifier"}}},
|
|
90
|
+
"PF-E1050": {"severity": "error", "area": "support", "message": "str.{name}(...) is not implemented in PineForge runtime.", "hint": null, "explanation": "PineForge has no implementation of this str.* function, so the call is refused instead of compiling to a silent stub.", "args": {"name": {"kind": "identifier"}}},
|
|
91
|
+
"PF-E1051": {"severity": "error", "area": "support", "message": "input.{name}(...) is not implemented in PineForge runtime.", "hint": null, "explanation": "PineForge has no implementation of this input.* function, so the call is refused; use one of the supported input functions.", "args": {"name": {"kind": "identifier"}}},
|
|
92
|
+
"PF-E1052": {"severity": "error", "area": "support", "message": "timeframe.{name}(...) is not implemented in PineForge runtime.", "hint": null, "explanation": "PineForge implements only timeframe.change and timeframe.in_seconds; any other timeframe.* function is refused.", "args": {"name": {"kind": "identifier"}}},
|
|
93
|
+
"PF-E1053": {"severity": "error", "area": "support", "message": "color.{name}(...) is not implemented in PineForge runtime.", "hint": null, "explanation": "PineForge implements only color.new, color.rgb and color.r/g/b/t; any other color.* function is refused.", "args": {"name": {"kind": "identifier"}}},
|
|
94
|
+
"PF-E1054": {"severity": "error", "area": "support", "message": "runtime.{name}(...) is not implemented in PineForge runtime.", "hint": null, "explanation": "PineForge implements only runtime.error; any other runtime.* function is refused.", "args": {"name": {"kind": "identifier"}}},
|
|
95
|
+
"PF-E1055": {"severity": "error", "area": "support", "message": "log.{name}(...) is not implemented in PineForge runtime.", "hint": null, "explanation": "PineForge implements only log.info, log.warning and log.error; any other log.* function is refused.", "args": {"name": {"kind": "identifier"}}},
|
|
96
|
+
"PF-E1056": {"severity": "error", "area": "support", "message": "array.{name}(...) is not implemented in PineForge runtime.", "hint": null, "explanation": "PineForge has no implementation of this array.* function, so the call is refused instead of compiling to a silent stub.", "args": {"name": {"kind": "identifier"}}},
|
|
97
|
+
"PF-E1057": {"severity": "error", "area": "support", "message": "map.{name}(...) is not implemented in PineForge runtime.", "hint": null, "explanation": "PineForge has no implementation of this map.* function, so the call is refused instead of compiling to a silent stub.", "args": {"name": {"kind": "identifier"}}},
|
|
98
|
+
"PF-E1058": {"severity": "error", "area": "support", "message": "map keys must be string in PineForge''s supported map subset.", "hint": null, "explanation": "PineForge maps support only string keys; declare the map with string as its key type.", "args": {}},
|
|
99
|
+
"PF-E1059": {"severity": "error", "area": "support", "message": "map values must be primitive in PineForge''s supported map subset.", "hint": null, "explanation": "PineForge maps can hold only float, int, bool or string values; other value types such as collections or objects are refused.", "args": {}},
|
|
100
|
+
"PF-E1060": {"severity": "error", "area": "support", "message": "matrix<{t}>: nested collection element types not supported in v1.", "hint": null, "explanation": "A matrix cannot hold another collection as its element type in PineForge; use float, int, bool, string, color or a user-defined type.", "args": {"t": {"kind": "type"}}},
|
|
101
|
+
"PF-E1061": {"severity": "error", "area": "support", "message": "matrix<{t}> is not supported when the UDT contains a map field; rollback would retain live map aliases.", "hint": "Use array<UDT> for recursively checkpointed state.", "explanation": "A matrix of a user-defined type with a map field is refused because rollback would keep live map references; use an array of that type instead.", "args": {"t": {"kind": "type"}}},
|
|
102
|
+
"PF-E1062": {"severity": "error", "area": "support", "message": "matrix<{t}> element type not supported. Allowed: float, int, bool, string, color, or a declared UDT.", "hint": null, "explanation": "A matrix element must be float, int, bool, string, color or a declared user-defined type; any other element type is refused.", "args": {"t": {"kind": "type"}}},
|
|
103
|
+
"PF-E1063": {"severity": "error", "area": "support", "message": "matrix.{name}(...) is not implemented in PineForge runtime.", "hint": null, "explanation": "PineForge has no implementation of this matrix.* function, so the call is refused instead of compiling to a silent stub.", "args": {"name": {"kind": "identifier"}}},
|
|
104
|
+
"PF-E1064": {"severity": "error", "area": "support", "message": "{ns}.{name}(...) is not implemented in PineForge runtime.", "hint": null, "explanation": "PineForge implements only part of the line, box, label and linefill functions; this one is not implemented, so the call is refused.", "args": {"ns": {"kind": "identifier"}, "name": {"kind": "identifier"}}},
|
|
105
|
+
"PF-E1065": {"severity": "error", "area": "support", "message": "chart.point.{name}(...) is not implemented in PineForge runtime.", "hint": null, "explanation": "PineForge implements only chart.point.new, now, from_index, from_time and copy; any other chart.point.* function is refused.", "args": {"name": {"kind": "identifier"}}},
|
|
106
|
+
"PF-E1066": {"severity": "error", "area": "support", "message": "''export'' is a Pine library keyword; PineForge runs strategies only and does not support exported functions/types.", "hint": "Remove the ''export'' keyword (and inline any library code into the strategy script).", "explanation": "'export' marks library code; PineForge runs strategies only, so remove the keyword and inline any library code into the strategy.", "args": {}},
|
|
107
|
+
"PF-E1067": {"severity": "error", "area": "support", "message": "{name} diverges from TradingView semantics in PineForge.", "hint": "bar_index depends on the data window; PineForge and TradingView produce different values for the same script.", "explanation": "bar_index counts bars of the data window PineForge is fed, so its value can differ from TradingView's for the same script.", "args": {"name": {"kind": "identifier"}}},
|
|
108
|
+
"PF-E1068": {"severity": "error", "area": "support", "message": "{name} diverges from TradingView semantics in PineForge.", "hint": "last_bar_index is the final index of PineForge''s fed data window; it can diverge from TradingView when the window does not cover the same chart history.", "explanation": "last_bar_index is the last index of the data window PineForge is fed, so it can differ from TradingView's when the history windows differ.", "args": {"name": {"kind": "identifier"}}},
|
|
109
|
+
"PF-E1069": {"severity": "error", "area": "support", "message": "{name} diverges from TradingView semantics in PineForge.", "hint": "timenow is aliased to the current bar timestamp in PineForge; it is not real wall-clock time.", "explanation": "timenow is aliased to the current bar's time in PineForge, not real wall-clock time, so logic relying on the real time will differ.", "args": {"name": {"kind": "identifier"}}},
|
|
110
|
+
"PF-E1070": {"severity": "error", "area": "support", "message": "{chain} diverges from TradingView semantics in PineForge.", "hint": "bar_index depends on the data window; PineForge and TradingView produce different values for the same script.", "explanation": "bar_index counts bars of the data window PineForge is fed, so its value can differ from TradingView's for the same script.", "args": {"chain": {"kind": "identifier"}}},
|
|
111
|
+
"PF-E1071": {"severity": "error", "area": "support", "message": "{chain} diverges from TradingView semantics in PineForge.", "hint": "last_bar_index is the final index of PineForge''s fed data window; it can diverge from TradingView when the window does not cover the same chart history.", "explanation": "last_bar_index is the last index of the data window PineForge is fed, so it can differ from TradingView's when the history windows differ.", "args": {"chain": {"kind": "identifier"}}},
|
|
112
|
+
"PF-E1072": {"severity": "error", "area": "support", "message": "{chain} diverges from TradingView semantics in PineForge.", "hint": "timenow is aliased to the current bar timestamp in PineForge; it is not real wall-clock time.", "explanation": "timenow is aliased to the current bar's time in PineForge, not real wall-clock time, so logic relying on the real time will differ.", "args": {"chain": {"kind": "identifier"}}},
|
|
113
|
+
"PF-E1073": {"severity": "error", "area": "support", "message": "{object_name}.{member}: footprint.* (bid/ask volume rows) is not supported in PineForge batch backtests; it requires tick-level data the engine does not consume.", "hint": null, "explanation": "Members of the footprint.* namespace need tick-level bid/ask volume rows, which a PineForge batch backtest does not load.", "args": {"object_name": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
114
|
+
"PF-E1074": {"severity": "error", "area": "support", "message": "{object_name}.{member}: volume_row.* is not supported in PineForge batch backtests; same reason as footprint.*.", "hint": null, "explanation": "Members of the volume_row.* namespace need tick-level volume rows, which a PineForge batch backtest does not load.", "args": {"object_name": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
115
|
+
"PF-E1075": {"severity": "error", "area": "support", "message": "{object_name}.{member}: dividends.* is not available in PineForge — fundamental dividend data is not loaded.", "hint": null, "explanation": "dividends.* fields read fundamental dividend data, which PineForge does not load outside a recorded request.", "args": {"object_name": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
116
|
+
"PF-E1076": {"severity": "error", "area": "support", "message": "{object_name}.{member}: earnings.* is not available in PineForge — fundamental earnings data is not loaded.", "hint": null, "explanation": "earnings.* fields read fundamental earnings data, which PineForge does not load outside a recorded request.", "args": {"object_name": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
117
|
+
"PF-E1077": {"severity": "error", "area": "support", "message": "{object_name}.{member}: splits.* is not available in PineForge — corporate-action split data is not loaded.", "hint": null, "explanation": "splits.* fields read corporate-action split data, which PineForge does not load outside a recorded request.", "args": {"object_name": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
118
|
+
"PF-E1078": {"severity": "error", "area": "support", "message": "{object_name}.{member} is a visual/style constant with no runtime value in PineForge backtests; it is only accepted as an argument to visual calls (plot, plotshape, hline, label.new, table.cell, ...), which PineForge parses and skips.", "hint": "Constant-namespace members cannot flow into strategy logic; codegen would emit a string literal while the analyzer types the read as int.", "explanation": "A visual or style constant has no value in a backtest; it may only be passed to plotting and drawing calls, which PineForge skips.", "args": {"object_name": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
119
|
+
"PF-E1079": {"severity": "error", "area": "support", "message": "{object_name}.{member} is not a Pine alert constant; only alert.freq_all, alert.freq_once_per_bar and alert.freq_once_per_bar_close exist.", "hint": "Constant-namespace members cannot flow into strategy logic; codegen would emit a string literal while the analyzer types the read as int.", "explanation": "The alert.* member is not one of Pine's alert frequency constants.", "args": {"object_name": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
120
|
+
"PF-E1080": {"severity": "error", "area": "support", "message": "{object_name}.{member} is not a barmerge constant; only barmerge.gaps_on, barmerge.gaps_off, barmerge.lookahead_on and barmerge.lookahead_off exist.", "hint": "Constant-namespace members cannot flow into strategy logic; codegen would emit a string literal while the analyzer types the read as int.", "explanation": "The barmerge.* member is not one of Pine's gaps or lookahead constants.", "args": {"object_name": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
121
|
+
"PF-E1081": {"severity": "error", "area": "support", "message": "syminfo.{member} is not implemented in PineForge runtime.", "hint": null, "explanation": "PineForge does not implement this syminfo.* member, so reading it is refused.", "args": {"member": {"kind": "identifier"}}},
|
|
122
|
+
"PF-E1082": {"severity": "error", "area": "support", "message": "request.security parameter ''{kw_name}'' is not allowed in PineForge.", "hint": "Only symbol, timeframe, expression, gaps, and lookahead are accepted.", "explanation": "request.security accepts only a few named parameters in PineForge; this one is refused instead of being silently ignored, so remove it.", "args": {"kw_name": {"kind": "identifier"}}},
|
|
123
|
+
"PF-E1083": {"severity": "error", "area": "support", "message": "Extra positional arguments to request.security are not allowed in PineForge.", "hint": "Only symbol, timeframe, expression, gaps, and lookahead are accepted.", "explanation": "request.security accepts at most five positional arguments (symbol, timeframe, expression, gaps, lookahead); remove the extra ones.", "args": {}},
|
|
124
|
+
"PF-E1084": {"severity": "error", "area": "support", "message": "request.security gaps must be barmerge.gaps_on or barmerge.gaps_off.", "hint": "Codegen only recognizes the barmerge.gaps_* literal; other values are silently treated as gaps_off.", "explanation": "The gaps argument of request.security must be written literally as barmerge.gaps_on or barmerge.gaps_off, the only forms PineForge reads.", "args": {}},
|
|
125
|
+
"PF-E1085": {"severity": "error", "area": "support", "message": "request.security lookahead must be barmerge.lookahead_on or barmerge.lookahead_off.", "hint": "Codegen only recognizes the barmerge.lookahead_* literal; other values are silently treated as lookahead_off.", "explanation": "The lookahead argument of request.security must be written literally as barmerge.lookahead_on or barmerge.lookahead_off, the only forms PineForge reads.", "args": {}},
|
|
126
|
+
"PF-E1086": {"severity": "error", "area": "support", "message": "request.security: {kw_name}={object_name}.{val_member} is not supported. The engine ignores this kwarg, which would silently produce different prices from TradingView.", "hint": "Allowed values: {allowed}.", "explanation": "PineForge ignores request.security's price-adjustment settings, so only no-op values are accepted; others would silently give prices unlike TradingView's.", "args": {"kw_name": {"kind": "identifier"}, "object_name": {"kind": "identifier"}, "val_member": {"kind": "identifier"}, "allowed": {"kind": "identifier"}}},
|
|
127
|
+
"PF-E1087": {"severity": "error", "area": "support", "message": "request.security: {kw_name}=... must be a constant member access of the form {kw_name}.<value> (got a non-constant expression).", "hint": "Allowed values: {allowed}.", "explanation": "A request.security price-adjustment setting must be a plain constant of the form name.value (like adjustment.none), not a computed expression.", "args": {"kw_name": {"kind": "identifier"}, "allowed": {"kind": "identifier"}}},
|
|
128
|
+
"PF-E1088": {"severity": "error", "area": "support", "message": "{name} {message} (TradingView: {spelled}).", "hint": "Use the parameters of TradingView''s signature.", "explanation": "A nz or fixnan call whose arguments match none of TradingView's signatures (unknown name, too many or missing arguments) is refused, as TradingView refuses it.", "args": {"name": {"kind": "identifier"}, "message": {"kind": "text"}, "spelled": {"kind": "identifier"}}},
|
|
129
|
+
"PF-E1089": {"severity": "error", "area": "support", "message": "ta.{name} {message} (TradingView: {signature}).", "hint": "Use the parameters of TradingView''s signature.", "explanation": "A ta.* call whose arguments match none of TradingView's signatures (unknown or repeated parameter, too many or missing arguments) is refused.", "args": {"name": {"kind": "identifier"}, "message": {"kind": "text"}, "signature": {"kind": "identifier"}}},
|
|
130
|
+
"PF-E1090": {"severity": "error", "area": "support", "message": "request.security: invalid timeframe literal ''{timeframe}''. Expected Pine TF format like ''1'', ''15'', ''1H'', ''1D'', ''15S''.", "hint": "empty timeframe literal", "explanation": "The timeframe string given to request.security is not a valid Pine timeframe such as 1, 15, 1H, 1D or 15S, so it is refused.", "args": {"timeframe": {"kind": "identifier"}}},
|
|
131
|
+
"PF-E1091": {"severity": "error", "area": "support", "message": "request.security: invalid timeframe literal ''{timeframe}''. Expected Pine TF format like ''1'', ''15'', ''1H'', ''1D'', ''15S''.", "hint": "non-integer timeframe magnitude ''{digits}''", "explanation": "The timeframe string given to request.security is not a valid Pine timeframe such as 1, 15, 1H, 1D or 15S, so it is refused.", "args": {"timeframe": {"kind": "identifier"}, "digits": {"kind": "identifier"}}},
|
|
132
|
+
"PF-E1092": {"severity": "error", "area": "support", "message": "request.security: invalid timeframe literal ''{timeframe}''. Expected Pine TF format like ''1'', ''15'', ''1H'', ''1D'', ''15S''.", "hint": "timeframe magnitude must be positive", "explanation": "The timeframe string given to request.security is not a valid Pine timeframe such as 1, 15, 1H, 1D or 15S, so it is refused.", "args": {"timeframe": {"kind": "identifier"}}},
|
|
133
|
+
"PF-E1093": {"severity": "error", "area": "support", "message": "request.security: invalid timeframe literal ''{timeframe}''. Expected Pine TF format like ''1'', ''15'', ''1H'', ''1D'', ''15S''.", "hint": "unknown timeframe suffix ''{suffix}''", "explanation": "The timeframe string given to request.security is not a valid Pine timeframe such as 1, 15, 1H, 1D or 15S, so it is refused.", "args": {"timeframe": {"kind": "identifier"}, "suffix": {"kind": "identifier"}}},
|
|
134
|
+
"PF-E1094": {"severity": "error", "area": "support", "message": "request.security_lower_tf: invalid timeframe literal ''{timeframe}''. Expected Pine TF format like ''1'', ''15'', ''1H'', ''1D'', ''15S''.", "hint": "empty timeframe literal", "explanation": "The timeframe string given to request.security_lower_tf is not a valid Pine timeframe such as 1, 15, 1H, 1D or 15S, so it is refused.", "args": {"timeframe": {"kind": "identifier"}}},
|
|
135
|
+
"PF-E1095": {"severity": "error", "area": "support", "message": "request.security_lower_tf: invalid timeframe literal ''{timeframe}''. Expected Pine TF format like ''1'', ''15'', ''1H'', ''1D'', ''15S''.", "hint": "non-integer timeframe magnitude ''{digits}''", "explanation": "The timeframe string given to request.security_lower_tf is not a valid Pine timeframe such as 1, 15, 1H, 1D or 15S, so it is refused.", "args": {"timeframe": {"kind": "identifier"}, "digits": {"kind": "identifier"}}},
|
|
136
|
+
"PF-E1096": {"severity": "error", "area": "support", "message": "request.security_lower_tf: invalid timeframe literal ''{timeframe}''. Expected Pine TF format like ''1'', ''15'', ''1H'', ''1D'', ''15S''.", "hint": "timeframe magnitude must be positive", "explanation": "The timeframe string given to request.security_lower_tf is not a valid Pine timeframe such as 1, 15, 1H, 1D or 15S, so it is refused.", "args": {"timeframe": {"kind": "identifier"}}},
|
|
137
|
+
"PF-E1097": {"severity": "error", "area": "support", "message": "request.security_lower_tf: invalid timeframe literal ''{timeframe}''. Expected Pine TF format like ''1'', ''15'', ''1H'', ''1D'', ''15S''.", "hint": "unknown timeframe suffix ''{suffix}''", "explanation": "The timeframe string given to request.security_lower_tf is not a valid Pine timeframe such as 1, 15, 1H, 1D or 15S, so it is refused.", "args": {"timeframe": {"kind": "identifier"}, "suffix": {"kind": "identifier"}}},
|
|
138
|
+
"PF-E2001": {"severity": "error", "area": "analysis", "message": "Missing PineScript version directive. PineForge supports PineScript v6 only.", "hint": "Add //@version=6 as the first line of your script.", "explanation": "PineForge accepts only Pine v6 scripts; add //@version=6 as the first line.", "args": {}},
|
|
139
|
+
"PF-E2002": {"severity": "error", "area": "analysis", "message": "PineForge supports PineScript v6 only (found //@version={version}).", "hint": "Migrate the script to //@version=6 using TradingView''s editor.", "explanation": "The script declares a Pine version other than 6, which PineForge does not support; migrate it to v6 using TradingView's editor.", "args": {"version": {"kind": "number"}}},
|
|
140
|
+
"PF-E2003": {"severity": "error", "area": "analysis", "message": "Direct temporary-array element call ''{callee_name}()'' resolves to a local or parameter, not a user-defined function.", "hint": null, "explanation": "A function ends by reading a temporary array built from a call such as f(), but f is a local or parameter there, not a user-defined function; rename it.", "args": {"callee_name": {"kind": "identifier"}}},
|
|
141
|
+
"PF-E2004": {"severity": "error", "area": "analysis", "message": "Tuple-return helper wrapper ''{wrapper_name}'' calls later-defined helper ''{callee_name}''; forward tuple-wrapper calls are not supported yet. Move ''{callee_name}'' above ''{wrapper_name}'' before passing the wrapper to request.security().", "hint": null, "explanation": "A function that returns another function's tuple must come after it; define the called helper above the wrapper before passing the wrapper to request.security.", "args": {"wrapper_name": {"kind": "identifier"}, "callee_name": {"kind": "identifier"}}},
|
|
142
|
+
"PF-E2005": {"severity": "error", "area": "analysis", "message": "Recursive direct temporary-array reader cycle is not supported: {cycle}.", "hint": null, "explanation": "Functions that read an element of a temporary array call each other in a cycle; Pine forbids recursion and PineForge cannot emit it.", "args": {"cycle": {"kind": "identifier"}}},
|
|
143
|
+
"PF-E2006": {"severity": "error", "area": "analysis", "message": "Persistent bindings named ''{raw_name}'' still share generated storage across distinct lexical declarations; this declaration shape is not supported yet.", "hint": null, "explanation": "A var declaration reuses a name that another declaration in a different scope also uses, and PineForge would give them one shared storage slot; rename one.", "args": {"raw_name": {"kind": "identifier"}}},
|
|
144
|
+
"PF-E2007": {"severity": "error", "area": "analysis", "message": "A top-level block history binding named ''{name}'' shares raw generated Series state with another lexical declaration; declaration-exact block storage is not supported yet.", "hint": null, "explanation": "A top-level block variable whose history is read shares its name with another declaration, so PineForge cannot keep their histories apart; rename one.", "args": {"name": {"kind": "identifier"}}},
|
|
145
|
+
"PF-E2008": {"severity": "error", "area": "analysis", "message": "A callable history local named ''{name}'' shares raw generated Series state with another lexical declaration; declaration-exact callable storage is not supported yet.", "hint": null, "explanation": "A function-local variable has its history read and shares its name with another declaration, so PineForge cannot keep separate history; rename one.", "args": {"name": {"kind": "identifier"}}},
|
|
146
|
+
"PF-E2009": {"severity": "error", "area": "analysis", "message": "History references on a scalar callable local named ''{raw_name}'' conflict with a persistent map local of the same name in another callable; scoped Series member storage is not implemented yet.", "hint": null, "explanation": "A function-local scalar read with history shares its name with a persistent map variable in another function, which PineForge cannot yet separate; rename one.", "args": {"raw_name": {"kind": "identifier"}}},
|
|
147
|
+
"PF-E2010": {"severity": "error", "area": "analysis", "message": "A top-level block binding named ''{name}'' shadows a direct script binding with history, aggregate, or incompatible typed state; declaration-exact block storage is not supported yet.", "hint": null, "explanation": "A variable declared inside a top-level block reuses the name of a script-level variable with history, a collection or a different type; rename one.", "args": {"name": {"kind": "identifier"}}},
|
|
148
|
+
"PF-E2011": {"severity": "error", "area": "analysis", "message": "Persistent drawing bindings named ''{name}'' in distinct lexical owners would share one generated state member; rename one binding until callable-owned persistent storage is owner-qualified.", "hint": null, "explanation": "Two var-declared drawing objects (line, box, label or linefill) in different scopes share one name and would share one state member; rename one.", "args": {"name": {"kind": "identifier"}}},
|
|
149
|
+
"PF-E2012": {"severity": "error", "area": "analysis", "message": "Persistent drawing state named ''{name}'' collides with a top-level class-member binding; rename one binding until persistent storage is owner-qualified.", "hint": null, "explanation": "A var-declared drawing object shares its name with a top-level script variable, so PineForge would give them one state member; rename one.", "args": {"name": {"kind": "identifier"}}},
|
|
150
|
+
"PF-E2013": {"severity": "error", "area": "analysis", "message": "Persistent drawing binding ''{name}'' shadows an ancestor callable parameter or local; rename one binding until callable-owned persistent storage has lexical owner qualification.", "hint": null, "explanation": "A var-declared drawing object inside a function reuses the name of an enclosing parameter or local; rename one.", "args": {"name": {"kind": "identifier"}}},
|
|
151
|
+
"PF-E2014": {"severity": "error", "area": "analysis", "message": "Callable TA ownership propagation did not converge; recursive stateful call paths are unsupported.", "hint": null, "explanation": "PineForge could not work out which functions own the ta.* state because stateful functions call each other recursively; remove the recursion.", "args": {}},
|
|
152
|
+
"PF-E2015": {"severity": "error", "area": "analysis", "message": "Cannot safely specialize untyped parameter ''{param}'' of callable ''{callee}'': distinct primitive types collapse onto the same written-call variant cs{cs_idx}. Inline the calls or declare an explicit parameter type.", "hint": null, "explanation": "An untyped parameter receives different primitive types (such as int and float) from calls PineForge cannot tell apart; declare its type or inline the calls.", "args": {"param": {"kind": "identifier"}, "callee": {"kind": "identifier"}, "cs_idx": {"kind": "number"}}},
|
|
153
|
+
"PF-E2016": {"severity": "error", "area": "analysis", "message": "Cannot infer the per-callsite primitive type of history parameter ''{param}'' in callable ''{name}'' variant cs{cs_idx}; declare its type explicitly.", "hint": null, "explanation": "A function reads history of a parameter whose type PineForge cannot infer at this call; declare the parameter type explicitly.", "args": {"param": {"kind": "identifier"}, "name": {"kind": "identifier"}, "cs_idx": {"kind": "number"}}},
|
|
154
|
+
"PF-E2017": {"severity": "error", "area": "analysis", "message": "request.security timeframe parameter ''{tf_param}'' of function ''{containing}'' is passed a timeframe that reads the chart bar (''{series}''): PineForge registers each call site''s timeframe before the first bar.", "hint": null, "explanation": "A timeframe passed to a helper's request.security reads chart-bar data, but PineForge fixes it before the first bar; pass a constant or input timeframe instead.", "args": {"tf_param": {"kind": "identifier"}, "containing": {"kind": "identifier"}, "series": {"kind": "identifier"}}},
|
|
155
|
+
"PF-E2018": {"severity": "error", "area": "analysis", "message": "Import is not supported: ''{import_path}''", "hint": null, "explanation": "The script imports a library PineForge cannot inline, usually because its source was not supplied or pinned, or it is not open source.", "args": {"import_path": {"kind": "identifier"}}},
|
|
156
|
+
"PF-E2019": {"severity": "error", "area": "analysis", "message": "Import is not supported: ''{import_path}'': {reason}", "hint": null, "explanation": "The script imports a library PineForge cannot inline, usually because its source was not supplied or pinned, or it is not open source.", "args": {"import_path": {"kind": "identifier"}, "reason": {"kind": "text"}}},
|
|
157
|
+
"PF-E2020": {"severity": "error", "area": "analysis", "message": "Undefined variable: ''{name}''", "hint": null, "explanation": "The script assigns a new value (:=) to a name that was never declared; declare the variable first.", "args": {"name": {"kind": "identifier"}}},
|
|
158
|
+
"PF-E2021": {"severity": "error", "area": "analysis", "message": "PineScript has no ta.sum; use math.sum(source, length) for rolling sum", "hint": null, "explanation": "ta.sum does not exist in Pine v6; use math.sum(source, length) for a rolling sum.", "args": {}},
|
|
159
|
+
"PF-E2022": {"severity": "error", "area": "analysis", "message": "{name}.copy(...) expects exactly one object argument", "hint": null, "explanation": "The functional copy form Type.copy(obj) needs exactly one object argument and no named arguments.", "args": {"name": {"kind": "type"}}},
|
|
160
|
+
"PF-E2023": {"severity": "error", "area": "analysis", "message": "{receiver_spec_name}.copy() expects no arguments", "hint": null, "explanation": "obj.copy() on a user-defined type takes no arguments; call it with empty parentheses.", "args": {"receiver_spec_name": {"kind": "type"}}},
|
|
161
|
+
"PF-E2024": {"severity": "error", "area": "analysis", "message": "{key}: argument ''{name}'' passed both positionally and by keyword", "hint": null, "explanation": "A call to a typed method gives the same parameter both by position and by keyword; pass it only once.", "args": {"key": {"kind": "identifier"}, "name": {"kind": "identifier"}}},
|
|
162
|
+
"PF-E2025": {"severity": "error", "area": "analysis", "message": "{key}: missing required argument ''{name}''", "hint": null, "explanation": "A call to a typed method omits a parameter that has no default value; pass an argument for it.", "args": {"key": {"kind": "identifier"}, "name": {"kind": "identifier"}}},
|
|
163
|
+
"PF-E2026": {"severity": "error", "area": "analysis", "message": "{key}: too many positional arguments (expected {names_count}, got {args_count})", "hint": null, "explanation": "A call to a typed method passes more positional arguments than the method declares; remove the extra arguments.", "args": {"key": {"kind": "identifier"}, "names_count": {"kind": "number"}, "args_count": {"kind": "number"}}},
|
|
164
|
+
"PF-E2027": {"severity": "error", "area": "analysis", "message": "{key}: unknown keyword argument ''{name}''", "hint": null, "explanation": "A call to a typed method uses a keyword argument name that the method does not declare; check the parameter spelling.", "args": {"key": {"kind": "identifier"}, "name": {"kind": "identifier"}}},
|
|
165
|
+
"PF-E2028": {"severity": "error", "area": "analysis", "message": "History references on map IDs are not supported in PineForge; map rollback uses identity snapshots rather than Series<PineMap>.", "hint": null, "explanation": "PineForge cannot read earlier-bar history of a map with the [] operator; read the map directly or keep earlier values in other variables.", "args": {}},
|
|
166
|
+
"PF-E2029": {"severity": "error", "area": "analysis", "message": "History references on map-bearing UDTs or collections are not supported in PineForge; their Series value copy would retain live map aliases.", "hint": null, "explanation": "PineForge cannot read earlier-bar history of a user-defined type or collection that contains a map, because the copy would keep live map references.", "args": {}},
|
|
167
|
+
"PF-E2030": {"severity": "error", "area": "analysis", "message": "User function ''{owner}'' is called with incompatible map parameter types; PineForge cannot emit multiple map specializations for one untyped function.", "hint": null, "explanation": "A function with untyped parameters is called with different map types, and PineForge can generate only one map specialization per function; declare the type.", "args": {"owner": {"kind": "identifier"}}},
|
|
168
|
+
"PF-E2031": {"severity": "error", "area": "analysis", "message": "History references on scalar local or loop bindings that shadow a map ID are not supported until PineForge can allocate a lexically scoped Series buffer for that binding.", "hint": null, "explanation": "A local or loop variable that reuses a map's name is read with history ([n]), which PineForge cannot buffer yet; rename the variable.", "args": {}},
|
|
169
|
+
"PF-E2032": {"severity": "error", "area": "analysis", "message": "{receiver}.{member}[...]: TradingView refuses the history-referencing operator on fields of user-defined types (CE10290).", "hint": "Read the field of the object''s history: ({receiver}[1]).{member}.", "explanation": "TradingView refuses the [] history operator on a field of a user-defined type; read the field of the object's history instead, as (obj[1]).field.", "args": {"receiver": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
170
|
+
"PF-E2033": {"severity": "error", "area": "analysis", "message": "request.security tuple-return helpers support two or more int, float, bool or string elements; inferred {tuple_size} element(s) [{inferred_types}]", "hint": null, "explanation": "A tuple-returning helper called inside request.security must yield two or more int, float, bool or string elements; its inferred shape did not qualify.", "args": {"tuple_size": {"kind": "number"}, "inferred_types": {"kind": "type"}}},
|
|
171
|
+
"PF-E2034": {"severity": "error", "area": "analysis", "message": "request.security_lower_tf has unknown parameter(s): {unknown}. Supported parameters: {param_names}", "hint": null, "explanation": "request.security_lower_tf was called with keyword arguments it does not accept; use only the supported parameters listed.", "args": {"unknown": {"kind": "identifier"}, "param_names": {"kind": "identifier"}}},
|
|
172
|
+
"PF-E2035": {"severity": "error", "area": "analysis", "message": "request.security_lower_tf requires an expression argument", "hint": null, "explanation": "request.security_lower_tf was called without its expression argument, so there is nothing to evaluate on the lower timeframe.", "args": {}},
|
|
173
|
+
"PF-E2036": {"severity": "error", "area": "analysis", "message": "request.security_lower_tf does not support tuple expressions yet. Issue separate request.security_lower_tf calls for each series.", "hint": null, "explanation": "request.security_lower_tf cannot return a tuple; issue one request.security_lower_tf call for each series you need.", "args": {}},
|
|
174
|
+
"PF-E2037": {"severity": "error", "area": "analysis", "message": "request.security_lower_tf element type ''{element_label}'' is not yet supported. Supported element types: float, int, bool. UDT / color / string element types are out of scope.", "hint": null, "explanation": "request.security_lower_tf can only collect float, int or bool values per intrabar; string, color and object expressions are not supported.", "args": {"element_label": {"kind": "type"}}},
|
|
175
|
+
"PF-E2038": {"severity": "error", "area": "analysis", "message": "Enum ''{ename}'' must be declared above this input.enum() call (or the name is misspelled).", "hint": null, "explanation": "input.enum() names an enum that is not declared above the call (or is misspelled); declare the enum first or fix the name.", "args": {"ename": {"kind": "identifier"}}},
|
|
176
|
+
"PF-E2039": {"severity": "error", "area": "analysis", "message": "Cannot materialize callable state for unknown function ''{func_name}''.", "hint": null, "explanation": "Internal error: PineForge could not find a user function or method whose indicator state it needed to copy; this is a transpiler bug to report.", "args": {"func_name": {"kind": "identifier"}}},
|
|
177
|
+
"PF-E3001": {"severity": "error", "area": "request-security", "message": "request.security timeframe ''{name}'' cannot be resolved before the first bar: PineForge registers every requested timeframe before the script runs.", "hint": "Pass a literal, an input or a global to the helper that holds request.security.", "explanation": "The timeframe given to request.security is a name whose value PineForge cannot compute before the first bar; use a literal, an input or a global.", "args": {"name": {"kind": "identifier"}}},
|
|
178
|
+
"PF-E3002": {"severity": "error", "area": "request-security", "message": "request.security timeframe expression cannot be resolved before the first bar: PineForge registers every requested timeframe before the script runs.", "hint": "Pass a literal, an input or a global to the helper that holds request.security.", "explanation": "The timeframe expression given to request.security cannot be computed before the first bar; use a literal, an input or a global.", "args": {}},
|
|
179
|
+
"PF-E3003": {"severity": "error", "area": "request-security", "message": "request.security timeframe switch arms must contain one expression", "hint": "Compute multi-statement timeframe logic before the request.security call or rewrite it as pure switch arms.", "explanation": "A switch that picks a request.security timeframe must have exactly one expression in each arm; compute multi-statement logic beforehand.", "args": {}},
|
|
180
|
+
"PF-E3004": {"severity": "error", "area": "request-security", "message": "request.security_lower_tf timeframe switch arm is na", "hint": "TradingView reads an na timeframe as the chart''s, which the engine''s lower-timeframe request rejects: spell a strictly finer timeframe.", "explanation": "A switch arm in a request.security_lower_tf timeframe is na, which a lower-timeframe request rejects; spell a strictly finer timeframe.", "args": {}},
|
|
181
|
+
"PF-E3005": {"severity": "error", "area": "request-security", "message": "request.security timeframe switch arm is na", "hint": "TradingView reads an na timeframe as the chart''s: spell the arm timeframe.period.", "explanation": "A switch arm in a request.security timeframe is na, which TradingView reads as the chart's timeframe; write timeframe.period instead.", "args": {}},
|
|
182
|
+
"PF-E3006": {"severity": "error", "area": "request-security", "message": "request.security timeframe switch arm could not be resolved at setup", "hint": null, "explanation": "A switch arm used as a request.security timeframe could not be evaluated, because PineForge registers every request before the first bar.", "args": {}},
|
|
183
|
+
"PF-E3007": {"severity": "error", "area": "request-security", "message": "request.security_lower_tf timeframe switch requires a default arm", "hint": "When no arm matches, TradingView reads the chart''s timeframe (one intrabar per chart bar); the engine''s lower-timeframe request needs a strictly finer timeframe.", "explanation": "A switch picking a request.security_lower_tf timeframe needs a default arm; without one TradingView uses the chart's timeframe, which is rejected.", "args": {}},
|
|
184
|
+
"PF-E3008": {"severity": "error", "area": "request-security", "message": "request.security timeframe switch selector could not be resolved at setup", "hint": null, "explanation": "The selector of a switch that picks a request.security timeframe could not be evaluated before the first bar; use literals, inputs or timeframe values.", "args": {}},
|
|
185
|
+
"PF-E3009": {"severity": "error", "area": "request-security", "message": "request.security timeframe switch case could not be resolved at setup", "hint": null, "explanation": "A case value in a switch that picks a request.security timeframe could not be evaluated before the first bar; use literals, inputs or timeframe values.", "args": {}},
|
|
186
|
+
"PF-E3010": {"severity": "error", "area": "request-security", "message": "request.security timeframe parameter ''{param_name}'' of ''{func_name}'' has no single timeframe across its call sites", "hint": "Pass the timeframe as a positional literal, input or global.", "explanation": "A helper's timeframe parameter used by request.security receives different timeframes at its call sites; pass one literal, input or global.", "args": {"param_name": {"kind": "identifier"}, "func_name": {"kind": "identifier"}}},
|
|
187
|
+
"PF-E3011": {"severity": "error", "area": "request-security", "message": "request.security helper-parameter history currently requires a direct OHLC/time bar-series binding", "hint": null, "explanation": "History of a helper parameter inside request.security is only supported when the argument is a plain bar series such as close or time.", "args": {}},
|
|
188
|
+
"PF-E3012": {"severity": "error", "area": "request-security", "message": "request.security payload reads ''{name}'' with history and outside the helper block its call is lowered in: its state would advance twice a bar", "hint": "Read ''{name}'' once at the helper''s top level and use that local in the block.", "explanation": "A global holding a stateful call is read with history both inside and outside the helper block that lowers it, so its state would advance twice per bar.", "args": {"name": {"kind": "identifier"}}},
|
|
189
|
+
"PF-E3013": {"severity": "error", "area": "request-security", "message": "Internal: request.security string helper state without its declared series map", "hint": null, "explanation": "Internal error: string state in a request.security helper was used before its series storage was declared; this is a transpiler bug to report.", "args": {}},
|
|
190
|
+
"PF-E3014": {"severity": "error", "area": "request-security", "message": "Internal security helper emission requested for a non-linear helper plan", "hint": null, "explanation": "Internal error: PineForge tried to emit a request.security helper as straight-line code although its shape is not; this is a transpiler bug to report.", "args": {}},
|
|
191
|
+
"PF-E3015": {"severity": "error", "area": "request-security", "message": "request.security helper-local var state currently supports only int, float, bool and string values", "hint": "Hoist collection, UDT, or drawing state outside request.security().", "explanation": "A var inside a request.security helper can only hold int, float, bool or string values; move collection, object or drawing state outside the request.", "args": {}},
|
|
192
|
+
"PF-E3016": {"severity": "error", "area": "request-security", "message": "request.security multi-statement helpers may only assign to local identifier temporaries", "hint": null, "explanation": "A multi-statement request.security helper can only assign to plain local variables, not to fields, array elements or other targets.", "args": {}},
|
|
193
|
+
"PF-E3017": {"severity": "error", "area": "request-security", "message": "request.security multi-statement helper assignment target must be declared before use", "hint": null, "explanation": "A multi-statement request.security helper assigns to a variable it never declared; declare the local before assigning to it.", "args": {}},
|
|
194
|
+
"PF-E3018": {"severity": "error", "area": "request-security", "message": "request.security helper tuple declaration: a string element read with history is not supported", "hint": "Declare the element with its own string variable.", "explanation": "A string element of a tuple declared in a request.security helper is read with history, which is unsupported; declare it as its own string variable.", "args": {}},
|
|
195
|
+
"PF-E3019": {"severity": "error", "area": "request-security", "message": "request.security multi-statement helpers may only use local declarations, assignments, and if-branches before the final expression", "hint": null, "explanation": "A multi-statement request.security helper may contain only local declarations, assignments, if-branches and loops before its final expression.", "args": {}},
|
|
196
|
+
"PF-E3020": {"severity": "error", "area": "request-security", "message": "request.security helper while-loop conditions must be plain expressions of the helper''s values", "hint": null, "explanation": "A while-loop condition in a request.security helper must be a plain expression of the helper's own values.", "args": {}},
|
|
197
|
+
"PF-E3021": {"severity": "error", "area": "request-security", "message": "request.security helper calls must target named user-defined functions", "hint": null, "explanation": "request.security can only inline calls to named user-defined functions or typed methods, not other call forms.", "args": {}},
|
|
198
|
+
"PF-E3022": {"severity": "error", "area": "request-security", "message": "request.security helper function ''{func_name}'' is not defined", "hint": null, "explanation": "A function called while inlining a request.security helper is not a user-defined function PineForge knows, so it cannot be inlined.", "args": {"func_name": {"kind": "identifier"}}},
|
|
199
|
+
"PF-E3023": {"severity": "error", "area": "request-security", "message": "request.security helper call has unknown parameter(s): {unknown_list}", "hint": null, "explanation": "A helper called inside request.security is given keyword arguments that are not among the function's parameters.", "args": {"unknown_list": {"kind": "identifier"}}},
|
|
200
|
+
"PF-E3024": {"severity": "error", "area": "request-security", "message": "request.security helper calls must bind every parameter explicitly", "hint": null, "explanation": "A helper called inside request.security must be given an argument for every parameter; omitted defaults are not filled in there.", "args": {}},
|
|
201
|
+
"PF-E3025": {"severity": "error", "area": "request-security", "message": "request.security multi-statement helpers must end with a final expression result", "hint": null, "explanation": "A multi-statement request.security helper must end with an expression, declaration or assignment that gives its result.", "args": {}},
|
|
202
|
+
"PF-E3026": {"severity": "error", "area": "request-security", "message": "request.security does not support multi-statement helpers with control flow", "hint": "Inline a straight-line helper body or hoist the control-flow helper outside request.security().", "explanation": "request.security cannot inline a multi-statement helper that contains for-in, switch, break or continue; inline a straight-line body or move it out.", "args": {}},
|
|
203
|
+
"PF-E3027": {"severity": "error", "area": "request-security", "message": "request.security does not support helper-local varip state", "hint": "Use var for requested-context bar state; varip tick state is unavailable in batch backtests.", "explanation": "varip state is not available in a request.security helper; use var instead, since tick-level varip state does not exist in batch backtests.", "args": {}},
|
|
204
|
+
"PF-E3028": {"severity": "error", "area": "request-security", "message": "request.security helper-local var declarations inside conditional control flow are not supported", "hint": "Declare persistent requested-context state at the helper''s top level.", "explanation": "A var declared inside an if or other conditional block of a request.security helper is not supported; declare it at the helper's top level.", "args": {}},
|
|
205
|
+
"PF-E3029": {"severity": "error", "area": "request-security", "message": "request.security method TA constructor argument ''{cpp}'' is not a stable per-run scalar", "hint": null, "explanation": "A typed method called inside request.security builds a TA indicator whose argument is not fixed for the whole run; use a constant or input value.", "args": {"cpp": {"kind": "identifier"}}},
|
|
206
|
+
"PF-E3030": {"severity": "error", "area": "request-security", "message": "request.security helper loops cannot hold a TA call", "hint": "Compute it before the loop, on the requested bar.", "explanation": "A for or while loop in a request.security helper cannot contain a ta.* call; compute it before the loop, on the requested bar.", "args": {}},
|
|
207
|
+
"PF-E3031": {"severity": "error", "area": "request-security", "message": "request.security helper loops cannot hold a TA call (through {via})", "hint": "Compute it before the loop, on the requested bar.", "explanation": "A loop in a request.security helper reaches a ta.* call through a parameter or global it reads; compute that value before the loop.", "args": {"via": {"kind": "text"}}},
|
|
208
|
+
"PF-E3032": {"severity": "error", "area": "request-security", "message": "request.security helper loops cannot hold a user function call", "hint": "Compute it before the loop, on the requested bar.", "explanation": "A for or while loop in a request.security helper cannot call a user-defined function; compute the value before the loop.", "args": {}},
|
|
209
|
+
"PF-E3033": {"severity": "error", "area": "request-security", "message": "request.security helper loops cannot hold a user function call (through {via})", "hint": "Compute it before the loop, on the requested bar.", "explanation": "A loop in a request.security helper reaches a user function call through a parameter or global it reads; compute that value before the loop.", "args": {"via": {"kind": "text"}}},
|
|
210
|
+
"PF-E3034": {"severity": "error", "area": "request-security", "message": "request.security helper loops cannot hold a var declaration", "hint": "Compute it before the loop, on the requested bar.", "explanation": "A for or while loop in a request.security helper cannot declare a var; compute the value before the loop.", "args": {}},
|
|
211
|
+
"PF-E3035": {"severity": "error", "area": "request-security", "message": "request.security helper loops cannot hold a var declaration (through {via})", "hint": "Compute it before the loop, on the requested bar.", "explanation": "A loop in a request.security helper reaches a var declaration through a parameter or global it reads; compute that value before the loop.", "args": {"via": {"kind": "text"}}},
|
|
212
|
+
"PF-E3036": {"severity": "error", "area": "request-security", "message": "request.security helper loops cannot hold a {namespace}.* call", "hint": "Compute it before the loop, on the requested bar.", "explanation": "A for or while loop in a request.security helper cannot call request.* or strategy.* functions; compute the value before the loop.", "args": {"namespace": {"kind": "identifier"}}},
|
|
213
|
+
"PF-E3037": {"severity": "error", "area": "request-security", "message": "request.security helper loops cannot hold a {namespace}.* call (through {via})", "hint": "Compute it before the loop, on the requested bar.", "explanation": "A loop in a request.security helper reaches a request.* or strategy.* call through a parameter or global it reads; compute it before the loop.", "args": {"namespace": {"kind": "identifier"}, "via": {"kind": "text"}}},
|
|
214
|
+
"PF-E3038": {"severity": "error", "area": "request-security", "message": "request.security helper loops cannot hold the local ''{name}'', which is read with history", "hint": "Compute it before the loop, on the requested bar.", "explanation": "A loop in a request.security helper cannot read a local that is also read with history; compute that local before the loop.", "args": {"name": {"kind": "identifier"}}},
|
|
215
|
+
"PF-E3039": {"severity": "error", "area": "request-security", "message": "request.security helper loops cannot hold the local ''{name}'', which is read with history (through {via})", "hint": "Compute it before the loop, on the requested bar.", "explanation": "A loop in a request.security helper reaches a local read with history through a parameter or global; compute that local before the loop.", "args": {"name": {"kind": "identifier"}, "via": {"kind": "text"}}},
|
|
216
|
+
"PF-E3040": {"severity": "error", "area": "request-security", "message": "request.security mutable global rebinding does not support top-level switch", "hint": "Rewrite the switch as if/else assignments before passing the value to request.security().", "explanation": "A global read by the request.security expression is rebound inside a top-level switch, which PineForge cannot replay; rewrite it as if/else assignments.", "args": {}},
|
|
217
|
+
"PF-E3041": {"severity": "error", "area": "request-security", "message": "request.security mutable global rebinding does not support top-level loops", "hint": "Move loop-driven mutable state out of request.security() expressions or rewrite it as direct assignments.", "explanation": "A global read by the request.security expression is rebound inside a top-level loop, which PineForge cannot replay; use direct assignments or move it out.", "args": {}},
|
|
218
|
+
"PF-E3042": {"severity": "error", "area": "request-security", "message": "request.security does not support TA constructor args that depend on rebound mutable globals", "hint": "Keep TA constructor arguments immutable/simple inside request.security(), or hoist the TA call outside the security expression.", "explanation": "A TA length or other indicator argument inside request.security depends on a global the script reassigns; keep it constant or compute the TA outside.", "args": {}},
|
|
219
|
+
"PF-E3043": {"severity": "error", "area": "request-security", "message": "History of a {kind} reference inside a request.security expression is not supported in PineForge: TradingView reads the references the variable held on the requested timeframe''s bars, which PineForge does not keep.", "hint": "Request the field values the expression needs (request.security(..., obj.field)) and read their history on the chart.", "explanation": "request.security cannot read the history of a user-defined type or drawing reference, because PineForge keeps no references from the requested bars.", "args": {"kind": {"kind": "type"}}},
|
|
220
|
+
"PF-E3044": {"severity": "error", "area": "request-security", "message": "request.security payload reads ''{name}'', an element of a tuple declaration it cannot re-evaluate", "hint": null, "explanation": "The request.security expression reads a name bound by a tuple declaration that PineForge cannot re-evaluate on the requested bar.", "args": {"name": {"kind": "identifier"}}},
|
|
221
|
+
"PF-E3045": {"severity": "error", "area": "request-security", "message": "request.security payload reads ''{name}'', an element of a TA tuple it does not compute once per requested bar", "hint": null, "explanation": "The request.security expression reads an element of a TA tuple that PineForge does not compute once per requested bar.", "args": {"name": {"kind": "identifier"}}},
|
|
222
|
+
"PF-E3046": {"severity": "error", "area": "request-security", "message": "request.security() bar-field history index must be non-negative", "hint": null, "explanation": "A negative history offset on a bar series such as close[-1] is not allowed inside request.security.", "args": {}},
|
|
223
|
+
"PF-E3047": {"severity": "error", "area": "request-security", "message": "request.security payload reads the history of ''{object_name}'', an element of a tuple declaration", "hint": null, "explanation": "The request.security expression reads the history of a name bound by a tuple declaration, which PineForge cannot do on the requested bars.", "args": {"object_name": {"kind": "identifier"}}},
|
|
224
|
+
"PF-E3048": {"severity": "error", "area": "request-security", "message": "request.security payload reads the string global ''{object_name}'' with history, which the requested clock does not keep", "hint": null, "explanation": "A string global read with history inside request.security is not supported, because the requested clock keeps no string history.", "args": {"object_name": {"kind": "identifier"}}},
|
|
225
|
+
"PF-E3049": {"severity": "error", "area": "request-security", "message": "request.security() TA history index must be a literal integer (e.g. ta.ema(close, 55)[1])", "hint": "An int computed from inputs and literals is admitted; a series index is not.", "explanation": "A history offset on a TA call inside request.security must be an integer literal or a number computed from inputs and literals, not a series.", "args": {}},
|
|
226
|
+
"PF-E3050": {"severity": "error", "area": "request-security", "message": "request.security() TA history index must be non-negative", "hint": null, "explanation": "A negative history offset on a TA call inside request.security is not allowed.", "args": {}},
|
|
227
|
+
"PF-E3051": {"severity": "error", "area": "request-security", "message": "request.security multi-statement helper TA history is not supported", "hint": "Use a single-expression helper for TA history offsets.", "explanation": "A TA history offset inside a multi-statement request.security helper is not supported; use a single-expression helper.", "args": {}},
|
|
228
|
+
"PF-E3052": {"severity": "error", "area": "request-security", "message": "request.security helper functions must not recurse while building a security context", "hint": null, "explanation": "A request.security helper calls itself, directly or through other helpers, which PineForge cannot inline; remove the recursion.", "args": {}},
|
|
229
|
+
"PF-E3053": {"severity": "error", "area": "request-security", "message": "request.security multi-statement helpers require statement-capable security evaluation context", "hint": null, "explanation": "A multi-statement helper is used inside a request.security expression at a spot where PineForge cannot emit statements, so it cannot be inlined there.", "args": {}},
|
|
230
|
+
"PF-E3054": {"severity": "error", "area": "request-security", "message": "the payload reads ''{func_name}'' on the chart''s bar", "hint": null, "explanation": "The request.security expression mixes a value evaluated on the requested bar with one PineForge can only read on the chart's bar.", "args": {"func_name": {"kind": "identifier"}}},
|
|
231
|
+
"PF-E3055": {"severity": "error", "area": "request-security", "message": "the payload reads ''{namespace}.{func_name}'' on the chart''s bar", "hint": null, "explanation": "The request.security expression mixes a value evaluated on the requested bar with one PineForge can only read on the chart's bar.", "args": {"namespace": {"kind": "identifier"}, "func_name": {"kind": "identifier"}}},
|
|
232
|
+
"PF-E3056": {"severity": "error", "area": "request-security", "message": "the payload reads ''{name}'' on the chart''s bar", "hint": null, "explanation": "The request.security expression mixes a value evaluated on the requested bar with one PineForge can only read on the chart's bar.", "args": {"name": {"kind": "identifier"}}},
|
|
233
|
+
"PF-E3057": {"severity": "error", "area": "request-security", "message": "the payload reads a user call it cannot inline on the chart''s bar", "hint": null, "explanation": "A request.security payload reads something PineForge would evaluate on the chart's bar, where TradingView evaluates it on the requested bar, so it is refused.", "args": {}},
|
|
234
|
+
"PF-E3058": {"severity": "error", "area": "request-security", "message": "the payload reads a {node_type} on the chart''s bar", "hint": null, "explanation": "The request.security expression mixes a value evaluated on the requested bar with one PineForge can only read on the chart's bar.", "args": {"node_type": {"kind": "identifier"}}},
|
|
235
|
+
"PF-E3059": {"severity": "error", "area": "request-security", "message": "the payload reads history it does not keep on the requested clock on the chart''s bar", "hint": null, "explanation": "A request.security payload reads something PineForge would evaluate on the chart's bar, where TradingView evaluates it on the requested bar, so it is refused.", "args": {}},
|
|
236
|
+
"PF-E3060": {"severity": "error", "area": "request-security", "message": "request.security payload reads the history of ''{name}'', an element of a tuple declaration", "hint": null, "explanation": "The request.security expression reads the history of a name bound by a tuple declaration, which PineForge cannot do on the requested bars.", "args": {"name": {"kind": "identifier"}}},
|
|
237
|
+
"PF-E3061": {"severity": "error", "area": "request-security", "message": "request.security helper switch arms must each be one expression", "hint": "Compute a multi-statement arm in its own helper, or on the chart.", "explanation": "A switch used as a request.security helper's value must have a single expression in each arm; move multi-statement arms into their own helper.", "args": {}},
|
|
238
|
+
"PF-E3062": {"severity": "error", "area": "request-security", "message": "request.{request_name} context: helper ''{func}'' {problem}", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "A helper holding a request.security cannot have its symbol and timeframe resolved per call path, because it is overloaded or called from a method.", "args": {"request_name": {"kind": "identifier"}, "func": {"kind": "identifier"}, "problem": {"kind": "text"}}},
|
|
239
|
+
"PF-E3063": {"severity": "error", "area": "request-security", "message": "request.{request_name} {what} cannot be resolved before the first bar on the call path {chain}: ''{expr_name}'' is not a value fixed before the first bar", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "The symbol or timeframe of a request inside a helper cannot be computed before the first bar on this call path; pass literals, inputs or globals.", "args": {"request_name": {"kind": "identifier"}, "what": {"kind": "text"}, "chain": {"kind": "identifier"}, "expr_name": {"kind": "identifier"}}},
|
|
240
|
+
"PF-E3064": {"severity": "error", "area": "request-security", "message": "request.{request_name} {what} cannot be resolved before the first bar on the call path {chain}: ''{expr}'' is not a value fixed before the first bar", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "The symbol or timeframe of a request inside a helper cannot be computed before the first bar on this call path; pass literals, inputs or globals.", "args": {"request_name": {"kind": "identifier"}, "what": {"kind": "text"}, "chain": {"kind": "identifier"}, "expr": {"kind": "identifier"}}},
|
|
241
|
+
"PF-E3065": {"severity": "error", "area": "request-security", "message": "request.{request_name} {what} cannot be resolved before the first bar on the call path {chain}: ''{func}'' declares ''{names}''", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "The symbol or timeframe of a request inside a helper cannot be computed before the first bar on this call path; pass literals, inputs or globals.", "args": {"request_name": {"kind": "identifier"}, "what": {"kind": "text"}, "chain": {"kind": "identifier"}, "func": {"kind": "identifier"}, "names": {"kind": "identifier"}}},
|
|
242
|
+
"PF-E3066": {"severity": "error", "area": "request-security", "message": "request.{request_name} {what} cannot be resolved before the first bar on the call path {chain}: ''{name}'' is not a value the requested bars recompute", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "A request's symbol or timeframe reached through helper parameters cannot be computed before the first bar on this call path; pass literals, inputs or globals.", "args": {"request_name": {"kind": "identifier"}, "what": {"kind": "text"}, "chain": {"kind": "identifier"}, "name": {"kind": "identifier"}}},
|
|
243
|
+
"PF-E3067": {"severity": "error", "area": "request-security", "message": "request.{request_name} {what} cannot be resolved before the first bar on the call path {chain}: ''{name}'' is reassigned or declared var", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "The symbol or timeframe of a request inside a helper cannot be computed before the first bar on this call path; pass literals, inputs or globals.", "args": {"request_name": {"kind": "identifier"}, "what": {"kind": "text"}, "chain": {"kind": "identifier"}, "name": {"kind": "identifier"}}},
|
|
244
|
+
"PF-E3068": {"severity": "error", "area": "request-security", "message": "request.{request_name} {what} cannot be resolved before the first bar on the call path {chain}: a {node_type} is not a value fixed before the first bar", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "The symbol or timeframe of a request inside a helper cannot be computed before the first bar on this call path; pass literals, inputs or globals.", "args": {"request_name": {"kind": "identifier"}, "what": {"kind": "text"}, "chain": {"kind": "identifier"}, "node_type": {"kind": "identifier"}}},
|
|
245
|
+
"PF-E3069": {"severity": "error", "area": "request-security", "message": "request.{request_name} {what} cannot be resolved before the first bar on the call path {chain}: it holds a request.{request_name2} call", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "The symbol or timeframe of a request inside a helper cannot be computed before the first bar on this call path; pass literals, inputs or globals.", "args": {"request_name": {"kind": "identifier"}, "what": {"kind": "text"}, "chain": {"kind": "identifier"}, "request_name2": {"kind": "identifier"}}},
|
|
246
|
+
"PF-E3070": {"severity": "error", "area": "request-security", "message": "request.{request_name} {what} cannot be resolved before the first bar on the call path {chain}: it reads ''{expr_name}'', a series", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "The symbol or timeframe of a request inside a helper cannot be computed before the first bar on this call path; pass literals, inputs or globals.", "args": {"request_name": {"kind": "identifier"}, "what": {"kind": "text"}, "chain": {"kind": "identifier"}, "expr_name": {"kind": "identifier"}}},
|
|
247
|
+
"PF-E3071": {"severity": "error", "area": "request-security", "message": "request.{request_name} {what} cannot be resolved before the first bar on the call path {chain}: its value is too large", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "The symbol or timeframe of a request inside a helper cannot be computed before the first bar on this call path; pass literals, inputs or globals.", "args": {"request_name": {"kind": "identifier"}, "what": {"kind": "text"}, "chain": {"kind": "identifier"}}},
|
|
248
|
+
"PF-E3072": {"severity": "error", "area": "request-security", "message": "request.{request_name} {what} cannot be resolved before the first bar on the call path {chain}: parameter ''{binding}'' has no argument", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "The symbol or timeframe of a request inside a helper cannot be computed before the first bar on this call path; pass literals, inputs or globals.", "args": {"request_name": {"kind": "identifier"}, "what": {"kind": "text"}, "chain": {"kind": "identifier"}, "binding": {"kind": "identifier"}}},
|
|
249
|
+
"PF-E3073": {"severity": "error", "area": "request-security", "message": "request.{request_name} {what} cannot be resolved before the first bar on the call path {chain}: parameter ''{param}'' has no argument", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "The symbol or timeframe of a request inside a helper cannot be computed before the first bar on this call path; pass literals, inputs or globals.", "args": {"request_name": {"kind": "identifier"}, "what": {"kind": "text"}, "chain": {"kind": "identifier"}, "param": {"kind": "identifier"}}},
|
|
250
|
+
"PF-E3074": {"severity": "error", "area": "request-security", "message": "request.{request_name} {what} cannot be resolved before the first bar on the call path {chain}: the helpers reach it through too many call paths", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "A request's symbol or timeframe reached through helper parameters cannot be computed before the first bar on this call path; pass literals, inputs or globals.", "args": {"request_name": {"kind": "identifier"}, "what": {"kind": "text"}, "chain": {"kind": "identifier"}}},
|
|
251
|
+
"PF-E3075": {"severity": "error", "area": "request-security", "message": "request.{request_name} {what} cannot be resolved before the first bar on the call path {chain}: the method call {expr}", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "The symbol or timeframe of a request inside a helper cannot be computed before the first bar on this call path; pass literals, inputs or globals.", "args": {"request_name": {"kind": "identifier"}, "what": {"kind": "text"}, "chain": {"kind": "identifier"}, "expr": {"kind": "identifier"}}},
|
|
252
|
+
"PF-E3076": {"severity": "error", "area": "request-security", "message": "request.{request_name} {what} cannot be resolved before the first bar on the call path {chain}: the user function call {callee_name}(...)", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "The symbol or timeframe of a request inside a helper cannot be computed before the first bar on this call path; pass literals, inputs or globals.", "args": {"request_name": {"kind": "identifier"}, "what": {"kind": "text"}, "chain": {"kind": "identifier"}, "callee_name": {"kind": "identifier"}}},
|
|
253
|
+
"PF-E3077": {"severity": "error", "area": "request-security", "message": "request.{request_name} {what} cannot be resolved before the first bar on the call path {chain}: the value of ''{param}'' is not lowered on the requested bars", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "A request's symbol or timeframe reached through helper parameters cannot be computed before the first bar on this call path; pass literals, inputs or globals.", "args": {"request_name": {"kind": "identifier"}, "what": {"kind": "text"}, "chain": {"kind": "identifier"}, "param": {"kind": "identifier"}}},
|
|
254
|
+
"PF-E3078": {"severity": "error", "area": "request-security", "message": "request.{request_name} context: ''{expr_name}'' is not a value fixed before the first bar", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "A request's symbol, timeframe or payload parameter reads a value PineForge cannot compute before the first bar or recompute on the requested bars; pass literals, inputs or globals.", "args": {"request_name": {"kind": "identifier"}, "expr_name": {"kind": "identifier"}}},
|
|
255
|
+
"PF-E3079": {"severity": "error", "area": "request-security", "message": "request.{request_name} context: ''{expr}'' is not a value fixed before the first bar", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "A request's symbol, timeframe or payload parameter reads a value PineForge cannot compute before the first bar or recompute on the requested bars; pass literals, inputs or globals.", "args": {"request_name": {"kind": "identifier"}, "expr": {"kind": "identifier"}}},
|
|
256
|
+
"PF-E3080": {"severity": "error", "area": "request-security", "message": "request.{request_name} context: ''{func}'' declares ''{names}''", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "A request's symbol, timeframe or payload parameter reads a value PineForge cannot compute before the first bar or recompute on the requested bars; pass literals, inputs or globals.", "args": {"request_name": {"kind": "identifier"}, "func": {"kind": "identifier"}, "names": {"kind": "identifier"}}},
|
|
257
|
+
"PF-E3081": {"severity": "error", "area": "request-security", "message": "request.{request_name} context: ''{name}'' is not a value the requested bars recompute", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "A request's symbol, timeframe or payload parameter reads a value PineForge cannot compute before the first bar or recompute on the requested bars; pass literals, inputs or globals.", "args": {"request_name": {"kind": "identifier"}, "name": {"kind": "identifier"}}},
|
|
258
|
+
"PF-E3082": {"severity": "error", "area": "request-security", "message": "request.{request_name} context: ''{name}'' is reassigned or declared var", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "A request's symbol, timeframe or payload parameter reads a value PineForge cannot compute before the first bar or recompute on the requested bars; pass literals, inputs or globals.", "args": {"request_name": {"kind": "identifier"}, "name": {"kind": "identifier"}}},
|
|
259
|
+
"PF-E3083": {"severity": "error", "area": "request-security", "message": "request.{request_name} context: a {node_type} is not a value fixed before the first bar", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "A request's symbol, timeframe or payload parameter reads a value PineForge cannot compute before the first bar or recompute on the requested bars; pass literals, inputs or globals.", "args": {"request_name": {"kind": "identifier"}, "node_type": {"kind": "identifier"}}},
|
|
260
|
+
"PF-E3084": {"severity": "error", "area": "request-security", "message": "request.{request_name} context: it holds a request.{request_name2} call", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "A request's symbol or timeframe holds another request, which PineForge cannot compute before the first bar.", "args": {"request_name": {"kind": "identifier"}, "request_name2": {"kind": "identifier"}}},
|
|
261
|
+
"PF-E3085": {"severity": "error", "area": "request-security", "message": "request.{request_name} context: it reads ''{expr_name}'', a series", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "A request's symbol, timeframe or payload parameter reads a value PineForge cannot compute before the first bar or recompute on the requested bars; pass literals, inputs or globals.", "args": {"request_name": {"kind": "identifier"}, "expr_name": {"kind": "identifier"}}},
|
|
262
|
+
"PF-E3086": {"severity": "error", "area": "request-security", "message": "request.{request_name} context: its value is too large", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "The value a request's context reads is too large for PineForge to resolve before the first bar.", "args": {"request_name": {"kind": "identifier"}}},
|
|
263
|
+
"PF-E3087": {"severity": "error", "area": "request-security", "message": "request.{request_name} context: parameter ''{binding}'' has no argument", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "A helper call leaves out the parameter the request's symbol or timeframe reads, so PineForge cannot resolve the request's context.", "args": {"request_name": {"kind": "identifier"}, "binding": {"kind": "identifier"}}},
|
|
264
|
+
"PF-E3088": {"severity": "error", "area": "request-security", "message": "request.{request_name} context: parameter ''{param}'' has no argument", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "A helper call leaves out the parameter the request's symbol or timeframe reads, so PineForge cannot resolve the request's context.", "args": {"request_name": {"kind": "identifier"}, "param": {"kind": "identifier"}}},
|
|
265
|
+
"PF-E3089": {"severity": "error", "area": "request-security", "message": "request.{request_name} context: the helpers reach it through too many call paths", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "The helpers holding this request are reached through too many call paths for PineForge to resolve each one's symbol and timeframe.", "args": {"request_name": {"kind": "identifier"}}},
|
|
266
|
+
"PF-E3090": {"severity": "error", "area": "request-security", "message": "request.{request_name} context: the method call {expr}", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "A request's symbol, timeframe or payload parameter reads a value PineForge cannot compute before the first bar or recompute on the requested bars; pass literals, inputs or globals.", "args": {"request_name": {"kind": "identifier"}, "expr": {"kind": "identifier"}}},
|
|
267
|
+
"PF-E3091": {"severity": "error", "area": "request-security", "message": "request.{request_name} context: the user function call {callee_name}(...)", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "A request's symbol, timeframe or payload parameter reads a value PineForge cannot compute before the first bar or recompute on the requested bars; pass literals, inputs or globals.", "args": {"request_name": {"kind": "identifier"}, "callee_name": {"kind": "identifier"}}},
|
|
268
|
+
"PF-E3092": {"severity": "error", "area": "request-security", "message": "request.{request_name} context: the value of ''{param}'' is not lowered on the requested bars", "hint": "Pass the symbol and timeframe as literals, inputs or globals at the helper''s call sites.", "explanation": "A request's symbol, timeframe or payload parameter reads a value PineForge cannot compute before the first bar or recompute on the requested bars; pass literals, inputs or globals.", "args": {"request_name": {"kind": "identifier"}, "param": {"kind": "identifier"}}},
|
|
269
|
+
"PF-E4001": {"severity": "error", "area": "libraries", "message": "Import is not supported: ''{path}'': library ''{path}'' has no valid sha256 in {where}", "hint": null, "explanation": "The imported library cannot be inlined: its pinned source is missing, unreadable or not configured for this script.", "args": {"path": {"kind": "identifier"}, "where": {"kind": "text"}}},
|
|
270
|
+
"PF-E4002": {"severity": "error", "area": "libraries", "message": "Import is not supported: ''{path}'': library ''{path}'' is not among the libraries passed to transpile()", "hint": null, "explanation": "The imported library was not among the library sources supplied to the transpiler, so it cannot be inlined; supply its source text.", "args": {"path": {"kind": "identifier"}}},
|
|
271
|
+
"PF-E4003": {"severity": "error", "area": "libraries", "message": "Import is not supported: ''{path}'': library ''{path}'' is not open-source (access ''{access}''); PineForge inlines open libraries only", "hint": null, "explanation": "The library's manifest entry says it is not open-source, and PineForge inlines open libraries only.", "args": {"path": {"kind": "identifier"}, "access": {"kind": "identifier"}}},
|
|
272
|
+
"PF-E4004": {"severity": "error", "area": "libraries", "message": "Import is not supported: ''{path}'': library ''{path}'' is not open-source (access ''{indexed_access}'' in libraries.json); PineForge inlines open libraries only", "hint": null, "explanation": "The library index marks this library as not open-source, and PineForge inlines open libraries only.", "args": {"path": {"kind": "identifier"}, "indexed_access": {"kind": "identifier"}}},
|
|
273
|
+
"PF-E4005": {"severity": "error", "area": "libraries", "message": "Import is not supported: ''{path}'': library ''{path}'' is not pinned by this script''s requests manifest ({where})", "hint": null, "explanation": "The script's requests manifest does not pin this imported library, so PineForge will not use any other source for it; add the library to the manifest.", "args": {"path": {"kind": "identifier"}, "where": {"kind": "identifier"}}},
|
|
274
|
+
"PF-E4006": {"severity": "error", "area": "libraries", "message": "Import is not supported: ''{path}'': library ''{path}'' source does not match its pinned sha256 {sha}... (found {found_sha}...)", "hint": null, "explanation": "The library source that was found does not match the SHA-256 hash pinned in the manifest, so PineForge refuses to use it.", "args": {"path": {"kind": "identifier"}, "sha": {"kind": "identifier"}, "found_sha": {"kind": "identifier"}}},
|
|
275
|
+
"PF-E4007": {"severity": "error", "area": "libraries", "message": "Import is not supported: ''{path}'': library ''{path}'' source is missing (sha256 {sha}... under ${requests_env}/{slug_dir_name}/files and ${libraries_env})", "hint": null, "explanation": "No file matching the library's pinned SHA-256 hash was found in the configured directories, so its source is missing.", "args": {"path": {"kind": "identifier"}, "sha": {"kind": "identifier"}, "requests_env": {"kind": "identifier"}, "slug_dir_name": {"kind": "identifier"}, "libraries_env": {"kind": "identifier"}}},
|
|
276
|
+
"PF-E4008": {"severity": "error", "area": "libraries", "message": "Import is not supported: ''{path}'': library ''{path}'' source is not UTF-8 text", "hint": null, "explanation": "The imported library cannot be inlined: its pinned source is missing, unreadable or not configured for this script.", "args": {"path": {"kind": "identifier"}}},
|
|
277
|
+
"PF-E4009": {"severity": "error", "area": "libraries", "message": "Import is not supported: ''{path}'': no library sources are configured", "hint": null, "explanation": "The imported library cannot be inlined: its pinned source is missing, unreadable or not configured for this script.", "args": {"path": {"kind": "identifier"}}},
|
|
278
|
+
"PF-E4010": {"severity": "error", "area": "libraries", "message": "library ''{path}'' spells ''{clash}'', a name PineForge gave to an inlined definition", "hint": null, "explanation": "An imported library uses a name PineForge generates for its own inlined definitions, so the library cannot be inlined without a name clash.", "args": {"path": {"kind": "identifier"}, "clash": {"kind": "identifier"}}},
|
|
279
|
+
"PF-E4011": {"severity": "error", "area": "libraries", "message": "library ''{path}'' defines ''{name}'' {defs_count} times (overloads); PineForge does not inline an overloaded library function", "hint": null, "explanation": "The library defines this function several times (overloads) in a way PineForge cannot resolve, so it will not inline it; call a non-overloaded function.", "args": {"path": {"kind": "identifier"}, "name": {"kind": "identifier"}, "defs_count": {"kind": "number"}}},
|
|
280
|
+
"PF-E4012": {"severity": "error", "area": "libraries", "message": "no overload of ''{name}'' of library ''{path}'' takes the arguments of this call", "hint": null, "explanation": "None of the library function's overloads accepts the arguments in this call; check the number of arguments and any keyword names.", "args": {"name": {"kind": "identifier"}, "path": {"kind": "identifier"}}},
|
|
281
|
+
"PF-E4013": {"severity": "error", "area": "libraries", "message": "library ''{path}'' does not export ''{member}''", "hint": null, "explanation": "The name exists in the imported library but is not exported, so the script cannot use it through the import; use an exported name.", "args": {"path": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
282
|
+
"PF-E4014": {"severity": "error", "area": "libraries", "message": "library ''{path}'' does not export ''{member}'': it has no ''{member}''", "hint": null, "explanation": "The imported library has no such name at all; check the spelling of the member you access through the import alias.", "args": {"path": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
283
|
+
"PF-E4015": {"severity": "error", "area": "libraries", "message": "''{token}'' is not a type of library ''{targets}''", "hint": null, "explanation": "A type written as alias.Type is not an exported type or enum of that library; check the type's name and that the library exports it.", "args": {"token": {"kind": "identifier"}, "targets": {"kind": "identifier"}}},
|
|
284
|
+
"PF-E4016": {"severity": "error", "area": "libraries", "message": "library ''{path}'': a {statement} inside a function is not supported", "hint": null, "explanation": "A function in an imported library contains a nested declaration (function, method, type, enum, import or script declaration), which PineForge cannot inline.", "args": {"path": {"kind": "identifier"}, "statement": {"kind": "vocab", "values": ["EnumDecl", "FuncDef", "ImportStmt", "MethodDef", "StrategyDecl", "TypeDecl"]}}},
|
|
285
|
+
"PF-E4017": {"severity": "error", "area": "libraries", "message": "''{alias}.{member}'' of library ''{targets}'' is a {kind}, not a value", "hint": null, "explanation": "The script reads a library function or method as a plain value; only exported constants, types and enums can be read that way, so call it instead.", "args": {"alias": {"kind": "identifier"}, "member": {"kind": "identifier"}, "targets": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["function", "method"]}}},
|
|
286
|
+
"PF-E4018": {"severity": "error", "area": "libraries", "message": "library method ''{member}'' called without its receiver as the first positional argument", "hint": null, "explanation": "A library method was called through its import alias without the receiver as the first argument; pass the receiver first or call it as receiver.method().", "args": {"member": {"kind": "identifier"}}},
|
|
287
|
+
"PF-E4019": {"severity": "error", "area": "libraries", "message": "''{alias}.{member}'' of library ''{targets}'' is a {kind}, not a function", "hint": null, "explanation": "The script calls an exported library type or constant like a function; only exported functions and methods can be called, so use it as a type or value.", "args": {"alias": {"kind": "identifier"}, "member": {"kind": "identifier"}, "targets": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["const", "type"]}}},
|
|
288
|
+
"PF-E4020": {"severity": "error", "area": "libraries", "message": "method ''{member}'' is exported by {exporters_count} imported libraries; a keyword argument cannot be bound to one", "hint": null, "explanation": "Several imported libraries export a method with this name, so a call that uses keyword arguments is ambiguous; pass the arguments by position.", "args": {"member": {"kind": "identifier"}, "exporters_count": {"kind": "number"}}},
|
|
289
|
+
"PF-E4021": {"severity": "error", "area": "libraries", "message": "''{alias}.{member}'' of library ''{main_targets}'' is a {kind}, not a value", "hint": null, "explanation": "The script reads a library function or method as a plain value; only exported constants, types and enums can be read that way, so call it instead.", "args": {"alias": {"kind": "identifier"}, "member": {"kind": "identifier"}, "main_targets": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["function", "method"]}}},
|
|
290
|
+
"PF-E4022": {"severity": "error", "area": "libraries", "message": "''{alias}.{member}'' of library ''{main_targets}'' is a {kind}, not a function", "hint": null, "explanation": "The script calls an exported library type or constant like a function; only exported functions and methods can be called, so use it as a type or value.", "args": {"alias": {"kind": "identifier"}, "member": {"kind": "identifier"}, "main_targets": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["const", "type"]}}},
|
|
291
|
+
"PF-E4023": {"severity": "error", "area": "libraries", "message": "import alias ''{alias}'' is used by two imports", "hint": null, "explanation": "Two imports use the same alias, so names like alias.member would be ambiguous; give each import its own alias.", "args": {"alias": {"kind": "identifier"}}},
|
|
292
|
+
"PF-E4024": {"severity": "error", "area": "libraries", "message": "Import is not supported: ''{import_path}'': its alias ''{alias}'' is a built-in namespace other than ta, math or str", "hint": null, "explanation": "The import's alias is a built-in namespace other than ta, math or str, which PineForge does not allow; choose a different alias.", "args": {"import_path": {"kind": "identifier"}, "alias": {"kind": "identifier"}}},
|
|
293
|
+
"PF-E4025": {"severity": "error", "area": "libraries", "message": "import alias ''{alias}'' is also declared as a variable, parameter or function", "hint": null, "explanation": "The import alias is also the name of a variable, parameter or function in the script, which would make the alias ambiguous; rename one of them.", "args": {"alias": {"kind": "identifier"}}},
|
|
294
|
+
"PF-E4026": {"severity": "error", "area": "libraries", "message": "method ''{name}'' of library ''{path}'' has the same receiver type as a method of {other}", "hint": null, "explanation": "Two methods share a name and receiver type, one in this library and one in the script or another library, so one would be unreachable.", "args": {"name": {"kind": "identifier"}, "path": {"kind": "identifier"}, "other": {"kind": "text"}}},
|
|
295
|
+
"PF-E4027": {"severity": "error", "area": "libraries", "message": "library ''{path}'' is //@version=5: its function reached from a request.{callee_member}() payload would run outside v5''s rules there", "hint": null, "explanation": "A function from a Pine v5 library is reached from a request.*() expression, where PineForge cannot apply v5 rules, so it is refused.", "args": {"path": {"kind": "identifier"}, "callee_member": {"kind": "identifier"}}},
|
|
296
|
+
"PF-E4028": {"severity": "error", "area": "libraries", "message": "library ''{path}'' has {found}; PineForge inlines v5 and v6 libraries only", "hint": null, "explanation": "The imported library has no //@version line or a version other than 5 or 6; PineForge inlines only version 5 and 6 libraries.", "args": {"path": {"kind": "identifier"}, "found": {"kind": "text"}}},
|
|
297
|
+
"PF-E4029": {"severity": "error", "area": "libraries", "message": "''{path}'' is not a library: it has {found}, not one library() declaration", "hint": null, "explanation": "The imported source is not a library: it must hold exactly one library() declaration, but it has none or a different kind of declaration.", "args": {"path": {"kind": "identifier"}, "found": {"kind": "text"}}},
|
|
298
|
+
"PF-E4030": {"severity": "error", "area": "libraries", "message": "library ''{path}'' has a malformed import: ''{path2}''", "hint": null, "explanation": "An import inside the library is malformed (it lacks a version or an alias), so PineForge cannot follow it.", "args": {"path": {"kind": "identifier"}, "path2": {"kind": "identifier"}}},
|
|
299
|
+
"PF-E4031": {"severity": "error", "area": "libraries", "message": "library ''{path}'' is //@version=5: {exc}", "hint": null, "explanation": "A Pine v5 library uses a v5 behaviour that PineForge does not implement, so the library is refused; the reason names the construct.", "args": {"path": {"kind": "identifier"}, "exc": {"kind": "text"}}},
|
|
300
|
+
"PF-E4032": {"severity": "error", "area": "libraries", "message": "no library sources are configured", "hint": null, "explanation": "No library sources were given to the transpiler and none are configured in the environment, so imports cannot be resolved.", "args": {}},
|
|
301
|
+
"PF-E4033": {"severity": "error", "area": "libraries", "message": "library ''{path}'' is not among the libraries passed to transpile()", "hint": null, "explanation": "The imported library was not among the library sources supplied to the transpiler, so it cannot be inlined; supply its source text.", "args": {"path": {"kind": "identifier"}}},
|
|
302
|
+
"PF-E4034": {"severity": "error", "area": "libraries", "message": "library ''{path}'' is not pinned by this script''s requests manifest ({where})", "hint": null, "explanation": "The script's requests manifest does not pin this imported library, so PineForge will not use any other source for it; add the library to the manifest.", "args": {"path": {"kind": "identifier"}, "where": {"kind": "identifier"}}},
|
|
303
|
+
"PF-E4035": {"severity": "error", "area": "libraries", "message": "library ''{path}'' is not open-source (access ''{access}''); PineForge inlines open libraries only", "hint": null, "explanation": "The library's manifest entry says it is not open-source, and PineForge inlines open libraries only.", "args": {"path": {"kind": "identifier"}, "access": {"kind": "identifier"}}},
|
|
304
|
+
"PF-E4036": {"severity": "error", "area": "libraries", "message": "library ''{path}'' has no valid sha256 in {where}", "hint": null, "explanation": "The library's entry in the requests manifest has no valid SHA-256 hash, so its source cannot be verified; fix the entry.", "args": {"path": {"kind": "identifier"}, "where": {"kind": "identifier"}}},
|
|
305
|
+
"PF-E4037": {"severity": "error", "area": "libraries", "message": "library ''{path}'' is not open-source (access ''{indexed_access}'' in libraries.json); PineForge inlines open libraries only", "hint": null, "explanation": "The library index marks this library as not open-source, and PineForge inlines open libraries only.", "args": {"path": {"kind": "identifier"}, "indexed_access": {"kind": "identifier"}}},
|
|
306
|
+
"PF-E4038": {"severity": "error", "area": "libraries", "message": "library ''{path}'' source is not UTF-8 text", "hint": null, "explanation": "The library's source is not valid UTF-8 text, so it cannot be read or inlined.", "args": {"path": {"kind": "identifier"}}},
|
|
307
|
+
"PF-E4039": {"severity": "error", "area": "libraries", "message": "library ''{path}'' source does not match its pinned sha256 {sha}... (found {found_sha}...)", "hint": null, "explanation": "The library source that was found does not match the SHA-256 hash pinned in the manifest, so PineForge refuses to use it.", "args": {"path": {"kind": "identifier"}, "sha": {"kind": "identifier"}, "found_sha": {"kind": "identifier"}}},
|
|
308
|
+
"PF-E4040": {"severity": "error", "area": "libraries", "message": "library ''{path}'' source is missing (sha256 {sha}... under ${requests_env}/{slug_dir_name}/files and ${libraries_env})", "hint": null, "explanation": "No file matching the library's pinned SHA-256 hash was found in the configured directories, so its source is missing.", "args": {"path": {"kind": "identifier"}, "sha": {"kind": "identifier"}, "requests_env": {"kind": "identifier"}, "slug_dir_name": {"kind": "identifier"}, "libraries_env": {"kind": "identifier"}}},
|
|
309
|
+
"PF-E5001": {"severity": "error", "area": "codegen", "message": "Recursive stateful callable cycle is not supported: {cycle}.", "hint": "Remove the recursive call; Pine user-defined functions cannot execute recursively.", "explanation": "Stateful functions (with TA calls, var variables or history reads) call each other in a cycle; Pine forbids recursion, so remove the recursive call.", "args": {"cycle": {"kind": "identifier"}}},
|
|
310
|
+
"PF-E5002": {"severity": "error", "area": "codegen", "message": "matrix.{meth_name} requires matrix<float>; got matrix<{elem_str}>", "hint": "Numeric-only methods are not available for matrix<int>, matrix<bool>, matrix<string>, or matrix<UDT>.", "explanation": "This matrix method works only on matrix<float>; it cannot be used on a matrix of int, bool, string or objects.", "args": {"meth_name": {"kind": "identifier"}, "elem_str": {"kind": "type"}}},
|
|
311
|
+
"PF-E5003": {"severity": "error", "area": "codegen", "message": "matrix.sort requires int, bool, string, or float element type; got {elem_name}", "hint": null, "explanation": "matrix.sort can sort only int, bool, string or float matrices, and this matrix has a different element type.", "args": {"elem_name": {"kind": "type"}}},
|
|
312
|
+
"PF-E5004": {"severity": "error", "area": "codegen", "message": "matrix.sort requires int, bool, string, or float element type; UDT matrices cannot be sorted", "hint": null, "explanation": "matrix.sort cannot sort a matrix of user-defined objects; only int, bool, string and float matrices can be sorted.", "args": {}},
|
|
313
|
+
"PF-E5005": {"severity": "error", "area": "codegen", "message": "request.security helper call history is only supported in the payload itself", "hint": null, "explanation": "Reading the history ([k]) of a call inside a function used by request.security is not supported; do it in the expression passed to request.security itself.", "args": {}},
|
|
314
|
+
"PF-E5006": {"severity": "error", "area": "codegen", "message": "Unsupported TA constructor flag ''{a}'' for {class_name}: it is neither a compile-time constant nor derived from an input, so PineForge cannot initialize the indicator with a stable per-run value.", "hint": "Use a literal, an input.*() value, or arithmetic over those for TA constructor arguments.", "explanation": "A TA indicator's boolean argument is neither a literal nor derived from an input, so PineForge cannot fix it once per run; use a literal or an input.", "args": {"a": {"kind": "identifier"}, "class_name": {"kind": "type"}}},
|
|
315
|
+
"PF-E5007": {"severity": "error", "area": "codegen", "message": "Unsupported TA constructor flag ''{a}'' for {class_name}: it is neither a compile-time constant nor derived from an input, so PineForge cannot initialize the indicator with a stable per-run value.", "hint": "Use a literal, an input.*() value, or arithmetic over those for TA lengths.", "explanation": "A TA indicator's flag argument is neither a constant nor input-derived, so PineForge cannot set it once per run; use a literal or an input-based value.", "args": {"a": {"kind": "identifier"}, "class_name": {"kind": "type"}}},
|
|
316
|
+
"PF-E5008": {"severity": "error", "area": "codegen", "message": "Unsupported TA constructor length ''{a}'' for {class_name}: it is neither a compile-time constant nor derived from an input, so PineForge cannot size the indicator buffer.", "hint": "Use a literal, an input.*() value, or arithmetic over those for TA constructor arguments.", "explanation": "A TA indicator's length is neither a constant nor derived from an input, so PineForge cannot size its buffer; use a literal, an input or arithmetic on those.", "args": {"a": {"kind": "identifier"}, "class_name": {"kind": "type"}}},
|
|
317
|
+
"PF-E5009": {"severity": "error", "area": "codegen", "message": "Unsupported TA constructor length ''{a}'' for {class_name}: it is neither a compile-time constant nor derived from an input, so PineForge cannot size the indicator buffer.", "hint": "Use a literal, an input.*() value, or arithmetic over those for TA lengths.", "explanation": "A TA indicator's length is not a literal and not derived from an input, so PineForge cannot size its buffer; use a literal, an input or arithmetic on those.", "args": {"a": {"kind": "identifier"}, "class_name": {"kind": "type"}}},
|
|
318
|
+
"PF-E5010": {"severity": "error", "area": "codegen", "message": "request.security timeframe was not resolved for registration", "hint": null, "explanation": "PineForge could not work out this request.security timeframe before the run starts, so it cannot register the request; use a constant, input or syminfo value.", "args": {}},
|
|
319
|
+
"PF-E5011": {"severity": "error", "area": "codegen", "message": "input title {spelled}is not a constant string: TradingView declares title (const string), and PineForge keys an input override by its title.", "hint": "Use a string literal, or a name bound once at global scope to one (T = \"Length\").", "explanation": "An input's title must be a constant string (a literal or a name bound once to one), because PineForge keys each input override by its title.", "args": {"spelled": {"kind": "text"}}},
|
|
320
|
+
"PF-E5012": {"severity": "error", "area": "codegen", "message": "{type_name}.copy() is unsupported because direct array field(s) {rendered} still use value storage", "hint": "Move the array outside the UDT and store a supported shared-ID map/matrix or nested UDT handle until array fields gain handle identity.", "explanation": "Copying an object whose type has array fields is unsupported, since PineForge would copy the arrays by value; keep the arrays outside the type.", "args": {"type_name": {"kind": "type"}, "rendered": {"kind": "identifier"}}},
|
|
321
|
+
"PF-E5013": {"severity": "error", "area": "codegen", "message": "array.{method} requires a numeric array", "hint": "Use numeric arrays for aggregate/statistical array functions.", "explanation": "This array function (sum, avg, stdev and similar) needs an array of numbers, and the array has another element type.", "args": {"method": {"kind": "identifier"}}},
|
|
322
|
+
"PF-E5014": {"severity": "error", "area": "codegen", "message": "{func_name}() with bars_back / timeframe_bars_back inside request.security is not supported", "hint": "Read {func_name}() with its offset outside request.security().", "explanation": "time() or time_close() with a bars-back offset is not supported inside request.security; read the offset time outside the request.", "args": {"func_name": {"kind": "identifier"}}},
|
|
323
|
+
"PF-E5015": {"severity": "error", "area": "codegen", "message": "array.copy: expected exactly one receiver ''id''", "hint": "Use array.copy(source) or array.copy(id=source).", "explanation": "array.copy takes exactly one array, either positionally or as id=; this call does not match that.", "args": {}},
|
|
324
|
+
"PF-E5016": {"severity": "error", "area": "codegen", "message": "map.{method}: unknown keyword argument ''{name}''", "hint": "Expected map.{method}({param_names}).", "explanation": "A map function was called with a keyword argument it does not have; use the parameter names it expects.", "args": {"method": {"kind": "identifier"}, "name": {"kind": "identifier"}, "param_names": {"kind": "identifier"}}},
|
|
325
|
+
"PF-E5017": {"severity": "error", "area": "codegen", "message": "map.{method}: unknown keyword argument ''{name}''", "hint": "Use ''id2='' for the source map. Expected map.{method}({param_names}).", "explanation": "map.put_all was called with from=; its source map parameter is named id2, so use id2= or pass the map by position.", "args": {"method": {"kind": "identifier"}, "name": {"kind": "identifier"}, "param_names": {"kind": "identifier"}}},
|
|
326
|
+
"PF-E5018": {"severity": "error", "area": "codegen", "message": "map.{method}: too many positional arguments (expected {param_names_count}, got {args_count})", "hint": "Expected map.{method}({param_names}).", "explanation": "A map function got more positional arguments than it accepts; remove the extra ones.", "args": {"method": {"kind": "identifier"}, "param_names_count": {"kind": "number"}, "args_count": {"kind": "number"}, "param_names": {"kind": "identifier"}}},
|
|
327
|
+
"PF-E5019": {"severity": "error", "area": "codegen", "message": "map.{method}: argument ''{name}'' passed both positionally and by keyword", "hint": "Expected map.{method}({param_names}); bind each argument once.", "explanation": "A map function argument is given both by position and by keyword; pass each argument only once.", "args": {"method": {"kind": "identifier"}, "name": {"kind": "identifier"}, "param_names": {"kind": "identifier"}}},
|
|
328
|
+
"PF-E5020": {"severity": "error", "area": "codegen", "message": "map.{method}: missing required argument ''{missing}''", "hint": "Expected map.{method}({param_names}).", "explanation": "A required argument of a map function is missing from the call; pass it by position or by keyword.", "args": {"method": {"kind": "identifier"}, "missing": {"kind": "identifier"}, "param_names": {"kind": "identifier"}}},
|
|
329
|
+
"PF-E5021": {"severity": "error", "area": "codegen", "message": "map.{method}: keyword arguments are not supported for this functional call form", "hint": "Use the established positional form: map.{method}({param_names}).", "explanation": "Keyword arguments are not supported in this function-style map call; pass the arguments by position.", "args": {"method": {"kind": "identifier"}, "param_names": {"kind": "identifier"}}},
|
|
330
|
+
"PF-E5022": {"severity": "error", "area": "codegen", "message": "map.{method}: keyword arguments are not supported for this receiver-method call form", "hint": "Use the established positional form: map.{method}({param_names}).", "explanation": "Keyword arguments are not supported in this method-style map call; pass the arguments by position.", "args": {"method": {"kind": "identifier"}, "param_names": {"kind": "identifier"}}},
|
|
331
|
+
"PF-E5023": {"severity": "error", "area": "codegen", "message": "an array a call returns is passed to parameter ''{param}'' of ''{func_info_name}'', which takes the array itself: PineForge would pass a copy of it", "hint": "TradingView passes the array a function returns as itself, so the callee''s changes to it reach every variable holding it; pass a variable holding the array instead.", "explanation": "An array returned by a function call is passed to a parameter that can change it in place; PineForge would pass a copy, so store it in a variable first.", "args": {"param": {"kind": "identifier"}, "func_info_name": {"kind": "identifier"}}},
|
|
332
|
+
"PF-E5024": {"severity": "error", "area": "codegen", "message": "{recv_spec_name}.copy() expects no arguments", "hint": "Call copy() on the UDT object without arguments.", "explanation": "copy() on an object takes no arguments; call it as object.copy().", "args": {"recv_spec_name": {"kind": "type"}}},
|
|
333
|
+
"PF-E5025": {"severity": "error", "area": "codegen", "message": "matrix.{meth_raw}: wrong number of arguments", "hint": "Check Pine v6 matrix method signature (positional vs keyword).", "explanation": "A matrix method call has the wrong number of arguments; check the Pine v6 matrix method signature and whether arguments are positional or keyword.", "args": {"meth_raw": {"kind": "identifier"}}},
|
|
334
|
+
"PF-E5026": {"severity": "error", "area": "codegen", "message": "matrix.{func_name}: wrong number of arguments", "hint": "Check Pine v6 matrix method signature (positional vs keyword).", "explanation": "A matrix method call has the wrong number of arguments; check the Pine v6 matrix method signature and whether arguments are positional or keyword.", "args": {"func_name": {"kind": "identifier"}}},
|
|
335
|
+
"PF-E5027": {"severity": "error", "area": "codegen", "message": "timestamp(dateString): could not parse ''{args}''.", "hint": "Supported forms: ISO-8601 (\"2025-01-01[THH:MM:SS][±HH:MM]\") and \"DD MMM YYYY [hh:mm[:ss]] [±HHMM]\" / \"MMM DD YYYY ...\"; no time zone = GMT+0.", "explanation": "timestamp() got a date string PineForge cannot parse; use an ISO-8601 or 'DD MMM YYYY' form, or pass year, month and day numbers.", "args": {"args": {"kind": "identifier"}}},
|
|
336
|
+
"PF-E5028": {"severity": "error", "area": "codegen", "message": "timestamp(dateString) requires a literal string in PineForge (Pine v6 dateString is a const string).", "hint": "Use a string literal, or timestamp(year, month, day[, hour, minute, second]).", "explanation": "timestamp(dateString) needs a string literal, because PineForge parses the date at transpile time; use a literal or numeric arguments.", "args": {}},
|
|
337
|
+
"PF-E5029": {"severity": "error", "area": "codegen", "message": "timestamp(timezone, ...) requires year, month, and day arguments.", "hint": "Pine v6 signature: timestamp(timezone, year, month, day[, hour, minute, second]).", "explanation": "timestamp() with a timezone first needs year, month and day after it; add the missing arguments.", "args": {}},
|
|
338
|
+
"PF-E5030": {"severity": "error", "area": "codegen", "message": "timestamp(...) with {merged_count} argument(s) is not supported — year, month, and day are required.", "hint": "Pine v6 signature: timestamp(year, month, day[, hour, minute, second]); the dateString overload is not supported in PineForge.", "explanation": "timestamp() with numeric arguments needs at least year, month and day; add the missing ones.", "args": {"merged_count": {"kind": "number"}}},
|
|
339
|
+
"PF-E5031": {"severity": "error", "area": "codegen", "message": "matrix.{func_name} receiver must be a variable reference", "hint": null, "explanation": "This numeric-only matrix function needs its matrix as a plain variable so PineForge can check the element type; assign the matrix to a variable first.", "args": {"func_name": {"kind": "identifier"}}},
|
|
340
|
+
"PF-E5032": {"severity": "error", "area": "codegen", "message": "matrix.{func_name}: receiver ''{recv_name}'' is not a known matrix variable", "hint": null, "explanation": "The matrix function's first argument is a variable PineForge does not know as a matrix, so it cannot check its element type.", "args": {"func_name": {"kind": "identifier"}, "recv_name": {"kind": "identifier"}}},
|
|
341
|
+
"PF-E5033": {"severity": "error", "area": "codegen", "message": "{namespace}.copy(...) expects exactly one object argument", "hint": "Prefer the canonical object.copy() form.", "explanation": "Type.copy(...) takes exactly one object of that type; pass one object, or write object.copy().", "args": {"namespace": {"kind": "type"}}},
|
|
342
|
+
"PF-E5034": {"severity": "error", "area": "codegen", "message": "Unknown function ''{func_name}(...)'' — not a PineForge builtin or a user-defined function.", "hint": "Check the spelling; the function may not be supported by PineForge, or needs its namespace (e.g. math./str.).", "explanation": "The called function is neither a PineForge built-in nor defined in the script; check the spelling or add its namespace, such as math. or str.", "args": {"func_name": {"kind": "identifier"}}},
|
|
343
|
+
"PF-E5035": {"severity": "error", "area": "codegen", "message": "Unknown call ''{namespace}.{func_name}(...)'' — ''{namespace}'' is not a PineForge-supported namespace or a user-defined type.", "hint": "Check the spelling; this namespace may not be supported by PineForge.", "explanation": "The call's namespace is neither a supported PineForge namespace nor a user-defined type; check the spelling.", "args": {"namespace": {"kind": "identifier"}, "func_name": {"kind": "identifier"}}},
|
|
344
|
+
"PF-E5036": {"severity": "error", "area": "codegen", "message": "Unknown variable ''{name}'' — not a PineForge builtin or a declared variable.", "hint": null, "explanation": "The script reads a name that is neither a PineForge built-in nor a declared variable; check the spelling or declare it first.", "args": {"name": {"kind": "identifier"}}},
|
|
345
|
+
"PF-E5037": {"severity": "error", "area": "codegen", "message": "Unknown variable ''{name}'' — not a PineForge builtin or a declared variable.", "hint": "{hint}", "explanation": "The script reads a realtime-only built-in variable, which has no value in a batch backtest; remove it or compute the value another way.", "args": {"name": {"kind": "identifier"}, "hint": {"kind": "text"}}},
|
|
346
|
+
"PF-E5038": {"severity": "error", "area": "codegen", "message": "ta.{member} property read could not be bound to a TA call site.", "hint": "Use the function form ta.{member}(...) instead of the bare property read.", "explanation": "A bare ta.<name> read could not be tied to a calculation; call the function form ta.name(...) instead.", "args": {"member": {"kind": "identifier"}}},
|
|
347
|
+
"PF-E5039": {"severity": "error", "area": "codegen", "message": "ta.{member} is not readable as a bare property in PineForge.", "hint": "Call the function form ta.{member}(...) with its arguments instead.", "explanation": "That ta member is not a variable in PineForge, so it cannot be read without parentheses; call it as a function with its arguments.", "args": {"member": {"kind": "identifier"}}},
|
|
348
|
+
"PF-E5040": {"severity": "error", "area": "codegen", "message": "{op} na on a {kind} reference: TradingView refuses a comparison with na (CE10187: \"Cannot compare a value to \\\"na\\\" directly\").", "hint": "Test the reference with na(...).", "explanation": "Comparing an object or drawing reference with na using == or != is rejected, as in TradingView; test it with na(...) instead.", "args": {"op": {"kind": "keyword"}, "kind": {"kind": "type"}}},
|
|
349
|
+
"PF-E5041": {"severity": "error", "area": "codegen", "message": "{op} on a {kind} reference: TradingView compares only line and label references (CE10123: \"Cannot call ''operator {op}''\" with an argument of the {kind} type).", "hint": "Compare the fields or getter values the objects hold, or test na(...).", "explanation": "PineForge refuses == and != on object or drawing references other than line or label of the same kind, as TradingView does; compare fields or test na().", "args": {"op": {"kind": "keyword"}, "kind": {"kind": "type"}}},
|
|
350
|
+
"PF-E5042": {"severity": "error", "area": "codegen", "message": "library ''{library}'' is //@version=5: ''{op}'' of a bool reads v5''s third bool state (na), which PineForge''s two-state bool does not keep", "hint": null, "explanation": "A //@version=5 library compares a bool with == or !=, but v5 bools can be na and PineForge's two-state bool cannot, so it refuses the library.", "args": {"library": {"kind": "identifier"}, "op": {"kind": "keyword"}}},
|
|
351
|
+
"PF-E5043": {"severity": "error", "area": "codegen", "message": "library ''{library}'' is //@version=5: str.format() of a bool reads v5''s third bool state (na), which PineForge''s two-state bool does not keep", "hint": null, "explanation": "A //@version=5 library passes a bool to str.format(), but v5 bools can be na and PineForge's two-state bool cannot, so it refuses the call.", "args": {"library": {"kind": "identifier"}}},
|
|
352
|
+
"PF-E5044": {"severity": "error", "area": "codegen", "message": "library ''{library}'' is //@version=5: str.tostring() of a bool reads v5''s third bool state (na), which PineForge''s two-state bool does not keep", "hint": null, "explanation": "A //@version=5 library passes a bool to str.tostring(), but v5 bools can be na and PineForge's two-state bool cannot, so it refuses the call.", "args": {"library": {"kind": "identifier"}}},
|
|
353
|
+
"PF-E5045": {"severity": "error", "area": "codegen", "message": "library ''{library}'' is //@version=5: string() of a bool reads v5''s third bool state (na), which PineForge''s two-state bool does not keep", "hint": null, "explanation": "A //@version=5 library passes a bool to string(), but v5 bools can be na and PineForge's two-state bool cannot, so it refuses the call.", "args": {"library": {"kind": "identifier"}}},
|
|
354
|
+
"PF-E5046": {"severity": "error", "area": "codegen", "message": "library ''{library}'' is //@version=5: {func_name}() of a bool reads v5''s third bool state (na), which PineForge''s two-state bool does not keep", "hint": null, "explanation": "A //@version=5 library tests a bool with na(), nz() or fixnan(), but v5 bools can be na and PineForge's two-state bool cannot, so it refuses the call.", "args": {"library": {"kind": "identifier"}, "func_name": {"kind": "identifier"}}},
|
|
355
|
+
"PF-E5047": {"severity": "error", "area": "codegen", "message": "session.{flag}[...] cannot be read here: PineForge keeps a session flag''s history on the requested clock only for a read the request.security expression reaches through its own operators, not through a call''s argument, a function or a variable.", "hint": null, "explanation": "A session flag history read inside request.security works only when the expression's own operators reach it, not via a call argument, function or variable.", "args": {"flag": {"kind": "identifier"}}},
|
|
356
|
+
"PF-E5048": {"severity": "error", "area": "codegen", "message": "session.{flag}[...] cannot be read in {owner}(), {why}: PineForge keeps a session flag''s history in a function by each of its call sites, and cannot tell this one apart.", "hint": null, "explanation": "A session flag history read is in a function PineForge cannot split per call site: a method, or one a method, request.security or UDT field default calls.", "args": {"flag": {"kind": "identifier"}, "owner": {"kind": "identifier"}, "why": {"kind": "vocab", "values": ["a method, whose calls PineForge cannot always tell apart", "which a UDT field default calls once for every new()", "which a method calls", "which a request.security expression evaluates on the requested clock"]}}},
|
|
357
|
+
"PF-E5049": {"severity": "error", "area": "codegen", "message": "session.{flag}[...] is not supported here: PineForge keeps a session flag''s history for the script''s top level, a function body and a request.security expression that reads it.", "hint": null, "explanation": "A session flag history read is supported only at the top level, in a function body or in a request.security expression, and this read is none of those.", "args": {"flag": {"kind": "identifier"}}},
|
|
358
|
+
"PF-E5050": {"severity": "error", "area": "codegen", "message": "History of the chart.point {object_name} is not supported in PineForge when the script changes its fields: PineForge holds a chart.point as a value, where TradingView''s history reads the point object as it is now.", "hint": "Keep the field in a variable of its own and read that variable''s history, or build a new point instead of changing a field.", "explanation": "History of a chart.point variable whose fields the script changes is refused because PineForge holds points as values; use a separate variable or build a new point.", "args": {"object_name": {"kind": "identifier"}}},
|
|
359
|
+
"PF-E5051": {"severity": "error", "area": "codegen", "message": "matrix ''{target_label}'' element type mismatch on reassignment: expected {target_type}, got {rhs_type}", "hint": null, "explanation": "A matrix variable is reassigned a matrix with a different element type, which Pine forbids; make the new matrix's element type match the variable's.", "args": {"target_label": {"kind": "identifier"}, "target_type": {"kind": "type"}, "rhs_type": {"kind": "type"}}},
|
|
360
|
+
"PF-E6001": {"severity": "error", "area": "collection-history", "message": "matrix.{method}: wrong number of arguments", "hint": "Check Pine v6 matrix method signature (positional vs keyword).", "explanation": "A matrix method call has the wrong number of arguments; check the Pine v6 matrix method signature and whether arguments are positional or keyword.", "args": {"method": {"kind": "identifier"}}},
|
|
361
|
+
"PF-E6002": {"severity": "error", "area": "collection-history", "message": "{label} := ...: an assignment to the history-referencing operator is not supported in PineForge.", "hint": null, "explanation": "TradingView refuses an assignment to a history reference; assign the variable itself.", "args": {"label": {"kind": "text"}}},
|
|
362
|
+
"PF-E6003": {"severity": "error", "area": "collection-history", "message": "{label} is a {kind}, which TradingView refuses for operator {op} (CE10123).", "hint": null, "explanation": "An array or matrix history read such as a[1] is an operand of an operator, which TradingView refuses; read an element or the size and use that instead.", "args": {"label": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}, "op": {"kind": "keyword"}}},
|
|
363
|
+
"PF-E6004": {"severity": "error", "area": "collection-history", "message": "{label} is an {kind}, which TradingView refuses for operator {op} (CE10123).", "hint": null, "explanation": "An array or matrix history read such as a[1] is an operand of an operator, which TradingView refuses; read an element or the size and use that instead.", "args": {"label": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}, "op": {"kind": "keyword"}}},
|
|
364
|
+
"PF-E6005": {"severity": "error", "area": "collection-history", "message": "{label} is a {kind}, which TradingView refuses as the condition of ?: (CE10123).", "hint": null, "explanation": "An array or matrix history read is the condition of a ?: expression, which TradingView refuses; test an element or the size instead.", "args": {"label": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}}},
|
|
365
|
+
"PF-E6006": {"severity": "error", "area": "collection-history", "message": "{label} is an {kind}, which TradingView refuses as the condition of ?: (CE10123).", "hint": null, "explanation": "An array or matrix history read is the condition of a ?: expression, which TradingView refuses; test an element or the size instead.", "args": {"label": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}}},
|
|
366
|
+
"PF-E6007": {"severity": "error", "area": "collection-history", "message": "{label} is a {kind}, which TradingView refuses as the condition of an if statement (CE10101).", "hint": null, "explanation": "An array or matrix history read is the condition of an if statement, which TradingView refuses; test an element or the size instead.", "args": {"label": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}}},
|
|
367
|
+
"PF-E6008": {"severity": "error", "area": "collection-history", "message": "{label} is a {kind}, which TradingView refuses as the condition of an while statement (CE10101).", "hint": null, "explanation": "An array or matrix history read is the condition of a while loop, which TradingView refuses; test an element or the size instead.", "args": {"label": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}}},
|
|
368
|
+
"PF-E6009": {"severity": "error", "area": "collection-history", "message": "{label} is an {kind}, which TradingView refuses as the condition of an if statement (CE10101).", "hint": null, "explanation": "An array or matrix history read is the condition of an if statement, which TradingView refuses; test an element or the size instead.", "args": {"label": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}}},
|
|
369
|
+
"PF-E6010": {"severity": "error", "area": "collection-history", "message": "{label} is an {kind}, which TradingView refuses as the condition of an while statement (CE10101).", "hint": null, "explanation": "An array or matrix history read is the condition of a while loop, which TradingView refuses; test an element or the size instead.", "args": {"label": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}}},
|
|
370
|
+
"PF-E6011": {"severity": "error", "area": "collection-history", "message": "({label})[...]: the history of a {kind}''s history is not supported in PineForge.", "hint": null, "explanation": "The history of a collection's history is not kept by PineForge.", "args": {"label": {"kind": "text"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}}},
|
|
371
|
+
"PF-E6012": {"severity": "error", "area": "collection-history", "message": "({label})[...]: the history of an {kind}''s history is not supported in PineForge.", "hint": null, "explanation": "The history of a collection's history is not kept by PineForge.", "args": {"label": {"kind": "text"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}}},
|
|
372
|
+
"PF-E6013": {"severity": "error", "area": "collection-history", "message": "{label} is not supported in PineForge here.", "hint": null, "explanation": "A history read bound to a variable or passed to a function is used there in a way PineForge cannot lower; use it only with built-in array or matrix functions.", "args": {"label": {"kind": "identifier"}}},
|
|
373
|
+
"PF-E6014": {"severity": "error", "area": "collection-history", "message": "{label}.{method}: a {kind} has no fields.", "hint": null, "explanation": "An array or a matrix has no fields; a field read after its history reference is refused.", "args": {"label": {"kind": "text"}, "method": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}}},
|
|
374
|
+
"PF-E6015": {"severity": "error", "area": "collection-history", "message": "{label}.{method}: an {kind} has no fields.", "hint": null, "explanation": "An array or a matrix has no fields; a field read after its history reference is refused.", "args": {"label": {"kind": "text"}, "method": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}}},
|
|
375
|
+
"PF-E6016": {"severity": "error", "area": "collection-history", "message": "{label}.{method}(): no array or matrix method of that name.", "hint": null, "explanation": "No array or matrix method has this name, so the call on the collection's history is refused.", "args": {"label": {"kind": "text"}, "method": {"kind": "identifier"}}},
|
|
376
|
+
"PF-E6017": {"severity": "error", "area": "collection-history", "message": "matrix.sum of {label} is not supported in PineForge: the matrix it returns does not compile.", "hint": null, "explanation": "matrix.sum of a matrix's history returns a matrix that never compiled in PineForge, so it is refused.", "args": {"label": {"kind": "text"}}},
|
|
377
|
+
"PF-E6018": {"severity": "error", "area": "collection-history", "message": "{label} is a {kind}, which TradingView refuses as an argument of {name} (CE10123).", "hint": null, "explanation": "An array or matrix history read is passed to a built-in function that takes only plain numbers, strings or conditions, which TradingView refuses; pass an element.", "args": {"label": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}, "name": {"kind": "identifier"}}},
|
|
378
|
+
"PF-E6019": {"severity": "error", "area": "collection-history", "message": "{label} is an {kind}, which TradingView refuses as an argument of {name} (CE10123).", "hint": null, "explanation": "An array or matrix history read is passed to a built-in function that takes only plain numbers, strings or conditions, which TradingView refuses; pass an element.", "args": {"label": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}, "name": {"kind": "identifier"}}},
|
|
379
|
+
"PF-E6020": {"severity": "error", "area": "collection-history", "message": "{label} as an argument of {name} is not supported in PineForge.", "hint": null, "explanation": "PineForge would hand over a changeable copy of the collection's history here, where TradingView passes the read-only history, so the use is refused.", "args": {"label": {"kind": "text"}, "name": {"kind": "identifier"}}},
|
|
380
|
+
"PF-E6021": {"severity": "error", "area": "collection-history", "message": "{label} is a {kind}, which TradingView refuses as an element of array.from (CE10122).", "hint": null, "explanation": "An array or matrix history read is used as an element of array.from(), which TradingView refuses; pass its elements instead.", "args": {"label": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}}},
|
|
381
|
+
"PF-E6022": {"severity": "error", "area": "collection-history", "message": "{label} is an {kind}, which TradingView refuses as an element of array.from (CE10122).", "hint": null, "explanation": "An array or matrix history read is used as an element of array.from(), which TradingView refuses; pass its elements instead.", "args": {"label": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}}},
|
|
382
|
+
"PF-E6023": {"severity": "error", "area": "collection-history", "message": "{label} is a {kind}, which TradingView refuses as an argument of {namespace}.{member} (CE10123).", "hint": null, "explanation": "An array or matrix history read is passed to a built-in namespace function that takes plain values, which TradingView refuses; pass an element or the size instead.", "args": {"label": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}, "namespace": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
383
|
+
"PF-E6024": {"severity": "error", "area": "collection-history", "message": "{label} is an {kind}, which TradingView refuses as an argument of {namespace}.{member} (CE10123).", "hint": null, "explanation": "An array or matrix history read is passed to a built-in namespace function that takes plain values, which TradingView refuses; pass an element or the size instead.", "args": {"label": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}, "namespace": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
384
|
+
"PF-E6025": {"severity": "error", "area": "collection-history", "message": "{label} as a field of a new {namespace} is not supported in PineForge: the field would hold a changeable copy, where TradingView''s holds the read-only history.", "hint": null, "explanation": "PineForge would hand over a changeable copy of the collection's history here, where TradingView passes the read-only history, so the use is refused.", "args": {"label": {"kind": "text"}, "namespace": {"kind": "identifier"}}},
|
|
385
|
+
"PF-E6026": {"severity": "error", "area": "collection-history", "message": "{label} is a {kind}, which TradingView refuses as an argument of str.{member} (CE10123).", "hint": null, "explanation": "An array or matrix history read is passed to a str function that takes a plain value, which TradingView refuses; pass an element or the size instead.", "args": {"label": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}, "member": {"kind": "identifier"}}},
|
|
386
|
+
"PF-E6027": {"severity": "error", "area": "collection-history", "message": "{label} is an {kind}, which TradingView refuses as an argument of str.{member} (CE10123).", "hint": null, "explanation": "An array or matrix history read is passed to a str function that takes a plain value, which TradingView refuses; pass an element or the size instead.", "args": {"label": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}, "member": {"kind": "identifier"}}},
|
|
387
|
+
"PF-E6028": {"severity": "error", "area": "collection-history", "message": "{label} is a {kind}, which TradingView refuses as the message of log.{member} (CE10123).", "hint": null, "explanation": "An array or matrix history read is used as the message of a log call, which TradingView refuses; log an element or a string built from it instead.", "args": {"label": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}, "member": {"kind": "identifier"}}},
|
|
388
|
+
"PF-E6029": {"severity": "error", "area": "collection-history", "message": "{label} is an {kind}, which TradingView refuses as the message of log.{member} (CE10123).", "hint": null, "explanation": "An array or matrix history read is used as the message of a log call, which TradingView refuses; log an element or a string built from it instead.", "args": {"label": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}, "member": {"kind": "identifier"}}},
|
|
389
|
+
"PF-E6030": {"severity": "error", "area": "collection-history", "message": "{label} as an argument of the overloaded method {member} is not supported in PineForge.", "hint": null, "explanation": "PineForge would hand over a changeable copy of the collection's history here, where TradingView passes the read-only history, so the use is refused.", "args": {"label": {"kind": "text"}, "member": {"kind": "identifier"}}},
|
|
390
|
+
"PF-E6031": {"severity": "error", "area": "collection-history", "message": "{label} is a {kind}, which TradingView refuses as a value of {member}() (CE10123).", "hint": null, "explanation": "An array or matrix history read is passed as a plain value, not as the collection, to an array or matrix method, which TradingView refuses.", "args": {"label": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}, "member": {"kind": "identifier"}}},
|
|
391
|
+
"PF-E6032": {"severity": "error", "area": "collection-history", "message": "{label} is an {kind}, which TradingView refuses as a value of {member}() (CE10123).", "hint": null, "explanation": "An array or matrix history read is passed as a plain value, not as the collection, to an array or matrix method, which TradingView refuses.", "args": {"label": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}, "member": {"kind": "identifier"}}},
|
|
392
|
+
"PF-E6033": {"severity": "error", "area": "collection-history", "message": "{label} as an argument of {function}.{member} is not supported in PineForge.", "hint": null, "explanation": "PineForge would hand over a changeable copy of the collection's history here, where TradingView passes the read-only history, so the use is refused.", "args": {"label": {"kind": "text"}, "function": {"kind": "text"}, "member": {"kind": "identifier"}}},
|
|
393
|
+
"PF-E6034": {"severity": "error", "area": "collection-history", "message": "{label} is a {kind}, which TradingView refuses as a value of {namespace}.{member} (CE10123).", "hint": null, "explanation": "An array or matrix history read is passed as a plain value, not as the collection, to an array or matrix function, which TradingView refuses.", "args": {"label": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}, "namespace": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
394
|
+
"PF-E6035": {"severity": "error", "area": "collection-history", "message": "{label} is an {kind}, which TradingView refuses as a value of {namespace}.{member} (CE10123).", "hint": null, "explanation": "An array or matrix history read is passed as a plain value, not as the collection, to an array or matrix function, which TradingView refuses.", "args": {"label": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}, "namespace": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
395
|
+
"PF-E6036": {"severity": "error", "area": "collection-history", "message": "{label} is an array of colors, which TradingView refuses for log.{member} (CE10122).", "hint": null, "explanation": "A history read of an array of colors is a format argument of a log call, which TradingView refuses; log its elements instead.", "args": {"label": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
396
|
+
"PF-E6037": {"severity": "error", "area": "collection-history", "message": "{label} is an array of colors, which TradingView refuses for log.{member} (CE10123).", "hint": null, "explanation": "A history read of an array of colors is passed to a log call, which TradingView refuses; log its elements instead.", "args": {"label": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
397
|
+
"PF-E6038": {"severity": "error", "area": "collection-history", "message": "{label} is an array of colors, which TradingView refuses for str.format (CE10122).", "hint": null, "explanation": "A history read of an array of colors is a format argument of str.format, which TradingView refuses; format its elements instead.", "args": {"label": {"kind": "identifier"}}},
|
|
398
|
+
"PF-E6039": {"severity": "error", "area": "collection-history", "message": "{label} is an array of colors, which TradingView refuses for str.format (CE10123).", "hint": null, "explanation": "A history read of an array of colors is passed to str.format, which TradingView refuses; format its elements instead.", "args": {"label": {"kind": "identifier"}}},
|
|
399
|
+
"PF-E6040": {"severity": "error", "area": "collection-history", "message": "{label} is an array of colors, which TradingView refuses for str.tostring (CE10122).", "hint": null, "explanation": "A history read of an array of colors is passed to str.tostring, which TradingView refuses; convert its elements instead.", "args": {"label": {"kind": "identifier"}}},
|
|
400
|
+
"PF-E6041": {"severity": "error", "area": "collection-history", "message": "{label} is an array of colors, which TradingView refuses for str.tostring (CE10123).", "hint": null, "explanation": "A history read of an array of colors is passed to str.tostring, which TradingView refuses; convert its elements instead.", "args": {"label": {"kind": "identifier"}}},
|
|
401
|
+
"PF-E6042": {"severity": "error", "area": "collection-history", "message": "{label} is an array of objects, which TradingView refuses for log.{member} (CE10122).", "hint": null, "explanation": "A history read of an array of objects is a format argument of a log call, which TradingView refuses; log fields of its elements instead.", "args": {"label": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
402
|
+
"PF-E6043": {"severity": "error", "area": "collection-history", "message": "{label} is an array of objects, which TradingView refuses for log.{member} (CE10123).", "hint": null, "explanation": "A history read of an array of objects is passed to a log call, which TradingView refuses; log fields of its elements instead.", "args": {"label": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
403
|
+
"PF-E6044": {"severity": "error", "area": "collection-history", "message": "{label} is an array of objects, which TradingView refuses for str.format (CE10122).", "hint": null, "explanation": "A history read of an array of objects is a format argument of str.format, which TradingView refuses; format fields of its elements instead.", "args": {"label": {"kind": "identifier"}}},
|
|
404
|
+
"PF-E6045": {"severity": "error", "area": "collection-history", "message": "{label} is an array of objects, which TradingView refuses for str.format (CE10123).", "hint": null, "explanation": "A history read of an array of objects is passed to str.format, which TradingView refuses; format fields of its elements instead.", "args": {"label": {"kind": "identifier"}}},
|
|
405
|
+
"PF-E6046": {"severity": "error", "area": "collection-history", "message": "{label} is an array of objects, which TradingView refuses for str.tostring (CE10122).", "hint": null, "explanation": "A history read of an array of objects is passed to str.tostring, which TradingView refuses; convert fields of its elements instead.", "args": {"label": {"kind": "identifier"}}},
|
|
406
|
+
"PF-E6047": {"severity": "error", "area": "collection-history", "message": "{label} is an array of objects, which TradingView refuses for str.tostring (CE10123).", "hint": null, "explanation": "A history read of an array of objects is passed to str.tostring, which TradingView refuses; convert fields of its elements instead.", "args": {"label": {"kind": "identifier"}}},
|
|
407
|
+
"PF-E6048": {"severity": "error", "area": "collection-history", "message": "{label} is a {kind}, which TradingView refuses for the {type_hint} variable {name} (CE10173).", "hint": null, "explanation": "An array or matrix history read is assigned to a variable declared with a scalar type, which TradingView refuses; assign an element or declare a collection type.", "args": {"label": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}, "type_hint": {"kind": "type"}, "name": {"kind": "identifier"}}},
|
|
408
|
+
"PF-E6049": {"severity": "error", "area": "collection-history", "message": "{label} is an {kind}, which TradingView refuses for the {type_hint} variable {name} (CE10173).", "hint": null, "explanation": "An array or matrix history read is assigned to a variable declared with a scalar type, which TradingView refuses; assign an element or declare a collection type.", "args": {"label": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}, "type_hint": {"kind": "type"}, "name": {"kind": "identifier"}}},
|
|
409
|
+
"PF-E6050": {"severity": "error", "area": "collection-history", "message": "{label} is a {kind}, which TradingView refuses for the {field_type} field {member} (CE10173).", "hint": null, "explanation": "An array or matrix history read is assigned to an object field of a scalar type, which TradingView refuses; assign an element or change the field's type.", "args": {"label": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}, "field_type": {"kind": "type"}, "member": {"kind": "identifier"}}},
|
|
410
|
+
"PF-E6051": {"severity": "error", "area": "collection-history", "message": "{label} is an {kind}, which TradingView refuses for the {field_type} field {member} (CE10173).", "hint": null, "explanation": "An array or matrix history read is assigned to an object field of a scalar type, which TradingView refuses; assign an element or change the field's type.", "args": {"label": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}, "field_type": {"kind": "type"}, "member": {"kind": "identifier"}}},
|
|
411
|
+
"PF-E6052": {"severity": "error", "area": "collection-history", "message": "{label} assigned to a field is not supported in PineForge: the field would hold a changeable copy, where TradingView''s holds the read-only history.", "hint": null, "explanation": "PineForge would hand over a changeable copy of the collection's history here, where TradingView passes the read-only history, so the use is refused.", "args": {"label": {"kind": "text"}}},
|
|
412
|
+
"PF-E6053": {"severity": "error", "area": "collection-history", "message": "{label} is a {kind}, which TradingView refuses for the variable {name} of another type (CE10173).", "hint": null, "explanation": "An array or matrix history read is assigned to an existing variable of another type, which TradingView refuses; use a variable of the matching collection type.", "args": {"label": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}, "name": {"kind": "identifier"}}},
|
|
413
|
+
"PF-E6054": {"severity": "error", "area": "collection-history", "message": "{label} is an {kind}, which TradingView refuses for the variable {name} of another type (CE10173).", "hint": null, "explanation": "An array or matrix history read is assigned to an existing variable of another type, which TradingView refuses; use a variable of the matching collection type.", "args": {"label": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}, "name": {"kind": "identifier"}}},
|
|
414
|
+
"PF-E6055": {"severity": "error", "area": "collection-history", "message": "{label} assigned to {name} is not supported in PineForge here.", "hint": null, "explanation": "A history read bound to a variable or passed to a function is used there in a way PineForge cannot lower; use it only with built-in array or matrix functions.", "args": {"label": {"kind": "identifier"}, "name": {"kind": "identifier"}}},
|
|
415
|
+
"PF-E6056": {"severity": "error", "area": "collection-history", "message": "{label} as a statement: TradingView reads it as a declaration and refuses it (CE10009, \"Extraneous input\").", "hint": null, "explanation": "An array or matrix history read written alone as a top-level statement is refused because TradingView reads it as a declaration; remove it or bind it to a variable.", "args": {"label": {"kind": "identifier"}}},
|
|
416
|
+
"PF-E6057": {"severity": "error", "area": "collection-history", "message": "{label} in a tuple is not supported in PineForge.", "hint": null, "explanation": "A history read bound to a variable or passed to a function is used there in a way PineForge cannot lower; use it only with built-in array or matrix functions.", "args": {"label": {"kind": "identifier"}}},
|
|
417
|
+
"PF-E6058": {"severity": "error", "area": "collection-history", "message": "{label}.slice() is not supported in PineForge here.", "hint": null, "explanation": "A slice of an array's history is used in a way PineForge cannot lower; simplify the expression or copy the array first.", "args": {"label": {"kind": "identifier"}}},
|
|
418
|
+
"PF-E6059": {"severity": "error", "area": "collection-history", "message": "{label} is bound where the script reads it both as a {kind} and through na() or str.tostring(): that is not supported in PineForge, which holds no na {kind} and does not render one.", "hint": null, "explanation": "A variable bound to an array or matrix history is read both as a collection and through na() or str.tostring(); PineForge has no na collection, so it refuses this.", "args": {"label": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}}},
|
|
419
|
+
"PF-E6060": {"severity": "error", "area": "collection-history", "message": "{label} is bound where the script reads it both as an {kind} and through na() or str.tostring(): that is not supported in PineForge, which holds no na {kind} and does not render one.", "hint": null, "explanation": "A variable bound to an array or matrix history is read both as a collection and through na() or str.tostring(); PineForge has no na collection, so it refuses this.", "args": {"label": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}}},
|
|
420
|
+
"PF-E6061": {"severity": "error", "area": "collection-history", "message": "{label} is not supported in PineForge here: the history of a matrix is supported as the receiver or an argument of a matrix function, na(), and the value of a variable or a function''s argument that reads it.", "hint": null, "explanation": "A matrix history is supported only as a matrix function's receiver or argument, in na(), or via a variable or function argument that reads it; this use is not.", "args": {"label": {"kind": "identifier"}}},
|
|
421
|
+
"PF-E6062": {"severity": "error", "area": "collection-history", "message": "{label} inside a request.security expression is not supported in PineForge: TradingView reads the copies the requested timeframe''s bars left, which PineForge does not keep.", "hint": null, "explanation": "request.security cannot read the history of a user-defined type or drawing reference, because PineForge keeps no references from the requested bars.", "args": {"label": {"kind": "text"}}},
|
|
422
|
+
"PF-E6063": {"severity": "error", "area": "collection-history", "message": "{label} is not supported in PineForge here: the history of an array is supported as the receiver or an argument of an array function, a for...in iterable, na(), and the value of a variable or a function''s argument that reads it.", "hint": null, "explanation": "An array history is supported only as an array function's receiver or argument, a for...in iterable, in na(), or via a variable or function argument that reads it.", "args": {"label": {"kind": "identifier"}}},
|
|
423
|
+
"PF-E6064": {"severity": "error", "area": "collection-history", "message": "{label}: the history of a block''s var {read_kind} is not supported in PineForge.", "hint": null, "explanation": "PineForge keeps the history of an array or matrix only for the script's top level and its blocks, not for this kind of declaration.", "args": {"label": {"kind": "text"}, "read_kind": {"kind": "vocab", "values": ["array", "matrix"]}}},
|
|
424
|
+
"PF-E6065": {"severity": "error", "area": "collection-history", "message": "{label}: the history of a {kind} declared in a block that redeclares a script variable is not supported in PineForge (such a block''s declarations are C++ locals).", "hint": null, "explanation": "PineForge keeps the history of an array or matrix only for the script's top level and its blocks, not for this kind of declaration.", "args": {"label": {"kind": "text"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}}},
|
|
425
|
+
"PF-E6066": {"severity": "error", "area": "collection-history", "message": "{label}: the history of a {kind} declared in a loop is not supported in PineForge.", "hint": null, "explanation": "PineForge keeps the history of an array or matrix only for the script's top level and its blocks, not for this kind of declaration.", "args": {"label": {"kind": "text"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}}},
|
|
426
|
+
"PF-E6067": {"severity": "error", "area": "collection-history", "message": "{label}: the history of a {kind} function''s local is not supported in PineForge (TradingView reads one copy per call: fixtures/array_history_tv ahist_fn).", "hint": null, "explanation": "PineForge keeps the history of an array or matrix only for the script's top level and its blocks, not for this kind of declaration.", "args": {"label": {"kind": "text"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}}},
|
|
427
|
+
"PF-E6068": {"severity": "error", "area": "collection-history", "message": "{label}: the history of a {kind} parameter is not supported in PineForge (TradingView reads one copy per call: fixtures/array_history_tv ahist_fn).", "hint": null, "explanation": "PineForge keeps the history of an array or matrix only for the script's top level and its blocks, not for this kind of declaration.", "args": {"label": {"kind": "text"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}}},
|
|
428
|
+
"PF-E6069": {"severity": "error", "area": "collection-history", "message": "{label}: the history of a {kind} script variable read in a function is not supported in PineForge (TradingView reads one copy per call: fixtures/array_history_tv ahist_fn).", "hint": null, "explanation": "PineForge keeps the history of an array or matrix only for the script's top level and its blocks, not for this kind of declaration.", "args": {"label": {"kind": "text"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}}},
|
|
429
|
+
"PF-E6070": {"severity": "error", "area": "collection-history", "message": "{label}: the history of an {kind} declared in a block that redeclares a script variable is not supported in PineForge (such a block''s declarations are C++ locals).", "hint": null, "explanation": "PineForge keeps the history of an array or matrix only for the script's top level and its blocks, not for this kind of declaration.", "args": {"label": {"kind": "text"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}}},
|
|
430
|
+
"PF-E6071": {"severity": "error", "area": "collection-history", "message": "{label}: the history of an {kind} declared in a loop is not supported in PineForge.", "hint": null, "explanation": "PineForge keeps the history of an array or matrix only for the script's top level and its blocks, not for this kind of declaration.", "args": {"label": {"kind": "text"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}}},
|
|
431
|
+
"PF-E6072": {"severity": "error", "area": "collection-history", "message": "{label}: the history of an {kind} function''s local is not supported in PineForge (TradingView reads one copy per call: fixtures/array_history_tv ahist_fn).", "hint": null, "explanation": "PineForge keeps the history of an array or matrix only for the script's top level and its blocks, not for this kind of declaration.", "args": {"label": {"kind": "text"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}}},
|
|
432
|
+
"PF-E6073": {"severity": "error", "area": "collection-history", "message": "{label}: the history of an {kind} parameter is not supported in PineForge (TradingView reads one copy per call: fixtures/array_history_tv ahist_fn).", "hint": null, "explanation": "PineForge keeps the history of an array or matrix only for the script's top level and its blocks, not for this kind of declaration.", "args": {"label": {"kind": "text"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}}},
|
|
433
|
+
"PF-E6074": {"severity": "error", "area": "collection-history", "message": "{label}: the history of an {kind} script variable read in a function is not supported in PineForge (TradingView reads one copy per call: fixtures/array_history_tv ahist_fn).", "hint": null, "explanation": "PineForge keeps the history of an array or matrix only for the script's top level and its blocks, not for this kind of declaration.", "args": {"label": {"kind": "text"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}}},
|
|
434
|
+
"PF-E6075": {"severity": "error", "area": "collection-history", "message": "{label}: the history of this {read_kind} is not supported in PineForge (only a variable the script''s top level or one of its blocks declares keeps one).", "hint": null, "explanation": "PineForge keeps the history of an array or matrix only for a variable the script's top level or one of its blocks declares.", "args": {"label": {"kind": "text"}, "read_kind": {"kind": "vocab", "values": ["array", "matrix"]}}},
|
|
435
|
+
"PF-E6076": {"severity": "error", "area": "collection-history", "message": "The history of a call''s {kind} is not supported in PineForge here: TradingView reads the copy that expression produced that many bars back, which PineForge does not keep.", "hint": "Bind the expression to a variable and read the variable''s history.", "explanation": "The history of a function call's array or matrix result is refused as PineForge keeps no per-bar copy of it; bind the call to a variable and read its history.", "args": {"kind": {"kind": "vocab", "values": ["array", "matrix"]}}},
|
|
436
|
+
"PF-E6077": {"severity": "error", "area": "collection-history", "message": "The history of a selection''s {kind} is not supported in PineForge here: TradingView reads the copy that expression produced that many bars back, which PineForge does not keep.", "hint": "Bind the expression to a variable and read the variable''s history.", "explanation": "The history of a ?: selection's array or matrix is refused as PineForge keeps no per-bar copy of it; bind the selection to a variable and read its history.", "args": {"kind": {"kind": "vocab", "values": ["array", "matrix"]}}},
|
|
437
|
+
"PF-E6078": {"severity": "error", "area": "collection-history", "message": "The history of an expression''s {kind} is not supported in PineForge here: TradingView reads the copy that expression produced that many bars back, which PineForge does not keep.", "hint": "Bind the expression to a variable and read the variable''s history.", "explanation": "The history of an expression's array or matrix is refused as PineForge keeps no per-bar copy of it; bind the expression to a variable and read its history.", "args": {"kind": {"kind": "vocab", "values": ["array", "matrix"]}}},
|
|
438
|
+
"PF-E6079": {"severity": "error", "area": "collection-history", "message": "{label} reaches a change through a name bound to it (line ?): TradingView stops the run there (RE10051: \"Cannot modify the elements of a historical array\"); PineForge, which holds a copy, does not.", "hint": "Copy it first (array.copy({label}) or matrix.copy()) to change it.", "explanation": "A name bound to an array or matrix history is changed, which stops the run on TradingView; PineForge would change a copy silently, so copy the history first.", "args": {"label": {"kind": "identifier"}}},
|
|
439
|
+
"PF-E6080": {"severity": "error", "area": "collection-history", "message": "{label} reaches a change through a name bound to it (line {line}): TradingView stops the run there (RE10051: \"Cannot modify the elements of a historical array\"); PineForge, which holds a copy, does not.", "hint": "Copy it first (array.copy({label}) or matrix.copy()) to change it.", "explanation": "A name bound to an array or matrix history is changed on the given line, which stops the run on TradingView; PineForge would change a copy, so copy it first.", "args": {"label": {"kind": "identifier"}, "line": {"kind": "number"}}},
|
|
440
|
+
"PF-E6081": {"severity": "error", "area": "collection-history", "message": "{label} reaches a change through a slice of it (line ?): TradingView stops the run there (RE10051: \"Cannot modify the elements of a historical array\"); PineForge, which holds a copy, does not.", "hint": "Copy it first (array.copy({label}) or matrix.copy()) to change it.", "explanation": "A slice of an array or matrix history is changed, which stops the run on TradingView; PineForge would silently change a copy, so copy the history first.", "args": {"label": {"kind": "identifier"}}},
|
|
441
|
+
"PF-E6082": {"severity": "error", "area": "collection-history", "message": "{label} reaches a change through a slice of it (line {line}): TradingView stops the run there (RE10051: \"Cannot modify the elements of a historical array\"); PineForge, which holds a copy, does not.", "hint": "Copy it first (array.copy({label}) or matrix.copy()) to change it.", "explanation": "A slice of an array or matrix history is changed on the given line, which stops the run on TradingView; PineForge would change a copy, so copy it first.", "args": {"label": {"kind": "identifier"}, "line": {"kind": "number"}}},
|
|
442
|
+
"PF-E7001": {"severity": "error", "area": "ta", "message": "Unsupported requested-context TA constructor for {class_name}: PineForge cannot bind the helper call''s arguments to its constructor arguments.", "hint": "Call the ta.* function directly inside request.security().", "explanation": "A TA function called through a helper inside request.security cannot have the helper's arguments bound to its constructor; call the ta.* function directly.", "args": {"class_name": {"kind": "identifier"}}},
|
|
443
|
+
"PF-E7002": {"severity": "error", "area": "ta", "message": "Unsupported requested-context TA constructor flag ''{shown}'' for {class_name}: the helper-bound expression is not a stable per-run scalar{reason}.", "hint": "Use a literal, an input.*() value, timeframe.* metadata, or arithmetic over those for TA lengths.", "explanation": "A boolean option of a TA call inside request.security comes from a helper-bound value that is not fixed for the run; use a literal, an input or timeframe metadata.", "args": {"shown": {"kind": "identifier"}, "class_name": {"kind": "identifier"}, "reason": {"kind": "text"}}},
|
|
444
|
+
"PF-E7003": {"severity": "error", "area": "ta", "message": "Unsupported requested-context TA constructor length ''{shown}'' for {class_name}: the helper-bound expression is not a stable per-run scalar{reason}.", "hint": "Use a literal, an input.*() value, timeframe.* metadata, or arithmetic over those for TA lengths.", "explanation": "A TA length inside request.security comes from a helper-bound value not fixed for the run; use a literal, an input, timeframe metadata or arithmetic on them.", "args": {"shown": {"kind": "identifier"}, "class_name": {"kind": "identifier"}, "reason": {"kind": "text"}}},
|
|
445
|
+
"PF-E7004": {"severity": "error", "area": "ta", "message": "Unsupported TA constructor length for {class_name} inside request.security in ''{containing}'': its call sites pass different lengths ({spellings}), and one requested-context evaluator serves them all.", "hint": "Call request.security() at each call site, or pass the same length from every call.", "explanation": "A function with a request.security TA call is called with different lengths, but one evaluator serves all calls; use one length or call request.security per site.", "args": {"class_name": {"kind": "identifier"}, "containing": {"kind": "identifier"}, "spellings": {"kind": "identifier"}}},
|
|
446
|
+
"PF-W0000": {"severity": "warning", "area": "uncatalogued", "message": "{message}", "hint": "{hint}", "explanation": "A diagnostic whose text no catalog template renders; the test suite refuses it, so a release never emits it.", "args": {"message": {"kind": "text"}, "hint": {"kind": "text"}}},
|
|
447
|
+
"PF-W1001": {"severity": "warning", "area": "support", "message": "{context}: map keys must be string in PineForge''s supported map subset.", "hint": null, "explanation": "PineForge supports maps with string keys only; declare the map's key type as string; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"context": {"kind": "text"}}},
|
|
448
|
+
"PF-W1002": {"severity": "warning", "area": "support", "message": "{context}: map values must be primitive in PineForge''s supported map subset.", "hint": null, "explanation": "PineForge supports maps whose values are float, int, bool or string only; use one of those as the value type; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"context": {"kind": "text"}}},
|
|
449
|
+
"PF-W1003": {"severity": "warning", "area": "support", "message": "matrix<{element_type}> is not supported when the UDT contains a map field; rollback would retain live map aliases.", "hint": "Use array<UDT> for recursively checkpointed state.", "explanation": "A matrix of a user-defined type with a map field is refused because rollback would keep live map references; use an array of that type instead; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"element_type": {"kind": "type"}}},
|
|
450
|
+
"PF-W1004": {"severity": "warning", "area": "support", "message": "matrix<{element_type}>: nested collection element types not supported in v1.", "hint": null, "explanation": "A matrix cannot hold another collection as its element type in PineForge; use float, int, bool, string, color or a user-defined type; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"element_type": {"kind": "type"}}},
|
|
451
|
+
"PF-W1005": {"severity": "warning", "area": "support", "message": "input.color(...) requires a color defval (e.g. color.red or color.new(color.red, 50)).", "hint": null, "explanation": "input.color needs a color as its default value, for example color.red or color.new(color.red, 50); inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {}},
|
|
452
|
+
"PF-W1006": {"severity": "warning", "area": "support", "message": "input.color(...) defval must be a color constant (color.red, ...), a color literal (#rrggbb), or a color.new(...) / color.rgb(...) builder. Arbitrary expressions are not supported: the engine has no color helper, so codegen routes input.color through the int getter — any non-color defval would silently store a numeric value with no color encoding.", "hint": "Replace the defval with color.<name> or color.new(...).", "explanation": "The default of input.color must be a color constant, a #rrggbb literal or a color.new or color.rgb call; other expressions are refused; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {}},
|
|
453
|
+
"PF-W1007": {"severity": "warning", "area": "support", "message": "input.source(...) requires a native series defval (close, open, high, low, hl2, hlc3, ohlc4, ...).", "hint": null, "explanation": "input.source needs a default chart series such as close as its first argument or defval; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {}},
|
|
454
|
+
"PF-W1008": {"severity": "warning", "area": "support", "message": "input.source(...) defval must be a native chart series (open, high, low, close, volume, hl2, hlc3, ohlc4, hlcc4). User series, computed expressions, and indicator outputs are not supported: input.source is restricted to native OHLCV series.", "hint": "Use one of: close, open, high, low, hl2, hlc3, ohlc4.", "explanation": "The default of input.source must be a native chart series (open, high, low, close, volume, hl2, hlc3, ohlc4, hlcc4); computed series are refused; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {}},
|
|
455
|
+
"PF-W1009": {"severity": "warning", "area": "support", "message": "{kind}() declarations are not supported; PineForge runs strategies only.", "hint": "Replace the declaration with strategy(...) and add explicit entry/exit calls.", "explanation": "PineForge runs strategies only, so a script declared with indicator() or library() is refused; declare it with strategy() and add orders; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"kind": {"kind": "identifier"}}},
|
|
456
|
+
"PF-W1010": {"severity": "warning", "area": "support", "message": "Tuple reassignment [..] {op} is not Pine syntax: TradingView declares a tuple with ''='' and has no tuple reassignment.", "hint": "Declare new names with [a, b] = f(), then reassign each variable on its own line.", "explanation": "Pine has no tuple reassignment: declare a tuple once with '=' and reassign each variable on its own line; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"op": {"kind": "keyword"}}},
|
|
457
|
+
"PF-W1011": {"severity": "warning", "area": "support", "message": "A tuple literal [..] cannot be a variable''s value: TradingView rejects it here (Syntax error at input ''['', CE10156). A tuple is only a function''s or an if/switch arm''s value or a request.security expression.", "hint": "Declare each variable on its own line (a = x, b = y), or return the tuple from a function: f() => [x, y], then [a, b] = f().", "explanation": "A tuple literal such as [a, b] cannot be assigned to a variable; return it from a function or if/switch arm and destructure the result; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {}},
|
|
458
|
+
"PF-W1012": {"severity": "warning", "area": "support", "message": "A ternary cannot return a tuple: TradingView rejects [a, b] = c ? [..] : [..] (\"Ternary operations cannot return tuples\").", "hint": "Select the tuple with an if or switch: [a, b] = if c, each arm ending in its tuple.", "explanation": "A ternary cannot produce a tuple (TradingView rejects it too); choose between tuples with an if or switch instead; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {}},
|
|
459
|
+
"PF-W1013": {"severity": "warning", "area": "support", "message": "ta.stoch(...) returns a single series in PineForge; tuple destructuring is not supported.", "hint": "Use k = ta.stoch(...) and compute smoothing separately if needed.", "explanation": "ta.stoch returns one series in PineForge, so destructuring it into a tuple is refused; assign it to a single variable; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {}},
|
|
460
|
+
"PF-W1014": {"severity": "warning", "area": "support", "message": "History references on UDT drawing fields are not supported in PineForge.", "hint": "{var_name}.{object_member}[...] would be read as the current-bar field, not prior-bar history. Copy the field to a bare drawing variable first, or remove the history reference.", "explanation": "A history index on a drawing field of a user-defined type would silently read the current field, so it is refused; copy the field to a variable first; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"var_name": {"kind": "identifier"}, "object_member": {"kind": "identifier"}}},
|
|
461
|
+
"PF-W1015": {"severity": "warning", "area": "support", "message": "History references on tuple-destructured drawing handles are not supported in PineForge.", "hint": "{object_name}[...] is a drawing handle from tuple destructuring; PineForge cannot historize that tuple element safely.", "explanation": "A drawing handle bound by tuple destructuring cannot be read through a history index; remove the history reference; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"object_name": {"kind": "identifier"}}},
|
|
462
|
+
"PF-W1016": {"severity": "warning", "area": "support", "message": "x[k].{member}(): TradingView refuses a method call straight after the history-referencing operator (CE10010; CE10011 after an array''s or a matrix''s history).", "hint": "Call the method on the history reference in parentheses: (x[k]).{member}().", "explanation": "TradingView rejects a method call written straight after a history index, x[k].method(); put the history reference in parentheses; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"member": {"kind": "identifier"}}},
|
|
463
|
+
"PF-W1017": {"severity": "warning", "area": "support", "message": "x[k].{member}(): TradingView refuses a method call straight after the history-referencing operator (CE10010; CE10011 after an array''s or a matrix''s history).", "hint": "Call the method on the history reference in parentheses: ({object_name}[{index}]).{member}().", "explanation": "TradingView rejects a method call written straight after a history index, x[k].method(); put the history reference in parentheses; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"member": {"kind": "identifier"}, "object_name": {"kind": "identifier"}, "index": {"kind": "identifier"}}},
|
|
464
|
+
"PF-W1018": {"severity": "warning", "area": "support", "message": "{object_name}[{index}].{member}(): TradingView refuses a method call straight after the history-referencing operator (CE10010; CE10011 after an array''s or a matrix''s history).", "hint": "Call the method on the history reference in parentheses: (x[k]).{member}().", "explanation": "TradingView rejects a method call written straight after a history index, x[k].method(); put the history reference in parentheses; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"object_name": {"kind": "identifier"}, "index": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
465
|
+
"PF-W1019": {"severity": "warning", "area": "support", "message": "{object_name}[{index}].{member}(): TradingView refuses a method call straight after the history-referencing operator (CE10010; CE10011 after an array''s or a matrix''s history).", "hint": "Call the method on the history reference in parentheses: ({object_name}[{index}]).{member}().", "explanation": "TradingView rejects a method call written straight after a history index, x[k].method(); put the history reference in parentheses; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"object_name": {"kind": "identifier"}, "index": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
466
|
+
"PF-W1020": {"severity": "warning", "area": "support", "message": "x[k].{member}: TradingView refuses a field read straight after the history-referencing operator (CE10011: \"User variable identifiers should not contain ''.''\").", "hint": "Read the field of the history reference in parentheses: (x[k]).{member}.", "explanation": "TradingView rejects a field read written straight after a history index, x[k].field; put the history reference in parentheses; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"member": {"kind": "identifier"}}},
|
|
467
|
+
"PF-W1021": {"severity": "warning", "area": "support", "message": "x[k].{member}: TradingView refuses a field read straight after the history-referencing operator (CE10011: \"User variable identifiers should not contain ''.''\").", "hint": "Read the field of the history reference in parentheses: ({object_name}[{index}]).{member}.", "explanation": "TradingView rejects a field read written straight after a history index, x[k].field; put the history reference in parentheses; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"member": {"kind": "identifier"}, "object_name": {"kind": "identifier"}, "index": {"kind": "identifier"}}},
|
|
468
|
+
"PF-W1022": {"severity": "warning", "area": "support", "message": "{object_name}[{index}].{member}: TradingView refuses a field read straight after the history-referencing operator (CE10011: \"User variable identifiers should not contain ''.''\").", "hint": "Read the field of the history reference in parentheses: (x[k]).{member}.", "explanation": "TradingView rejects a field read written straight after a history index, x[k].field; put the history reference in parentheses; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"object_name": {"kind": "identifier"}, "index": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
469
|
+
"PF-W1023": {"severity": "warning", "area": "support", "message": "{object_name}[{index}].{member}: TradingView refuses a field read straight after the history-referencing operator (CE10011: \"User variable identifiers should not contain ''.''\").", "hint": "Read the field of the history reference in parentheses: ({object_name}[{index}]).{member}.", "explanation": "TradingView rejects a field read written straight after a history index, x[k].field; put the history reference in parentheses; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"object_name": {"kind": "identifier"}, "index": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
470
|
+
"PF-W1024": {"severity": "warning", "area": "support", "message": "footprint.{footprint}(...) is not supported.", "hint": "PineForge reads a footprint''s delta() only: the fp_delta_<ticks>_<va> column of the feed a requests manifest pins for the symbol requested.", "explanation": "PineForge reads only the delta of a footprint value; every other footprint member is refused; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"footprint": {"kind": "identifier"}}},
|
|
471
|
+
"PF-W1025": {"severity": "warning", "area": "support", "message": "{full}(...) is not supported.", "hint": "Currency conversion data not available in PineForge.", "explanation": "PineForge has no currency-conversion data, so request.currency_rate is refused; supply the rate yourself, for example as an input; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"full": {"kind": "identifier"}}},
|
|
472
|
+
"PF-W1026": {"severity": "warning", "area": "support", "message": "{full}(...) is not supported.", "hint": "External Quandl data not available in PineForge.", "explanation": "PineForge cannot load external Quandl data, so request.quandl is refused; remove it; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"full": {"kind": "identifier"}}},
|
|
473
|
+
"PF-W1027": {"severity": "warning", "area": "support", "message": "{full}(...) is not supported.", "hint": "External seed data feeds not available in PineForge.", "explanation": "PineForge cannot load external seed data feeds, so request.seed is refused; remove it; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"full": {"kind": "identifier"}}},
|
|
474
|
+
"PF-W1028": {"severity": "warning", "area": "support", "message": "{full}(...) is not supported.", "hint": "ticker.kagi() chart-type modifier / cross-symbol construction not supported — PineForge runs same-symbol MTF only via request.security with the chart''s own tickerid.", "explanation": "ticker.kagi builds a Kagi symbol, which PineForge cannot run; PineForge supports multi-timeframe requests on the chart's own symbol only; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"full": {"kind": "identifier"}}},
|
|
475
|
+
"PF-W1029": {"severity": "warning", "area": "support", "message": "{full}(...) is not supported.", "hint": "ticker.linebreak() chart-type modifier / cross-symbol construction not supported — PineForge runs same-symbol MTF only via request.security with the chart''s own tickerid.", "explanation": "ticker.linebreak builds a Line Break symbol, which PineForge cannot run; PineForge supports multi-timeframe requests on the chart's own symbol only; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"full": {"kind": "identifier"}}},
|
|
476
|
+
"PF-W1030": {"severity": "warning", "area": "support", "message": "{full}(...) is not supported.", "hint": "ticker.modify() chart-type modifier / cross-symbol construction not supported — PineForge runs same-symbol MTF only via request.security with the chart''s own tickerid.", "explanation": "ticker.modify builds a modified symbol identifier, which PineForge cannot request; PineForge supports multi-timeframe requests on the chart's own symbol only; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"full": {"kind": "identifier"}}},
|
|
477
|
+
"PF-W1031": {"severity": "warning", "area": "support", "message": "{full}(...) is not supported.", "hint": "ticker.new() chart-type modifier / cross-symbol construction not supported — PineForge runs same-symbol MTF only via request.security with the chart''s own tickerid.", "explanation": "ticker.new builds another symbol identifier, which PineForge cannot request; PineForge supports multi-timeframe requests on the chart's own symbol only; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"full": {"kind": "identifier"}}},
|
|
478
|
+
"PF-W1032": {"severity": "warning", "area": "support", "message": "{full}(...) is not supported.", "hint": "ticker.pointfigure() chart-type modifier / cross-symbol construction not supported — PineForge runs same-symbol MTF only via request.security with the chart''s own tickerid.", "explanation": "ticker.pointfigure builds a Point and Figure symbol, which PineForge cannot run; PineForge supports multi-timeframe requests on the chart's own symbol only; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"full": {"kind": "identifier"}}},
|
|
479
|
+
"PF-W1033": {"severity": "warning", "area": "support", "message": "{full}(...) is not supported.", "hint": "ticker.renko() chart-type modifier / cross-symbol construction not supported — PineForge runs same-symbol MTF only via request.security with the chart''s own tickerid.", "explanation": "ticker.renko builds a Renko symbol, which PineForge cannot run; PineForge supports multi-timeframe requests on the chart's own symbol only; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"full": {"kind": "identifier"}}},
|
|
480
|
+
"PF-W1034": {"severity": "warning", "area": "support", "message": "ticker.heikinashi(...) is supported only for the chart''s own symbol.", "hint": "Pass syminfo.tickerid: PineForge applies the Heikin-Ashi candle transform to the chart symbol inside request.security, but cannot load an alternate symbol''s HA candles.", "explanation": "ticker.heikinashi is accepted only for the chart's own symbol (syminfo.tickerid); another symbol's Heikin-Ashi candles cannot be loaded; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {}},
|
|
481
|
+
"PF-W1035": {"severity": "warning", "area": "support", "message": "{full}(...) is not implemented yet.", "hint": "timeframe.from_seconds is not yet implemented; codegen would emit ''false'' and silently produce wrong TF strings.", "explanation": "This call names a function on PineForge's not-yet-implemented list, so it is refused rather than compiled into something that silently misbehaves; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"full": {"kind": "identifier"}}},
|
|
482
|
+
"PF-W1036": {"severity": "warning", "area": "support", "message": "{name}(...) is not implemented yet.", "hint": "timeframe.from_seconds is not yet implemented; codegen would emit ''false'' and silently produce wrong TF strings.", "explanation": "This call names a function on PineForge's not-yet-implemented list, so it is refused rather than compiled into something that silently misbehaves; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"name": {"kind": "identifier"}}},
|
|
483
|
+
"PF-W1037": {"severity": "warning", "area": "support", "message": "{full}: footprint.* (bid/ask volume rows) is not supported in PineForge batch backtests; it requires tick-level data the engine does not consume.", "hint": "Remove the call or replace it with native OHLCV-based logic.", "explanation": "footprint.* calls need tick-level bid/ask volume rows, which a PineForge batch backtest does not load; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"full": {"kind": "identifier"}}},
|
|
484
|
+
"PF-W1038": {"severity": "warning", "area": "support", "message": "{full}: volume_row.* is not supported in PineForge batch backtests; same reason as footprint.*.", "hint": "Remove the call or replace it with native OHLCV-based logic.", "explanation": "volume_row.* calls need tick-level volume rows, which a PineForge batch backtest does not load; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"full": {"kind": "identifier"}}},
|
|
485
|
+
"PF-W1039": {"severity": "warning", "area": "support", "message": "library() declarations are not supported; PineForge runs strategies only.", "hint": "Use strategy(...) and inline or pre-expand library code before uploading.", "explanation": "PineForge runs strategies only, so a library() declaration is refused; use strategy() and paste any library code into the script; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {}},
|
|
486
|
+
"PF-W1040": {"severity": "warning", "area": "support", "message": "Bare barssince(...) is broken in PineForge codegen.", "hint": "Use ta.barssince(...) instead.", "explanation": "The bare barssince(...) form does not work in PineForge; call ta.barssince(...) instead; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {}},
|
|
487
|
+
"PF-W1041": {"severity": "warning", "area": "support", "message": "ta.sum is not a PineScript v6 function.", "hint": "Use math.sum(...) instead.", "explanation": "ta.sum does not exist in Pine v6; use math.sum(source, length) for a rolling sum; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {}},
|
|
488
|
+
"PF-W1042": {"severity": "warning", "area": "support", "message": "ta.{name} is a PineScript v6 variable, not a function.", "hint": "Use ta.{name} without parentheses.", "explanation": "This ta.* name is a built-in variable, not a function, so write it without parentheses; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"name": {"kind": "identifier"}}},
|
|
489
|
+
"PF-W1043": {"severity": "warning", "area": "support", "message": "{full}(...) is not implemented in PineForge runtime.", "hint": null, "explanation": "This strategy.closedtrades or strategy.opentrades accessor is not available in PineForge; use one of the supported trade accessors; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"full": {"kind": "identifier"}}},
|
|
490
|
+
"PF-W1044": {"severity": "warning", "area": "support", "message": "{full}(...) is not implemented in PineForge runtime.", "hint": "{hint}", "explanation": "Open trades have no exit data in Pine v6: this accessor exists only on strategy.closedtrades, so it cannot be read from strategy.opentrades; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"full": {"kind": "identifier"}, "hint": {"kind": "text"}}},
|
|
491
|
+
"PF-W1045": {"severity": "warning", "area": "support", "message": "strategy.{name}(...) is not implemented in PineForge runtime.", "hint": null, "explanation": "This strategy.* function is not implemented in PineForge; check the spelling or use a supported strategy function; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"name": {"kind": "identifier"}}},
|
|
492
|
+
"PF-W1046": {"severity": "warning", "area": "support", "message": "strategy.exit(...) requires at least one price or trailing parameter in PineForge.", "hint": "Use strategy.close(...) for market exits.", "explanation": "strategy.exit needs a price or trailing parameter (profit, loss, limit, stop or a trail setting); use strategy.close for a plain market exit; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {}},
|
|
493
|
+
"PF-W1047": {"severity": "warning", "area": "support", "message": "{full}(...) is not supported. Only request.security(...) and request.security_lower_tf(...) are available in PineForge.", "hint": "External request feeds and other request.* variants are intentionally unavailable.", "explanation": "Only request.security and request.security_lower_tf are supported; other request.* calls need data feeds PineForge does not provide; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"full": {"kind": "identifier"}}},
|
|
494
|
+
"PF-W1048": {"severity": "warning", "area": "support", "message": "ta.{name}(...) is not implemented in PineForge runtime.", "hint": null, "explanation": "PineForge has no implementation of this ta.* function, so the call is refused instead of compiling to a silent stub; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"name": {"kind": "identifier"}}},
|
|
495
|
+
"PF-W1049": {"severity": "warning", "area": "support", "message": "math.{name}(...) is not implemented in PineForge runtime.", "hint": null, "explanation": "PineForge has no implementation of this math.* function, so the call is refused instead of compiling to a silent stub; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"name": {"kind": "identifier"}}},
|
|
496
|
+
"PF-W1050": {"severity": "warning", "area": "support", "message": "str.{name}(...) is not implemented in PineForge runtime.", "hint": null, "explanation": "PineForge has no implementation of this str.* function, so the call is refused instead of compiling to a silent stub; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"name": {"kind": "identifier"}}},
|
|
497
|
+
"PF-W1051": {"severity": "warning", "area": "support", "message": "input.{name}(...) is not implemented in PineForge runtime.", "hint": null, "explanation": "PineForge has no implementation of this input.* function, so the call is refused; use one of the supported input functions; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"name": {"kind": "identifier"}}},
|
|
498
|
+
"PF-W1052": {"severity": "warning", "area": "support", "message": "timeframe.{name}(...) is not implemented in PineForge runtime.", "hint": null, "explanation": "PineForge implements only timeframe.change and timeframe.in_seconds; any other timeframe.* function is refused; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"name": {"kind": "identifier"}}},
|
|
499
|
+
"PF-W1053": {"severity": "warning", "area": "support", "message": "color.{name}(...) is not implemented in PineForge runtime.", "hint": null, "explanation": "PineForge implements only color.new, color.rgb and color.r/g/b/t; any other color.* function is refused; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"name": {"kind": "identifier"}}},
|
|
500
|
+
"PF-W1054": {"severity": "warning", "area": "support", "message": "runtime.{name}(...) is not implemented in PineForge runtime.", "hint": null, "explanation": "PineForge implements only runtime.error; any other runtime.* function is refused; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"name": {"kind": "identifier"}}},
|
|
501
|
+
"PF-W1055": {"severity": "warning", "area": "support", "message": "log.{name}(...) is not implemented in PineForge runtime.", "hint": null, "explanation": "PineForge implements only log.info, log.warning and log.error; any other log.* function is refused; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"name": {"kind": "identifier"}}},
|
|
502
|
+
"PF-W1056": {"severity": "warning", "area": "support", "message": "array.{name}(...) is not implemented in PineForge runtime.", "hint": null, "explanation": "PineForge has no implementation of this array.* function, so the call is refused instead of compiling to a silent stub; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"name": {"kind": "identifier"}}},
|
|
503
|
+
"PF-W1057": {"severity": "warning", "area": "support", "message": "map.{name}(...) is not implemented in PineForge runtime.", "hint": null, "explanation": "PineForge has no implementation of this map.* function, so the call is refused instead of compiling to a silent stub; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"name": {"kind": "identifier"}}},
|
|
504
|
+
"PF-W1058": {"severity": "warning", "area": "support", "message": "map keys must be string in PineForge''s supported map subset.", "hint": null, "explanation": "PineForge maps support only string keys; declare the map with string as its key type; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {}},
|
|
505
|
+
"PF-W1059": {"severity": "warning", "area": "support", "message": "map values must be primitive in PineForge''s supported map subset.", "hint": null, "explanation": "PineForge maps can hold only float, int, bool or string values; other value types such as collections or objects are refused; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {}},
|
|
506
|
+
"PF-W1060": {"severity": "warning", "area": "support", "message": "matrix<{t}>: nested collection element types not supported in v1.", "hint": null, "explanation": "A matrix cannot hold another collection as its element type in PineForge; use float, int, bool, string, color or a user-defined type; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"t": {"kind": "type"}}},
|
|
507
|
+
"PF-W1061": {"severity": "warning", "area": "support", "message": "matrix<{t}> is not supported when the UDT contains a map field; rollback would retain live map aliases.", "hint": "Use array<UDT> for recursively checkpointed state.", "explanation": "A matrix of a user-defined type with a map field is refused because rollback would keep live map references; use an array of that type instead; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"t": {"kind": "type"}}},
|
|
508
|
+
"PF-W1062": {"severity": "warning", "area": "support", "message": "matrix<{t}> element type not supported. Allowed: float, int, bool, string, color, or a declared UDT.", "hint": null, "explanation": "A matrix element must be float, int, bool, string, color or a declared user-defined type; any other element type is refused; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"t": {"kind": "type"}}},
|
|
509
|
+
"PF-W1063": {"severity": "warning", "area": "support", "message": "matrix.{name}(...) is not implemented in PineForge runtime.", "hint": null, "explanation": "PineForge has no implementation of this matrix.* function, so the call is refused instead of compiling to a silent stub; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"name": {"kind": "identifier"}}},
|
|
510
|
+
"PF-W1064": {"severity": "warning", "area": "support", "message": "{ns}.{name}(...) is not implemented in PineForge runtime.", "hint": null, "explanation": "PineForge implements only part of the line, box, label and linefill functions; this one is not implemented, so the call is refused; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"ns": {"kind": "identifier"}, "name": {"kind": "identifier"}}},
|
|
511
|
+
"PF-W1065": {"severity": "warning", "area": "support", "message": "chart.point.{name}(...) is not implemented in PineForge runtime.", "hint": null, "explanation": "PineForge implements only chart.point.new, now, from_index, from_time and copy; any other chart.point.* function is refused; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"name": {"kind": "identifier"}}},
|
|
512
|
+
"PF-W1066": {"severity": "warning", "area": "support", "message": "''export'' is a Pine library keyword; PineForge runs strategies only and does not support exported functions/types.", "hint": "Remove the ''export'' keyword (and inline any library code into the strategy script).", "explanation": "'export' marks library code; PineForge runs strategies only, so remove the keyword and inline any library code into the strategy; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {}},
|
|
513
|
+
"PF-W1067": {"severity": "warning", "area": "support", "message": "{name} diverges from TradingView semantics in PineForge.", "hint": "bar_index depends on the data window; PineForge and TradingView produce different values for the same script.", "explanation": "bar_index counts bars of the data window PineForge is fed, so its value can differ from TradingView's for the same script.", "args": {"name": {"kind": "identifier"}}},
|
|
514
|
+
"PF-W1068": {"severity": "warning", "area": "support", "message": "{name} diverges from TradingView semantics in PineForge.", "hint": "last_bar_index is the final index of PineForge''s fed data window; it can diverge from TradingView when the window does not cover the same chart history.", "explanation": "last_bar_index is the last index of the data window PineForge is fed, so it can differ from TradingView's when the history windows differ.", "args": {"name": {"kind": "identifier"}}},
|
|
515
|
+
"PF-W1069": {"severity": "warning", "area": "support", "message": "{name} diverges from TradingView semantics in PineForge.", "hint": "timenow is aliased to the current bar timestamp in PineForge; it is not real wall-clock time.", "explanation": "timenow is aliased to the current bar's time in PineForge, not real wall-clock time, so logic relying on the real time will differ.", "args": {"name": {"kind": "identifier"}}},
|
|
516
|
+
"PF-W1070": {"severity": "warning", "area": "support", "message": "{chain} diverges from TradingView semantics in PineForge.", "hint": "bar_index depends on the data window; PineForge and TradingView produce different values for the same script.", "explanation": "bar_index counts bars of the data window PineForge is fed, so its value can differ from TradingView's for the same script.", "args": {"chain": {"kind": "identifier"}}},
|
|
517
|
+
"PF-W1071": {"severity": "warning", "area": "support", "message": "{chain} diverges from TradingView semantics in PineForge.", "hint": "last_bar_index is the final index of PineForge''s fed data window; it can diverge from TradingView when the window does not cover the same chart history.", "explanation": "last_bar_index is the last index of the data window PineForge is fed, so it can differ from TradingView's when the history windows differ.", "args": {"chain": {"kind": "identifier"}}},
|
|
518
|
+
"PF-W1072": {"severity": "warning", "area": "support", "message": "{chain} diverges from TradingView semantics in PineForge.", "hint": "timenow is aliased to the current bar timestamp in PineForge; it is not real wall-clock time.", "explanation": "timenow is aliased to the current bar's time in PineForge, not real wall-clock time, so logic relying on the real time will differ.", "args": {"chain": {"kind": "identifier"}}},
|
|
519
|
+
"PF-W1073": {"severity": "warning", "area": "support", "message": "{object_name}.{member}: footprint.* (bid/ask volume rows) is not supported in PineForge batch backtests; it requires tick-level data the engine does not consume.", "hint": null, "explanation": "Members of the footprint.* namespace need tick-level bid/ask volume rows, which a PineForge batch backtest does not load; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"object_name": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
520
|
+
"PF-W1074": {"severity": "warning", "area": "support", "message": "{object_name}.{member}: volume_row.* is not supported in PineForge batch backtests; same reason as footprint.*.", "hint": null, "explanation": "Members of the volume_row.* namespace need tick-level volume rows, which a PineForge batch backtest does not load; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"object_name": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
521
|
+
"PF-W1075": {"severity": "warning", "area": "support", "message": "{object_name}.{member}: dividends.* is not available in PineForge — fundamental dividend data is not loaded.", "hint": null, "explanation": "dividends.* fields read fundamental dividend data, which PineForge does not load outside a recorded request; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"object_name": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
522
|
+
"PF-W1076": {"severity": "warning", "area": "support", "message": "{object_name}.{member}: earnings.* is not available in PineForge — fundamental earnings data is not loaded.", "hint": null, "explanation": "earnings.* fields read fundamental earnings data, which PineForge does not load outside a recorded request; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"object_name": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
523
|
+
"PF-W1077": {"severity": "warning", "area": "support", "message": "{object_name}.{member}: splits.* is not available in PineForge — corporate-action split data is not loaded.", "hint": null, "explanation": "splits.* fields read corporate-action split data, which PineForge does not load outside a recorded request; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"object_name": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
524
|
+
"PF-W1078": {"severity": "warning", "area": "support", "message": "{object_name}.{member} is a visual/style constant with no runtime value in PineForge backtests; it is only accepted as an argument to visual calls (plot, plotshape, hline, label.new, table.cell, ...), which PineForge parses and skips.", "hint": "Constant-namespace members cannot flow into strategy logic; codegen would emit a string literal while the analyzer types the read as int.", "explanation": "A visual or style constant has no value in a backtest; it may only be passed to plotting and drawing calls, which PineForge skips; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"object_name": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
525
|
+
"PF-W1079": {"severity": "warning", "area": "support", "message": "{object_name}.{member} is not a Pine alert constant; only alert.freq_all, alert.freq_once_per_bar and alert.freq_once_per_bar_close exist.", "hint": "Constant-namespace members cannot flow into strategy logic; codegen would emit a string literal while the analyzer types the read as int.", "explanation": "The alert.* member is not one of Pine's alert frequency constants; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"object_name": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
526
|
+
"PF-W1080": {"severity": "warning", "area": "support", "message": "{object_name}.{member} is not a barmerge constant; only barmerge.gaps_on, barmerge.gaps_off, barmerge.lookahead_on and barmerge.lookahead_off exist.", "hint": "Constant-namespace members cannot flow into strategy logic; codegen would emit a string literal while the analyzer types the read as int.", "explanation": "The barmerge.* member is not one of Pine's gaps or lookahead constants; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"object_name": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
527
|
+
"PF-W1081": {"severity": "warning", "area": "support", "message": "syminfo.{member} is not implemented in PineForge runtime.", "hint": null, "explanation": "PineForge does not implement this syminfo.* member, so reading it is refused; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"member": {"kind": "identifier"}}},
|
|
528
|
+
"PF-W1082": {"severity": "warning", "area": "support", "message": "request.security parameter ''{kw_name}'' is not allowed in PineForge.", "hint": "Only symbol, timeframe, expression, gaps, and lookahead are accepted.", "explanation": "request.security accepts only a few named parameters in PineForge; this one is refused instead of being silently ignored, so remove it; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"kw_name": {"kind": "identifier"}}},
|
|
529
|
+
"PF-W1083": {"severity": "warning", "area": "support", "message": "Extra positional arguments to request.security are not allowed in PineForge.", "hint": "Only symbol, timeframe, expression, gaps, and lookahead are accepted.", "explanation": "request.security accepts at most five positional arguments (symbol, timeframe, expression, gaps, lookahead); remove the extra ones; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {}},
|
|
530
|
+
"PF-W1084": {"severity": "warning", "area": "support", "message": "request.security gaps must be barmerge.gaps_on or barmerge.gaps_off.", "hint": "Codegen only recognizes the barmerge.gaps_* literal; other values are silently treated as gaps_off.", "explanation": "The gaps argument of request.security must be written literally as barmerge.gaps_on or barmerge.gaps_off, the only forms PineForge reads; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {}},
|
|
531
|
+
"PF-W1085": {"severity": "warning", "area": "support", "message": "request.security lookahead must be barmerge.lookahead_on or barmerge.lookahead_off.", "hint": "Codegen only recognizes the barmerge.lookahead_* literal; other values are silently treated as lookahead_off.", "explanation": "The lookahead argument of request.security must be written literally as barmerge.lookahead_on or barmerge.lookahead_off, the only forms PineForge reads; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {}},
|
|
532
|
+
"PF-W1086": {"severity": "warning", "area": "support", "message": "request.security: {kw_name}={object_name}.{val_member} is not supported. The engine ignores this kwarg, which would silently produce different prices from TradingView.", "hint": "Allowed values: {allowed}.", "explanation": "PineForge ignores request.security's price-adjustment settings, so only no-op values are accepted; others would silently give prices unlike TradingView's; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"kw_name": {"kind": "identifier"}, "object_name": {"kind": "identifier"}, "val_member": {"kind": "identifier"}, "allowed": {"kind": "identifier"}}},
|
|
533
|
+
"PF-W1087": {"severity": "warning", "area": "support", "message": "request.security: {kw_name}=... must be a constant member access of the form {kw_name}.<value> (got a non-constant expression).", "hint": "Allowed values: {allowed}.", "explanation": "A request.security price-adjustment setting must be a plain constant of the form name.value (like adjustment.none), not a computed expression; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"kw_name": {"kind": "identifier"}, "allowed": {"kind": "identifier"}}},
|
|
534
|
+
"PF-W1088": {"severity": "warning", "area": "support", "message": "{name} {message} (TradingView: {spelled}).", "hint": "Use the parameters of TradingView''s signature.", "explanation": "A nz or fixnan call whose arguments match none of TradingView's signatures (unknown name, too many or missing arguments) is refused, as TradingView refuses it; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"name": {"kind": "identifier"}, "message": {"kind": "text"}, "spelled": {"kind": "identifier"}}},
|
|
535
|
+
"PF-W1089": {"severity": "warning", "area": "support", "message": "ta.{name} {message} (TradingView: {signature}).", "hint": "Use the parameters of TradingView''s signature.", "explanation": "A ta.* call whose arguments match none of TradingView's signatures (unknown or repeated parameter, too many or missing arguments) is refused; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"name": {"kind": "identifier"}, "message": {"kind": "text"}, "signature": {"kind": "identifier"}}},
|
|
536
|
+
"PF-W1090": {"severity": "warning", "area": "support", "message": "request.security: invalid timeframe literal ''{timeframe}''. Expected Pine TF format like ''1'', ''15'', ''1H'', ''1D'', ''15S''.", "hint": "empty timeframe literal", "explanation": "The timeframe string given to request.security is not a valid Pine timeframe such as 1, 15, 1H, 1D or 15S, so it is refused; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"timeframe": {"kind": "identifier"}}},
|
|
537
|
+
"PF-W1091": {"severity": "warning", "area": "support", "message": "request.security: invalid timeframe literal ''{timeframe}''. Expected Pine TF format like ''1'', ''15'', ''1H'', ''1D'', ''15S''.", "hint": "non-integer timeframe magnitude ''{digits}''", "explanation": "The timeframe string given to request.security is not a valid Pine timeframe such as 1, 15, 1H, 1D or 15S, so it is refused; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"timeframe": {"kind": "identifier"}, "digits": {"kind": "identifier"}}},
|
|
538
|
+
"PF-W1092": {"severity": "warning", "area": "support", "message": "request.security: invalid timeframe literal ''{timeframe}''. Expected Pine TF format like ''1'', ''15'', ''1H'', ''1D'', ''15S''.", "hint": "timeframe magnitude must be positive", "explanation": "The timeframe string given to request.security is not a valid Pine timeframe such as 1, 15, 1H, 1D or 15S, so it is refused; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"timeframe": {"kind": "identifier"}}},
|
|
539
|
+
"PF-W1093": {"severity": "warning", "area": "support", "message": "request.security: invalid timeframe literal ''{timeframe}''. Expected Pine TF format like ''1'', ''15'', ''1H'', ''1D'', ''15S''.", "hint": "unknown timeframe suffix ''{suffix}''", "explanation": "The timeframe string given to request.security is not a valid Pine timeframe such as 1, 15, 1H, 1D or 15S, so it is refused; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"timeframe": {"kind": "identifier"}, "suffix": {"kind": "identifier"}}},
|
|
540
|
+
"PF-W1094": {"severity": "warning", "area": "support", "message": "request.security_lower_tf: invalid timeframe literal ''{timeframe}''. Expected Pine TF format like ''1'', ''15'', ''1H'', ''1D'', ''15S''.", "hint": "empty timeframe literal", "explanation": "The timeframe string given to request.security_lower_tf is not a valid Pine timeframe such as 1, 15, 1H, 1D or 15S, so it is refused; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"timeframe": {"kind": "identifier"}}},
|
|
541
|
+
"PF-W1095": {"severity": "warning", "area": "support", "message": "request.security_lower_tf: invalid timeframe literal ''{timeframe}''. Expected Pine TF format like ''1'', ''15'', ''1H'', ''1D'', ''15S''.", "hint": "non-integer timeframe magnitude ''{digits}''", "explanation": "The timeframe string given to request.security_lower_tf is not a valid Pine timeframe such as 1, 15, 1H, 1D or 15S, so it is refused; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"timeframe": {"kind": "identifier"}, "digits": {"kind": "identifier"}}},
|
|
542
|
+
"PF-W1096": {"severity": "warning", "area": "support", "message": "request.security_lower_tf: invalid timeframe literal ''{timeframe}''. Expected Pine TF format like ''1'', ''15'', ''1H'', ''1D'', ''15S''.", "hint": "timeframe magnitude must be positive", "explanation": "The timeframe string given to request.security_lower_tf is not a valid Pine timeframe such as 1, 15, 1H, 1D or 15S, so it is refused; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"timeframe": {"kind": "identifier"}}},
|
|
543
|
+
"PF-W1097": {"severity": "warning", "area": "support", "message": "request.security_lower_tf: invalid timeframe literal ''{timeframe}''. Expected Pine TF format like ''1'', ''15'', ''1H'', ''1D'', ''15S''.", "hint": "unknown timeframe suffix ''{suffix}''", "explanation": "The timeframe string given to request.security_lower_tf is not a valid Pine timeframe such as 1, 15, 1H, 1D or 15S, so it is refused; inside a switch arm PineForge warns instead and keeps the arm's lowering.", "args": {"timeframe": {"kind": "identifier"}, "suffix": {"kind": "identifier"}}},
|
|
544
|
+
"PF-W1500": {"severity": "warning", "area": "support", "message": "{call}: request.security symbol can select an alternate symbol, but PineForge always loads the current chart symbol.", "hint": "It reads no feed of another symbol: {reasons}. Every reachable symbol value must resolve to syminfo.tickerid or syminfo.ticker for exact results.", "explanation": "A request.security whose symbol can select another symbol is approximated by the chart's own symbol, because no other-symbol feed can be registered for it.", "args": {"call": {"kind": "identifier"}, "reasons": {"kind": "text"}}},
|
|
545
|
+
"PF-W1501": {"severity": "warning", "area": "support", "message": "{call}: no data is pinned for this request; the run stops with an error where its value is read.", "hint": "PineForge reads another symbol''s feed only for a symbol and timeframe registration computes before the first bar; {reasons}.", "explanation": "A request.security of another symbol has no pinned data, so the run stops with an error where its value is read; its symbol and timeframe must be known up front.", "args": {"call": {"kind": "identifier"}, "reasons": {"kind": "text"}}},
|
|
546
|
+
"PF-W1502": {"severity": "warning", "area": "support", "message": "color(...) cast has no effect in PineForge backtests (visual only); it emits a default color.", "hint": null, "explanation": "A color(...) cast is visual only and has no effect on a backtest, so PineForge ignores it and uses a default color.", "args": {}},
|
|
547
|
+
"PF-W1503": {"severity": "warning", "area": "support", "message": "strategy.risk.{name}(...) has partial PineForge runtime support.", "hint": "Verify risk behavior against PineForge results; unsupported risk edge cases may diverge from TradingView.", "explanation": "A strategy.risk.* call has only partial runtime support in PineForge, so check that your risk limits behave as they do on TradingView.", "args": {"name": {"kind": "identifier"}}},
|
|
548
|
+
"PF-W1504": {"severity": "warning", "area": "support", "message": "strategy.{name} parameter ''{param_name}'' is not supported by PineForge and is ignored.", "hint": null, "explanation": "A strategy order call passes a parameter PineForge does not support, so the parameter is ignored and the order runs without it.", "args": {"name": {"kind": "identifier"}, "param_name": {"kind": "identifier"}}},
|
|
549
|
+
"PF-W1505": {"severity": "warning", "area": "support", "message": "ta.ema initial warmup is approximated: PineForge may return a finite value before TradingView does.", "hint": "A covered length-20 TradingView tape first returns a finite EMA at bar 19; standalone PineForge EMA is finite at bar 0. Its established lowering stays in place pending per-call-site population parity.", "explanation": "ta.ema is approximated during warmup: PineForge may return a finite value on early bars where TradingView still returns na, so early results can differ.", "args": {}},
|
|
550
|
+
"PF-W1506": {"severity": "warning", "area": "support", "message": "color.{name}(...) has no effect in PineForge backtests (visual only); it evaluates its arguments and emits a default color.", "hint": null, "explanation": "A cosmetic color function has no effect on a backtest, so PineForge evaluates its arguments and uses a default color.", "args": {"name": {"kind": "identifier"}}},
|
|
551
|
+
"PF-W1507": {"severity": "warning", "area": "support", "message": "{ns}.{name}(...) is a visual no-op in PineForge backtests (drawing geometry is data; color/style/size are dropped).", "hint": null, "explanation": "A drawing setter for color, style or size is a visual no-op in PineForge, which keeps only the drawing's geometry as data.", "args": {"ns": {"kind": "identifier"}, "name": {"kind": "identifier"}}},
|
|
552
|
+
"PF-W1508": {"severity": "warning", "area": "support", "message": "{name}(...) has no effect in PineForge backtests (visual only).", "hint": null, "explanation": "A call into a visual-only namespace such as table or polyline has no effect on backtest results, so PineForge ignores it.", "args": {"name": {"kind": "identifier"}}},
|
|
553
|
+
"PF-W1509": {"severity": "warning", "area": "support", "message": "{full}(...) has no effect in PineForge backtests (visual only).", "hint": null, "explanation": "A call into a visual-only namespace such as table or polyline has no effect on backtest results, so PineForge ignores it.", "args": {"full": {"kind": "identifier"}}},
|
|
554
|
+
"PF-W1510": {"severity": "warning", "area": "support", "message": "{chain} is approximated in PineForge.", "hint": "In direct batch chart-scope evaluation, barstate.islast is true only on the final bar of PineForge''s fed chart-data window. Inside a request.security() history index, PineForge currently selects the false branch; requested-context last-bar state is not modeled.", "explanation": "barstate.islast is true only on the last bar of PineForge's fed data, and inside a request.security history index it selects the false branch.", "args": {"chain": {"kind": "identifier"}}},
|
|
555
|
+
"PF-W1511": {"severity": "warning", "area": "support", "message": "{chain} is approximated in PineForge.", "hint": "In direct historical batch chart-scope evaluation, PineForge approximates barstate.islastconfirmedhistory as true only on the final bar of the fed chart-data window. Inside a request.security() history index, PineForge currently selects the false branch; TradingView''s requested-context and realtime-boundary semantics are not modeled.", "explanation": "barstate.islastconfirmedhistory is approximated as true only on the final bar of the fed data window, and as false inside a request.security history index.", "args": {"chain": {"kind": "identifier"}}},
|
|
556
|
+
"PF-W1512": {"severity": "warning", "area": "support", "message": "{chain} is approximated in PineForge.", "hint": "barstate.isconfirmed follows PineForge last-tick execution state.", "explanation": "barstate.isconfirmed follows PineForge's last-tick execution state, so it can differ from TradingView's confirmation behavior.", "args": {"chain": {"kind": "identifier"}}},
|
|
557
|
+
"PF-W1513": {"severity": "warning", "area": "support", "message": "{chain} is approximated in PineForge.", "hint": "barstate.ishistory is always true in PineForge batch backtests.", "explanation": "barstate.ishistory is always true in PineForge batch backtests, because there is no real-time bar.", "args": {"chain": {"kind": "identifier"}}},
|
|
558
|
+
"PF-W1514": {"severity": "warning", "area": "support", "message": "{chain} is approximated in PineForge.", "hint": "barstate.isnew follows PineForge first-tick execution state.", "explanation": "barstate.isnew is only approximated in PineForge, following its first-tick execution state, so it may behave differently from TradingView.", "args": {"chain": {"kind": "identifier"}}},
|
|
559
|
+
"PF-W1515": {"severity": "warning", "area": "support", "message": "{chain} is approximated in PineForge.", "hint": "barstate.isrealtime is always false in PineForge batch backtests.", "explanation": "barstate.isrealtime is always false because PineForge runs batch backtests on historical bars only, so real-time-only logic never runs.", "args": {"chain": {"kind": "identifier"}}},
|
|
560
|
+
"PF-W1516": {"severity": "warning", "area": "support", "message": "{object_name}.{member}: chart.bg_color has no meaning in a batch backtest (no chart theme); emits a default color.", "hint": null, "explanation": "chart.bg_color depends on the chart theme, which a batch backtest does not have, so PineForge substitutes a default color.", "args": {"object_name": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
561
|
+
"PF-W1517": {"severity": "warning", "area": "support", "message": "{object_name}.{member}: chart.fg_color has no meaning in a batch backtest (no chart theme); emits a default color.", "hint": null, "explanation": "chart.fg_color depends on the chart theme, which a batch backtest does not have, so PineForge substitutes a default color.", "args": {"object_name": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
562
|
+
"PF-W1518": {"severity": "warning", "area": "support", "message": "{object_name}.{member}: chart.left_visible_bar_time has no meaning in a batch backtest (no viewport); emits 0.", "hint": null, "explanation": "chart.left_visible_bar_time depends on the chart viewport, which a batch backtest does not have, so PineForge substitutes 0.", "args": {"object_name": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
563
|
+
"PF-W1519": {"severity": "warning", "area": "support", "message": "{object_name}.{member}: chart.right_visible_bar_time has no meaning in a batch backtest (no viewport); emits 0.", "hint": null, "explanation": "chart.right_visible_bar_time depends on the chart viewport, which a batch backtest does not have, so PineForge substitutes 0.", "args": {"object_name": {"kind": "identifier"}, "member": {"kind": "identifier"}}},
|
|
564
|
+
"PF-W1520": {"severity": "warning", "area": "support", "message": "syminfo.{member} is na unless the run declares the symbol''s {member} (syminfo metadata \"{member}\", a lane fact).", "hint": null, "explanation": "This syminfo field has no built-in value in PineForge: it is na unless the run supplies the symbol's value as metadata, so anything computed from it is na.", "args": {"member": {"kind": "identifier"}}},
|
|
565
|
+
"PF-W1521": {"severity": "warning", "area": "support", "message": "syminfo.{member} returns na in current PineForge; any expression using it will be na. Will be backfilled by pineforge-data product.", "hint": null, "explanation": "This syminfo field is not provided by PineForge yet and always reads na, so any expression using it is na.", "args": {"member": {"kind": "identifier"}}},
|
|
566
|
+
"PF-W1522": {"severity": "warning", "area": "support", "message": "syminfo.{member} returns na in current PineForge; condition will always be false. Will be backfilled by pineforge-data product.", "hint": null, "explanation": "This syminfo field is not provided by PineForge yet and always reads na, so a condition built on it is always false.", "args": {"member": {"kind": "identifier"}}},
|
|
567
|
+
"PF-W1523": {"severity": "warning", "area": "support", "message": "request.security symbol can select an alternate symbol, but PineForge always loads the current chart symbol.", "hint": "Every reachable symbol value must resolve to syminfo.tickerid or syminfo.ticker for exact results.", "explanation": "The request.security symbol can select another symbol, but PineForge always loads the chart's symbol; resolve every value to syminfo.tickerid for exact results.", "args": {}},
|
|
568
|
+
"PF-W1524": {"severity": "warning", "area": "support", "message": "request.security lookahead_on changes HTF timing: the completed higher-timeframe value is exposed from the bucket''s first chart bar. PineForge emits this (engine-supported) but results differ from lookahead_off and, with a 0-offset HTF expression, repaint future data.", "hint": "The safe non-repainting form pairs lookahead_on with a [1] offset (e.g. close[1]) to read only completed prior HTF bars.", "explanation": "request.security with lookahead_on exposes higher-timeframe values early and can repaint future data; pair it with a [1] offset such as close[1] to stay safe.", "args": {}},
|
|
569
|
+
"PF-W1525": {"severity": "warning", "area": "support", "message": "{call}: value reaches only display/alert sinks; lowered to na; trades are unaffected.", "hint": "External corporate-action data not available in PineForge. A recorded series is read when {blocker}. The value it lowers to reaches alerts, plots and tables only.", "explanation": "No recorded series applies to this earnings, dividends or splits request, but its value only feeds plots, alerts or tables, so it becomes na; trades are unaffected.", "args": {"call": {"kind": "identifier"}, "blocker": {"kind": "text"}}},
|
|
570
|
+
"PF-W1526": {"severity": "warning", "area": "support", "message": "{call}: value reaches only display/alert sinks; lowered to na; trades are unaffected.", "hint": "External corporate-action data not available in PineForge. The value it lowers to reaches alerts, plots and tables only.", "explanation": "PineForge has no earnings, dividends or splits data; this request's value only feeds plots, alerts or tables, so it becomes na and trades are unaffected.", "args": {"call": {"kind": "identifier"}}},
|
|
571
|
+
"PF-W1527": {"severity": "warning", "area": "support", "message": "{call}: value reaches only display/alert sinks; lowered to na; trades are unaffected.", "hint": "External fundamentals data not available in PineForge. A recorded series is read when {blocker}. The value it lowers to reaches alerts, plots and tables only.", "explanation": "No recorded series applies to this request.financial call, but its value only feeds plots, alerts or tables, so it becomes na and trades are unaffected.", "args": {"call": {"kind": "identifier"}, "blocker": {"kind": "text"}}},
|
|
572
|
+
"PF-W1528": {"severity": "warning", "area": "support", "message": "{call}: value reaches only display/alert sinks; lowered to na; trades are unaffected.", "hint": "External fundamentals data not available in PineForge. The value it lowers to reaches alerts, plots and tables only.", "explanation": "PineForge has no fundamentals data for request.financial; its value only feeds plots, alerts or tables, so it becomes na and trades are unaffected.", "args": {"call": {"kind": "identifier"}}},
|
|
573
|
+
"PF-W1529": {"severity": "warning", "area": "support", "message": "{call}: value reaches only display/alert sinks; lowered to na; trades are unaffected.", "hint": "Footprint (bid/ask volume) data not available in PineForge. A recorded series is read when {blocker}. The value it lowers to reaches alerts, plots and tables only.", "explanation": "No recorded series applies to this request.footprint call, but its value only feeds plots, alerts or tables, so it becomes na and trades are unaffected.", "args": {"call": {"kind": "identifier"}, "blocker": {"kind": "text"}}},
|
|
574
|
+
"PF-W1530": {"severity": "warning", "area": "support", "message": "{call}: value reaches only display/alert sinks; lowered to na; trades are unaffected.", "hint": "Footprint (bid/ask volume) data not available in PineForge. The value it lowers to reaches alerts, plots and tables only.", "explanation": "PineForge has no footprint (bid/ask volume) data for request.footprint; its value only feeds plots, alerts or tables, so it becomes na and trades are unaffected.", "args": {"call": {"kind": "identifier"}}},
|
|
575
|
+
"PF-W1531": {"severity": "warning", "area": "support", "message": "{call}: value reaches only display/alert sinks; lowered to na; trades are unaffected.", "hint": "PineForge backtests load the chart''s symbol only (syminfo.tickerid, syminfo.ticker), and reads another symbol''s feed only when {blocker}. The value it lowers to reaches alerts, plots and tables only.", "explanation": "Another symbol's feed is read only in the stated case; here the request's value only feeds plots, alerts or tables, so it becomes na and trades are unaffected.", "args": {"call": {"kind": "identifier"}, "blocker": {"kind": "vocab", "values": ["it is outside another request's expression", "it is request.security", "its expression holds no request of its own", "its gaps and lookahead are barmerge constants", "its request.footprint states ticks_per_row and va_percent as literal whole numbers", "registration computes its ignore_invalid_symbol before the first bar", "registration computes its symbol before the first bar", "registration computes its timeframe before the first bar"]}}},
|
|
576
|
+
"PF-W1532": {"severity": "warning", "area": "support", "message": "{call}: value reaches only display/alert sinks; lowered to na; trades are unaffected.", "hint": "PineForge backtests load the chart''s symbol only (syminfo.tickerid, syminfo.ticker). The value it lowers to reaches alerts, plots and tables only.", "explanation": "PineForge loads only the chart's symbol; this request for another symbol only feeds plots, alerts or tables, so it becomes na and trades are unaffected.", "args": {"call": {"kind": "identifier"}}},
|
|
577
|
+
"PF-W1533": {"severity": "warning", "area": "support", "message": "{call}: no data is pinned for this request; the run stops with an error where its value is read.", "hint": "External corporate-action data not available in PineForge. A recorded series is read when {blocker}. Its value can reach a trade: {reason}.", "explanation": "No recorded series applies to this earnings, dividends or splits request and its value can reach a trade, so the run stops with an error where the value is read.", "args": {"call": {"kind": "identifier"}, "blocker": {"kind": "text"}, "reason": {"kind": "text"}}},
|
|
578
|
+
"PF-W1534": {"severity": "warning", "area": "support", "message": "{call}: no data is pinned for this request; the run stops with an error where its value is read.", "hint": "External corporate-action data not available in PineForge. Its value can reach a trade: {reason}.", "explanation": "PineForge has no earnings, dividends or splits data and this request's value can reach a trade, so the run stops with an error where the value is read.", "args": {"call": {"kind": "identifier"}, "reason": {"kind": "text"}}},
|
|
579
|
+
"PF-W1535": {"severity": "warning", "area": "support", "message": "{call}: no data is pinned for this request; the run stops with an error where its value is read.", "hint": "External fundamentals data not available in PineForge. A recorded series is read when {blocker}. Its value can reach a trade: {reason}.", "explanation": "No recorded series applies to this request.financial call and its value can reach a trade, so the run stops with an error where the value is read.", "args": {"call": {"kind": "identifier"}, "blocker": {"kind": "text"}, "reason": {"kind": "text"}}},
|
|
580
|
+
"PF-W1536": {"severity": "warning", "area": "support", "message": "{call}: no data is pinned for this request; the run stops with an error where its value is read.", "hint": "External fundamentals data not available in PineForge. Its value can reach a trade: {reason}.", "explanation": "PineForge has no fundamentals data for request.financial and its value can reach a trade, so the run stops with an error where the value is read.", "args": {"call": {"kind": "identifier"}, "reason": {"kind": "text"}}},
|
|
581
|
+
"PF-W1537": {"severity": "warning", "area": "support", "message": "{call}: no data is pinned for this request; the run stops with an error where its value is read.", "hint": "Footprint (bid/ask volume) data not available in PineForge. A recorded series is read when {blocker}. Its value can reach a trade: {reason}.", "explanation": "No recorded series applies to this request.footprint call and its value can reach a trade, so the run stops with an error where the value is read.", "args": {"call": {"kind": "identifier"}, "blocker": {"kind": "text"}, "reason": {"kind": "text"}}},
|
|
582
|
+
"PF-W1538": {"severity": "warning", "area": "support", "message": "{call}: no data is pinned for this request; the run stops with an error where its value is read.", "hint": "Footprint (bid/ask volume) data not available in PineForge. Its value can reach a trade: {reason}.", "explanation": "PineForge has no footprint (bid/ask volume) data and this request's value can reach a trade, so the run stops with an error where the value is read.", "args": {"call": {"kind": "identifier"}, "reason": {"kind": "text"}}},
|
|
583
|
+
"PF-W1539": {"severity": "warning", "area": "support", "message": "{call}: no data is pinned for this request; the run stops with an error where its value is read.", "hint": "PineForge backtests load the chart''s symbol only (syminfo.tickerid, syminfo.ticker), and reads another symbol''s feed only when {blocker}. Its value can reach a trade: {reason}.", "explanation": "PineForge reads another symbol's feed only in the stated case, and this request's value can reach a trade, so the run stops with an error where it is read.", "args": {"call": {"kind": "identifier"}, "blocker": {"kind": "vocab", "values": ["it is outside another request's expression", "it is request.security", "its expression holds no request of its own", "its gaps and lookahead are barmerge constants", "its request.footprint states ticks_per_row and va_percent as literal whole numbers", "registration computes its ignore_invalid_symbol before the first bar", "registration computes its symbol before the first bar", "registration computes its timeframe before the first bar"]}, "reason": {"kind": "text"}}},
|
|
584
|
+
"PF-W1540": {"severity": "warning", "area": "support", "message": "{call}: no data is pinned for this request; the run stops with an error where its value is read.", "hint": "PineForge backtests load the chart''s symbol only (syminfo.tickerid, syminfo.ticker). Its value can reach a trade: {reason}.", "explanation": "PineForge loads only the chart's symbol, and this request for another symbol can reach a trade, so the run stops with an error where its value is read.", "args": {"call": {"kind": "identifier"}, "reason": {"kind": "text"}}},
|
|
585
|
+
"PF-W1541": {"severity": "warning", "area": "support", "message": "{call}: another symbol''s bars, read from the feed the requests manifest pins for it; with none installed, the run stops with an error where its value is read.", "hint": "PineForge runs the expression on that symbol''s own bars (history, ta.* and syminfo.* in its context) and merges them by time as TradingView does; a symbol equal to the chart''s reads the chart.", "explanation": "request.security on another symbol reads that symbol's pinned feed; if none is installed, the run stops with an error where the value is read.", "args": {"call": {"kind": "identifier"}}},
|
|
586
|
+
"PF-W1542": {"severity": "warning", "area": "support", "message": "{call}: its symbol can select another symbol: registered by the string the run computes, a footprint reads the feed the requests manifest pins for each symbol, the chart''s too (the chart''s bars carry no footprint); with none installed, the run stops with an error where its value is read.", "hint": "It read the chart''s bars for every symbol: another symbol''s value never comes from the chart.", "explanation": "The footprint symbol can vary: every symbol, the chart's too, reads its own pinned feed, and a missing feed stops the run where the value is read.", "args": {"call": {"kind": "identifier"}}},
|
|
587
|
+
"PF-W1543": {"severity": "warning", "area": "support", "message": "{call}: its symbol can select another symbol: registered by the string the run computes, the chart''s reads the chart and another symbol''s the feed the requests manifest pins for it; with none installed, the run stops with an error where its value is read.", "hint": "It read the chart''s bars for every symbol: another symbol''s value never comes from the chart.", "explanation": "The request.security symbol can be the chart's or another symbol: the chart's reads the chart, another reads its pinned feed, and a missing feed stops the run.", "args": {"call": {"kind": "identifier"}}},
|
|
588
|
+
"PF-W1544": {"severity": "warning", "area": "support", "message": "{call}: TradingView''s values per chart bar, read from the series the requests manifest records under {parts}|<its symbol>|{parts2}|{parts3}|gaps_{parts4}|lookahead_{parts5}; with none installed, the run stops with an error where its value is read.", "hint": "PineForge replays the values TradingView returned on the chart''s own bars (chart_open_ms,value): a bar the tape has no row for reads na.", "explanation": "This request replays the values TradingView returned on each chart bar, from the requests manifest; with no recording installed the run stops where it is read.", "args": {"call": {"kind": "identifier"}, "parts": {"kind": "identifier"}, "parts2": {"kind": "identifier"}, "parts3": {"kind": "identifier"}, "parts4": {"kind": "identifier"}, "parts5": {"kind": "identifier"}}},
|
|
589
|
+
"PF-W1545": {"severity": "warning", "area": "support", "message": "{call}: no data is pinned for this request; the run stops with an error where it is evaluated.", "hint": "PineForge loads no other symbol''s lower-timeframe bars. Its value can reach a trade: it decides a loop''s break or continue.", "explanation": "PineForge loads no other symbol's lower-timeframe bars, and this request's value can reach a trade, so the run stops with an error where it is evaluated.", "args": {"call": {"kind": "identifier"}}},
|
|
590
|
+
"PF-W1546": {"severity": "warning", "area": "support", "message": "{call}: no data is pinned for this request; the run stops with an error where it is evaluated.", "hint": "PineForge loads no other symbol''s lower-timeframe bars. Its value can reach a trade: it is a history offset.", "explanation": "PineForge loads no other symbol's lower-timeframe bars, and this request's value can reach a trade, so the run stops with an error where it is evaluated.", "args": {"call": {"kind": "identifier"}}},
|
|
591
|
+
"PF-W1547": {"severity": "warning", "area": "support", "message": "{call}: no data is pinned for this request; the run stops with an error where it is evaluated.", "hint": "PineForge loads no other symbol''s lower-timeframe bars. Its value can reach a trade: it is written to a field or element.", "explanation": "PineForge loads no other symbol's lower-timeframe bars, and this request's value can reach a trade, so the run stops with an error where it is evaluated.", "args": {"call": {"kind": "identifier"}}},
|
|
592
|
+
"PF-W1548": {"severity": "warning", "area": "support", "message": "{call}: no data is pinned for this request; the run stops with an error where it is evaluated.", "hint": "PineForge loads no other symbol''s lower-timeframe bars. Its value can reach a trade: it reaches {label}.", "explanation": "PineForge loads no other symbol's lower-timeframe bars, and this request's value can reach a trade, so the run stops with an error where it is evaluated.", "args": {"call": {"kind": "identifier"}, "label": {"kind": "text"}}},
|
|
593
|
+
"PF-W1549": {"severity": "warning", "area": "support", "message": "{call}: no data is pinned for this request; the run stops with an error where it is evaluated.", "hint": "PineForge loads no other symbol''s lower-timeframe bars. Its value can reach a trade: its expression calls {label}.", "explanation": "PineForge loads no other symbol's lower-timeframe bars, and this request's value can reach a trade, so the run stops with an error where it is evaluated.", "args": {"call": {"kind": "identifier"}, "label": {"kind": "text"}}},
|
|
594
|
+
"PF-W1550": {"severity": "warning", "area": "support", "message": "{call}: no data is pinned for this request; the run stops with an error where it is evaluated.", "hint": "PineForge loads no other symbol''s lower-timeframe bars. Its value can reach a trade: its expression calls {ns}.{name}.", "explanation": "PineForge loads no other symbol's lower-timeframe bars, and this request's value can reach a trade, so the run stops with an error where it is evaluated.", "args": {"call": {"kind": "identifier"}, "ns": {"kind": "identifier"}, "name": {"kind": "identifier"}}},
|
|
595
|
+
"PF-W1551": {"severity": "warning", "area": "support", "message": "{call}: its symbol can be another symbol''s, whose lower-timeframe bars PineForge reads from the chart.", "hint": "PineForge loads no other symbol''s lower-timeframe bars. Every reachable symbol value must resolve to syminfo.tickerid or syminfo.ticker for exact results.", "explanation": "The request.security_lower_tf symbol can be another symbol, but PineForge only has the chart's lower-timeframe bars and reads those, so results can differ.", "args": {"call": {"kind": "identifier"}}},
|
|
596
|
+
"PF-W1552": {"severity": "warning", "area": "support", "message": "{call}: its symbol can be another symbol''s, whose lower-timeframe bars PineForge reads from the chart; its value reaches only display/alert sinks, so trades are unaffected.", "hint": "PineForge loads no other symbol''s lower-timeframe bars. Every reachable symbol value must resolve to syminfo.tickerid or syminfo.ticker for exact results.", "explanation": "The lower-timeframe request may name another symbol but reads the chart's bars; its value only feeds plots, alerts or tables, so trades are unaffected.", "args": {"call": {"kind": "identifier"}}},
|
|
597
|
+
"PF-W2001": {"severity": "warning", "area": "analysis", "message": "Untyped parameter ''{param}'' of callable ''{callee}'' receives {shared} and {incoming} at its written calls; a copy per call path would exceed {max_family_variants} copies and four per written call, so PineForge types it {shared}, as its first call, and converts the other argument. Declare the parameter type to choose it.", "hint": null, "explanation": "An untyped parameter receives two argument types and one copy per call would be too many, so PineForge types it as the first call's; declare the type to choose.", "args": {"param": {"kind": "identifier"}, "callee": {"kind": "identifier"}, "shared": {"kind": "type"}, "incoming": {"kind": "type"}, "max_family_variants": {"kind": "number"}}},
|
|
598
|
+
"PF-W2002": {"severity": "warning", "area": "analysis", "message": "Untyped parameter ''{param}'' of callable ''{callee}'' receives {current} and {candidate} through calls that share one written-call variant (cs{cs_idx}); PineForge types it {current}, so the other argument is converted. Declare the parameter type to choose it.", "hint": null, "explanation": "An untyped parameter receives two argument types through calls sharing one variant; PineForge types it by the first and converts the other, so declare the type.", "args": {"param": {"kind": "identifier"}, "callee": {"kind": "identifier"}, "current": {"kind": "type"}, "candidate": {"kind": "type"}, "cs_idx": {"kind": "number"}}},
|
|
599
|
+
"PF-W2003": {"severity": "warning", "area": "analysis", "message": "(...)[...] reads an element of the selected current array in PineForge: no history of a selection is kept, where TradingView reads the array it selected that many bars back.", "hint": null, "explanation": "Indexing a selected array with [] reads the current array, since PineForge keeps no history of selections; TradingView reads the array from that many bars back.", "args": {}},
|
|
600
|
+
"PF-W2004": {"severity": "warning", "area": "analysis", "message": "input.source defval is not a native chart series (open, high, low, close, …); complex indicators or expressions are not supported in PineForge.", "hint": null, "explanation": "input.source needs a built-in chart series such as close as its default; indicators or other expressions are not supported in PineForge.", "args": {}},
|
|
601
|
+
"PF-W2005": {"severity": "warning", "area": "analysis", "message": "input.timeframe defval ''{defval}'' is not a typical Pine timeframe string.", "hint": null, "explanation": "The default of input.timeframe is not a usual Pine timeframe string such as 15, 1D or W; check its spelling.", "args": {"defval": {"kind": "identifier"}}},
|
|
602
|
+
"PF-W2006": {"severity": "warning", "area": "analysis", "message": "input.session defval ''{defval}'' may be invalid (expected e.g. ''24x7'', ''0930-1600'', or weekday flags).", "hint": null, "explanation": "The default of input.session may not be a valid session string; use forms like 24x7 or 0930-1600, optionally with weekday flags.", "args": {"defval": {"kind": "identifier"}}},
|
|
603
|
+
"PF-W2007": {"severity": "warning", "area": "analysis", "message": "input.string defval is not among the options list values.", "hint": null, "explanation": "The default of input.string is not among its listed options; choose a default that appears in the options list.", "args": {}},
|
|
604
|
+
"PF-W2008": {"severity": "warning", "area": "analysis", "message": "input.enum defval {ename}.{emem} is not a member of enum {ename}.", "hint": null, "explanation": "The default of input.enum names a member the enum does not declare; use one of the enum's own members.", "args": {"ename": {"kind": "identifier"}, "emem": {"kind": "identifier"}}},
|
|
605
|
+
"PF-W2009": {"severity": "warning", "area": "analysis", "message": "input defval ''{name}'' is not a known chart series (open, high, low, close, …); verify spelling or use a series variable.", "hint": null, "explanation": "The default of this input is not a known chart series such as close; check the spelling or use a series variable.", "args": {"name": {"kind": "identifier"}}},
|
|
606
|
+
"PF-W3001": {"severity": "warning", "area": "request-security", "message": "request.security timeframe reads ''{name}'', which the script reassigns: PineForge registers every request before the first bar, where it holds its initial value, and cannot compute it there (''{where}'' {reason})", "hint": null, "explanation": "The request.security timeframe reads a reassigned variable PineForge cannot compute before the first bar, so the request uses its initial value.", "args": {"name": {"kind": "identifier"}, "where": {"kind": "identifier"}, "reason": {"kind": "vocab", "values": ["is assigned a value it cannot compute there", "is assigned after the first request", "is not a scalar int, float, bool or string", "is not declared at the top level"]}}},
|
|
607
|
+
"PF-W3002": {"severity": "warning", "area": "request-security", "message": "request.security payload reads the history of ''{name}'', a parameter of ''{helper}'' whose argument PineForge does not recompute on the requested bars: it reads na", "hint": null, "explanation": "A request.security expression reads the history of a function parameter PineForge does not recompute on the requested bars, so the read gives na.", "args": {"name": {"kind": "identifier"}, "helper": {"kind": "identifier"}}},
|
|
608
|
+
"PF-W3003": {"severity": "warning", "area": "request-security", "message": "request.security payload reads the history of ''{name}'', a parameter of ''{helper}'' whose argument PineForge does not recompute on the requested bars: it reads the global ''{name}'' instead", "hint": null, "explanation": "A request.security expression reads the history of a function parameter PineForge does not recompute on requested bars, so it reads the same-named global instead.", "args": {"name": {"kind": "identifier"}, "helper": {"kind": "identifier"}}},
|
|
609
|
+
"PF-W3004": {"severity": "warning", "area": "request-security", "message": "request.security payload calls function ''{callee_name}'' on the chart''s bar: a payload inlines a function under a builtin call only when its body is a single expression and so is every user call it makes, directly or through a global''s value; TradingView evaluates it on the requested bar.", "hint": null, "explanation": "A function called in a request.security expression runs on the chart's bar, since under a builtin call PineForge inlines only single-expression functions and calls.", "args": {"callee_name": {"kind": "identifier"}}},
|
|
610
|
+
"PF-W3005": {"severity": "warning", "area": "request-security", "message": "request.security payload calls function ''{callee_name}'' on the chart''s bar: a payload inlines a method on the requested bar only for a scalar receiver and arguments and a single-expression body reading no mutable global, whose user calls, directly or through a global''s value, are single expressions too; TradingView evaluates it on the requested bar.", "hint": null, "explanation": "A user call in a request.security expression runs on the chart's bar, since PineForge inlines a method on the requested bar only for scalar, single-expression cases.", "args": {"callee_name": {"kind": "identifier"}}},
|
|
611
|
+
"PF-W3006": {"severity": "warning", "area": "request-security", "message": "request.security payload calls function ''{callee_name}'' on the chart''s bar: the evaluator cannot inline it ({reason}); TradingView evaluates it on the requested bar.", "hint": null, "explanation": "A function in a request.security expression runs on the chart's bar, not the requested one, because PineForge's evaluator cannot inline it for the stated reason.", "args": {"callee_name": {"kind": "identifier"}, "reason": {"kind": "text"}}},
|
|
612
|
+
"PF-W3007": {"severity": "warning", "area": "request-security", "message": "request.security payload calls method ''{callee_member}'' on the chart''s bar: a payload inlines a function under a builtin call only when its body is a single expression and so is every user call it makes, directly or through a global''s value; TradingView evaluates it on the requested bar.", "hint": null, "explanation": "A method called in a request.security expression runs on the chart's bar, since under a builtin call PineForge inlines only single-expression functions and calls.", "args": {"callee_member": {"kind": "identifier"}}},
|
|
613
|
+
"PF-W3008": {"severity": "warning", "area": "request-security", "message": "request.security payload calls method ''{callee_member}'' on the chart''s bar: a payload inlines a method on the requested bar only for a scalar receiver and arguments and a single-expression body reading no mutable global, whose user calls, directly or through a global''s value, are single expressions too; TradingView evaluates it on the requested bar.", "hint": null, "explanation": "A method called in a request.security expression runs on the chart's bar, since only scalar, single-expression methods are inlined on the requested bar.", "args": {"callee_member": {"kind": "identifier"}}},
|
|
614
|
+
"PF-W3009": {"severity": "warning", "area": "request-security", "message": "request.security payload calls method ''{callee_member}'' on the chart''s bar: the evaluator cannot inline it ({reason}); TradingView evaluates it on the requested bar.", "hint": null, "explanation": "A method in a request.security expression runs on the chart's bar, not the requested one, because PineForge's evaluator cannot inline it for the stated reason.", "args": {"callee_member": {"kind": "identifier"}, "reason": {"kind": "text"}}},
|
|
615
|
+
"PF-W3010": {"severity": "warning", "area": "request-security", "message": "request.security payload keeps its user calls under builtin calls and its methods on the chart''s bar, as before: {message} (line {line}); TradingView evaluates them on the requested bar.", "hint": null, "explanation": "PineForge keeps this request.security payload's user calls under builtin calls and its methods on the chart's bar, for the stated reason, unlike TradingView.", "args": {"message": {"kind": "text"}, "line": {"kind": "number"}}},
|
|
616
|
+
"PF-W3011": {"severity": "warning", "area": "request-security", "message": "request.security payload keeps its user calls under builtin calls and its methods on the chart''s bar, as before: {message}; TradingView evaluates them on the requested bar.", "hint": null, "explanation": "PineForge keeps this request.security payload's user calls under builtin calls and its methods on the chart's bar, for the stated reason, unlike TradingView.", "args": {"message": {"kind": "text"}}},
|
|
617
|
+
"PF-W3012": {"severity": "warning", "area": "request-security", "message": "request.security payload reads the history of ''{name}'', an element of a tuple declaration, on the chart''s bar; TradingView reads it on the requested bar.", "hint": null, "explanation": "A request.security expression reads the history of a tuple-declared variable on the chart's bar, where TradingView reads it on the requested bar.", "args": {"name": {"kind": "identifier"}}},
|
|
618
|
+
"PF-W3013": {"severity": "warning", "area": "request-security", "message": "request.security payload reads the history of ''{object_name}'' under a builtin call on the chart''s bar; TradingView evaluates it on the requested bar.", "hint": null, "explanation": "A request.security expression reads a variable's history inside a builtin call on the chart's bar, where TradingView evaluates it on the requested bar.", "args": {"object_name": {"kind": "identifier"}}},
|
|
619
|
+
"PF-W5001": {"severity": "warning", "area": "codegen", "message": "strategy(use_bar_magnifier=...) is not a literal bool: the generated strategy does not declare the bar magnifier, so a host runs it without one.", "hint": "Write use_bar_magnifier = true or false.", "explanation": "Write use_bar_magnifier as a literal true or false; any other expression is ignored, so the strategy declares no bar magnifier and the host runs without one.", "args": {}},
|
|
620
|
+
"PF-W5002": {"severity": "warning", "area": "codegen", "message": "input key ''{key}'' is shared by the inputs at {spots} and {spots2}: PineForge sets an input override by its title, else by the name of the declaration holding it, so one override sets all of them.", "hint": "Give each input its own title to override them apart.", "explanation": "Several inputs share one override key (their title, else their declaration's name), so one override sets all of them; give each input its own title.", "args": {"key": {"kind": "identifier"}, "spots": {"kind": "text"}, "spots2": {"kind": "text"}}},
|
|
621
|
+
"PF-W5003": {"severity": "warning", "area": "codegen", "message": "array.slice returns a copy in PineForge; TradingView slices share source elements, so writes through either array can diverge.", "hint": "Avoid mutating a slice or its source while the slice is used.", "explanation": "array.slice returns an independent copy in PineForge, while TradingView's slice shares elements, so avoid mutating a slice or its source while both are used.", "args": {}},
|
|
622
|
+
"PF-W5004": {"severity": "warning", "area": "codegen", "message": "A {kind} is stored as a 32-bit int in PineForge; this value can exceed int32, where TradingView''s int is 64-bit, and is truncated (or read as na) there.", "hint": "Declare the values float to keep every digit.", "explanation": "This collection element is stored as a 32-bit int, so a value beyond int32 is truncated or read as na, unlike TradingView's 64-bit int; declare the values float.", "args": {"kind": {"kind": "vocab", "values": ["map<..., int> value", "matrix<int> element"]}}},
|
|
623
|
+
"PF-W5005": {"severity": "warning", "area": "codegen", "message": "An {kind} is stored as a 32-bit int in PineForge; this value can exceed int32, where TradingView''s int is 64-bit, and is truncated (or read as na) there.", "hint": "Declare the values float to keep every digit.", "explanation": "This collection element is stored as a 32-bit int, so a value beyond int32 is truncated or read as na, unlike TradingView's 64-bit int; declare the values float.", "args": {"kind": {"kind": "vocab", "values": ["array<int> element"]}}},
|
|
624
|
+
"PF-W5006": {"severity": "warning", "area": "codegen", "message": "na() of a string reads the empty string as na: PineForge stores a string na as \"\", so an authored empty string is na here, while TradingView tells the two apart.", "hint": null, "explanation": "na() of a string treats the empty string as na because PineForge stores a string na as an empty string, so an authored empty string reads as na.", "args": {}},
|
|
625
|
+
"PF-W5007": {"severity": "warning", "area": "codegen", "message": "str.repeat is missing its count argument; PineForge emits an empty string for this invalid TradingView call.", "hint": null, "explanation": "str.repeat was called without its count argument, which TradingView rejects; PineForge emits an empty string instead.", "args": {}},
|
|
626
|
+
"PF-W5008": {"severity": "warning", "area": "codegen", "message": "str.repeat count can be na: PineForge returns an empty string for that value, while TradingView returns na string. The engine has no nullable string value.", "hint": "Check na(count) before calling str.repeat when the result affects strategy logic.", "explanation": "str.repeat's count can be na; PineForge then returns an empty string where TradingView returns na, so check na(count) first if the result drives logic.", "args": {}},
|
|
627
|
+
"PF-W5009": {"severity": "warning", "area": "codegen", "message": "session.{member} inside request.security keeps the time-of-day predicate at the security bar''s open time, which can differ from TradingView: {opens}a D/W/M bar, {daily} on TradingView, reads its open''s time of day. The chart''s own session flags read the engine''s session facts.", "hint": null, "explanation": "A session flag inside request.security is tested at the security bar's open time, which can differ from TradingView, notably for D/W/M bars.", "args": {"member": {"kind": "identifier"}, "opens": {"kind": "vocab", "values": ["", "a bar that opens in a session break and holds the reopen reads as out of market, and "]}, "daily": {"kind": "vocab", "values": ["always in market", "never post-market", "never pre-market"]}}},
|
|
628
|
+
"PF-W5010": {"severity": "warning", "area": "codegen", "message": "{object_name}[...] reads the current {kind} in PineForge: no history of this parameter is kept, where TradingView reads the copy the call that many calls back left (fixtures/array_history_tv ahist_fn).", "hint": null, "explanation": "Indexing a function parameter's array or matrix with [] reads the current collection in PineForge, while TradingView reads the copy from that many calls back.", "args": {"object_name": {"kind": "identifier"}, "kind": {"kind": "vocab", "values": ["array", "matrix"]}}},
|
|
629
|
+
"PF-W5011": {"severity": "warning", "area": "codegen", "message": "{object_name}[...] reads the current {name} reference in PineForge: no history of this variable is kept here, where TradingView reads the reference it held that many bars back.", "hint": null, "explanation": "Indexing an object or drawing variable with [] reads its current reference in PineForge, while TradingView reads the reference it held that many bars back.", "args": {"object_name": {"kind": "identifier"}, "name": {"kind": "type"}}},
|
|
630
|
+
"PF-W5012": {"severity": "warning", "area": "codegen", "message": "{kind} history indexing uses the current collection element in PineForge; the engine does not retain per-bar collection IDs, so this result can differ from TradingView and a missing index is not represented faithfully.", "hint": null, "explanation": "History indexing of an array or map reads the current element, as PineForge keeps no per-bar collection history, so results can differ from TradingView.", "args": {"kind": {"kind": "vocab", "values": ["array", "map"]}}}
|
|
631
|
+
}}
|