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,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Per-call history of ta.* functions called in a conditional block.
|
|
3
|
+
*
|
|
4
|
+
* In PineScript, every ta.* call keeps its own history of the values it receives. A call inside
|
|
5
|
+
* an `if` block receives values only on the bars where the block runs, so its history skips the
|
|
6
|
+
* other bars: `ta.crossover(a, b)` is false on the first bar the block runs, and `ta.sma(x, 3)`
|
|
7
|
+
* averages the last 3 values it received, not the last 3 bars.
|
|
8
|
+
*
|
|
9
|
+
* - {@link whenCalled}: vectorized, when the bars of the calls are known in advance.
|
|
10
|
+
* - {@link crossover} / {@link crossunder} / {@link cross} / {@link barssince}: one stateful call site for bar
|
|
11
|
+
* loops, called only on the bars where the Pine call runs.
|
|
12
|
+
*
|
|
13
|
+
* Since PineScript v6, `and` / `or` are lazy: the right operand runs only when the left operand does not decide
|
|
14
|
+
* the result. A ta.* call in the right operand of `a or b` runs on the bars where `a` is false, in `a and b` on the
|
|
15
|
+
* bars where `a` is true, so it needs a call site too:
|
|
16
|
+
*
|
|
17
|
+
* ```typescript
|
|
18
|
+
* // Pine: longCond = longUp or (src > sig and ta.barssince(longUp) <= lookback)
|
|
19
|
+
* const since = callsite.whenCalled(longUp.map((u, i) => !u && src[i] > sig[i]), (c) => taCore.barssince(c.map(Boolean)), longUp);
|
|
20
|
+
* // ta.barssince(longUp) only runs where longUp is false: it never sees true and stays na
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* ```typescript
|
|
24
|
+
* // Pine: if inRange
|
|
25
|
+
* // buy = ta.crossover(cumRsi, 60)
|
|
26
|
+
* const buy = callsite.whenCalled(inRange, (a) => taCore.crossover(a, a.map(() => 60)), cumRsi);
|
|
27
|
+
*
|
|
28
|
+
* // Same call in a bar loop
|
|
29
|
+
* const buyCross = callsite.crossover();
|
|
30
|
+
* for (let i = 0; i < n; i++) {
|
|
31
|
+
* if (inRange[i]) {
|
|
32
|
+
* const buy = buyCross(cumRsi[i], 60);
|
|
33
|
+
* }
|
|
34
|
+
* }
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* @module callsite
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
import type { Source } from '../types/index.js';
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Runs `fn` on the bars where `called` is true only, like a ta.* call inside an `if` block.
|
|
44
|
+
* `fn` receives the values of `sources` on those bars, in order; its results are placed back on
|
|
45
|
+
* the same bars. The other bars get na (NaN).
|
|
46
|
+
*
|
|
47
|
+
* @param called - true (or non-zero) on the bars where the call runs
|
|
48
|
+
* @param fn - the calculation, for example `(x) => taCore.sma(x, 3)`
|
|
49
|
+
* @param sources - the arguments of the call, one value per chart bar
|
|
50
|
+
*/
|
|
51
|
+
export function whenCalled<T extends number | boolean>(
|
|
52
|
+
called: ArrayLike<boolean | number>,
|
|
53
|
+
fn: (...values: number[][]) => ArrayLike<T>,
|
|
54
|
+
...sources: Source[]
|
|
55
|
+
): Array<T | number> {
|
|
56
|
+
const bars: number[] = [];
|
|
57
|
+
for (let i = 0; i < called.length; i++) if (called[i]) bars.push(i);
|
|
58
|
+
const result = fn(...sources.map(s => bars.map(i => s[i] ?? NaN)));
|
|
59
|
+
const out = new Array<T | number>(called.length).fill(NaN);
|
|
60
|
+
bars.forEach((bar, k) => {
|
|
61
|
+
out[bar] = result[k]!;
|
|
62
|
+
});
|
|
63
|
+
return out;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** A call site that keeps the two previous arguments (na before the first call). */
|
|
67
|
+
function twoSeriesSite(test: (a: number, b: number, prevA: number, prevB: number) => boolean) {
|
|
68
|
+
let prevA = NaN;
|
|
69
|
+
let prevB = NaN;
|
|
70
|
+
return (a: number, b: number): boolean => {
|
|
71
|
+
const result = test(a, b, prevA, prevB);
|
|
72
|
+
prevA = a;
|
|
73
|
+
prevB = b;
|
|
74
|
+
return result;
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** One `ta.crossover(a, b)` call site: false on its first call, as its history is na. */
|
|
79
|
+
export function crossover(): (a: number, b: number) => boolean {
|
|
80
|
+
return twoSeriesSite((a, b, pa, pb) => a > b && pa <= pb);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** One `ta.crossunder(a, b)` call site: false on its first call, as its history is na. */
|
|
84
|
+
export function crossunder(): (a: number, b: number) => boolean {
|
|
85
|
+
return twoSeriesSite((a, b, pa, pb) => a < b && pa >= pb);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* One `ta.barssince(condition)` call site: the number of calls since the condition was true on a call (0 on that
|
|
90
|
+
* call), na before the first true condition. An na condition counts as false.
|
|
91
|
+
*/
|
|
92
|
+
export function barssince(): (condition: boolean | number) => number {
|
|
93
|
+
let count = NaN;
|
|
94
|
+
return (condition) => {
|
|
95
|
+
if (condition && !Number.isNaN(condition)) count = 0;
|
|
96
|
+
else if (!Number.isNaN(count)) count++;
|
|
97
|
+
return count;
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/** One `ta.cross(a, b)` call site: false on its first call, as its history is na. */
|
|
102
|
+
export function cross(): (a: number, b: number) => boolean {
|
|
103
|
+
return twoSeriesSite((a, b, pa, pb) => (a > b && pa <= pb) || (a < b && pa >= pb));
|
|
104
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chart Point namespace
|
|
3
|
+
* Functions for creating and manipulating chart point objects.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* Chart points represent specific locations on a chart with time, index, and price coordinates.
|
|
7
|
+
* They are primarily used with polylines and other drawing objects that require multiple points.
|
|
8
|
+
*
|
|
9
|
+
* @version 6
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { ChartPoint } from '../types/index.js';
|
|
13
|
+
|
|
14
|
+
// Re-export the ChartPoint type for convenience
|
|
15
|
+
export type { ChartPoint };
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Creates a new chart point with all coordinates.
|
|
19
|
+
*
|
|
20
|
+
* @param time - UNIX timestamp in milliseconds (or null if using bar index)
|
|
21
|
+
* @param index - Bar index (or null if using time)
|
|
22
|
+
* @param price - Y-axis price value
|
|
23
|
+
* @returns New ChartPoint object
|
|
24
|
+
*
|
|
25
|
+
* @remarks
|
|
26
|
+
* Creates a chart point that can be used with polylines and other multi-point drawing objects.
|
|
27
|
+
* Typically, you would provide either time or index, not both, depending on the xloc mode.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* // Create a point with both time and index
|
|
32
|
+
* const point = chartPoint.new(1609459200000, 100, 150.5);
|
|
33
|
+
*
|
|
34
|
+
* // Create a point with only index
|
|
35
|
+
* const indexPoint = chartPoint.new(null, 50, 200);
|
|
36
|
+
*
|
|
37
|
+
* // Create a point with only time
|
|
38
|
+
* const timePoint = chartPoint.new(1609459200000, null, 175);
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export function new_point(
|
|
42
|
+
time: number | null,
|
|
43
|
+
index: number | null,
|
|
44
|
+
price: number
|
|
45
|
+
): ChartPoint {
|
|
46
|
+
return {
|
|
47
|
+
time,
|
|
48
|
+
index,
|
|
49
|
+
price,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Creates a chart point from time and price.
|
|
55
|
+
*
|
|
56
|
+
* @param time - UNIX timestamp in milliseconds
|
|
57
|
+
* @param price - Y-axis price value
|
|
58
|
+
* @returns New ChartPoint object with index set to null
|
|
59
|
+
*
|
|
60
|
+
* @remarks
|
|
61
|
+
* Convenience function for creating points when using xloc.bar_time mode.
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```typescript
|
|
65
|
+
* // Create a point using timestamp
|
|
66
|
+
* const point = chartPoint.from_time(1609459200000, 150.5);
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
export function from_time(time: number, price: number): ChartPoint {
|
|
70
|
+
return {
|
|
71
|
+
time,
|
|
72
|
+
index: null,
|
|
73
|
+
price,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Creates a chart point from bar index and price.
|
|
79
|
+
*
|
|
80
|
+
* @param index - Bar index
|
|
81
|
+
* @param price - Y-axis price value
|
|
82
|
+
* @returns New ChartPoint object with time set to null
|
|
83
|
+
*
|
|
84
|
+
* @remarks
|
|
85
|
+
* Convenience function for creating points when using xloc.bar_index mode.
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```typescript
|
|
89
|
+
* // Create a point using bar index
|
|
90
|
+
* const point = chartPoint.from_index(50, 150.5);
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
export function from_index(index: number, price: number): ChartPoint {
|
|
94
|
+
return {
|
|
95
|
+
time: null,
|
|
96
|
+
index,
|
|
97
|
+
price,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Creates a copy of a chart point.
|
|
103
|
+
*
|
|
104
|
+
* @param point - ChartPoint to copy
|
|
105
|
+
* @returns New ChartPoint object with same values
|
|
106
|
+
*
|
|
107
|
+
* @remarks
|
|
108
|
+
* Creates a shallow copy of the chart point. Since ChartPoint is immutable (readonly properties),
|
|
109
|
+
* this creates an independent copy.
|
|
110
|
+
*
|
|
111
|
+
* @example
|
|
112
|
+
* ```typescript
|
|
113
|
+
* const original = chartPoint.from_index(10, 100);
|
|
114
|
+
* const copied = chartPoint.copy(original);
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
export function copy(point: ChartPoint): ChartPoint {
|
|
118
|
+
return {
|
|
119
|
+
time: point.time,
|
|
120
|
+
index: point.index,
|
|
121
|
+
price: point.price,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Alias to match PineScript API (chart.point.new)
|
|
126
|
+
export { new_point as new };
|
|
@@ -0,0 +1,411 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Color namespace
|
|
3
|
+
* Mirrors PineScript's color.* functions for color creation and manipulation.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* All color functions in this namespace follow PineScript v6 API specifications.
|
|
7
|
+
* Colors are represented as RGB or RGBA strings.
|
|
8
|
+
* Transparency values range from 0 (fully opaque) to 100 (fully transparent).
|
|
9
|
+
*
|
|
10
|
+
* @version 6
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import type { color, int, float, simple_int, simple_float } from '../types/index.js';
|
|
14
|
+
|
|
15
|
+
/** Channel of color.rgb: na is 0, a fraction is truncated. */
|
|
16
|
+
const channel = (v: number): int =>
|
|
17
|
+
v === null || v === undefined || Number.isNaN(v) ? 0 : Math.max(0, Math.min(255, Math.trunc(v)));
|
|
18
|
+
|
|
19
|
+
/** Alpha (0-1) of a transparency given to color.rgb / color.new: na is fully transparent, clamped to 0..100. */
|
|
20
|
+
const alphaOf = (transp: number): float =>
|
|
21
|
+
transp === null || Number.isNaN(transp) ? 0 : 1 - Math.max(0, Math.min(100, transp)) / 100;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Creates a color from RGB values with optional transparency.
|
|
25
|
+
*
|
|
26
|
+
* @param red - Red component (0-255, values are clamped)
|
|
27
|
+
* @param green - Green component (0-255, values are clamped)
|
|
28
|
+
* @param blue - Blue component (0-255, values are clamped)
|
|
29
|
+
* @param transp - Optional transparency (0-100). 0 = opaque, 100 = fully transparent
|
|
30
|
+
* @returns Color string in rgb() or rgba() format
|
|
31
|
+
*
|
|
32
|
+
* @remarks
|
|
33
|
+
* - RGB values are automatically clamped to the 0-255 range
|
|
34
|
+
* - Transparency of 0 or omitted results in rgb() format
|
|
35
|
+
* - Transparency > 0 results in rgba() format
|
|
36
|
+
* - Transparency is converted to alpha channel (0-1 range)
|
|
37
|
+
*
|
|
38
|
+
* PineScript rules:
|
|
39
|
+
* - an `na` channel is 0; a fractional channel is truncated (127.6 is 127)
|
|
40
|
+
* - the transparency is clamped to 0..100 (140 is fully transparent, -5 is opaque); an `na` transparency is fully
|
|
41
|
+
* transparent
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```typescript
|
|
45
|
+
* color.rgb(255, 0, 0) // Returns: "rgb(255, 0, 0)" - Red
|
|
46
|
+
* color.rgb(0, 255, 0, 50) // Returns: "rgba(0, 255, 0, 0.5)" - Semi-transparent green
|
|
47
|
+
* color.rgb(300, 0, 0) // Returns: "rgb(255, 0, 0)" - Clamped to 255
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export function rgb(red: simple_int, green: simple_int, blue: simple_int, transp?: simple_float): string {
|
|
51
|
+
const r = channel(red);
|
|
52
|
+
const g = channel(green);
|
|
53
|
+
const b = channel(blue);
|
|
54
|
+
const a = transp !== undefined ? alphaOf(transp) : 1;
|
|
55
|
+
|
|
56
|
+
if (a === 1) {
|
|
57
|
+
return `rgb(${r}, ${g}, ${b})`;
|
|
58
|
+
}
|
|
59
|
+
return `rgba(${r}, ${g}, ${b}, ${a})`;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Creates a color from a hexadecimal string with optional transparency.
|
|
64
|
+
*
|
|
65
|
+
* @param hex - Hex color string (with or without '#' prefix, e.g., "#FF0000" or "FF0000")
|
|
66
|
+
* @param transp - Optional transparency (0-100). 0 = opaque, 100 = fully transparent
|
|
67
|
+
* @returns Color string in rgb() or rgba() format
|
|
68
|
+
*
|
|
69
|
+
* @remarks
|
|
70
|
+
* - Accepts hex strings with or without '#' prefix
|
|
71
|
+
* - Case-insensitive (accepts both "FF0000" and "ff0000")
|
|
72
|
+
* - Must be 6 characters (excluding '#')
|
|
73
|
+
* - Format: RRGGBB where each component is 00-FF
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* ```typescript
|
|
77
|
+
* color.from_hex("#FF0000") // Returns: "rgb(255, 0, 0)" - Red
|
|
78
|
+
* color.from_hex("00FF00", 50) // Returns: "rgba(0, 255, 0, 0.5)" - Semi-transparent green
|
|
79
|
+
* color.from_hex("#0000FF") // Returns: "rgb(0, 0, 255)" - Blue
|
|
80
|
+
* color.from_hex("FFA500") // Returns: "rgb(255, 165, 0)" - Orange
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
export function from_hex(hex: string, transp?: simple_float): string {
|
|
84
|
+
// Remove # if present
|
|
85
|
+
hex = hex.replace('#', '');
|
|
86
|
+
|
|
87
|
+
const r = parseInt(hex.substring(0, 2), 16);
|
|
88
|
+
const g = parseInt(hex.substring(2, 4), 16);
|
|
89
|
+
const b = parseInt(hex.substring(4, 6), 16);
|
|
90
|
+
|
|
91
|
+
return rgb(r, g, b, transp);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Creates a new color with modified transparency, preserving RGB components.
|
|
96
|
+
*
|
|
97
|
+
* @param baseColor - The base color to modify
|
|
98
|
+
* @param transp - New transparency value (0-100). 0 = opaque, 100 = fully transparent
|
|
99
|
+
* @returns New color with updated transparency
|
|
100
|
+
*
|
|
101
|
+
* @remarks
|
|
102
|
+
* - Preserves the RGB values from the base color
|
|
103
|
+
* - Replaces the transparency with the new value
|
|
104
|
+
* - Useful for creating semi-transparent versions of existing colors
|
|
105
|
+
* - PineScript clamps the transparency to 0..100 (`color.new(c, 140)` is fully transparent, `color.new(c, -5)` is
|
|
106
|
+
* opaque); an `na` transparency is fully transparent
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* ```typescript
|
|
110
|
+
* const red = color.rgb(255, 0, 0)
|
|
111
|
+
* color.new_color(red, 50) // Returns: "rgba(255, 0, 0, 0.5)" - Semi-transparent red
|
|
112
|
+
* color.new_color(red, 0) // Returns: "rgb(255, 0, 0)" - Fully opaque
|
|
113
|
+
* color.new_color(red, 100) // Returns: "rgba(255, 0, 0, 0)" - Fully transparent
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
116
|
+
export function new_color(baseColor: color, transp: simple_float): string {
|
|
117
|
+
// Parse the color and apply transparency
|
|
118
|
+
const rgba = parseColor(baseColor);
|
|
119
|
+
return rgb(rgba.r, rgba.g, rgba.b, transp);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Extracts the red component from a color.
|
|
124
|
+
*
|
|
125
|
+
* @param clr - The color to extract from
|
|
126
|
+
* @returns Red component value (0-255)
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
* ```typescript
|
|
130
|
+
* color.r(color.rgb(255, 128, 64)) // Returns: 255
|
|
131
|
+
* color.r(color.from_hex("#FF0000")) // Returns: 255
|
|
132
|
+
* color.r(color.from_hex("#FFA500")) // Returns: 255 (orange)
|
|
133
|
+
* ```
|
|
134
|
+
*/
|
|
135
|
+
export function r(clr: color): int {
|
|
136
|
+
return parseColor(clr).r;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Extracts the green component from a color.
|
|
141
|
+
*
|
|
142
|
+
* @param clr - The color to extract from
|
|
143
|
+
* @returns Green component value (0-255)
|
|
144
|
+
*
|
|
145
|
+
* @example
|
|
146
|
+
* ```typescript
|
|
147
|
+
* color.g(color.rgb(255, 128, 64)) // Returns: 128
|
|
148
|
+
* color.g(color.from_hex("#00FF00")) // Returns: 255
|
|
149
|
+
* color.g(color.from_hex("#FFA500")) // Returns: 165 (orange)
|
|
150
|
+
* ```
|
|
151
|
+
*/
|
|
152
|
+
export function g(clr: color): int {
|
|
153
|
+
return parseColor(clr).g;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Extracts the blue component from a color.
|
|
158
|
+
*
|
|
159
|
+
* @param clr - The color to extract from
|
|
160
|
+
* @returns Blue component value (0-255)
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
* ```typescript
|
|
164
|
+
* color.b(color.rgb(255, 128, 64)) // Returns: 64
|
|
165
|
+
* color.b(color.from_hex("#0000FF")) // Returns: 255
|
|
166
|
+
* color.b(color.from_hex("#FFA500")) // Returns: 0 (orange)
|
|
167
|
+
* ```
|
|
168
|
+
*/
|
|
169
|
+
export function b(clr: color): int {
|
|
170
|
+
return parseColor(clr).b;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Extracts the transparency component from a color.
|
|
175
|
+
*
|
|
176
|
+
* @param clr - The color to extract from
|
|
177
|
+
* @returns Transparency value (0-100). 0 = fully opaque, 100 = fully transparent
|
|
178
|
+
*
|
|
179
|
+
* @remarks
|
|
180
|
+
* - Returns 0 for colors without transparency (rgb format)
|
|
181
|
+
* - Converts alpha channel (0-1) to transparency (0-100)
|
|
182
|
+
* - PineScript stores the alpha as a byte (0-255) and returns an integer transparency:
|
|
183
|
+
* `color.t(color.new(c, 33.3))` is 33
|
|
184
|
+
*
|
|
185
|
+
* @example
|
|
186
|
+
* ```typescript
|
|
187
|
+
* color.t(color.rgb(255, 0, 0)) // Returns: 0 (opaque)
|
|
188
|
+
* color.t(color.rgb(255, 0, 0, 50)) // Returns: 50
|
|
189
|
+
* color.t(color.rgb(255, 0, 0, 100)) // Returns: 100 (fully transparent)
|
|
190
|
+
* ```
|
|
191
|
+
*/
|
|
192
|
+
export function t(clr: color): float {
|
|
193
|
+
const alpha = Math.round((1 - parseColor(clr).t / 100) * 255);
|
|
194
|
+
return Math.round((1 - alpha / 255) * 100);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Helper function to parse color string to RGBA components.
|
|
199
|
+
*
|
|
200
|
+
* @internal
|
|
201
|
+
* @param clr - The color string to parse
|
|
202
|
+
* @returns Object containing r, g, b (0-255) and t (0-100) components
|
|
203
|
+
*/
|
|
204
|
+
function parseColor(clr: color): { r: int; g: int; b: int; t: float } {
|
|
205
|
+
if (typeof clr === 'string') {
|
|
206
|
+
// Hex: #RRGGBB, #RRGGBBAA (PineScript literals), #RGB, #RGBA
|
|
207
|
+
const hex = /^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.exec(clr.trim());
|
|
208
|
+
if (hex) {
|
|
209
|
+
let digits = hex[1]!;
|
|
210
|
+
if (digits.length <= 4) digits = [...digits].map((c) => c + c).join('');
|
|
211
|
+
const byte = (k: number) => parseInt(digits.slice(k, k + 2), 16);
|
|
212
|
+
return { r: byte(0), g: byte(2), b: byte(4), t: digits.length === 8 ? (1 - byte(6) / 255) * 100 : 0 };
|
|
213
|
+
}
|
|
214
|
+
// Handle rgb() or rgba() format
|
|
215
|
+
const match = clr.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?\)/);
|
|
216
|
+
if (match) {
|
|
217
|
+
return {
|
|
218
|
+
r: parseInt(match[1]!),
|
|
219
|
+
g: parseInt(match[2]!),
|
|
220
|
+
b: parseInt(match[3]!),
|
|
221
|
+
t: match[4] ? (1 - parseFloat(match[4])) * 100 : 0,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return { r: 0, g: 0, b: 0, t: 0 };
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
// Predefined color constants of PineScript v6.
|
|
229
|
+
// PineScript v5 differs for red (#FF5252), teal (#00897B) and yellow (#FFEB3B).
|
|
230
|
+
/**
|
|
231
|
+
* Aqua/Cyan color constant
|
|
232
|
+
* @constant {string} #00BCD4 - RGB(0, 188, 212)
|
|
233
|
+
*/
|
|
234
|
+
export const aqua = '#00BCD4';
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Black color constant
|
|
238
|
+
* @constant {string} #363A45 - RGB(54, 58, 69)
|
|
239
|
+
*/
|
|
240
|
+
export const black = '#363A45';
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Blue color constant
|
|
244
|
+
* @constant {string} #2962FF - RGB(41, 98, 255)
|
|
245
|
+
*/
|
|
246
|
+
export const blue = '#2962FF';
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Fuchsia/Magenta color constant
|
|
250
|
+
* @constant {string} #E040FB - RGB(224, 64, 251)
|
|
251
|
+
*/
|
|
252
|
+
export const fuchsia = '#E040FB';
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Gray color constant
|
|
256
|
+
* @constant {string} #787B86 - RGB(120, 123, 134)
|
|
257
|
+
*/
|
|
258
|
+
export const gray = '#787B86';
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Green color constant (same as lime)
|
|
262
|
+
* @constant {string} #4CAF50 - RGB(76, 175, 80)
|
|
263
|
+
*/
|
|
264
|
+
export const green = '#4CAF50';
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Lime color constant (same as green)
|
|
268
|
+
* @constant {string} #00E676 - RGB(0, 230, 118)
|
|
269
|
+
*/
|
|
270
|
+
export const lime = '#00E676';
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Maroon color constant
|
|
274
|
+
* @constant {string} #880E4F - RGB(136, 14, 79)
|
|
275
|
+
*/
|
|
276
|
+
export const maroon = '#880E4F';
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Navy color constant
|
|
280
|
+
* @constant {string} #311B92 - RGB(49, 27, 146)
|
|
281
|
+
*/
|
|
282
|
+
export const navy = '#311B92';
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* Olive color constant
|
|
286
|
+
* @constant {string} #808000 - RGB(128, 128, 0)
|
|
287
|
+
*/
|
|
288
|
+
export const olive = '#808000';
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* Orange color constant
|
|
292
|
+
* @constant {string} #FF9800 - RGB(255, 152, 0)
|
|
293
|
+
*/
|
|
294
|
+
export const orange = '#FF9800';
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Purple color constant
|
|
298
|
+
* @constant {string} #9C27B0 - RGB(156, 39, 176)
|
|
299
|
+
*/
|
|
300
|
+
export const purple = '#9C27B0';
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* Red color constant
|
|
304
|
+
* @constant {string} #F23645 - RGB(242, 54, 69)
|
|
305
|
+
*/
|
|
306
|
+
export const red = '#F23645';
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* Silver color constant
|
|
310
|
+
* @constant {string} #B2B5BE - RGB(178, 181, 190)
|
|
311
|
+
*/
|
|
312
|
+
export const silver = '#B2B5BE';
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* Teal color constant
|
|
316
|
+
* @constant {string} #089981 - RGB(8, 153, 129)
|
|
317
|
+
*/
|
|
318
|
+
export const teal = '#089981';
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* White color constant
|
|
322
|
+
* @constant {string} #FFFFFF - RGB(255, 255, 255)
|
|
323
|
+
*/
|
|
324
|
+
export const white = '#FFFFFF';
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* Yellow color constant
|
|
328
|
+
* @constant {string} #FDD835 - RGB(253, 216, 53)
|
|
329
|
+
*/
|
|
330
|
+
export const yellow = '#FDD835';
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* Creates a color from a gradient based on value position.
|
|
334
|
+
*
|
|
335
|
+
* @param value - Value to calculate position-dependent color
|
|
336
|
+
* @param bottom_value - Bottom position value corresponding to bottom_color
|
|
337
|
+
* @param top_value - Top position value corresponding to top_color
|
|
338
|
+
* @param bottom_color - Bottom position color
|
|
339
|
+
* @param top_color - Top position color
|
|
340
|
+
* @returns Color calculated from linear gradient
|
|
341
|
+
*
|
|
342
|
+
* @remarks
|
|
343
|
+
* PineScript rules:
|
|
344
|
+
* - If value <= bottom_value, returns bottom_color; else if value >= top_value, returns top_color
|
|
345
|
+
* - Otherwise the colours are mixed with their transparency (premultiplied alpha, alpha as a byte); the RGB channels
|
|
346
|
+
* and the alpha are truncated. PineScript's float rounding order is not known: a channel can differ by 1 when the
|
|
347
|
+
* exact result is an integer (same RGB at both ends)
|
|
348
|
+
* - An na value or bottom_value / top_value, or bottom_value == top_value, gives a fully transparent colour
|
|
349
|
+
* - An na colour counts as fully transparent
|
|
350
|
+
* - Works with rgb(), rgba() and hex (#RRGGBB, #RRGGBBAA) colours
|
|
351
|
+
*
|
|
352
|
+
* @example
|
|
353
|
+
* ```typescript
|
|
354
|
+
* // Value at middle of range gets middle color
|
|
355
|
+
* const midColor = color.from_gradient(50, 0, 100,
|
|
356
|
+
* color.rgb(255, 0, 0), // Red at bottom
|
|
357
|
+
* color.rgb(0, 255, 0) // Green at top
|
|
358
|
+
* ); // Returns color between red and green
|
|
359
|
+
*
|
|
360
|
+
* // Value at extremes
|
|
361
|
+
* const lowColor = color.from_gradient(-10, 0, 100, red, green); // Returns red
|
|
362
|
+
* const highColor = color.from_gradient(150, 0, 100, red, green); // Returns green
|
|
363
|
+
* ```
|
|
364
|
+
*/
|
|
365
|
+
export function from_gradient(
|
|
366
|
+
value: float,
|
|
367
|
+
bottom_value: float,
|
|
368
|
+
top_value: float,
|
|
369
|
+
bottom_color: color,
|
|
370
|
+
top_color: color
|
|
371
|
+
): string {
|
|
372
|
+
const transparent = 'rgba(0, 0, 0, 0)';
|
|
373
|
+
if ([value, bottom_value, top_value].some((v) => v === null || v === undefined || Number.isNaN(v)) || bottom_value === top_value) {
|
|
374
|
+
return transparent;
|
|
375
|
+
}
|
|
376
|
+
const k = value <= bottom_value ? 0 : value >= top_value ? 1 : (value - bottom_value) / (top_value - bottom_value);
|
|
377
|
+
// alpha as a byte (0-255), as PineScript stores it; an na colour (null / undefined) is fully transparent
|
|
378
|
+
const rgba = (c: color) => {
|
|
379
|
+
if (c === null || c === undefined) return { r: 0, g: 0, b: 0, a: 0 };
|
|
380
|
+
const p = parseColor(c);
|
|
381
|
+
return { r: p.r, g: p.g, b: p.b, a: Math.round((1 - p.t / 100) * 255) };
|
|
382
|
+
};
|
|
383
|
+
const c1 = rgba(bottom_color);
|
|
384
|
+
const c2 = rgba(top_color);
|
|
385
|
+
const a = c1.a * (1 - k) + c2.a * k;
|
|
386
|
+
if (a === 0) return transparent;
|
|
387
|
+
// operation order with the fewest differences to PineScript (channels as 0-1, alpha as a byte)
|
|
388
|
+
const mix = (x1: number, x2: number) => Math.floor((((x1 / 255) * c1.a) * (1 - k) + ((x2 / 255) * c2.a) * k) / (a / 255));
|
|
389
|
+
const [r, g, b] = [mix(c1.r, c2.r), mix(c1.g, c2.g), mix(c1.b, c2.b)];
|
|
390
|
+
const alpha = Math.floor(a);
|
|
391
|
+
return alpha === 255 ? `rgb(${r}, ${g}, ${b})` : `rgba(${r}, ${g}, ${b}, ${alpha / 255})`;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
/**
|
|
395
|
+
* Alias for new_color function.
|
|
396
|
+
* Creates a new color with specified transparency from an existing color.
|
|
397
|
+
*
|
|
398
|
+
* @param baseColor - The base color
|
|
399
|
+
* @param transp - Transparency value (0-100). 0 = fully opaque, 100 = fully transparent
|
|
400
|
+
* @returns New color with applied transparency
|
|
401
|
+
*
|
|
402
|
+
* @remarks
|
|
403
|
+
* This is an alias for `new_color()` to match PineScript's `color.new()` syntax.
|
|
404
|
+
*
|
|
405
|
+
* @example
|
|
406
|
+
* ```typescript
|
|
407
|
+
* const redColor = color.rgb(255, 0, 0);
|
|
408
|
+
* const transparentRed = color.new(redColor, 50); // 50% transparent red
|
|
409
|
+
* ```
|
|
410
|
+
*/
|
|
411
|
+
export { new_color as new };
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PineScript comparison operators (`==`, `!=`, `<`, `<=`, `>`, `>=`) on numbers.
|
|
3
|
+
*
|
|
4
|
+
* PineScript rules:
|
|
5
|
+
* - the operators use an absolute tolerance of 1e-10: `a == b` when `|a - b| <= 1e-10`, `a < b` when
|
|
6
|
+
* `b - a > 1e-10` (the same for every magnitude; `0.1 + 0.2 == 0.3` is true)
|
|
7
|
+
* - every comparison with an `na` operand is false, `!=` included
|
|
8
|
+
* - built-in functions (`ta.crossover`, `ta.pivothigh`, `ta.highestbars`...) compare exactly
|
|
9
|
+
*
|
|
10
|
+
* The `Series` comparison methods (`gt`, `gte`, `lt`, `lte`, `eq`, `neq`) follow the same rules.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/** Tolerance of PineScript's comparison operators. */
|
|
14
|
+
export const EPSILON = 1e-10;
|
|
15
|
+
|
|
16
|
+
const valid = (a: number, b: number): boolean => !Number.isNaN(a) && !Number.isNaN(b);
|
|
17
|
+
|
|
18
|
+
/** PineScript `a == b`. */
|
|
19
|
+
export function eq(a: number, b: number): boolean {
|
|
20
|
+
return valid(a, b) && Math.abs(a - b) <= EPSILON;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** PineScript `a != b` (false when an operand is `na`). */
|
|
24
|
+
export function ne(a: number, b: number): boolean {
|
|
25
|
+
return valid(a, b) && Math.abs(a - b) > EPSILON;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** PineScript `a < b`. */
|
|
29
|
+
export function lt(a: number, b: number): boolean {
|
|
30
|
+
return valid(a, b) && b - a > EPSILON;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** PineScript `a <= b`. */
|
|
34
|
+
export function le(a: number, b: number): boolean {
|
|
35
|
+
return valid(a, b) && a - b <= EPSILON;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** PineScript `a > b`. */
|
|
39
|
+
export function gt(a: number, b: number): boolean {
|
|
40
|
+
return valid(a, b) && a - b > EPSILON;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** PineScript `a >= b`. */
|
|
44
|
+
export function ge(a: number, b: number): boolean {
|
|
45
|
+
return valid(a, b) && b - a <= EPSILON;
|
|
46
|
+
}
|