@ch20026103/anysis 0.0.3-alpha → 0.0.6-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/slope.test.js +6 -0
  6. package/dist/cjs/analyze/TimeSeries/R/index.d.ts +1 -1
  7. package/dist/cjs/index.d.ts +3 -0
  8. package/dist/cjs/index.js +7 -1
  9. package/dist/cjs/stockSkills/boll.d.ts +58 -0
  10. package/dist/cjs/stockSkills/boll.js +101 -0
  11. package/dist/cjs/stockSkills/boll.test.d.ts +1 -0
  12. package/dist/cjs/stockSkills/boll.test.js +36 -0
  13. package/dist/cjs/stockSkills/ema.d.ts +9 -0
  14. package/dist/cjs/stockSkills/ema.js +41 -0
  15. package/dist/cjs/stockSkills/ema.test.d.ts +1 -0
  16. package/dist/cjs/stockSkills/ema.test.js +11 -0
  17. package/dist/cjs/stockSkills/gold.d.ts +4 -4
  18. package/dist/cjs/stockSkills/kd.d.ts +41 -14
  19. package/dist/cjs/stockSkills/kd.js +60 -6
  20. package/dist/cjs/stockSkills/kd.test.js +34 -2
  21. package/dist/cjs/stockSkills/ma.d.ts +49 -30
  22. package/dist/cjs/stockSkills/ma.js +37 -44
  23. package/dist/cjs/stockSkills/ma.test.js +15 -20
  24. package/dist/cjs/stockSkills/macd.d.ts +62 -16
  25. package/dist/cjs/stockSkills/macd.js +92 -5
  26. package/dist/cjs/stockSkills/macd.test.js +26 -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 +8 -8
  32. package/dist/cjs/stockSkills/rsi.js +2 -2
  33. package/dist/cjs/stockSkills/utils/getWeekLine.d.ts +2 -2
  34. package/dist/cjs/stockSkills/williams.d.ts +8 -8
  35. package/dist/cjs/stockSkills/williams.js +2 -2
  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/slope.test.js +6 -0
  41. package/dist/esm/analyze/TimeSeries/R/index.d.ts +1 -1
  42. package/dist/esm/index.d.ts +3 -0
  43. package/dist/esm/index.js +3 -0
  44. package/dist/esm/stockSkills/boll.d.ts +58 -0
  45. package/dist/esm/stockSkills/boll.js +99 -0
  46. package/dist/esm/stockSkills/boll.test.d.ts +1 -0
  47. package/dist/esm/stockSkills/boll.test.js +34 -0
  48. package/dist/esm/stockSkills/ema.d.ts +9 -0
  49. package/dist/esm/stockSkills/ema.js +39 -0
  50. package/dist/esm/stockSkills/ema.test.d.ts +1 -0
  51. package/dist/esm/stockSkills/ema.test.js +9 -0
  52. package/dist/esm/stockSkills/gold.d.ts +4 -4
  53. package/dist/esm/stockSkills/kd.d.ts +41 -14
  54. package/dist/esm/stockSkills/kd.js +60 -6
  55. package/dist/esm/stockSkills/kd.test.js +34 -2
  56. package/dist/esm/stockSkills/ma.d.ts +49 -30
  57. package/dist/esm/stockSkills/ma.js +37 -44
  58. package/dist/esm/stockSkills/ma.test.js +15 -20
  59. package/dist/esm/stockSkills/macd.d.ts +62 -16
  60. package/dist/esm/stockSkills/macd.js +92 -5
  61. package/dist/esm/stockSkills/macd.test.js +26 -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 +8 -8
  67. package/dist/esm/stockSkills/rsi.js +2 -2
  68. package/dist/esm/stockSkills/utils/getWeekLine.d.ts +2 -2
  69. package/dist/esm/stockSkills/williams.d.ts +8 -8
  70. package/dist/esm/stockSkills/williams.js +2 -2
  71. package/dist/umd/index.js +458 -96
  72. package/package.json +15 -17
package/dist/umd/index.js CHANGED
@@ -174,8 +174,8 @@
174
174
  return nextYearForecast;
175
175
  }
176
176
 
177
- var __assign$5 = (undefined && undefined.__assign) || function () {
178
- __assign$5 = Object.assign || function(t) {
177
+ var __assign$7 = (undefined && undefined.__assign) || function () {
178
+ __assign$7 = Object.assign || function(t) {
179
179
  for (var s, i = 1, n = arguments.length; i < n; i++) {
180
180
  s = arguments[i];
181
181
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
@@ -183,13 +183,13 @@
183
183
  }
184
184
  return t;
185
185
  };
186
- return __assign$5.apply(this, arguments);
186
+ return __assign$7.apply(this, arguments);
187
187
  };
188
188
  function addDetail(obj, list, detail) {
189
189
  if (detail)
190
- return __assign$5(__assign$5({}, obj), { detail: list });
190
+ return __assign$7(__assign$7({}, obj), { detail: list });
191
191
  else
192
- return __assign$5({}, obj);
192
+ return __assign$7({}, obj);
193
193
  }
194
194
  function getWeekLine(list, detail) {
195
195
  var res = [];
@@ -460,8 +460,8 @@
460
460
  return Gold;
461
461
  }());
462
462
 
463
- var __assign$4 = (undefined && undefined.__assign) || function () {
464
- __assign$4 = Object.assign || function(t) {
463
+ var __assign$6 = (undefined && undefined.__assign) || function () {
464
+ __assign$6 = Object.assign || function(t) {
465
465
  for (var s, i = 1, n = arguments.length; i < n; i++) {
466
466
  s = arguments[i];
467
467
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
@@ -469,11 +469,65 @@
469
469
  }
470
470
  return t;
471
471
  };
472
- return __assign$4.apply(this, arguments);
472
+ return __assign$6.apply(this, arguments);
473
473
  };
474
474
  var Kd = /** @class */ (function () {
475
475
  function Kd() {
476
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: null,
485
+ k: null,
486
+ d: null,
487
+ "k-d": null,
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: null,
501
+ k: null,
502
+ d: null,
503
+ "k-d": null,
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
+ });
477
531
  Object.defineProperty(Kd.prototype, "getRSV", {
478
532
  enumerable: false,
479
533
  configurable: true,
@@ -482,14 +536,14 @@
482
536
  var res = [];
483
537
  for (var i = 0; i < list.length; i++) {
484
538
  if (i < 8)
485
- res[i] = __assign$4(__assign$4({}, list[i]), { rsv: undefined });
539
+ res[i] = __assign$6(__assign$6({}, list[i]), { rsv: null });
486
540
  else {
487
541
  var low = Math.min.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.l; }));
488
542
  var hight = Math.max.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.h; }));
489
- var close_1 = list[i].c;
490
- var rsv = ((close_1 - low) / (hight - low)) * 100;
543
+ var close_2 = list[i].c;
544
+ var rsv = ((close_2 - low) / (hight - low)) * 100;
491
545
  rsv = Math.round(rsv * 100) / 100;
492
- res[i] = __assign$4(__assign$4({}, list[i]), { rsv: rsv });
546
+ res[i] = __assign$6(__assign$6({}, list[i]), { rsv: rsv });
493
547
  }
494
548
  }
495
549
  return res;
@@ -505,12 +559,12 @@
505
559
  var yesterdayD = 50;
506
560
  for (var i = 0; i < list.length; i++) {
507
561
  if (i < 8)
508
- res[i] = __assign$4(__assign$4({}, list[i]), { rsv: undefined, k: undefined, d: undefined, "k-d": undefined });
562
+ res[i] = __assign$6(__assign$6({}, list[i]), { rsv: null, k: null, d: null, "k-d": null });
509
563
  else {
510
564
  var low = Math.min.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.l; }));
511
565
  var hight = Math.max.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.h; }));
512
- var close_2 = list[i].c;
513
- var rsv = ((close_2 - low) / (hight - low)) * 100;
566
+ var close_3 = list[i].c;
567
+ var rsv = ((close_3 - low) / (hight - low)) * 100;
514
568
  rsv = Math.round(rsv * 100) / 100;
515
569
  var k = (2 / 3) * yesterdayK + (1 / 3) * rsv;
516
570
  var d = (2 / 3) * yesterdayD + (1 / 3) * k;
@@ -518,7 +572,7 @@
518
572
  k = Math.round(k * 100) / 100;
519
573
  d = Math.round(d * 100) / 100;
520
574
  k_d = Math.round(k_d * 100) / 100;
521
- res[i] = __assign$4(__assign$4({}, list[i]), { rsv: rsv, k: k, d: d, "k-d": k_d });
575
+ res[i] = __assign$6(__assign$6({}, list[i]), { rsv: rsv, k: k, d: d, "k-d": k_d });
522
576
  yesterdayK = k;
523
577
  yesterdayD = d;
524
578
  }
@@ -529,8 +583,8 @@
529
583
  return Kd;
530
584
  }());
531
585
 
532
- var __assign$3 = (undefined && undefined.__assign) || function () {
533
- __assign$3 = Object.assign || function(t) {
586
+ var __assign$5 = (undefined && undefined.__assign) || function () {
587
+ __assign$5 = Object.assign || function(t) {
534
588
  for (var s, i = 1, n = arguments.length; i < n; i++) {
535
589
  s = arguments[i];
536
590
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
@@ -538,11 +592,38 @@
538
592
  }
539
593
  return t;
540
594
  };
541
- return __assign$3.apply(this, arguments);
595
+ return __assign$5.apply(this, arguments);
542
596
  };
543
597
  var Ma = /** @class */ (function () {
544
598
  function Ma() {
545
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
+ });
546
627
  Object.defineProperty(Ma.prototype, "getAllMa", {
547
628
  enumerable: false,
548
629
  configurable: true,
@@ -553,9 +634,8 @@
553
634
  var responseMa10 = this.getMa10(list);
554
635
  var responseMa20 = this.getMa20(list);
555
636
  var responseMa60 = this.getMa60(list);
556
- var responseBoll = this.getBoll(list);
557
637
  for (var i = 0; i < list.length; i++) {
558
- res[i] = Object.assign(list[i], responseMa5[i], responseMa10[i], responseMa20[i], responseMa60[i], responseBoll[i]);
638
+ res[i] = Object.assign(list[i], responseMa5[i], responseMa10[i], responseMa20[i], responseMa60[i]);
559
639
  }
560
640
  return res;
561
641
  }
@@ -568,13 +648,13 @@
568
648
  var res = [];
569
649
  for (var i = 0; i < list.length; i++) {
570
650
  if (i < 4)
571
- res[i] = __assign$3(__assign$3({}, list[i]), { ma5: undefined });
651
+ res[i] = __assign$5(__assign$5({}, list[i]), { ma5: null });
572
652
  else {
573
653
  var sum = list
574
654
  .slice(i - 4, i + 1)
575
655
  .reduce(function (pre, current) { return pre + current.c; }, 0);
576
656
  var ma5 = Math.round((sum / 5) * 100) / 100;
577
- res[i] = __assign$3(__assign$3({}, list[i]), { ma5: ma5 });
657
+ res[i] = __assign$5(__assign$5({}, list[i]), { ma5: ma5 });
578
658
  }
579
659
  }
580
660
  return res;
@@ -588,13 +668,13 @@
588
668
  var res = [];
589
669
  for (var i = 0; i < list.length; i++) {
590
670
  if (i < 9)
591
- res[i] = __assign$3(__assign$3({}, list[i]), { ma10: undefined });
671
+ res[i] = __assign$5(__assign$5({}, list[i]), { ma10: null });
592
672
  else {
593
673
  var sum = list
594
674
  .slice(i - 9, i + 1)
595
675
  .reduce(function (pre, current) { return pre + current.c; }, 0);
596
676
  var ma10 = Math.round((sum / 10) * 100) / 100;
597
- res[i] = __assign$3(__assign$3({}, list[i]), { ma10: ma10 });
677
+ res[i] = __assign$5(__assign$5({}, list[i]), { ma10: ma10 });
598
678
  }
599
679
  }
600
680
  return res;
@@ -608,13 +688,13 @@
608
688
  var res = [];
609
689
  for (var i = 0; i < list.length; i++) {
610
690
  if (i < 19)
611
- res[i] = __assign$3(__assign$3({}, list[i]), { ma20: undefined });
691
+ res[i] = __assign$5(__assign$5({}, list[i]), { ma20: null });
612
692
  else {
613
693
  var sum = list
614
694
  .slice(i - 19, i + 1)
615
695
  .reduce(function (pre, current) { return pre + current.c; }, 0);
616
696
  var ma20 = Math.round((sum / 20) * 100) / 100;
617
- res[i] = __assign$3(__assign$3({}, list[i]), { ma20: ma20 });
697
+ res[i] = __assign$5(__assign$5({}, list[i]), { ma20: ma20 });
618
698
  }
619
699
  }
620
700
  return res;
@@ -628,76 +708,43 @@
628
708
  var res = [];
629
709
  for (var i = 0; i < list.length; i++) {
630
710
  if (i < 59)
631
- res[i] = __assign$3(__assign$3({}, list[i]), { ma60: undefined });
711
+ res[i] = __assign$5(__assign$5({}, list[i]), { ma60: null });
632
712
  else {
633
713
  var sum = list
634
714
  .slice(i - 59, i + 1)
635
715
  .reduce(function (pre, current) { return pre + current.c; }, 0);
636
716
  var ma60 = Math.round((sum / 60) * 100) / 100;
637
- res[i] = __assign$3(__assign$3({}, list[i]), { ma60: ma60 });
717
+ res[i] = __assign$5(__assign$5({}, list[i]), { ma60: ma60 });
638
718
  }
639
719
  }
640
720
  return res;
641
721
  }
642
722
  });
643
- Object.defineProperty(Ma.prototype, "getMaSelf", {
723
+ Object.defineProperty(Ma.prototype, "getMa", {
644
724
  enumerable: false,
645
725
  configurable: true,
646
726
  writable: true,
647
727
  value: function (list, self) {
648
728
  var res = [];
649
729
  for (var i = 0; i < list.length; i++) {
650
- if (i < (self - 1))
651
- res[i] = __assign$3(__assign$3({}, list[i]), { maSelf: undefined });
730
+ if (i < self - 1)
731
+ res[i] = __assign$5(__assign$5({}, list[i]), { ma: null });
652
732
  else {
653
733
  var sum = list
654
734
  .slice(i - (self - 1), i + 1)
655
735
  .reduce(function (pre, current) { return pre + current.c; }, 0);
656
- var maSelf = Math.round((sum / self) * 100) / 100;
657
- res[i] = __assign$3(__assign$3({}, list[i]), { maSelf: maSelf });
736
+ var ma = Math.round((sum / self) * 100) / 100;
737
+ res[i] = __assign$5(__assign$5({}, list[i]), { ma: ma });
658
738
  }
659
739
  }
660
740
  return res;
661
741
  }
662
742
  });
663
- Object.defineProperty(Ma.prototype, "getBoll", {
664
- enumerable: false,
665
- configurable: true,
666
- writable: true,
667
- value: function (list) {
668
- var res = [];
669
- var _loop_1 = function (i) {
670
- if (i < 24)
671
- res[i] = __assign$3(__assign$3({}, list[i]), { ma25: undefined, bollUb: undefined, bollLb: undefined });
672
- else {
673
- // ma25
674
- var sumMa25 = list
675
- .slice(i - 24, i + 1)
676
- .reduce(function (pre, current) { return pre + current.c; }, 0);
677
- var ma25_1 = Math.round((sumMa25 / 25) * 100) / 100;
678
- // 標準差
679
- var sumBase = res
680
- .slice(i - 24, i + 1)
681
- .reduce(function (pre, current) {
682
- return ma25_1 !== undefined
683
- ? pre + Math.pow(current.c - ma25_1, 2)
684
- : pre;
685
- }, 0);
686
- var base = Math.round(Math.sqrt(sumBase / 25) * 100) / 100;
687
- res[i] = __assign$3(__assign$3({}, list[i]), { ma25: ma25_1, bollUb: ma25_1 + 2 * base, bollLb: ma25_1 - 2 * base });
688
- }
689
- };
690
- for (var i = 0; i < list.length; i++) {
691
- _loop_1(i);
692
- }
693
- return res;
694
- }
695
- });
696
743
  return Ma;
697
744
  }());
698
745
 
699
- var __assign$2 = (undefined && undefined.__assign) || function () {
700
- __assign$2 = Object.assign || function(t) {
746
+ var __assign$4 = (undefined && undefined.__assign) || function () {
747
+ __assign$4 = Object.assign || function(t) {
701
748
  for (var s, i = 1, n = arguments.length; i < n; i++) {
702
749
  s = arguments[i];
703
750
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
@@ -705,11 +752,98 @@
705
752
  }
706
753
  return t;
707
754
  };
708
- return __assign$2.apply(this, arguments);
755
+ return __assign$4.apply(this, arguments);
709
756
  };
710
757
  var MACD = /** @class */ (function () {
711
758
  function MACD() {
712
759
  }
760
+ Object.defineProperty(MACD.prototype, "init", {
761
+ enumerable: false,
762
+ configurable: true,
763
+ writable: true,
764
+ value: function (data) {
765
+ return {
766
+ dataset: [data],
767
+ ema12: null,
768
+ ema26: null,
769
+ dif: [],
770
+ macd: null,
771
+ osc: null,
772
+ };
773
+ }
774
+ });
775
+ Object.defineProperty(MACD.prototype, "next", {
776
+ enumerable: false,
777
+ configurable: true,
778
+ writable: true,
779
+ value: function (data, preList) {
780
+ var _a, _b;
781
+ preList.dataset.push(data);
782
+ if (preList.dataset.length > 34)
783
+ preList.dataset.shift();
784
+ // EMA12
785
+ var ema12 = null;
786
+ if (preList.dataset.length === 12) {
787
+ ema12 = this.getStartEMA(preList.dataset);
788
+ ema12 = (ema12 * 11) / 13 + (this.getDI(data) * 2) / 13;
789
+ ema12 = Math.round(ema12 * 100) / 100;
790
+ }
791
+ else if (preList.dataset.length > 12 && preList.ema12) {
792
+ ema12 = (preList.ema12 * 11) / 13 + (this.getDI(data) * 2) / 13;
793
+ ema12 = Math.round(ema12 * 100) / 100;
794
+ }
795
+ // EMA26
796
+ var ema26 = null;
797
+ if (preList.dataset.length === 26) {
798
+ ema26 = this.getStartEMA(preList.dataset);
799
+ ema26 = (ema26 * 25) / 27 + (this.getDI(data) * 2) / 27;
800
+ ema26 = Math.round(ema26 * 100) / 100;
801
+ }
802
+ else if (preList.dataset.length > 26 && preList.ema26) {
803
+ ema26 = (preList.ema26 * 25) / 27 + (this.getDI(data) * 2) / 27;
804
+ ema26 = Math.round(ema26 * 100) / 100;
805
+ }
806
+ // DIF
807
+ var dif = null;
808
+ if (ema12 && ema26) {
809
+ dif = ema12 - ema26;
810
+ dif = Math.round(dif * 100) / 100;
811
+ (_a = preList.dif) === null || _a === void 0 ? void 0 : _a.push(dif);
812
+ if (preList.dif.length > 9)
813
+ (_b = preList.dif) === null || _b === void 0 ? void 0 : _b.shift();
814
+ }
815
+ // MACD & OSC
816
+ var macd = null;
817
+ var osc = null;
818
+ if (preList.dif.length === 9) {
819
+ if (preList.macd === null) {
820
+ macd = preList.dif.reduce(function (accumulator, currentValue) { return accumulator + currentValue; });
821
+ for (var i = 0; i < 9; i++) {
822
+ var item = preList.dif[i];
823
+ macd = macd + ((item - macd) * 2) / 10;
824
+ macd = Math.round(macd * 100) / 100;
825
+ osc = item - macd;
826
+ osc = Math.round(osc * 100) / 100;
827
+ }
828
+ }
829
+ else {
830
+ macd = preList.macd + ((dif - preList.macd) * 2) / 10;
831
+ macd = Math.round(macd * 100) / 100;
832
+ var item = preList.dif[preList.dif.length - 1];
833
+ osc = item - macd;
834
+ osc = Math.round(osc * 100) / 100;
835
+ }
836
+ }
837
+ return {
838
+ dataset: preList.dataset,
839
+ ema12: ema12,
840
+ ema26: ema26,
841
+ dif: preList.dif,
842
+ macd: macd,
843
+ osc: osc,
844
+ };
845
+ }
846
+ });
713
847
  Object.defineProperty(MACD.prototype, "getMACD", {
714
848
  enumerable: false,
715
849
  configurable: true,
@@ -722,7 +856,7 @@
722
856
  var DIF = this.getDIF(list, EMA12, EMA26);
723
857
  var MACD9 = this.getMACD9(list, DIF);
724
858
  for (var i = 0; i < list.length; i++) {
725
- res[i] = Object.assign(list[i], DIF[i], MACD9[i]);
859
+ res[i] = Object.assign(list[i], DIF[i], MACD9[i], EMA12[i], EMA26[i]);
726
860
  }
727
861
  return res;
728
862
  }
@@ -759,10 +893,10 @@
759
893
  var res = [];
760
894
  for (var i = 0; i < list.length; i++) {
761
895
  if (i < 12)
762
- res[i] = __assign$2(__assign$2({}, list[i]), { EMA12: undefined });
896
+ res[i] = __assign$4(__assign$4({}, list[i]), { EMA12: null });
763
897
  else {
764
898
  beforeEMA12 = (beforeEMA12 * 11) / 13 + (this.getDI(list[i]) * 2) / 13;
765
- res[i] = __assign$2(__assign$2({}, list[i]), { EMA12: beforeEMA12 });
899
+ res[i] = __assign$4(__assign$4({}, list[i]), { EMA12: beforeEMA12 });
766
900
  }
767
901
  }
768
902
  return res;
@@ -778,10 +912,10 @@
778
912
  var res = [];
779
913
  for (var i = 0; i < list.length; i++) {
780
914
  if (i < 26)
781
- res[i] = __assign$2(__assign$2({}, list[i]), { EMA26: undefined });
915
+ res[i] = __assign$4(__assign$4({}, list[i]), { EMA26: null });
782
916
  else {
783
917
  beforeEMA26 = (beforeEMA26 * 25) / 27 + (this.getDI(list[i]) * 2) / 27;
784
- res[i] = __assign$2(__assign$2({}, list[i]), { EMA26: beforeEMA26 });
918
+ res[i] = __assign$4(__assign$4({}, list[i]), { EMA26: beforeEMA26 });
785
919
  }
786
920
  }
787
921
  return res;
@@ -796,12 +930,12 @@
796
930
  var res = [];
797
931
  for (var i = 0; i < list.length; i++) {
798
932
  if (i < 26)
799
- res[i] = __assign$2(__assign$2({}, list[i]), { DIF: undefined });
933
+ res[i] = __assign$4(__assign$4({}, list[i]), { DIF: null });
800
934
  else {
801
935
  var EMA12 = ((_a = ResEMA12 === null || ResEMA12 === void 0 ? void 0 : ResEMA12[i]) === null || _a === void 0 ? void 0 : _a["EMA12"]) && ResEMA12[i]["EMA12"];
802
936
  var EMA26 = ((_b = ResEMA26 === null || ResEMA26 === void 0 ? void 0 : ResEMA26[i]) === null || _b === void 0 ? void 0 : _b["EMA26"]) && ResEMA26[i]["EMA26"];
803
937
  var DIF = EMA12 - EMA26;
804
- res[i] = __assign$2(__assign$2({}, list[i]), { DIF: DIF });
938
+ res[i] = __assign$4(__assign$4({}, list[i]), { DIF: DIF });
805
939
  }
806
940
  }
807
941
  return res;
@@ -816,19 +950,19 @@
816
950
  var beforeMACD9 = 0;
817
951
  for (var i = 0; i < list.length; i++) {
818
952
  if (i < 26)
819
- res[i] = __assign$2(__assign$2({}, list[i]), { MACD9: undefined, OSC: undefined });
953
+ res[i] = __assign$4(__assign$4({}, list[i]), { MACD9: null, OSC: null });
820
954
  else if (i === 26) {
821
955
  var MACD9 = DIF.slice(26, 34)
822
956
  .map(function (item) { return ((item === null || item === void 0 ? void 0 : item.DIF) ? item["DIF"] : 0); })
823
957
  .reduce(function (accumulator, currentValue) { return accumulator + currentValue; });
824
958
  var OSC = DIF[i]["DIF"] - MACD9;
825
- res[26] = __assign$2(__assign$2({}, list[i]), { MACD9: MACD9, OSC: OSC });
959
+ res[26] = __assign$4(__assign$4({}, list[i]), { MACD9: MACD9, OSC: OSC });
826
960
  beforeMACD9 = MACD9;
827
961
  }
828
962
  else {
829
963
  var MACD9 = beforeMACD9 + ((DIF[i]["DIF"] - beforeMACD9) * 2) / 10;
830
964
  var OSC = DIF[i]["DIF"] - MACD9;
831
- res[i] = __assign$2(__assign$2({}, list[i]), { MACD9: MACD9, OSC: OSC });
965
+ res[i] = __assign$4(__assign$4({}, list[i]), { MACD9: MACD9, OSC: OSC });
832
966
  beforeMACD9 = MACD9;
833
967
  }
834
968
  }
@@ -838,8 +972,8 @@
838
972
  return MACD;
839
973
  }());
840
974
 
841
- var __assign$1 = (undefined && undefined.__assign) || function () {
842
- __assign$1 = Object.assign || function(t) {
975
+ var __assign$3 = (undefined && undefined.__assign) || function () {
976
+ __assign$3 = Object.assign || function(t) {
843
977
  for (var s, i = 1, n = arguments.length; i < n; i++) {
844
978
  s = arguments[i];
845
979
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
@@ -847,7 +981,7 @@
847
981
  }
848
982
  return t;
849
983
  };
850
- return __assign$1.apply(this, arguments);
984
+ return __assign$3.apply(this, arguments);
851
985
  };
852
986
  var Rsi = /** @class */ (function () {
853
987
  function Rsi() {
@@ -874,13 +1008,13 @@
874
1008
  var res = [];
875
1009
  // 前5筆
876
1010
  for (var i = 0; i < 5; i++) {
877
- res[i] = __assign$1(__assign$1({}, list[i]), { rsi6: undefined });
1011
+ res[i] = __assign$3(__assign$3({}, list[i]), { rsi6: null });
878
1012
  }
879
1013
  // 第6筆Rsi
880
1014
  var beforeUpAvg = this.getStartUpAvg(list, 6);
881
1015
  var beforeDownAvg = this.getStartDownAvg(list, 6);
882
1016
  var firstRsi6 = this.getRsi(beforeUpAvg, beforeDownAvg);
883
- res[5] = __assign$1(__assign$1({}, list[5]), { rsi6: firstRsi6 });
1017
+ res[5] = __assign$3(__assign$3({}, list[5]), { rsi6: firstRsi6 });
884
1018
  // else
885
1019
  for (var i = 6; i < list.length; i++) {
886
1020
  var minusU = 0;
@@ -895,7 +1029,7 @@
895
1029
  beforeUpAvg = (beforeUpAvg * 5) / 6 + minusU / 6;
896
1030
  beforeDownAvg = (beforeDownAvg * 5) / 6 + Math.abs(minusD) / 6;
897
1031
  var rsi6 = this.getRsi(beforeUpAvg, beforeDownAvg);
898
- res[i] = __assign$1(__assign$1({}, list[i]), { rsi6: Math.round(rsi6 * 100) / 100 });
1032
+ res[i] = __assign$3(__assign$3({}, list[i]), { rsi6: Math.round(rsi6 * 100) / 100 });
899
1033
  }
900
1034
  return res;
901
1035
  }
@@ -908,13 +1042,13 @@
908
1042
  var res = [];
909
1043
  // 前11筆
910
1044
  for (var i = 0; i < 11; i++) {
911
- res[i] = __assign$1(__assign$1({}, list[i]), { rsi12: undefined });
1045
+ res[i] = __assign$3(__assign$3({}, list[i]), { rsi12: null });
912
1046
  }
913
1047
  // 第12筆Rsi
914
1048
  var beforeUpAvg = this.getStartUpAvg(list, 12);
915
1049
  var beforeDownAvg = this.getStartDownAvg(list, 12);
916
1050
  var firstRsi12 = this.getRsi(beforeUpAvg, beforeDownAvg);
917
- res[11] = __assign$1(__assign$1({}, list[11]), { rsi12: firstRsi12 });
1051
+ res[11] = __assign$3(__assign$3({}, list[11]), { rsi12: firstRsi12 });
918
1052
  // else
919
1053
  for (var i = 12; i < list.length; i++) {
920
1054
  var minusU = 0;
@@ -929,7 +1063,7 @@
929
1063
  beforeUpAvg = (beforeUpAvg * 11) / 12 + minusU / 12;
930
1064
  beforeDownAvg = (beforeDownAvg * 11) / 12 + Math.abs(minusD) / 12;
931
1065
  var rsi12 = this.getRsi(beforeUpAvg, beforeDownAvg);
932
- res[i] = __assign$1(__assign$1({}, list[i]), { rsi12: Math.round(rsi12 * 100) / 100 });
1066
+ res[i] = __assign$3(__assign$3({}, list[i]), { rsi12: Math.round(rsi12 * 100) / 100 });
933
1067
  }
934
1068
  return res;
935
1069
  }
@@ -981,6 +1115,132 @@
981
1115
  return Rsi;
982
1116
  }());
983
1117
 
1118
+ var __assign$2 = (undefined && undefined.__assign) || function () {
1119
+ __assign$2 = Object.assign || function(t) {
1120
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
1121
+ s = arguments[i];
1122
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
1123
+ t[p] = s[p];
1124
+ }
1125
+ return t;
1126
+ };
1127
+ return __assign$2.apply(this, arguments);
1128
+ };
1129
+ var __spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {
1130
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
1131
+ if (ar || !(i in from)) {
1132
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
1133
+ ar[i] = from[i];
1134
+ }
1135
+ }
1136
+ return to.concat(ar || Array.prototype.slice.call(from));
1137
+ };
1138
+ var Obv = /** @class */ (function () {
1139
+ function Obv() {
1140
+ }
1141
+ Object.defineProperty(Obv.prototype, "init", {
1142
+ enumerable: false,
1143
+ configurable: true,
1144
+ writable: true,
1145
+ value: function (data) {
1146
+ return {
1147
+ dataset: [data],
1148
+ obv: data.v,
1149
+ preClose: data.c,
1150
+ };
1151
+ }
1152
+ });
1153
+ Object.defineProperty(Obv.prototype, "next", {
1154
+ enumerable: false,
1155
+ configurable: true,
1156
+ writable: true,
1157
+ value: function (data, preList) {
1158
+ var currentVolume = data.v;
1159
+ var currentClose = data.c;
1160
+ // obv
1161
+ var obv = preList.obv;
1162
+ if (currentClose > preList.preClose) {
1163
+ obv += currentVolume;
1164
+ }
1165
+ else if (currentClose < preList.preClose) {
1166
+ obv -= currentVolume;
1167
+ }
1168
+ return {
1169
+ dataset: __spreadArray(__spreadArray([], preList.dataset, true), [data], false),
1170
+ obv: obv,
1171
+ preClose: currentClose,
1172
+ };
1173
+ }
1174
+ });
1175
+ Object.defineProperty(Obv.prototype, "getObv", {
1176
+ enumerable: false,
1177
+ configurable: true,
1178
+ writable: true,
1179
+ value: function (list) {
1180
+ var res = [];
1181
+ var obv = 0;
1182
+ for (var i = 0; i < list.length; i++) {
1183
+ var currentVolume = list[i].v;
1184
+ var currentClose = list[i].c;
1185
+ if (i > 0) {
1186
+ // obv
1187
+ if (currentClose > list[i - 1].c) {
1188
+ obv += currentVolume;
1189
+ }
1190
+ else if (currentClose < list[i - 1].c) {
1191
+ obv -= currentVolume;
1192
+ }
1193
+ }
1194
+ else {
1195
+ obv = currentVolume;
1196
+ }
1197
+ res[i] = __assign$2(__assign$2({}, list[i]), { obv: obv });
1198
+ }
1199
+ return res;
1200
+ }
1201
+ });
1202
+ return Obv;
1203
+ }());
1204
+
1205
+ var Ema = /** @class */ (function () {
1206
+ function Ema() {
1207
+ }
1208
+ Object.defineProperty(Ema.prototype, "getStartEma", {
1209
+ enumerable: false,
1210
+ configurable: true,
1211
+ writable: true,
1212
+ value: function (list, period) {
1213
+ if (list.length < period)
1214
+ throw new Error("list.length < period");
1215
+ var sum = 0;
1216
+ for (var i = 0; i < period; i++) {
1217
+ sum += list[i];
1218
+ }
1219
+ var initialEMA = sum / period;
1220
+ return initialEMA;
1221
+ }
1222
+ });
1223
+ Object.defineProperty(Ema.prototype, "getEma", {
1224
+ enumerable: false,
1225
+ configurable: true,
1226
+ writable: true,
1227
+ value: function (list, period) {
1228
+ var res = [];
1229
+ var ema = this.getStartEma(list.slice(0, period), period);
1230
+ for (var i = 0; i < list.length; i++) {
1231
+ if (i < period) {
1232
+ res.push(null);
1233
+ continue;
1234
+ }
1235
+ ema = (list[i] * 2 + (period - 1) * ema) / (period + 1);
1236
+ res.push(ema);
1237
+ }
1238
+ return res;
1239
+ }
1240
+ });
1241
+ return Ema;
1242
+ }());
1243
+
984
1244
  var Mode;
985
1245
  (function (Mode) {
986
1246
  Mode[Mode["NumberToString"] = 1] = "NumberToString";
@@ -1036,8 +1296,8 @@
1036
1296
  }
1037
1297
  }
1038
1298
 
1039
- var __assign = (undefined && undefined.__assign) || function () {
1040
- __assign = Object.assign || function(t) {
1299
+ var __assign$1 = (undefined && undefined.__assign) || function () {
1300
+ __assign$1 = Object.assign || function(t) {
1041
1301
  for (var s, i = 1, n = arguments.length; i < n; i++) {
1042
1302
  s = arguments[i];
1043
1303
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
@@ -1045,7 +1305,7 @@
1045
1305
  }
1046
1306
  return t;
1047
1307
  };
1048
- return __assign.apply(this, arguments);
1308
+ return __assign$1.apply(this, arguments);
1049
1309
  };
1050
1310
  var Williams = /** @class */ (function () {
1051
1311
  function Williams() {
@@ -1072,7 +1332,7 @@
1072
1332
  var res = [];
1073
1333
  for (var i = 0; i < list.length; i++) {
1074
1334
  if (i < 9)
1075
- res[i] = __assign(__assign({}, list[i]), { williams9: undefined });
1335
+ res[i] = __assign$1(__assign$1({}, list[i]), { williams9: null });
1076
1336
  else {
1077
1337
  var maxList = list.slice(i - 8, i).map(function (item) { return item["h"]; });
1078
1338
  var minList = list.slice(i - 8, i).map(function (item) { return item["l"]; });
@@ -1080,7 +1340,7 @@
1080
1340
  var min = Math.min.apply(Math, minList);
1081
1341
  var close_1 = list[i]["c"];
1082
1342
  var williams9 = ((max - close_1) / (max - min)) * -100;
1083
- res[i] = __assign(__assign({}, list[i]), { williams9: Math.round(williams9 * 100) / 100 });
1343
+ res[i] = __assign$1(__assign$1({}, list[i]), { williams9: Math.round(williams9 * 100) / 100 });
1084
1344
  }
1085
1345
  }
1086
1346
  return res;
@@ -1094,7 +1354,7 @@
1094
1354
  var res = [];
1095
1355
  for (var i = 0; i < list.length; i++) {
1096
1356
  if (i < 18)
1097
- res[i] = __assign(__assign({}, list[i]), { williams9: undefined });
1357
+ res[i] = __assign$1(__assign$1({}, list[i]), { williams18: null });
1098
1358
  else {
1099
1359
  var maxList = list.slice(i - 17, i).map(function (item) { return item["h"]; });
1100
1360
  var minList = list.slice(i - 17, i).map(function (item) { return item["l"]; });
@@ -1102,7 +1362,7 @@
1102
1362
  var min = Math.min.apply(Math, minList);
1103
1363
  var close_2 = list[i]["c"];
1104
1364
  var williams18 = ((max - close_2) / (max - min)) * -100;
1105
- res[i] = __assign(__assign({}, list[i]), { williams18: Math.round(williams18 * 100) / 100 });
1365
+ res[i] = __assign$1(__assign$1({}, list[i]), { williams18: Math.round(williams18 * 100) / 100 });
1106
1366
  }
1107
1367
  }
1108
1368
  return res;
@@ -1111,6 +1371,105 @@
1111
1371
  return Williams;
1112
1372
  }());
1113
1373
 
1374
+ var __assign = (undefined && undefined.__assign) || function () {
1375
+ __assign = Object.assign || function(t) {
1376
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
1377
+ s = arguments[i];
1378
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
1379
+ t[p] = s[p];
1380
+ }
1381
+ return t;
1382
+ };
1383
+ return __assign.apply(this, arguments);
1384
+ };
1385
+ var Boll = /** @class */ (function () {
1386
+ function Boll() {
1387
+ }
1388
+ Object.defineProperty(Boll.prototype, "init", {
1389
+ enumerable: false,
1390
+ configurable: true,
1391
+ writable: true,
1392
+ value: function (data) {
1393
+ return {
1394
+ dataset: [data],
1395
+ bollMa: null,
1396
+ bollUb: null,
1397
+ bollLb: null,
1398
+ };
1399
+ }
1400
+ });
1401
+ Object.defineProperty(Boll.prototype, "next", {
1402
+ enumerable: false,
1403
+ configurable: true,
1404
+ writable: true,
1405
+ value: function (data, preList, type) {
1406
+ preList.dataset.push(data);
1407
+ if (preList.dataset.length < type) {
1408
+ return {
1409
+ dataset: preList.dataset,
1410
+ type: type,
1411
+ bollMa: null,
1412
+ bollUb: null,
1413
+ bollLb: null,
1414
+ };
1415
+ }
1416
+ else {
1417
+ if (preList.dataset.length > type) {
1418
+ preList.dataset.shift();
1419
+ }
1420
+ var sum = preList.dataset.reduce(function (pre, current) { return pre + current.c; }, 0);
1421
+ var bollMa_1 = Math.round((sum / type) * 100) / 100;
1422
+ var difference = preList.dataset.reduce(function (pre, current) {
1423
+ return bollMa_1 !== null ? pre + Math.pow(current.c - bollMa_1, 2) : pre;
1424
+ }, 0);
1425
+ var std = Math.round(Math.sqrt(difference / type) * 100) / 100;
1426
+ return {
1427
+ dataset: preList.dataset,
1428
+ type: type,
1429
+ bollMa: bollMa_1,
1430
+ bollUb: bollMa_1 + 2 * std,
1431
+ bollLb: bollMa_1 - 2 * std,
1432
+ };
1433
+ }
1434
+ }
1435
+ });
1436
+ Object.defineProperty(Boll.prototype, "getBoll", {
1437
+ enumerable: false,
1438
+ configurable: true,
1439
+ writable: true,
1440
+ value: function (list, type) {
1441
+ var res = [];
1442
+ var _loop_1 = function (i) {
1443
+ if (i < type)
1444
+ res[i] = __assign(__assign({}, list[i]), { bollMa: null, bollUb: null, bollLb: null });
1445
+ else {
1446
+ // bollMa
1447
+ var sumMa = list
1448
+ .slice(i - (type - 1), i + 1)
1449
+ .reduce(function (pre, current) { return pre + current.c; }, 0);
1450
+ console.log("sumMa", sumMa);
1451
+ var bollMa_2 = Math.round((sumMa / type) * 100) / 100;
1452
+ // 標準差
1453
+ var difference = res
1454
+ .slice(i - (type - 1), i + 1)
1455
+ .reduce(function (pre, current) {
1456
+ return bollMa_2 !== null
1457
+ ? pre + Math.pow(current.c - bollMa_2, 2)
1458
+ : pre;
1459
+ }, 0);
1460
+ var std = Math.round(Math.sqrt(difference / type) * 100) / 100;
1461
+ res[i] = __assign(__assign({}, list[i]), { bollMa: bollMa_2, bollUb: bollMa_2 + 2 * std, bollLb: bollMa_2 - 2 * std });
1462
+ }
1463
+ };
1464
+ for (var i = 0; i < list.length; i++) {
1465
+ _loop_1(i);
1466
+ }
1467
+ return res;
1468
+ }
1469
+ });
1470
+ return Boll;
1471
+ }());
1472
+
1114
1473
  function add(a, b) {
1115
1474
  return a + b;
1116
1475
  }
@@ -1119,10 +1478,13 @@
1119
1478
  return a - b;
1120
1479
  }
1121
1480
 
1481
+ exports.Boll = Boll;
1482
+ exports.Ema = Ema;
1122
1483
  exports.Gold = Gold;
1123
1484
  exports.Kd = Kd;
1124
1485
  exports.Ma = Ma;
1125
1486
  exports.Macd = MACD;
1487
+ exports.Obv = Obv;
1126
1488
  exports.Rsi = Rsi;
1127
1489
  exports.Williams = Williams;
1128
1490
  exports.add = add;