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.
Files changed (544) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +31 -9
  3. package/dist/cjs/array/index.d.ts +701 -0
  4. package/dist/cjs/array/index.d.ts.map +1 -0
  5. package/dist/cjs/array/index.js +392 -0
  6. package/dist/cjs/array/index.js.map +7 -0
  7. package/dist/cjs/box/index.d.ts +444 -0
  8. package/dist/cjs/box/index.d.ts.map +1 -0
  9. package/dist/cjs/box/index.js +246 -0
  10. package/dist/cjs/box/index.js.map +7 -0
  11. package/dist/cjs/callsite/index.d.ts +61 -0
  12. package/dist/cjs/callsite/index.d.ts.map +1 -0
  13. package/dist/cjs/callsite/index.js +65 -0
  14. package/dist/cjs/callsite/index.js.map +7 -0
  15. package/dist/cjs/chartpoint/index.d.ts +90 -0
  16. package/dist/cjs/chartpoint/index.d.ts.map +1 -0
  17. package/dist/cjs/chartpoint/index.js +56 -0
  18. package/dist/cjs/chartpoint/index.js.map +7 -0
  19. package/dist/cjs/color/index.d.ts +285 -0
  20. package/dist/cjs/color/index.d.ts.map +1 -0
  21. package/dist/cjs/color/index.js +143 -0
  22. package/dist/cjs/color/index.js.map +7 -0
  23. package/dist/cjs/compare/index.d.ts +26 -0
  24. package/dist/cjs/compare/index.d.ts.map +1 -0
  25. package/dist/cjs/compare/index.js +50 -0
  26. package/dist/cjs/compare/index.js.map +7 -0
  27. package/dist/cjs/drawing/registry.d.ts +42 -0
  28. package/dist/cjs/drawing/registry.d.ts.map +1 -0
  29. package/dist/cjs/drawing/registry.js +87 -0
  30. package/dist/cjs/drawing/registry.js.map +7 -0
  31. package/dist/cjs/index.d.ts +85 -0
  32. package/dist/cjs/index.d.ts.map +1 -0
  33. package/dist/cjs/index.js +184 -0
  34. package/dist/cjs/index.js.map +7 -0
  35. package/dist/cjs/indicator.d.ts +117 -0
  36. package/dist/cjs/indicator.d.ts.map +1 -0
  37. package/dist/cjs/indicator.js +74 -0
  38. package/dist/cjs/indicator.js.map +7 -0
  39. package/dist/cjs/input.d.ts +196 -0
  40. package/dist/cjs/input.d.ts.map +1 -0
  41. package/dist/cjs/input.js +197 -0
  42. package/dist/cjs/input.js.map +7 -0
  43. package/dist/cjs/label/index.d.ts +303 -0
  44. package/dist/cjs/label/index.d.ts.map +1 -0
  45. package/dist/cjs/label/index.js +190 -0
  46. package/dist/cjs/label/index.js.map +7 -0
  47. package/dist/cjs/lib/index.d.ts +8 -0
  48. package/dist/cjs/lib/index.d.ts.map +1 -0
  49. package/dist/cjs/lib/index.js +19 -0
  50. package/dist/cjs/lib/index.js.map +7 -0
  51. package/dist/{lib → cjs/lib}/zigzag/index.d.ts +4 -1
  52. package/dist/cjs/lib/zigzag/index.d.ts.map +1 -0
  53. package/dist/cjs/lib/zigzag/index.js +27 -0
  54. package/dist/cjs/lib/zigzag/index.js.map +7 -0
  55. package/dist/cjs/lib/zigzag/zigzag.d.ts +100 -0
  56. package/dist/cjs/lib/zigzag/zigzag.d.ts.map +1 -0
  57. package/dist/cjs/lib/zigzag/zigzag.js +207 -0
  58. package/dist/cjs/lib/zigzag/zigzag.js.map +7 -0
  59. package/dist/cjs/line/index.d.ts +342 -0
  60. package/dist/cjs/line/index.d.ts.map +1 -0
  61. package/dist/cjs/line/index.js +193 -0
  62. package/dist/cjs/line/index.js.map +7 -0
  63. package/dist/cjs/linefill/index.d.ts +124 -0
  64. package/dist/cjs/linefill/index.d.ts.map +1 -0
  65. package/dist/cjs/linefill/index.js +56 -0
  66. package/dist/cjs/linefill/index.js.map +7 -0
  67. package/dist/cjs/map/index.d.ts +69 -0
  68. package/dist/cjs/map/index.d.ts.map +1 -0
  69. package/dist/cjs/map/index.js +80 -0
  70. package/dist/cjs/map/index.js.map +7 -0
  71. package/dist/cjs/math/index.d.ts +560 -0
  72. package/dist/cjs/math/index.d.ts.map +1 -0
  73. package/dist/cjs/math/index.js +441 -0
  74. package/dist/cjs/math/index.js.map +7 -0
  75. package/dist/cjs/matrix/index.d.ts +1231 -0
  76. package/dist/cjs/matrix/index.d.ts.map +1 -0
  77. package/dist/cjs/matrix/index.js +1200 -0
  78. package/dist/cjs/matrix/index.js.map +7 -0
  79. package/dist/cjs/package.json +1 -0
  80. package/dist/cjs/plot.d.ts +76 -0
  81. package/dist/cjs/plot.d.ts.map +1 -0
  82. package/dist/cjs/plot.js +51 -0
  83. package/dist/cjs/plot.js.map +7 -0
  84. package/dist/cjs/polyline/index.d.ts +115 -0
  85. package/dist/cjs/polyline/index.d.ts.map +1 -0
  86. package/dist/cjs/polyline/index.js +76 -0
  87. package/dist/cjs/polyline/index.js.map +7 -0
  88. package/dist/cjs/runtime/adapters/LightweightChartsAdapter.d.ts +86 -0
  89. package/dist/cjs/runtime/adapters/LightweightChartsAdapter.d.ts.map +1 -0
  90. package/dist/cjs/runtime/adapters/LightweightChartsAdapter.js +141 -0
  91. package/dist/cjs/runtime/adapters/LightweightChartsAdapter.js.map +7 -0
  92. package/dist/cjs/runtime/adapters/SimpleInputAdapter.d.ts +59 -0
  93. package/dist/cjs/runtime/adapters/SimpleInputAdapter.d.ts.map +1 -0
  94. package/dist/cjs/runtime/adapters/SimpleInputAdapter.js +117 -0
  95. package/dist/cjs/runtime/adapters/SimpleInputAdapter.js.map +7 -0
  96. package/dist/{runtime → cjs/runtime}/index.d.ts +12 -5
  97. package/dist/cjs/runtime/index.d.ts.map +1 -0
  98. package/dist/cjs/runtime/index.js +49 -0
  99. package/dist/cjs/runtime/index.js.map +7 -0
  100. package/dist/cjs/runtime/inputs.d.ts +91 -0
  101. package/dist/cjs/runtime/inputs.d.ts.map +1 -0
  102. package/dist/cjs/runtime/inputs.js +262 -0
  103. package/dist/cjs/runtime/inputs.js.map +7 -0
  104. package/dist/cjs/runtime/runtime.d.ts +70 -0
  105. package/dist/cjs/runtime/runtime.d.ts.map +1 -0
  106. package/dist/cjs/runtime/runtime.js +148 -0
  107. package/dist/cjs/runtime/runtime.js.map +7 -0
  108. package/dist/cjs/runtime/series.d.ts +362 -0
  109. package/dist/cjs/runtime/series.d.ts.map +1 -0
  110. package/dist/cjs/runtime/series.js +560 -0
  111. package/dist/cjs/runtime/series.js.map +7 -0
  112. package/dist/cjs/runtime/types.d.ts +282 -0
  113. package/dist/cjs/runtime/types.d.ts.map +1 -0
  114. package/dist/cjs/runtime/types.js +17 -0
  115. package/dist/cjs/runtime/types.js.map +7 -0
  116. package/dist/cjs/script/index.d.ts +987 -0
  117. package/dist/cjs/script/index.d.ts.map +1 -0
  118. package/dist/cjs/script/index.js +1169 -0
  119. package/dist/cjs/script/index.js.map +7 -0
  120. package/dist/cjs/security/resample.d.ts +63 -0
  121. package/dist/cjs/security/resample.d.ts.map +1 -0
  122. package/dist/cjs/security/resample.js +84 -0
  123. package/dist/cjs/security/resample.js.map +7 -0
  124. package/dist/cjs/session/bars.d.ts +80 -0
  125. package/dist/cjs/session/bars.d.ts.map +1 -0
  126. package/dist/cjs/session/bars.js +219 -0
  127. package/dist/cjs/session/bars.js.map +7 -0
  128. package/dist/cjs/session/calendar.d.ts +70 -0
  129. package/dist/cjs/session/calendar.d.ts.map +1 -0
  130. package/dist/cjs/session/calendar.js +164 -0
  131. package/dist/cjs/session/calendar.js.map +7 -0
  132. package/dist/cjs/str/dateformat.d.ts +15 -0
  133. package/dist/cjs/str/dateformat.d.ts.map +1 -0
  134. package/dist/cjs/str/dateformat.js +149 -0
  135. package/dist/cjs/str/dateformat.js.map +7 -0
  136. package/dist/cjs/str/index.d.ts +459 -0
  137. package/dist/cjs/str/index.d.ts.map +1 -0
  138. package/dist/cjs/str/index.js +143 -0
  139. package/dist/cjs/str/index.js.map +7 -0
  140. package/dist/cjs/str/messageformat.d.ts +14 -0
  141. package/dist/cjs/str/messageformat.d.ts.map +1 -0
  142. package/dist/cjs/str/messageformat.js +114 -0
  143. package/dist/cjs/str/messageformat.js.map +7 -0
  144. package/dist/cjs/str/numberformat.d.ts +19 -0
  145. package/dist/cjs/str/numberformat.d.ts.map +1 -0
  146. package/dist/cjs/str/numberformat.js +170 -0
  147. package/dist/cjs/str/numberformat.js.map +7 -0
  148. package/dist/{strategy → cjs/strategy}/index.d.ts +50 -0
  149. package/dist/cjs/strategy/index.d.ts.map +1 -0
  150. package/dist/cjs/strategy/index.js +92 -0
  151. package/dist/cjs/strategy/index.js.map +7 -0
  152. package/dist/cjs/ta/index.d.ts +1397 -0
  153. package/dist/cjs/ta/index.d.ts.map +1 -0
  154. package/dist/cjs/ta/index.js +1715 -0
  155. package/dist/cjs/ta/index.js.map +7 -0
  156. package/dist/cjs/ta/running-sum.d.ts +30 -0
  157. package/dist/cjs/ta/running-sum.d.ts.map +1 -0
  158. package/dist/cjs/ta/running-sum.js +99 -0
  159. package/dist/cjs/ta/running-sum.js.map +7 -0
  160. package/dist/cjs/ta-series.d.ts +558 -0
  161. package/dist/cjs/ta-series.d.ts.map +1 -0
  162. package/dist/cjs/ta-series.js +606 -0
  163. package/dist/cjs/ta-series.js.map +7 -0
  164. package/dist/cjs/text/index.d.ts +14 -0
  165. package/dist/cjs/text/index.d.ts.map +1 -0
  166. package/dist/cjs/text/index.js +29 -0
  167. package/dist/cjs/text/index.js.map +7 -0
  168. package/dist/cjs/time/datestring.d.ts +23 -0
  169. package/dist/cjs/time/datestring.d.ts.map +1 -0
  170. package/dist/cjs/time/datestring.js +106 -0
  171. package/dist/cjs/time/datestring.js.map +7 -0
  172. package/dist/cjs/time/index.d.ts +89 -0
  173. package/dist/cjs/time/index.d.ts.map +1 -0
  174. package/dist/cjs/time/index.js +85 -0
  175. package/dist/cjs/time/index.js.map +7 -0
  176. package/dist/cjs/time/session.d.ts +17 -0
  177. package/dist/cjs/time/session.d.ts.map +1 -0
  178. package/dist/cjs/time/session.js +65 -0
  179. package/dist/cjs/time/session.js.map +7 -0
  180. package/dist/cjs/time/timezone.d.ts +40 -0
  181. package/dist/cjs/time/timezone.d.ts.map +1 -0
  182. package/dist/cjs/time/timezone.js +125 -0
  183. package/dist/cjs/time/timezone.js.map +7 -0
  184. package/dist/cjs/timeframe/index.d.ts +73 -0
  185. package/dist/cjs/timeframe/index.d.ts.map +1 -0
  186. package/dist/cjs/timeframe/index.js +85 -0
  187. package/dist/cjs/timeframe/index.js.map +7 -0
  188. package/dist/cjs/types/index.d.ts +343 -0
  189. package/dist/cjs/types/index.d.ts.map +1 -0
  190. package/dist/cjs/types/index.js +32 -0
  191. package/dist/cjs/types/index.js.map +7 -0
  192. package/dist/cjs/types/metadata.d.ts +300 -0
  193. package/dist/cjs/types/metadata.d.ts.map +1 -0
  194. package/dist/cjs/types/metadata.js +17 -0
  195. package/dist/cjs/types/metadata.js.map +7 -0
  196. package/dist/cjs/utils/index.d.ts +167 -0
  197. package/dist/cjs/utils/index.d.ts.map +1 -0
  198. package/dist/cjs/utils/index.js +209 -0
  199. package/dist/cjs/utils/index.js.map +7 -0
  200. package/dist/esm/array/index.d.ts +701 -0
  201. package/dist/esm/array/index.d.ts.map +1 -0
  202. package/dist/esm/array/index.js +983 -0
  203. package/dist/esm/array/index.js.map +1 -0
  204. package/dist/esm/box/index.d.ts +444 -0
  205. package/dist/esm/box/index.d.ts.map +1 -0
  206. package/dist/esm/box/index.js +602 -0
  207. package/dist/esm/box/index.js.map +1 -0
  208. package/dist/esm/callsite/index.d.ts +61 -0
  209. package/dist/esm/callsite/index.d.ts.map +1 -0
  210. package/dist/esm/callsite/index.js +97 -0
  211. package/dist/esm/callsite/index.js.map +1 -0
  212. package/dist/esm/chartpoint/index.d.ts +90 -0
  213. package/dist/esm/chartpoint/index.d.ts.map +1 -0
  214. package/dist/esm/chartpoint/index.js +113 -0
  215. package/dist/esm/chartpoint/index.js.map +1 -0
  216. package/dist/esm/color/index.d.ts +285 -0
  217. package/dist/esm/color/index.d.ts.map +1 -0
  218. package/dist/esm/color/index.js +373 -0
  219. package/dist/esm/color/index.js.map +1 -0
  220. package/dist/esm/compare/index.d.ts +26 -0
  221. package/dist/esm/compare/index.d.ts.map +1 -0
  222. package/dist/esm/compare/index.js +39 -0
  223. package/dist/esm/compare/index.js.map +1 -0
  224. package/dist/esm/drawing/registry.d.ts +42 -0
  225. package/dist/esm/drawing/registry.d.ts.map +1 -0
  226. package/dist/esm/drawing/registry.js +89 -0
  227. package/dist/esm/drawing/registry.js.map +1 -0
  228. package/dist/esm/index.d.ts +85 -0
  229. package/dist/esm/index.d.ts.map +1 -0
  230. package/dist/esm/index.js +96 -0
  231. package/dist/esm/index.js.map +1 -0
  232. package/dist/esm/indicator.d.ts +117 -0
  233. package/dist/esm/indicator.d.ts.map +1 -0
  234. package/dist/esm/indicator.js +84 -0
  235. package/dist/esm/indicator.js.map +1 -0
  236. package/dist/esm/input.d.ts +196 -0
  237. package/dist/esm/input.d.ts.map +1 -0
  238. package/dist/esm/input.js +183 -0
  239. package/dist/esm/input.js.map +1 -0
  240. package/dist/esm/label/index.d.ts +303 -0
  241. package/dist/esm/label/index.d.ts.map +1 -0
  242. package/dist/esm/label/index.js +417 -0
  243. package/dist/esm/label/index.js.map +1 -0
  244. package/dist/esm/lib/index.d.ts +8 -0
  245. package/dist/esm/lib/index.d.ts.map +1 -0
  246. package/dist/esm/lib/index.js +8 -0
  247. package/dist/esm/lib/index.js.map +1 -0
  248. package/dist/esm/lib/zigzag/index.d.ts +5 -0
  249. package/dist/esm/lib/zigzag/index.d.ts.map +1 -0
  250. package/dist/esm/lib/zigzag/index.js +5 -0
  251. package/dist/esm/lib/zigzag/index.js.map +1 -0
  252. package/dist/esm/lib/zigzag/zigzag.d.ts +100 -0
  253. package/dist/esm/lib/zigzag/zigzag.d.ts.map +1 -0
  254. package/dist/esm/lib/zigzag/zigzag.js +229 -0
  255. package/dist/esm/lib/zigzag/zigzag.js.map +1 -0
  256. package/dist/esm/line/index.d.ts +342 -0
  257. package/dist/esm/line/index.d.ts.map +1 -0
  258. package/dist/esm/line/index.js +470 -0
  259. package/dist/esm/line/index.js.map +1 -0
  260. package/dist/esm/linefill/index.d.ts +124 -0
  261. package/dist/esm/linefill/index.d.ts.map +1 -0
  262. package/dist/esm/linefill/index.js +144 -0
  263. package/dist/esm/linefill/index.js.map +1 -0
  264. package/dist/esm/map/index.d.ts +69 -0
  265. package/dist/esm/map/index.d.ts.map +1 -0
  266. package/dist/esm/map/index.js +106 -0
  267. package/dist/esm/map/index.js.map +1 -0
  268. package/dist/esm/math/index.d.ts +560 -0
  269. package/dist/esm/math/index.d.ts.map +1 -0
  270. package/dist/esm/math/index.js +495 -0
  271. package/dist/esm/math/index.js.map +1 -0
  272. package/dist/esm/matrix/index.d.ts +1231 -0
  273. package/dist/esm/matrix/index.d.ts.map +1 -0
  274. package/dist/esm/matrix/index.js +2450 -0
  275. package/dist/esm/matrix/index.js.map +1 -0
  276. package/dist/esm/plot.d.ts +76 -0
  277. package/dist/esm/plot.d.ts.map +1 -0
  278. package/dist/esm/plot.js +63 -0
  279. package/dist/esm/plot.js.map +1 -0
  280. package/dist/esm/polyline/index.d.ts +115 -0
  281. package/dist/esm/polyline/index.d.ts.map +1 -0
  282. package/dist/esm/polyline/index.js +157 -0
  283. package/dist/esm/polyline/index.js.map +1 -0
  284. package/dist/esm/runtime/adapters/LightweightChartsAdapter.d.ts +86 -0
  285. package/dist/esm/runtime/adapters/LightweightChartsAdapter.d.ts.map +1 -0
  286. package/dist/esm/runtime/adapters/LightweightChartsAdapter.js +140 -0
  287. package/dist/esm/runtime/adapters/LightweightChartsAdapter.js.map +1 -0
  288. package/dist/esm/runtime/adapters/SimpleInputAdapter.d.ts +59 -0
  289. package/dist/esm/runtime/adapters/SimpleInputAdapter.d.ts.map +1 -0
  290. package/dist/esm/runtime/adapters/SimpleInputAdapter.js +115 -0
  291. package/dist/esm/runtime/adapters/SimpleInputAdapter.js.map +1 -0
  292. package/dist/esm/runtime/index.d.ts +13 -0
  293. package/dist/esm/runtime/index.d.ts.map +1 -0
  294. package/dist/esm/runtime/index.js +14 -0
  295. package/dist/esm/runtime/index.js.map +1 -0
  296. package/dist/esm/runtime/inputs.d.ts +91 -0
  297. package/dist/esm/runtime/inputs.d.ts.map +1 -0
  298. package/dist/esm/runtime/inputs.js +334 -0
  299. package/dist/esm/runtime/inputs.js.map +1 -0
  300. package/dist/esm/runtime/runtime.d.ts +70 -0
  301. package/dist/esm/runtime/runtime.d.ts.map +1 -0
  302. package/dist/esm/runtime/runtime.js +193 -0
  303. package/dist/esm/runtime/runtime.js.map +1 -0
  304. package/dist/esm/runtime/series.d.ts +362 -0
  305. package/dist/esm/runtime/series.d.ts.map +1 -0
  306. package/dist/esm/runtime/series.js +583 -0
  307. package/dist/esm/runtime/series.js.map +1 -0
  308. package/dist/esm/runtime/types.d.ts +282 -0
  309. package/dist/esm/runtime/types.d.ts.map +1 -0
  310. package/dist/esm/runtime/types.js +7 -0
  311. package/dist/esm/runtime/types.js.map +1 -0
  312. package/dist/esm/script/index.d.ts +987 -0
  313. package/dist/esm/script/index.d.ts.map +1 -0
  314. package/dist/esm/script/index.js +1289 -0
  315. package/dist/esm/script/index.js.map +1 -0
  316. package/dist/esm/security/resample.d.ts +63 -0
  317. package/dist/esm/security/resample.d.ts.map +1 -0
  318. package/dist/esm/security/resample.js +110 -0
  319. package/dist/esm/security/resample.js.map +1 -0
  320. package/dist/esm/session/bars.d.ts +80 -0
  321. package/dist/esm/session/bars.d.ts.map +1 -0
  322. package/dist/esm/session/bars.js +232 -0
  323. package/dist/esm/session/bars.js.map +1 -0
  324. package/dist/esm/session/calendar.d.ts +70 -0
  325. package/dist/esm/session/calendar.d.ts.map +1 -0
  326. package/dist/esm/session/calendar.js +172 -0
  327. package/dist/esm/session/calendar.js.map +1 -0
  328. package/dist/esm/str/dateformat.d.ts +15 -0
  329. package/dist/esm/str/dateformat.d.ts.map +1 -0
  330. package/dist/esm/str/dateformat.js +136 -0
  331. package/dist/esm/str/dateformat.js.map +1 -0
  332. package/dist/esm/str/index.d.ts +459 -0
  333. package/dist/esm/str/index.d.ts.map +1 -0
  334. package/dist/esm/str/index.js +540 -0
  335. package/dist/esm/str/index.js.map +1 -0
  336. package/dist/esm/str/messageformat.d.ts +14 -0
  337. package/dist/esm/str/messageformat.d.ts.map +1 -0
  338. package/dist/esm/str/messageformat.js +111 -0
  339. package/dist/esm/str/messageformat.js.map +1 -0
  340. package/dist/esm/str/numberformat.d.ts +19 -0
  341. package/dist/esm/str/numberformat.d.ts.map +1 -0
  342. package/dist/esm/str/numberformat.js +189 -0
  343. package/dist/esm/str/numberformat.js.map +1 -0
  344. package/dist/esm/strategy/index.d.ts +245 -0
  345. package/dist/esm/strategy/index.d.ts.map +1 -0
  346. package/dist/esm/strategy/index.js +84 -0
  347. package/dist/esm/strategy/index.js.map +1 -0
  348. package/dist/esm/ta/index.d.ts +1397 -0
  349. package/dist/esm/ta/index.d.ts.map +1 -0
  350. package/dist/esm/ta/index.js +3227 -0
  351. package/dist/esm/ta/index.js.map +1 -0
  352. package/dist/esm/ta/running-sum.d.ts +30 -0
  353. package/dist/esm/ta/running-sum.d.ts.map +1 -0
  354. package/dist/esm/ta/running-sum.js +113 -0
  355. package/dist/esm/ta/running-sum.js.map +1 -0
  356. package/dist/esm/ta-series.d.ts +558 -0
  357. package/dist/esm/ta-series.d.ts.map +1 -0
  358. package/dist/esm/ta-series.js +910 -0
  359. package/dist/esm/ta-series.js.map +1 -0
  360. package/dist/esm/text/index.d.ts +14 -0
  361. package/dist/esm/text/index.d.ts.map +1 -0
  362. package/dist/esm/text/index.js +14 -0
  363. package/dist/esm/text/index.js.map +1 -0
  364. package/dist/esm/time/datestring.d.ts +23 -0
  365. package/dist/esm/time/datestring.d.ts.map +1 -0
  366. package/dist/esm/time/datestring.js +94 -0
  367. package/dist/esm/time/datestring.js.map +1 -0
  368. package/dist/esm/time/index.d.ts +89 -0
  369. package/dist/esm/time/index.d.ts.map +1 -0
  370. package/dist/esm/time/index.js +108 -0
  371. package/dist/esm/time/index.js.map +1 -0
  372. package/dist/esm/time/session.d.ts +17 -0
  373. package/dist/esm/time/session.d.ts.map +1 -0
  374. package/dist/esm/time/session.js +69 -0
  375. package/dist/esm/time/session.js.map +1 -0
  376. package/dist/esm/time/timezone.d.ts +40 -0
  377. package/dist/esm/time/timezone.d.ts.map +1 -0
  378. package/dist/esm/time/timezone.js +144 -0
  379. package/dist/esm/time/timezone.js.map +1 -0
  380. package/dist/esm/timeframe/index.d.ts +73 -0
  381. package/dist/esm/timeframe/index.d.ts.map +1 -0
  382. package/dist/esm/timeframe/index.js +131 -0
  383. package/dist/esm/timeframe/index.js.map +1 -0
  384. package/dist/esm/types/index.d.ts +343 -0
  385. package/dist/esm/types/index.d.ts.map +1 -0
  386. package/dist/esm/types/index.js +17 -0
  387. package/dist/esm/types/index.js.map +1 -0
  388. package/dist/esm/types/metadata.d.ts +300 -0
  389. package/dist/esm/types/metadata.d.ts.map +1 -0
  390. package/dist/esm/types/metadata.js +7 -0
  391. package/dist/esm/types/metadata.js.map +1 -0
  392. package/dist/esm/utils/index.d.ts +167 -0
  393. package/dist/esm/utils/index.d.ts.map +1 -0
  394. package/dist/esm/utils/index.js +295 -0
  395. package/dist/esm/utils/index.js.map +1 -0
  396. package/package.json +53 -23
  397. package/src/array/index.ts +1056 -0
  398. package/src/box/index.ts +680 -0
  399. package/src/callsite/index.ts +104 -0
  400. package/src/chartpoint/index.ts +126 -0
  401. package/src/color/index.ts +411 -0
  402. package/src/compare/index.ts +46 -0
  403. package/src/drawing/registry.ts +106 -0
  404. package/src/index.ts +201 -0
  405. package/src/indicator.ts +185 -0
  406. package/src/input.ts +280 -0
  407. package/src/label/index.ts +490 -0
  408. package/src/lib/index.ts +8 -0
  409. package/src/lib/zigzag/index.ts +13 -0
  410. package/src/lib/zigzag/zigzag.ts +318 -0
  411. package/src/line/index.ts +530 -0
  412. package/src/linefill/index.ts +152 -0
  413. package/src/map/index.ts +115 -0
  414. package/src/math/index.ts +1071 -0
  415. package/src/matrix/index.ts +2697 -0
  416. package/src/plot.ts +121 -0
  417. package/src/polyline/index.ts +184 -0
  418. package/src/runtime/adapters/LightweightChartsAdapter.ts +201 -0
  419. package/src/runtime/adapters/SimpleInputAdapter.ts +132 -0
  420. package/src/runtime/index.ts +52 -0
  421. package/src/runtime/inputs.ts +377 -0
  422. package/src/runtime/runtime.ts +241 -0
  423. package/src/runtime/series.ts +644 -0
  424. package/src/runtime/types.ts +292 -0
  425. package/src/script/index.ts +1865 -0
  426. package/src/security/resample.ts +119 -0
  427. package/src/session/bars.ts +262 -0
  428. package/src/session/calendar.ts +199 -0
  429. package/src/str/dateformat.ts +104 -0
  430. package/src/str/index.ts +557 -0
  431. package/src/str/messageformat.ts +109 -0
  432. package/src/str/numberformat.ts +197 -0
  433. package/src/strategy/index.ts +281 -0
  434. package/src/ta/index.ts +3580 -0
  435. package/src/ta/running-sum.ts +117 -0
  436. package/src/ta-series.ts +1036 -0
  437. package/src/text/index.ts +14 -0
  438. package/src/time/datestring.ts +96 -0
  439. package/src/time/index.ts +161 -0
  440. package/src/time/session.ts +79 -0
  441. package/src/time/timezone.ts +180 -0
  442. package/src/timeframe/index.ts +144 -0
  443. package/src/types/index.ts +398 -0
  444. package/src/types/metadata.ts +334 -0
  445. package/src/utils/index.ts +334 -0
  446. package/dist/array/index.d.ts +0 -57
  447. package/dist/array/index.d.ts.map +0 -1
  448. package/dist/box/index.d.ts +0 -37
  449. package/dist/box/index.d.ts.map +0 -1
  450. package/dist/callsite/index.d.ts +0 -7
  451. package/dist/callsite/index.d.ts.map +0 -1
  452. package/dist/chartpoint/index.d.ts +0 -8
  453. package/dist/chartpoint/index.d.ts.map +0 -1
  454. package/dist/color/index.d.ts +0 -28
  455. package/dist/color/index.d.ts.map +0 -1
  456. package/dist/compare/index.d.ts +0 -8
  457. package/dist/compare/index.d.ts.map +0 -1
  458. package/dist/drawing/registry.d.ts +0 -19
  459. package/dist/drawing/registry.d.ts.map +0 -1
  460. package/dist/index.cjs +0 -7979
  461. package/dist/index.d.ts +0 -64
  462. package/dist/index.d.ts.map +0 -1
  463. package/dist/index.mjs +0 -7962
  464. package/dist/indicator.d.ts +0 -42
  465. package/dist/indicator.d.ts.map +0 -1
  466. package/dist/input.d.ts +0 -47
  467. package/dist/input.d.ts.map +0 -1
  468. package/dist/label/index.d.ts +0 -30
  469. package/dist/label/index.d.ts.map +0 -1
  470. package/dist/lib/index.d.ts +0 -2
  471. package/dist/lib/index.d.ts.map +0 -1
  472. package/dist/lib/zigzag/index.d.ts.map +0 -1
  473. package/dist/lib/zigzag/zigzag.d.ts +0 -47
  474. package/dist/lib/zigzag/zigzag.d.ts.map +0 -1
  475. package/dist/line/index.d.ts +0 -30
  476. package/dist/line/index.d.ts.map +0 -1
  477. package/dist/linefill/index.d.ts +0 -10
  478. package/dist/linefill/index.d.ts.map +0 -1
  479. package/dist/map/index.d.ts +0 -14
  480. package/dist/map/index.d.ts.map +0 -1
  481. package/dist/math/index.d.ts +0 -53
  482. package/dist/math/index.d.ts.map +0 -1
  483. package/dist/matrix/index.d.ts +0 -52
  484. package/dist/matrix/index.d.ts.map +0 -1
  485. package/dist/plot.d.ts +0 -20
  486. package/dist/plot.d.ts.map +0 -1
  487. package/dist/polyline/index.d.ts +0 -11
  488. package/dist/polyline/index.d.ts.map +0 -1
  489. package/dist/runtime/adapters/LightweightChartsAdapter.d.ts +0 -15
  490. package/dist/runtime/adapters/LightweightChartsAdapter.d.ts.map +0 -1
  491. package/dist/runtime/adapters/SimpleInputAdapter.d.ts +0 -16
  492. package/dist/runtime/adapters/SimpleInputAdapter.d.ts.map +0 -1
  493. package/dist/runtime/index.cjs +0 -600
  494. package/dist/runtime/index.d.ts.map +0 -1
  495. package/dist/runtime/index.mjs +0 -577
  496. package/dist/runtime/inputs.d.ts +0 -13
  497. package/dist/runtime/inputs.d.ts.map +0 -1
  498. package/dist/runtime/runtime.d.ts +0 -16
  499. package/dist/runtime/runtime.d.ts.map +0 -1
  500. package/dist/runtime/series.d.ts +0 -60
  501. package/dist/runtime/series.d.ts.map +0 -1
  502. package/dist/runtime/types.d.ts +0 -122
  503. package/dist/runtime/types.d.ts.map +0 -1
  504. package/dist/script/index.cjs +0 -6372
  505. package/dist/script/index.d.ts +0 -709
  506. package/dist/script/index.d.ts.map +0 -1
  507. package/dist/script/index.mjs +0 -6355
  508. package/dist/security/resample.d.ts +0 -13
  509. package/dist/security/resample.d.ts.map +0 -1
  510. package/dist/session/bars.d.ts +0 -34
  511. package/dist/session/bars.d.ts.map +0 -1
  512. package/dist/session/calendar.d.ts +0 -31
  513. package/dist/session/calendar.d.ts.map +0 -1
  514. package/dist/str/dateformat.d.ts +0 -2
  515. package/dist/str/dateformat.d.ts.map +0 -1
  516. package/dist/str/index.d.ts +0 -24
  517. package/dist/str/index.d.ts.map +0 -1
  518. package/dist/str/messageformat.d.ts +0 -2
  519. package/dist/str/messageformat.d.ts.map +0 -1
  520. package/dist/str/numberformat.d.ts +0 -3
  521. package/dist/str/numberformat.d.ts.map +0 -1
  522. package/dist/strategy/index.d.ts.map +0 -1
  523. package/dist/ta/index.d.ts +0 -72
  524. package/dist/ta/index.d.ts.map +0 -1
  525. package/dist/ta-series.d.ts +0 -143
  526. package/dist/ta-series.d.ts.map +0 -1
  527. package/dist/text/index.d.ts +0 -4
  528. package/dist/text/index.d.ts.map +0 -1
  529. package/dist/time/datestring.d.ts +0 -2
  530. package/dist/time/datestring.d.ts.map +0 -1
  531. package/dist/time/index.d.ts +0 -15
  532. package/dist/time/index.d.ts.map +0 -1
  533. package/dist/time/session.d.ts +0 -2
  534. package/dist/time/session.d.ts.map +0 -1
  535. package/dist/time/timezone.d.ts +0 -13
  536. package/dist/time/timezone.d.ts.map +0 -1
  537. package/dist/timeframe/index.d.ts +0 -17
  538. package/dist/timeframe/index.d.ts.map +0 -1
  539. package/dist/types/index.d.ts +0 -181
  540. package/dist/types/index.d.ts.map +0 -1
  541. package/dist/types/metadata.d.ts +0 -131
  542. package/dist/types/metadata.d.ts.map +0 -1
  543. package/dist/utils/index.d.ts +0 -26
  544. package/dist/utils/index.d.ts.map +0 -1
@@ -0,0 +1,1169 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var script_exports = {};
30
+ __export(script_exports, {
31
+ BarData: () => import_series.BarData,
32
+ STRATEGY_DEFAULTS: () => import_strategy2.STRATEGY_DEFAULTS,
33
+ Series: () => import_series.Series,
34
+ alertcondition: () => alertcondition,
35
+ barcolor: () => barcolor,
36
+ barmerge: () => barmerge,
37
+ barstate: () => barstate,
38
+ bgcolor: () => bgcolor,
39
+ box: () => box,
40
+ chart: () => chart,
41
+ close: () => close,
42
+ color: () => color,
43
+ compare: () => compare,
44
+ dayofmonth: () => dayofmonth,
45
+ dayofweek: () => dayofweek,
46
+ eachBar: () => eachBar,
47
+ executeScript: () => executeScript,
48
+ fill: () => fill,
49
+ fixnan: () => fixnan,
50
+ high: () => high,
51
+ hl2: () => hl2,
52
+ hlc3: () => hlc3,
53
+ hlcc4: () => hlcc4,
54
+ hline: () => hline,
55
+ hour: () => hour,
56
+ inSession: () => inSession,
57
+ indicator: () => indicator,
58
+ input: () => input,
59
+ label: () => label,
60
+ line: () => line,
61
+ linefill: () => linefill,
62
+ low: () => low,
63
+ math: () => math,
64
+ minute: () => minute,
65
+ month: () => month,
66
+ na: () => import_utils.isNA,
67
+ nz: () => import_utils.nz,
68
+ ohlc4: () => ohlc4,
69
+ open: () => open,
70
+ plot: () => plot,
71
+ plotarrow: () => plotarrow,
72
+ plotchar: () => plotchar,
73
+ plotshape: () => plotshape,
74
+ polyline: () => polyline,
75
+ request: () => request,
76
+ second: () => second,
77
+ seriesOf: () => seriesOf,
78
+ session: () => session,
79
+ str: () => str,
80
+ strategy: () => strategy,
81
+ syminfo: () => syminfo,
82
+ ta: () => ta,
83
+ text: () => text,
84
+ ticker: () => ticker,
85
+ time: () => time,
86
+ time_close: () => time_close,
87
+ time_tradingday: () => time_tradingday,
88
+ timeframe: () => timeframe,
89
+ timestamp: () => timestamp,
90
+ volume: () => volume,
91
+ weekofyear: () => weekofyear,
92
+ year: () => year
93
+ });
94
+ module.exports = __toCommonJS(script_exports);
95
+ var import_series = require("../runtime/series.js");
96
+ var taSeries = __toESM(require("../ta-series.js"), 1);
97
+ var colorCore = __toESM(require("../color/index.js"), 1);
98
+ var import_utils = require("../utils/index.js");
99
+ var lineCore = __toESM(require("../line/index.js"), 1);
100
+ var labelCore = __toESM(require("../label/index.js"), 1);
101
+ var boxCore = __toESM(require("../box/index.js"), 1);
102
+ var linefillCore = __toESM(require("../linefill/index.js"), 1);
103
+ var polylineCore = __toESM(require("../polyline/index.js"), 1);
104
+ var chartPointCore = __toESM(require("../chartpoint/index.js"), 1);
105
+ var textCore = __toESM(require("../text/index.js"), 1);
106
+ var mathCore = __toESM(require("../math/index.js"), 1);
107
+ var import_registry = require("../drawing/registry.js");
108
+ var timeframeCore = __toESM(require("../timeframe/index.js"), 1);
109
+ var timeCore = __toESM(require("../time/index.js"), 1);
110
+ var strCore = __toESM(require("../str/index.js"), 1);
111
+ var import_messageformat = require("../str/messageformat.js");
112
+ var import_calendar = require("../session/calendar.js");
113
+ var import_bars = require("../session/bars.js");
114
+ var import_resample = require("../security/resample.js");
115
+ var import_strategy = require("../strategy/index.js");
116
+ var import_strategy2 = require("../strategy/index.js");
117
+ var compare = __toESM(require("../compare/index.js"), 1);
118
+ const ctxBars = new import_series.BarData([]);
119
+ let ctx = null;
120
+ function collector() {
121
+ if (!ctx) {
122
+ throw new Error(
123
+ "oakscriptjs/script functions can only run inside executeScript() \u2014 the host (chart/worker) drives script execution."
124
+ );
125
+ }
126
+ return ctx;
127
+ }
128
+ function freshCollector(inputValues) {
129
+ return {
130
+ title: "Untitled",
131
+ overlay: true,
132
+ inputValues,
133
+ inputConfig: [],
134
+ inputIds: /* @__PURE__ */ new Set(),
135
+ defaultInputs: {},
136
+ plotConfig: [],
137
+ plots: {},
138
+ hlineConfig: [],
139
+ fills: [],
140
+ fillConfig: [],
141
+ shapeConfig: [],
142
+ markers: [],
143
+ arrowConfig: [],
144
+ arrows: [],
145
+ barColorConfig: [],
146
+ bgcolors: [],
147
+ barcolors: [],
148
+ alertConfig: [],
149
+ alerts: []
150
+ };
151
+ }
152
+ function slugId(title, fallback, taken) {
153
+ const base = (title ?? "").toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "") || fallback;
154
+ let id = base;
155
+ for (let n = 2; taken.has(id); n++) id = `${base}_${n}`;
156
+ taken.add(id);
157
+ return id;
158
+ }
159
+ let scriptOptions = {};
160
+ function executeScript(body, barsInput, inputs = {}, chart2 = {}, options = {}) {
161
+ ctxBars.setAll(barsInput);
162
+ chartCtx = { ...chart2 };
163
+ scriptOptions = options;
164
+ ctx = freshCollector(inputs);
165
+ (0, import_registry.resetDrawings)();
166
+ try {
167
+ body();
168
+ const c = ctx;
169
+ return {
170
+ metadata: {
171
+ title: c.title,
172
+ shortTitle: c.shortTitle,
173
+ overlay: c.overlay,
174
+ precision: c.precision,
175
+ format: c.format
176
+ },
177
+ inputConfig: c.inputConfig,
178
+ plotConfig: c.plotConfig,
179
+ hlineConfig: c.hlineConfig,
180
+ fillConfig: c.fillConfig,
181
+ shapeConfig: c.shapeConfig,
182
+ arrowConfig: c.arrowConfig,
183
+ barColorConfig: c.barColorConfig,
184
+ defaultInputs: c.defaultInputs,
185
+ alertConfig: c.alertConfig,
186
+ strategyConfig: c.strategy?.properties,
187
+ result: {
188
+ metadata: { title: c.title, shorttitle: c.shortTitle, overlay: c.overlay, precision: c.precision },
189
+ plots: c.plots,
190
+ fills: c.fills.length ? c.fills : void 0,
191
+ markers: c.markers.length ? c.markers : void 0,
192
+ arrows: c.arrows.length ? c.arrows : void 0,
193
+ bgcolors: c.bgcolors.length ? c.bgcolors : void 0,
194
+ barcolors: c.barcolors.length ? c.barcolors : void 0,
195
+ alerts: c.alerts.length ? c.alerts : void 0
196
+ }
197
+ };
198
+ } finally {
199
+ ctx = null;
200
+ }
201
+ }
202
+ function indicator(title, options = {}) {
203
+ const c = collector();
204
+ declare(c, "indicator");
205
+ c.title = title;
206
+ c.shortTitle = options.shorttitle;
207
+ c.overlay = options.overlay ?? true;
208
+ c.precision = options.precision;
209
+ c.format = options.format;
210
+ (0, import_registry.setDrawingLimits)({
211
+ line: options.max_lines_count,
212
+ label: options.max_labels_count,
213
+ box: options.max_boxes_count,
214
+ polyline: options.max_polylines_count
215
+ });
216
+ }
217
+ function declare(c, kind) {
218
+ if (c.declaration) {
219
+ throw new Error(`${kind}(): the script already declared ${c.declaration}(); a script has one declaration.`);
220
+ }
221
+ c.declaration = kind;
222
+ }
223
+ function common(opts) {
224
+ const out = {};
225
+ if (opts.group !== void 0) out.group = opts.group;
226
+ if (opts.inline !== void 0) out.inline = opts.inline;
227
+ if (opts.tooltip !== void 0) out.tooltip = opts.tooltip;
228
+ if (opts.confirm !== void 0) out.confirm = opts.confirm;
229
+ if (opts.display !== void 0) out.display = opts.display;
230
+ return out;
231
+ }
232
+ function registerInput(config, fallbackId) {
233
+ const c = collector();
234
+ const id = slugId(config.title, fallbackId, c.inputIds);
235
+ c.inputConfig.push({ id, ...config });
236
+ c.defaultInputs[id] = config.defval;
237
+ const value = c.inputValues[id];
238
+ return value === void 0 ? config.defval : value;
239
+ }
240
+ function registerNumeric(type, defval, title, opts = {}) {
241
+ const v = registerInput(
242
+ { type, defval, title, min: opts.minval, max: opts.maxval, step: opts.step, ...common(opts) },
243
+ `input_${type}`
244
+ );
245
+ return typeof v === "number" ? v : defval;
246
+ }
247
+ const input = {
248
+ int(defval, title, opts = {}) {
249
+ return Math.round(registerNumeric("int", defval, title, opts));
250
+ },
251
+ float(defval, title, opts = {}) {
252
+ return registerNumeric("float", defval, title, opts);
253
+ },
254
+ bool(defval, title, opts = {}) {
255
+ return registerInput({ type: "bool", defval, title, ...common(opts) }, "input_bool");
256
+ },
257
+ string(defval, title, opts = {}) {
258
+ return registerInput({ type: "string", defval, title, options: opts.options, ...common(opts) }, "input_string");
259
+ },
260
+ color(defval, title, opts = {}) {
261
+ return registerInput({ type: "color", defval, title, ...common(opts) }, "input_color");
262
+ },
263
+ /** Declares a source input and returns it as a Series. */
264
+ source(defval = "close", title, opts = {}) {
265
+ const name = registerInput({ type: "source", defval, title, ...common(opts) }, "input_source");
266
+ return sourceSeries(name);
267
+ },
268
+ /** Timeframe string ("60", "1D", "W"). As in PineScript, "" means the chart timeframe. */
269
+ timeframe(defval, title, opts = {}) {
270
+ return registerInput(
271
+ { type: "timeframe", defval, title, options: opts.options, ...common(opts) },
272
+ "input_timeframe"
273
+ );
274
+ },
275
+ /** Session string ("0930-1600", "0930-1600:23456"). */
276
+ session(defval, title, opts = {}) {
277
+ return registerInput(
278
+ { type: "session", defval, title, options: opts.options, ...common(opts) },
279
+ "input_session"
280
+ );
281
+ },
282
+ /** Date and time as a UNIX time in milliseconds, e.g. `input.time(timestamp('2024-01-01'), 'Start')`. */
283
+ time(defval, title, opts = {}) {
284
+ const v = registerInput({ type: "time", defval, title, ...common(opts) }, "input_time");
285
+ return typeof v === "number" ? v : defval;
286
+ }
287
+ };
288
+ const open = import_series.Series.fromBars(ctxBars, "open");
289
+ const high = import_series.Series.fromBars(ctxBars, "high");
290
+ const low = import_series.Series.fromBars(ctxBars, "low");
291
+ const close = import_series.Series.fromBars(ctxBars, "close");
292
+ const volume = import_series.Series.fromBars(ctxBars, "volume");
293
+ const hl2 = new import_series.Series(ctxBars, (b) => (b.high + b.low) / 2);
294
+ const hlc3 = new import_series.Series(ctxBars, (b) => (b.high + b.low + b.close) / 3);
295
+ const ohlc4 = new import_series.Series(ctxBars, (b) => (b.open + b.high + b.low + b.close) / 4);
296
+ const hlcc4 = new import_series.Series(ctxBars, (b) => (b.high + b.low + b.close + b.close) / 4);
297
+ const SOURCES = { open, high, low, close, volume, hl2, hlc3, ohlc4, hlcc4 };
298
+ function sourceSeries(name) {
299
+ return SOURCES[name] ?? close;
300
+ }
301
+ const bars = () => ctxBars.bars;
302
+ function barsSeries(compute) {
303
+ let version = -1;
304
+ let values = [];
305
+ return new import_series.Series(ctxBars, (_bar, i, data) => {
306
+ if (version !== ctxBars.version) {
307
+ values = compute(data).toArray();
308
+ version = ctxBars.version;
309
+ }
310
+ return values[i] ?? NaN;
311
+ });
312
+ }
313
+ const ta = {
314
+ ...taSeries,
315
+ tr: (handleNa = false) => taSeries.tr(bars(), handleNa),
316
+ atr: (length) => taSeries.atr(bars(), length),
317
+ sar: (start, inc, max) => taSeries.sar(bars(), start, inc, max),
318
+ wpr: (length) => taSeries.wpr(bars(), length),
319
+ supertrend: (factor, atrLength) => taSeries.supertrend(bars(), factor, atrLength),
320
+ dmi: (diLength, adxSmoothing) => taSeries.dmi(bars(), diLength, adxSmoothing),
321
+ kc: (source, length, mult, useTrueRange) => taSeries.kc(bars(), source, length, mult, useTrueRange),
322
+ kcw: (source, length, mult, useTrueRange) => taSeries.kcw(bars(), source, length, mult, useTrueRange),
323
+ ichimoku: (conversionPeriods, basePeriods, laggingSpan2Periods, displacement) => taSeries.ichimoku(bars(), conversionPeriods, basePeriods, laggingSpan2Periods, displacement),
324
+ /** `ta.highest(source, length)` or `ta.highest(length)` (source = high). */
325
+ highest: (sourceOrLength, length) => typeof sourceOrLength === "number" ? taSeries.highest(high, sourceOrLength) : taSeries.highest(sourceOrLength, length),
326
+ /** `ta.lowest(source, length)` or `ta.lowest(length)` (source = low). */
327
+ lowest: (sourceOrLength, length) => typeof sourceOrLength === "number" ? taSeries.lowest(low, sourceOrLength) : taSeries.lowest(sourceOrLength, length),
328
+ /** `ta.highestbars(source, length)` or `ta.highestbars(length)` (source = high); offsets are 0 or negative. */
329
+ highestbars: (sourceOrLength, length) => typeof sourceOrLength === "number" ? taSeries.highestbars(high, sourceOrLength) : taSeries.highestbars(sourceOrLength, length),
330
+ /** `ta.lowestbars(source, length)` or `ta.lowestbars(length)` (source = low); offsets are 0 or negative. */
331
+ lowestbars: (sourceOrLength, length) => typeof sourceOrLength === "number" ? taSeries.lowestbars(low, sourceOrLength) : taSeries.lowestbars(sourceOrLength, length),
332
+ /** `ta.vwap(source, anchor?, stdev_mult?)` with the chart volume; the default anchor is a new trading
333
+ * day (`timeframe.change("1D")`), which needs the chart context (timeframe, time zone, session). */
334
+ vwap: ((source, anchor, stdev_mult) => {
335
+ const a = anchor ?? changeOf("1D");
336
+ return stdev_mult === void 0 ? taSeries.vwap(source, volume, a) : taSeries.vwapBands(source, volume, a, stdev_mult);
337
+ }),
338
+ /** `ta.mfi(source, length)` with the chart volume (PineScript takes 2 arguments). */
339
+ mfi: (source, length) => taSeries.mfi(source, length, volume),
340
+ /** `ta.pivothigh(source, leftbars, rightbars)` or `ta.pivothigh(leftbars, rightbars)` (source = high).
341
+ * The value appears `rightbars` bars after the pivot bar, as in PineScript. */
342
+ pivothigh: (sourceOrLeft, leftOrRight, rightbars) => typeof sourceOrLeft === "number" ? taSeries.pivothigh(high, sourceOrLeft, leftOrRight) : taSeries.pivothigh(sourceOrLeft, leftOrRight, rightbars),
343
+ /** `ta.pivotlow(source, leftbars, rightbars)` or `ta.pivotlow(leftbars, rightbars)` (source = low). */
344
+ pivotlow: (sourceOrLeft, leftOrRight, rightbars) => typeof sourceOrLeft === "number" ? taSeries.pivotlow(low, sourceOrLeft, leftOrRight) : taSeries.pivotlow(sourceOrLeft, leftOrRight, rightbars),
345
+ // PineScript variables of the chart bars: `ta.obv`, not `ta.obv()`.
346
+ obv: barsSeries(taSeries.obv),
347
+ pvt: barsSeries(taSeries.pvt),
348
+ accdist: barsSeries(taSeries.accdist),
349
+ nvi: barsSeries(taSeries.nvi),
350
+ pvi: barsSeries(taSeries.pvi),
351
+ iii: barsSeries(taSeries.iii),
352
+ wad: barsSeries(taSeries.wad),
353
+ wvad: barsSeries(taSeries.wvad)
354
+ };
355
+ function fixnan(source) {
356
+ return source instanceof import_series.Series ? import_series.Series.fromArray(ctxBars, (0, import_utils.fixnan)(source.toArray())) : (0, import_utils.fixnan)(source);
357
+ }
358
+ function colorWhen(cond, colorTrue, colorFalse) {
359
+ return cond.toArray().map((v) => !(0, import_utils.isNA)(v) && v !== 0 ? colorTrue : colorFalse);
360
+ }
361
+ const color = {
362
+ ...colorCore,
363
+ new: colorCore.new_color,
364
+ when: colorWhen
365
+ };
366
+ function plotImpl(series, title, options = {}) {
367
+ const c = collector();
368
+ const id = `plot${c.plotConfig.length}`;
369
+ const perBar2 = Array.isArray(options.color) ? options.color : void 0;
370
+ const staticColor = typeof options.color === "string" ? options.color : perBar2?.[perBar2.length - 1] ?? "#2962FF";
371
+ c.plotConfig.push({
372
+ id,
373
+ title: title ?? id,
374
+ color: staticColor,
375
+ lineWidth: options.linewidth,
376
+ style: options.style,
377
+ linestyle: options.linestyle,
378
+ display: options.display,
379
+ histbase: options.histbase,
380
+ forceOverlay: options.force_overlay
381
+ });
382
+ const values = series.toArray();
383
+ const b = bars();
384
+ const data = [];
385
+ for (let i = 0; i < b.length; i++) {
386
+ const value = values[i];
387
+ if (value === void 0 || !Number.isFinite(value)) continue;
388
+ data.push(perBar2 ? { time: b[i].time, value, color: perBar2[i] } : { time: b[i].time, value });
389
+ }
390
+ c.plots[id] = data;
391
+ return { id, kind: "plot" };
392
+ }
393
+ const plot = Object.assign(plotImpl, {
394
+ style_line: "line",
395
+ style_linebr: "linebr",
396
+ style_stepline: "stepline",
397
+ style_steplinebr: "steplinebr",
398
+ style_stepline_diamond: "stepline_diamond",
399
+ style_histogram: "histogram",
400
+ style_columns: "columns",
401
+ style_area: "area",
402
+ style_areabr: "areabr",
403
+ style_circles: "circles",
404
+ style_cross: "cross",
405
+ linestyle_solid: "solid",
406
+ linestyle_dotted: "dotted",
407
+ linestyle_dashed: "dashed"
408
+ });
409
+ function hlineImpl(price, title, options = {}) {
410
+ const c = collector();
411
+ const id = `hline${c.hlineConfig.length}`;
412
+ c.hlineConfig.push({
413
+ id,
414
+ price,
415
+ title,
416
+ color: options.color,
417
+ linestyle: options.linestyle ?? "dashed",
418
+ linewidth: options.linewidth
419
+ });
420
+ return { id, kind: "hline" };
421
+ }
422
+ const hline = Object.assign(hlineImpl, {
423
+ style_solid: "solid",
424
+ style_dotted: "dotted",
425
+ style_dashed: "dashed"
426
+ });
427
+ function perBarValues(v, n) {
428
+ return v instanceof import_series.Series ? v.toArray().slice(0, n) : new Array(n).fill(v);
429
+ }
430
+ function perBarColors(c, n) {
431
+ if (Array.isArray(c)) return Array.from({ length: n }, (_, i) => c[i] ?? null);
432
+ return new Array(n).fill(c ?? null);
433
+ }
434
+ function fill(a, b, ...args) {
435
+ const c = collector();
436
+ const third = args[0];
437
+ let perBar2;
438
+ let staticColor;
439
+ let title;
440
+ let gradient;
441
+ if (typeof third === "number" || third instanceof import_series.Series) {
442
+ const n = ctxBars.bars.length;
443
+ gradient = {
444
+ topValue: perBarValues(third, n),
445
+ bottomValue: perBarValues(args[1], n),
446
+ topColor: perBarColors(args[2], n),
447
+ bottomColor: perBarColors(args[3], n)
448
+ };
449
+ title = args[4];
450
+ } else if (third !== null && typeof third === "object" && !Array.isArray(third)) {
451
+ const options = third;
452
+ perBar2 = Array.isArray(options.color) ? options.color : void 0;
453
+ staticColor = typeof options.color === "string" ? options.color : void 0;
454
+ title = options.title;
455
+ } else {
456
+ const color2 = third;
457
+ perBar2 = Array.isArray(color2) ? color2.map((x) => x ?? "") : void 0;
458
+ staticColor = typeof color2 === "string" ? color2 : void 0;
459
+ title = args[1];
460
+ }
461
+ if (a.kind === "hline" && b.kind === "hline") {
462
+ c.fillConfig.push({
463
+ id: `fill${c.fillConfig.length}`,
464
+ plot1: a.id,
465
+ plot2: b.id,
466
+ color: staticColor,
467
+ colors: perBar2,
468
+ gradient,
469
+ title
470
+ });
471
+ return;
472
+ }
473
+ c.fills.push({
474
+ plot1: a.id,
475
+ plot2: b.id,
476
+ options: { color: staticColor, title },
477
+ colors: perBar2,
478
+ gradient
479
+ });
480
+ }
481
+ function emitMarkers(kind, condition, title, options) {
482
+ const c = collector();
483
+ const id = `${kind}${c.shapeConfig.filter((s) => s.kind === kind).length}`;
484
+ const style = kind === "shape" ? options.style ?? "xcross" : "char";
485
+ const char = kind === "char" ? options.char ?? "*" : void 0;
486
+ const location = options.location ?? "abovebar";
487
+ c.shapeConfig.push({
488
+ id,
489
+ kind,
490
+ title,
491
+ style: kind === "shape" ? style : void 0,
492
+ char,
493
+ location,
494
+ color: options.color,
495
+ text: options.text,
496
+ textcolor: options.textcolor,
497
+ size: options.size,
498
+ offset: options.offset,
499
+ forceOverlay: options.force_overlay
500
+ });
501
+ const values = condition.toArray();
502
+ const b = bars();
503
+ const off = options.offset ?? 0;
504
+ for (let i = 0; i < b.length; i++) {
505
+ const v = values[i];
506
+ if (v === void 0 || Number.isNaN(v) || v === 0) continue;
507
+ const j = i + off;
508
+ if (j < 0 || j >= b.length) continue;
509
+ c.markers.push({
510
+ time: b[j].time,
511
+ id,
512
+ location,
513
+ style,
514
+ char,
515
+ color: options.color,
516
+ text: options.text,
517
+ textcolor: options.textcolor,
518
+ size: options.size,
519
+ tooltip: options.tooltip,
520
+ price: location === "absolute" ? v : void 0
521
+ });
522
+ }
523
+ }
524
+ function plotshape(condition, title, options = {}) {
525
+ emitMarkers("shape", condition, title, options);
526
+ }
527
+ function plotchar(condition, title, options = {}) {
528
+ emitMarkers("char", condition, title, options);
529
+ }
530
+ function plotarrow(series, title, options = {}) {
531
+ const c = collector();
532
+ const id = `arrow${c.arrowConfig.length}`;
533
+ const pick = (col, fallback, i) => col === void 0 ? fallback : typeof col === "string" ? col : col[i];
534
+ const colorup = typeof options.colorup === "string" ? options.colorup : "#00FF00";
535
+ const colordown = typeof options.colordown === "string" ? options.colordown : "#FF0000";
536
+ c.arrowConfig.push({
537
+ id,
538
+ title,
539
+ colorup,
540
+ colordown,
541
+ minheight: options.minheight ?? 5,
542
+ maxheight: options.maxheight ?? 100,
543
+ offset: options.offset,
544
+ display: options.display,
545
+ forceOverlay: options.force_overlay
546
+ });
547
+ const values = series.toArray();
548
+ const b = bars();
549
+ const off = options.offset ?? 0;
550
+ for (let i = 0; i < b.length; i++) {
551
+ const v = values[i];
552
+ if (v === void 0 || Number.isNaN(v) || v === 0) continue;
553
+ const j = i + off;
554
+ if (j < 0 || j >= b.length) continue;
555
+ const color2 = v > 0 ? pick(options.colorup, "#00FF00", i) : pick(options.colordown, "#FF0000", i);
556
+ if (color2 === void 0) continue;
557
+ c.arrows.push({ time: b[j].time, id, value: v, color: color2 });
558
+ }
559
+ }
560
+ function emitBarColors(kind, colors, options) {
561
+ const c = collector();
562
+ const id = `${kind}${c.barColorConfig.filter((x) => x.kind === kind).length}`;
563
+ c.barColorConfig.push({ id, kind, title: options.title, offset: options.offset, forceOverlay: options.force_overlay });
564
+ const b = bars();
565
+ const off = options.offset ?? 0;
566
+ const target = kind === "bgcolor" ? c.bgcolors : c.barcolors;
567
+ for (let i = 0; i < b.length; i++) {
568
+ const col = typeof colors === "string" ? colors : colors[i];
569
+ if (!col) continue;
570
+ const j = i + off;
571
+ if (j < 0 || j >= b.length) continue;
572
+ target.push({ time: b[j].time, color: col });
573
+ }
574
+ }
575
+ function bgcolor(colors, options = {}) {
576
+ emitBarColors("bgcolor", colors, options);
577
+ }
578
+ function barcolor(colors, options = {}) {
579
+ emitBarColors("barcolor", colors, options);
580
+ }
581
+ function eachBar(fn) {
582
+ collector();
583
+ const b = bars();
584
+ const out = new Array(b.length).fill(NaN);
585
+ const cache = /* @__PURE__ */ new Map();
586
+ let idx = 0;
587
+ const ctx2 = {
588
+ get i() {
589
+ return idx;
590
+ },
591
+ n: b.length,
592
+ get time() {
593
+ return b[idx].time;
594
+ },
595
+ get open() {
596
+ return b[idx].open;
597
+ },
598
+ get high() {
599
+ return b[idx].high;
600
+ },
601
+ get low() {
602
+ return b[idx].low;
603
+ },
604
+ get close() {
605
+ return b[idx].close;
606
+ },
607
+ get volume() {
608
+ return b[idx].volume ?? NaN;
609
+ },
610
+ get(src, offset = 0) {
611
+ if (offset < 0) throw new RangeError(`c.get(): the offset cannot be negative (${offset} would read a future bar).`);
612
+ let vals = cache.get(src);
613
+ if (!vals) {
614
+ vals = src.toArray();
615
+ cache.set(src, vals);
616
+ }
617
+ const j = idx - offset;
618
+ return j >= 0 && j < vals.length ? vals[j] ?? NaN : NaN;
619
+ },
620
+ prev(offset = 1) {
621
+ const j = idx - Math.max(1, offset);
622
+ return j >= 0 ? out[j] : NaN;
623
+ }
624
+ };
625
+ try {
626
+ for (idx = 0; idx < b.length; idx++) {
627
+ currentBar = idx;
628
+ const r = fn(ctx2);
629
+ out[idx] = typeof r === "number" ? r : typeof r === "boolean" ? r ? 1 : 0 : NaN;
630
+ }
631
+ } finally {
632
+ currentBar = -1;
633
+ }
634
+ return import_series.Series.fromArray(ctxBars, out);
635
+ }
636
+ let currentBar = -1;
637
+ function strategyRun(caller) {
638
+ const run = collector().strategy;
639
+ if (!run) throw new Error(`${caller}: declare the script with strategy() first.`);
640
+ return run;
641
+ }
642
+ function strategyEngine(caller) {
643
+ const run = strategyRun(caller);
644
+ if (!run.engine) {
645
+ throw new Error(
646
+ `${caller}: no strategy engine; pass it as executeScript(body, bars, inputs, chart, { strategyEngine }).`
647
+ );
648
+ }
649
+ return run.engine;
650
+ }
651
+ function orderEngine(caller) {
652
+ const engine = strategyEngine(caller);
653
+ if (!strategyRun(caller).inLoop) throw new Error(`${caller} must be called inside strategy.eachBar().`);
654
+ return engine;
655
+ }
656
+ function given(options) {
657
+ const out = {};
658
+ for (const [key, value] of Object.entries(options)) {
659
+ if (value === void 0 || typeof value === "number" && Number.isNaN(value)) continue;
660
+ out[key] = value;
661
+ }
662
+ return out;
663
+ }
664
+ function readEngine(caller) {
665
+ const engine = strategyEngine(caller);
666
+ if (!strategyRun(caller).inLoop) throw new Error(`${caller} must be read inside strategy.eachBar().`);
667
+ return engine;
668
+ }
669
+ const STRATEGY_CONSTANT_VARIABLES = /* @__PURE__ */ new Set(["initial_capital", "account_currency"]);
670
+ function strategyVariable(name) {
671
+ const caller = `strategy.${name}`;
672
+ const engine = STRATEGY_CONSTANT_VARIABLES.has(name) ? strategyEngine(caller) : readEngine(caller);
673
+ const value = engine.get(name);
674
+ if (value === void 0) throw new Error(`strategy.${name} is not provided by the strategy engine.`);
675
+ return value;
676
+ }
677
+ function riskRule(rule) {
678
+ const engine = strategyEngine(`strategy.risk.${rule.rule}()`);
679
+ if (!engine.risk) throw new Error(`strategy.risk.${rule.rule}() is not provided by the strategy engine.`);
680
+ engine.risk(rule);
681
+ }
682
+ function declareStrategy(title, options = {}) {
683
+ const c = collector();
684
+ declare(c, "strategy");
685
+ c.title = title;
686
+ c.shortTitle = options.shorttitle;
687
+ c.overlay = options.overlay ?? false;
688
+ c.precision = options.precision;
689
+ c.format = options.format;
690
+ (0, import_registry.setDrawingLimits)({
691
+ line: options.max_lines_count,
692
+ label: options.max_labels_count,
693
+ box: options.max_boxes_count,
694
+ polyline: options.max_polylines_count
695
+ });
696
+ const properties = { ...import_strategy.STRATEGY_DEFAULTS };
697
+ const target = properties;
698
+ for (const key of [...Object.keys(import_strategy.STRATEGY_DEFAULTS), "currency"]) {
699
+ const value = options[key];
700
+ if (value !== void 0) target[key] = value;
701
+ }
702
+ const factory = scriptOptions.strategyEngine;
703
+ c.strategy = {
704
+ properties,
705
+ engine: factory?.({ properties, bars: ctxBars.bars, chart: chartCtx }),
706
+ looped: false,
707
+ inLoop: false
708
+ };
709
+ }
710
+ function strategyEachBar(fn) {
711
+ const run = strategyRun("strategy.eachBar()");
712
+ const engine = strategyEngine("strategy.eachBar()");
713
+ if (run.looped) throw new Error("strategy.eachBar() runs once per script run.");
714
+ run.looped = true;
715
+ return eachBar((c) => {
716
+ engine.processBar(c.i);
717
+ run.inLoop = true;
718
+ try {
719
+ return fn(c);
720
+ } finally {
721
+ run.inLoop = false;
722
+ engine.processClose(c.i);
723
+ }
724
+ });
725
+ }
726
+ const strategyMembers = {
727
+ ...import_strategy.STRATEGY_CONSTANTS,
728
+ eachBar: strategyEachBar,
729
+ entry(id, direction, options = {}) {
730
+ orderEngine("strategy.entry()").entry(id, direction, given(options));
731
+ },
732
+ order(id, direction, options = {}) {
733
+ orderEngine("strategy.order()").order(id, direction, given(options));
734
+ },
735
+ exit(id, options = {}) {
736
+ orderEngine("strategy.exit()").exit(id, given(options));
737
+ },
738
+ close(id, options = {}) {
739
+ orderEngine("strategy.close()").close(id, given(options));
740
+ },
741
+ close_all(options = {}) {
742
+ orderEngine("strategy.close_all()").close_all(given(options));
743
+ },
744
+ cancel(id) {
745
+ orderEngine("strategy.cancel()").cancel(id);
746
+ },
747
+ cancel_all() {
748
+ orderEngine("strategy.cancel_all()").cancel_all();
749
+ },
750
+ opentrade(index) {
751
+ return readEngine("strategy.opentrade()").openTrade(index);
752
+ },
753
+ closedtrade(index) {
754
+ return readEngine("strategy.closedtrade()").closedTrade(index);
755
+ },
756
+ default_entry_qty(fill_price) {
757
+ const engine = readEngine("strategy.default_entry_qty()");
758
+ if (!engine.defaultEntryQty) throw new Error("strategy.default_entry_qty() is not provided by the strategy engine.");
759
+ return engine.defaultEntryQty(fill_price);
760
+ },
761
+ risk: {
762
+ allow_entry_in: (direction) => riskRule({ rule: "allow_entry_in", direction }),
763
+ max_cons_loss_days: (count, alert_message) => riskRule(given({ rule: "max_cons_loss_days", count, alert_message })),
764
+ max_drawdown: (value, type, alert_message) => riskRule(given({ rule: "max_drawdown", value, type, alert_message })),
765
+ max_intraday_filled_orders: (count, alert_message) => riskRule(given({ rule: "max_intraday_filled_orders", count, alert_message })),
766
+ max_intraday_loss: (value, type, alert_message) => riskRule(given({ rule: "max_intraday_loss", value, type, alert_message })),
767
+ max_position_size: (contracts) => riskRule({ rule: "max_position_size", contracts })
768
+ }
769
+ };
770
+ const variableGetters = {};
771
+ for (const name of [...import_strategy.STRATEGY_NUMBER_VARIABLES, ...import_strategy.STRATEGY_TEXT_VARIABLES]) {
772
+ variableGetters[name] = { get: () => strategyVariable(name), enumerable: true };
773
+ }
774
+ const strategy = Object.defineProperties(
775
+ Object.assign((title, options) => declareStrategy(title, options), strategyMembers),
776
+ variableGetters
777
+ );
778
+ let chartCtx = {};
779
+ function chartTimeframe() {
780
+ collector();
781
+ if (!chartCtx.timeframe) {
782
+ throw new Error("The chart timeframe is not known: pass it as executeScript(body, bars, inputs, { timeframe }).");
783
+ }
784
+ return timeframeCore.info(chartCtx.timeframe);
785
+ }
786
+ function exchangeTimezone() {
787
+ collector();
788
+ if (!chartCtx.timezone) {
789
+ throw new Error("The exchange time zone is not known: pass it as executeScript(body, bars, inputs, { timezone }).");
790
+ }
791
+ return chartCtx.timezone;
792
+ }
793
+ const timeframe = {
794
+ ...timeframeCore,
795
+ get period() {
796
+ return chartTimeframe().period;
797
+ },
798
+ get main_period() {
799
+ return chartTimeframe().period;
800
+ },
801
+ get multiplier() {
802
+ return chartTimeframe().multiplier;
803
+ },
804
+ get isintraday() {
805
+ return chartTimeframe().isintraday;
806
+ },
807
+ get isdaily() {
808
+ return chartTimeframe().isdaily;
809
+ },
810
+ get isweekly() {
811
+ return chartTimeframe().isweekly;
812
+ },
813
+ get ismonthly() {
814
+ return chartTimeframe().ismonthly;
815
+ },
816
+ get isminutes() {
817
+ return chartTimeframe().isminutes;
818
+ },
819
+ get isseconds() {
820
+ return chartTimeframe().isseconds;
821
+ },
822
+ get isticks() {
823
+ return chartTimeframe().isticks;
824
+ },
825
+ get isdwm() {
826
+ return chartTimeframe().isdwm;
827
+ },
828
+ /** PineScript `timeframe.change(tf)`: 1 on bars that open a new `tf` period (0 on the first bar). */
829
+ change(tf) {
830
+ return changeOf(tf || chartTimeframe().period);
831
+ },
832
+ /** Seconds in `timeframe`; without it (or with "") the chart timeframe, as in PineScript. */
833
+ in_seconds(tf) {
834
+ return timeframeCore.in_seconds(tf === void 0 || tf === "" ? chartTimeframe().period : tf);
835
+ }
836
+ };
837
+ function symbolProperty(key) {
838
+ collector();
839
+ const value = chartCtx[key];
840
+ if (value === void 0) {
841
+ throw new Error(`syminfo.${key} is not known: pass it as executeScript(body, bars, inputs, { ${key} }).`);
842
+ }
843
+ return value;
844
+ }
845
+ const syminfo = {
846
+ get mintick() {
847
+ return symbolProperty("mintick");
848
+ },
849
+ get pointvalue() {
850
+ return symbolProperty("pointvalue");
851
+ },
852
+ get mincontract() {
853
+ return symbolProperty("mincontract");
854
+ },
855
+ get timezone() {
856
+ return exchangeTimezone();
857
+ },
858
+ get tickerid() {
859
+ collector();
860
+ if (!chartCtx.tickerid) {
861
+ throw new Error("The chart symbol is not known: pass it as executeScript(body, bars, inputs, { tickerid }).");
862
+ }
863
+ return chartCtx.tickerid;
864
+ },
865
+ get session() {
866
+ collector();
867
+ return chartCtx.sessionType ?? "regular";
868
+ }
869
+ };
870
+ function calendar(fn) {
871
+ return ((time2, timezone) => {
872
+ const tz = timezone ?? exchangeTimezone();
873
+ return time2 instanceof import_series.Series ? import_series.Series.fromArray(ctxBars, time2.toArray().map((t) => fn(t, tz))) : fn(time2, tz);
874
+ });
875
+ }
876
+ const year = calendar(timeCore.year);
877
+ const month = calendar(timeCore.month);
878
+ const weekofyear = calendar(timeCore.weekofyear);
879
+ const dayofmonth = calendar(timeCore.dayofmonth);
880
+ const dayofweek = calendar(timeCore.dayofweek);
881
+ const hour = calendar(timeCore.hour);
882
+ const minute = calendar(timeCore.minute);
883
+ const second = calendar(timeCore.second);
884
+ function timestamp(first, ...rest) {
885
+ if (typeof first === "number") {
886
+ const [m2, d2, h2, mi2, s2] = rest;
887
+ return timeCore.timestamp(exchangeTimezone(), first, m2, d2, h2, mi2, s2);
888
+ }
889
+ if (rest.length === 0) return timeCore.timestamp(first);
890
+ const [y, m, d, h, mi, s] = rest;
891
+ return timeCore.timestamp(first, y, m, d, h, mi, s);
892
+ }
893
+ function inSession(time2, session2, timezone) {
894
+ return timeCore.inSession(time2, session2, timezone ?? exchangeTimezone());
895
+ }
896
+ const str = {
897
+ ...strCore,
898
+ format_time(time2, format = "yyyy-MM-dd'T'HH:mm:ssZ", timezone) {
899
+ return strCore.format_time(time2, format, timezone ?? exchangeTimezone());
900
+ },
901
+ format(pattern, ...args) {
902
+ return (0, import_messageformat.formatMessage)(pattern, args, exchangeTimezone);
903
+ }
904
+ };
905
+ function barTime(bar) {
906
+ return bar.time * (chartCtx.timeUnit === "ms" ? 1 : 1e3);
907
+ }
908
+ const toSpec = (s) => typeof s === "string" ? { session: s } : s;
909
+ let sessionCache = null;
910
+ function sessionBars() {
911
+ const tz = exchangeTimezone();
912
+ const tf = chartTimeframe().period;
913
+ if (!chartCtx.session) {
914
+ throw new Error("The session is not known: pass it as executeScript(body, bars, inputs, { session }).");
915
+ }
916
+ if (sessionCache?.ctx !== chartCtx) {
917
+ const loaded = toSpec(chartCtx.session);
918
+ const regular = chartCtx.regularSession ? toSpec(chartCtx.regularSession) : loaded;
919
+ sessionCache = {
920
+ ctx: chartCtx,
921
+ bars: new import_bars.SessionBars(new import_calendar.TradingCalendar(tz, loaded), tf),
922
+ regular: new import_bars.SessionBars(new import_calendar.TradingCalendar(tz, { holidays: loaded.holidays, ...regular }), tf)
923
+ };
924
+ }
925
+ return sessionCache;
926
+ }
927
+ function calendarFor(session2, timezone) {
928
+ const { bars: bars2 } = sessionBars();
929
+ if (!session2 && !timezone) return { bars: bars2, test: false };
930
+ const tz = timezone ?? exchangeTimezone();
931
+ const spec = session2 ? { session: session2 } : { session: toSpec(chartCtx.session).session };
932
+ return { bars: new import_bars.SessionBars(new import_calendar.TradingCalendar(tz, spec, session2 ? "pine" : "symbol"), bars2.chart.period), test: true };
933
+ }
934
+ function perBar(fn) {
935
+ const times = ctxBars.bars.map(barTime);
936
+ return import_series.Series.fromArray(ctxBars, times.map((t, i) => fn(t, i, times)));
937
+ }
938
+ function callableSeries(series, fn) {
939
+ Object.setPrototypeOf(fn, import_series.Series.prototype);
940
+ Object.assign(fn, series);
941
+ return fn;
942
+ }
943
+ function timeFunction(tf, session2, timezone) {
944
+ collector();
945
+ const { bars: bars2, test } = calendarFor(session2, timezone);
946
+ const timeframeString = tf || chartTimeframe().period;
947
+ return perBar((t) => test && !bars2.inside(t) ? NaN : bars2.timeOf(t, timeframeString));
948
+ }
949
+ function timeCloseFunction(tf, session2, timezone) {
950
+ collector();
951
+ const { bars: bars2, test } = calendarFor(session2, timezone);
952
+ const timeframeString = tf || chartTimeframe().period;
953
+ return perBar((t) => test && !bars2.inside(t) ? NaN : bars2.closeOf(t, timeframeString));
954
+ }
955
+ const time = callableSeries(new import_series.Series(ctxBars, (b) => barTime(b)), timeFunction);
956
+ const time_close = callableSeries(
957
+ new import_series.Series(ctxBars, (_b, i) => sessionBars().bars.closeOf(barTime(ctxBars.bars[i]), chartTimeframe().period)),
958
+ timeCloseFunction
959
+ );
960
+ const time_tradingday = new import_series.Series(ctxBars, (b) => sessionBars().bars.tradingDayTime(barTime(b)));
961
+ function changeOf(tf) {
962
+ const { bars: bars2 } = sessionBars();
963
+ return perBar((t, i, times) => i > 0 && bars2.timeOf(t, tf) !== bars2.timeOf(times[i - 1], tf) ? 1 : 0);
964
+ }
965
+ function flag(key) {
966
+ const { bars: bars2, regular } = sessionBars();
967
+ const values = (0, import_bars.sessionFlags)(ctxBars.bars.map(barTime), bars2, regular)[key];
968
+ return import_series.Series.fromArray(ctxBars, values.map((v) => v ? 1 : 0));
969
+ }
970
+ function barFlag(test) {
971
+ const n = ctxBars.bars.length;
972
+ return import_series.Series.fromArray(ctxBars, Array.from({ length: n }, (_, i) => test(i, n) ? 1 : 0));
973
+ }
974
+ const lastRealtime = (i, n) => i === n - 1 && chartCtx.realtime === true;
975
+ const barstate = {
976
+ get isfirst() {
977
+ return barFlag((i) => i === 0);
978
+ },
979
+ get islast() {
980
+ return barFlag((i, n) => i === n - 1);
981
+ },
982
+ get isconfirmed() {
983
+ return barFlag((i, n) => i < n - 1 || chartCtx.lastBarConfirmed === true);
984
+ },
985
+ get isrealtime() {
986
+ return barFlag(lastRealtime);
987
+ },
988
+ get ishistory() {
989
+ return barFlag((i, n) => !lastRealtime(i, n));
990
+ },
991
+ get isnew() {
992
+ return barFlag((i, n) => !lastRealtime(i, n) || chartCtx.lastBarNew !== false);
993
+ },
994
+ get islastconfirmedhistory() {
995
+ return barFlag((i, n) => {
996
+ const lastConfirmed = chartCtx.lastBarConfirmed === true && chartCtx.realtime !== true;
997
+ return i === (lastConfirmed ? n - 1 : n - 2);
998
+ });
999
+ }
1000
+ };
1001
+ const session = {
1002
+ regular: "regular",
1003
+ extended: "extended",
1004
+ get isfirstbar() {
1005
+ return flag("isfirstbar");
1006
+ },
1007
+ get islastbar() {
1008
+ return flag("islastbar");
1009
+ },
1010
+ get ismarket() {
1011
+ return flag("ismarket");
1012
+ },
1013
+ get ispremarket() {
1014
+ return flag("ispremarket");
1015
+ },
1016
+ get ispostmarket() {
1017
+ return flag("ispostmarket");
1018
+ },
1019
+ get isfirstbar_regular() {
1020
+ return flag("isfirstbar_regular");
1021
+ },
1022
+ get islastbar_regular() {
1023
+ return flag("islastbar_regular");
1024
+ }
1025
+ };
1026
+ const barmerge = {
1027
+ gaps_on: "gaps_on",
1028
+ gaps_off: "gaps_off",
1029
+ lookahead_on: "lookahead_on",
1030
+ lookahead_off: "lookahead_off"
1031
+ };
1032
+ const HEIKIN_ASHI = "heikinashi:";
1033
+ const ticker = {
1034
+ heikinashi(symbol) {
1035
+ return HEIKIN_ASHI + symbol;
1036
+ },
1037
+ standard(symbol) {
1038
+ return symbol.startsWith(HEIKIN_ASHI) ? symbol.slice(HEIKIN_ASHI.length) : symbol;
1039
+ }
1040
+ };
1041
+ function valuesOf(value, length) {
1042
+ if (!(value instanceof import_series.Series)) return new Array(length).fill(Number(value));
1043
+ if (value.bars !== ctxBars.bars) {
1044
+ throw new Error(
1045
+ "request.security(): the expression returned a series computed on the chart bars. Compute the series inside the expression, e.g. () => ta.ema(close, 10)."
1046
+ );
1047
+ }
1048
+ return value.toArray().slice();
1049
+ }
1050
+ function security(symbol, timeframe2, expression, gaps = barmerge.gaps_off, lookahead = barmerge.lookahead_off) {
1051
+ collector();
1052
+ const heikin = symbol.startsWith(HEIKIN_ASHI);
1053
+ const base = heikin ? symbol.slice(HEIKIN_ASHI.length) : symbol;
1054
+ if (base !== "" && base !== chartCtx.tickerid) {
1055
+ throw new Error(`request.security: "${symbol}" is not the chart symbol; other symbols need external data.`);
1056
+ }
1057
+ const chart2 = chartTimeframe();
1058
+ const tf = timeframeCore.info(timeframe2 || chart2.period).period;
1059
+ if (timeframeCore.in_seconds(tf) < timeframeCore.in_seconds(chart2.period)) {
1060
+ throw new Error(`request.security: timeframe "${tf}" is lower than the chart timeframe "${chart2.period}".`);
1061
+ }
1062
+ const chartBars = ctxBars.bars;
1063
+ const times = chartBars.map(barTime);
1064
+ let htf;
1065
+ let group;
1066
+ let latest;
1067
+ if (tf === chart2.period) {
1068
+ htf = chartBars;
1069
+ group = chartBars.map((_, i) => i);
1070
+ latest = group;
1071
+ } else {
1072
+ const { bars: loaded, regular } = sessionBars();
1073
+ const calendar2 = timeframeCore.info(tf).isdwm ? regular : loaded;
1074
+ const starts = times.map((t) => calendar2.timeOf(t, tf));
1075
+ const dayPeriods = times.map((t, i) => {
1076
+ const at = loaded.calendar.locate(t);
1077
+ const periods = at ? calendar2.calendar.periods(at.date) : [];
1078
+ return periods.length ? calendar2.timeOf(periods[0][0], tf) : starts[i];
1079
+ });
1080
+ const reaches = times.map((t) => loaded.closeOf(t, chart2.period) >= calendar2.periodEnd(t, tf));
1081
+ ({ group, latest } = (0, import_resample.periodsOf)(starts, dayPeriods, reaches));
1082
+ const unit = chartCtx.timeUnit === "ms" ? 1 : 1e3;
1083
+ const after = (0, import_resample.afterCompletion)(group, latest);
1084
+ const kept = (_, i) => !after[i];
1085
+ htf = (0, import_resample.resample)(chartBars.filter(kept), starts.map((s) => s / unit).filter(kept)).bars;
1086
+ }
1087
+ if (heikin) htf = (0, import_resample.heikinAshi)(htf);
1088
+ const savedCtx = chartCtx;
1089
+ let result;
1090
+ let values;
1091
+ ctxBars.setAll(htf);
1092
+ chartCtx = { ...chartCtx, timeframe: tf };
1093
+ try {
1094
+ result = expression();
1095
+ const parts = Array.isArray(result) ? result : [result];
1096
+ values = parts.map((p) => valuesOf(p, htf.length));
1097
+ } finally {
1098
+ ctxBars.setAll(chartBars);
1099
+ chartCtx = savedCtx;
1100
+ }
1101
+ const mapped = values.map(
1102
+ (v) => import_series.Series.fromArray(ctxBars, (0, import_resample.mapToChart)(v, group, latest, lookahead === barmerge.lookahead_on, gaps === barmerge.gaps_on))
1103
+ );
1104
+ return Array.isArray(result) ? mapped : mapped[0];
1105
+ }
1106
+ const request = { security };
1107
+ const line = {
1108
+ ...lineCore,
1109
+ get all() {
1110
+ return lineCore.all();
1111
+ }
1112
+ };
1113
+ const label = {
1114
+ ...labelCore,
1115
+ get all() {
1116
+ return labelCore.all();
1117
+ }
1118
+ };
1119
+ const box = {
1120
+ ...boxCore,
1121
+ get all() {
1122
+ return boxCore.all();
1123
+ }
1124
+ };
1125
+ const linefill = {
1126
+ ...linefillCore,
1127
+ get all() {
1128
+ return linefillCore.all();
1129
+ }
1130
+ };
1131
+ const polyline = {
1132
+ ...polylineCore,
1133
+ get all() {
1134
+ return polylineCore.all();
1135
+ }
1136
+ };
1137
+ const text = { ...textCore };
1138
+ const chart = {
1139
+ point: {
1140
+ ...chartPointCore,
1141
+ now(price) {
1142
+ collector();
1143
+ if (currentBar < 0) {
1144
+ throw new Error("chart.point.now() needs a current bar: call it inside eachBar().");
1145
+ }
1146
+ const bar = ctxBars.bars[currentBar];
1147
+ return chartPointCore.new_point(barTime(bar), currentBar, price ?? bar.close);
1148
+ }
1149
+ }
1150
+ };
1151
+ function seriesOf(values) {
1152
+ collector();
1153
+ return import_series.Series.fromArray(ctxBars, values);
1154
+ }
1155
+ function alertcondition(condition, title, message) {
1156
+ const c = collector();
1157
+ const id = `alert${c.alertConfig.length}`;
1158
+ c.alertConfig.push({ id, title, message });
1159
+ const last = condition.length() ? condition.last() : NaN;
1160
+ c.alerts.push({ id, title, message, triggered: !(0, import_utils.isNA)(last) && last !== 0 });
1161
+ }
1162
+ const math = {
1163
+ ...mathCore,
1164
+ round_to_mintick: ((number, mintick) => {
1165
+ const tick = mintick ?? syminfo.mintick;
1166
+ return number instanceof import_series.Series ? mathCore.round_to_mintick(number, tick) : mathCore.round_to_mintick(number, tick);
1167
+ })
1168
+ };
1169
+ //# sourceMappingURL=index.js.map