oakscriptjs 0.8.2 → 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 -7981
- package/dist/index.d.ts +0 -64
- package/dist/index.d.ts.map +0 -1
- package/dist/index.mjs +0 -7964
- 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 -126
- package/dist/runtime/types.d.ts.map +0 -1
- package/dist/script/index.cjs +0 -6377
- package/dist/script/index.d.ts +0 -713
- package/dist/script/index.d.ts.map +0 -1
- package/dist/script/index.mjs +0 -6360
- 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/running-sum.d.ts +0 -3
- package/dist/ta/running-sum.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 -132
- 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
package/src/ta-series.ts
ADDED
|
@@ -0,0 +1,1036 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Technical analysis functions that work with Series
|
|
3
|
+
* Fixed wrappers around core ta.* functions with O(n) performance
|
|
4
|
+
* @module ta-series
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import * as taCore from './ta/index.js';
|
|
8
|
+
import { Series } from './runtime/series.js';
|
|
9
|
+
import type { Bar } from './types/index.js';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Simple Moving Average
|
|
13
|
+
* @param source - Source series
|
|
14
|
+
* @param length - Period length
|
|
15
|
+
* @returns Series with SMA values
|
|
16
|
+
*/
|
|
17
|
+
export function sma(source: Series, length: number): Series {
|
|
18
|
+
const bars = source.bars as Bar[];
|
|
19
|
+
const sourceValues = source.toArray();
|
|
20
|
+
const result = taCore.sma(sourceValues, length);
|
|
21
|
+
return Series.fromArray(bars, result);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Exponential Moving Average
|
|
26
|
+
* @param source - Source series
|
|
27
|
+
* @param length - Period length
|
|
28
|
+
* @returns Series with EMA values
|
|
29
|
+
*/
|
|
30
|
+
export function ema(source: Series, length: number): Series {
|
|
31
|
+
const bars = source.bars as Bar[];
|
|
32
|
+
const sourceValues = source.toArray();
|
|
33
|
+
const result = taCore.ema(sourceValues, length);
|
|
34
|
+
return Series.fromArray(bars, result);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Weighted Moving Average
|
|
39
|
+
* @param source - Source series
|
|
40
|
+
* @param length - Period length
|
|
41
|
+
* @returns Series with WMA values
|
|
42
|
+
*/
|
|
43
|
+
export function wma(source: Series, length: number): Series {
|
|
44
|
+
const bars = source.bars as Bar[];
|
|
45
|
+
const sourceValues = source.toArray();
|
|
46
|
+
const result = taCore.wma(sourceValues, length);
|
|
47
|
+
return Series.fromArray(bars, result);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Relative Moving Average
|
|
52
|
+
* @param source - Source series
|
|
53
|
+
* @param length - Period length
|
|
54
|
+
* @returns Series with RMA values
|
|
55
|
+
*/
|
|
56
|
+
export function rma(source: Series, length: number): Series {
|
|
57
|
+
const bars = source.bars as Bar[];
|
|
58
|
+
const sourceValues = source.toArray();
|
|
59
|
+
const result = taCore.rma(sourceValues, length);
|
|
60
|
+
return Series.fromArray(bars, result);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Relative Strength Index
|
|
65
|
+
* @param source - Source series
|
|
66
|
+
* @param length - Period length
|
|
67
|
+
* @returns Series with RSI values
|
|
68
|
+
*/
|
|
69
|
+
export function rsi(source: Series, length: number): Series {
|
|
70
|
+
const bars = source.bars as Bar[];
|
|
71
|
+
const sourceValues = source.toArray();
|
|
72
|
+
const result = taCore.rsi(sourceValues, length);
|
|
73
|
+
return Series.fromArray(bars, result);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Moving Average Convergence Divergence
|
|
78
|
+
* @param source - Source series
|
|
79
|
+
* @param fastLength - Fast EMA period
|
|
80
|
+
* @param slowLength - Slow EMA period
|
|
81
|
+
* @param signalLength - Signal line period
|
|
82
|
+
* @returns Tuple of [macdLine, signalLine, histogram] Series
|
|
83
|
+
*/
|
|
84
|
+
export function macd(
|
|
85
|
+
source: Series,
|
|
86
|
+
fastLength: number,
|
|
87
|
+
slowLength: number,
|
|
88
|
+
signalLength: number
|
|
89
|
+
): [Series, Series, Series] {
|
|
90
|
+
const bars = source.bars as Bar[];
|
|
91
|
+
const sourceValues = source.toArray();
|
|
92
|
+
const [macdVals, signalVals, histVals] = taCore.macd(sourceValues, fastLength, slowLength, signalLength);
|
|
93
|
+
|
|
94
|
+
const macdSeries = Series.fromArray(bars, macdVals);
|
|
95
|
+
const signalSeries = Series.fromArray(bars, signalVals);
|
|
96
|
+
const histSeries = Series.fromArray(bars, histVals);
|
|
97
|
+
|
|
98
|
+
return [macdSeries, signalSeries, histSeries];
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Bollinger Bands
|
|
103
|
+
* @param source - Source series
|
|
104
|
+
* @param length - Period length
|
|
105
|
+
* @param mult - Standard deviation multiplier
|
|
106
|
+
* @returns Tuple of [upper, basis, lower] Series
|
|
107
|
+
*/
|
|
108
|
+
export function bb(source: Series, length: number, mult: number): [Series, Series, Series] {
|
|
109
|
+
const bars = source.bars as Bar[];
|
|
110
|
+
const sourceValues = source.toArray();
|
|
111
|
+
const [upperVals, basisVals, lowerVals] = taCore.bb(sourceValues, length, mult);
|
|
112
|
+
|
|
113
|
+
const upperSeries = Series.fromArray(bars, upperVals);
|
|
114
|
+
const basisSeries = Series.fromArray(bars, basisVals);
|
|
115
|
+
const lowerSeries = Series.fromArray(bars, lowerVals);
|
|
116
|
+
|
|
117
|
+
return [upperSeries, basisSeries, lowerSeries];
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Standard deviation (PineScript ta.stdev; biased by default)
|
|
122
|
+
* @param source - Source series
|
|
123
|
+
* @param length - Period length
|
|
124
|
+
* @param biased - true (default): divide by length; false: by length - 1
|
|
125
|
+
* @returns Series with standard deviation values
|
|
126
|
+
*/
|
|
127
|
+
export function stdev(source: Series, length: number, biased: boolean = true): Series {
|
|
128
|
+
const bars = source.bars as Bar[];
|
|
129
|
+
return Series.fromArray(bars, taCore.stdev(source.toArray(), length, biased));
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Average True Range
|
|
135
|
+
* @param bars - Bar data
|
|
136
|
+
* @param length - Period length
|
|
137
|
+
* @returns Series with ATR values
|
|
138
|
+
*/
|
|
139
|
+
export function atr(bars: Bar[], length: number): Series {
|
|
140
|
+
const high = bars.map(b => b.high);
|
|
141
|
+
const low = bars.map(b => b.low);
|
|
142
|
+
const close = bars.map(b => b.close);
|
|
143
|
+
const result = taCore.atr(length, high, low, close);
|
|
144
|
+
return Series.fromArray(bars, result);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* True Range
|
|
149
|
+
* @param bars - Bar data
|
|
150
|
+
* @param handle_na - How NaN values are handled (default: false)
|
|
151
|
+
* @returns Series with TR values
|
|
152
|
+
*/
|
|
153
|
+
export function tr(bars: Bar[], handle_na: boolean = false): Series {
|
|
154
|
+
const high = bars.map(b => b.high);
|
|
155
|
+
const low = bars.map(b => b.low);
|
|
156
|
+
const close = bars.map(b => b.close);
|
|
157
|
+
const result = taCore.tr(handle_na, high, low, close);
|
|
158
|
+
return Series.fromArray(bars, result);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// Volume built-in variables. PineScript exposes them as variables of the chart bars
|
|
162
|
+
// (`ta.obv`); here they take the bars.
|
|
163
|
+
|
|
164
|
+
const col = (bars: Bar[], f: 'open' | 'high' | 'low' | 'close' | 'volume'): number[] =>
|
|
165
|
+
bars.map((b) => b[f] ?? NaN);
|
|
166
|
+
|
|
167
|
+
/** On Balance Volume (PineScript `ta.obv`) */
|
|
168
|
+
export function obv(bars: Bar[]): Series {
|
|
169
|
+
return Series.fromArray(bars, taCore.obv(col(bars, 'close'), col(bars, 'volume')));
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/** Price-Volume Trend (PineScript `ta.pvt`) */
|
|
173
|
+
export function pvt(bars: Bar[]): Series {
|
|
174
|
+
return Series.fromArray(bars, taCore.pvt(col(bars, 'close'), col(bars, 'volume')));
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/** Accumulation/Distribution index (PineScript `ta.accdist`) */
|
|
178
|
+
export function accdist(bars: Bar[]): Series {
|
|
179
|
+
return Series.fromArray(
|
|
180
|
+
bars,
|
|
181
|
+
taCore.accdist(col(bars, 'high'), col(bars, 'low'), col(bars, 'close'), col(bars, 'volume'))
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/** Negative Volume Index (PineScript `ta.nvi`) */
|
|
186
|
+
export function nvi(bars: Bar[]): Series {
|
|
187
|
+
return Series.fromArray(bars, taCore.nvi(col(bars, 'close'), col(bars, 'volume')));
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/** Positive Volume Index (PineScript `ta.pvi`) */
|
|
191
|
+
export function pvi(bars: Bar[]): Series {
|
|
192
|
+
return Series.fromArray(bars, taCore.pvi(col(bars, 'close'), col(bars, 'volume')));
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/** Intraday Intensity Index (PineScript `ta.iii`) */
|
|
196
|
+
export function iii(bars: Bar[]): Series {
|
|
197
|
+
return Series.fromArray(
|
|
198
|
+
bars,
|
|
199
|
+
taCore.iii(col(bars, 'high'), col(bars, 'low'), col(bars, 'close'), col(bars, 'volume'))
|
|
200
|
+
);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/** Williams Accumulation/Distribution (PineScript `ta.wad`) */
|
|
204
|
+
export function wad(bars: Bar[]): Series {
|
|
205
|
+
return Series.fromArray(bars, taCore.wad(col(bars, 'high'), col(bars, 'low'), col(bars, 'close')));
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/** Williams Variable Accumulation/Distribution (PineScript `ta.wvad`) */
|
|
209
|
+
export function wvad(bars: Bar[]): Series {
|
|
210
|
+
return Series.fromArray(
|
|
211
|
+
bars,
|
|
212
|
+
taCore.wvad(col(bars, 'open'), col(bars, 'high'), col(bars, 'low'), col(bars, 'close'), col(bars, 'volume'))
|
|
213
|
+
);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Stochastic %K
|
|
218
|
+
* @param source - Source series (typically close)
|
|
219
|
+
* @param high - High series
|
|
220
|
+
* @param low - Low series
|
|
221
|
+
* @param length - Period length
|
|
222
|
+
* @returns Series with stochastic values
|
|
223
|
+
*/
|
|
224
|
+
export function stoch(source: Series, high: Series, low: Series, length: number): Series {
|
|
225
|
+
const bars = source.bars as Bar[];
|
|
226
|
+
const sourceValues = source.toArray();
|
|
227
|
+
const highValues = high.toArray();
|
|
228
|
+
const lowValues = low.toArray();
|
|
229
|
+
const result = taCore.stoch(sourceValues, highValues, lowValues, length);
|
|
230
|
+
return Series.fromArray(bars, result);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Crossover detection
|
|
235
|
+
* @param source1 - First series
|
|
236
|
+
* @param source2 - Second series or number
|
|
237
|
+
* @returns Series with 1 where crossover, 0 otherwise
|
|
238
|
+
*/
|
|
239
|
+
export function crossover(source1: Series, source2: Series | number): Series {
|
|
240
|
+
const bars = source1.bars as Bar[];
|
|
241
|
+
const vals1 = source1.toArray();
|
|
242
|
+
const vals2 = typeof source2 === 'number'
|
|
243
|
+
? Array(bars.length).fill(source2)
|
|
244
|
+
: source2.toArray();
|
|
245
|
+
|
|
246
|
+
const result = taCore.crossover(vals1, vals2);
|
|
247
|
+
// Convert boolean array to number array
|
|
248
|
+
const numResult = result.map(b => b ? 1 : 0);
|
|
249
|
+
return Series.fromArray(bars, numResult);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Crossunder detection
|
|
254
|
+
* @param source1 - First series
|
|
255
|
+
* @param source2 - Second series or number
|
|
256
|
+
* @returns Series with 1 where crossunder, 0 otherwise
|
|
257
|
+
*/
|
|
258
|
+
export function crossunder(source1: Series, source2: Series | number): Series {
|
|
259
|
+
const bars = source1.bars as Bar[];
|
|
260
|
+
const vals1 = source1.toArray();
|
|
261
|
+
const vals2 = typeof source2 === 'number'
|
|
262
|
+
? Array(bars.length).fill(source2)
|
|
263
|
+
: source2.toArray();
|
|
264
|
+
|
|
265
|
+
const result = taCore.crossunder(vals1, vals2);
|
|
266
|
+
// Convert boolean array to number array
|
|
267
|
+
const numResult = result.map(b => b ? 1 : 0);
|
|
268
|
+
return Series.fromArray(bars, numResult);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* Cross detection
|
|
273
|
+
* @param source1 - First series
|
|
274
|
+
* @param source2 - Second series or number
|
|
275
|
+
* @returns Series with 1 where cross, 0 otherwise
|
|
276
|
+
*/
|
|
277
|
+
export function cross(source1: Series, source2: Series | number): Series {
|
|
278
|
+
const bars = source1.bars as Bar[];
|
|
279
|
+
const vals1 = source1.toArray();
|
|
280
|
+
const vals2 = typeof source2 === 'number'
|
|
281
|
+
? Array(bars.length).fill(source2)
|
|
282
|
+
: source2.toArray();
|
|
283
|
+
|
|
284
|
+
const result = taCore.cross(vals1, vals2);
|
|
285
|
+
// Convert boolean array to number array
|
|
286
|
+
const numResult = result.map(b => b ? 1 : 0);
|
|
287
|
+
return Series.fromArray(bars, numResult);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* Change (difference from previous value)
|
|
292
|
+
* @param source - Source series
|
|
293
|
+
* @param length - Lookback period
|
|
294
|
+
* @returns Series with change values
|
|
295
|
+
*/
|
|
296
|
+
export function change(source: Series, length: number = 1): Series {
|
|
297
|
+
const bars = source.bars as Bar[];
|
|
298
|
+
const sourceValues = source.toArray();
|
|
299
|
+
const result = taCore.change(sourceValues, length);
|
|
300
|
+
return Series.fromArray(bars, result);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* Momentum
|
|
305
|
+
* @param source - Source series
|
|
306
|
+
* @param length - Lookback period
|
|
307
|
+
* @returns Series with momentum values
|
|
308
|
+
*/
|
|
309
|
+
export function mom(source: Series, length: number): Series {
|
|
310
|
+
const bars = source.bars as Bar[];
|
|
311
|
+
const sourceValues = source.toArray();
|
|
312
|
+
const result = taCore.mom(sourceValues, length);
|
|
313
|
+
return Series.fromArray(bars, result);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Rate of Change
|
|
318
|
+
* @param source - Source series
|
|
319
|
+
* @param length - Lookback period
|
|
320
|
+
* @returns Series with ROC values
|
|
321
|
+
*/
|
|
322
|
+
export function roc(source: Series, length: number): Series {
|
|
323
|
+
const bars = source.bars as Bar[];
|
|
324
|
+
const sourceValues = source.toArray();
|
|
325
|
+
const result = taCore.roc(sourceValues, length);
|
|
326
|
+
return Series.fromArray(bars, result);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
/**
|
|
330
|
+
* Highest value in period
|
|
331
|
+
* @param source - Source series
|
|
332
|
+
* @param length - Period length
|
|
333
|
+
* @returns Series with highest values
|
|
334
|
+
*/
|
|
335
|
+
export function highest(source: Series, length: number): Series {
|
|
336
|
+
const bars = source.bars as Bar[];
|
|
337
|
+
const sourceValues = source.toArray();
|
|
338
|
+
const result = taCore.highest(sourceValues, length);
|
|
339
|
+
return Series.fromArray(bars, result);
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* Lowest value in period
|
|
344
|
+
* @param source - Source series
|
|
345
|
+
* @param length - Period length
|
|
346
|
+
* @returns Series with lowest values
|
|
347
|
+
*/
|
|
348
|
+
export function lowest(source: Series, length: number): Series {
|
|
349
|
+
const bars = source.bars as Bar[];
|
|
350
|
+
const sourceValues = source.toArray();
|
|
351
|
+
const result = taCore.lowest(sourceValues, length);
|
|
352
|
+
return Series.fromArray(bars, result);
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
/**
|
|
356
|
+
* Rising detection
|
|
357
|
+
* @param source - Source series
|
|
358
|
+
* @param length - Lookback period
|
|
359
|
+
* @returns Series with 1 where rising, 0 otherwise
|
|
360
|
+
*/
|
|
361
|
+
export function rising(source: Series, length: number): Series {
|
|
362
|
+
const bars = source.bars as Bar[];
|
|
363
|
+
const sourceValues = source.toArray();
|
|
364
|
+
const result = taCore.rising(sourceValues, length);
|
|
365
|
+
// Convert boolean array to number array
|
|
366
|
+
const numResult = result.map(b => b ? 1 : 0);
|
|
367
|
+
return Series.fromArray(bars, numResult);
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
/**
|
|
371
|
+
* Falling detection
|
|
372
|
+
* @param source - Source series
|
|
373
|
+
* @param length - Lookback period
|
|
374
|
+
* @returns Series with 1 where falling, 0 otherwise
|
|
375
|
+
*/
|
|
376
|
+
export function falling(source: Series, length: number): Series {
|
|
377
|
+
const bars = source.bars as Bar[];
|
|
378
|
+
const sourceValues = source.toArray();
|
|
379
|
+
const result = taCore.falling(sourceValues, length);
|
|
380
|
+
// Convert boolean array to number array
|
|
381
|
+
const numResult = result.map(b => b ? 1 : 0);
|
|
382
|
+
return Series.fromArray(bars, numResult);
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
/**
|
|
386
|
+
* Cumulative sum
|
|
387
|
+
* @param source - Source series
|
|
388
|
+
* @returns Series with cumulative sum values
|
|
389
|
+
*/
|
|
390
|
+
export function cum(source: Series): Series {
|
|
391
|
+
const bars = source.bars as Bar[];
|
|
392
|
+
const sourceValues = source.toArray();
|
|
393
|
+
const result = taCore.cum(sourceValues);
|
|
394
|
+
return Series.fromArray(bars, result);
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
/**
|
|
398
|
+
* Supertrend indicator
|
|
399
|
+
* @param bars - Bar data
|
|
400
|
+
* @param factor - Multiplier factor
|
|
401
|
+
* @param atrLength - ATR period length
|
|
402
|
+
* @returns Tuple of [supertrend, direction] Series
|
|
403
|
+
*/
|
|
404
|
+
export function supertrend(bars: Bar[], factor: number, atrLength: number): [Series, Series] {
|
|
405
|
+
const high = bars.map(b => b.high);
|
|
406
|
+
const low = bars.map(b => b.low);
|
|
407
|
+
const close = bars.map(b => b.close);
|
|
408
|
+
const [trendVals, dirVals] = taCore.supertrend(factor, atrLength, high, low, close);
|
|
409
|
+
|
|
410
|
+
const trendSeries = Series.fromArray(bars, trendVals);
|
|
411
|
+
const dirSeries = Series.fromArray(bars, dirVals);
|
|
412
|
+
|
|
413
|
+
return [trendSeries, dirSeries];
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
/**
|
|
417
|
+
* Volume Weighted Average Price (PineScript ta.vwap)
|
|
418
|
+
* @param source - Source series
|
|
419
|
+
* @param volume - Volume series
|
|
420
|
+
* @param anchor - Reset condition (non-zero = reset); without it the sums never restart
|
|
421
|
+
* @returns Series with VWAP values
|
|
422
|
+
*/
|
|
423
|
+
export function vwap(source: Series, volume: Series, anchor?: Series): Series {
|
|
424
|
+
const bars = source.bars as Bar[];
|
|
425
|
+
return Series.fromArray(bars, taCore.vwap(source.toArray(), volume.toArray(), anchor?.toArray()));
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
/**
|
|
429
|
+
* VWAP with standard deviation bands (PineScript `[vwap, upper, lower] = ta.vwap(source, anchor, stdev_mult)`)
|
|
430
|
+
* @returns [vwap, upper, lower] Series
|
|
431
|
+
*/
|
|
432
|
+
export function vwapBands(source: Series, volume: Series, anchor: Series | undefined, stdev_mult: number): [Series, Series, Series] {
|
|
433
|
+
const bars = source.bars as Bar[];
|
|
434
|
+
const [m, u, l] = taCore.vwap(source.toArray(), volume.toArray(), anchor?.toArray(), stdev_mult);
|
|
435
|
+
return [Series.fromArray(bars, m), Series.fromArray(bars, u), Series.fromArray(bars, l)];
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
|
|
439
|
+
/**
|
|
440
|
+
* Ichimoku Kinko Hyo (Ichimoku Cloud)
|
|
441
|
+
* @param bars - Bar data
|
|
442
|
+
* @param conversionPeriods - Period for Tenkan-sen (default: 9)
|
|
443
|
+
* @param basePeriods - Period for Kijun-sen (default: 26)
|
|
444
|
+
* @param laggingSpan2Periods - Period for Senkou Span B (default: 52)
|
|
445
|
+
* @param displacement - Displacement for Senkou Spans and Chikou Span (default: 26)
|
|
446
|
+
* @returns Tuple of [tenkanSen, kijunSen, senkouSpanA, senkouSpanB, chikouSpan] Series
|
|
447
|
+
*/
|
|
448
|
+
export function ichimoku(
|
|
449
|
+
bars: Bar[],
|
|
450
|
+
conversionPeriods: number,
|
|
451
|
+
basePeriods: number,
|
|
452
|
+
laggingSpan2Periods: number,
|
|
453
|
+
displacement: number
|
|
454
|
+
): [Series, Series, Series, Series, Series] {
|
|
455
|
+
const high = bars.map(b => b.high);
|
|
456
|
+
const low = bars.map(b => b.low);
|
|
457
|
+
const close = bars.map(b => b.close);
|
|
458
|
+
const [tenkan, kijun, senkouA, senkouB, chikou] = taCore.ichimoku(
|
|
459
|
+
conversionPeriods,
|
|
460
|
+
basePeriods,
|
|
461
|
+
laggingSpan2Periods,
|
|
462
|
+
displacement,
|
|
463
|
+
high,
|
|
464
|
+
low,
|
|
465
|
+
close
|
|
466
|
+
);
|
|
467
|
+
|
|
468
|
+
return [
|
|
469
|
+
Series.fromArray(bars, tenkan),
|
|
470
|
+
Series.fromArray(bars, kijun),
|
|
471
|
+
Series.fromArray(bars, senkouA),
|
|
472
|
+
Series.fromArray(bars, senkouB),
|
|
473
|
+
Series.fromArray(bars, chikou),
|
|
474
|
+
];
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
/**
|
|
478
|
+
* Volume Weighted Moving Average
|
|
479
|
+
* @param source - Source series
|
|
480
|
+
* @param length - Period length
|
|
481
|
+
* @param volume - Volume series
|
|
482
|
+
* @returns Series with VWMA values
|
|
483
|
+
*/
|
|
484
|
+
export function vwma(source: Series, length: number, volume: Series): Series {
|
|
485
|
+
const bars = source.bars as Bar[];
|
|
486
|
+
const sourceValues = source.toArray();
|
|
487
|
+
const volumeValues = volume.toArray();
|
|
488
|
+
const result = taCore.vwma(sourceValues, length, volumeValues);
|
|
489
|
+
return Series.fromArray(bars, result);
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
/**
|
|
493
|
+
* Linear Regression
|
|
494
|
+
* @param source - Source series
|
|
495
|
+
* @param length - Period length
|
|
496
|
+
* @param offset - Offset (default: 0)
|
|
497
|
+
* @returns Series with linear regression values
|
|
498
|
+
*/
|
|
499
|
+
export function linreg(source: Series, length: number, offset: number = 0): Series {
|
|
500
|
+
const bars = source.bars as Bar[];
|
|
501
|
+
const sourceValues = source.toArray();
|
|
502
|
+
const result = taCore.linreg(sourceValues, length, offset);
|
|
503
|
+
return Series.fromArray(bars, result);
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
/**
|
|
507
|
+
* Arnaud Legoux Moving Average
|
|
508
|
+
* @param source - Source series
|
|
509
|
+
* @param length - Period length (default: 9)
|
|
510
|
+
* @param offset - Controls tradeoff between smoothness and responsiveness (default: 0.85)
|
|
511
|
+
* @param sigma - Standard deviation factor for sharpness (default: 6)
|
|
512
|
+
* @param floor - Whether to floor the offset calculation (default: false)
|
|
513
|
+
* @returns Series with ALMA values
|
|
514
|
+
*/
|
|
515
|
+
export function alma(source: Series, length: number = 9, offset: number = 0.85, sigma: number = 6, floor: boolean = false): Series {
|
|
516
|
+
const bars = source.bars as Bar[];
|
|
517
|
+
const sourceValues = source.toArray();
|
|
518
|
+
const result = taCore.alma(sourceValues, length, offset, sigma, floor);
|
|
519
|
+
return Series.fromArray(bars, result);
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
/**
|
|
523
|
+
* ZigZag indicator - identifies significant trend reversals
|
|
524
|
+
* @param bars - Bar data
|
|
525
|
+
* @param deviation - Minimum percentage price change to form a new pivot (default: 5.0)
|
|
526
|
+
* @param depth - Minimum bars between pivots (default: 10)
|
|
527
|
+
* @param backstep - Bars to look back for confirmation (default: 3)
|
|
528
|
+
* @returns Tuple of [zigzag values, direction, isPivot flags] Series
|
|
529
|
+
* @remarks
|
|
530
|
+
* - The isPivot Series contains numeric values (1 for pivot, 0 for non-pivot)
|
|
531
|
+
* converted from boolean for consistency with other Series-based functions
|
|
532
|
+
* - The core ta.zigzag() function returns boolean isPivot values
|
|
533
|
+
*/
|
|
534
|
+
export function zigzag(
|
|
535
|
+
bars: Bar[],
|
|
536
|
+
deviation: number = 5,
|
|
537
|
+
depth: number = 10,
|
|
538
|
+
backstep: number = 3
|
|
539
|
+
): [Series, Series, Series] {
|
|
540
|
+
const high = bars.map(b => b.high);
|
|
541
|
+
const low = bars.map(b => b.low);
|
|
542
|
+
|
|
543
|
+
const [zigzagVals, dirVals, pivotVals] = taCore.zigzag(
|
|
544
|
+
deviation, depth, backstep, undefined, high, low
|
|
545
|
+
);
|
|
546
|
+
|
|
547
|
+
// Convert boolean pivot flags to numbers (1/0) for Series compatibility
|
|
548
|
+
return [
|
|
549
|
+
Series.fromArray(bars, zigzagVals),
|
|
550
|
+
Series.fromArray(bars, dirVals),
|
|
551
|
+
Series.fromArray(bars, pivotVals.map(b => b ? 1 : 0)),
|
|
552
|
+
];
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
/**
|
|
556
|
+
* Commodity Channel Index
|
|
557
|
+
* @param source - Source series (typically hlc3)
|
|
558
|
+
* @param length - Period length
|
|
559
|
+
* @returns Series with CCI values
|
|
560
|
+
*/
|
|
561
|
+
export function cci(source: Series, length: number): Series {
|
|
562
|
+
const bars = source.bars as Bar[];
|
|
563
|
+
const sourceValues = source.toArray();
|
|
564
|
+
const result = taCore.cci(sourceValues, length);
|
|
565
|
+
return Series.fromArray(bars, result);
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
/**
|
|
569
|
+
* Parabolic SAR (Stop and Reverse)
|
|
570
|
+
* @param bars - Bar data
|
|
571
|
+
* @param start - Initial acceleration factor (default: 0.02)
|
|
572
|
+
* @param inc - Acceleration factor increment (default: 0.02)
|
|
573
|
+
* @param max - Maximum acceleration factor (default: 0.2)
|
|
574
|
+
* @returns Series with SAR values
|
|
575
|
+
*/
|
|
576
|
+
export function sar(bars: Bar[], start: number = 0.02, inc: number = 0.02, max: number = 0.2): Series {
|
|
577
|
+
const high = bars.map(b => b.high);
|
|
578
|
+
const low = bars.map(b => b.low);
|
|
579
|
+
const close = bars.map(b => b.close);
|
|
580
|
+
const result = taCore.sar(start, inc, max, high, low, close);
|
|
581
|
+
return Series.fromArray(bars, result);
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
/**
|
|
585
|
+
* Deviation
|
|
586
|
+
* @param source - Source series
|
|
587
|
+
* @param length - Period length
|
|
588
|
+
* @returns Series with deviation values
|
|
589
|
+
*/
|
|
590
|
+
export function dev(source: Series, length: number): Series {
|
|
591
|
+
const bars = source.bars as Bar[];
|
|
592
|
+
const result = taCore.dev(source.toArray(), length);
|
|
593
|
+
return Series.fromArray(bars, result);
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
/**
|
|
597
|
+
* Variance
|
|
598
|
+
* @param source - Source series
|
|
599
|
+
* @param length - Period length
|
|
600
|
+
* @param biased - Use biased estimation (default: true)
|
|
601
|
+
* @returns Series with variance values
|
|
602
|
+
*/
|
|
603
|
+
export function variance(source: Series, length: number, biased: boolean = true): Series {
|
|
604
|
+
const bars = source.bars as Bar[];
|
|
605
|
+
const result = taCore.variance(source.toArray(), length, biased);
|
|
606
|
+
return Series.fromArray(bars, result);
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
/**
|
|
610
|
+
* Median
|
|
611
|
+
* @param source - Source series
|
|
612
|
+
* @param length - Period length
|
|
613
|
+
* @returns Series with median values
|
|
614
|
+
*/
|
|
615
|
+
export function median(source: Series, length: number): Series {
|
|
616
|
+
const bars = source.bars as Bar[];
|
|
617
|
+
const result = taCore.median(source.toArray(), length);
|
|
618
|
+
return Series.fromArray(bars, result);
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
/**
|
|
622
|
+
* Symmetrically Weighted Moving Average
|
|
623
|
+
* @param source - Source series
|
|
624
|
+
* @returns Series with SWMA values
|
|
625
|
+
*/
|
|
626
|
+
export function swma(source: Series): Series {
|
|
627
|
+
const bars = source.bars as Bar[];
|
|
628
|
+
const result = taCore.swma(source.toArray());
|
|
629
|
+
return Series.fromArray(bars, result);
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
/**
|
|
633
|
+
* Correlation
|
|
634
|
+
* @param source1 - First source series
|
|
635
|
+
* @param source2 - Second source series
|
|
636
|
+
* @param length - Period length
|
|
637
|
+
* @returns Series with correlation values
|
|
638
|
+
*/
|
|
639
|
+
export function correlation(source1: Series, source2: Series, length: number): Series {
|
|
640
|
+
const bars = source1.bars as Bar[];
|
|
641
|
+
const result = taCore.correlation(source1.toArray(), source2.toArray(), length);
|
|
642
|
+
return Series.fromArray(bars, result);
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
/**
|
|
646
|
+
* Percent Rank
|
|
647
|
+
* @param source - Source series
|
|
648
|
+
* @param length - Period length
|
|
649
|
+
* @returns Series with percent rank values
|
|
650
|
+
*/
|
|
651
|
+
export function percentrank(source: Series, length: number): Series {
|
|
652
|
+
const bars = source.bars as Bar[];
|
|
653
|
+
const result = taCore.percentrank(source.toArray(), length);
|
|
654
|
+
return Series.fromArray(bars, result);
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
/**
|
|
658
|
+
* Money Flow Index
|
|
659
|
+
* @param source - Source series (typically hlc3)
|
|
660
|
+
* @param length - Period length
|
|
661
|
+
* @param volume - Volume series
|
|
662
|
+
* @returns Series with MFI values
|
|
663
|
+
*/
|
|
664
|
+
export function mfi(source: Series, length: number, volume: Series): Series {
|
|
665
|
+
const bars = source.bars as Bar[];
|
|
666
|
+
const result = taCore.mfi(source.toArray(), length, volume.toArray());
|
|
667
|
+
return Series.fromArray(bars, result);
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
/**
|
|
671
|
+
* Hull Moving Average
|
|
672
|
+
* @param source - Source series
|
|
673
|
+
* @param length - Period length
|
|
674
|
+
* @returns Series with HMA values
|
|
675
|
+
*/
|
|
676
|
+
export function hma(source: Series, length: number): Series {
|
|
677
|
+
const bars = source.bars as Bar[];
|
|
678
|
+
const result = taCore.hma(source.toArray(), length);
|
|
679
|
+
return Series.fromArray(bars, result);
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
/**
|
|
683
|
+
* Pivot High
|
|
684
|
+
* @param source - Source series
|
|
685
|
+
* @param leftbars - Number of bars to the left of the pivot
|
|
686
|
+
* @param rightbars - Number of bars to the right of the pivot
|
|
687
|
+
* @returns Series with the pivot high value on the bar where the pivot is confirmed,
|
|
688
|
+
* `rightbars` bars after the pivot bar (as in PineScript), NaN elsewhere
|
|
689
|
+
*/
|
|
690
|
+
export function pivothigh(source: Series, leftbars: number, rightbars: number): Series {
|
|
691
|
+
const bars = source.bars as Bar[];
|
|
692
|
+
const result = taCore.pivothigh(source.toArray(), leftbars, rightbars);
|
|
693
|
+
return Series.fromArray(bars, result);
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
/**
|
|
697
|
+
* Pivot Low
|
|
698
|
+
* @param source - Source series
|
|
699
|
+
* @param leftbars - Number of bars to the left of the pivot
|
|
700
|
+
* @param rightbars - Number of bars to the right of the pivot
|
|
701
|
+
* @returns Series with the pivot low value on the bar where the pivot is confirmed,
|
|
702
|
+
* `rightbars` bars after the pivot bar (as in PineScript), NaN elsewhere
|
|
703
|
+
*/
|
|
704
|
+
export function pivotlow(source: Series, leftbars: number, rightbars: number): Series {
|
|
705
|
+
const bars = source.bars as Bar[];
|
|
706
|
+
const result = taCore.pivotlow(source.toArray(), leftbars, rightbars);
|
|
707
|
+
return Series.fromArray(bars, result);
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
/**
|
|
711
|
+
* Bars Since condition was true
|
|
712
|
+
* @param condition - Boolean series (1/0 values)
|
|
713
|
+
* @returns Series with bar count since condition was last true
|
|
714
|
+
*/
|
|
715
|
+
export function barssince(condition: Series): Series {
|
|
716
|
+
const bars = condition.bars as Bar[];
|
|
717
|
+
const boolValues = condition.toArray().map(v => v === 1);
|
|
718
|
+
const result = taCore.barssince(boolValues);
|
|
719
|
+
return Series.fromArray(bars, result);
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
/**
|
|
723
|
+
* Value When condition was true
|
|
724
|
+
* @param condition - Boolean series (1/0 values)
|
|
725
|
+
* @param source - Source series to extract values from
|
|
726
|
+
* @param occurrence - Which occurrence to use (0 = most recent)
|
|
727
|
+
* @returns Series with values from source when condition was true
|
|
728
|
+
*/
|
|
729
|
+
export function valuewhen(condition: Series, source: Series, occurrence: number): Series {
|
|
730
|
+
const bars = condition.bars as Bar[];
|
|
731
|
+
const boolValues = condition.toArray().map(v => v === 1);
|
|
732
|
+
const result = taCore.valuewhen(boolValues, source.toArray(), occurrence);
|
|
733
|
+
return Series.fromArray(bars, result);
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
/**
|
|
737
|
+
* Directional Movement Index
|
|
738
|
+
* @param bars - Bar data
|
|
739
|
+
* @param diLength - DI period length
|
|
740
|
+
* @param adxSmoothing - ADX smoothing period
|
|
741
|
+
* @returns Tuple of [plusDI, minusDI, adx] Series
|
|
742
|
+
*/
|
|
743
|
+
export function dmi(bars: Bar[], diLength: number, adxSmoothing: number): [Series, Series, Series] {
|
|
744
|
+
const high = bars.map(b => b.high);
|
|
745
|
+
const low = bars.map(b => b.low);
|
|
746
|
+
const close = bars.map(b => b.close);
|
|
747
|
+
const [plusDI, minusDI, adx] = taCore.dmi(diLength, adxSmoothing, high, low, close);
|
|
748
|
+
return [
|
|
749
|
+
Series.fromArray(bars, plusDI),
|
|
750
|
+
Series.fromArray(bars, minusDI),
|
|
751
|
+
Series.fromArray(bars, adx),
|
|
752
|
+
];
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
/**
|
|
756
|
+
* True Strength Index
|
|
757
|
+
* @param source - Source series
|
|
758
|
+
* @param shortLength - Short smoothing period
|
|
759
|
+
* @param longLength - Long smoothing period
|
|
760
|
+
* @returns Series with TSI values
|
|
761
|
+
*/
|
|
762
|
+
export function tsi(source: Series, shortLength: number, longLength: number): Series {
|
|
763
|
+
const bars = source.bars as Bar[];
|
|
764
|
+
const result = taCore.tsi(source.toArray(), shortLength, longLength);
|
|
765
|
+
return Series.fromArray(bars, result);
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
/**
|
|
769
|
+
* Chande Momentum Oscillator
|
|
770
|
+
* @param source - Source series
|
|
771
|
+
* @param length - Period length
|
|
772
|
+
* @returns Series with CMO values
|
|
773
|
+
*/
|
|
774
|
+
export function cmo(source: Series, length: number): Series {
|
|
775
|
+
const bars = source.bars as Bar[];
|
|
776
|
+
const result = taCore.cmo(source.toArray(), length);
|
|
777
|
+
return Series.fromArray(bars, result);
|
|
778
|
+
}
|
|
779
|
+
|
|
780
|
+
/**
|
|
781
|
+
* Keltner Channel
|
|
782
|
+
* @param bars - Bar data
|
|
783
|
+
* @param source - Source series
|
|
784
|
+
* @param length - Period length
|
|
785
|
+
* @param mult - Multiplier
|
|
786
|
+
* @param useTrueRange - Use true range (default: true)
|
|
787
|
+
* @returns Tuple of [middle, upper, lower] Series
|
|
788
|
+
*/
|
|
789
|
+
export function kc(bars: Bar[], source: Series, length: number, mult: number, useTrueRange: boolean = true): [Series, Series, Series] {
|
|
790
|
+
const high = bars.map(b => b.high);
|
|
791
|
+
const low = bars.map(b => b.low);
|
|
792
|
+
const close = bars.map(b => b.close);
|
|
793
|
+
const [middle, upper, lower] = taCore.kc(source.toArray(), length, mult, useTrueRange, high, low, close);
|
|
794
|
+
return [
|
|
795
|
+
Series.fromArray(bars, middle),
|
|
796
|
+
Series.fromArray(bars, upper),
|
|
797
|
+
Series.fromArray(bars, lower),
|
|
798
|
+
];
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
/**
|
|
802
|
+
* Bollinger Bands Width
|
|
803
|
+
* @param source - Source series
|
|
804
|
+
* @param length - Period length
|
|
805
|
+
* @param mult - Standard deviation multiplier
|
|
806
|
+
* @returns Series with BBW values
|
|
807
|
+
*/
|
|
808
|
+
export function bbw(source: Series, length: number, mult: number): Series {
|
|
809
|
+
const bars = source.bars as Bar[];
|
|
810
|
+
const result = taCore.bbw(source.toArray(), length, mult);
|
|
811
|
+
return Series.fromArray(bars, result);
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
/**
|
|
815
|
+
* Williams %R
|
|
816
|
+
* @param bars - Bar data
|
|
817
|
+
* @param length - Period length (default: 14)
|
|
818
|
+
* @returns Series with Williams %R values
|
|
819
|
+
*/
|
|
820
|
+
export function wpr(bars: Bar[], length: number = 14): Series {
|
|
821
|
+
const high = bars.map(b => b.high);
|
|
822
|
+
const low = bars.map(b => b.low);
|
|
823
|
+
const close = bars.map(b => b.close);
|
|
824
|
+
const result = taCore.wpr(high, low, close, length);
|
|
825
|
+
return Series.fromArray(bars, result);
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
/**
|
|
829
|
+
* Keltner Channel Width
|
|
830
|
+
* @param bars - Bar data
|
|
831
|
+
* @param source - Source series
|
|
832
|
+
* @param length - Period length (default: 20)
|
|
833
|
+
* @param mult - Multiplier (default: 2)
|
|
834
|
+
* @param useTrueRange - Use true range (default: true)
|
|
835
|
+
* @returns Series with KCW values
|
|
836
|
+
*/
|
|
837
|
+
export function kcw(bars: Bar[], source: Series, length: number = 20, mult: number = 2, useTrueRange: boolean = true): Series {
|
|
838
|
+
const high = bars.map(b => b.high);
|
|
839
|
+
const low = bars.map(b => b.low);
|
|
840
|
+
const close = bars.map(b => b.close);
|
|
841
|
+
const result = taCore.kcw(source.toArray(), length, mult, useTrueRange, high, low, close);
|
|
842
|
+
return Series.fromArray(bars, result);
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
/**
|
|
846
|
+
* Range: highest minus lowest value over the last `length` non-na values (PineScript ta.range)
|
|
847
|
+
* @param source - Source series
|
|
848
|
+
* @param length - Number of values
|
|
849
|
+
* @returns Series with range values
|
|
850
|
+
*/
|
|
851
|
+
export function range(source: Series, length: number): Series {
|
|
852
|
+
const bars = source.bars as Bar[];
|
|
853
|
+
return Series.fromArray(bars, taCore.range(source.toArray(), length));
|
|
854
|
+
}
|
|
855
|
+
|
|
856
|
+
|
|
857
|
+
/**
|
|
858
|
+
* Highest Bars - offset to the highest value
|
|
859
|
+
* @param source - Source series
|
|
860
|
+
* @param length - Period length
|
|
861
|
+
* @returns Series with bar offsets to highest value
|
|
862
|
+
*/
|
|
863
|
+
export function highestbars(source: Series, length: number): Series {
|
|
864
|
+
const bars = source.bars as Bar[];
|
|
865
|
+
const result = taCore.highestbars(source.toArray(), length);
|
|
866
|
+
return Series.fromArray(bars, result);
|
|
867
|
+
}
|
|
868
|
+
|
|
869
|
+
/**
|
|
870
|
+
* Lowest Bars - offset to the lowest value
|
|
871
|
+
* @param source - Source series
|
|
872
|
+
* @param length - Period length
|
|
873
|
+
* @returns Series with bar offsets to lowest value
|
|
874
|
+
*/
|
|
875
|
+
export function lowestbars(source: Series, length: number): Series {
|
|
876
|
+
const bars = source.bars as Bar[];
|
|
877
|
+
const result = taCore.lowestbars(source.toArray(), length);
|
|
878
|
+
return Series.fromArray(bars, result);
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
/**
|
|
882
|
+
* All-time highest value (PineScript ta.max)
|
|
883
|
+
* @param source - Source series
|
|
884
|
+
* @returns Series with the highest value up to each bar
|
|
885
|
+
*/
|
|
886
|
+
export function max(source: Series): Series {
|
|
887
|
+
const bars = source.bars as Bar[];
|
|
888
|
+
return Series.fromArray(bars, taCore.max(source.toArray()));
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
|
|
892
|
+
/**
|
|
893
|
+
* All-time lowest value (PineScript ta.min)
|
|
894
|
+
* @param source - Source series
|
|
895
|
+
* @returns Series with the lowest value up to each bar
|
|
896
|
+
*/
|
|
897
|
+
export function min(source: Series): Series {
|
|
898
|
+
const bars = source.bars as Bar[];
|
|
899
|
+
return Series.fromArray(bars, taCore.min(source.toArray()));
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
|
|
903
|
+
/**
|
|
904
|
+
* Center of Gravity
|
|
905
|
+
* @param source - Source series
|
|
906
|
+
* @param length - Period length (default: 10)
|
|
907
|
+
* @returns Series with COG values
|
|
908
|
+
*/
|
|
909
|
+
export function cog(source: Series, length: number = 10): Series {
|
|
910
|
+
const bars = source.bars as Bar[];
|
|
911
|
+
const result = taCore.cog(source.toArray(), length);
|
|
912
|
+
return Series.fromArray(bars, result);
|
|
913
|
+
}
|
|
914
|
+
|
|
915
|
+
/**
|
|
916
|
+
* Mode (most frequent value)
|
|
917
|
+
* @param source - Source series
|
|
918
|
+
* @param length - Period length
|
|
919
|
+
* @returns Series with mode values
|
|
920
|
+
*/
|
|
921
|
+
export function mode(source: Series, length: number): Series {
|
|
922
|
+
const bars = source.bars as Bar[];
|
|
923
|
+
const result = taCore.mode(source.toArray(), length);
|
|
924
|
+
return Series.fromArray(bars, result);
|
|
925
|
+
}
|
|
926
|
+
|
|
927
|
+
/**
|
|
928
|
+
* Percentile (linear interpolation)
|
|
929
|
+
* @param source - Source series
|
|
930
|
+
* @param length - Period length
|
|
931
|
+
* @param percentage - Percentile percentage
|
|
932
|
+
* @returns Series with percentile values
|
|
933
|
+
*/
|
|
934
|
+
export function percentile_linear_interpolation(source: Series, length: number, percentage: number): Series {
|
|
935
|
+
const bars = source.bars as Bar[];
|
|
936
|
+
const result = taCore.percentile_linear_interpolation(source.toArray(), length, percentage);
|
|
937
|
+
return Series.fromArray(bars, result);
|
|
938
|
+
}
|
|
939
|
+
|
|
940
|
+
/**
|
|
941
|
+
* Percentile (nearest rank)
|
|
942
|
+
* @param source - Source series
|
|
943
|
+
* @param length - Period length
|
|
944
|
+
* @param percentage - Percentile percentage
|
|
945
|
+
* @returns Series with percentile values
|
|
946
|
+
*/
|
|
947
|
+
export function percentile_nearest_rank(source: Series, length: number, percentage: number): Series {
|
|
948
|
+
const bars = source.bars as Bar[];
|
|
949
|
+
const result = taCore.percentile_nearest_rank(source.toArray(), length, percentage);
|
|
950
|
+
return Series.fromArray(bars, result);
|
|
951
|
+
}
|
|
952
|
+
|
|
953
|
+
/**
|
|
954
|
+
* Rank Correlation Index
|
|
955
|
+
* @param source - Source series
|
|
956
|
+
* @param length - Period length
|
|
957
|
+
* @returns Series with RCI values
|
|
958
|
+
*/
|
|
959
|
+
export function rci(source: Series, length: number): Series {
|
|
960
|
+
const bars = source.bars as Bar[];
|
|
961
|
+
const result = taCore.rci(source.toArray(), length);
|
|
962
|
+
return Series.fromArray(bars, result);
|
|
963
|
+
}
|
|
964
|
+
|
|
965
|
+
// Export as namespace object to match PineScript ta.* syntax
|
|
966
|
+
export const ta = {
|
|
967
|
+
sma,
|
|
968
|
+
ema,
|
|
969
|
+
wma,
|
|
970
|
+
vwma,
|
|
971
|
+
rma,
|
|
972
|
+
rsi,
|
|
973
|
+
macd,
|
|
974
|
+
bb,
|
|
975
|
+
stdev,
|
|
976
|
+
atr,
|
|
977
|
+
tr,
|
|
978
|
+
stoch,
|
|
979
|
+
crossover,
|
|
980
|
+
crossunder,
|
|
981
|
+
cross,
|
|
982
|
+
change,
|
|
983
|
+
mom,
|
|
984
|
+
roc,
|
|
985
|
+
highest,
|
|
986
|
+
lowest,
|
|
987
|
+
rising,
|
|
988
|
+
falling,
|
|
989
|
+
cum,
|
|
990
|
+
supertrend,
|
|
991
|
+
vwap,
|
|
992
|
+
ichimoku,
|
|
993
|
+
linreg,
|
|
994
|
+
alma,
|
|
995
|
+
zigzag,
|
|
996
|
+
cci,
|
|
997
|
+
sar,
|
|
998
|
+
dev,
|
|
999
|
+
variance,
|
|
1000
|
+
median,
|
|
1001
|
+
swma,
|
|
1002
|
+
correlation,
|
|
1003
|
+
percentrank,
|
|
1004
|
+
mfi,
|
|
1005
|
+
hma,
|
|
1006
|
+
pivothigh,
|
|
1007
|
+
pivotlow,
|
|
1008
|
+
barssince,
|
|
1009
|
+
valuewhen,
|
|
1010
|
+
dmi,
|
|
1011
|
+
tsi,
|
|
1012
|
+
cmo,
|
|
1013
|
+
kc,
|
|
1014
|
+
bbw,
|
|
1015
|
+
wpr,
|
|
1016
|
+
kcw,
|
|
1017
|
+
range,
|
|
1018
|
+
highestbars,
|
|
1019
|
+
lowestbars,
|
|
1020
|
+
max,
|
|
1021
|
+
min,
|
|
1022
|
+
vwapBands,
|
|
1023
|
+
obv,
|
|
1024
|
+
pvt,
|
|
1025
|
+
accdist,
|
|
1026
|
+
nvi,
|
|
1027
|
+
pvi,
|
|
1028
|
+
iii,
|
|
1029
|
+
wad,
|
|
1030
|
+
wvad,
|
|
1031
|
+
cog,
|
|
1032
|
+
mode,
|
|
1033
|
+
percentile_linear_interpolation,
|
|
1034
|
+
percentile_nearest_rank,
|
|
1035
|
+
rci,
|
|
1036
|
+
};
|