Skip to content

v6.13.2

Latest

Choose a tag to compare

@wallneradam wallneradam released this 09 Nov 14:22
· 5 commits to main since this release

Fixes

  • Pine semantics, measured on TradingView (#107):
    • bool() of a constant number is exact: bool(1e-10) is true in v5 and v6, as on TradingView. The constant is folded at transform time; a series or input value keeps the 1e-10 tolerance of the runtime cast.
    • Under the v4/v5 three-state bool (na_bool), bool(na) is na, not false. In v6 mode it stays false.
    • for loops: a by of zero or below stops the script with an error, also on a descending loop, because by is the size of the step and the direction comes from from and to. A negative step used to be flipped and the loop ran. A na step is no error: the loop runs once and ends.
    • for loops with a fractional counter compare the end with Pine's tolerance, so for i = 1.0 to 0.1 by 0.3 runs four times, not three.
    • pine_loop gains an entry=True mode (entering, enter(by)) that evaluates a v6 loop header in TradingView's order: from, to, by, then to before every iteration, every read of to being the same call site. PyneComp emits it for a header that calls something with an effect or state; code compiled without it runs as before.
    • strategy() takes its positional arguments in Pine's order: calc_on_every_history_tick moved after behind_chart, so the 10th positional argument is max_bars_back and the 13th default_qty_value.
  • Legacy OHLCV files: the bar count leaves out the phantom gap records the reader skips, so last_bar_index matches the last bar the script sees.
  • Edge profile: the gate accepts the names PyneComp generates for a var block initializer, for the call-history alias of an outer series and for a renamed loop counter, so compiled scripts no longer get "not Pine" diagnostics (errors under PYNE_EDGE_STRICT=1).
  • pyne robustness coin-flip tests:
    • An early stop no longer hangs: each worker has its own pipe, and workers get a shared 5 s deadline before they are killed. A worker that dies during a draw raises an error naming the draw and its exit code, and an error inside a draw reaches the caller with the worker's traceback.
    • Stopped workers no longer print an ignored SystemExit, and a stop during a draw takes effect at the next bar instead of after the stop timeout.
  • Native transformer: a SystemExit or KeyboardInterrupt raised inside a host callback is re-raised instead of making the transform fall back silently to the Python steps.
  • Broker:
    • A partial close that takes the parent's whole position leaves the native stop in place. The stop update used to hit the already closed deal (cTrader POSITION_NOT_FOUND, Capital.com error.not-found.dealId) and fell back to a degrading fail-safe; a close that did not fill would have left the parent without its stop.
    • The log line for a partial bracket that keeps its classification names the actual cause.