@ch20026103/anysis 0.0.2 → 0.0.5-alpha

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 (72) hide show
  1. package/dist/cjs/analyze/Month/index.d.ts +1 -1
  2. package/dist/cjs/analyze/Month/index.test.d.ts +1 -0
  3. package/dist/cjs/analyze/Month/index.test.js +22 -0
  4. package/dist/cjs/analyze/Regression/simpleRegressoinModel.d.ts +1 -1
  5. package/dist/cjs/analyze/Slope/index.d.ts +1 -0
  6. package/dist/cjs/analyze/Slope/index.js +13 -0
  7. package/dist/cjs/analyze/Slope/slope.test.d.ts +1 -0
  8. package/dist/cjs/analyze/Slope/slope.test.js +35 -0
  9. package/dist/cjs/analyze/TimeSeries/R/index.d.ts +1 -1
  10. package/dist/cjs/index.d.ts +9 -5
  11. package/dist/cjs/index.js +23 -15
  12. package/dist/cjs/stockSkills/ema.d.ts +9 -0
  13. package/dist/cjs/stockSkills/ema.js +41 -0
  14. package/dist/cjs/stockSkills/ema.test.d.ts +1 -0
  15. package/dist/cjs/stockSkills/ema.test.js +11 -0
  16. package/dist/cjs/stockSkills/gold.d.ts +4 -4
  17. package/dist/cjs/stockSkills/kd.d.ts +78 -0
  18. package/dist/cjs/stockSkills/kd.js +125 -0
  19. package/dist/cjs/stockSkills/kd.test.d.ts +1 -0
  20. package/dist/cjs/stockSkills/kd.test.js +65 -0
  21. package/dist/cjs/stockSkills/ma.d.ts +49 -7
  22. package/dist/cjs/stockSkills/ma.js +69 -1
  23. package/dist/cjs/stockSkills/ma.test.js +41 -4
  24. package/dist/cjs/stockSkills/macd.d.ts +52 -6
  25. package/dist/cjs/stockSkills/macd.js +87 -0
  26. package/dist/cjs/stockSkills/macd.test.js +24 -0
  27. package/dist/cjs/stockSkills/obv.d.ts +44 -0
  28. package/dist/cjs/stockSkills/obv.js +89 -0
  29. package/dist/cjs/stockSkills/obv.test.d.ts +1 -0
  30. package/dist/cjs/stockSkills/obv.test.js +20 -0
  31. package/dist/cjs/stockSkills/rsi.d.ts +4 -4
  32. package/dist/cjs/stockSkills/test_data.test.d.ts +8 -0
  33. package/dist/cjs/stockSkills/test_data.test.js +626 -0
  34. package/dist/cjs/stockSkills/utils/getWeekLine.d.ts +2 -2
  35. package/dist/cjs/stockSkills/williams.d.ts +4 -4
  36. package/dist/esm/analyze/Month/index.d.ts +1 -1
  37. package/dist/esm/analyze/Month/index.test.d.ts +1 -0
  38. package/dist/esm/analyze/Month/index.test.js +20 -0
  39. package/dist/esm/analyze/Regression/simpleRegressoinModel.d.ts +1 -1
  40. package/dist/esm/analyze/Slope/index.d.ts +1 -0
  41. package/dist/esm/analyze/Slope/index.js +10 -0
  42. package/dist/esm/analyze/Slope/slope.test.d.ts +1 -0
  43. package/dist/esm/analyze/Slope/slope.test.js +33 -0
  44. package/dist/esm/analyze/TimeSeries/R/index.d.ts +1 -1
  45. package/dist/esm/index.d.ts +9 -5
  46. package/dist/esm/index.js +9 -5
  47. package/dist/esm/stockSkills/ema.d.ts +9 -0
  48. package/dist/esm/stockSkills/ema.js +39 -0
  49. package/dist/esm/stockSkills/ema.test.d.ts +1 -0
  50. package/dist/esm/stockSkills/ema.test.js +9 -0
  51. package/dist/esm/stockSkills/gold.d.ts +4 -4
  52. package/dist/esm/stockSkills/kd.d.ts +78 -0
  53. package/dist/esm/stockSkills/kd.js +123 -0
  54. package/dist/esm/stockSkills/kd.test.d.ts +1 -0
  55. package/dist/esm/stockSkills/kd.test.js +63 -0
  56. package/dist/esm/stockSkills/ma.d.ts +49 -7
  57. package/dist/esm/stockSkills/ma.js +69 -1
  58. package/dist/esm/stockSkills/ma.test.js +41 -4
  59. package/dist/esm/stockSkills/macd.d.ts +52 -6
  60. package/dist/esm/stockSkills/macd.js +87 -0
  61. package/dist/esm/stockSkills/macd.test.js +24 -0
  62. package/dist/esm/stockSkills/obv.d.ts +44 -0
  63. package/dist/esm/stockSkills/obv.js +87 -0
  64. package/dist/esm/stockSkills/obv.test.d.ts +1 -0
  65. package/dist/esm/stockSkills/obv.test.js +18 -0
  66. package/dist/esm/stockSkills/rsi.d.ts +4 -4
  67. package/dist/esm/stockSkills/test_data.test.d.ts +8 -0
  68. package/dist/esm/stockSkills/test_data.test.js +625 -0
  69. package/dist/esm/stockSkills/utils/getWeekLine.d.ts +2 -2
  70. package/dist/esm/stockSkills/williams.d.ts +4 -4
  71. package/dist/umd/index.js +901 -482
  72. package/package.json +15 -17
package/dist/umd/index.js CHANGED
@@ -81,6 +81,17 @@
81
81
  return response;
82
82
  }
83
83
 
84
+ function Slope(x, y) {
85
+ // 計算 x 和 y 的平均值
86
+ var x_mean = x.reduce(function (acc, cur) { return acc + cur; }) / x.length;
87
+ var y_mean = y.reduce(function (acc, cur) { return acc + cur; }) / y.length;
88
+ // 計算斜率
89
+ var numerator = x.reduce(function (acc, cur, i) { return acc + (cur - x_mean) * (y[i] - y_mean); }, 0);
90
+ var denominator = x.reduce(function (acc, cur) { return acc + Math.pow((cur - x_mean), 2); }, 0);
91
+ var slope = numerator / denominator;
92
+ return slope;
93
+ }
94
+
84
95
  function movingAverages(arr, periods) {
85
96
  var response = new Array(periods).fill(0);
86
97
  for (var i = periods; i < arr.length; i++) {
@@ -163,16 +174,8 @@
163
174
  return nextYearForecast;
164
175
  }
165
176
 
166
- function add(a, b) {
167
- return a + b;
168
- }
169
-
170
- function minus(a, b) {
171
- return a - b;
172
- }
173
-
174
- var __assign$4 = (undefined && undefined.__assign) || function () {
175
- __assign$4 = Object.assign || function(t) {
177
+ var __assign$6 = (undefined && undefined.__assign) || function () {
178
+ __assign$6 = Object.assign || function(t) {
176
179
  for (var s, i = 1, n = arguments.length; i < n; i++) {
177
180
  s = arguments[i];
178
181
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
@@ -180,130 +183,607 @@
180
183
  }
181
184
  return t;
182
185
  };
183
- return __assign$4.apply(this, arguments);
186
+ return __assign$6.apply(this, arguments);
184
187
  };
185
- var Ma = /** @class */ (function () {
186
- function Ma() {
187
- }
188
- Object.defineProperty(Ma.prototype, "getAllMa", {
189
- enumerable: false,
190
- configurable: true,
191
- writable: true,
192
- value: function (list) {
193
- var res = [];
194
- var responseMa5 = this.getMa5(list);
195
- var responseMa10 = this.getMa10(list);
196
- var responseMa20 = this.getMa20(list);
197
- var responseBoll = this.getBoll(list);
198
- for (var i = 0; i < list.length; i++) {
199
- res[i] = Object.assign(list[i], responseMa5[i], responseMa10[i], responseMa20[i], responseBoll[i]);
188
+ function addDetail(obj, list, detail) {
189
+ if (detail)
190
+ return __assign$6(__assign$6({}, obj), { detail: list });
191
+ else
192
+ return __assign$6({}, obj);
193
+ }
194
+ function getWeekLine(list, detail) {
195
+ var res = [];
196
+ var collectWeekData = [];
197
+ list.forEach(function (item, index) {
198
+ var year = item["t"]
199
+ .toString()
200
+ .replace(/^(\d{4})(\d{2})(\d{2})$/, "$1-$2-$3");
201
+ var day = new Date(year).getDay();
202
+ switch (day) {
203
+ case 6:
204
+ break;
205
+ case 5: {
206
+ collectWeekData.push(item);
207
+ var obj = {
208
+ o: collectWeekData[0]["o"],
209
+ c: collectWeekData[collectWeekData.length - 1]["c"],
210
+ t: collectWeekData[collectWeekData.length - 1]["t"],
211
+ h: Math.max.apply(Math, collectWeekData.map(function (item) { return item.h; })),
212
+ l: Math.min.apply(Math, collectWeekData.map(function (item) { return item.l; })),
213
+ };
214
+ res.push(addDetail(obj, collectWeekData, detail));
215
+ collectWeekData = [];
216
+ break;
200
217
  }
201
- return res;
202
- }
203
- });
204
- Object.defineProperty(Ma.prototype, "getMa5", {
205
- enumerable: false,
206
- configurable: true,
207
- writable: true,
208
- value: function (list) {
209
- var res = [];
210
- for (var i = 0; i < list.length; i++) {
211
- if (i < 4)
212
- res[i] = __assign$4(__assign$4({}, list[i]), { ma5: undefined });
213
- else {
214
- var sum = list
215
- .slice(i - 4, i + 1)
216
- .reduce(function (pre, current) { return pre + current.c; }, 0);
217
- var ma5 = Math.round((sum / 5) * 100) / 100;
218
- res[i] = __assign$4(__assign$4({}, list[i]), { ma5: ma5 });
218
+ case 1:
219
+ if (collectWeekData.length !== 0) {
220
+ var obj = {
221
+ o: collectWeekData[0]["o"],
222
+ c: collectWeekData[collectWeekData.length - 1]["c"],
223
+ t: collectWeekData[collectWeekData.length - 1]["t"],
224
+ h: Math.max.apply(Math, collectWeekData.map(function (item) { return item.h; })),
225
+ l: Math.min.apply(Math, collectWeekData.map(function (item) { return item.l; })),
226
+ };
227
+ res.push(addDetail(obj, collectWeekData, detail));
219
228
  }
220
- }
221
- return res;
222
- }
223
- });
224
- Object.defineProperty(Ma.prototype, "getMa10", {
225
- enumerable: false,
226
- configurable: true,
227
- writable: true,
228
- value: function (list) {
229
- var res = [];
230
- for (var i = 0; i < list.length; i++) {
231
- if (i < 9)
232
- res[i] = __assign$4(__assign$4({}, list[i]), { ma10: undefined });
233
- else {
234
- var sum = list
235
- .slice(i - 9, i + 1)
236
- .reduce(function (pre, current) { return pre + current.c; }, 0);
237
- var ma10 = Math.round((sum / 10) * 100) / 100;
238
- res[i] = __assign$4(__assign$4({}, list[i]), { ma10: ma10 });
229
+ collectWeekData = [];
230
+ collectWeekData.push(item);
231
+ break;
232
+ default:
233
+ collectWeekData.push(item);
234
+ if (list.length - 1 === index) {
235
+ var obj = {
236
+ o: collectWeekData[0]["o"],
237
+ c: collectWeekData[collectWeekData.length - 1]["c"],
238
+ t: collectWeekData[collectWeekData.length - 1]["t"],
239
+ h: Math.max.apply(Math, collectWeekData.map(function (item) { return item.h; })),
240
+ l: Math.min.apply(Math, collectWeekData.map(function (item) { return item.l; })),
241
+ };
242
+ res.push(addDetail(obj, collectWeekData, detail));
239
243
  }
240
- }
241
- return res;
244
+ break;
242
245
  }
243
246
  });
244
- Object.defineProperty(Ma.prototype, "getMa20", {
247
+ return res;
248
+ }
249
+
250
+ var Gold = /** @class */ (function () {
251
+ function Gold() {
252
+ }
253
+ Object.defineProperty(Gold.prototype, "findHighPoint", {
245
254
  enumerable: false,
246
255
  configurable: true,
247
256
  writable: true,
248
257
  value: function (list) {
249
- var res = [];
250
- for (var i = 0; i < list.length; i++) {
251
- if (i < 19)
252
- res[i] = __assign$4(__assign$4({}, list[i]), { ma20: undefined });
253
- else {
254
- var sum = list
255
- .slice(i - 19, i + 1)
256
- .reduce(function (pre, current) { return pre + current.c; }, 0);
257
- var ma20 = Math.round((sum / 20) * 100) / 100;
258
- res[i] = __assign$4(__assign$4({}, list[i]), { ma20: ma20 });
258
+ var weekLine = getWeekLine(list, true);
259
+ var hightPoints = {};
260
+ var _loop_1 = function (i) {
261
+ var hightPoint = undefined;
262
+ switch (i) {
263
+ case 0:
264
+ {
265
+ var h1 = weekLine[i].h;
266
+ var h2 = weekLine[i + 1].h;
267
+ var h3 = weekLine[i + 2].h;
268
+ if (h1 > h2 && h1 > h3)
269
+ hightPoint = weekLine[i];
270
+ }
271
+ break;
272
+ case 1:
273
+ {
274
+ var h1 = weekLine[i - 1].h;
275
+ var h2 = weekLine[i].h;
276
+ var h3 = weekLine[i + 1].h;
277
+ var h4 = weekLine[i + 2].h;
278
+ if (h2 > h1 && h2 > h3 && h2 > h4)
279
+ hightPoint = weekLine[i];
280
+ }
281
+ break;
282
+ case weekLine.length - 3:
283
+ {
284
+ var h1 = weekLine[i - 2].h;
285
+ var h2 = weekLine[i - 1].h;
286
+ var h3 = weekLine[i].h;
287
+ var h4 = weekLine[i + 1].h;
288
+ var h5 = weekLine[i + 2].h;
289
+ if (h3 > h1 && h3 > h2 && h3 > h4 && h3 > h5)
290
+ hightPoint = weekLine[i];
291
+ }
292
+ break;
293
+ case weekLine.length - 2:
294
+ {
295
+ var h1 = weekLine[i - 2].h;
296
+ var h2 = weekLine[i - 1].h;
297
+ var h3 = weekLine[i].h;
298
+ var h4 = weekLine[i + 1].h;
299
+ if (h3 > h1 && h3 > h2 && h3 > h4)
300
+ hightPoint = weekLine[i];
301
+ }
302
+ break;
303
+ case weekLine.length - 1:
304
+ {
305
+ var h1 = weekLine[i - 2].h;
306
+ var h2 = weekLine[i - 1].h;
307
+ var h3 = weekLine[i].h;
308
+ if (h3 > h2 && h3 > h1)
309
+ hightPoint = weekLine[i];
310
+ }
311
+ break;
312
+ default:
313
+ {
314
+ var h1 = weekLine[i - 2].h;
315
+ var h2 = weekLine[i - 1].h;
316
+ var h3 = weekLine[i].h;
317
+ var h4 = weekLine[i + 1].h;
318
+ var h5 = weekLine[i + 2].h;
319
+ var h6 = weekLine[i + 3].h;
320
+ if (h3 > h2 && h3 > h4 && h3 > h5 && h3 > h6)
321
+ hightPoint = weekLine[i];
322
+ if (h3 > h1 && h3 > h2 && h3 > h4 && h3 > h5)
323
+ hightPoint = weekLine[i];
324
+ }
325
+ break;
326
+ }
327
+ if (hightPoint && hightPoint["detail"]) {
328
+ var h_1 = hightPoint.h;
329
+ var theHight = hightPoint.detail.find(function (item) { return item.h === h_1; });
330
+ delete hightPoint.detail;
331
+ if (theHight)
332
+ hightPoints[theHight === null || theHight === void 0 ? void 0 : theHight.t] = theHight;
259
333
  }
334
+ };
335
+ for (var i = 0; i < weekLine.length; i++) {
336
+ _loop_1(i);
260
337
  }
261
- return res;
338
+ return hightPoints;
262
339
  }
263
340
  });
264
- Object.defineProperty(Ma.prototype, "getBoll", {
341
+ Object.defineProperty(Gold.prototype, "findLowPoint", {
265
342
  enumerable: false,
266
343
  configurable: true,
267
344
  writable: true,
268
345
  value: function (list) {
269
- var res = [];
270
- var _loop_1 = function (i) {
271
- if (i < 24)
272
- res[i] = __assign$4(__assign$4({}, list[i]), { ma25: undefined, bollUb: undefined, bollLb: undefined });
273
- else {
274
- // ma25
275
- var sumMa25 = list
276
- .slice(i - 24, i + 1)
277
- .reduce(function (pre, current) { return pre + current.c; }, 0);
278
- var ma25_1 = Math.round((sumMa25 / 25) * 100) / 100;
279
- // 標準差
280
- var sumBase = res
281
- .slice(i - 24, i + 1)
282
- .reduce(function (pre, current) {
283
- return ma25_1 !== undefined
284
- ? pre + Math.pow(current.c - ma25_1, 2)
285
- : pre;
286
- }, 0);
287
- var base = Math.round(Math.sqrt(sumBase / 25) * 100) / 100;
288
- res[i] = __assign$4(__assign$4({}, list[i]), { ma25: ma25_1, bollUb: ma25_1 + 2 * base, bollLb: ma25_1 - 2 * base });
289
- }
290
- };
291
- for (var i = 0; i < list.length; i++) {
292
- _loop_1(i);
293
- }
294
- return res;
295
- }
296
- });
297
- return Ma;
298
- }());
299
-
300
- var __assign$3 = (undefined && undefined.__assign) || function () {
301
- __assign$3 = Object.assign || function(t) {
302
- for (var s, i = 1, n = arguments.length; i < n; i++) {
303
- s = arguments[i];
304
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
305
- t[p] = s[p];
306
- }
346
+ var weekLine = getWeekLine(list, true);
347
+ var lowPoints = {};
348
+ var _loop_2 = function (i) {
349
+ var lowPoint = undefined;
350
+ switch (i) {
351
+ case 0:
352
+ {
353
+ var l1 = weekLine[i].l;
354
+ var l2 = weekLine[i + 1].l;
355
+ var l3 = weekLine[i + 2].l;
356
+ if (l1 < l2 && l1 < l3)
357
+ lowPoint = weekLine[i];
358
+ }
359
+ break;
360
+ case 1:
361
+ {
362
+ var l1 = weekLine[i - 1].l;
363
+ var l2 = weekLine[i].l;
364
+ var l3 = weekLine[i + 1].l;
365
+ var l4 = weekLine[i + 2].l;
366
+ if (l2 < l1 && l2 < l3 && l2 < l4)
367
+ lowPoint = weekLine[i];
368
+ }
369
+ break;
370
+ case weekLine.length - 3:
371
+ {
372
+ var l1 = weekLine[i - 2].l;
373
+ var l2 = weekLine[i - 1].l;
374
+ var l3 = weekLine[i].l;
375
+ var l4 = weekLine[i + 1].l;
376
+ var l5 = weekLine[i + 2].l;
377
+ if (l3 < l1 && l3 < l2 && l3 < l4 && l3 < l5)
378
+ lowPoint = weekLine[i];
379
+ }
380
+ break;
381
+ case weekLine.length - 2:
382
+ {
383
+ var l1 = weekLine[i - 2].l;
384
+ var l2 = weekLine[i - 1].l;
385
+ var l3 = weekLine[i].l;
386
+ var l4 = weekLine[i + 1].l;
387
+ if (l3 < l1 && l3 < l2 && l3 < l4)
388
+ lowPoint = weekLine[i];
389
+ }
390
+ break;
391
+ case weekLine.length - 1:
392
+ {
393
+ var l1 = weekLine[i - 2].l;
394
+ var l2 = weekLine[i - 1].l;
395
+ var l3 = weekLine[i].l;
396
+ if (l3 < l2 && l3 < l1)
397
+ lowPoint = weekLine[i];
398
+ }
399
+ break;
400
+ default:
401
+ {
402
+ var l1 = weekLine[i - 2].l;
403
+ var l2 = weekLine[i - 1].l;
404
+ var l3 = weekLine[i].l;
405
+ var l4 = weekLine[i + 1].l;
406
+ var l5 = weekLine[i + 2].l;
407
+ var l6 = weekLine[i + 3].l;
408
+ if (l3 < l2 && l3 < l4 && l3 < l5 && l3 < l6)
409
+ lowPoint = weekLine[i];
410
+ if (l3 < l1 && l3 < l2 && l3 < l4 && l3 < l5)
411
+ lowPoint = weekLine[i];
412
+ }
413
+ break;
414
+ }
415
+ if (lowPoint && lowPoint["detail"]) {
416
+ var l_1 = lowPoint.l;
417
+ var theLow = lowPoint.detail.find(function (item) { return item.l === l_1; });
418
+ delete lowPoint.detail;
419
+ if (theLow)
420
+ lowPoints[theLow === null || theLow === void 0 ? void 0 : theLow.t] = theLow;
421
+ }
422
+ };
423
+ for (var i = 0; i < weekLine.length; i++) {
424
+ _loop_2(i);
425
+ }
426
+ return lowPoints;
427
+ }
428
+ });
429
+ Object.defineProperty(Gold.prototype, "getGold", {
430
+ enumerable: false,
431
+ configurable: true,
432
+ writable: true,
433
+ value: function (list) {
434
+ var hightPoints = this.findHighPoint(list);
435
+ var lowPoints = this.findLowPoint(list);
436
+ var lastHightPointDate = Object.keys(hightPoints).slice(-1)[0] !==
437
+ list[list.length - 1].t.toString()
438
+ ? Object.keys(hightPoints).slice(-1)[0]
439
+ : Object.keys(hightPoints).slice(-2)[0];
440
+ var lastLowPointDate = Object.keys(lowPoints).slice(-1)[0] !== list[list.length - 1].t.toString()
441
+ ? Object.keys(lowPoints).slice(-1)[0]
442
+ : Object.keys(lowPoints).slice(-2)[0];
443
+ var highestPoint = hightPoints[lastHightPointDate].h;
444
+ var lowestPoint = lowPoints[lastLowPointDate].l;
445
+ var res = {
446
+ highestPointDate: parseInt(lastHightPointDate),
447
+ lowestPointDate: parseInt(lastLowPointDate),
448
+ lowestPoint: lowestPoint,
449
+ highestPoint: highestPoint,
450
+ superStrong: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.191) * 100) / 100,
451
+ strong: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.382) * 100) / 100,
452
+ middle: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.5) * 100) /
453
+ 100,
454
+ weak: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.618) * 100) / 100,
455
+ superWeak: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.809) * 100) / 100,
456
+ };
457
+ return res;
458
+ }
459
+ });
460
+ return Gold;
461
+ }());
462
+
463
+ var __assign$5 = (undefined && undefined.__assign) || function () {
464
+ __assign$5 = Object.assign || function(t) {
465
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
466
+ s = arguments[i];
467
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
468
+ t[p] = s[p];
469
+ }
470
+ return t;
471
+ };
472
+ return __assign$5.apply(this, arguments);
473
+ };
474
+ var Kd = /** @class */ (function () {
475
+ function Kd() {
476
+ }
477
+ Object.defineProperty(Kd.prototype, "init", {
478
+ enumerable: false,
479
+ configurable: true,
480
+ writable: true,
481
+ value: function (data) {
482
+ return {
483
+ dataset: [data],
484
+ rsv: undefined,
485
+ k: undefined,
486
+ d: undefined,
487
+ "k-d": undefined,
488
+ };
489
+ }
490
+ });
491
+ Object.defineProperty(Kd.prototype, "next", {
492
+ enumerable: false,
493
+ configurable: true,
494
+ writable: true,
495
+ value: function (data, preList, type) {
496
+ preList.dataset.push(data);
497
+ if (preList.dataset.length < type) {
498
+ return {
499
+ dataset: preList.dataset,
500
+ rsv: undefined,
501
+ k: undefined,
502
+ d: undefined,
503
+ "k-d": undefined,
504
+ };
505
+ }
506
+ else {
507
+ if (preList.dataset.length > type) {
508
+ preList.dataset.shift();
509
+ }
510
+ var low = Math.min.apply(Math, preList.dataset.map(function (item) { return item.l; }));
511
+ var hight = Math.max.apply(Math, preList.dataset.map(function (item) { return item.h; }));
512
+ var close_1 = data.c;
513
+ var rsv = ((close_1 - low) / (hight - low)) * 100;
514
+ rsv = Math.round(rsv * 100) / 100;
515
+ var k = (2 / 3) * (preList.k ? preList.k : 50) + (1 / 3) * rsv;
516
+ var d = (2 / 3) * (preList.d ? preList.d : 50) + (1 / 3) * k;
517
+ var k_d = k - d;
518
+ k = Math.round(k * 100) / 100;
519
+ d = Math.round(d * 100) / 100;
520
+ k_d = Math.round(k_d * 100) / 100;
521
+ return {
522
+ dataset: preList.dataset,
523
+ rsv: rsv,
524
+ k: k,
525
+ d: d,
526
+ "k-d": k_d,
527
+ };
528
+ }
529
+ }
530
+ });
531
+ Object.defineProperty(Kd.prototype, "getRSV", {
532
+ enumerable: false,
533
+ configurable: true,
534
+ writable: true,
535
+ value: function (list) {
536
+ var res = [];
537
+ for (var i = 0; i < list.length; i++) {
538
+ if (i < 8)
539
+ res[i] = __assign$5(__assign$5({}, list[i]), { rsv: undefined });
540
+ else {
541
+ var low = Math.min.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.l; }));
542
+ var hight = Math.max.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.h; }));
543
+ var close_2 = list[i].c;
544
+ var rsv = ((close_2 - low) / (hight - low)) * 100;
545
+ rsv = Math.round(rsv * 100) / 100;
546
+ res[i] = __assign$5(__assign$5({}, list[i]), { rsv: rsv });
547
+ }
548
+ }
549
+ return res;
550
+ }
551
+ });
552
+ Object.defineProperty(Kd.prototype, "getKD", {
553
+ enumerable: false,
554
+ configurable: true,
555
+ writable: true,
556
+ value: function (list) {
557
+ var res = [];
558
+ var yesterdayK = 50;
559
+ var yesterdayD = 50;
560
+ for (var i = 0; i < list.length; i++) {
561
+ if (i < 8)
562
+ res[i] = __assign$5(__assign$5({}, list[i]), { rsv: undefined, k: undefined, d: undefined, "k-d": undefined });
563
+ else {
564
+ var low = Math.min.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.l; }));
565
+ var hight = Math.max.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.h; }));
566
+ var close_3 = list[i].c;
567
+ var rsv = ((close_3 - low) / (hight - low)) * 100;
568
+ rsv = Math.round(rsv * 100) / 100;
569
+ var k = (2 / 3) * yesterdayK + (1 / 3) * rsv;
570
+ var d = (2 / 3) * yesterdayD + (1 / 3) * k;
571
+ var k_d = k - d;
572
+ k = Math.round(k * 100) / 100;
573
+ d = Math.round(d * 100) / 100;
574
+ k_d = Math.round(k_d * 100) / 100;
575
+ res[i] = __assign$5(__assign$5({}, list[i]), { rsv: rsv, k: k, d: d, "k-d": k_d });
576
+ yesterdayK = k;
577
+ yesterdayD = d;
578
+ }
579
+ }
580
+ return res;
581
+ }
582
+ });
583
+ return Kd;
584
+ }());
585
+
586
+ var __assign$4 = (undefined && undefined.__assign) || function () {
587
+ __assign$4 = Object.assign || function(t) {
588
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
589
+ s = arguments[i];
590
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
591
+ t[p] = s[p];
592
+ }
593
+ return t;
594
+ };
595
+ return __assign$4.apply(this, arguments);
596
+ };
597
+ var Ma = /** @class */ (function () {
598
+ function Ma() {
599
+ }
600
+ Object.defineProperty(Ma.prototype, "init", {
601
+ enumerable: false,
602
+ configurable: true,
603
+ writable: true,
604
+ value: function (data, type) {
605
+ return { dataset: [data], ma: 0, type: type };
606
+ }
607
+ });
608
+ Object.defineProperty(Ma.prototype, "next", {
609
+ enumerable: false,
610
+ configurable: true,
611
+ writable: true,
612
+ value: function (data, preList, type) {
613
+ preList.dataset.push(data);
614
+ if (preList.dataset.length < type) {
615
+ return { dataset: preList.dataset, ma: 0, type: type };
616
+ }
617
+ else {
618
+ if (preList.dataset.length > type) {
619
+ preList.dataset.shift();
620
+ }
621
+ var sum = preList.dataset.reduce(function (pre, current) { return pre + current.c; }, 0);
622
+ var ma = Math.round((sum / type) * 100) / 100;
623
+ return { dataset: preList.dataset, ma: ma, type: type };
624
+ }
625
+ }
626
+ });
627
+ Object.defineProperty(Ma.prototype, "getAllMa", {
628
+ enumerable: false,
629
+ configurable: true,
630
+ writable: true,
631
+ value: function (list) {
632
+ var res = [];
633
+ var responseMa5 = this.getMa5(list);
634
+ var responseMa10 = this.getMa10(list);
635
+ var responseMa20 = this.getMa20(list);
636
+ var responseMa60 = this.getMa60(list);
637
+ var responseBoll = this.getBoll(list);
638
+ for (var i = 0; i < list.length; i++) {
639
+ res[i] = Object.assign(list[i], responseMa5[i], responseMa10[i], responseMa20[i], responseMa60[i], responseBoll[i]);
640
+ }
641
+ return res;
642
+ }
643
+ });
644
+ Object.defineProperty(Ma.prototype, "getMa5", {
645
+ enumerable: false,
646
+ configurable: true,
647
+ writable: true,
648
+ value: function (list) {
649
+ var res = [];
650
+ for (var i = 0; i < list.length; i++) {
651
+ if (i < 4)
652
+ res[i] = __assign$4(__assign$4({}, list[i]), { ma5: undefined });
653
+ else {
654
+ var sum = list
655
+ .slice(i - 4, i + 1)
656
+ .reduce(function (pre, current) { return pre + current.c; }, 0);
657
+ var ma5 = Math.round((sum / 5) * 100) / 100;
658
+ res[i] = __assign$4(__assign$4({}, list[i]), { ma5: ma5 });
659
+ }
660
+ }
661
+ return res;
662
+ }
663
+ });
664
+ Object.defineProperty(Ma.prototype, "getMa10", {
665
+ enumerable: false,
666
+ configurable: true,
667
+ writable: true,
668
+ value: function (list) {
669
+ var res = [];
670
+ for (var i = 0; i < list.length; i++) {
671
+ if (i < 9)
672
+ res[i] = __assign$4(__assign$4({}, list[i]), { ma10: undefined });
673
+ else {
674
+ var sum = list
675
+ .slice(i - 9, i + 1)
676
+ .reduce(function (pre, current) { return pre + current.c; }, 0);
677
+ var ma10 = Math.round((sum / 10) * 100) / 100;
678
+ res[i] = __assign$4(__assign$4({}, list[i]), { ma10: ma10 });
679
+ }
680
+ }
681
+ return res;
682
+ }
683
+ });
684
+ Object.defineProperty(Ma.prototype, "getMa20", {
685
+ enumerable: false,
686
+ configurable: true,
687
+ writable: true,
688
+ value: function (list) {
689
+ var res = [];
690
+ for (var i = 0; i < list.length; i++) {
691
+ if (i < 19)
692
+ res[i] = __assign$4(__assign$4({}, list[i]), { ma20: undefined });
693
+ else {
694
+ var sum = list
695
+ .slice(i - 19, i + 1)
696
+ .reduce(function (pre, current) { return pre + current.c; }, 0);
697
+ var ma20 = Math.round((sum / 20) * 100) / 100;
698
+ res[i] = __assign$4(__assign$4({}, list[i]), { ma20: ma20 });
699
+ }
700
+ }
701
+ return res;
702
+ }
703
+ });
704
+ Object.defineProperty(Ma.prototype, "getMa60", {
705
+ enumerable: false,
706
+ configurable: true,
707
+ writable: true,
708
+ value: function (list) {
709
+ var res = [];
710
+ for (var i = 0; i < list.length; i++) {
711
+ if (i < 59)
712
+ res[i] = __assign$4(__assign$4({}, list[i]), { ma60: undefined });
713
+ else {
714
+ var sum = list
715
+ .slice(i - 59, i + 1)
716
+ .reduce(function (pre, current) { return pre + current.c; }, 0);
717
+ var ma60 = Math.round((sum / 60) * 100) / 100;
718
+ res[i] = __assign$4(__assign$4({}, list[i]), { ma60: ma60 });
719
+ }
720
+ }
721
+ return res;
722
+ }
723
+ });
724
+ Object.defineProperty(Ma.prototype, "getMaSelf", {
725
+ enumerable: false,
726
+ configurable: true,
727
+ writable: true,
728
+ value: function (list, self) {
729
+ var res = [];
730
+ for (var i = 0; i < list.length; i++) {
731
+ if (i < self - 1)
732
+ res[i] = __assign$4(__assign$4({}, list[i]), { maSelf: undefined });
733
+ else {
734
+ var sum = list
735
+ .slice(i - (self - 1), i + 1)
736
+ .reduce(function (pre, current) { return pre + current.c; }, 0);
737
+ var maSelf = Math.round((sum / self) * 100) / 100;
738
+ res[i] = __assign$4(__assign$4({}, list[i]), { maSelf: maSelf });
739
+ }
740
+ }
741
+ return res;
742
+ }
743
+ });
744
+ Object.defineProperty(Ma.prototype, "getBoll", {
745
+ enumerable: false,
746
+ configurable: true,
747
+ writable: true,
748
+ value: function (list) {
749
+ var res = [];
750
+ var _loop_1 = function (i) {
751
+ if (i < 24)
752
+ res[i] = __assign$4(__assign$4({}, list[i]), { ma25: undefined, bollUb: undefined, bollLb: undefined });
753
+ else {
754
+ // ma25
755
+ var sumMa25 = list
756
+ .slice(i - 24, i + 1)
757
+ .reduce(function (pre, current) { return pre + current.c; }, 0);
758
+ var ma25_1 = Math.round((sumMa25 / 25) * 100) / 100;
759
+ // 標準差
760
+ var sumBase = res
761
+ .slice(i - 24, i + 1)
762
+ .reduce(function (pre, current) {
763
+ return ma25_1 !== undefined
764
+ ? pre + Math.pow(current.c - ma25_1, 2)
765
+ : pre;
766
+ }, 0);
767
+ var base = Math.round(Math.sqrt(sumBase / 25) * 100) / 100;
768
+ res[i] = __assign$4(__assign$4({}, list[i]), { ma25: ma25_1, bollUb: ma25_1 + 2 * base, bollLb: ma25_1 - 2 * base });
769
+ }
770
+ };
771
+ for (var i = 0; i < list.length; i++) {
772
+ _loop_1(i);
773
+ }
774
+ return res;
775
+ }
776
+ });
777
+ return Ma;
778
+ }());
779
+
780
+ var __assign$3 = (undefined && undefined.__assign) || function () {
781
+ __assign$3 = Object.assign || function(t) {
782
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
783
+ s = arguments[i];
784
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
785
+ t[p] = s[p];
786
+ }
307
787
  return t;
308
788
  };
309
789
  return __assign$3.apply(this, arguments);
@@ -311,6 +791,93 @@
311
791
  var MACD = /** @class */ (function () {
312
792
  function MACD() {
313
793
  }
794
+ Object.defineProperty(MACD.prototype, "init", {
795
+ enumerable: false,
796
+ configurable: true,
797
+ writable: true,
798
+ value: function (data) {
799
+ return {
800
+ dataset: [data],
801
+ ema12: undefined,
802
+ ema26: undefined,
803
+ dif: [],
804
+ macd: undefined,
805
+ osc: undefined,
806
+ };
807
+ }
808
+ });
809
+ Object.defineProperty(MACD.prototype, "next", {
810
+ enumerable: false,
811
+ configurable: true,
812
+ writable: true,
813
+ value: function (data, preList) {
814
+ var _a, _b;
815
+ preList.dataset.push(data);
816
+ if (preList.dataset.length > 34)
817
+ preList.dataset.shift();
818
+ // EMA12
819
+ var ema12 = undefined;
820
+ if (preList.dataset.length === 12) {
821
+ ema12 = this.getStartEMA(preList.dataset);
822
+ ema12 = (ema12 * 11) / 13 + (this.getDI(data) * 2) / 13;
823
+ ema12 = Math.round(ema12 * 100) / 100;
824
+ }
825
+ else if (preList.dataset.length > 12 && preList.ema12) {
826
+ ema12 = (preList.ema12 * 11) / 13 + (this.getDI(data) * 2) / 13;
827
+ ema12 = Math.round(ema12 * 100) / 100;
828
+ }
829
+ // EMA26
830
+ var ema26 = undefined;
831
+ if (preList.dataset.length === 26) {
832
+ ema26 = this.getStartEMA(preList.dataset);
833
+ ema26 = (ema26 * 25) / 27 + (this.getDI(data) * 2) / 27;
834
+ ema26 = Math.round(ema26 * 100) / 100;
835
+ }
836
+ else if (preList.dataset.length > 26 && preList.ema26) {
837
+ ema26 = (preList.ema26 * 25) / 27 + (this.getDI(data) * 2) / 27;
838
+ ema26 = Math.round(ema26 * 100) / 100;
839
+ }
840
+ // DIF
841
+ var dif = undefined;
842
+ if (ema12 && ema26) {
843
+ dif = ema12 - ema26;
844
+ dif = Math.round(dif * 100) / 100;
845
+ (_a = preList.dif) === null || _a === void 0 ? void 0 : _a.push(dif);
846
+ if (preList.dif.length > 9)
847
+ (_b = preList.dif) === null || _b === void 0 ? void 0 : _b.shift();
848
+ }
849
+ // MACD & OSC
850
+ var macd = undefined;
851
+ var osc = undefined;
852
+ if (preList.dif.length === 9) {
853
+ if (preList.macd === undefined) {
854
+ macd = preList.dif.reduce(function (accumulator, currentValue) { return accumulator + currentValue; });
855
+ for (var i = 0; i < 9; i++) {
856
+ var item = preList.dif[i];
857
+ macd = macd + ((item - macd) * 2) / 10;
858
+ macd = Math.round(macd * 100) / 100;
859
+ osc = item - macd;
860
+ osc = Math.round(osc * 100) / 100;
861
+ }
862
+ }
863
+ else {
864
+ macd = preList.macd + ((dif - preList.macd) * 2) / 10;
865
+ macd = Math.round(macd * 100) / 100;
866
+ var item = preList.dif[preList.dif.length - 1];
867
+ osc = item - macd;
868
+ osc = Math.round(osc * 100) / 100;
869
+ }
870
+ }
871
+ return {
872
+ dataset: preList.dataset,
873
+ ema12: ema12,
874
+ ema26: ema26,
875
+ dif: preList.dif,
876
+ macd: macd,
877
+ osc: osc,
878
+ };
879
+ }
880
+ });
314
881
  Object.defineProperty(MACD.prototype, "getMACD", {
315
882
  enumerable: false,
316
883
  configurable: true,
@@ -555,392 +1122,157 @@
555
1122
  enumerable: false,
556
1123
  configurable: true,
557
1124
  writable: true,
558
- value: function (list, count) {
559
- var start = list.slice(0, 5);
560
- var sum = 0;
561
- for (var i = 1; i < start.length; i++) {
562
- var minus = start[i]["c"] - start[i - 1]["c"];
563
- if (minus < 0) {
564
- sum += minus;
565
- }
566
- }
567
- return Math.abs(sum / count);
568
- }
569
- });
570
- Object.defineProperty(Rsi.prototype, "getRsi", {
571
- enumerable: false,
572
- configurable: true,
573
- writable: true,
574
- value: function (UpAvg, DownAvg) {
575
- var res = 0;
576
- if (UpAvg + DownAvg !== 0) {
577
- res = (UpAvg / (UpAvg + DownAvg)) * 100;
578
- }
579
- return res;
580
- }
581
- });
582
- return Rsi;
583
- }());
584
-
585
- var __assign$1 = (undefined && undefined.__assign) || function () {
586
- __assign$1 = Object.assign || function(t) {
587
- for (var s, i = 1, n = arguments.length; i < n; i++) {
588
- s = arguments[i];
589
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
590
- t[p] = s[p];
591
- }
592
- return t;
593
- };
594
- return __assign$1.apply(this, arguments);
595
- };
596
- var Williams = /** @class */ (function () {
597
- function Williams() {
598
- }
599
- Object.defineProperty(Williams.prototype, "getAllWillams", {
600
- enumerable: false,
601
- configurable: true,
602
- writable: true,
603
- value: function (list) {
604
- var res = [];
605
- var williams9 = this.getWilliams9(list);
606
- var williams18 = this.getWilliams18(list);
607
- for (var i = 0; i < list.length; i++) {
608
- res[i] = Object.assign(list[i], williams9[i], williams18[i]);
609
- }
610
- return res;
611
- }
612
- });
613
- Object.defineProperty(Williams.prototype, "getWilliams9", {
614
- enumerable: false,
615
- configurable: true,
616
- writable: true,
617
- value: function (list) {
618
- var res = [];
619
- for (var i = 0; i < list.length; i++) {
620
- if (i < 9)
621
- res[i] = __assign$1(__assign$1({}, list[i]), { williams9: undefined });
622
- else {
623
- var maxList = list.slice(i - 8, i).map(function (item) { return item["h"]; });
624
- var minList = list.slice(i - 8, i).map(function (item) { return item["l"]; });
625
- var max = Math.max.apply(Math, maxList);
626
- var min = Math.min.apply(Math, minList);
627
- var close_1 = list[i]["c"];
628
- var williams9 = ((max - close_1) / (max - min)) * -100;
629
- res[i] = __assign$1(__assign$1({}, list[i]), { williams9: Math.round(williams9 * 100) / 100 });
630
- }
631
- }
632
- return res;
633
- }
634
- });
635
- Object.defineProperty(Williams.prototype, "getWilliams18", {
636
- enumerable: false,
637
- configurable: true,
638
- writable: true,
639
- value: function (list) {
640
- var res = [];
641
- for (var i = 0; i < list.length; i++) {
642
- if (i < 18)
643
- res[i] = __assign$1(__assign$1({}, list[i]), { williams9: undefined });
644
- else {
645
- var maxList = list.slice(i - 17, i).map(function (item) { return item["h"]; });
646
- var minList = list.slice(i - 17, i).map(function (item) { return item["l"]; });
647
- var max = Math.max.apply(Math, maxList);
648
- var min = Math.min.apply(Math, minList);
649
- var close_2 = list[i]["c"];
650
- var williams18 = ((max - close_2) / (max - min)) * -100;
651
- res[i] = __assign$1(__assign$1({}, list[i]), { williams18: Math.round(williams18 * 100) / 100 });
652
- }
653
- }
654
- return res;
655
- }
656
- });
657
- return Williams;
658
- }());
659
-
660
- var __assign = (undefined && undefined.__assign) || function () {
661
- __assign = Object.assign || function(t) {
662
- for (var s, i = 1, n = arguments.length; i < n; i++) {
663
- s = arguments[i];
664
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
665
- t[p] = s[p];
666
- }
667
- return t;
668
- };
669
- return __assign.apply(this, arguments);
670
- };
671
- function addDetail(obj, list, detail) {
672
- if (detail)
673
- return __assign(__assign({}, obj), { detail: list });
674
- else
675
- return __assign({}, obj);
676
- }
677
- function getWeekLine(list, detail) {
678
- var res = [];
679
- var collectWeekData = [];
680
- list.forEach(function (item, index) {
681
- var year = item["t"]
682
- .toString()
683
- .replace(/^(\d{4})(\d{2})(\d{2})$/, "$1-$2-$3");
684
- var day = new Date(year).getDay();
685
- switch (day) {
686
- case 6:
687
- break;
688
- case 5: {
689
- collectWeekData.push(item);
690
- var obj = {
691
- o: collectWeekData[0]["o"],
692
- c: collectWeekData[collectWeekData.length - 1]["c"],
693
- t: collectWeekData[collectWeekData.length - 1]["t"],
694
- h: Math.max.apply(Math, collectWeekData.map(function (item) { return item.h; })),
695
- l: Math.min.apply(Math, collectWeekData.map(function (item) { return item.l; })),
696
- };
697
- res.push(addDetail(obj, collectWeekData, detail));
698
- collectWeekData = [];
699
- break;
700
- }
701
- case 1:
702
- if (collectWeekData.length !== 0) {
703
- var obj = {
704
- o: collectWeekData[0]["o"],
705
- c: collectWeekData[collectWeekData.length - 1]["c"],
706
- t: collectWeekData[collectWeekData.length - 1]["t"],
707
- h: Math.max.apply(Math, collectWeekData.map(function (item) { return item.h; })),
708
- l: Math.min.apply(Math, collectWeekData.map(function (item) { return item.l; })),
709
- };
710
- res.push(addDetail(obj, collectWeekData, detail));
711
- }
712
- collectWeekData = [];
713
- collectWeekData.push(item);
714
- break;
715
- default:
716
- collectWeekData.push(item);
717
- if (list.length - 1 === index) {
718
- var obj = {
719
- o: collectWeekData[0]["o"],
720
- c: collectWeekData[collectWeekData.length - 1]["c"],
721
- t: collectWeekData[collectWeekData.length - 1]["t"],
722
- h: Math.max.apply(Math, collectWeekData.map(function (item) { return item.h; })),
723
- l: Math.min.apply(Math, collectWeekData.map(function (item) { return item.l; })),
724
- };
725
- res.push(addDetail(obj, collectWeekData, detail));
726
- }
727
- break;
728
- }
729
- });
730
- return res;
731
- }
732
-
733
- var Gold = /** @class */ (function () {
734
- function Gold() {
735
- }
736
- Object.defineProperty(Gold.prototype, "findHighPoint", {
737
- enumerable: false,
738
- configurable: true,
739
- writable: true,
740
- value: function (list) {
741
- var weekLine = getWeekLine(list, true);
742
- var hightPoints = {};
743
- var _loop_1 = function (i) {
744
- var hightPoint = undefined;
745
- switch (i) {
746
- case 0:
747
- {
748
- var h1 = weekLine[i].h;
749
- var h2 = weekLine[i + 1].h;
750
- var h3 = weekLine[i + 2].h;
751
- if (h1 > h2 && h1 > h3)
752
- hightPoint = weekLine[i];
753
- }
754
- break;
755
- case 1:
756
- {
757
- var h1 = weekLine[i - 1].h;
758
- var h2 = weekLine[i].h;
759
- var h3 = weekLine[i + 1].h;
760
- var h4 = weekLine[i + 2].h;
761
- if (h2 > h1 && h2 > h3 && h2 > h4)
762
- hightPoint = weekLine[i];
763
- }
764
- break;
765
- case weekLine.length - 3:
766
- {
767
- var h1 = weekLine[i - 2].h;
768
- var h2 = weekLine[i - 1].h;
769
- var h3 = weekLine[i].h;
770
- var h4 = weekLine[i + 1].h;
771
- var h5 = weekLine[i + 2].h;
772
- if (h3 > h1 && h3 > h2 && h3 > h4 && h3 > h5)
773
- hightPoint = weekLine[i];
774
- }
775
- break;
776
- case weekLine.length - 2:
777
- {
778
- var h1 = weekLine[i - 2].h;
779
- var h2 = weekLine[i - 1].h;
780
- var h3 = weekLine[i].h;
781
- var h4 = weekLine[i + 1].h;
782
- if (h3 > h1 && h3 > h2 && h3 > h4)
783
- hightPoint = weekLine[i];
784
- }
785
- break;
786
- case weekLine.length - 1:
787
- {
788
- var h1 = weekLine[i - 2].h;
789
- var h2 = weekLine[i - 1].h;
790
- var h3 = weekLine[i].h;
791
- if (h3 > h2 && h3 > h1)
792
- hightPoint = weekLine[i];
793
- }
794
- break;
795
- default:
796
- {
797
- var h1 = weekLine[i - 2].h;
798
- var h2 = weekLine[i - 1].h;
799
- var h3 = weekLine[i].h;
800
- var h4 = weekLine[i + 1].h;
801
- var h5 = weekLine[i + 2].h;
802
- var h6 = weekLine[i + 3].h;
803
- if (h3 > h2 && h3 > h4 && h3 > h5 && h3 > h6)
804
- hightPoint = weekLine[i];
805
- if (h3 > h1 && h3 > h2 && h3 > h4 && h3 > h5)
806
- hightPoint = weekLine[i];
807
- }
808
- break;
809
- }
810
- if (hightPoint && hightPoint["detail"]) {
811
- var h_1 = hightPoint.h;
812
- var theHight = hightPoint.detail.find(function (item) { return item.h === h_1; });
813
- delete hightPoint.detail;
814
- if (theHight)
815
- hightPoints[theHight === null || theHight === void 0 ? void 0 : theHight.t] = theHight;
1125
+ value: function (list, count) {
1126
+ var start = list.slice(0, 5);
1127
+ var sum = 0;
1128
+ for (var i = 1; i < start.length; i++) {
1129
+ var minus = start[i]["c"] - start[i - 1]["c"];
1130
+ if (minus < 0) {
1131
+ sum += minus;
816
1132
  }
1133
+ }
1134
+ return Math.abs(sum / count);
1135
+ }
1136
+ });
1137
+ Object.defineProperty(Rsi.prototype, "getRsi", {
1138
+ enumerable: false,
1139
+ configurable: true,
1140
+ writable: true,
1141
+ value: function (UpAvg, DownAvg) {
1142
+ var res = 0;
1143
+ if (UpAvg + DownAvg !== 0) {
1144
+ res = (UpAvg / (UpAvg + DownAvg)) * 100;
1145
+ }
1146
+ return res;
1147
+ }
1148
+ });
1149
+ return Rsi;
1150
+ }());
1151
+
1152
+ var __assign$1 = (undefined && undefined.__assign) || function () {
1153
+ __assign$1 = Object.assign || function(t) {
1154
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
1155
+ s = arguments[i];
1156
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
1157
+ t[p] = s[p];
1158
+ }
1159
+ return t;
1160
+ };
1161
+ return __assign$1.apply(this, arguments);
1162
+ };
1163
+ var __spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {
1164
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
1165
+ if (ar || !(i in from)) {
1166
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
1167
+ ar[i] = from[i];
1168
+ }
1169
+ }
1170
+ return to.concat(ar || Array.prototype.slice.call(from));
1171
+ };
1172
+ var Obv = /** @class */ (function () {
1173
+ function Obv() {
1174
+ }
1175
+ Object.defineProperty(Obv.prototype, "init", {
1176
+ enumerable: false,
1177
+ configurable: true,
1178
+ writable: true,
1179
+ value: function (data) {
1180
+ return {
1181
+ dataset: [data],
1182
+ obv: data.v,
1183
+ preClose: data.c,
817
1184
  };
818
- for (var i = 0; i < weekLine.length; i++) {
819
- _loop_1(i);
1185
+ }
1186
+ });
1187
+ Object.defineProperty(Obv.prototype, "next", {
1188
+ enumerable: false,
1189
+ configurable: true,
1190
+ writable: true,
1191
+ value: function (data, preList) {
1192
+ var currentVolume = data.v;
1193
+ var currentClose = data.c;
1194
+ // obv
1195
+ var obv = preList.obv;
1196
+ if (currentClose > preList.preClose) {
1197
+ obv += currentVolume;
820
1198
  }
821
- return hightPoints;
1199
+ else if (currentClose < preList.preClose) {
1200
+ obv -= currentVolume;
1201
+ }
1202
+ return {
1203
+ dataset: __spreadArray(__spreadArray([], preList.dataset, true), [data], false),
1204
+ obv: obv,
1205
+ preClose: currentClose,
1206
+ };
822
1207
  }
823
1208
  });
824
- Object.defineProperty(Gold.prototype, "findLowPoint", {
1209
+ Object.defineProperty(Obv.prototype, "getObv", {
825
1210
  enumerable: false,
826
1211
  configurable: true,
827
1212
  writable: true,
828
1213
  value: function (list) {
829
- var weekLine = getWeekLine(list, true);
830
- var lowPoints = {};
831
- var _loop_2 = function (i) {
832
- var lowPoint = undefined;
833
- switch (i) {
834
- case 0:
835
- {
836
- var l1 = weekLine[i].l;
837
- var l2 = weekLine[i + 1].l;
838
- var l3 = weekLine[i + 2].l;
839
- if (l1 < l2 && l1 < l3)
840
- lowPoint = weekLine[i];
841
- }
842
- break;
843
- case 1:
844
- {
845
- var l1 = weekLine[i - 1].l;
846
- var l2 = weekLine[i].l;
847
- var l3 = weekLine[i + 1].l;
848
- var l4 = weekLine[i + 2].l;
849
- if (l2 < l1 && l2 < l3 && l2 < l4)
850
- lowPoint = weekLine[i];
851
- }
852
- break;
853
- case weekLine.length - 3:
854
- {
855
- var l1 = weekLine[i - 2].l;
856
- var l2 = weekLine[i - 1].l;
857
- var l3 = weekLine[i].l;
858
- var l4 = weekLine[i + 1].l;
859
- var l5 = weekLine[i + 2].l;
860
- if (l3 < l1 && l3 < l2 && l3 < l4 && l3 < l5)
861
- lowPoint = weekLine[i];
862
- }
863
- break;
864
- case weekLine.length - 2:
865
- {
866
- var l1 = weekLine[i - 2].l;
867
- var l2 = weekLine[i - 1].l;
868
- var l3 = weekLine[i].l;
869
- var l4 = weekLine[i + 1].l;
870
- if (l3 < l1 && l3 < l2 && l3 < l4)
871
- lowPoint = weekLine[i];
872
- }
873
- break;
874
- case weekLine.length - 1:
875
- {
876
- var l1 = weekLine[i - 2].l;
877
- var l2 = weekLine[i - 1].l;
878
- var l3 = weekLine[i].l;
879
- if (l3 < l2 && l3 < l1)
880
- lowPoint = weekLine[i];
881
- }
882
- break;
883
- default:
884
- {
885
- var l1 = weekLine[i - 2].l;
886
- var l2 = weekLine[i - 1].l;
887
- var l3 = weekLine[i].l;
888
- var l4 = weekLine[i + 1].l;
889
- var l5 = weekLine[i + 2].l;
890
- var l6 = weekLine[i + 3].l;
891
- if (l3 < l2 && l3 < l4 && l3 < l5 && l3 < l6)
892
- lowPoint = weekLine[i];
893
- if (l3 < l1 && l3 < l2 && l3 < l4 && l3 < l5)
894
- lowPoint = weekLine[i];
895
- }
896
- break;
1214
+ var res = [];
1215
+ var obv = 0;
1216
+ for (var i = 0; i < list.length; i++) {
1217
+ var currentVolume = list[i].v;
1218
+ var currentClose = list[i].c;
1219
+ if (i > 0) {
1220
+ // obv
1221
+ if (currentClose > list[i - 1].c) {
1222
+ obv += currentVolume;
1223
+ }
1224
+ else if (currentClose < list[i - 1].c) {
1225
+ obv -= currentVolume;
1226
+ }
897
1227
  }
898
- if (lowPoint && lowPoint["detail"]) {
899
- var l_1 = lowPoint.l;
900
- var theLow = lowPoint.detail.find(function (item) { return item.l === l_1; });
901
- delete lowPoint.detail;
902
- if (theLow)
903
- lowPoints[theLow === null || theLow === void 0 ? void 0 : theLow.t] = theLow;
1228
+ else {
1229
+ obv = currentVolume;
904
1230
  }
905
- };
906
- for (var i = 0; i < weekLine.length; i++) {
907
- _loop_2(i);
1231
+ res[i] = __assign$1(__assign$1({}, list[i]), { obv: obv });
908
1232
  }
909
- return lowPoints;
1233
+ return res;
910
1234
  }
911
1235
  });
912
- Object.defineProperty(Gold.prototype, "getGold", {
1236
+ return Obv;
1237
+ }());
1238
+
1239
+ var Ema = /** @class */ (function () {
1240
+ function Ema() {
1241
+ }
1242
+ Object.defineProperty(Ema.prototype, "getStartEma", {
913
1243
  enumerable: false,
914
1244
  configurable: true,
915
1245
  writable: true,
916
- value: function (list) {
917
- var hightPoints = this.findHighPoint(list);
918
- var lowPoints = this.findLowPoint(list);
919
- var lastHightPointDate = Object.keys(hightPoints).slice(-1)[0] !==
920
- list[list.length - 1].t.toString()
921
- ? Object.keys(hightPoints).slice(-1)[0]
922
- : Object.keys(hightPoints).slice(-2)[0];
923
- var lastLowPointDate = Object.keys(lowPoints).slice(-1)[0] !== list[list.length - 1].t.toString()
924
- ? Object.keys(lowPoints).slice(-1)[0]
925
- : Object.keys(lowPoints).slice(-2)[0];
926
- var highestPoint = hightPoints[lastHightPointDate].h;
927
- var lowestPoint = lowPoints[lastLowPointDate].l;
928
- var res = {
929
- highestPointDate: parseInt(lastHightPointDate),
930
- lowestPointDate: parseInt(lastLowPointDate),
931
- lowestPoint: lowestPoint,
932
- highestPoint: highestPoint,
933
- superStrong: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.191) * 100) / 100,
934
- strong: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.382) * 100) / 100,
935
- middle: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.5) * 100) /
936
- 100,
937
- weak: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.618) * 100) / 100,
938
- superWeak: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.809) * 100) / 100,
939
- };
1246
+ value: function (list, period) {
1247
+ if (list.length < period)
1248
+ throw new Error("list.length < period");
1249
+ var sum = 0;
1250
+ for (var i = 0; i < period; i++) {
1251
+ sum += list[i];
1252
+ }
1253
+ var initialEMA = sum / period;
1254
+ return initialEMA;
1255
+ }
1256
+ });
1257
+ Object.defineProperty(Ema.prototype, "getEma", {
1258
+ enumerable: false,
1259
+ configurable: true,
1260
+ writable: true,
1261
+ value: function (list, period) {
1262
+ var res = [];
1263
+ var ema = this.getStartEma(list.slice(0, period), period);
1264
+ for (var i = 0; i < list.length; i++) {
1265
+ if (i < period) {
1266
+ res.push(undefined);
1267
+ continue;
1268
+ }
1269
+ ema = (list[i] * 2 + (period - 1) * ema) / (period + 1);
1270
+ res.push(ema);
1271
+ }
940
1272
  return res;
941
1273
  }
942
1274
  });
943
- return Gold;
1275
+ return Ema;
944
1276
  }());
945
1277
 
946
1278
  var Mode;
@@ -998,9 +1330,95 @@
998
1330
  }
999
1331
  }
1000
1332
 
1333
+ var __assign = (undefined && undefined.__assign) || function () {
1334
+ __assign = Object.assign || function(t) {
1335
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
1336
+ s = arguments[i];
1337
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
1338
+ t[p] = s[p];
1339
+ }
1340
+ return t;
1341
+ };
1342
+ return __assign.apply(this, arguments);
1343
+ };
1344
+ var Williams = /** @class */ (function () {
1345
+ function Williams() {
1346
+ }
1347
+ Object.defineProperty(Williams.prototype, "getAllWillams", {
1348
+ enumerable: false,
1349
+ configurable: true,
1350
+ writable: true,
1351
+ value: function (list) {
1352
+ var res = [];
1353
+ var williams9 = this.getWilliams9(list);
1354
+ var williams18 = this.getWilliams18(list);
1355
+ for (var i = 0; i < list.length; i++) {
1356
+ res[i] = Object.assign(list[i], williams9[i], williams18[i]);
1357
+ }
1358
+ return res;
1359
+ }
1360
+ });
1361
+ Object.defineProperty(Williams.prototype, "getWilliams9", {
1362
+ enumerable: false,
1363
+ configurable: true,
1364
+ writable: true,
1365
+ value: function (list) {
1366
+ var res = [];
1367
+ for (var i = 0; i < list.length; i++) {
1368
+ if (i < 9)
1369
+ res[i] = __assign(__assign({}, list[i]), { williams9: undefined });
1370
+ else {
1371
+ var maxList = list.slice(i - 8, i).map(function (item) { return item["h"]; });
1372
+ var minList = list.slice(i - 8, i).map(function (item) { return item["l"]; });
1373
+ var max = Math.max.apply(Math, maxList);
1374
+ var min = Math.min.apply(Math, minList);
1375
+ var close_1 = list[i]["c"];
1376
+ var williams9 = ((max - close_1) / (max - min)) * -100;
1377
+ res[i] = __assign(__assign({}, list[i]), { williams9: Math.round(williams9 * 100) / 100 });
1378
+ }
1379
+ }
1380
+ return res;
1381
+ }
1382
+ });
1383
+ Object.defineProperty(Williams.prototype, "getWilliams18", {
1384
+ enumerable: false,
1385
+ configurable: true,
1386
+ writable: true,
1387
+ value: function (list) {
1388
+ var res = [];
1389
+ for (var i = 0; i < list.length; i++) {
1390
+ if (i < 18)
1391
+ res[i] = __assign(__assign({}, list[i]), { williams9: undefined });
1392
+ else {
1393
+ var maxList = list.slice(i - 17, i).map(function (item) { return item["h"]; });
1394
+ var minList = list.slice(i - 17, i).map(function (item) { return item["l"]; });
1395
+ var max = Math.max.apply(Math, maxList);
1396
+ var min = Math.min.apply(Math, minList);
1397
+ var close_2 = list[i]["c"];
1398
+ var williams18 = ((max - close_2) / (max - min)) * -100;
1399
+ res[i] = __assign(__assign({}, list[i]), { williams18: Math.round(williams18 * 100) / 100 });
1400
+ }
1401
+ }
1402
+ return res;
1403
+ }
1404
+ });
1405
+ return Williams;
1406
+ }());
1407
+
1408
+ function add(a, b) {
1409
+ return a + b;
1410
+ }
1411
+
1412
+ function minus(a, b) {
1413
+ return a - b;
1414
+ }
1415
+
1416
+ exports.Ema = Ema;
1001
1417
  exports.Gold = Gold;
1418
+ exports.Kd = Kd;
1002
1419
  exports.Ma = Ma;
1003
1420
  exports.Macd = MACD;
1421
+ exports.Obv = Obv;
1004
1422
  exports.Rsi = Rsi;
1005
1423
  exports.Williams = Williams;
1006
1424
  exports.add = add;
@@ -1011,6 +1429,7 @@
1011
1429
  exports.minus = minus;
1012
1430
  exports.movingAverages = movingAverages;
1013
1431
  exports.simpleRegressionModel = simpleRegressionModel;
1432
+ exports.slope = Slope;
1014
1433
  exports.weightMovingAverages = weightMovingAverages;
1015
1434
 
1016
1435
  Object.defineProperty(exports, '__esModule', { value: true });