@ch20026103/anysis 0.0.2-alpha → 0.0.2-release

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/umd/index.js CHANGED
@@ -163,14 +163,292 @@
163
163
  return nextYearForecast;
164
164
  }
165
165
 
166
- function add(a, b) {
167
- return a + b;
166
+ var __assign$5 = (undefined && undefined.__assign) || function () {
167
+ __assign$5 = Object.assign || function(t) {
168
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
169
+ s = arguments[i];
170
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
171
+ t[p] = s[p];
172
+ }
173
+ return t;
174
+ };
175
+ return __assign$5.apply(this, arguments);
176
+ };
177
+ function addDetail(obj, list, detail) {
178
+ if (detail)
179
+ return __assign$5(__assign$5({}, obj), { detail: list });
180
+ else
181
+ return __assign$5({}, obj);
168
182
  }
169
-
170
- function minus(a, b) {
171
- return a - b;
183
+ function getWeekLine(list, detail) {
184
+ var res = [];
185
+ var collectWeekData = [];
186
+ list.forEach(function (item, index) {
187
+ var year = item["t"]
188
+ .toString()
189
+ .replace(/^(\d{4})(\d{2})(\d{2})$/, "$1-$2-$3");
190
+ var day = new Date(year).getDay();
191
+ switch (day) {
192
+ case 6:
193
+ break;
194
+ case 5: {
195
+ collectWeekData.push(item);
196
+ var obj = {
197
+ o: collectWeekData[0]["o"],
198
+ c: collectWeekData[collectWeekData.length - 1]["c"],
199
+ t: collectWeekData[collectWeekData.length - 1]["t"],
200
+ h: Math.max.apply(Math, collectWeekData.map(function (item) { return item.h; })),
201
+ l: Math.min.apply(Math, collectWeekData.map(function (item) { return item.l; })),
202
+ };
203
+ res.push(addDetail(obj, collectWeekData, detail));
204
+ collectWeekData = [];
205
+ break;
206
+ }
207
+ case 1:
208
+ if (collectWeekData.length !== 0) {
209
+ var obj = {
210
+ o: collectWeekData[0]["o"],
211
+ c: collectWeekData[collectWeekData.length - 1]["c"],
212
+ t: collectWeekData[collectWeekData.length - 1]["t"],
213
+ h: Math.max.apply(Math, collectWeekData.map(function (item) { return item.h; })),
214
+ l: Math.min.apply(Math, collectWeekData.map(function (item) { return item.l; })),
215
+ };
216
+ res.push(addDetail(obj, collectWeekData, detail));
217
+ }
218
+ collectWeekData = [];
219
+ collectWeekData.push(item);
220
+ break;
221
+ default:
222
+ collectWeekData.push(item);
223
+ if (list.length - 1 === index) {
224
+ var obj = {
225
+ o: collectWeekData[0]["o"],
226
+ c: collectWeekData[collectWeekData.length - 1]["c"],
227
+ t: collectWeekData[collectWeekData.length - 1]["t"],
228
+ h: Math.max.apply(Math, collectWeekData.map(function (item) { return item.h; })),
229
+ l: Math.min.apply(Math, collectWeekData.map(function (item) { return item.l; })),
230
+ };
231
+ res.push(addDetail(obj, collectWeekData, detail));
232
+ }
233
+ break;
234
+ }
235
+ });
236
+ return res;
172
237
  }
173
238
 
239
+ var Gold = /** @class */ (function () {
240
+ function Gold() {
241
+ }
242
+ Object.defineProperty(Gold.prototype, "findHighPoint", {
243
+ enumerable: false,
244
+ configurable: true,
245
+ writable: true,
246
+ value: function (list) {
247
+ var weekLine = getWeekLine(list, true);
248
+ var hightPoints = {};
249
+ var _loop_1 = function (i) {
250
+ var hightPoint = undefined;
251
+ switch (i) {
252
+ case 0:
253
+ {
254
+ var h1 = weekLine[i].h;
255
+ var h2 = weekLine[i + 1].h;
256
+ var h3 = weekLine[i + 2].h;
257
+ if (h1 > h2 && h1 > h3)
258
+ hightPoint = weekLine[i];
259
+ }
260
+ break;
261
+ case 1:
262
+ {
263
+ var h1 = weekLine[i - 1].h;
264
+ var h2 = weekLine[i].h;
265
+ var h3 = weekLine[i + 1].h;
266
+ var h4 = weekLine[i + 2].h;
267
+ if (h2 > h1 && h2 > h3 && h2 > h4)
268
+ hightPoint = weekLine[i];
269
+ }
270
+ break;
271
+ case weekLine.length - 3:
272
+ {
273
+ var h1 = weekLine[i - 2].h;
274
+ var h2 = weekLine[i - 1].h;
275
+ var h3 = weekLine[i].h;
276
+ var h4 = weekLine[i + 1].h;
277
+ var h5 = weekLine[i + 2].h;
278
+ if (h3 > h1 && h3 > h2 && h3 > h4 && h3 > h5)
279
+ hightPoint = weekLine[i];
280
+ }
281
+ break;
282
+ case weekLine.length - 2:
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
+ if (h3 > h1 && h3 > h2 && h3 > h4)
289
+ hightPoint = weekLine[i];
290
+ }
291
+ break;
292
+ case weekLine.length - 1:
293
+ {
294
+ var h1 = weekLine[i - 2].h;
295
+ var h2 = weekLine[i - 1].h;
296
+ var h3 = weekLine[i].h;
297
+ if (h3 > h2 && h3 > h1)
298
+ hightPoint = weekLine[i];
299
+ }
300
+ break;
301
+ default:
302
+ {
303
+ var h1 = weekLine[i - 2].h;
304
+ var h2 = weekLine[i - 1].h;
305
+ var h3 = weekLine[i].h;
306
+ var h4 = weekLine[i + 1].h;
307
+ var h5 = weekLine[i + 2].h;
308
+ var h6 = weekLine[i + 3].h;
309
+ if (h3 > h2 && h3 > h4 && h3 > h5 && h3 > h6)
310
+ hightPoint = weekLine[i];
311
+ if (h3 > h1 && h3 > h2 && h3 > h4 && h3 > h5)
312
+ hightPoint = weekLine[i];
313
+ }
314
+ break;
315
+ }
316
+ if (hightPoint && hightPoint["detail"]) {
317
+ var h_1 = hightPoint.h;
318
+ var theHight = hightPoint.detail.find(function (item) { return item.h === h_1; });
319
+ delete hightPoint.detail;
320
+ if (theHight)
321
+ hightPoints[theHight === null || theHight === void 0 ? void 0 : theHight.t] = theHight;
322
+ }
323
+ };
324
+ for (var i = 0; i < weekLine.length; i++) {
325
+ _loop_1(i);
326
+ }
327
+ return hightPoints;
328
+ }
329
+ });
330
+ Object.defineProperty(Gold.prototype, "findLowPoint", {
331
+ enumerable: false,
332
+ configurable: true,
333
+ writable: true,
334
+ value: function (list) {
335
+ var weekLine = getWeekLine(list, true);
336
+ var lowPoints = {};
337
+ var _loop_2 = function (i) {
338
+ var lowPoint = undefined;
339
+ switch (i) {
340
+ case 0:
341
+ {
342
+ var l1 = weekLine[i].l;
343
+ var l2 = weekLine[i + 1].l;
344
+ var l3 = weekLine[i + 2].l;
345
+ if (l1 < l2 && l1 < l3)
346
+ lowPoint = weekLine[i];
347
+ }
348
+ break;
349
+ case 1:
350
+ {
351
+ var l1 = weekLine[i - 1].l;
352
+ var l2 = weekLine[i].l;
353
+ var l3 = weekLine[i + 1].l;
354
+ var l4 = weekLine[i + 2].l;
355
+ if (l2 < l1 && l2 < l3 && l2 < l4)
356
+ lowPoint = weekLine[i];
357
+ }
358
+ break;
359
+ case weekLine.length - 3:
360
+ {
361
+ var l1 = weekLine[i - 2].l;
362
+ var l2 = weekLine[i - 1].l;
363
+ var l3 = weekLine[i].l;
364
+ var l4 = weekLine[i + 1].l;
365
+ var l5 = weekLine[i + 2].l;
366
+ if (l3 < l1 && l3 < l2 && l3 < l4 && l3 < l5)
367
+ lowPoint = weekLine[i];
368
+ }
369
+ break;
370
+ case weekLine.length - 2:
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
+ if (l3 < l1 && l3 < l2 && l3 < l4)
377
+ lowPoint = weekLine[i];
378
+ }
379
+ break;
380
+ case weekLine.length - 1:
381
+ {
382
+ var l1 = weekLine[i - 2].l;
383
+ var l2 = weekLine[i - 1].l;
384
+ var l3 = weekLine[i].l;
385
+ if (l3 < l2 && l3 < l1)
386
+ lowPoint = weekLine[i];
387
+ }
388
+ break;
389
+ default:
390
+ {
391
+ var l1 = weekLine[i - 2].l;
392
+ var l2 = weekLine[i - 1].l;
393
+ var l3 = weekLine[i].l;
394
+ var l4 = weekLine[i + 1].l;
395
+ var l5 = weekLine[i + 2].l;
396
+ var l6 = weekLine[i + 3].l;
397
+ if (l3 < l2 && l3 < l4 && l3 < l5 && l3 < l6)
398
+ lowPoint = weekLine[i];
399
+ if (l3 < l1 && l3 < l2 && l3 < l4 && l3 < l5)
400
+ lowPoint = weekLine[i];
401
+ }
402
+ break;
403
+ }
404
+ if (lowPoint && lowPoint["detail"]) {
405
+ var l_1 = lowPoint.l;
406
+ var theLow = lowPoint.detail.find(function (item) { return item.l === l_1; });
407
+ delete lowPoint.detail;
408
+ if (theLow)
409
+ lowPoints[theLow === null || theLow === void 0 ? void 0 : theLow.t] = theLow;
410
+ }
411
+ };
412
+ for (var i = 0; i < weekLine.length; i++) {
413
+ _loop_2(i);
414
+ }
415
+ return lowPoints;
416
+ }
417
+ });
418
+ Object.defineProperty(Gold.prototype, "getGold", {
419
+ enumerable: false,
420
+ configurable: true,
421
+ writable: true,
422
+ value: function (list) {
423
+ var hightPoints = this.findHighPoint(list);
424
+ var lowPoints = this.findLowPoint(list);
425
+ var lastHightPointDate = Object.keys(hightPoints).slice(-1)[0] !==
426
+ list[list.length - 1].t.toString()
427
+ ? Object.keys(hightPoints).slice(-1)[0]
428
+ : Object.keys(hightPoints).slice(-2)[0];
429
+ var lastLowPointDate = Object.keys(lowPoints).slice(-1)[0] !== list[list.length - 1].t.toString()
430
+ ? Object.keys(lowPoints).slice(-1)[0]
431
+ : Object.keys(lowPoints).slice(-2)[0];
432
+ var highestPoint = hightPoints[lastHightPointDate].h;
433
+ var lowestPoint = lowPoints[lastLowPointDate].l;
434
+ var res = {
435
+ highestPointDate: parseInt(lastHightPointDate),
436
+ lowestPointDate: parseInt(lastLowPointDate),
437
+ lowestPoint: lowestPoint,
438
+ highestPoint: highestPoint,
439
+ superStrong: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.191) * 100) / 100,
440
+ strong: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.382) * 100) / 100,
441
+ middle: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.5) * 100) /
442
+ 100,
443
+ weak: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.618) * 100) / 100,
444
+ superWeak: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.809) * 100) / 100,
445
+ };
446
+ return res;
447
+ }
448
+ });
449
+ return Gold;
450
+ }());
451
+
174
452
  var __assign$4 = (undefined && undefined.__assign) || function () {
175
453
  __assign$4 = Object.assign || function(t) {
176
454
  for (var s, i = 1, n = arguments.length; i < n; i++) {
@@ -182,6 +460,75 @@
182
460
  };
183
461
  return __assign$4.apply(this, arguments);
184
462
  };
463
+ var Kd = /** @class */ (function () {
464
+ function Kd() {
465
+ }
466
+ Object.defineProperty(Kd.prototype, "getRSV", {
467
+ enumerable: false,
468
+ configurable: true,
469
+ writable: true,
470
+ value: function (list) {
471
+ var res = [];
472
+ for (var i = 0; i < list.length; i++) {
473
+ if (i < 8)
474
+ res[i] = __assign$4(__assign$4({}, list[i]), { rsv: undefined });
475
+ else {
476
+ var low = Math.min.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.l; }));
477
+ var hight = Math.max.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.h; }));
478
+ var close_1 = list[i].c;
479
+ var rsv = ((close_1 - low) / (hight - low)) * 100;
480
+ rsv = Math.round(rsv * 100) / 100;
481
+ res[i] = __assign$4(__assign$4({}, list[i]), { rsv: rsv });
482
+ }
483
+ }
484
+ return res;
485
+ }
486
+ });
487
+ Object.defineProperty(Kd.prototype, "getKD", {
488
+ enumerable: false,
489
+ configurable: true,
490
+ writable: true,
491
+ value: function (list) {
492
+ var res = [];
493
+ var yesterdayK = 50;
494
+ var yesterdayD = 50;
495
+ for (var i = 0; i < list.length; i++) {
496
+ if (i < 8)
497
+ res[i] = __assign$4(__assign$4({}, list[i]), { rsv: undefined, k: undefined, d: undefined, "k-d": undefined });
498
+ else {
499
+ var low = Math.min.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.l; }));
500
+ var hight = Math.max.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.h; }));
501
+ var close_2 = list[i].c;
502
+ var rsv = ((close_2 - low) / (hight - low)) * 100;
503
+ rsv = Math.round(rsv * 100) / 100;
504
+ var k = (2 / 3) * yesterdayK + (1 / 3) * rsv;
505
+ var d = (2 / 3) * yesterdayD + (1 / 3) * k;
506
+ var k_d = k - d;
507
+ k = Math.round(k * 100) / 100;
508
+ d = Math.round(d * 100) / 100;
509
+ k_d = Math.round(k_d * 100) / 100;
510
+ res[i] = __assign$4(__assign$4({}, list[i]), { rsv: rsv, k: k, d: d, "k-d": k_d });
511
+ yesterdayK = k;
512
+ yesterdayD = d;
513
+ }
514
+ }
515
+ return res;
516
+ }
517
+ });
518
+ return Kd;
519
+ }());
520
+
521
+ var __assign$3 = (undefined && undefined.__assign) || function () {
522
+ __assign$3 = Object.assign || function(t) {
523
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
524
+ s = arguments[i];
525
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
526
+ t[p] = s[p];
527
+ }
528
+ return t;
529
+ };
530
+ return __assign$3.apply(this, arguments);
531
+ };
185
532
  var Ma = /** @class */ (function () {
186
533
  function Ma() {
187
534
  }
@@ -210,13 +557,13 @@
210
557
  var res = [];
211
558
  for (var i = 0; i < list.length; i++) {
212
559
  if (i < 4)
213
- res[i] = __assign$4(__assign$4({}, list[i]), { ma5: undefined });
560
+ res[i] = __assign$3(__assign$3({}, list[i]), { ma5: undefined });
214
561
  else {
215
562
  var sum = list
216
563
  .slice(i - 4, i + 1)
217
564
  .reduce(function (pre, current) { return pre + current.c; }, 0);
218
565
  var ma5 = Math.round((sum / 5) * 100) / 100;
219
- res[i] = __assign$4(__assign$4({}, list[i]), { ma5: ma5 });
566
+ res[i] = __assign$3(__assign$3({}, list[i]), { ma5: ma5 });
220
567
  }
221
568
  }
222
569
  return res;
@@ -230,13 +577,13 @@
230
577
  var res = [];
231
578
  for (var i = 0; i < list.length; i++) {
232
579
  if (i < 9)
233
- res[i] = __assign$4(__assign$4({}, list[i]), { ma10: undefined });
580
+ res[i] = __assign$3(__assign$3({}, list[i]), { ma10: undefined });
234
581
  else {
235
582
  var sum = list
236
583
  .slice(i - 9, i + 1)
237
584
  .reduce(function (pre, current) { return pre + current.c; }, 0);
238
585
  var ma10 = Math.round((sum / 10) * 100) / 100;
239
- res[i] = __assign$4(__assign$4({}, list[i]), { ma10: ma10 });
586
+ res[i] = __assign$3(__assign$3({}, list[i]), { ma10: ma10 });
240
587
  }
241
588
  }
242
589
  return res;
@@ -250,13 +597,13 @@
250
597
  var res = [];
251
598
  for (var i = 0; i < list.length; i++) {
252
599
  if (i < 19)
253
- res[i] = __assign$4(__assign$4({}, list[i]), { ma20: undefined });
600
+ res[i] = __assign$3(__assign$3({}, list[i]), { ma20: undefined });
254
601
  else {
255
602
  var sum = list
256
603
  .slice(i - 19, i + 1)
257
604
  .reduce(function (pre, current) { return pre + current.c; }, 0);
258
605
  var ma20 = Math.round((sum / 20) * 100) / 100;
259
- res[i] = __assign$4(__assign$4({}, list[i]), { ma20: ma20 });
606
+ res[i] = __assign$3(__assign$3({}, list[i]), { ma20: ma20 });
260
607
  }
261
608
  }
262
609
  return res;
@@ -270,13 +617,13 @@
270
617
  var res = [];
271
618
  for (var i = 0; i < list.length; i++) {
272
619
  if (i < 59)
273
- res[i] = __assign$4(__assign$4({}, list[i]), { ma60: undefined });
620
+ res[i] = __assign$3(__assign$3({}, list[i]), { ma60: undefined });
274
621
  else {
275
622
  var sum = list
276
623
  .slice(i - 59, i + 1)
277
624
  .reduce(function (pre, current) { return pre + current.c; }, 0);
278
625
  var ma60 = Math.round((sum / 60) * 100) / 100;
279
- res[i] = __assign$4(__assign$4({}, list[i]), { ma60: ma60 });
626
+ res[i] = __assign$3(__assign$3({}, list[i]), { ma60: ma60 });
280
627
  }
281
628
  }
282
629
  return res;
@@ -290,13 +637,13 @@
290
637
  var res = [];
291
638
  for (var i = 0; i < list.length; i++) {
292
639
  if (i < (self - 1))
293
- res[i] = __assign$4(__assign$4({}, list[i]), { maSelf: undefined });
640
+ res[i] = __assign$3(__assign$3({}, list[i]), { maSelf: undefined });
294
641
  else {
295
642
  var sum = list
296
643
  .slice(i - (self - 1), i + 1)
297
644
  .reduce(function (pre, current) { return pre + current.c; }, 0);
298
645
  var maSelf = Math.round((sum / self) * 100) / 100;
299
- res[i] = __assign$4(__assign$4({}, list[i]), { maSelf: maSelf });
646
+ res[i] = __assign$3(__assign$3({}, list[i]), { maSelf: maSelf });
300
647
  }
301
648
  }
302
649
  return res;
@@ -310,7 +657,7 @@
310
657
  var res = [];
311
658
  var _loop_1 = function (i) {
312
659
  if (i < 24)
313
- res[i] = __assign$4(__assign$4({}, list[i]), { ma25: undefined, bollUb: undefined, bollLb: undefined });
660
+ res[i] = __assign$3(__assign$3({}, list[i]), { ma25: undefined, bollUb: undefined, bollLb: undefined });
314
661
  else {
315
662
  // ma25
316
663
  var sumMa25 = list
@@ -326,7 +673,7 @@
326
673
  : pre;
327
674
  }, 0);
328
675
  var base = Math.round(Math.sqrt(sumBase / 25) * 100) / 100;
329
- res[i] = __assign$4(__assign$4({}, list[i]), { ma25: ma25_1, bollUb: ma25_1 + 2 * base, bollLb: ma25_1 - 2 * base });
676
+ res[i] = __assign$3(__assign$3({}, list[i]), { ma25: ma25_1, bollUb: ma25_1 + 2 * base, bollLb: ma25_1 - 2 * base });
330
677
  }
331
678
  };
332
679
  for (var i = 0; i < list.length; i++) {
@@ -338,8 +685,8 @@
338
685
  return Ma;
339
686
  }());
340
687
 
341
- var __assign$3 = (undefined && undefined.__assign) || function () {
342
- __assign$3 = Object.assign || function(t) {
688
+ var __assign$2 = (undefined && undefined.__assign) || function () {
689
+ __assign$2 = Object.assign || function(t) {
343
690
  for (var s, i = 1, n = arguments.length; i < n; i++) {
344
691
  s = arguments[i];
345
692
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
@@ -347,7 +694,7 @@
347
694
  }
348
695
  return t;
349
696
  };
350
- return __assign$3.apply(this, arguments);
697
+ return __assign$2.apply(this, arguments);
351
698
  };
352
699
  var MACD = /** @class */ (function () {
353
700
  function MACD() {
@@ -391,315 +738,97 @@
391
738
  return sum / arr.length;
392
739
  }
393
740
  });
394
- Object.defineProperty(MACD.prototype, "getEMA12", {
395
- enumerable: false,
396
- configurable: true,
397
- writable: true,
398
- value: function (list) {
399
- var start = list.slice(0, 11);
400
- var beforeEMA12 = this.getStartEMA(start);
401
- var res = [];
402
- for (var i = 0; i < list.length; i++) {
403
- if (i < 12)
404
- res[i] = __assign$3(__assign$3({}, list[i]), { EMA12: undefined });
405
- else {
406
- beforeEMA12 = (beforeEMA12 * 11) / 13 + (this.getDI(list[i]) * 2) / 13;
407
- res[i] = __assign$3(__assign$3({}, list[i]), { EMA12: beforeEMA12 });
408
- }
409
- }
410
- return res;
411
- }
412
- });
413
- Object.defineProperty(MACD.prototype, "getEMA26", {
414
- enumerable: false,
415
- configurable: true,
416
- writable: true,
417
- value: function (list) {
418
- var start = list.slice(0, 25);
419
- var beforeEMA26 = this.getStartEMA(start);
420
- var res = [];
421
- for (var i = 0; i < list.length; i++) {
422
- if (i < 26)
423
- res[i] = __assign$3(__assign$3({}, list[i]), { EMA26: undefined });
424
- else {
425
- beforeEMA26 = (beforeEMA26 * 25) / 27 + (this.getDI(list[i]) * 2) / 27;
426
- res[i] = __assign$3(__assign$3({}, list[i]), { EMA26: beforeEMA26 });
427
- }
428
- }
429
- return res;
430
- }
431
- });
432
- Object.defineProperty(MACD.prototype, "getDIF", {
433
- enumerable: false,
434
- configurable: true,
435
- writable: true,
436
- value: function (list, ResEMA12, ResEMA26) {
437
- var _a, _b;
438
- var res = [];
439
- for (var i = 0; i < list.length; i++) {
440
- if (i < 26)
441
- res[i] = __assign$3(__assign$3({}, list[i]), { DIF: undefined });
442
- else {
443
- var EMA12 = ((_a = ResEMA12 === null || ResEMA12 === void 0 ? void 0 : ResEMA12[i]) === null || _a === void 0 ? void 0 : _a["EMA12"]) && ResEMA12[i]["EMA12"];
444
- var EMA26 = ((_b = ResEMA26 === null || ResEMA26 === void 0 ? void 0 : ResEMA26[i]) === null || _b === void 0 ? void 0 : _b["EMA26"]) && ResEMA26[i]["EMA26"];
445
- var DIF = EMA12 - EMA26;
446
- res[i] = __assign$3(__assign$3({}, list[i]), { DIF: DIF });
447
- }
448
- }
449
- return res;
450
- }
451
- });
452
- Object.defineProperty(MACD.prototype, "getMACD9", {
453
- enumerable: false,
454
- configurable: true,
455
- writable: true,
456
- value: function (list, DIF) {
457
- var res = [];
458
- var beforeMACD9 = 0;
459
- for (var i = 0; i < list.length; i++) {
460
- if (i < 26)
461
- res[i] = __assign$3(__assign$3({}, list[i]), { MACD9: undefined, OSC: undefined });
462
- else if (i === 26) {
463
- var MACD9 = DIF.slice(26, 34)
464
- .map(function (item) { return ((item === null || item === void 0 ? void 0 : item.DIF) ? item["DIF"] : 0); })
465
- .reduce(function (accumulator, currentValue) { return accumulator + currentValue; });
466
- var OSC = DIF[i]["DIF"] - MACD9;
467
- res[26] = __assign$3(__assign$3({}, list[i]), { MACD9: MACD9, OSC: OSC });
468
- beforeMACD9 = MACD9;
469
- }
470
- else {
471
- var MACD9 = beforeMACD9 + ((DIF[i]["DIF"] - beforeMACD9) * 2) / 10;
472
- var OSC = DIF[i]["DIF"] - MACD9;
473
- res[i] = __assign$3(__assign$3({}, list[i]), { MACD9: MACD9, OSC: OSC });
474
- beforeMACD9 = MACD9;
475
- }
476
- }
477
- return res;
478
- }
479
- });
480
- return MACD;
481
- }());
482
-
483
- var __assign$2 = (undefined && undefined.__assign) || function () {
484
- __assign$2 = Object.assign || function(t) {
485
- for (var s, i = 1, n = arguments.length; i < n; i++) {
486
- s = arguments[i];
487
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
488
- t[p] = s[p];
489
- }
490
- return t;
491
- };
492
- return __assign$2.apply(this, arguments);
493
- };
494
- var Rsi = /** @class */ (function () {
495
- function Rsi() {
496
- }
497
- Object.defineProperty(Rsi.prototype, "getAllRsi", {
498
- enumerable: false,
499
- configurable: true,
500
- writable: true,
501
- value: function (list) {
502
- var res = [];
503
- var rsi6 = this.getRsi6(list);
504
- var rsi12 = this.getRsi12(list);
505
- for (var i = 0; i < list.length; i++) {
506
- res[i] = Object.assign(list[i], rsi6[i], rsi12[i]);
507
- }
508
- return res;
509
- }
510
- });
511
- Object.defineProperty(Rsi.prototype, "getRsi6", {
512
- enumerable: false,
513
- configurable: true,
514
- writable: true,
515
- value: function (list) {
516
- var res = [];
517
- // 前5筆
518
- for (var i = 0; i < 5; i++) {
519
- res[i] = __assign$2(__assign$2({}, list[i]), { rsi6: undefined });
520
- }
521
- // 第6筆Rsi
522
- var beforeUpAvg = this.getStartUpAvg(list, 6);
523
- var beforeDownAvg = this.getStartDownAvg(list, 6);
524
- var firstRsi6 = this.getRsi(beforeUpAvg, beforeDownAvg);
525
- res[5] = __assign$2(__assign$2({}, list[5]), { rsi6: firstRsi6 });
526
- // else
527
- for (var i = 6; i < list.length; i++) {
528
- var minusU = 0;
529
- var minusD = 0;
530
- var minusC = list[i]["c"] - list[i - 1]["c"];
531
- if (minusC > 0) {
532
- minusU = minusC;
533
- }
534
- else {
535
- minusD = minusC;
536
- }
537
- beforeUpAvg = (beforeUpAvg * 5) / 6 + minusU / 6;
538
- beforeDownAvg = (beforeDownAvg * 5) / 6 + Math.abs(minusD) / 6;
539
- var rsi6 = this.getRsi(beforeUpAvg, beforeDownAvg);
540
- res[i] = __assign$2(__assign$2({}, list[i]), { rsi6: Math.round(rsi6 * 100) / 100 });
541
- }
542
- return res;
543
- }
544
- });
545
- Object.defineProperty(Rsi.prototype, "getRsi12", {
546
- enumerable: false,
547
- configurable: true,
548
- writable: true,
549
- value: function (list) {
550
- var res = [];
551
- // 前11筆
552
- for (var i = 0; i < 11; i++) {
553
- res[i] = __assign$2(__assign$2({}, list[i]), { rsi12: undefined });
554
- }
555
- // 第12筆Rsi
556
- var beforeUpAvg = this.getStartUpAvg(list, 12);
557
- var beforeDownAvg = this.getStartDownAvg(list, 12);
558
- var firstRsi12 = this.getRsi(beforeUpAvg, beforeDownAvg);
559
- res[11] = __assign$2(__assign$2({}, list[11]), { rsi12: firstRsi12 });
560
- // else
561
- for (var i = 12; i < list.length; i++) {
562
- var minusU = 0;
563
- var minusD = 0;
564
- var minusC = list[i]["c"] - list[i - 1]["c"];
565
- if (minusC > 0) {
566
- minusU = minusC;
567
- }
568
- else {
569
- minusD = minusC;
570
- }
571
- beforeUpAvg = (beforeUpAvg * 11) / 12 + minusU / 12;
572
- beforeDownAvg = (beforeDownAvg * 11) / 12 + Math.abs(minusD) / 12;
573
- var rsi12 = this.getRsi(beforeUpAvg, beforeDownAvg);
574
- res[i] = __assign$2(__assign$2({}, list[i]), { rsi12: Math.round(rsi12 * 100) / 100 });
575
- }
576
- return res;
577
- }
578
- });
579
- Object.defineProperty(Rsi.prototype, "getStartUpAvg", {
580
- enumerable: false,
581
- configurable: true,
582
- writable: true,
583
- value: function (list, count) {
584
- var start = list.slice(0, 5);
585
- var sum = 0;
586
- for (var i = 1; i < start.length; i++) {
587
- var minus = start[i]["c"] - start[i - 1]["c"];
588
- if (minus > 0) {
589
- sum += minus;
590
- }
591
- }
592
- return sum / count;
593
- }
594
- });
595
- Object.defineProperty(Rsi.prototype, "getStartDownAvg", {
596
- enumerable: false,
597
- configurable: true,
598
- writable: true,
599
- value: function (list, count) {
600
- var start = list.slice(0, 5);
601
- var sum = 0;
602
- for (var i = 1; i < start.length; i++) {
603
- var minus = start[i]["c"] - start[i - 1]["c"];
604
- if (minus < 0) {
605
- sum += minus;
606
- }
607
- }
608
- return Math.abs(sum / count);
609
- }
610
- });
611
- Object.defineProperty(Rsi.prototype, "getRsi", {
741
+ Object.defineProperty(MACD.prototype, "getEMA12", {
612
742
  enumerable: false,
613
743
  configurable: true,
614
744
  writable: true,
615
- value: function (UpAvg, DownAvg) {
616
- var res = 0;
617
- if (UpAvg + DownAvg !== 0) {
618
- res = (UpAvg / (UpAvg + DownAvg)) * 100;
745
+ value: function (list) {
746
+ var start = list.slice(0, 11);
747
+ var beforeEMA12 = this.getStartEMA(start);
748
+ var res = [];
749
+ for (var i = 0; i < list.length; i++) {
750
+ if (i < 12)
751
+ res[i] = __assign$2(__assign$2({}, list[i]), { EMA12: undefined });
752
+ else {
753
+ beforeEMA12 = (beforeEMA12 * 11) / 13 + (this.getDI(list[i]) * 2) / 13;
754
+ res[i] = __assign$2(__assign$2({}, list[i]), { EMA12: beforeEMA12 });
755
+ }
619
756
  }
620
757
  return res;
621
758
  }
622
759
  });
623
- return Rsi;
624
- }());
625
-
626
- var __assign$1 = (undefined && undefined.__assign) || function () {
627
- __assign$1 = Object.assign || function(t) {
628
- for (var s, i = 1, n = arguments.length; i < n; i++) {
629
- s = arguments[i];
630
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
631
- t[p] = s[p];
632
- }
633
- return t;
634
- };
635
- return __assign$1.apply(this, arguments);
636
- };
637
- var Williams = /** @class */ (function () {
638
- function Williams() {
639
- }
640
- Object.defineProperty(Williams.prototype, "getAllWillams", {
760
+ Object.defineProperty(MACD.prototype, "getEMA26", {
641
761
  enumerable: false,
642
762
  configurable: true,
643
763
  writable: true,
644
764
  value: function (list) {
765
+ var start = list.slice(0, 25);
766
+ var beforeEMA26 = this.getStartEMA(start);
645
767
  var res = [];
646
- var williams9 = this.getWilliams9(list);
647
- var williams18 = this.getWilliams18(list);
648
768
  for (var i = 0; i < list.length; i++) {
649
- res[i] = Object.assign(list[i], williams9[i], williams18[i]);
769
+ if (i < 26)
770
+ res[i] = __assign$2(__assign$2({}, list[i]), { EMA26: undefined });
771
+ else {
772
+ beforeEMA26 = (beforeEMA26 * 25) / 27 + (this.getDI(list[i]) * 2) / 27;
773
+ res[i] = __assign$2(__assign$2({}, list[i]), { EMA26: beforeEMA26 });
774
+ }
650
775
  }
651
776
  return res;
652
777
  }
653
778
  });
654
- Object.defineProperty(Williams.prototype, "getWilliams9", {
779
+ Object.defineProperty(MACD.prototype, "getDIF", {
655
780
  enumerable: false,
656
781
  configurable: true,
657
782
  writable: true,
658
- value: function (list) {
783
+ value: function (list, ResEMA12, ResEMA26) {
784
+ var _a, _b;
659
785
  var res = [];
660
786
  for (var i = 0; i < list.length; i++) {
661
- if (i < 9)
662
- res[i] = __assign$1(__assign$1({}, list[i]), { williams9: undefined });
787
+ if (i < 26)
788
+ res[i] = __assign$2(__assign$2({}, list[i]), { DIF: undefined });
663
789
  else {
664
- var maxList = list.slice(i - 8, i).map(function (item) { return item["h"]; });
665
- var minList = list.slice(i - 8, i).map(function (item) { return item["l"]; });
666
- var max = Math.max.apply(Math, maxList);
667
- var min = Math.min.apply(Math, minList);
668
- var close_1 = list[i]["c"];
669
- var williams9 = ((max - close_1) / (max - min)) * -100;
670
- res[i] = __assign$1(__assign$1({}, list[i]), { williams9: Math.round(williams9 * 100) / 100 });
790
+ var EMA12 = ((_a = ResEMA12 === null || ResEMA12 === void 0 ? void 0 : ResEMA12[i]) === null || _a === void 0 ? void 0 : _a["EMA12"]) && ResEMA12[i]["EMA12"];
791
+ var EMA26 = ((_b = ResEMA26 === null || ResEMA26 === void 0 ? void 0 : ResEMA26[i]) === null || _b === void 0 ? void 0 : _b["EMA26"]) && ResEMA26[i]["EMA26"];
792
+ var DIF = EMA12 - EMA26;
793
+ res[i] = __assign$2(__assign$2({}, list[i]), { DIF: DIF });
671
794
  }
672
795
  }
673
796
  return res;
674
797
  }
675
798
  });
676
- Object.defineProperty(Williams.prototype, "getWilliams18", {
799
+ Object.defineProperty(MACD.prototype, "getMACD9", {
677
800
  enumerable: false,
678
801
  configurable: true,
679
802
  writable: true,
680
- value: function (list) {
803
+ value: function (list, DIF) {
681
804
  var res = [];
805
+ var beforeMACD9 = 0;
682
806
  for (var i = 0; i < list.length; i++) {
683
- if (i < 18)
684
- res[i] = __assign$1(__assign$1({}, list[i]), { williams9: undefined });
807
+ if (i < 26)
808
+ res[i] = __assign$2(__assign$2({}, list[i]), { MACD9: undefined, OSC: undefined });
809
+ else if (i === 26) {
810
+ var MACD9 = DIF.slice(26, 34)
811
+ .map(function (item) { return ((item === null || item === void 0 ? void 0 : item.DIF) ? item["DIF"] : 0); })
812
+ .reduce(function (accumulator, currentValue) { return accumulator + currentValue; });
813
+ var OSC = DIF[i]["DIF"] - MACD9;
814
+ res[26] = __assign$2(__assign$2({}, list[i]), { MACD9: MACD9, OSC: OSC });
815
+ beforeMACD9 = MACD9;
816
+ }
685
817
  else {
686
- var maxList = list.slice(i - 17, i).map(function (item) { return item["h"]; });
687
- var minList = list.slice(i - 17, i).map(function (item) { return item["l"]; });
688
- var max = Math.max.apply(Math, maxList);
689
- var min = Math.min.apply(Math, minList);
690
- var close_2 = list[i]["c"];
691
- var williams18 = ((max - close_2) / (max - min)) * -100;
692
- res[i] = __assign$1(__assign$1({}, list[i]), { williams18: Math.round(williams18 * 100) / 100 });
818
+ var MACD9 = beforeMACD9 + ((DIF[i]["DIF"] - beforeMACD9) * 2) / 10;
819
+ var OSC = DIF[i]["DIF"] - MACD9;
820
+ res[i] = __assign$2(__assign$2({}, list[i]), { MACD9: MACD9, OSC: OSC });
821
+ beforeMACD9 = MACD9;
693
822
  }
694
823
  }
695
824
  return res;
696
825
  }
697
826
  });
698
- return Williams;
827
+ return MACD;
699
828
  }());
700
829
 
701
- var __assign = (undefined && undefined.__assign) || function () {
702
- __assign = Object.assign || function(t) {
830
+ var __assign$1 = (undefined && undefined.__assign) || function () {
831
+ __assign$1 = Object.assign || function(t) {
703
832
  for (var s, i = 1, n = arguments.length; i < n; i++) {
704
833
  s = arguments[i];
705
834
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
@@ -707,281 +836,138 @@
707
836
  }
708
837
  return t;
709
838
  };
710
- return __assign.apply(this, arguments);
839
+ return __assign$1.apply(this, arguments);
711
840
  };
712
- function addDetail(obj, list, detail) {
713
- if (detail)
714
- return __assign(__assign({}, obj), { detail: list });
715
- else
716
- return __assign({}, obj);
717
- }
718
- function getWeekLine(list, detail) {
719
- var res = [];
720
- var collectWeekData = [];
721
- list.forEach(function (item, index) {
722
- var year = item["t"]
723
- .toString()
724
- .replace(/^(\d{4})(\d{2})(\d{2})$/, "$1-$2-$3");
725
- var day = new Date(year).getDay();
726
- switch (day) {
727
- case 6:
728
- break;
729
- case 5: {
730
- collectWeekData.push(item);
731
- var obj = {
732
- o: collectWeekData[0]["o"],
733
- c: collectWeekData[collectWeekData.length - 1]["c"],
734
- t: collectWeekData[collectWeekData.length - 1]["t"],
735
- h: Math.max.apply(Math, collectWeekData.map(function (item) { return item.h; })),
736
- l: Math.min.apply(Math, collectWeekData.map(function (item) { return item.l; })),
737
- };
738
- res.push(addDetail(obj, collectWeekData, detail));
739
- collectWeekData = [];
740
- break;
841
+ var Rsi = /** @class */ (function () {
842
+ function Rsi() {
843
+ }
844
+ Object.defineProperty(Rsi.prototype, "getAllRsi", {
845
+ enumerable: false,
846
+ configurable: true,
847
+ writable: true,
848
+ value: function (list) {
849
+ var res = [];
850
+ var rsi6 = this.getRsi6(list);
851
+ var rsi12 = this.getRsi12(list);
852
+ for (var i = 0; i < list.length; i++) {
853
+ res[i] = Object.assign(list[i], rsi6[i], rsi12[i]);
741
854
  }
742
- case 1:
743
- if (collectWeekData.length !== 0) {
744
- var obj = {
745
- o: collectWeekData[0]["o"],
746
- c: collectWeekData[collectWeekData.length - 1]["c"],
747
- t: collectWeekData[collectWeekData.length - 1]["t"],
748
- h: Math.max.apply(Math, collectWeekData.map(function (item) { return item.h; })),
749
- l: Math.min.apply(Math, collectWeekData.map(function (item) { return item.l; })),
750
- };
751
- res.push(addDetail(obj, collectWeekData, detail));
752
- }
753
- collectWeekData = [];
754
- collectWeekData.push(item);
755
- break;
756
- default:
757
- collectWeekData.push(item);
758
- if (list.length - 1 === index) {
759
- var obj = {
760
- o: collectWeekData[0]["o"],
761
- c: collectWeekData[collectWeekData.length - 1]["c"],
762
- t: collectWeekData[collectWeekData.length - 1]["t"],
763
- h: Math.max.apply(Math, collectWeekData.map(function (item) { return item.h; })),
764
- l: Math.min.apply(Math, collectWeekData.map(function (item) { return item.l; })),
765
- };
766
- res.push(addDetail(obj, collectWeekData, detail));
767
- }
768
- break;
855
+ return res;
769
856
  }
770
857
  });
771
- return res;
772
- }
773
-
774
- var Gold = /** @class */ (function () {
775
- function Gold() {
776
- }
777
- Object.defineProperty(Gold.prototype, "findHighPoint", {
858
+ Object.defineProperty(Rsi.prototype, "getRsi6", {
778
859
  enumerable: false,
779
860
  configurable: true,
780
861
  writable: true,
781
862
  value: function (list) {
782
- var weekLine = getWeekLine(list, true);
783
- var hightPoints = {};
784
- var _loop_1 = function (i) {
785
- var hightPoint = undefined;
786
- switch (i) {
787
- case 0:
788
- {
789
- var h1 = weekLine[i].h;
790
- var h2 = weekLine[i + 1].h;
791
- var h3 = weekLine[i + 2].h;
792
- if (h1 > h2 && h1 > h3)
793
- hightPoint = weekLine[i];
794
- }
795
- break;
796
- case 1:
797
- {
798
- var h1 = weekLine[i - 1].h;
799
- var h2 = weekLine[i].h;
800
- var h3 = weekLine[i + 1].h;
801
- var h4 = weekLine[i + 2].h;
802
- if (h2 > h1 && h2 > h3 && h2 > h4)
803
- hightPoint = weekLine[i];
804
- }
805
- break;
806
- case weekLine.length - 3:
807
- {
808
- var h1 = weekLine[i - 2].h;
809
- var h2 = weekLine[i - 1].h;
810
- var h3 = weekLine[i].h;
811
- var h4 = weekLine[i + 1].h;
812
- var h5 = weekLine[i + 2].h;
813
- if (h3 > h1 && h3 > h2 && h3 > h4 && h3 > h5)
814
- hightPoint = weekLine[i];
815
- }
816
- break;
817
- case weekLine.length - 2:
818
- {
819
- var h1 = weekLine[i - 2].h;
820
- var h2 = weekLine[i - 1].h;
821
- var h3 = weekLine[i].h;
822
- var h4 = weekLine[i + 1].h;
823
- if (h3 > h1 && h3 > h2 && h3 > h4)
824
- hightPoint = weekLine[i];
825
- }
826
- break;
827
- case weekLine.length - 1:
828
- {
829
- var h1 = weekLine[i - 2].h;
830
- var h2 = weekLine[i - 1].h;
831
- var h3 = weekLine[i].h;
832
- if (h3 > h2 && h3 > h1)
833
- hightPoint = weekLine[i];
834
- }
835
- break;
836
- default:
837
- {
838
- var h1 = weekLine[i - 2].h;
839
- var h2 = weekLine[i - 1].h;
840
- var h3 = weekLine[i].h;
841
- var h4 = weekLine[i + 1].h;
842
- var h5 = weekLine[i + 2].h;
843
- var h6 = weekLine[i + 3].h;
844
- if (h3 > h2 && h3 > h4 && h3 > h5 && h3 > h6)
845
- hightPoint = weekLine[i];
846
- if (h3 > h1 && h3 > h2 && h3 > h4 && h3 > h5)
847
- hightPoint = weekLine[i];
848
- }
849
- break;
850
- }
851
- if (hightPoint && hightPoint["detail"]) {
852
- var h_1 = hightPoint.h;
853
- var theHight = hightPoint.detail.find(function (item) { return item.h === h_1; });
854
- delete hightPoint.detail;
855
- if (theHight)
856
- hightPoints[theHight === null || theHight === void 0 ? void 0 : theHight.t] = theHight;
863
+ var res = [];
864
+ // 前5筆
865
+ for (var i = 0; i < 5; i++) {
866
+ res[i] = __assign$1(__assign$1({}, list[i]), { rsi6: undefined });
867
+ }
868
+ // 第6筆Rsi
869
+ var beforeUpAvg = this.getStartUpAvg(list, 6);
870
+ var beforeDownAvg = this.getStartDownAvg(list, 6);
871
+ var firstRsi6 = this.getRsi(beforeUpAvg, beforeDownAvg);
872
+ res[5] = __assign$1(__assign$1({}, list[5]), { rsi6: firstRsi6 });
873
+ // else
874
+ for (var i = 6; i < list.length; i++) {
875
+ var minusU = 0;
876
+ var minusD = 0;
877
+ var minusC = list[i]["c"] - list[i - 1]["c"];
878
+ if (minusC > 0) {
879
+ minusU = minusC;
857
880
  }
858
- };
859
- for (var i = 0; i < weekLine.length; i++) {
860
- _loop_1(i);
881
+ else {
882
+ minusD = minusC;
883
+ }
884
+ beforeUpAvg = (beforeUpAvg * 5) / 6 + minusU / 6;
885
+ beforeDownAvg = (beforeDownAvg * 5) / 6 + Math.abs(minusD) / 6;
886
+ var rsi6 = this.getRsi(beforeUpAvg, beforeDownAvg);
887
+ res[i] = __assign$1(__assign$1({}, list[i]), { rsi6: Math.round(rsi6 * 100) / 100 });
861
888
  }
862
- return hightPoints;
889
+ return res;
863
890
  }
864
891
  });
865
- Object.defineProperty(Gold.prototype, "findLowPoint", {
892
+ Object.defineProperty(Rsi.prototype, "getRsi12", {
866
893
  enumerable: false,
867
894
  configurable: true,
868
895
  writable: true,
869
896
  value: function (list) {
870
- var weekLine = getWeekLine(list, true);
871
- var lowPoints = {};
872
- var _loop_2 = function (i) {
873
- var lowPoint = undefined;
874
- switch (i) {
875
- case 0:
876
- {
877
- var l1 = weekLine[i].l;
878
- var l2 = weekLine[i + 1].l;
879
- var l3 = weekLine[i + 2].l;
880
- if (l1 < l2 && l1 < l3)
881
- lowPoint = weekLine[i];
882
- }
883
- break;
884
- case 1:
885
- {
886
- var l1 = weekLine[i - 1].l;
887
- var l2 = weekLine[i].l;
888
- var l3 = weekLine[i + 1].l;
889
- var l4 = weekLine[i + 2].l;
890
- if (l2 < l1 && l2 < l3 && l2 < l4)
891
- lowPoint = weekLine[i];
892
- }
893
- break;
894
- case weekLine.length - 3:
895
- {
896
- var l1 = weekLine[i - 2].l;
897
- var l2 = weekLine[i - 1].l;
898
- var l3 = weekLine[i].l;
899
- var l4 = weekLine[i + 1].l;
900
- var l5 = weekLine[i + 2].l;
901
- if (l3 < l1 && l3 < l2 && l3 < l4 && l3 < l5)
902
- lowPoint = weekLine[i];
903
- }
904
- break;
905
- case weekLine.length - 2:
906
- {
907
- var l1 = weekLine[i - 2].l;
908
- var l2 = weekLine[i - 1].l;
909
- var l3 = weekLine[i].l;
910
- var l4 = weekLine[i + 1].l;
911
- if (l3 < l1 && l3 < l2 && l3 < l4)
912
- lowPoint = weekLine[i];
913
- }
914
- break;
915
- case weekLine.length - 1:
916
- {
917
- var l1 = weekLine[i - 2].l;
918
- var l2 = weekLine[i - 1].l;
919
- var l3 = weekLine[i].l;
920
- if (l3 < l2 && l3 < l1)
921
- lowPoint = weekLine[i];
922
- }
923
- break;
924
- default:
925
- {
926
- var l1 = weekLine[i - 2].l;
927
- var l2 = weekLine[i - 1].l;
928
- var l3 = weekLine[i].l;
929
- var l4 = weekLine[i + 1].l;
930
- var l5 = weekLine[i + 2].l;
931
- var l6 = weekLine[i + 3].l;
932
- if (l3 < l2 && l3 < l4 && l3 < l5 && l3 < l6)
933
- lowPoint = weekLine[i];
934
- if (l3 < l1 && l3 < l2 && l3 < l4 && l3 < l5)
935
- lowPoint = weekLine[i];
936
- }
937
- break;
897
+ var res = [];
898
+ // 前11筆
899
+ for (var i = 0; i < 11; i++) {
900
+ res[i] = __assign$1(__assign$1({}, list[i]), { rsi12: undefined });
901
+ }
902
+ // 第12筆Rsi
903
+ var beforeUpAvg = this.getStartUpAvg(list, 12);
904
+ var beforeDownAvg = this.getStartDownAvg(list, 12);
905
+ var firstRsi12 = this.getRsi(beforeUpAvg, beforeDownAvg);
906
+ res[11] = __assign$1(__assign$1({}, list[11]), { rsi12: firstRsi12 });
907
+ // else
908
+ for (var i = 12; i < list.length; i++) {
909
+ var minusU = 0;
910
+ var minusD = 0;
911
+ var minusC = list[i]["c"] - list[i - 1]["c"];
912
+ if (minusC > 0) {
913
+ minusU = minusC;
938
914
  }
939
- if (lowPoint && lowPoint["detail"]) {
940
- var l_1 = lowPoint.l;
941
- var theLow = lowPoint.detail.find(function (item) { return item.l === l_1; });
942
- delete lowPoint.detail;
943
- if (theLow)
944
- lowPoints[theLow === null || theLow === void 0 ? void 0 : theLow.t] = theLow;
915
+ else {
916
+ minusD = minusC;
945
917
  }
946
- };
947
- for (var i = 0; i < weekLine.length; i++) {
948
- _loop_2(i);
918
+ beforeUpAvg = (beforeUpAvg * 11) / 12 + minusU / 12;
919
+ beforeDownAvg = (beforeDownAvg * 11) / 12 + Math.abs(minusD) / 12;
920
+ var rsi12 = this.getRsi(beforeUpAvg, beforeDownAvg);
921
+ res[i] = __assign$1(__assign$1({}, list[i]), { rsi12: Math.round(rsi12 * 100) / 100 });
949
922
  }
950
- return lowPoints;
923
+ return res;
951
924
  }
952
925
  });
953
- Object.defineProperty(Gold.prototype, "getGold", {
926
+ Object.defineProperty(Rsi.prototype, "getStartUpAvg", {
954
927
  enumerable: false,
955
928
  configurable: true,
956
929
  writable: true,
957
- value: function (list) {
958
- var hightPoints = this.findHighPoint(list);
959
- var lowPoints = this.findLowPoint(list);
960
- var lastHightPointDate = Object.keys(hightPoints).slice(-1)[0] !==
961
- list[list.length - 1].t.toString()
962
- ? Object.keys(hightPoints).slice(-1)[0]
963
- : Object.keys(hightPoints).slice(-2)[0];
964
- var lastLowPointDate = Object.keys(lowPoints).slice(-1)[0] !== list[list.length - 1].t.toString()
965
- ? Object.keys(lowPoints).slice(-1)[0]
966
- : Object.keys(lowPoints).slice(-2)[0];
967
- var highestPoint = hightPoints[lastHightPointDate].h;
968
- var lowestPoint = lowPoints[lastLowPointDate].l;
969
- var res = {
970
- highestPointDate: parseInt(lastHightPointDate),
971
- lowestPointDate: parseInt(lastLowPointDate),
972
- lowestPoint: lowestPoint,
973
- highestPoint: highestPoint,
974
- superStrong: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.191) * 100) / 100,
975
- strong: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.382) * 100) / 100,
976
- middle: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.5) * 100) /
977
- 100,
978
- weak: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.618) * 100) / 100,
979
- superWeak: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.809) * 100) / 100,
980
- };
930
+ value: function (list, count) {
931
+ var start = list.slice(0, 5);
932
+ var sum = 0;
933
+ for (var i = 1; i < start.length; i++) {
934
+ var minus = start[i]["c"] - start[i - 1]["c"];
935
+ if (minus > 0) {
936
+ sum += minus;
937
+ }
938
+ }
939
+ return sum / count;
940
+ }
941
+ });
942
+ Object.defineProperty(Rsi.prototype, "getStartDownAvg", {
943
+ enumerable: false,
944
+ configurable: true,
945
+ writable: true,
946
+ value: function (list, count) {
947
+ var start = list.slice(0, 5);
948
+ var sum = 0;
949
+ for (var i = 1; i < start.length; i++) {
950
+ var minus = start[i]["c"] - start[i - 1]["c"];
951
+ if (minus < 0) {
952
+ sum += minus;
953
+ }
954
+ }
955
+ return Math.abs(sum / count);
956
+ }
957
+ });
958
+ Object.defineProperty(Rsi.prototype, "getRsi", {
959
+ enumerable: false,
960
+ configurable: true,
961
+ writable: true,
962
+ value: function (UpAvg, DownAvg) {
963
+ var res = 0;
964
+ if (UpAvg + DownAvg !== 0) {
965
+ res = (UpAvg / (UpAvg + DownAvg)) * 100;
966
+ }
981
967
  return res;
982
968
  }
983
969
  });
984
- return Gold;
970
+ return Rsi;
985
971
  }());
986
972
 
987
973
  var Mode;
@@ -1039,7 +1025,91 @@
1039
1025
  }
1040
1026
  }
1041
1027
 
1028
+ var __assign = (undefined && undefined.__assign) || function () {
1029
+ __assign = Object.assign || function(t) {
1030
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
1031
+ s = arguments[i];
1032
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
1033
+ t[p] = s[p];
1034
+ }
1035
+ return t;
1036
+ };
1037
+ return __assign.apply(this, arguments);
1038
+ };
1039
+ var Williams = /** @class */ (function () {
1040
+ function Williams() {
1041
+ }
1042
+ Object.defineProperty(Williams.prototype, "getAllWillams", {
1043
+ enumerable: false,
1044
+ configurable: true,
1045
+ writable: true,
1046
+ value: function (list) {
1047
+ var res = [];
1048
+ var williams9 = this.getWilliams9(list);
1049
+ var williams18 = this.getWilliams18(list);
1050
+ for (var i = 0; i < list.length; i++) {
1051
+ res[i] = Object.assign(list[i], williams9[i], williams18[i]);
1052
+ }
1053
+ return res;
1054
+ }
1055
+ });
1056
+ Object.defineProperty(Williams.prototype, "getWilliams9", {
1057
+ enumerable: false,
1058
+ configurable: true,
1059
+ writable: true,
1060
+ value: function (list) {
1061
+ var res = [];
1062
+ for (var i = 0; i < list.length; i++) {
1063
+ if (i < 9)
1064
+ res[i] = __assign(__assign({}, list[i]), { williams9: undefined });
1065
+ else {
1066
+ var maxList = list.slice(i - 8, i).map(function (item) { return item["h"]; });
1067
+ var minList = list.slice(i - 8, i).map(function (item) { return item["l"]; });
1068
+ var max = Math.max.apply(Math, maxList);
1069
+ var min = Math.min.apply(Math, minList);
1070
+ var close_1 = list[i]["c"];
1071
+ var williams9 = ((max - close_1) / (max - min)) * -100;
1072
+ res[i] = __assign(__assign({}, list[i]), { williams9: Math.round(williams9 * 100) / 100 });
1073
+ }
1074
+ }
1075
+ return res;
1076
+ }
1077
+ });
1078
+ Object.defineProperty(Williams.prototype, "getWilliams18", {
1079
+ enumerable: false,
1080
+ configurable: true,
1081
+ writable: true,
1082
+ value: function (list) {
1083
+ var res = [];
1084
+ for (var i = 0; i < list.length; i++) {
1085
+ if (i < 18)
1086
+ res[i] = __assign(__assign({}, list[i]), { williams9: undefined });
1087
+ else {
1088
+ var maxList = list.slice(i - 17, i).map(function (item) { return item["h"]; });
1089
+ var minList = list.slice(i - 17, i).map(function (item) { return item["l"]; });
1090
+ var max = Math.max.apply(Math, maxList);
1091
+ var min = Math.min.apply(Math, minList);
1092
+ var close_2 = list[i]["c"];
1093
+ var williams18 = ((max - close_2) / (max - min)) * -100;
1094
+ res[i] = __assign(__assign({}, list[i]), { williams18: Math.round(williams18 * 100) / 100 });
1095
+ }
1096
+ }
1097
+ return res;
1098
+ }
1099
+ });
1100
+ return Williams;
1101
+ }());
1102
+
1103
+ function add(a, b) {
1104
+ return a + b;
1105
+ }
1106
+
1107
+ function minus(a, b) {
1108
+ return a - b;
1109
+ }
1110
+
1042
1111
  exports.Gold = Gold;
1112
+ exports.Kd = Kd;
1043
1113
  exports.Ma = Ma;
1044
1114
  exports.Macd = MACD;
1045
1115
  exports.Rsi = Rsi;