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,983 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Array namespace
|
|
3
|
+
* Mirrors PineScript's array.* functions
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Creates a new array with initial size and default value
|
|
7
|
+
*/
|
|
8
|
+
export function new_array(size = 0, initial_value) {
|
|
9
|
+
const arr = [];
|
|
10
|
+
for (let i = 0; i < size; i++) {
|
|
11
|
+
arr.push(initial_value);
|
|
12
|
+
}
|
|
13
|
+
return arr;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Returns the number of elements in an array
|
|
17
|
+
*/
|
|
18
|
+
export function size(id) {
|
|
19
|
+
return id.length;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Returns the element at the specified index
|
|
23
|
+
*/
|
|
24
|
+
export function get(id, index) {
|
|
25
|
+
return id[index];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Sets the value of the element at the specified index
|
|
29
|
+
*/
|
|
30
|
+
export function set(id, index, value) {
|
|
31
|
+
id[index] = value;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Appends a value to the end of the array
|
|
35
|
+
*/
|
|
36
|
+
export function push(id, value) {
|
|
37
|
+
id.push(value);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Removes and returns the last element of the array
|
|
41
|
+
*/
|
|
42
|
+
export function pop(id) {
|
|
43
|
+
return id.pop();
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Inserts a value at the beginning of the array
|
|
47
|
+
*/
|
|
48
|
+
export function unshift(id, value) {
|
|
49
|
+
id.unshift(value);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Removes and returns the first element of the array
|
|
53
|
+
*/
|
|
54
|
+
export function shift(id) {
|
|
55
|
+
return id.shift();
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Removes all elements from the array
|
|
59
|
+
*/
|
|
60
|
+
export function clear(id) {
|
|
61
|
+
id.length = 0;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Inserts a value at the specified index
|
|
65
|
+
*/
|
|
66
|
+
export function insert(id, index, value) {
|
|
67
|
+
id.splice(index, 0, value);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Removes the element at the specified index
|
|
71
|
+
*/
|
|
72
|
+
export function remove(id, index) {
|
|
73
|
+
return id.splice(index, 1)[0];
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Returns true if the array contains the value
|
|
77
|
+
*/
|
|
78
|
+
export function includes(id, value) {
|
|
79
|
+
return id.includes(value);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Returns the index of the first occurrence of the value
|
|
83
|
+
*/
|
|
84
|
+
export function indexof(id, value) {
|
|
85
|
+
return id.indexOf(value);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Returns the index of the last occurrence of the value
|
|
89
|
+
*/
|
|
90
|
+
export function lastindexof(id, value) {
|
|
91
|
+
return id.lastIndexOf(value);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Returns a shallow copy of the array
|
|
95
|
+
*/
|
|
96
|
+
export function copy(id) {
|
|
97
|
+
return [...id];
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Concatenates two arrays
|
|
101
|
+
*/
|
|
102
|
+
export function concat(id1, id2) {
|
|
103
|
+
return [...id1, ...id2];
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Joins all elements into a string
|
|
107
|
+
*/
|
|
108
|
+
export function join(id, separator = ',') {
|
|
109
|
+
return id.join(separator);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Reverses the array in place
|
|
113
|
+
*/
|
|
114
|
+
export function reverse(id) {
|
|
115
|
+
id.reverse();
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Returns a slice of the array
|
|
119
|
+
*/
|
|
120
|
+
export function slice(id, index_from, index_to) {
|
|
121
|
+
return id.slice(index_from, index_to);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Sorts array elements (numeric)
|
|
125
|
+
*/
|
|
126
|
+
export function sort(id, order = 'asc') {
|
|
127
|
+
id.sort((a, b) => {
|
|
128
|
+
if (order === 'asc') {
|
|
129
|
+
return a - b;
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
return b - a;
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Returns the sum of all elements (numeric arrays only)
|
|
138
|
+
*/
|
|
139
|
+
export function sum(id) {
|
|
140
|
+
return id.reduce((acc, val) => acc + val, 0);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Returns the average of all elements (numeric arrays only)
|
|
144
|
+
*/
|
|
145
|
+
export function avg(id) {
|
|
146
|
+
return sum(id) / size(id);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* The `nth` smallest value (0 = the smallest) of the non-na elements (PineScript `array.min(id, nth)`).
|
|
150
|
+
* An `nth` past the end gives the greatest value; an array without values gives NaN.
|
|
151
|
+
*/
|
|
152
|
+
export function min(id, nth = 0) {
|
|
153
|
+
const values = id.filter((v) => !Number.isNaN(v)).sort((a, b) => a - b);
|
|
154
|
+
return values.length ? values[Math.min(nth, values.length - 1)] : NaN;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* The `nth` greatest value (0 = the greatest) of the non-na elements (PineScript `array.max(id, nth)`).
|
|
158
|
+
* An `nth` past the end gives the smallest value; an array without values gives NaN.
|
|
159
|
+
*/
|
|
160
|
+
export function max(id, nth = 0) {
|
|
161
|
+
const values = id.filter((v) => !Number.isNaN(v)).sort((a, b) => b - a);
|
|
162
|
+
return values.length ? values[Math.min(nth, values.length - 1)] : NaN;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Returns the median value (numeric arrays only)
|
|
166
|
+
*/
|
|
167
|
+
export function median(id) {
|
|
168
|
+
const sorted = [...id].sort((a, b) => a - b);
|
|
169
|
+
const mid = Math.floor(sorted.length / 2);
|
|
170
|
+
return sorted.length % 2 === 0 ? (sorted[mid - 1] + sorted[mid]) / 2 : sorted[mid];
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Returns the mode (most frequent value)
|
|
174
|
+
*/
|
|
175
|
+
export function mode(id) {
|
|
176
|
+
const frequency = new Map();
|
|
177
|
+
let maxFreq = 0;
|
|
178
|
+
let mode = id[0];
|
|
179
|
+
for (const val of id) {
|
|
180
|
+
const freq = (frequency.get(val) || 0) + 1;
|
|
181
|
+
frequency.set(val, freq);
|
|
182
|
+
if (freq > maxFreq) {
|
|
183
|
+
maxFreq = freq;
|
|
184
|
+
mode = val;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return mode;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Standard deviation of the non-na elements (PineScript `array.stdev(id, biased)`).
|
|
191
|
+
* `biased` true (default) divides by the count, false by the count - 1.
|
|
192
|
+
*/
|
|
193
|
+
export function stdev(id, biased = true) {
|
|
194
|
+
return Math.sqrt(variance(id, biased));
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Variance of the non-na elements (PineScript `array.variance(id, biased)`).
|
|
198
|
+
* `biased` true (default) divides by the count, false by the count - 1.
|
|
199
|
+
*/
|
|
200
|
+
export function variance(id, biased = true) {
|
|
201
|
+
const values = id.filter((v) => !Number.isNaN(v));
|
|
202
|
+
if (!values.length)
|
|
203
|
+
return NaN;
|
|
204
|
+
const mean = values.reduce((a, b) => a + b, 0) / values.length;
|
|
205
|
+
const squares = values.reduce((a, b) => a + (b - mean) * (b - mean), 0);
|
|
206
|
+
return squares / (biased ? values.length : values.length - 1);
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Fills the array with the specified value
|
|
210
|
+
*/
|
|
211
|
+
export function fill(id, value, index_from = 0, index_to) {
|
|
212
|
+
const end = index_to ?? id.length;
|
|
213
|
+
for (let i = index_from; i < end; i++) {
|
|
214
|
+
id[i] = value;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Creates an array from its arguments (PineScript `array.from(arg0, arg1, ...)`).
|
|
219
|
+
* `na` values are kept.
|
|
220
|
+
*
|
|
221
|
+
* @example
|
|
222
|
+
* ```typescript
|
|
223
|
+
* array.from(0.236, 0.382, 0.5, 0.618); // [0.236, 0.382, 0.5, 0.618]
|
|
224
|
+
* ```
|
|
225
|
+
*/
|
|
226
|
+
export function from(...values) {
|
|
227
|
+
return [...values];
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Returns the first element of the array
|
|
231
|
+
*
|
|
232
|
+
* @param id - The array
|
|
233
|
+
* @returns The first element, or undefined if array is empty
|
|
234
|
+
*
|
|
235
|
+
* @remarks
|
|
236
|
+
* - Equivalent to `array.get(id, 0)`
|
|
237
|
+
* - Returns undefined for empty arrays
|
|
238
|
+
*
|
|
239
|
+
* @example
|
|
240
|
+
* ```typescript
|
|
241
|
+
* const arr = [1, 2, 3, 4, 5];
|
|
242
|
+
* const firstElement = array.first(arr); // Returns: 1
|
|
243
|
+
* ```
|
|
244
|
+
*/
|
|
245
|
+
export function first(id) {
|
|
246
|
+
return id[0];
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Returns the last element of the array
|
|
250
|
+
*
|
|
251
|
+
* @param id - The array
|
|
252
|
+
* @returns The last element, or undefined if array is empty
|
|
253
|
+
*
|
|
254
|
+
* @remarks
|
|
255
|
+
* - Equivalent to `array.get(id, array.size(id) - 1)`
|
|
256
|
+
* - Returns undefined for empty arrays
|
|
257
|
+
*
|
|
258
|
+
* @example
|
|
259
|
+
* ```typescript
|
|
260
|
+
* const arr = [1, 2, 3, 4, 5];
|
|
261
|
+
* const lastElement = array.last(arr); // Returns: 5
|
|
262
|
+
* ```
|
|
263
|
+
*/
|
|
264
|
+
export function last(id) {
|
|
265
|
+
return id[id.length - 1];
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* True when at least one element of a bool array is true (PineScript `array.some(id)`).
|
|
269
|
+
* An empty array gives false.
|
|
270
|
+
*/
|
|
271
|
+
export function some(id) {
|
|
272
|
+
return id.some((v) => v === true);
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* True when every element of a bool array is true (PineScript `array.every(id)`).
|
|
276
|
+
* An empty array gives false, as in PineScript.
|
|
277
|
+
*/
|
|
278
|
+
export function every(id) {
|
|
279
|
+
return id.length > 0 && id.every((v) => v === true);
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Create new boolean array
|
|
283
|
+
*
|
|
284
|
+
* Creates a new array object of bool type elements.
|
|
285
|
+
*
|
|
286
|
+
* @param size - Initial size of array (default: 0)
|
|
287
|
+
* @param initial_value - Initial value for all elements (default: false)
|
|
288
|
+
* @returns New boolean array
|
|
289
|
+
*
|
|
290
|
+
* @example
|
|
291
|
+
* ```typescript
|
|
292
|
+
* const arr = array.new_bool(5, true);
|
|
293
|
+
* // Creates: [true, true, true, true, true]
|
|
294
|
+
* ```
|
|
295
|
+
*/
|
|
296
|
+
export function new_bool(size = 0, initial_value = false) {
|
|
297
|
+
return new_array(size, initial_value);
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Create new float array
|
|
301
|
+
*
|
|
302
|
+
* Creates a new array object of float type elements.
|
|
303
|
+
*
|
|
304
|
+
* @param size - Initial size of array (default: 0)
|
|
305
|
+
* @param initial_value - Initial value for all elements (default: NaN)
|
|
306
|
+
* @returns New float array
|
|
307
|
+
*
|
|
308
|
+
* @example
|
|
309
|
+
* ```typescript
|
|
310
|
+
* const arr = array.new_float(5, 0.0);
|
|
311
|
+
* // Creates: [0.0, 0.0, 0.0, 0.0, 0.0]
|
|
312
|
+
* ```
|
|
313
|
+
*/
|
|
314
|
+
export function new_float(size = 0, initial_value = NaN) {
|
|
315
|
+
return new_array(size, initial_value);
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Create new integer array
|
|
319
|
+
*
|
|
320
|
+
* Creates a new array object of int type elements.
|
|
321
|
+
*
|
|
322
|
+
* @param size - Initial size of array (default: 0)
|
|
323
|
+
* @param initial_value - Initial value for all elements (default: NaN)
|
|
324
|
+
* @returns New integer array
|
|
325
|
+
*
|
|
326
|
+
* @example
|
|
327
|
+
* ```typescript
|
|
328
|
+
* const arr = array.new_int(5, 0);
|
|
329
|
+
* // Creates: [0, 0, 0, 0, 0]
|
|
330
|
+
* ```
|
|
331
|
+
*/
|
|
332
|
+
export function new_int(size = 0, initial_value = NaN) {
|
|
333
|
+
return new_array(size, initial_value);
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Create new string array
|
|
337
|
+
*
|
|
338
|
+
* Creates a new array object of string type elements.
|
|
339
|
+
*
|
|
340
|
+
* @param size - Initial size of array (default: 0)
|
|
341
|
+
* @param initial_value - Initial value for all elements (default: undefined)
|
|
342
|
+
* @returns New string array
|
|
343
|
+
*
|
|
344
|
+
* @example
|
|
345
|
+
* ```typescript
|
|
346
|
+
* const arr = array.new_string(5, "text");
|
|
347
|
+
* // Creates: ["text", "text", "text", "text", "text"]
|
|
348
|
+
* ```
|
|
349
|
+
*/
|
|
350
|
+
export function new_string(size = 0, initial_value) {
|
|
351
|
+
return new_array(size, initial_value);
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Create new color array
|
|
355
|
+
*
|
|
356
|
+
* Creates a new array object of color type elements.
|
|
357
|
+
*
|
|
358
|
+
* @param size - Initial size of array (default: 0)
|
|
359
|
+
* @param initial_value - Initial value for all elements (default: undefined)
|
|
360
|
+
* @returns New color array
|
|
361
|
+
*
|
|
362
|
+
* @example
|
|
363
|
+
* ```typescript
|
|
364
|
+
* const arr = array.new_color(5, "#FF0000");
|
|
365
|
+
* // Creates: ["#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000"]
|
|
366
|
+
* ```
|
|
367
|
+
*/
|
|
368
|
+
export function new_color(size = 0, initial_value) {
|
|
369
|
+
return new_array(size, initial_value);
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Create new line array
|
|
373
|
+
*
|
|
374
|
+
* Creates a new array object of line type elements.
|
|
375
|
+
*
|
|
376
|
+
* @param size - Initial size of array (default: 0)
|
|
377
|
+
* @param initial_value - Initial value for all elements (default: undefined)
|
|
378
|
+
* @returns New line array
|
|
379
|
+
*
|
|
380
|
+
* @example
|
|
381
|
+
* ```typescript
|
|
382
|
+
* import { array, line } from 'oakscriptjs';
|
|
383
|
+
*
|
|
384
|
+
* // Create array to store last 15 lines
|
|
385
|
+
* const lines = array.new_line();
|
|
386
|
+
* const trendLine = line.new(0, 100, 50, 150);
|
|
387
|
+
* array.push(lines, trendLine);
|
|
388
|
+
*
|
|
389
|
+
* // Manage line count
|
|
390
|
+
* if (array.size(lines) > 15) {
|
|
391
|
+
* const oldLine = array.shift(lines);
|
|
392
|
+
* }
|
|
393
|
+
* ```
|
|
394
|
+
*
|
|
395
|
+
* @remarks
|
|
396
|
+
* Useful for managing collections of trend lines, support/resistance levels, or channel lines.
|
|
397
|
+
* In PineScript, this is typically used with line.delete() to manage chart object limits.
|
|
398
|
+
*/
|
|
399
|
+
export function new_line(size = 0, initial_value) {
|
|
400
|
+
return new_array(size, initial_value);
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Create new box array
|
|
404
|
+
*
|
|
405
|
+
* Creates a new array object of box type elements.
|
|
406
|
+
*
|
|
407
|
+
* @param size - Initial size of array (default: 0)
|
|
408
|
+
* @param initial_value - Initial value for all elements (default: undefined)
|
|
409
|
+
* @returns New box array
|
|
410
|
+
*
|
|
411
|
+
* @example
|
|
412
|
+
* ```typescript
|
|
413
|
+
* import { array, box } from 'oakscriptjs';
|
|
414
|
+
*
|
|
415
|
+
* // Create array to store gap boxes
|
|
416
|
+
* const gaps = array.new_box();
|
|
417
|
+
* const gapBox = box.new(10, 120, 15, 110);
|
|
418
|
+
* array.push(gaps, gapBox);
|
|
419
|
+
*
|
|
420
|
+
* // Track multiple gaps
|
|
421
|
+
* for (let i = 0; i < array.size(gaps); i++) {
|
|
422
|
+
* const gap = array.get(gaps, i);
|
|
423
|
+
* const gapTop = box.get_top(gap);
|
|
424
|
+
* const gapBottom = box.get_bottom(gap);
|
|
425
|
+
* // Check if gap filled...
|
|
426
|
+
* }
|
|
427
|
+
* ```
|
|
428
|
+
*
|
|
429
|
+
* @remarks
|
|
430
|
+
* Useful for tracking ranges, gaps, consolidation zones, or rectangle patterns.
|
|
431
|
+
* Enables systematic analysis of multiple box objects.
|
|
432
|
+
*/
|
|
433
|
+
export function new_box(size = 0, initial_value) {
|
|
434
|
+
return new_array(size, initial_value);
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* Create new label array
|
|
438
|
+
*
|
|
439
|
+
* Creates a new array object of label type elements.
|
|
440
|
+
*
|
|
441
|
+
* @param size - Initial size of array (default: 0)
|
|
442
|
+
* @param initial_value - Initial value for all elements (default: undefined)
|
|
443
|
+
* @returns New label array
|
|
444
|
+
*
|
|
445
|
+
* @example
|
|
446
|
+
* ```typescript
|
|
447
|
+
* import { array, label } from 'oakscriptjs';
|
|
448
|
+
*
|
|
449
|
+
* // Create array to store pivot labels
|
|
450
|
+
* const pivotLabels = array.new_label();
|
|
451
|
+
*
|
|
452
|
+
* // Add labels for pivot highs
|
|
453
|
+
* const pivotLabel = label.new(50, 155.5, 'PH', 'bar_index', 'abovebar');
|
|
454
|
+
* array.push(pivotLabels, pivotLabel);
|
|
455
|
+
*
|
|
456
|
+
* // Limit number of labels shown
|
|
457
|
+
* const maxLabels = 50;
|
|
458
|
+
* if (array.size(pivotLabels) > maxLabels) {
|
|
459
|
+
* array.shift(pivotLabels);
|
|
460
|
+
* }
|
|
461
|
+
* ```
|
|
462
|
+
*
|
|
463
|
+
* @remarks
|
|
464
|
+
* Useful for managing collections of annotations, pivot markers, or signal labels.
|
|
465
|
+
* Helps limit the number of labels displayed by removing old ones.
|
|
466
|
+
*/
|
|
467
|
+
export function new_label(size = 0, initial_value) {
|
|
468
|
+
return new_array(size, initial_value);
|
|
469
|
+
}
|
|
470
|
+
/**
|
|
471
|
+
* Create new linefill array
|
|
472
|
+
*
|
|
473
|
+
* Creates a new array object of linefill type elements.
|
|
474
|
+
*
|
|
475
|
+
* @param size - Initial size of array (default: 0)
|
|
476
|
+
* @param initial_value - Initial value for all elements (default: undefined)
|
|
477
|
+
* @returns New linefill array
|
|
478
|
+
*
|
|
479
|
+
* @example
|
|
480
|
+
* ```typescript
|
|
481
|
+
* import { array, line, linefill } from 'oakscriptjs';
|
|
482
|
+
*
|
|
483
|
+
* // Create array to store channel fills
|
|
484
|
+
* const channels = array.new_linefill();
|
|
485
|
+
*
|
|
486
|
+
* // Create channel
|
|
487
|
+
* const upperLine = line.new(0, 120, 50, 130);
|
|
488
|
+
* const lowerLine = line.new(0, 100, 50, 110);
|
|
489
|
+
* const channelFill = linefill.new(upperLine, lowerLine, '#0000FF15');
|
|
490
|
+
*
|
|
491
|
+
* array.push(channels, channelFill);
|
|
492
|
+
* ```
|
|
493
|
+
*
|
|
494
|
+
* @remarks
|
|
495
|
+
* Useful for managing collections of channel fills, Bollinger Band fills, or regression channel fills.
|
|
496
|
+
* Enables dynamic color changes across multiple channels.
|
|
497
|
+
*/
|
|
498
|
+
export function new_linefill(size = 0, initial_value) {
|
|
499
|
+
return new_array(size, initial_value);
|
|
500
|
+
}
|
|
501
|
+
/**
|
|
502
|
+
* Absolute value of array elements
|
|
503
|
+
*
|
|
504
|
+
* Returns an array containing the absolute value of each element in the original array.
|
|
505
|
+
*
|
|
506
|
+
* @param id - Array of numeric values
|
|
507
|
+
* @returns New array with absolute values
|
|
508
|
+
*
|
|
509
|
+
* @example
|
|
510
|
+
* ```typescript
|
|
511
|
+
* const arr = [-1, -2, 3, -4, 5];
|
|
512
|
+
* const result = array.abs(arr);
|
|
513
|
+
* // Returns: [1, 2, 3, 4, 5]
|
|
514
|
+
* ```
|
|
515
|
+
*/
|
|
516
|
+
export function abs(id) {
|
|
517
|
+
return id.map(x => Math.abs(x));
|
|
518
|
+
}
|
|
519
|
+
/**
|
|
520
|
+
* Range of array values
|
|
521
|
+
*
|
|
522
|
+
* Returns the difference between the maximum and minimum values in the array.
|
|
523
|
+
*
|
|
524
|
+
* @param id - Array of numeric values
|
|
525
|
+
* @returns Difference between max and min (range)
|
|
526
|
+
*
|
|
527
|
+
* @example
|
|
528
|
+
* ```typescript
|
|
529
|
+
* const arr = [1, 5, 3, 9, 2];
|
|
530
|
+
* const result = array.range(arr);
|
|
531
|
+
* // Returns: 8 (9 - 1)
|
|
532
|
+
* ```
|
|
533
|
+
*
|
|
534
|
+
* @remarks
|
|
535
|
+
* Returns NaN if the array is empty.
|
|
536
|
+
*/
|
|
537
|
+
export function range(id) {
|
|
538
|
+
if (id.length === 0) {
|
|
539
|
+
return NaN;
|
|
540
|
+
}
|
|
541
|
+
return max(id) - min(id);
|
|
542
|
+
}
|
|
543
|
+
/**
|
|
544
|
+
* Binary Search
|
|
545
|
+
*
|
|
546
|
+
* Searches for a value in a sorted array using binary search algorithm.
|
|
547
|
+
* Returns the index of the value if found, or -1 if not found.
|
|
548
|
+
*
|
|
549
|
+
* @param id - Sorted array (ascending order)
|
|
550
|
+
* @param val - Value to search for
|
|
551
|
+
* @returns Index of the value, or -1 if not found
|
|
552
|
+
*
|
|
553
|
+
* @example
|
|
554
|
+
* ```typescript
|
|
555
|
+
* const arr = [-2, 0, 1, 5, 9]; // Must be sorted
|
|
556
|
+
* const index = array.binary_search(arr, 5);
|
|
557
|
+
* // Returns: 3
|
|
558
|
+
* ```
|
|
559
|
+
*
|
|
560
|
+
* @remarks
|
|
561
|
+
* - Array must be sorted in ascending order
|
|
562
|
+
* - Uses standard binary search algorithm
|
|
563
|
+
* - Time complexity: O(log n)
|
|
564
|
+
*/
|
|
565
|
+
export function binary_search(id, val) {
|
|
566
|
+
let left = 0;
|
|
567
|
+
let right = id.length - 1;
|
|
568
|
+
while (left <= right) {
|
|
569
|
+
const mid = Math.floor((left + right) / 2);
|
|
570
|
+
if (id[mid] === val) {
|
|
571
|
+
return mid;
|
|
572
|
+
}
|
|
573
|
+
if (id[mid] < val) {
|
|
574
|
+
left = mid + 1;
|
|
575
|
+
}
|
|
576
|
+
else {
|
|
577
|
+
right = mid - 1;
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
return -1; // Not found
|
|
581
|
+
}
|
|
582
|
+
/**
|
|
583
|
+
* Binary Search Leftmost
|
|
584
|
+
*
|
|
585
|
+
* Returns the index of the value if found. When not found, returns the index
|
|
586
|
+
* of the next smallest element to the left of where the value would be.
|
|
587
|
+
*
|
|
588
|
+
* @param id - Sorted array (ascending order)
|
|
589
|
+
* @param val - Value to search for
|
|
590
|
+
* @returns Index of value or insertion point to the left
|
|
591
|
+
*
|
|
592
|
+
* @example
|
|
593
|
+
* ```typescript
|
|
594
|
+
* const arr = [-2, 0, 1, 5, 9];
|
|
595
|
+
* const index = array.binary_search_leftmost(arr, 3);
|
|
596
|
+
* // Returns: 2 (index of 1, which is left of where 3 would be)
|
|
597
|
+
* ```
|
|
598
|
+
*
|
|
599
|
+
* @example
|
|
600
|
+
* ```typescript
|
|
601
|
+
* const arr = [4, 5, 5, 5];
|
|
602
|
+
* const index = array.binary_search_leftmost(arr, 5);
|
|
603
|
+
* // Returns: 1 (index of first instance of 5)
|
|
604
|
+
* ```
|
|
605
|
+
*
|
|
606
|
+
* @remarks
|
|
607
|
+
* - Array must be sorted in ascending order
|
|
608
|
+
* - For duplicate values, returns leftmost occurrence
|
|
609
|
+
* - When value not found, returns position of next smaller element
|
|
610
|
+
*/
|
|
611
|
+
export function binary_search_leftmost(id, val) {
|
|
612
|
+
let left = 0;
|
|
613
|
+
let right = id.length - 1;
|
|
614
|
+
let result = -1;
|
|
615
|
+
let found = false;
|
|
616
|
+
while (left <= right) {
|
|
617
|
+
const mid = Math.floor((left + right) / 2);
|
|
618
|
+
if (id[mid] < val) {
|
|
619
|
+
if (!found) {
|
|
620
|
+
result = mid; // Track the last element smaller than val (only if not found)
|
|
621
|
+
}
|
|
622
|
+
left = mid + 1;
|
|
623
|
+
}
|
|
624
|
+
else if (id[mid] === val) {
|
|
625
|
+
result = mid;
|
|
626
|
+
found = true;
|
|
627
|
+
// Continue searching to the left for leftmost occurrence
|
|
628
|
+
right = mid - 1;
|
|
629
|
+
}
|
|
630
|
+
else {
|
|
631
|
+
// id[mid] > val
|
|
632
|
+
right = mid - 1;
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
return result;
|
|
636
|
+
}
|
|
637
|
+
/**
|
|
638
|
+
* Binary Search Rightmost
|
|
639
|
+
*
|
|
640
|
+
* Returns the index of the value if found. When not found, returns the index
|
|
641
|
+
* of the element to the right of where the value would be.
|
|
642
|
+
*
|
|
643
|
+
* @param id - Sorted array (ascending order)
|
|
644
|
+
* @param val - Value to search for
|
|
645
|
+
* @returns Index of value or insertion point to the right
|
|
646
|
+
*
|
|
647
|
+
* @example
|
|
648
|
+
* ```typescript
|
|
649
|
+
* const arr = [-2, 0, 1, 5, 9];
|
|
650
|
+
* const index = array.binary_search_rightmost(arr, 3);
|
|
651
|
+
* // Returns: 3 (index of 5, which is right of where 3 would be)
|
|
652
|
+
* ```
|
|
653
|
+
*
|
|
654
|
+
* @example
|
|
655
|
+
* ```typescript
|
|
656
|
+
* const arr = [4, 5, 5, 5];
|
|
657
|
+
* const index = array.binary_search_rightmost(arr, 5);
|
|
658
|
+
* // Returns: 3 (index of last instance of 5)
|
|
659
|
+
* ```
|
|
660
|
+
*
|
|
661
|
+
* @remarks
|
|
662
|
+
* - Array must be sorted in ascending order
|
|
663
|
+
* - For duplicate values, returns rightmost occurrence
|
|
664
|
+
* - When value not found, returns position of next larger element
|
|
665
|
+
*/
|
|
666
|
+
export function binary_search_rightmost(id, val) {
|
|
667
|
+
let left = 0;
|
|
668
|
+
let right = id.length - 1;
|
|
669
|
+
let result = -1;
|
|
670
|
+
let found = false;
|
|
671
|
+
while (left <= right) {
|
|
672
|
+
const mid = Math.floor((left + right) / 2);
|
|
673
|
+
if (id[mid] <= val) {
|
|
674
|
+
if (id[mid] === val) {
|
|
675
|
+
result = mid;
|
|
676
|
+
found = true;
|
|
677
|
+
}
|
|
678
|
+
// Continue searching to the right for rightmost occurrence
|
|
679
|
+
left = mid + 1;
|
|
680
|
+
}
|
|
681
|
+
else {
|
|
682
|
+
// id[mid] > val
|
|
683
|
+
if (!found) {
|
|
684
|
+
result = mid; // Track the first element greater than val (only if not found)
|
|
685
|
+
}
|
|
686
|
+
right = mid - 1;
|
|
687
|
+
}
|
|
688
|
+
}
|
|
689
|
+
return result;
|
|
690
|
+
}
|
|
691
|
+
/**
|
|
692
|
+
* Covariance
|
|
693
|
+
*
|
|
694
|
+
* Returns the covariance between two arrays.
|
|
695
|
+
*
|
|
696
|
+
* @param id1 - First array
|
|
697
|
+
* @param id2 - Second array
|
|
698
|
+
* @param biased - If true, uses biased estimate (population). If false, uses unbiased estimate (sample). Default: true
|
|
699
|
+
* @returns Covariance between the two arrays
|
|
700
|
+
*
|
|
701
|
+
* @example
|
|
702
|
+
* ```typescript
|
|
703
|
+
* const prices = [100, 102, 98, 105, 103];
|
|
704
|
+
* const volume = [1000, 1200, 950, 1300, 1100];
|
|
705
|
+
* const cov = array.covariance(prices, volume);
|
|
706
|
+
* // Returns covariance between price and volume
|
|
707
|
+
* ```
|
|
708
|
+
*
|
|
709
|
+
* @remarks
|
|
710
|
+
* - Biased (true): divides by n (population covariance)
|
|
711
|
+
* - Unbiased (false): divides by n-1 (sample covariance)
|
|
712
|
+
* - Returns NaN if arrays are empty or have different lengths
|
|
713
|
+
* - Formula: Cov(X,Y) = E[(X - μX)(Y - μY)]
|
|
714
|
+
*/
|
|
715
|
+
export function covariance(id1, id2, biased = true) {
|
|
716
|
+
if (id1.length === 0 || id2.length === 0) {
|
|
717
|
+
return NaN;
|
|
718
|
+
}
|
|
719
|
+
if (id1.length !== id2.length) {
|
|
720
|
+
return NaN;
|
|
721
|
+
}
|
|
722
|
+
const n = id1.length;
|
|
723
|
+
const mean1 = avg(id1);
|
|
724
|
+
const mean2 = avg(id2);
|
|
725
|
+
let sum = 0;
|
|
726
|
+
for (let i = 0; i < n; i++) {
|
|
727
|
+
sum += (id1[i] - mean1) * (id2[i] - mean2);
|
|
728
|
+
}
|
|
729
|
+
// Biased: divide by n, Unbiased: divide by n-1
|
|
730
|
+
const divisor = biased ? n : n - 1;
|
|
731
|
+
return sum / divisor;
|
|
732
|
+
}
|
|
733
|
+
/**
|
|
734
|
+
* Percentile Linear Interpolation
|
|
735
|
+
*
|
|
736
|
+
* Returns the value for which the specified percentage of array values are
|
|
737
|
+
* less than or equal to it, using linear interpolation.
|
|
738
|
+
*
|
|
739
|
+
* @param id - Array of numeric values
|
|
740
|
+
* @param percentage - Percentage (0-100)
|
|
741
|
+
* @returns Percentile value using linear interpolation
|
|
742
|
+
*
|
|
743
|
+
* @example
|
|
744
|
+
* ```typescript
|
|
745
|
+
* const arr = [1, 2, 3, 4, 5];
|
|
746
|
+
* const p50 = array.percentile_linear_interpolation(arr, 50);
|
|
747
|
+
* // Returns: 3 (median)
|
|
748
|
+
* ```
|
|
749
|
+
*
|
|
750
|
+
* @remarks
|
|
751
|
+
* - Uses linear interpolation between adjacent values
|
|
752
|
+
* - Result may not be a member of the array
|
|
753
|
+
* - Returns NaN if array is empty
|
|
754
|
+
*
|
|
755
|
+
* PineScript rules:
|
|
756
|
+
* - position in the sorted array: `percentage / 100 * size - 0.5`, clamped to the first / last value, linear
|
|
757
|
+
* interpolation between the two neighbours
|
|
758
|
+
* - `na` values are sorted after all numbers; with an `na` in the array, a position between two values gives `na`
|
|
759
|
+
*/
|
|
760
|
+
export function percentile_linear_interpolation(id, percentage) {
|
|
761
|
+
if (id.length === 0) {
|
|
762
|
+
return NaN;
|
|
763
|
+
}
|
|
764
|
+
const s = sortedNaLast(id);
|
|
765
|
+
const n = s.length;
|
|
766
|
+
const pos = (percentage / 100) * n - 0.5;
|
|
767
|
+
if (pos <= 0)
|
|
768
|
+
return s[0];
|
|
769
|
+
if (pos >= n - 1)
|
|
770
|
+
return s[n - 1];
|
|
771
|
+
const lo = Math.floor(pos);
|
|
772
|
+
const f = pos - lo;
|
|
773
|
+
if (f === 0)
|
|
774
|
+
return s[lo];
|
|
775
|
+
return Number.isNaN(s[n - 1]) ? NaN : s[lo] + f * (s[lo + 1] - s[lo]);
|
|
776
|
+
}
|
|
777
|
+
/** Array values sorted ascending, `na` values after the numbers (array.percentile_*). */
|
|
778
|
+
function sortedNaLast(id) {
|
|
779
|
+
const numbers = id.filter((v) => !Number.isNaN(v)).sort((a, b) => a - b);
|
|
780
|
+
return [...numbers, ...Array(id.length - numbers.length).fill(NaN)];
|
|
781
|
+
}
|
|
782
|
+
/**
|
|
783
|
+
* Percentile Nearest Rank
|
|
784
|
+
*
|
|
785
|
+
* Returns the value for which the specified percentage of array values are
|
|
786
|
+
* less than or equal to it, using the nearest-rank method.
|
|
787
|
+
*
|
|
788
|
+
* @param id - Array of numeric values
|
|
789
|
+
* @param percentage - Percentage (0-100)
|
|
790
|
+
* @returns Percentile value using nearest rank
|
|
791
|
+
*
|
|
792
|
+
* @example
|
|
793
|
+
* ```typescript
|
|
794
|
+
* const arr = [1, 2, 3, 4, 5];
|
|
795
|
+
* const p50 = array.percentile_nearest_rank(arr, 50);
|
|
796
|
+
* // Returns: 3 (median, always a member of array)
|
|
797
|
+
* ```
|
|
798
|
+
*
|
|
799
|
+
* @remarks
|
|
800
|
+
* - Result is always a member of the array
|
|
801
|
+
* - Uses nearest-rank method (no interpolation)
|
|
802
|
+
* - Returns NaN if array is empty
|
|
803
|
+
*
|
|
804
|
+
* PineScript rules:
|
|
805
|
+
* - the value at rank `ceil(percentage / 100 * size)` of the sorted array
|
|
806
|
+
* - `na` values are sorted after all numbers (na when that rank holds an `na`)
|
|
807
|
+
*/
|
|
808
|
+
export function percentile_nearest_rank(id, percentage) {
|
|
809
|
+
if (id.length === 0) {
|
|
810
|
+
return NaN;
|
|
811
|
+
}
|
|
812
|
+
const s = sortedNaLast(id);
|
|
813
|
+
const rank = Math.min(s.length, Math.max(1, Math.ceil((percentage / 100) * s.length)));
|
|
814
|
+
return s[rank - 1];
|
|
815
|
+
}
|
|
816
|
+
/**
|
|
817
|
+
* Percent Rank
|
|
818
|
+
*
|
|
819
|
+
* Returns the percentile rank of the element at the specified index.
|
|
820
|
+
* The percentile rank is the percentage of elements that are less than
|
|
821
|
+
* or equal to the reference value.
|
|
822
|
+
*
|
|
823
|
+
* @param id - Array of numeric values
|
|
824
|
+
* @param index - Index of element to rank
|
|
825
|
+
* @returns Percentile rank (0-100)
|
|
826
|
+
*
|
|
827
|
+
* @example
|
|
828
|
+
* ```typescript
|
|
829
|
+
* const arr = [1, 2, 3, 4, 5];
|
|
830
|
+
* const rank = array.percentrank(arr, 2); // Value at index 2 is 3
|
|
831
|
+
* // Returns: 40 (40% of values <= 3)
|
|
832
|
+
* ```
|
|
833
|
+
*
|
|
834
|
+
* @remarks
|
|
835
|
+
* - Returns percentage of elements <= the value at given index
|
|
836
|
+
* - Range: 0 to 100
|
|
837
|
+
* - Returns NaN if array is empty or index out of bounds
|
|
838
|
+
*/
|
|
839
|
+
export function percentrank(id, index) {
|
|
840
|
+
if (id.length === 0 || index < 0 || index >= id.length) {
|
|
841
|
+
return NaN;
|
|
842
|
+
}
|
|
843
|
+
const value = id[index];
|
|
844
|
+
if (isNaN(value)) {
|
|
845
|
+
return NaN;
|
|
846
|
+
}
|
|
847
|
+
// Count elements less than or equal to the value
|
|
848
|
+
let count = 0;
|
|
849
|
+
for (let i = 0; i < id.length; i++) {
|
|
850
|
+
if (!isNaN(id[i]) && id[i] <= value) {
|
|
851
|
+
count++;
|
|
852
|
+
}
|
|
853
|
+
}
|
|
854
|
+
// Calculate percentage
|
|
855
|
+
return (count / id.length) * 100;
|
|
856
|
+
}
|
|
857
|
+
/**
|
|
858
|
+
* Sort Indices
|
|
859
|
+
*
|
|
860
|
+
* Returns an array of indices which, when used to index the original array,
|
|
861
|
+
* will access its elements in their sorted order. Does not modify the original array.
|
|
862
|
+
*
|
|
863
|
+
* @param id - Array to get sorted indices from
|
|
864
|
+
* @param order - Sort order: 'asc' or 'desc' (default: 'asc')
|
|
865
|
+
* @returns Array of indices in sorted order
|
|
866
|
+
*
|
|
867
|
+
* @example
|
|
868
|
+
* ```typescript
|
|
869
|
+
* const arr = [5, -2, 0, 9, 1];
|
|
870
|
+
* const indices = array.sort_indices(arr); // [1, 2, 4, 0, 3]
|
|
871
|
+
* // arr[1] = -2 (smallest)
|
|
872
|
+
* // arr[2] = 0
|
|
873
|
+
* // arr[4] = 1
|
|
874
|
+
* // arr[0] = 5
|
|
875
|
+
* // arr[3] = 9 (largest)
|
|
876
|
+
* ```
|
|
877
|
+
*
|
|
878
|
+
* @remarks
|
|
879
|
+
* - Original array is not modified
|
|
880
|
+
* - Returns indices that would sort the array
|
|
881
|
+
* - Useful for maintaining correspondence with other arrays
|
|
882
|
+
*/
|
|
883
|
+
export function sort_indices(id, order = 'asc') {
|
|
884
|
+
// Create array of indices
|
|
885
|
+
const indices = Array.from({ length: id.length }, (_, i) => i);
|
|
886
|
+
// Sort indices based on values in original array
|
|
887
|
+
indices.sort((a, b) => {
|
|
888
|
+
if (order === 'asc') {
|
|
889
|
+
return id[a] - id[b];
|
|
890
|
+
}
|
|
891
|
+
else {
|
|
892
|
+
return id[b] - id[a];
|
|
893
|
+
}
|
|
894
|
+
});
|
|
895
|
+
return indices;
|
|
896
|
+
}
|
|
897
|
+
/**
|
|
898
|
+
* Standardize
|
|
899
|
+
*
|
|
900
|
+
* Returns an array of standardized elements (z-score normalization).
|
|
901
|
+
* Each element is transformed to (value - mean) / stddev.
|
|
902
|
+
*
|
|
903
|
+
* @param id - Array of numeric values
|
|
904
|
+
* @returns Array of standardized values (z-scores)
|
|
905
|
+
*
|
|
906
|
+
* @example
|
|
907
|
+
* ```typescript
|
|
908
|
+
* const arr = [1, 2, 3, 4, 5];
|
|
909
|
+
* const standardized = array.standardize(arr);
|
|
910
|
+
* // Mean = 3, StdDev ≈ 1.414
|
|
911
|
+
* // Result ≈ [-1.414, -0.707, 0, 0.707, 1.414]
|
|
912
|
+
* ```
|
|
913
|
+
*
|
|
914
|
+
* @remarks
|
|
915
|
+
* - Formula: z = (x - μ) / σ
|
|
916
|
+
* - Result has mean of 0 and standard deviation of 1
|
|
917
|
+
* - Returns array of NaN if standard deviation is 0
|
|
918
|
+
* - Useful for comparing values on different scales
|
|
919
|
+
*/
|
|
920
|
+
export function standardize(id) {
|
|
921
|
+
if (id.length === 0) {
|
|
922
|
+
return [];
|
|
923
|
+
}
|
|
924
|
+
const mean = avg(id);
|
|
925
|
+
const stdDev = stdev(id);
|
|
926
|
+
// If stddev is 0, all values are the same - return array of 0s or NaN
|
|
927
|
+
if (stdDev === 0) {
|
|
928
|
+
return id.map(() => NaN);
|
|
929
|
+
}
|
|
930
|
+
// Calculate z-score for each element
|
|
931
|
+
return id.map(value => (value - mean) / stdDev);
|
|
932
|
+
}
|
|
933
|
+
/**
|
|
934
|
+
* New Type (User-Defined Type Array)
|
|
935
|
+
*
|
|
936
|
+
* Creates a new array of user-defined type elements.
|
|
937
|
+
*
|
|
938
|
+
* @param size - Initial size of array (default: 0)
|
|
939
|
+
* @param initial_value - Initial value for all elements
|
|
940
|
+
* @returns New array of user-defined type
|
|
941
|
+
*
|
|
942
|
+
* @example
|
|
943
|
+
* ```typescript
|
|
944
|
+
* // NOTE: User-defined types (UDTs) are not fully supported yet
|
|
945
|
+
* // This is a placeholder for future implementation
|
|
946
|
+
* const arr = array.newtype<MyType>(5);
|
|
947
|
+
* ```
|
|
948
|
+
*
|
|
949
|
+
* @remarks
|
|
950
|
+
* - **⚠️ LIMITED SUPPORT**: User-defined types (UDTs) require a type system
|
|
951
|
+
* that is not yet fully implemented in this library
|
|
952
|
+
* - This function currently works like `new_array<T>()` for basic types
|
|
953
|
+
* - Full UDT support will be added in a future version
|
|
954
|
+
* - See PineScript documentation for UDT usage patterns
|
|
955
|
+
*/
|
|
956
|
+
export function newtype(size = 0, initial_value) {
|
|
957
|
+
// For now, this is just an alias for new_array
|
|
958
|
+
// Full UDT support requires implementing the type system
|
|
959
|
+
return new_array(size, initial_value);
|
|
960
|
+
}
|
|
961
|
+
/**
|
|
962
|
+
* ⚠️ RENDERING FUNCTIONS NOT IMPLEMENTED
|
|
963
|
+
*
|
|
964
|
+
* The following array constructor functions are intentionally excluded
|
|
965
|
+
* because they create arrays for rendering objects, which are outside
|
|
966
|
+
* the scope of this calculation-focused library:
|
|
967
|
+
*
|
|
968
|
+
* - `new_box()` - Creates arrays of box drawing objects
|
|
969
|
+
* - `new_label()` - Creates arrays of label objects
|
|
970
|
+
* - `new_line()` - Creates arrays of line drawing objects
|
|
971
|
+
* - `new_linefill()` - Creates arrays of line fill objects
|
|
972
|
+
* - `new_table()` - Creates arrays of table layout objects
|
|
973
|
+
*
|
|
974
|
+
* **Design Constraint**: This library focuses on calculation and indicator
|
|
975
|
+
* functions only. Rendering, visualization, and UI functions require a
|
|
976
|
+
* rendering engine and are not included.
|
|
977
|
+
*
|
|
978
|
+
* If you need these functions, consider:
|
|
979
|
+
* 1. Using PineScript directly
|
|
980
|
+
* 2. Implementing a rendering layer separately
|
|
981
|
+
* 3. Using this library for calculations and another library for visualization
|
|
982
|
+
*/
|
|
983
|
+
//# sourceMappingURL=index.js.map
|