You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The documentation ships inside the package. The build copies the repository's docs/ into the wheel as pynecore/docs/, and the sdist includes it, so an installed PyneCore carries the documentation of its own version. pynecore.docs_path() returns that directory, or the source tree's docs/ in an editable install.
display.pine_screener is available; it was missing, so a compiled script using it failed at run time.
Fixes
Sharpe and Sortino ratios follow TradingView's monthly rule. They used to be annualized daily returns of a per-bar equity curve, which matched nothing TradingView reports. Each closed trade's profit is now booked to the UTC month it closed in, the open profit to the last bar's month, monthly returns are measured against equity rolled forward from the initial capital, the excess return is taken over risk_free_rate / 12, and neither ratio is annualized. The monthly ledger covers the whole run, beyond the closed-trade history cap. Reproduced bit for bit on 16 TradingView strategy reports.
display.* and text.format_* are bit sets, as on TradingView. The display.* constants were sequential integers, so sums collided (display.data_window + display.pane == display.price_scale), and text.format_bold + text.format_italic concatenated to "bolditalic". Both now carry TradingView's measured bit values; + is a union and - a difference, adding a flag that is already set or removing one that is not changes nothing, and the result keeps its type. (#102)
math.round: the integer rounding compares the fraction against 0.5 instead of flooring x + 0.5, which rounded 0.49999999999999994 up to 1. The 10**-p scale of a rounding with a precision comes from the portable pine_math kernel instead of the platform libm.
ta.alma computes its Gaussian weights, and the strategy report its price rounding, with the portable kernels instead of the platform libm, whose results differ per system.
Constant folding of math.round and math.pow follows TradingView's parser. A constant math.round rounds to 15 decimal places first; with a positive precision it scales the whole number, so a constant math.round(1.245, 1) is 1.3 where a series one is 1.2. A constant math.pow folds with fdlibm's pow without the exponent tail, which is one ulp off StrictMath in places (math.pow(10, -4) embeds 9.999999999999999e-05), tested against 452 measured constants. The native fold matches, including fractional precisions.
request.security in libraries: a library context's clone dropped prologue statements that only an exported function read (for example a captured close history), so the context failed with a NameError. Export detection also recognises an aliased export import.
Live runs settle broker fills before disconnecting. A stop signalled while the live stream waited for the next bar disconnected a plugin that is both provider and broker before the runner settled the fills of already-dispatched orders, so a fresh entry could be left without its exit. The settle now runs before the teardown, once per stop, and a lost broker connection ends it with a warning instead of an uncaught error.
Broker restarts and operator resumes:
An exit re-declared after a restart is no longer re-sent under the client order ids of a dispatch that has already filled or closed; it goes out under fresh ids. Previously an idempotent venue returned the filled leg as if it had just been placed and the engine could halt on an unplaceable defensive close.
Legs of an earlier dispatch of the same exit that still rest on the venue are cancelled before the fresh bracket goes out, instead of resting next to it until a reduce-only venue refused the new leg.
Startup adoption recovers the real parent entry id from the run's live entry rows too, so on inverse contracts an operator resume restores a stop the operator removed.
Run-scoped journal queries no longer filter by symbol spelling (chart ticker vs. venue wire name), so on Bybit perpetuals an operator resume finds the exit legs and restores a removed take-profit or stop.
A rejected synthetic close no longer logs an ERROR next to its owner's own handling; the owner picks the level.
Plugin config files stay out of Git: the config/ directory of a workdir gets a .gitignore, as its files can hold API keys and broker credentials.
Native transform: a float that is an exact tie between two shortest spellings is written with the even last digit, as CPython's repr does.
Changes
The --viz stream writes a display value and a drawing's text_formatting as the list of its flag names in bit order ([] for none) instead of a single name. Its format version is now 2.
Tests
The security ring test checks the child's results only after the child exits, so a slow child no longer fails it. (#103)
The source-location checks skip the PEP 649 prologue and __annotate__ code objects on Python 3.14.