oakscriptjs 0.8.1 → 0.9.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 +1 -1
- package/README.md +31 -9
- package/dist/cjs/array/index.d.ts +701 -0
- package/dist/cjs/array/index.d.ts.map +1 -0
- package/dist/cjs/array/index.js +392 -0
- package/dist/cjs/array/index.js.map +7 -0
- package/dist/cjs/box/index.d.ts +444 -0
- package/dist/cjs/box/index.d.ts.map +1 -0
- package/dist/cjs/box/index.js +246 -0
- package/dist/cjs/box/index.js.map +7 -0
- package/dist/cjs/callsite/index.d.ts +61 -0
- package/dist/cjs/callsite/index.d.ts.map +1 -0
- package/dist/cjs/callsite/index.js +65 -0
- package/dist/cjs/callsite/index.js.map +7 -0
- package/dist/cjs/chartpoint/index.d.ts +90 -0
- package/dist/cjs/chartpoint/index.d.ts.map +1 -0
- package/dist/cjs/chartpoint/index.js +56 -0
- package/dist/cjs/chartpoint/index.js.map +7 -0
- package/dist/cjs/color/index.d.ts +285 -0
- package/dist/cjs/color/index.d.ts.map +1 -0
- package/dist/cjs/color/index.js +143 -0
- package/dist/cjs/color/index.js.map +7 -0
- package/dist/cjs/compare/index.d.ts +26 -0
- package/dist/cjs/compare/index.d.ts.map +1 -0
- package/dist/cjs/compare/index.js +50 -0
- package/dist/cjs/compare/index.js.map +7 -0
- package/dist/cjs/drawing/registry.d.ts +42 -0
- package/dist/cjs/drawing/registry.d.ts.map +1 -0
- package/dist/cjs/drawing/registry.js +87 -0
- package/dist/cjs/drawing/registry.js.map +7 -0
- package/dist/cjs/index.d.ts +85 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +184 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/indicator.d.ts +117 -0
- package/dist/cjs/indicator.d.ts.map +1 -0
- package/dist/cjs/indicator.js +74 -0
- package/dist/cjs/indicator.js.map +7 -0
- package/dist/cjs/input.d.ts +196 -0
- package/dist/cjs/input.d.ts.map +1 -0
- package/dist/cjs/input.js +197 -0
- package/dist/cjs/input.js.map +7 -0
- package/dist/cjs/label/index.d.ts +303 -0
- package/dist/cjs/label/index.d.ts.map +1 -0
- package/dist/cjs/label/index.js +190 -0
- package/dist/cjs/label/index.js.map +7 -0
- package/dist/cjs/lib/index.d.ts +8 -0
- package/dist/cjs/lib/index.d.ts.map +1 -0
- package/dist/cjs/lib/index.js +19 -0
- package/dist/cjs/lib/index.js.map +7 -0
- package/dist/{lib → cjs/lib}/zigzag/index.d.ts +4 -1
- package/dist/cjs/lib/zigzag/index.d.ts.map +1 -0
- package/dist/cjs/lib/zigzag/index.js +27 -0
- package/dist/cjs/lib/zigzag/index.js.map +7 -0
- package/dist/cjs/lib/zigzag/zigzag.d.ts +100 -0
- package/dist/cjs/lib/zigzag/zigzag.d.ts.map +1 -0
- package/dist/cjs/lib/zigzag/zigzag.js +207 -0
- package/dist/cjs/lib/zigzag/zigzag.js.map +7 -0
- package/dist/cjs/line/index.d.ts +342 -0
- package/dist/cjs/line/index.d.ts.map +1 -0
- package/dist/cjs/line/index.js +193 -0
- package/dist/cjs/line/index.js.map +7 -0
- package/dist/cjs/linefill/index.d.ts +124 -0
- package/dist/cjs/linefill/index.d.ts.map +1 -0
- package/dist/cjs/linefill/index.js +56 -0
- package/dist/cjs/linefill/index.js.map +7 -0
- package/dist/cjs/map/index.d.ts +69 -0
- package/dist/cjs/map/index.d.ts.map +1 -0
- package/dist/cjs/map/index.js +80 -0
- package/dist/cjs/map/index.js.map +7 -0
- package/dist/cjs/math/index.d.ts +560 -0
- package/dist/cjs/math/index.d.ts.map +1 -0
- package/dist/cjs/math/index.js +441 -0
- package/dist/cjs/math/index.js.map +7 -0
- package/dist/cjs/matrix/index.d.ts +1231 -0
- package/dist/cjs/matrix/index.d.ts.map +1 -0
- package/dist/cjs/matrix/index.js +1200 -0
- package/dist/cjs/matrix/index.js.map +7 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/plot.d.ts +76 -0
- package/dist/cjs/plot.d.ts.map +1 -0
- package/dist/cjs/plot.js +51 -0
- package/dist/cjs/plot.js.map +7 -0
- package/dist/cjs/polyline/index.d.ts +115 -0
- package/dist/cjs/polyline/index.d.ts.map +1 -0
- package/dist/cjs/polyline/index.js +76 -0
- package/dist/cjs/polyline/index.js.map +7 -0
- package/dist/cjs/runtime/adapters/LightweightChartsAdapter.d.ts +86 -0
- package/dist/cjs/runtime/adapters/LightweightChartsAdapter.d.ts.map +1 -0
- package/dist/cjs/runtime/adapters/LightweightChartsAdapter.js +141 -0
- package/dist/cjs/runtime/adapters/LightweightChartsAdapter.js.map +7 -0
- package/dist/cjs/runtime/adapters/SimpleInputAdapter.d.ts +59 -0
- package/dist/cjs/runtime/adapters/SimpleInputAdapter.d.ts.map +1 -0
- package/dist/cjs/runtime/adapters/SimpleInputAdapter.js +117 -0
- package/dist/cjs/runtime/adapters/SimpleInputAdapter.js.map +7 -0
- package/dist/{runtime → cjs/runtime}/index.d.ts +12 -5
- package/dist/cjs/runtime/index.d.ts.map +1 -0
- package/dist/cjs/runtime/index.js +49 -0
- package/dist/cjs/runtime/index.js.map +7 -0
- package/dist/cjs/runtime/inputs.d.ts +91 -0
- package/dist/cjs/runtime/inputs.d.ts.map +1 -0
- package/dist/cjs/runtime/inputs.js +262 -0
- package/dist/cjs/runtime/inputs.js.map +7 -0
- package/dist/cjs/runtime/runtime.d.ts +70 -0
- package/dist/cjs/runtime/runtime.d.ts.map +1 -0
- package/dist/cjs/runtime/runtime.js +148 -0
- package/dist/cjs/runtime/runtime.js.map +7 -0
- package/dist/cjs/runtime/series.d.ts +362 -0
- package/dist/cjs/runtime/series.d.ts.map +1 -0
- package/dist/cjs/runtime/series.js +560 -0
- package/dist/cjs/runtime/series.js.map +7 -0
- package/dist/cjs/runtime/types.d.ts +282 -0
- package/dist/cjs/runtime/types.d.ts.map +1 -0
- package/dist/cjs/runtime/types.js +17 -0
- package/dist/cjs/runtime/types.js.map +7 -0
- package/dist/cjs/script/index.d.ts +987 -0
- package/dist/cjs/script/index.d.ts.map +1 -0
- package/dist/cjs/script/index.js +1169 -0
- package/dist/cjs/script/index.js.map +7 -0
- package/dist/cjs/security/resample.d.ts +63 -0
- package/dist/cjs/security/resample.d.ts.map +1 -0
- package/dist/cjs/security/resample.js +84 -0
- package/dist/cjs/security/resample.js.map +7 -0
- package/dist/cjs/session/bars.d.ts +80 -0
- package/dist/cjs/session/bars.d.ts.map +1 -0
- package/dist/cjs/session/bars.js +219 -0
- package/dist/cjs/session/bars.js.map +7 -0
- package/dist/cjs/session/calendar.d.ts +70 -0
- package/dist/cjs/session/calendar.d.ts.map +1 -0
- package/dist/cjs/session/calendar.js +164 -0
- package/dist/cjs/session/calendar.js.map +7 -0
- package/dist/cjs/str/dateformat.d.ts +15 -0
- package/dist/cjs/str/dateformat.d.ts.map +1 -0
- package/dist/cjs/str/dateformat.js +149 -0
- package/dist/cjs/str/dateformat.js.map +7 -0
- package/dist/cjs/str/index.d.ts +459 -0
- package/dist/cjs/str/index.d.ts.map +1 -0
- package/dist/cjs/str/index.js +143 -0
- package/dist/cjs/str/index.js.map +7 -0
- package/dist/cjs/str/messageformat.d.ts +14 -0
- package/dist/cjs/str/messageformat.d.ts.map +1 -0
- package/dist/cjs/str/messageformat.js +114 -0
- package/dist/cjs/str/messageformat.js.map +7 -0
- package/dist/cjs/str/numberformat.d.ts +19 -0
- package/dist/cjs/str/numberformat.d.ts.map +1 -0
- package/dist/cjs/str/numberformat.js +170 -0
- package/dist/cjs/str/numberformat.js.map +7 -0
- package/dist/{strategy → cjs/strategy}/index.d.ts +50 -0
- package/dist/cjs/strategy/index.d.ts.map +1 -0
- package/dist/cjs/strategy/index.js +92 -0
- package/dist/cjs/strategy/index.js.map +7 -0
- package/dist/cjs/ta/index.d.ts +1397 -0
- package/dist/cjs/ta/index.d.ts.map +1 -0
- package/dist/cjs/ta/index.js +1715 -0
- package/dist/cjs/ta/index.js.map +7 -0
- package/dist/cjs/ta/running-sum.d.ts +30 -0
- package/dist/cjs/ta/running-sum.d.ts.map +1 -0
- package/dist/cjs/ta/running-sum.js +99 -0
- package/dist/cjs/ta/running-sum.js.map +7 -0
- package/dist/cjs/ta-series.d.ts +558 -0
- package/dist/cjs/ta-series.d.ts.map +1 -0
- package/dist/cjs/ta-series.js +606 -0
- package/dist/cjs/ta-series.js.map +7 -0
- package/dist/cjs/text/index.d.ts +14 -0
- package/dist/cjs/text/index.d.ts.map +1 -0
- package/dist/cjs/text/index.js +29 -0
- package/dist/cjs/text/index.js.map +7 -0
- package/dist/cjs/time/datestring.d.ts +23 -0
- package/dist/cjs/time/datestring.d.ts.map +1 -0
- package/dist/cjs/time/datestring.js +106 -0
- package/dist/cjs/time/datestring.js.map +7 -0
- package/dist/cjs/time/index.d.ts +89 -0
- package/dist/cjs/time/index.d.ts.map +1 -0
- package/dist/cjs/time/index.js +85 -0
- package/dist/cjs/time/index.js.map +7 -0
- package/dist/cjs/time/session.d.ts +17 -0
- package/dist/cjs/time/session.d.ts.map +1 -0
- package/dist/cjs/time/session.js +65 -0
- package/dist/cjs/time/session.js.map +7 -0
- package/dist/cjs/time/timezone.d.ts +40 -0
- package/dist/cjs/time/timezone.d.ts.map +1 -0
- package/dist/cjs/time/timezone.js +125 -0
- package/dist/cjs/time/timezone.js.map +7 -0
- package/dist/cjs/timeframe/index.d.ts +73 -0
- package/dist/cjs/timeframe/index.d.ts.map +1 -0
- package/dist/cjs/timeframe/index.js +85 -0
- package/dist/cjs/timeframe/index.js.map +7 -0
- package/dist/cjs/types/index.d.ts +343 -0
- package/dist/cjs/types/index.d.ts.map +1 -0
- package/dist/cjs/types/index.js +32 -0
- package/dist/cjs/types/index.js.map +7 -0
- package/dist/cjs/types/metadata.d.ts +300 -0
- package/dist/cjs/types/metadata.d.ts.map +1 -0
- package/dist/cjs/types/metadata.js +17 -0
- package/dist/cjs/types/metadata.js.map +7 -0
- package/dist/cjs/utils/index.d.ts +167 -0
- package/dist/cjs/utils/index.d.ts.map +1 -0
- package/dist/cjs/utils/index.js +209 -0
- package/dist/cjs/utils/index.js.map +7 -0
- package/dist/esm/array/index.d.ts +701 -0
- package/dist/esm/array/index.d.ts.map +1 -0
- package/dist/esm/array/index.js +983 -0
- package/dist/esm/array/index.js.map +1 -0
- package/dist/esm/box/index.d.ts +444 -0
- package/dist/esm/box/index.d.ts.map +1 -0
- package/dist/esm/box/index.js +602 -0
- package/dist/esm/box/index.js.map +1 -0
- package/dist/esm/callsite/index.d.ts +61 -0
- package/dist/esm/callsite/index.d.ts.map +1 -0
- package/dist/esm/callsite/index.js +97 -0
- package/dist/esm/callsite/index.js.map +1 -0
- package/dist/esm/chartpoint/index.d.ts +90 -0
- package/dist/esm/chartpoint/index.d.ts.map +1 -0
- package/dist/esm/chartpoint/index.js +113 -0
- package/dist/esm/chartpoint/index.js.map +1 -0
- package/dist/esm/color/index.d.ts +285 -0
- package/dist/esm/color/index.d.ts.map +1 -0
- package/dist/esm/color/index.js +373 -0
- package/dist/esm/color/index.js.map +1 -0
- package/dist/esm/compare/index.d.ts +26 -0
- package/dist/esm/compare/index.d.ts.map +1 -0
- package/dist/esm/compare/index.js +39 -0
- package/dist/esm/compare/index.js.map +1 -0
- package/dist/esm/drawing/registry.d.ts +42 -0
- package/dist/esm/drawing/registry.d.ts.map +1 -0
- package/dist/esm/drawing/registry.js +89 -0
- package/dist/esm/drawing/registry.js.map +1 -0
- package/dist/esm/index.d.ts +85 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +96 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/indicator.d.ts +117 -0
- package/dist/esm/indicator.d.ts.map +1 -0
- package/dist/esm/indicator.js +84 -0
- package/dist/esm/indicator.js.map +1 -0
- package/dist/esm/input.d.ts +196 -0
- package/dist/esm/input.d.ts.map +1 -0
- package/dist/esm/input.js +183 -0
- package/dist/esm/input.js.map +1 -0
- package/dist/esm/label/index.d.ts +303 -0
- package/dist/esm/label/index.d.ts.map +1 -0
- package/dist/esm/label/index.js +417 -0
- package/dist/esm/label/index.js.map +1 -0
- package/dist/esm/lib/index.d.ts +8 -0
- package/dist/esm/lib/index.d.ts.map +1 -0
- package/dist/esm/lib/index.js +8 -0
- package/dist/esm/lib/index.js.map +1 -0
- package/dist/esm/lib/zigzag/index.d.ts +5 -0
- package/dist/esm/lib/zigzag/index.d.ts.map +1 -0
- package/dist/esm/lib/zigzag/index.js +5 -0
- package/dist/esm/lib/zigzag/index.js.map +1 -0
- package/dist/esm/lib/zigzag/zigzag.d.ts +100 -0
- package/dist/esm/lib/zigzag/zigzag.d.ts.map +1 -0
- package/dist/esm/lib/zigzag/zigzag.js +229 -0
- package/dist/esm/lib/zigzag/zigzag.js.map +1 -0
- package/dist/esm/line/index.d.ts +342 -0
- package/dist/esm/line/index.d.ts.map +1 -0
- package/dist/esm/line/index.js +470 -0
- package/dist/esm/line/index.js.map +1 -0
- package/dist/esm/linefill/index.d.ts +124 -0
- package/dist/esm/linefill/index.d.ts.map +1 -0
- package/dist/esm/linefill/index.js +144 -0
- package/dist/esm/linefill/index.js.map +1 -0
- package/dist/esm/map/index.d.ts +69 -0
- package/dist/esm/map/index.d.ts.map +1 -0
- package/dist/esm/map/index.js +106 -0
- package/dist/esm/map/index.js.map +1 -0
- package/dist/esm/math/index.d.ts +560 -0
- package/dist/esm/math/index.d.ts.map +1 -0
- package/dist/esm/math/index.js +495 -0
- package/dist/esm/math/index.js.map +1 -0
- package/dist/esm/matrix/index.d.ts +1231 -0
- package/dist/esm/matrix/index.d.ts.map +1 -0
- package/dist/esm/matrix/index.js +2450 -0
- package/dist/esm/matrix/index.js.map +1 -0
- package/dist/esm/plot.d.ts +76 -0
- package/dist/esm/plot.d.ts.map +1 -0
- package/dist/esm/plot.js +63 -0
- package/dist/esm/plot.js.map +1 -0
- package/dist/esm/polyline/index.d.ts +115 -0
- package/dist/esm/polyline/index.d.ts.map +1 -0
- package/dist/esm/polyline/index.js +157 -0
- package/dist/esm/polyline/index.js.map +1 -0
- package/dist/esm/runtime/adapters/LightweightChartsAdapter.d.ts +86 -0
- package/dist/esm/runtime/adapters/LightweightChartsAdapter.d.ts.map +1 -0
- package/dist/esm/runtime/adapters/LightweightChartsAdapter.js +140 -0
- package/dist/esm/runtime/adapters/LightweightChartsAdapter.js.map +1 -0
- package/dist/esm/runtime/adapters/SimpleInputAdapter.d.ts +59 -0
- package/dist/esm/runtime/adapters/SimpleInputAdapter.d.ts.map +1 -0
- package/dist/esm/runtime/adapters/SimpleInputAdapter.js +115 -0
- package/dist/esm/runtime/adapters/SimpleInputAdapter.js.map +1 -0
- package/dist/esm/runtime/index.d.ts +13 -0
- package/dist/esm/runtime/index.d.ts.map +1 -0
- package/dist/esm/runtime/index.js +14 -0
- package/dist/esm/runtime/index.js.map +1 -0
- package/dist/esm/runtime/inputs.d.ts +91 -0
- package/dist/esm/runtime/inputs.d.ts.map +1 -0
- package/dist/esm/runtime/inputs.js +334 -0
- package/dist/esm/runtime/inputs.js.map +1 -0
- package/dist/esm/runtime/runtime.d.ts +70 -0
- package/dist/esm/runtime/runtime.d.ts.map +1 -0
- package/dist/esm/runtime/runtime.js +193 -0
- package/dist/esm/runtime/runtime.js.map +1 -0
- package/dist/esm/runtime/series.d.ts +362 -0
- package/dist/esm/runtime/series.d.ts.map +1 -0
- package/dist/esm/runtime/series.js +583 -0
- package/dist/esm/runtime/series.js.map +1 -0
- package/dist/esm/runtime/types.d.ts +282 -0
- package/dist/esm/runtime/types.d.ts.map +1 -0
- package/dist/esm/runtime/types.js +7 -0
- package/dist/esm/runtime/types.js.map +1 -0
- package/dist/esm/script/index.d.ts +987 -0
- package/dist/esm/script/index.d.ts.map +1 -0
- package/dist/esm/script/index.js +1289 -0
- package/dist/esm/script/index.js.map +1 -0
- package/dist/esm/security/resample.d.ts +63 -0
- package/dist/esm/security/resample.d.ts.map +1 -0
- package/dist/esm/security/resample.js +110 -0
- package/dist/esm/security/resample.js.map +1 -0
- package/dist/esm/session/bars.d.ts +80 -0
- package/dist/esm/session/bars.d.ts.map +1 -0
- package/dist/esm/session/bars.js +232 -0
- package/dist/esm/session/bars.js.map +1 -0
- package/dist/esm/session/calendar.d.ts +70 -0
- package/dist/esm/session/calendar.d.ts.map +1 -0
- package/dist/esm/session/calendar.js +172 -0
- package/dist/esm/session/calendar.js.map +1 -0
- package/dist/esm/str/dateformat.d.ts +15 -0
- package/dist/esm/str/dateformat.d.ts.map +1 -0
- package/dist/esm/str/dateformat.js +136 -0
- package/dist/esm/str/dateformat.js.map +1 -0
- package/dist/esm/str/index.d.ts +459 -0
- package/dist/esm/str/index.d.ts.map +1 -0
- package/dist/esm/str/index.js +540 -0
- package/dist/esm/str/index.js.map +1 -0
- package/dist/esm/str/messageformat.d.ts +14 -0
- package/dist/esm/str/messageformat.d.ts.map +1 -0
- package/dist/esm/str/messageformat.js +111 -0
- package/dist/esm/str/messageformat.js.map +1 -0
- package/dist/esm/str/numberformat.d.ts +19 -0
- package/dist/esm/str/numberformat.d.ts.map +1 -0
- package/dist/esm/str/numberformat.js +189 -0
- package/dist/esm/str/numberformat.js.map +1 -0
- package/dist/esm/strategy/index.d.ts +245 -0
- package/dist/esm/strategy/index.d.ts.map +1 -0
- package/dist/esm/strategy/index.js +84 -0
- package/dist/esm/strategy/index.js.map +1 -0
- package/dist/esm/ta/index.d.ts +1397 -0
- package/dist/esm/ta/index.d.ts.map +1 -0
- package/dist/esm/ta/index.js +3227 -0
- package/dist/esm/ta/index.js.map +1 -0
- package/dist/esm/ta/running-sum.d.ts +30 -0
- package/dist/esm/ta/running-sum.d.ts.map +1 -0
- package/dist/esm/ta/running-sum.js +113 -0
- package/dist/esm/ta/running-sum.js.map +1 -0
- package/dist/esm/ta-series.d.ts +558 -0
- package/dist/esm/ta-series.d.ts.map +1 -0
- package/dist/esm/ta-series.js +910 -0
- package/dist/esm/ta-series.js.map +1 -0
- package/dist/esm/text/index.d.ts +14 -0
- package/dist/esm/text/index.d.ts.map +1 -0
- package/dist/esm/text/index.js +14 -0
- package/dist/esm/text/index.js.map +1 -0
- package/dist/esm/time/datestring.d.ts +23 -0
- package/dist/esm/time/datestring.d.ts.map +1 -0
- package/dist/esm/time/datestring.js +94 -0
- package/dist/esm/time/datestring.js.map +1 -0
- package/dist/esm/time/index.d.ts +89 -0
- package/dist/esm/time/index.d.ts.map +1 -0
- package/dist/esm/time/index.js +108 -0
- package/dist/esm/time/index.js.map +1 -0
- package/dist/esm/time/session.d.ts +17 -0
- package/dist/esm/time/session.d.ts.map +1 -0
- package/dist/esm/time/session.js +69 -0
- package/dist/esm/time/session.js.map +1 -0
- package/dist/esm/time/timezone.d.ts +40 -0
- package/dist/esm/time/timezone.d.ts.map +1 -0
- package/dist/esm/time/timezone.js +144 -0
- package/dist/esm/time/timezone.js.map +1 -0
- package/dist/esm/timeframe/index.d.ts +73 -0
- package/dist/esm/timeframe/index.d.ts.map +1 -0
- package/dist/esm/timeframe/index.js +131 -0
- package/dist/esm/timeframe/index.js.map +1 -0
- package/dist/esm/types/index.d.ts +343 -0
- package/dist/esm/types/index.d.ts.map +1 -0
- package/dist/esm/types/index.js +17 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/metadata.d.ts +300 -0
- package/dist/esm/types/metadata.d.ts.map +1 -0
- package/dist/esm/types/metadata.js +7 -0
- package/dist/esm/types/metadata.js.map +1 -0
- package/dist/esm/utils/index.d.ts +167 -0
- package/dist/esm/utils/index.d.ts.map +1 -0
- package/dist/esm/utils/index.js +295 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/package.json +53 -23
- package/src/array/index.ts +1056 -0
- package/src/box/index.ts +680 -0
- package/src/callsite/index.ts +104 -0
- package/src/chartpoint/index.ts +126 -0
- package/src/color/index.ts +411 -0
- package/src/compare/index.ts +46 -0
- package/src/drawing/registry.ts +106 -0
- package/src/index.ts +201 -0
- package/src/indicator.ts +185 -0
- package/src/input.ts +280 -0
- package/src/label/index.ts +490 -0
- package/src/lib/index.ts +8 -0
- package/src/lib/zigzag/index.ts +13 -0
- package/src/lib/zigzag/zigzag.ts +318 -0
- package/src/line/index.ts +530 -0
- package/src/linefill/index.ts +152 -0
- package/src/map/index.ts +115 -0
- package/src/math/index.ts +1071 -0
- package/src/matrix/index.ts +2697 -0
- package/src/plot.ts +121 -0
- package/src/polyline/index.ts +184 -0
- package/src/runtime/adapters/LightweightChartsAdapter.ts +201 -0
- package/src/runtime/adapters/SimpleInputAdapter.ts +132 -0
- package/src/runtime/index.ts +52 -0
- package/src/runtime/inputs.ts +377 -0
- package/src/runtime/runtime.ts +241 -0
- package/src/runtime/series.ts +644 -0
- package/src/runtime/types.ts +292 -0
- package/src/script/index.ts +1865 -0
- package/src/security/resample.ts +119 -0
- package/src/session/bars.ts +262 -0
- package/src/session/calendar.ts +199 -0
- package/src/str/dateformat.ts +104 -0
- package/src/str/index.ts +557 -0
- package/src/str/messageformat.ts +109 -0
- package/src/str/numberformat.ts +197 -0
- package/src/strategy/index.ts +281 -0
- package/src/ta/index.ts +3580 -0
- package/src/ta/running-sum.ts +117 -0
- package/src/ta-series.ts +1036 -0
- package/src/text/index.ts +14 -0
- package/src/time/datestring.ts +96 -0
- package/src/time/index.ts +161 -0
- package/src/time/session.ts +79 -0
- package/src/time/timezone.ts +180 -0
- package/src/timeframe/index.ts +144 -0
- package/src/types/index.ts +398 -0
- package/src/types/metadata.ts +334 -0
- package/src/utils/index.ts +334 -0
- package/dist/array/index.d.ts +0 -57
- package/dist/array/index.d.ts.map +0 -1
- package/dist/box/index.d.ts +0 -37
- package/dist/box/index.d.ts.map +0 -1
- package/dist/callsite/index.d.ts +0 -7
- package/dist/callsite/index.d.ts.map +0 -1
- package/dist/chartpoint/index.d.ts +0 -8
- package/dist/chartpoint/index.d.ts.map +0 -1
- package/dist/color/index.d.ts +0 -28
- package/dist/color/index.d.ts.map +0 -1
- package/dist/compare/index.d.ts +0 -8
- package/dist/compare/index.d.ts.map +0 -1
- package/dist/drawing/registry.d.ts +0 -19
- package/dist/drawing/registry.d.ts.map +0 -1
- package/dist/index.cjs +0 -7979
- package/dist/index.d.ts +0 -64
- package/dist/index.d.ts.map +0 -1
- package/dist/index.mjs +0 -7962
- package/dist/indicator.d.ts +0 -42
- package/dist/indicator.d.ts.map +0 -1
- package/dist/input.d.ts +0 -47
- package/dist/input.d.ts.map +0 -1
- package/dist/label/index.d.ts +0 -30
- package/dist/label/index.d.ts.map +0 -1
- package/dist/lib/index.d.ts +0 -2
- package/dist/lib/index.d.ts.map +0 -1
- package/dist/lib/zigzag/index.d.ts.map +0 -1
- package/dist/lib/zigzag/zigzag.d.ts +0 -47
- package/dist/lib/zigzag/zigzag.d.ts.map +0 -1
- package/dist/line/index.d.ts +0 -30
- package/dist/line/index.d.ts.map +0 -1
- package/dist/linefill/index.d.ts +0 -10
- package/dist/linefill/index.d.ts.map +0 -1
- package/dist/map/index.d.ts +0 -14
- package/dist/map/index.d.ts.map +0 -1
- package/dist/math/index.d.ts +0 -53
- package/dist/math/index.d.ts.map +0 -1
- package/dist/matrix/index.d.ts +0 -52
- package/dist/matrix/index.d.ts.map +0 -1
- package/dist/plot.d.ts +0 -20
- package/dist/plot.d.ts.map +0 -1
- package/dist/polyline/index.d.ts +0 -11
- package/dist/polyline/index.d.ts.map +0 -1
- package/dist/runtime/adapters/LightweightChartsAdapter.d.ts +0 -15
- package/dist/runtime/adapters/LightweightChartsAdapter.d.ts.map +0 -1
- package/dist/runtime/adapters/SimpleInputAdapter.d.ts +0 -16
- package/dist/runtime/adapters/SimpleInputAdapter.d.ts.map +0 -1
- package/dist/runtime/index.cjs +0 -600
- package/dist/runtime/index.d.ts.map +0 -1
- package/dist/runtime/index.mjs +0 -577
- package/dist/runtime/inputs.d.ts +0 -13
- package/dist/runtime/inputs.d.ts.map +0 -1
- package/dist/runtime/runtime.d.ts +0 -16
- package/dist/runtime/runtime.d.ts.map +0 -1
- package/dist/runtime/series.d.ts +0 -60
- package/dist/runtime/series.d.ts.map +0 -1
- package/dist/runtime/types.d.ts +0 -122
- package/dist/runtime/types.d.ts.map +0 -1
- package/dist/script/index.cjs +0 -6372
- package/dist/script/index.d.ts +0 -709
- package/dist/script/index.d.ts.map +0 -1
- package/dist/script/index.mjs +0 -6355
- package/dist/security/resample.d.ts +0 -13
- package/dist/security/resample.d.ts.map +0 -1
- package/dist/session/bars.d.ts +0 -34
- package/dist/session/bars.d.ts.map +0 -1
- package/dist/session/calendar.d.ts +0 -31
- package/dist/session/calendar.d.ts.map +0 -1
- package/dist/str/dateformat.d.ts +0 -2
- package/dist/str/dateformat.d.ts.map +0 -1
- package/dist/str/index.d.ts +0 -24
- package/dist/str/index.d.ts.map +0 -1
- package/dist/str/messageformat.d.ts +0 -2
- package/dist/str/messageformat.d.ts.map +0 -1
- package/dist/str/numberformat.d.ts +0 -3
- package/dist/str/numberformat.d.ts.map +0 -1
- package/dist/strategy/index.d.ts.map +0 -1
- package/dist/ta/index.d.ts +0 -72
- package/dist/ta/index.d.ts.map +0 -1
- package/dist/ta-series.d.ts +0 -143
- package/dist/ta-series.d.ts.map +0 -1
- package/dist/text/index.d.ts +0 -4
- package/dist/text/index.d.ts.map +0 -1
- package/dist/time/datestring.d.ts +0 -2
- package/dist/time/datestring.d.ts.map +0 -1
- package/dist/time/index.d.ts +0 -15
- package/dist/time/index.d.ts.map +0 -1
- package/dist/time/session.d.ts +0 -2
- package/dist/time/session.d.ts.map +0 -1
- package/dist/time/timezone.d.ts +0 -13
- package/dist/time/timezone.d.ts.map +0 -1
- package/dist/timeframe/index.d.ts +0 -17
- package/dist/timeframe/index.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -181
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/metadata.d.ts +0 -131
- package/dist/types/metadata.d.ts.map +0 -1
- package/dist/utils/index.d.ts +0 -26
- package/dist/utils/index.d.ts.map +0 -1
|
@@ -0,0 +1,1071 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Math namespace
|
|
3
|
+
* Mirrors PineScript's math.* functions for mathematical operations and calculations.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* All math functions in this namespace follow PineScript v6 API specifications.
|
|
7
|
+
* Functions include basic arithmetic, algebraic operations, trigonometry, and combinatorics.
|
|
8
|
+
*
|
|
9
|
+
* @version 6
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { float, int, simple_int, series_float } from '../types/index.js';
|
|
13
|
+
import { Series } from '../runtime/series.js';
|
|
14
|
+
import { runningSum } from '../ta/running-sum.js';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Returns the absolute value of a number.
|
|
18
|
+
*
|
|
19
|
+
* @param value - The number or Series
|
|
20
|
+
* @returns The absolute value (always non-negative)
|
|
21
|
+
*
|
|
22
|
+
* @remarks
|
|
23
|
+
* - Returns the distance from zero on the number line
|
|
24
|
+
* - |x| = x if x ≥ 0, -x if x < 0
|
|
25
|
+
* - If value is a Series, returns a Series; if value is a number, returns a number
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* math.abs(5) // Returns: 5
|
|
30
|
+
* math.abs(-5) // Returns: 5
|
|
31
|
+
* math.abs(0) // Returns: 0
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export function abs(value: Series): Series;
|
|
35
|
+
export function abs(value: float): float;
|
|
36
|
+
export function abs(value: float | Series): float | Series {
|
|
37
|
+
if (value instanceof Series) {
|
|
38
|
+
const bars = value.bars;
|
|
39
|
+
const valueArray = value.toArray();
|
|
40
|
+
const length = bars.length;
|
|
41
|
+
|
|
42
|
+
const result: number[] = [];
|
|
43
|
+
for (let i = 0; i < length; i++) {
|
|
44
|
+
const v = valueArray[i] ?? NaN;
|
|
45
|
+
result.push(Math.abs(v));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return Series.fromArray(bars, result);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return Math.abs(value);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Returns the smallest integer greater than or equal to a given number (rounds up).
|
|
56
|
+
*
|
|
57
|
+
* @param value - The number to round up or Series
|
|
58
|
+
* @returns The ceiling value (smallest integer ≥ value)
|
|
59
|
+
*
|
|
60
|
+
* @remarks
|
|
61
|
+
* - Always rounds towards positive infinity
|
|
62
|
+
* - For positive numbers, rounds away from zero
|
|
63
|
+
* - For negative numbers, rounds towards zero
|
|
64
|
+
* - If value is a Series, returns a Series; if value is a number, returns a number
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```typescript
|
|
68
|
+
* math.ceil(4.2) // Returns: 5
|
|
69
|
+
* math.ceil(4.8) // Returns: 5
|
|
70
|
+
* math.ceil(-4.2) // Returns: -4
|
|
71
|
+
* math.ceil(5) // Returns: 5
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
export function ceil(value: Series): Series;
|
|
75
|
+
export function ceil(value: float): int;
|
|
76
|
+
export function ceil(value: float | Series): int | Series {
|
|
77
|
+
if (value instanceof Series) {
|
|
78
|
+
const bars = value.bars;
|
|
79
|
+
const valueArray = value.toArray();
|
|
80
|
+
const length = bars.length;
|
|
81
|
+
|
|
82
|
+
const result: number[] = [];
|
|
83
|
+
for (let i = 0; i < length; i++) {
|
|
84
|
+
const v = valueArray[i] ?? NaN;
|
|
85
|
+
result.push(Math.ceil(v));
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return Series.fromArray(bars, result);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return Math.ceil(value);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Returns the largest integer less than or equal to a given number (rounds down).
|
|
96
|
+
*
|
|
97
|
+
* @param value - The number to round down or Series
|
|
98
|
+
* @returns The floor value (largest integer ≤ value)
|
|
99
|
+
*
|
|
100
|
+
* @remarks
|
|
101
|
+
* - Always rounds towards negative infinity
|
|
102
|
+
* - For positive numbers, rounds towards zero
|
|
103
|
+
* - For negative numbers, rounds away from zero
|
|
104
|
+
* - If value is a Series, returns a Series; if value is a number, returns a number
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```typescript
|
|
108
|
+
* math.floor(4.2) // Returns: 4
|
|
109
|
+
* math.floor(4.8) // Returns: 4
|
|
110
|
+
* math.floor(-4.2) // Returns: -5
|
|
111
|
+
* math.floor(5) // Returns: 5
|
|
112
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
export function floor(value: Series): Series;
|
|
115
|
+
export function floor(value: float): int;
|
|
116
|
+
export function floor(value: float | Series): int | Series {
|
|
117
|
+
if (value instanceof Series) {
|
|
118
|
+
const bars = value.bars;
|
|
119
|
+
const valueArray = value.toArray();
|
|
120
|
+
const length = bars.length;
|
|
121
|
+
|
|
122
|
+
const result: number[] = [];
|
|
123
|
+
for (let i = 0; i < length; i++) {
|
|
124
|
+
const v = valueArray[i] ?? NaN;
|
|
125
|
+
result.push(Math.floor(v));
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return Series.fromArray(bars, result);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
return Math.floor(value);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Returns the value rounded to the nearest integer or to a specified precision.
|
|
136
|
+
*
|
|
137
|
+
* @param value - The number to round or Series
|
|
138
|
+
* @param precision - Optional number of decimal places (default: 0)
|
|
139
|
+
* @returns The rounded value
|
|
140
|
+
*
|
|
141
|
+
* @remarks
|
|
142
|
+
* - Rounds to nearest integer by default
|
|
143
|
+
* - With precision, rounds to that many decimal places
|
|
144
|
+
* - Uses "round half up" strategy (0.5 rounds to 1)
|
|
145
|
+
* - If value is a Series, returns a Series; if value is a number, returns a number
|
|
146
|
+
*
|
|
147
|
+
* @example
|
|
148
|
+
* ```typescript
|
|
149
|
+
* math.round(4.2) // Returns: 4
|
|
150
|
+
* math.round(4.5) // Returns: 5
|
|
151
|
+
* math.round(4.8) // Returns: 5
|
|
152
|
+
* math.round(4.567, 2) // Returns: 4.57
|
|
153
|
+
* math.round(4.567, 1) // Returns: 4.6
|
|
154
|
+
* ```
|
|
155
|
+
*/
|
|
156
|
+
export function round(value: Series, precision?: int): Series;
|
|
157
|
+
export function round(value: float, precision?: int): float;
|
|
158
|
+
export function round(value: float | Series, precision?: int): float | Series {
|
|
159
|
+
if (value instanceof Series) {
|
|
160
|
+
const bars = value.bars;
|
|
161
|
+
const valueArray = value.toArray();
|
|
162
|
+
const length = bars.length;
|
|
163
|
+
|
|
164
|
+
const result: number[] = [];
|
|
165
|
+
if (precision === undefined) {
|
|
166
|
+
for (let i = 0; i < length; i++) {
|
|
167
|
+
const v = valueArray[i] ?? NaN;
|
|
168
|
+
result.push(Math.round(v));
|
|
169
|
+
}
|
|
170
|
+
} else {
|
|
171
|
+
const multiplier = Math.pow(10, precision);
|
|
172
|
+
for (let i = 0; i < length; i++) {
|
|
173
|
+
const v = valueArray[i] ?? NaN;
|
|
174
|
+
result.push(Math.round(v * multiplier) / multiplier);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return Series.fromArray(bars, result);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
if (precision === undefined) {
|
|
182
|
+
return Math.round(value);
|
|
183
|
+
}
|
|
184
|
+
const multiplier = Math.pow(10, precision);
|
|
185
|
+
return Math.round(value * multiplier) / multiplier;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Returns the maximum value from the arguments.
|
|
190
|
+
*
|
|
191
|
+
* @param values - Variable number of values to compare (numbers or Series)
|
|
192
|
+
* @returns The largest value
|
|
193
|
+
*
|
|
194
|
+
* @remarks
|
|
195
|
+
* - Accepts any number of arguments
|
|
196
|
+
* - Returns -Infinity if no arguments provided
|
|
197
|
+
* - Returns NaN if any argument is NaN
|
|
198
|
+
* - If any argument is a Series, returns a Series; otherwise returns a number
|
|
199
|
+
*
|
|
200
|
+
* @example
|
|
201
|
+
* ```typescript
|
|
202
|
+
* math.max(1, 2, 3) // Returns: 3
|
|
203
|
+
* math.max(-1, -5, -2) // Returns: -1
|
|
204
|
+
* math.max(10) // Returns: 10
|
|
205
|
+
* math.max(5, 10, 3, 8) // Returns: 10
|
|
206
|
+
* ```
|
|
207
|
+
*/
|
|
208
|
+
export function max(...values: (float | Series)[]): float | Series {
|
|
209
|
+
// Check if any value is a Series
|
|
210
|
+
const hasSeries = values.some(v => v instanceof Series);
|
|
211
|
+
|
|
212
|
+
if (!hasSeries) {
|
|
213
|
+
// All scalars - use native Math.max
|
|
214
|
+
return Math.max(...(values as number[]));
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// At least one Series - return a Series
|
|
218
|
+
const firstSeries = values.find(v => v instanceof Series) as Series;
|
|
219
|
+
const bars = firstSeries.bars;
|
|
220
|
+
const length = bars.length;
|
|
221
|
+
|
|
222
|
+
// Convert all values to arrays (scalars become constant arrays)
|
|
223
|
+
const valueArrays = values.map(v =>
|
|
224
|
+
v instanceof Series ? v.toArray() : null
|
|
225
|
+
);
|
|
226
|
+
|
|
227
|
+
const result: number[] = [];
|
|
228
|
+
for (let i = 0; i < length; i++) {
|
|
229
|
+
const nums = values.map((v, idx) =>
|
|
230
|
+
valueArrays[idx] ? valueArrays[idx]![i] ?? NaN : (v as number)
|
|
231
|
+
);
|
|
232
|
+
result.push(Math.max(...nums));
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
return Series.fromArray(bars, result);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Returns the minimum value from the arguments.
|
|
240
|
+
*
|
|
241
|
+
* @param values - Variable number of values to compare (numbers or Series)
|
|
242
|
+
* @returns The smallest value
|
|
243
|
+
*
|
|
244
|
+
* @remarks
|
|
245
|
+
* - Accepts any number of arguments
|
|
246
|
+
* - Returns Infinity if no arguments provided
|
|
247
|
+
* - Returns NaN if any argument is NaN
|
|
248
|
+
* - If any argument is a Series, returns a Series; otherwise returns a number
|
|
249
|
+
*
|
|
250
|
+
* @example
|
|
251
|
+
* ```typescript
|
|
252
|
+
* math.min(1, 2, 3) // Returns: 1
|
|
253
|
+
* math.min(-1, -5, -2) // Returns: -5
|
|
254
|
+
* math.min(10) // Returns: 10
|
|
255
|
+
* math.min(5, 10, 3, 8) // Returns: 3
|
|
256
|
+
* ```
|
|
257
|
+
*/
|
|
258
|
+
export function min(...values: (float | Series)[]): float | Series {
|
|
259
|
+
// Check if any value is a Series
|
|
260
|
+
const hasSeries = values.some(v => v instanceof Series);
|
|
261
|
+
|
|
262
|
+
if (!hasSeries) {
|
|
263
|
+
// All scalars - use native Math.min
|
|
264
|
+
return Math.min(...(values as number[]));
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
// At least one Series - return a Series
|
|
268
|
+
const firstSeries = values.find(v => v instanceof Series) as Series;
|
|
269
|
+
const bars = firstSeries.bars;
|
|
270
|
+
const length = bars.length;
|
|
271
|
+
|
|
272
|
+
// Convert all values to arrays (scalars become constant arrays)
|
|
273
|
+
const valueArrays = values.map(v =>
|
|
274
|
+
v instanceof Series ? v.toArray() : null
|
|
275
|
+
);
|
|
276
|
+
|
|
277
|
+
const result: number[] = [];
|
|
278
|
+
for (let i = 0; i < length; i++) {
|
|
279
|
+
const nums = values.map((v, idx) =>
|
|
280
|
+
valueArrays[idx] ? valueArrays[idx]![i] ?? NaN : (v as number)
|
|
281
|
+
);
|
|
282
|
+
result.push(Math.min(...nums));
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
return Series.fromArray(bars, result);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
/**
|
|
289
|
+
* Returns the average (arithmetic mean) of the arguments.
|
|
290
|
+
*
|
|
291
|
+
* @param values - Variable number of values (numbers or Series)
|
|
292
|
+
* @returns The arithmetic mean
|
|
293
|
+
*
|
|
294
|
+
* @remarks
|
|
295
|
+
* - Calculates sum of all values divided by count
|
|
296
|
+
* - Returns NaN if no arguments provided (division by zero)
|
|
297
|
+
* - If any argument is a Series, returns a Series; otherwise returns a number
|
|
298
|
+
*
|
|
299
|
+
* @example
|
|
300
|
+
* ```typescript
|
|
301
|
+
* math.avg(1, 2, 3) // Returns: 2
|
|
302
|
+
* math.avg(10, 20) // Returns: 15
|
|
303
|
+
* math.avg(5) // Returns: 5
|
|
304
|
+
* math.avg(1, 2, 3, 4, 5) // Returns: 3
|
|
305
|
+
* ```
|
|
306
|
+
*/
|
|
307
|
+
export function avg(...values: (float | Series)[]): float | Series {
|
|
308
|
+
// Check if any value is a Series
|
|
309
|
+
const hasSeries = values.some(v => v instanceof Series);
|
|
310
|
+
|
|
311
|
+
if (!hasSeries) {
|
|
312
|
+
// All scalars - calculate simple average
|
|
313
|
+
return (values as number[]).reduce((a, b) => a + b, 0) / values.length;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
// At least one Series - return a Series
|
|
317
|
+
const firstSeries = values.find(v => v instanceof Series) as Series;
|
|
318
|
+
const bars = firstSeries.bars;
|
|
319
|
+
const length = bars.length;
|
|
320
|
+
|
|
321
|
+
// Convert all values to arrays (scalars become constant arrays)
|
|
322
|
+
const valueArrays = values.map(v =>
|
|
323
|
+
v instanceof Series ? v.toArray() : null
|
|
324
|
+
);
|
|
325
|
+
|
|
326
|
+
const result: number[] = [];
|
|
327
|
+
for (let i = 0; i < length; i++) {
|
|
328
|
+
const nums = values.map((v, idx) =>
|
|
329
|
+
valueArrays[idx] ? valueArrays[idx]![i] ?? NaN : (v as number)
|
|
330
|
+
);
|
|
331
|
+
const sum = nums.reduce((a, b) => a + b, 0);
|
|
332
|
+
result.push(sum / nums.length);
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
return Series.fromArray(bars, result);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
* Returns the sum of values over a sliding window.
|
|
340
|
+
*
|
|
341
|
+
* @param source - Series of values or array
|
|
342
|
+
* @param length - Window length for summation
|
|
343
|
+
* @returns Series or array with rolling sum values
|
|
344
|
+
*
|
|
345
|
+
* @remarks
|
|
346
|
+
* - Calculates the sum of the last `length` non-`na` values at each point; an `na` value (also +/-Infinity) is
|
|
347
|
+
* skipped and the bar keeps the previous result (as in PineScript)
|
|
348
|
+
* - Returns NaN until `length` non-`na` values are available
|
|
349
|
+
* - A compensated running sum, as in PineScript, so the result can differ from the exact window sum in the last
|
|
350
|
+
* bits (bit for bit with PineScript)
|
|
351
|
+
* - When passed a Series, returns a Series; when passed an array, returns an array
|
|
352
|
+
*
|
|
353
|
+
* @example
|
|
354
|
+
* ```typescript
|
|
355
|
+
* math.sum([1, 2, 3, 4, 5], 3) // Returns: [NaN, NaN, 6, 9, 12]
|
|
356
|
+
* // Explanation: [NaN, NaN, 1+2+3, 2+3+4, 3+4+5]
|
|
357
|
+
* ```
|
|
358
|
+
*/
|
|
359
|
+
export function sum(source: Series, length: simple_int): Series;
|
|
360
|
+
export function sum(source: series_float, length: simple_int): series_float;
|
|
361
|
+
export function sum(source: series_float | Series, length: simple_int): series_float | Series {
|
|
362
|
+
// Handle Series objects - extract to array first
|
|
363
|
+
const sourceArray = source instanceof Series ? source.toArray() : source;
|
|
364
|
+
// PineScript: the sum of the last `length` non-na values (also +/-Infinity skipped); an na bar keeps the previous
|
|
365
|
+
// result. A compensated running sum, bit for bit as PineScript.
|
|
366
|
+
const result: series_float = runningSum(sourceArray, length);
|
|
367
|
+
|
|
368
|
+
// If input was a Series, return a Series
|
|
369
|
+
if (source instanceof Series) {
|
|
370
|
+
return Series.fromArray(source.bars, result);
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
return result;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
/**
|
|
377
|
+
* Returns the square root of a number.
|
|
378
|
+
*
|
|
379
|
+
* @param value - The number (must be non-negative) or Series
|
|
380
|
+
* @returns The square root (√value)
|
|
381
|
+
*
|
|
382
|
+
* @remarks
|
|
383
|
+
* - Returns NaN for negative numbers
|
|
384
|
+
* - √x × √x = x (for non-negative x)
|
|
385
|
+
* - If value is a Series, returns a Series; if value is a number, returns a number
|
|
386
|
+
*
|
|
387
|
+
* @example
|
|
388
|
+
* ```typescript
|
|
389
|
+
* math.sqrt(9) // Returns: 3
|
|
390
|
+
* math.sqrt(16) // Returns: 4
|
|
391
|
+
* math.sqrt(2) // Returns: 1.414...
|
|
392
|
+
* math.sqrt(0) // Returns: 0
|
|
393
|
+
* ```
|
|
394
|
+
*/
|
|
395
|
+
export function sqrt(value: Series): Series;
|
|
396
|
+
export function sqrt(value: float): float;
|
|
397
|
+
export function sqrt(value: float | Series): float | Series {
|
|
398
|
+
if (value instanceof Series) {
|
|
399
|
+
const bars = value.bars;
|
|
400
|
+
const valueArray = value.toArray();
|
|
401
|
+
const length = bars.length;
|
|
402
|
+
|
|
403
|
+
const result: number[] = [];
|
|
404
|
+
for (let i = 0; i < length; i++) {
|
|
405
|
+
const v = valueArray[i] ?? NaN;
|
|
406
|
+
result.push(Math.sqrt(v));
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
return Series.fromArray(bars, result);
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
return Math.sqrt(value);
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
/**
|
|
416
|
+
* Returns base raised to the power of exponent.
|
|
417
|
+
*
|
|
418
|
+
* @param base - The base number or Series
|
|
419
|
+
* @param exponent - The exponent (power) or Series
|
|
420
|
+
* @returns base^exponent
|
|
421
|
+
*
|
|
422
|
+
* @remarks
|
|
423
|
+
* - 0^0 returns 1
|
|
424
|
+
* - Negative base with fractional exponent returns NaN
|
|
425
|
+
* - Any number to the power of 0 equals 1
|
|
426
|
+
* - If any argument is a Series, returns a Series; if all are numbers, returns a number
|
|
427
|
+
*
|
|
428
|
+
* @example
|
|
429
|
+
* ```typescript
|
|
430
|
+
* math.pow(2, 3) // Returns: 8 (2³)
|
|
431
|
+
* math.pow(10, 2) // Returns: 100
|
|
432
|
+
* math.pow(5, 0) // Returns: 1
|
|
433
|
+
* math.pow(2, -1) // Returns: 0.5
|
|
434
|
+
* ```
|
|
435
|
+
*/
|
|
436
|
+
export function pow(base: Series, exponent: float): Series;
|
|
437
|
+
export function pow(base: float, exponent: Series): Series;
|
|
438
|
+
export function pow(base: Series, exponent: Series): Series;
|
|
439
|
+
export function pow(base: float, exponent: float): float;
|
|
440
|
+
export function pow(base: float | Series, exponent: float | Series): float | Series {
|
|
441
|
+
const baseIsSeries = base instanceof Series;
|
|
442
|
+
const expIsSeries = exponent instanceof Series;
|
|
443
|
+
|
|
444
|
+
// Pure scalar case
|
|
445
|
+
if (!baseIsSeries && !expIsSeries) {
|
|
446
|
+
return Math.pow(base as number, exponent as number);
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
// At least one is a Series - return a Series
|
|
450
|
+
const bars = baseIsSeries ? (base as Series).bars : (exponent as Series).bars;
|
|
451
|
+
const baseArray = baseIsSeries ? (base as Series).toArray() : null;
|
|
452
|
+
const expArray = expIsSeries ? (exponent as Series).toArray() : null;
|
|
453
|
+
const length = bars.length;
|
|
454
|
+
|
|
455
|
+
const result: number[] = [];
|
|
456
|
+
for (let i = 0; i < length; i++) {
|
|
457
|
+
const b = baseArray ? baseArray[i] ?? NaN : (base as number);
|
|
458
|
+
const e = expArray ? expArray[i] ?? NaN : (exponent as number);
|
|
459
|
+
result.push(Math.pow(b, e));
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
return Series.fromArray(bars, result);
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
/**
|
|
466
|
+
* Returns e (Euler's number) raised to the power of value.
|
|
467
|
+
*
|
|
468
|
+
* @param value - The exponent or Series
|
|
469
|
+
* @returns e^value (where e ≈ 2.71828)
|
|
470
|
+
*
|
|
471
|
+
* @remarks
|
|
472
|
+
* - e^0 = 1
|
|
473
|
+
* - e^1 = e ≈ 2.71828
|
|
474
|
+
* - Inverse of ln(x)
|
|
475
|
+
* - If value is a Series, returns a Series; if value is a number, returns a number
|
|
476
|
+
*
|
|
477
|
+
* @example
|
|
478
|
+
* ```typescript
|
|
479
|
+
* math.exp(0) // Returns: 1
|
|
480
|
+
* math.exp(1) // Returns: 2.71828... (e)
|
|
481
|
+
* math.exp(2) // Returns: 7.389...
|
|
482
|
+
* math.exp(-1) // Returns: 0.3678...
|
|
483
|
+
* ```
|
|
484
|
+
*/
|
|
485
|
+
export function exp(value: Series): Series;
|
|
486
|
+
export function exp(value: float): float;
|
|
487
|
+
export function exp(value: float | Series): float | Series {
|
|
488
|
+
if (value instanceof Series) {
|
|
489
|
+
const bars = value.bars;
|
|
490
|
+
const valueArray = value.toArray();
|
|
491
|
+
const length = bars.length;
|
|
492
|
+
|
|
493
|
+
const result: number[] = [];
|
|
494
|
+
for (let i = 0; i < length; i++) {
|
|
495
|
+
const v = valueArray[i] ?? NaN;
|
|
496
|
+
result.push(Math.exp(v));
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
return Series.fromArray(bars, result);
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
return Math.exp(value);
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
/**
|
|
506
|
+
* Returns the natural logarithm (base e) of a number.
|
|
507
|
+
*
|
|
508
|
+
* @param value - The number (must be positive) or Series
|
|
509
|
+
* @returns ln(value)
|
|
510
|
+
*
|
|
511
|
+
* @remarks
|
|
512
|
+
* - Returns NaN for negative numbers
|
|
513
|
+
* - Returns -Infinity for 0
|
|
514
|
+
* - ln(e) = 1
|
|
515
|
+
* - ln(1) = 0
|
|
516
|
+
* - Inverse of exp(x)
|
|
517
|
+
* - If value is a Series, returns a Series; if value is a number, returns a number
|
|
518
|
+
*
|
|
519
|
+
* @example
|
|
520
|
+
* ```typescript
|
|
521
|
+
* math.log(1) // Returns: 0
|
|
522
|
+
* math.log(Math.E) // Returns: 1
|
|
523
|
+
* math.log(10) // Returns: 2.302...
|
|
524
|
+
* math.log(100) // Returns: 4.605...
|
|
525
|
+
* ```
|
|
526
|
+
*/
|
|
527
|
+
export function log(value: Series): Series;
|
|
528
|
+
export function log(value: float): float;
|
|
529
|
+
export function log(value: float | Series): float | Series {
|
|
530
|
+
if (value instanceof Series) {
|
|
531
|
+
const bars = value.bars;
|
|
532
|
+
const valueArray = value.toArray();
|
|
533
|
+
const length = bars.length;
|
|
534
|
+
|
|
535
|
+
const result: number[] = [];
|
|
536
|
+
for (let i = 0; i < length; i++) {
|
|
537
|
+
const v = valueArray[i] ?? NaN;
|
|
538
|
+
result.push(Math.log(v));
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
return Series.fromArray(bars, result);
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
return Math.log(value);
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
/**
|
|
548
|
+
* Returns the base-10 logarithm of a number.
|
|
549
|
+
*
|
|
550
|
+
* @param value - The number (must be positive) or Series
|
|
551
|
+
* @returns log₁₀(value)
|
|
552
|
+
*
|
|
553
|
+
* @remarks
|
|
554
|
+
* - Returns NaN for negative numbers
|
|
555
|
+
* - Returns -Infinity for 0
|
|
556
|
+
* - log₁₀(10) = 1
|
|
557
|
+
* - log₁₀(100) = 2
|
|
558
|
+
* - If value is a Series, returns a Series; if value is a number, returns a number
|
|
559
|
+
*
|
|
560
|
+
* @example
|
|
561
|
+
* ```typescript
|
|
562
|
+
* math.log10(10) // Returns: 1
|
|
563
|
+
* math.log10(100) // Returns: 2
|
|
564
|
+
* math.log10(1000) // Returns: 3
|
|
565
|
+
* math.log10(1) // Returns: 0
|
|
566
|
+
* ```
|
|
567
|
+
*/
|
|
568
|
+
export function log10(value: Series): Series;
|
|
569
|
+
export function log10(value: float): float;
|
|
570
|
+
export function log10(value: float | Series): float | Series {
|
|
571
|
+
if (value instanceof Series) {
|
|
572
|
+
const bars = value.bars;
|
|
573
|
+
const valueArray = value.toArray();
|
|
574
|
+
const length = bars.length;
|
|
575
|
+
|
|
576
|
+
const result: number[] = [];
|
|
577
|
+
for (let i = 0; i < length; i++) {
|
|
578
|
+
const v = valueArray[i] ?? NaN;
|
|
579
|
+
result.push(Math.log10(v));
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
return Series.fromArray(bars, result);
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
return Math.log10(value);
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
/**
|
|
589
|
+
* Returns the sine of an angle in radians.
|
|
590
|
+
*
|
|
591
|
+
* @param value - The angle in radians or Series
|
|
592
|
+
* @returns The sine value (range: [-1, 1])
|
|
593
|
+
*
|
|
594
|
+
* @remarks
|
|
595
|
+
* - Input is in radians, not degrees
|
|
596
|
+
* - sin(0) = 0
|
|
597
|
+
* - sin(π/2) = 1
|
|
598
|
+
* - Periodic with period 2π
|
|
599
|
+
* - If value is a Series, returns a Series; if value is a number, returns a number
|
|
600
|
+
*
|
|
601
|
+
* @example
|
|
602
|
+
* ```typescript
|
|
603
|
+
* math.sin(0) // Returns: 0
|
|
604
|
+
* math.sin(Math.PI / 2) // Returns: 1
|
|
605
|
+
* math.sin(Math.PI) // Returns: 0 (approximately)
|
|
606
|
+
* math.sin(Math.PI / 6) // Returns: 0.5
|
|
607
|
+
* ```
|
|
608
|
+
*/
|
|
609
|
+
export function sin(value: Series): Series;
|
|
610
|
+
export function sin(value: float): float;
|
|
611
|
+
export function sin(value: float | Series): float | Series {
|
|
612
|
+
if (value instanceof Series) {
|
|
613
|
+
const bars = value.bars;
|
|
614
|
+
const valueArray = value.toArray();
|
|
615
|
+
const length = bars.length;
|
|
616
|
+
|
|
617
|
+
const result: number[] = [];
|
|
618
|
+
for (let i = 0; i < length; i++) {
|
|
619
|
+
const v = valueArray[i] ?? NaN;
|
|
620
|
+
result.push(Math.sin(v));
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
return Series.fromArray(bars, result);
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
return Math.sin(value);
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
/**
|
|
630
|
+
* Returns the cosine of an angle in radians.
|
|
631
|
+
*
|
|
632
|
+
* @param value - The angle in radians or Series
|
|
633
|
+
* @returns The cosine value (range: [-1, 1])
|
|
634
|
+
*
|
|
635
|
+
* @remarks
|
|
636
|
+
* - Input is in radians, not degrees
|
|
637
|
+
* - cos(0) = 1
|
|
638
|
+
* - cos(π/2) = 0
|
|
639
|
+
* - Periodic with period 2π
|
|
640
|
+
* - If value is a Series, returns a Series; if value is a number, returns a number
|
|
641
|
+
*
|
|
642
|
+
* @example
|
|
643
|
+
* ```typescript
|
|
644
|
+
* math.cos(0) // Returns: 1
|
|
645
|
+
* math.cos(Math.PI / 2) // Returns: 0 (approximately)
|
|
646
|
+
* math.cos(Math.PI) // Returns: -1
|
|
647
|
+
* math.cos(Math.PI / 3) // Returns: 0.5
|
|
648
|
+
* ```
|
|
649
|
+
*/
|
|
650
|
+
export function cos(value: Series): Series;
|
|
651
|
+
export function cos(value: float): float;
|
|
652
|
+
export function cos(value: float | Series): float | Series {
|
|
653
|
+
if (value instanceof Series) {
|
|
654
|
+
const bars = value.bars;
|
|
655
|
+
const valueArray = value.toArray();
|
|
656
|
+
const length = bars.length;
|
|
657
|
+
|
|
658
|
+
const result: number[] = [];
|
|
659
|
+
for (let i = 0; i < length; i++) {
|
|
660
|
+
const v = valueArray[i] ?? NaN;
|
|
661
|
+
result.push(Math.cos(v));
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
return Series.fromArray(bars, result);
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
return Math.cos(value);
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
/**
|
|
671
|
+
* Returns the tangent of an angle in radians.
|
|
672
|
+
*
|
|
673
|
+
* @param value - The angle in radians or Series
|
|
674
|
+
* @returns The tangent value
|
|
675
|
+
*
|
|
676
|
+
* @remarks
|
|
677
|
+
* - Input is in radians, not degrees
|
|
678
|
+
* - tan(x) = sin(x) / cos(x)
|
|
679
|
+
* - Undefined at π/2, 3π/2, etc. (returns very large numbers)
|
|
680
|
+
* - Periodic with period π
|
|
681
|
+
* - If value is a Series, returns a Series; if value is a number, returns a number
|
|
682
|
+
*
|
|
683
|
+
* @example
|
|
684
|
+
* ```typescript
|
|
685
|
+
* math.tan(0) // Returns: 0
|
|
686
|
+
* math.tan(Math.PI / 4) // Returns: 1
|
|
687
|
+
* math.tan(Math.PI / 6) // Returns: 0.577... (1/√3)
|
|
688
|
+
* ```
|
|
689
|
+
*/
|
|
690
|
+
export function tan(value: Series): Series;
|
|
691
|
+
export function tan(value: float): float;
|
|
692
|
+
export function tan(value: float | Series): float | Series {
|
|
693
|
+
if (value instanceof Series) {
|
|
694
|
+
const bars = value.bars;
|
|
695
|
+
const valueArray = value.toArray();
|
|
696
|
+
const length = bars.length;
|
|
697
|
+
|
|
698
|
+
const result: number[] = [];
|
|
699
|
+
for (let i = 0; i < length; i++) {
|
|
700
|
+
const v = valueArray[i] ?? NaN;
|
|
701
|
+
result.push(Math.tan(v));
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
return Series.fromArray(bars, result);
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
return Math.tan(value);
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
/**
|
|
711
|
+
* Returns the arcsine (inverse sine) of a number.
|
|
712
|
+
*
|
|
713
|
+
* @param value - The value (must be in range [-1, 1]) or Series
|
|
714
|
+
* @returns The angle in radians (range: [-π/2, π/2])
|
|
715
|
+
*
|
|
716
|
+
* @remarks
|
|
717
|
+
* - Returns NaN for values outside [-1, 1]
|
|
718
|
+
* - asin(sin(x)) = x for x in [-π/2, π/2]
|
|
719
|
+
* - asin(0) = 0
|
|
720
|
+
* - asin(1) = π/2
|
|
721
|
+
* - If value is a Series, returns a Series; if value is a number, returns a number
|
|
722
|
+
*
|
|
723
|
+
* @example
|
|
724
|
+
* ```typescript
|
|
725
|
+
* math.asin(0) // Returns: 0
|
|
726
|
+
* math.asin(1) // Returns: 1.5707... (π/2)
|
|
727
|
+
* math.asin(0.5) // Returns: 0.5235... (π/6)
|
|
728
|
+
* math.asin(-1) // Returns: -1.5707... (-π/2)
|
|
729
|
+
* ```
|
|
730
|
+
*/
|
|
731
|
+
export function asin(value: Series): Series;
|
|
732
|
+
export function asin(value: float): float;
|
|
733
|
+
export function asin(value: float | Series): float | Series {
|
|
734
|
+
if (value instanceof Series) {
|
|
735
|
+
const bars = value.bars;
|
|
736
|
+
const valueArray = value.toArray();
|
|
737
|
+
const length = bars.length;
|
|
738
|
+
|
|
739
|
+
const result: number[] = [];
|
|
740
|
+
for (let i = 0; i < length; i++) {
|
|
741
|
+
const v = valueArray[i] ?? NaN;
|
|
742
|
+
result.push(Math.asin(v));
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
return Series.fromArray(bars, result);
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
return Math.asin(value);
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
/**
|
|
752
|
+
* Returns the arccosine (inverse cosine) of a number.
|
|
753
|
+
*
|
|
754
|
+
* @param value - The value (must be in range [-1, 1]) or Series
|
|
755
|
+
* @returns The angle in radians (range: [0, π])
|
|
756
|
+
*
|
|
757
|
+
* @remarks
|
|
758
|
+
* - Returns NaN for values outside [-1, 1]
|
|
759
|
+
* - acos(cos(x)) = x for x in [0, π]
|
|
760
|
+
* - acos(1) = 0
|
|
761
|
+
* - acos(0) = π/2
|
|
762
|
+
* - If value is a Series, returns a Series; if value is a number, returns a number
|
|
763
|
+
*
|
|
764
|
+
* @example
|
|
765
|
+
* ```typescript
|
|
766
|
+
* math.acos(1) // Returns: 0
|
|
767
|
+
* math.acos(0) // Returns: 1.5707... (π/2)
|
|
768
|
+
* math.acos(0.5) // Returns: 1.0471... (π/3)
|
|
769
|
+
* math.acos(-1) // Returns: 3.1415... (π)
|
|
770
|
+
* ```
|
|
771
|
+
*/
|
|
772
|
+
export function acos(value: Series): Series;
|
|
773
|
+
export function acos(value: float): float;
|
|
774
|
+
export function acos(value: float | Series): float | Series {
|
|
775
|
+
if (value instanceof Series) {
|
|
776
|
+
const bars = value.bars;
|
|
777
|
+
const valueArray = value.toArray();
|
|
778
|
+
const length = bars.length;
|
|
779
|
+
|
|
780
|
+
const result: number[] = [];
|
|
781
|
+
for (let i = 0; i < length; i++) {
|
|
782
|
+
const v = valueArray[i] ?? NaN;
|
|
783
|
+
result.push(Math.acos(v));
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
return Series.fromArray(bars, result);
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
return Math.acos(value);
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
/**
|
|
793
|
+
* Returns the arctangent (inverse tangent) of a number.
|
|
794
|
+
*
|
|
795
|
+
* @param value - The value or Series
|
|
796
|
+
* @returns The angle in radians (range: [-π/2, π/2])
|
|
797
|
+
*
|
|
798
|
+
* @remarks
|
|
799
|
+
* - Accepts any number as input
|
|
800
|
+
* - atan(tan(x)) = x for x in [-π/2, π/2]
|
|
801
|
+
* - atan(0) = 0
|
|
802
|
+
* - atan(1) = π/4
|
|
803
|
+
* - If value is a Series, returns a Series; if value is a number, returns a number
|
|
804
|
+
*
|
|
805
|
+
* @example
|
|
806
|
+
* ```typescript
|
|
807
|
+
* math.atan(0) // Returns: 0
|
|
808
|
+
* math.atan(1) // Returns: 0.7853... (π/4)
|
|
809
|
+
* math.atan(-1) // Returns: -0.7853... (-π/4)
|
|
810
|
+
* math.atan(Infinity) // Returns: 1.5707... (π/2)
|
|
811
|
+
* ```
|
|
812
|
+
*/
|
|
813
|
+
export function atan(value: Series): Series;
|
|
814
|
+
export function atan(value: float): float;
|
|
815
|
+
export function atan(value: float | Series): float | Series {
|
|
816
|
+
if (value instanceof Series) {
|
|
817
|
+
const bars = value.bars;
|
|
818
|
+
const valueArray = value.toArray();
|
|
819
|
+
const length = bars.length;
|
|
820
|
+
|
|
821
|
+
const result: number[] = [];
|
|
822
|
+
for (let i = 0; i < length; i++) {
|
|
823
|
+
const v = valueArray[i] ?? NaN;
|
|
824
|
+
result.push(Math.atan(v));
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
return Series.fromArray(bars, result);
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
return Math.atan(value);
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
/**
|
|
834
|
+
* Converts an angle from degrees to radians.
|
|
835
|
+
*
|
|
836
|
+
* @param degrees - The angle in degrees or Series
|
|
837
|
+
* @returns The angle in radians
|
|
838
|
+
*
|
|
839
|
+
* @remarks
|
|
840
|
+
* - Radians = Degrees × (π / 180)
|
|
841
|
+
* - One full rotation: 360° = 2π radians
|
|
842
|
+
* - Common conversions: 90° = π/2, 180° = π, 270° = 3π/2
|
|
843
|
+
* - If degrees is a Series, returns a Series; if degrees is a number, returns a number
|
|
844
|
+
*
|
|
845
|
+
* @example
|
|
846
|
+
* ```typescript
|
|
847
|
+
* math.toradians(0) // Returns: 0
|
|
848
|
+
* math.toradians(90) // Returns: 1.5707... (π/2)
|
|
849
|
+
* math.toradians(180) // Returns: 3.1415... (π)
|
|
850
|
+
* math.toradians(360) // Returns: 6.2831... (2π)
|
|
851
|
+
* ```
|
|
852
|
+
*/
|
|
853
|
+
export function toradians(degrees: Series): Series;
|
|
854
|
+
export function toradians(degrees: float): float;
|
|
855
|
+
export function toradians(degrees: float | Series): float | Series {
|
|
856
|
+
if (degrees instanceof Series) {
|
|
857
|
+
const bars = degrees.bars;
|
|
858
|
+
const valueArray = degrees.toArray();
|
|
859
|
+
const length = bars.length;
|
|
860
|
+
|
|
861
|
+
const result: number[] = [];
|
|
862
|
+
for (let i = 0; i < length; i++) {
|
|
863
|
+
const v = valueArray[i] ?? NaN;
|
|
864
|
+
result.push(v * (Math.PI / 180));
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
return Series.fromArray(bars, result);
|
|
868
|
+
}
|
|
869
|
+
|
|
870
|
+
return degrees * (Math.PI / 180);
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
/**
|
|
874
|
+
* Converts an angle from radians to degrees.
|
|
875
|
+
*
|
|
876
|
+
* @param radians - The angle in radians or Series
|
|
877
|
+
* @returns The angle in degrees
|
|
878
|
+
*
|
|
879
|
+
* @remarks
|
|
880
|
+
* - Degrees = Radians × (180 / π)
|
|
881
|
+
* - One full rotation: 2π radians = 360°
|
|
882
|
+
* - Common conversions: π/2 = 90°, π = 180°, 3π/2 = 270°
|
|
883
|
+
* - If radians is a Series, returns a Series; if radians is a number, returns a number
|
|
884
|
+
*
|
|
885
|
+
* @example
|
|
886
|
+
* ```typescript
|
|
887
|
+
* math.todegrees(0) // Returns: 0
|
|
888
|
+
* math.todegrees(Math.PI / 2) // Returns: 90
|
|
889
|
+
* math.todegrees(Math.PI) // Returns: 180
|
|
890
|
+
* math.todegrees(2 * Math.PI) // Returns: 360
|
|
891
|
+
* ```
|
|
892
|
+
*/
|
|
893
|
+
export function todegrees(radians: Series): Series;
|
|
894
|
+
export function todegrees(radians: float): float;
|
|
895
|
+
export function todegrees(radians: float | Series): float | Series {
|
|
896
|
+
if (radians instanceof Series) {
|
|
897
|
+
const bars = radians.bars;
|
|
898
|
+
const valueArray = radians.toArray();
|
|
899
|
+
const length = bars.length;
|
|
900
|
+
|
|
901
|
+
const result: number[] = [];
|
|
902
|
+
for (let i = 0; i < length; i++) {
|
|
903
|
+
const v = valueArray[i] ?? NaN;
|
|
904
|
+
result.push(v * (180 / Math.PI));
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
return Series.fromArray(bars, result);
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
return radians * (180 / Math.PI);
|
|
911
|
+
}
|
|
912
|
+
|
|
913
|
+
/**
|
|
914
|
+
* Returns a pseudo-random number.
|
|
915
|
+
*
|
|
916
|
+
* @param min - Optional minimum value (inclusive)
|
|
917
|
+
* @param max - Optional maximum value (exclusive)
|
|
918
|
+
* @param seed - Optional seed for deterministic random
|
|
919
|
+
* @returns A random number in the specified range, or [0, 1) if no range specified
|
|
920
|
+
*
|
|
921
|
+
* @remarks
|
|
922
|
+
* - Without arguments: returns value in [0, 1)
|
|
923
|
+
* - With min and max: returns value in [min, max)
|
|
924
|
+
* - **WARNING**: The seed parameter is accepted for API compatibility but NOT currently implemented
|
|
925
|
+
* - This implementation always generates non-deterministic random values
|
|
926
|
+
* - PineScript's version supports deterministic seeding for repeatable sequences
|
|
927
|
+
*
|
|
928
|
+
* @example
|
|
929
|
+
* ```typescript
|
|
930
|
+
* math.random() // Returns: value between 0 and 1 (e.g., 0.234...)
|
|
931
|
+
* math.random(0, 10) // Returns: value between 0 and 10 (e.g., 7.45...)
|
|
932
|
+
* math.random(5, 15) // Returns: value between 5 and 15 (e.g., 11.82...)
|
|
933
|
+
* ```
|
|
934
|
+
*/
|
|
935
|
+
export function random(min?: float, max?: float, _seed?: int): float {
|
|
936
|
+
// TODO: Implement deterministic seeding to match PineScript behavior
|
|
937
|
+
// Currently _seed parameter is ignored
|
|
938
|
+
const rand = Math.random();
|
|
939
|
+
if (min !== undefined && max !== undefined) {
|
|
940
|
+
return min + rand * (max - min);
|
|
941
|
+
}
|
|
942
|
+
return rand;
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
/**
|
|
946
|
+
* Returns the sign of a number.
|
|
947
|
+
*
|
|
948
|
+
* @param value - The number to check or Series
|
|
949
|
+
* @returns 1 for positive, -1 for negative, 0 for zero
|
|
950
|
+
*
|
|
951
|
+
* @remarks
|
|
952
|
+
* - Returns 1 if value > 0
|
|
953
|
+
* - Returns -1 if value < 0
|
|
954
|
+
* - Returns 0 if value = 0
|
|
955
|
+
* - Useful for determining direction or polarity
|
|
956
|
+
* - If value is a Series, returns a Series; if value is a number, returns a number
|
|
957
|
+
*
|
|
958
|
+
* @example
|
|
959
|
+
* ```typescript
|
|
960
|
+
* math.sign(5) // Returns: 1
|
|
961
|
+
* math.sign(-3) // Returns: -1
|
|
962
|
+
* math.sign(0) // Returns: 0
|
|
963
|
+
* math.sign(0.001) // Returns: 1
|
|
964
|
+
* ```
|
|
965
|
+
*/
|
|
966
|
+
export function sign(value: Series): Series;
|
|
967
|
+
export function sign(value: float): int;
|
|
968
|
+
export function sign(value: float | Series): int | Series {
|
|
969
|
+
if (value instanceof Series) {
|
|
970
|
+
const bars = value.bars;
|
|
971
|
+
const valueArray = value.toArray();
|
|
972
|
+
const length = bars.length;
|
|
973
|
+
|
|
974
|
+
const result: number[] = [];
|
|
975
|
+
for (let i = 0; i < length; i++) {
|
|
976
|
+
const v = valueArray[i] ?? NaN;
|
|
977
|
+
result.push(v > 0 ? 1 : v < 0 ? -1 : 0);
|
|
978
|
+
}
|
|
979
|
+
|
|
980
|
+
return Series.fromArray(bars, result);
|
|
981
|
+
}
|
|
982
|
+
|
|
983
|
+
return value > 0 ? 1 : value < 0 ? -1 : 0;
|
|
984
|
+
}
|
|
985
|
+
|
|
986
|
+
/**
|
|
987
|
+
* Rounds a value to the nearest mintick.
|
|
988
|
+
*
|
|
989
|
+
* @param number - The number to round or Series
|
|
990
|
+
* @param mintick - Optional mintick value (defaults to requiring syminfo context)
|
|
991
|
+
* @returns The number rounded to tick precision
|
|
992
|
+
*
|
|
993
|
+
* @remarks
|
|
994
|
+
* - **PineScript v6 signature**: `math.round_to_mintick(number)` - uses implicit syminfo.mintick
|
|
995
|
+
* - **JavaScript signature**: Requires explicit `mintick` OR use `createContext()` with syminfo
|
|
996
|
+
* - Rounds to the nearest value divisible by mintick
|
|
997
|
+
* - Returns NaN for NaN input
|
|
998
|
+
* - Ties round up (0.5 -> 1)
|
|
999
|
+
* - If number is a Series, returns a Series; if number is a float, returns a float
|
|
1000
|
+
*
|
|
1001
|
+
* @example
|
|
1002
|
+
* ```typescript
|
|
1003
|
+
* // Direct call with explicit mintick
|
|
1004
|
+
* const rounded = math.round_to_mintick(1.2345, 0.01); // Returns: 1.23
|
|
1005
|
+
* const rounded2 = math.round_to_mintick(1.2367, 0.01); // Returns: 1.24
|
|
1006
|
+
*
|
|
1007
|
+
* // Or use context API for cleaner syntax
|
|
1008
|
+
* const { math } = createContext({ syminfo: { mintick: 0.01 } });
|
|
1009
|
+
* const rounded = math.round_to_mintick(1.2345); // Returns: 1.23
|
|
1010
|
+
* ```
|
|
1011
|
+
*/
|
|
1012
|
+
export function round_to_mintick(number: Series, mintick?: float): Series;
|
|
1013
|
+
export function round_to_mintick(number: float, mintick?: float): float;
|
|
1014
|
+
export function round_to_mintick(number: float | Series, mintick?: float): float | Series {
|
|
1015
|
+
if (number instanceof Series) {
|
|
1016
|
+
const bars = number.bars;
|
|
1017
|
+
const valueArray = number.toArray();
|
|
1018
|
+
const length = bars.length;
|
|
1019
|
+
|
|
1020
|
+
if (mintick === undefined) {
|
|
1021
|
+
throw new Error(
|
|
1022
|
+
'math.round_to_mintick() requires mintick value. ' +
|
|
1023
|
+
'Either pass it explicitly or use createContext({ syminfo: { mintick } }) for implicit data.'
|
|
1024
|
+
);
|
|
1025
|
+
}
|
|
1026
|
+
|
|
1027
|
+
const result: number[] = [];
|
|
1028
|
+
if (mintick === 0) {
|
|
1029
|
+
// No rounding needed
|
|
1030
|
+
for (let i = 0; i < length; i++) {
|
|
1031
|
+
result.push(valueArray[i] ?? NaN);
|
|
1032
|
+
}
|
|
1033
|
+
} else {
|
|
1034
|
+
for (let i = 0; i < length; i++) {
|
|
1035
|
+
const v = valueArray[i];
|
|
1036
|
+
if (v === undefined || isNaN(v)) {
|
|
1037
|
+
result.push(NaN);
|
|
1038
|
+
} else {
|
|
1039
|
+
result.push(Math.round(v / mintick) * mintick);
|
|
1040
|
+
}
|
|
1041
|
+
}
|
|
1042
|
+
}
|
|
1043
|
+
|
|
1044
|
+
return Series.fromArray(bars, result);
|
|
1045
|
+
}
|
|
1046
|
+
|
|
1047
|
+
// Scalar case
|
|
1048
|
+
if (isNaN(number)) {
|
|
1049
|
+
return NaN;
|
|
1050
|
+
}
|
|
1051
|
+
|
|
1052
|
+
if (mintick === undefined) {
|
|
1053
|
+
throw new Error(
|
|
1054
|
+
'math.round_to_mintick() requires mintick value. ' +
|
|
1055
|
+
'Either pass it explicitly or use createContext({ syminfo: { mintick } }) for implicit data.'
|
|
1056
|
+
);
|
|
1057
|
+
}
|
|
1058
|
+
|
|
1059
|
+
if (mintick === 0) {
|
|
1060
|
+
return number;
|
|
1061
|
+
}
|
|
1062
|
+
|
|
1063
|
+
// Round to nearest tick
|
|
1064
|
+
return Math.round(number / mintick) * mintick;
|
|
1065
|
+
}
|
|
1066
|
+
|
|
1067
|
+
// Constants
|
|
1068
|
+
export const pi = Math.PI;
|
|
1069
|
+
export const e = Math.E;
|
|
1070
|
+
export const phi = 1.618033988749895; // Golden ratio
|
|
1071
|
+
export const rphi = 0.618033988749895; // Reciprocal of golden ratio
|