@ch20026103/anysis 0.0.17-alpha2 → 0.0.18

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
@@ -282,8 +282,8 @@
282
282
  return nextYearForecast;
283
283
  }
284
284
 
285
- var __assign$6 = (undefined && undefined.__assign) || function () {
286
- __assign$6 = Object.assign || function(t) {
285
+ var __assign$7 = (undefined && undefined.__assign) || function () {
286
+ __assign$7 = Object.assign || function(t) {
287
287
  for (var s, i = 1, n = arguments.length; i < n; i++) {
288
288
  s = arguments[i];
289
289
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
@@ -291,7 +291,7 @@
291
291
  }
292
292
  return t;
293
293
  };
294
- return __assign$6.apply(this, arguments);
294
+ return __assign$7.apply(this, arguments);
295
295
  };
296
296
  var Boll = /** @class */ (function () {
297
297
  function Boll() {
@@ -352,7 +352,7 @@
352
352
  var res = [];
353
353
  var _loop_1 = function (i) {
354
354
  if (i < type)
355
- res[i] = __assign$6(__assign$6({}, list[i]), { bollMa: 0, bollUb: 0, bollLb: 0 });
355
+ res[i] = __assign$7(__assign$7({}, list[i]), { bollMa: 0, bollUb: 0, bollLb: 0 });
356
356
  else {
357
357
  // bollMa
358
358
  var sumMa = list
@@ -366,7 +366,7 @@
366
366
  return bollMa_2 !== 0 ? pre + Math.pow(current.c - bollMa_2, 2) : pre;
367
367
  }, 0);
368
368
  var std = Math.round(Math.sqrt(difference / type) * 100) / 100;
369
- res[i] = __assign$6(__assign$6({}, list[i]), { bollMa: bollMa_2, bollUb: bollMa_2 + 2 * std, bollLb: bollMa_2 - 2 * std });
369
+ res[i] = __assign$7(__assign$7({}, list[i]), { bollMa: bollMa_2, bollUb: bollMa_2 + 2 * std, bollLb: bollMa_2 - 2 * std });
370
370
  }
371
371
  };
372
372
  for (var i = 0; i < list.length; i++) {
@@ -455,8 +455,8 @@
455
455
  return Ema;
456
456
  }());
457
457
 
458
- var __assign$5 = (undefined && undefined.__assign) || function () {
459
- __assign$5 = Object.assign || function(t) {
458
+ var __assign$6 = (undefined && undefined.__assign) || function () {
459
+ __assign$6 = Object.assign || function(t) {
460
460
  for (var s, i = 1, n = arguments.length; i < n; i++) {
461
461
  s = arguments[i];
462
462
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
@@ -464,13 +464,13 @@
464
464
  }
465
465
  return t;
466
466
  };
467
- return __assign$5.apply(this, arguments);
467
+ return __assign$6.apply(this, arguments);
468
468
  };
469
469
  function addDetail(obj, list, detail) {
470
470
  if (detail)
471
- return __assign$5(__assign$5({}, obj), { detail: list });
471
+ return __assign$6(__assign$6({}, obj), { detail: list });
472
472
  else
473
- return __assign$5({}, obj);
473
+ return __assign$6({}, obj);
474
474
  }
475
475
  function getWeekLine(list, detail) {
476
476
  var res = [];
@@ -799,8 +799,8 @@
799
799
  return Kd;
800
800
  }());
801
801
 
802
- var __assign$4 = (undefined && undefined.__assign) || function () {
803
- __assign$4 = Object.assign || function(t) {
802
+ var __assign$5 = (undefined && undefined.__assign) || function () {
803
+ __assign$5 = Object.assign || function(t) {
804
804
  for (var s, i = 1, n = arguments.length; i < n; i++) {
805
805
  s = arguments[i];
806
806
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
@@ -808,7 +808,7 @@
808
808
  }
809
809
  return t;
810
810
  };
811
- return __assign$4.apply(this, arguments);
811
+ return __assign$5.apply(this, arguments);
812
812
  };
813
813
  var Ma = /** @class */ (function () {
814
814
  function Ma() {
@@ -882,13 +882,13 @@
882
882
  var res = [];
883
883
  for (var i = 0; i < list.length; i++) {
884
884
  if (i < 4)
885
- res[i] = __assign$4(__assign$4({}, list[i]), { ma5: 0 });
885
+ res[i] = __assign$5(__assign$5({}, list[i]), { ma5: 0 });
886
886
  else {
887
887
  var sum = list
888
888
  .slice(i - 4, i + 1)
889
889
  .reduce(function (pre, current) { return pre + current.c; }, 0);
890
890
  var ma5 = Math.round((sum / 5) * 100) / 100;
891
- res[i] = __assign$4(__assign$4({}, list[i]), { ma5: ma5 });
891
+ res[i] = __assign$5(__assign$5({}, list[i]), { ma5: ma5 });
892
892
  }
893
893
  }
894
894
  return res;
@@ -902,13 +902,13 @@
902
902
  var res = [];
903
903
  for (var i = 0; i < list.length; i++) {
904
904
  if (i < 9)
905
- res[i] = __assign$4(__assign$4({}, list[i]), { ma10: 0 });
905
+ res[i] = __assign$5(__assign$5({}, list[i]), { ma10: 0 });
906
906
  else {
907
907
  var sum = list
908
908
  .slice(i - 9, i + 1)
909
909
  .reduce(function (pre, current) { return pre + current.c; }, 0);
910
910
  var ma10 = Math.round((sum / 10) * 100) / 100;
911
- res[i] = __assign$4(__assign$4({}, list[i]), { ma10: ma10 });
911
+ res[i] = __assign$5(__assign$5({}, list[i]), { ma10: ma10 });
912
912
  }
913
913
  }
914
914
  return res;
@@ -922,13 +922,13 @@
922
922
  var res = [];
923
923
  for (var i = 0; i < list.length; i++) {
924
924
  if (i < 19)
925
- res[i] = __assign$4(__assign$4({}, list[i]), { ma20: 0 });
925
+ res[i] = __assign$5(__assign$5({}, list[i]), { ma20: 0 });
926
926
  else {
927
927
  var sum = list
928
928
  .slice(i - 19, i + 1)
929
929
  .reduce(function (pre, current) { return pre + current.c; }, 0);
930
930
  var ma20 = Math.round((sum / 20) * 100) / 100;
931
- res[i] = __assign$4(__assign$4({}, list[i]), { ma20: ma20 });
931
+ res[i] = __assign$5(__assign$5({}, list[i]), { ma20: ma20 });
932
932
  }
933
933
  }
934
934
  return res;
@@ -942,13 +942,13 @@
942
942
  var res = [];
943
943
  for (var i = 0; i < list.length; i++) {
944
944
  if (i < 59)
945
- res[i] = __assign$4(__assign$4({}, list[i]), { ma60: 0 });
945
+ res[i] = __assign$5(__assign$5({}, list[i]), { ma60: 0 });
946
946
  else {
947
947
  var sum = list
948
948
  .slice(i - 59, i + 1)
949
949
  .reduce(function (pre, current) { return pre + current.c; }, 0);
950
950
  var ma60 = Math.round((sum / 60) * 100) / 100;
951
- res[i] = __assign$4(__assign$4({}, list[i]), { ma60: ma60 });
951
+ res[i] = __assign$5(__assign$5({}, list[i]), { ma60: ma60 });
952
952
  }
953
953
  }
954
954
  return res;
@@ -962,13 +962,13 @@
962
962
  var res = [];
963
963
  for (var i = 0; i < list.length; i++) {
964
964
  if (i < self - 1)
965
- res[i] = __assign$4(__assign$4({}, list[i]), { ma: 0 });
965
+ res[i] = __assign$5(__assign$5({}, list[i]), { ma: 0 });
966
966
  else {
967
967
  var sum = list
968
968
  .slice(i - (self - 1), i + 1)
969
969
  .reduce(function (pre, current) { return pre + current.c; }, 0);
970
970
  var ma = Math.round((sum / self) * 100) / 100;
971
- res[i] = __assign$4(__assign$4({}, list[i]), { ma: ma });
971
+ res[i] = __assign$5(__assign$5({}, list[i]), { ma: ma });
972
972
  }
973
973
  }
974
974
  return res;
@@ -977,8 +977,8 @@
977
977
  return Ma;
978
978
  }());
979
979
 
980
- var __assign$3 = (undefined && undefined.__assign) || function () {
981
- __assign$3 = Object.assign || function(t) {
980
+ var __assign$4 = (undefined && undefined.__assign) || function () {
981
+ __assign$4 = Object.assign || function(t) {
982
982
  for (var s, i = 1, n = arguments.length; i < n; i++) {
983
983
  s = arguments[i];
984
984
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
@@ -986,7 +986,7 @@
986
986
  }
987
987
  return t;
988
988
  };
989
- return __assign$3.apply(this, arguments);
989
+ return __assign$4.apply(this, arguments);
990
990
  };
991
991
  var MACD = /** @class */ (function () {
992
992
  function MACD() {
@@ -1124,10 +1124,10 @@
1124
1124
  var res = [];
1125
1125
  for (var i = 0; i < list.length; i++) {
1126
1126
  if (i < 12)
1127
- res[i] = __assign$3(__assign$3({}, list[i]), { EMA12: null });
1127
+ res[i] = __assign$4(__assign$4({}, list[i]), { EMA12: null });
1128
1128
  else {
1129
1129
  beforeEMA12 = (beforeEMA12 * 11) / 13 + (this.getDI(list[i]) * 2) / 13;
1130
- res[i] = __assign$3(__assign$3({}, list[i]), { EMA12: beforeEMA12 });
1130
+ res[i] = __assign$4(__assign$4({}, list[i]), { EMA12: beforeEMA12 });
1131
1131
  }
1132
1132
  }
1133
1133
  return res;
@@ -1143,10 +1143,10 @@
1143
1143
  var res = [];
1144
1144
  for (var i = 0; i < list.length; i++) {
1145
1145
  if (i < 26)
1146
- res[i] = __assign$3(__assign$3({}, list[i]), { EMA26: null });
1146
+ res[i] = __assign$4(__assign$4({}, list[i]), { EMA26: null });
1147
1147
  else {
1148
1148
  beforeEMA26 = (beforeEMA26 * 25) / 27 + (this.getDI(list[i]) * 2) / 27;
1149
- res[i] = __assign$3(__assign$3({}, list[i]), { EMA26: beforeEMA26 });
1149
+ res[i] = __assign$4(__assign$4({}, list[i]), { EMA26: beforeEMA26 });
1150
1150
  }
1151
1151
  }
1152
1152
  return res;
@@ -1161,12 +1161,12 @@
1161
1161
  var res = [];
1162
1162
  for (var i = 0; i < list.length; i++) {
1163
1163
  if (i < 26)
1164
- res[i] = __assign$3(__assign$3({}, list[i]), { DIF: null });
1164
+ res[i] = __assign$4(__assign$4({}, list[i]), { DIF: null });
1165
1165
  else {
1166
1166
  var EMA12 = ((_a = ResEMA12 === null || ResEMA12 === void 0 ? void 0 : ResEMA12[i]) === null || _a === void 0 ? void 0 : _a["EMA12"]) && ResEMA12[i]["EMA12"];
1167
1167
  var EMA26 = ((_b = ResEMA26 === null || ResEMA26 === void 0 ? void 0 : ResEMA26[i]) === null || _b === void 0 ? void 0 : _b["EMA26"]) && ResEMA26[i]["EMA26"];
1168
1168
  var DIF = EMA12 - EMA26;
1169
- res[i] = __assign$3(__assign$3({}, list[i]), { DIF: DIF });
1169
+ res[i] = __assign$4(__assign$4({}, list[i]), { DIF: DIF });
1170
1170
  }
1171
1171
  }
1172
1172
  return res;
@@ -1181,19 +1181,19 @@
1181
1181
  var beforeMACD9 = 0;
1182
1182
  for (var i = 0; i < list.length; i++) {
1183
1183
  if (i < 26)
1184
- res[i] = __assign$3(__assign$3({}, list[i]), { MACD9: null, OSC: null });
1184
+ res[i] = __assign$4(__assign$4({}, list[i]), { MACD9: null, OSC: null });
1185
1185
  else if (i === 26) {
1186
1186
  var MACD9 = DIF.slice(26, 34)
1187
1187
  .map(function (item) { return ((item === null || item === void 0 ? void 0 : item.DIF) ? item["DIF"] : 0); })
1188
1188
  .reduce(function (accumulator, currentValue) { return accumulator + currentValue; });
1189
1189
  var OSC = DIF[i]["DIF"] - MACD9;
1190
- res[26] = __assign$3(__assign$3({}, list[i]), { MACD9: MACD9, OSC: OSC });
1190
+ res[26] = __assign$4(__assign$4({}, list[i]), { MACD9: MACD9, OSC: OSC });
1191
1191
  beforeMACD9 = MACD9;
1192
1192
  }
1193
1193
  else {
1194
1194
  var MACD9 = beforeMACD9 + ((DIF[i]["DIF"] - beforeMACD9) * 2) / 10;
1195
1195
  var OSC = DIF[i]["DIF"] - MACD9;
1196
- res[i] = __assign$3(__assign$3({}, list[i]), { MACD9: MACD9, OSC: OSC });
1196
+ res[i] = __assign$4(__assign$4({}, list[i]), { MACD9: MACD9, OSC: OSC });
1197
1197
  beforeMACD9 = MACD9;
1198
1198
  }
1199
1199
  }
@@ -1203,8 +1203,8 @@
1203
1203
  return MACD;
1204
1204
  }());
1205
1205
 
1206
- var __assign$2 = (undefined && undefined.__assign) || function () {
1207
- __assign$2 = Object.assign || function(t) {
1206
+ var __assign$3 = (undefined && undefined.__assign) || function () {
1207
+ __assign$3 = Object.assign || function(t) {
1208
1208
  for (var s, i = 1, n = arguments.length; i < n; i++) {
1209
1209
  s = arguments[i];
1210
1210
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
@@ -1212,7 +1212,7 @@
1212
1212
  }
1213
1213
  return t;
1214
1214
  };
1215
- return __assign$2.apply(this, arguments);
1215
+ return __assign$3.apply(this, arguments);
1216
1216
  };
1217
1217
  var __spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {
1218
1218
  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
@@ -1282,7 +1282,7 @@
1282
1282
  else {
1283
1283
  obv = currentVolume;
1284
1284
  }
1285
- res[i] = __assign$2(__assign$2({}, list[i]), { obv: obv });
1285
+ res[i] = __assign$3(__assign$3({}, list[i]), { obv: obv });
1286
1286
  }
1287
1287
  return res;
1288
1288
  }
@@ -1290,8 +1290,8 @@
1290
1290
  return Obv;
1291
1291
  }());
1292
1292
 
1293
- var __assign$1 = (undefined && undefined.__assign) || function () {
1294
- __assign$1 = Object.assign || function(t) {
1293
+ var __assign$2 = (undefined && undefined.__assign) || function () {
1294
+ __assign$2 = Object.assign || function(t) {
1295
1295
  for (var s, i = 1, n = arguments.length; i < n; i++) {
1296
1296
  s = arguments[i];
1297
1297
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
@@ -1299,7 +1299,7 @@
1299
1299
  }
1300
1300
  return t;
1301
1301
  };
1302
- return __assign$1.apply(this, arguments);
1302
+ return __assign$2.apply(this, arguments);
1303
1303
  };
1304
1304
  var Rsi = /** @class */ (function () {
1305
1305
  function Rsi() {
@@ -1325,7 +1325,7 @@
1325
1325
  value: function (data, preList, type) {
1326
1326
  preList.dataset.push(data);
1327
1327
  if (preList.dataset.length < type + 1) {
1328
- return __assign$1(__assign$1({}, preList), { rsi: 0, type: type, avgGain: 0, avgLoss: 0 });
1328
+ return __assign$2(__assign$2({}, preList), { rsi: 0, type: type, avgGain: 0, avgLoss: 0 });
1329
1329
  }
1330
1330
  else {
1331
1331
  // 计算初始增益和损失
@@ -1359,7 +1359,7 @@
1359
1359
  // 计算RSI
1360
1360
  var rs = avgGain / avgLoss;
1361
1361
  var rsi = 100 - 100 / (1 + rs);
1362
- return __assign$1(__assign$1({}, preList), { type: type, rsi: rsi, avgGain: avgGain, avgLoss: avgLoss });
1362
+ return __assign$2(__assign$2({}, preList), { type: type, rsi: rsi, avgGain: avgGain, avgLoss: avgLoss });
1363
1363
  }
1364
1364
  }
1365
1365
  });
@@ -1547,8 +1547,8 @@
1547
1547
  return Vma;
1548
1548
  }());
1549
1549
 
1550
- var __assign = (undefined && undefined.__assign) || function () {
1551
- __assign = Object.assign || function(t) {
1550
+ var __assign$1 = (undefined && undefined.__assign) || function () {
1551
+ __assign$1 = Object.assign || function(t) {
1552
1552
  for (var s, i = 1, n = arguments.length; i < n; i++) {
1553
1553
  s = arguments[i];
1554
1554
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
@@ -1556,7 +1556,7 @@
1556
1556
  }
1557
1557
  return t;
1558
1558
  };
1559
- return __assign.apply(this, arguments);
1559
+ return __assign$1.apply(this, arguments);
1560
1560
  };
1561
1561
  var Williams = /** @class */ (function () {
1562
1562
  function Williams() {
@@ -1619,7 +1619,7 @@
1619
1619
  var res = [];
1620
1620
  for (var i = 0; i < list.length; i++) {
1621
1621
  if (i < 9)
1622
- res[i] = __assign(__assign({}, list[i]), { williams9: null });
1622
+ res[i] = __assign$1(__assign$1({}, list[i]), { williams9: null });
1623
1623
  else {
1624
1624
  var maxList = list.slice(i - 8, i).map(function (item) { return item["h"]; });
1625
1625
  var minList = list.slice(i - 8, i).map(function (item) { return item["l"]; });
@@ -1627,7 +1627,7 @@
1627
1627
  var min = Math.min.apply(Math, minList);
1628
1628
  var close_2 = list[i]["c"];
1629
1629
  var williams9 = ((max - close_2) / (max - min)) * -100;
1630
- res[i] = __assign(__assign({}, list[i]), { williams9: Math.round(williams9 * 100) / 100 });
1630
+ res[i] = __assign$1(__assign$1({}, list[i]), { williams9: Math.round(williams9 * 100) / 100 });
1631
1631
  }
1632
1632
  }
1633
1633
  return res;
@@ -1641,7 +1641,7 @@
1641
1641
  var res = [];
1642
1642
  for (var i = 0; i < list.length; i++) {
1643
1643
  if (i < 18)
1644
- res[i] = __assign(__assign({}, list[i]), { williams18: null });
1644
+ res[i] = __assign$1(__assign$1({}, list[i]), { williams18: null });
1645
1645
  else {
1646
1646
  var maxList = list.slice(i - 17, i).map(function (item) { return item["h"]; });
1647
1647
  var minList = list.slice(i - 17, i).map(function (item) { return item["l"]; });
@@ -1649,7 +1649,7 @@
1649
1649
  var min = Math.min.apply(Math, minList);
1650
1650
  var close_3 = list[i]["c"];
1651
1651
  var williams18 = ((max - close_3) / (max - min)) * -100;
1652
- res[i] = __assign(__assign({}, list[i]), { williams18: Math.round(williams18 * 100) / 100 });
1652
+ res[i] = __assign$1(__assign$1({}, list[i]), { williams18: Math.round(williams18 * 100) / 100 });
1653
1653
  }
1654
1654
  }
1655
1655
  return res;
@@ -1705,6 +1705,170 @@
1705
1705
  return ObvEma;
1706
1706
  }());
1707
1707
 
1708
+ var __assign = (undefined && undefined.__assign) || function () {
1709
+ __assign = Object.assign || function(t) {
1710
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
1711
+ s = arguments[i];
1712
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
1713
+ t[p] = s[p];
1714
+ }
1715
+ return t;
1716
+ };
1717
+ return __assign.apply(this, arguments);
1718
+ };
1719
+ var Mfi = /** @class */ (function () {
1720
+ function Mfi() {
1721
+ }
1722
+ // 計算典型價格 (Typical Price)
1723
+ Object.defineProperty(Mfi.prototype, "getTypicalPrice", {
1724
+ enumerable: false,
1725
+ configurable: true,
1726
+ writable: true,
1727
+ value: function (data) {
1728
+ return (data.h + data.l + data.c) / 3;
1729
+ }
1730
+ });
1731
+ // 計算原始資金流量 (Raw Money Flow)
1732
+ Object.defineProperty(Mfi.prototype, "getRawMoneyFlow", {
1733
+ enumerable: false,
1734
+ configurable: true,
1735
+ writable: true,
1736
+ value: function (data) {
1737
+ return this.getTypicalPrice(data) * data.v;
1738
+ }
1739
+ });
1740
+ Object.defineProperty(Mfi.prototype, "init", {
1741
+ enumerable: false,
1742
+ configurable: true,
1743
+ writable: true,
1744
+ value: function (data, type) {
1745
+ return {
1746
+ dataset: [data],
1747
+ mfi: null,
1748
+ type: type,
1749
+ sumPositiveMF: 0,
1750
+ sumNegativeMF: 0,
1751
+ };
1752
+ }
1753
+ });
1754
+ Object.defineProperty(Mfi.prototype, "next", {
1755
+ enumerable: false,
1756
+ configurable: true,
1757
+ writable: true,
1758
+ value: function (data, preList, type) {
1759
+ preList.dataset.push(data);
1760
+ // 資料不足,不計算 MFI
1761
+ if (preList.dataset.length < type + 1) {
1762
+ return __assign(__assign({}, preList), { mfi: null, type: type, sumPositiveMF: 0, sumNegativeMF: 0 });
1763
+ }
1764
+ var sumPositiveMF = preList.sumPositiveMF;
1765
+ var sumNegativeMF = preList.sumNegativeMF;
1766
+ if (preList.dataset.length === type + 1) {
1767
+ // 第一次達到計算條件,初始化計算
1768
+ sumPositiveMF = 0;
1769
+ sumNegativeMF = 0;
1770
+ for (var i = 1; i <= type; i++) {
1771
+ var currentTP = this.getTypicalPrice(preList.dataset[i]);
1772
+ var prevTP = this.getTypicalPrice(preList.dataset[i - 1]);
1773
+ var rawMF = this.getRawMoneyFlow(preList.dataset[i]);
1774
+ if (currentTP > prevTP) {
1775
+ sumPositiveMF += rawMF;
1776
+ }
1777
+ else if (currentTP < prevTP) {
1778
+ sumNegativeMF += rawMF;
1779
+ }
1780
+ }
1781
+ }
1782
+ else {
1783
+ // 增量更新:移除最舊的影響,加上最新的影響
1784
+ // 移除最舊的資料影響
1785
+ var oldestTP = this.getTypicalPrice(preList.dataset[0]);
1786
+ var secondOldestTP = this.getTypicalPrice(preList.dataset[1]);
1787
+ var oldestRawMF = this.getRawMoneyFlow(preList.dataset[1]);
1788
+ if (secondOldestTP > oldestTP) {
1789
+ sumPositiveMF -= oldestRawMF;
1790
+ }
1791
+ else if (secondOldestTP < oldestTP) {
1792
+ sumNegativeMF -= oldestRawMF;
1793
+ }
1794
+ // 移除最舊的資料
1795
+ preList.dataset.shift();
1796
+ // 加上最新的資料影響
1797
+ var newTP = this.getTypicalPrice(preList.dataset[preList.dataset.length - 1]);
1798
+ var prevTP = this.getTypicalPrice(preList.dataset[preList.dataset.length - 2]);
1799
+ var newRawMF = this.getRawMoneyFlow(preList.dataset[preList.dataset.length - 1]);
1800
+ if (newTP > prevTP) {
1801
+ sumPositiveMF += newRawMF;
1802
+ }
1803
+ else if (newTP < prevTP) {
1804
+ sumNegativeMF += newRawMF;
1805
+ }
1806
+ }
1807
+ // 計算 MFI
1808
+ var mfi;
1809
+ if (sumNegativeMF === 0) {
1810
+ mfi = 100;
1811
+ }
1812
+ else {
1813
+ var moneyFlowRatio = sumPositiveMF / sumNegativeMF;
1814
+ mfi = 100 - (100 / (1 + moneyFlowRatio));
1815
+ }
1816
+ return {
1817
+ dataset: preList.dataset,
1818
+ type: type,
1819
+ mfi: mfi,
1820
+ sumPositiveMF: sumPositiveMF,
1821
+ sumNegativeMF: sumNegativeMF
1822
+ };
1823
+ }
1824
+ });
1825
+ Object.defineProperty(Mfi.prototype, "calculateMFI", {
1826
+ enumerable: false,
1827
+ configurable: true,
1828
+ writable: true,
1829
+ value: function (prices, period) {
1830
+ if (period === void 0) { period = 14; }
1831
+ if (prices.length < period + 1) {
1832
+ return [];
1833
+ }
1834
+ var mfis = [];
1835
+ // 從 period 開始,確保有足夠的資料進行比較
1836
+ for (var endIdx = period; endIdx < prices.length; endIdx++) {
1837
+ var sumPositiveMF = 0;
1838
+ var sumNegativeMF = 0;
1839
+ // 計算 period 個交易日的資金流量
1840
+ // 從 endIdx - period + 1 到 endIdx,共 period 個資料點
1841
+ // 但比較是從 endIdx - period + 2 開始(因為要跟前一天比)
1842
+ for (var i = endIdx - period + 1; i <= endIdx; i++) {
1843
+ // 確保 i-1 >= 0,避免溢位
1844
+ if (i === 0)
1845
+ continue;
1846
+ var currentTP = this.getTypicalPrice(prices[i]);
1847
+ var prevTP = this.getTypicalPrice(prices[i - 1]);
1848
+ var rawMF = this.getRawMoneyFlow(prices[i]);
1849
+ if (currentTP > prevTP) {
1850
+ sumPositiveMF += rawMF;
1851
+ }
1852
+ else if (currentTP < prevTP) {
1853
+ sumNegativeMF += rawMF;
1854
+ }
1855
+ }
1856
+ // 計算 MFI
1857
+ if (sumNegativeMF === 0) {
1858
+ mfis.push(100);
1859
+ }
1860
+ else {
1861
+ var moneyFlowRatio = sumPositiveMF / sumNegativeMF;
1862
+ var mfi = 100 - (100 / (1 + moneyFlowRatio));
1863
+ mfis.push(mfi);
1864
+ }
1865
+ }
1866
+ return mfis;
1867
+ }
1868
+ });
1869
+ return Mfi;
1870
+ }());
1871
+
1708
1872
  function add(a, b) {
1709
1873
  return a + b;
1710
1874
  }
@@ -1748,6 +1912,7 @@
1748
1912
  exports.Kd = Kd;
1749
1913
  exports.Ma = Ma;
1750
1914
  exports.Macd = MACD;
1915
+ exports.Mfi = Mfi;
1751
1916
  exports.Obv = Obv;
1752
1917
  exports.ObvEma = ObvEma;
1753
1918
  exports.Rsi = Rsi;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ch20026103/anysis",
3
- "version": "0.0.17-alpha2",
3
+ "version": "0.0.18",
4
4
  "description": "provide many analyze methods in the library.",
5
5
  "keywords": [],
6
6
  "bugs": "git@github.com:cosmic1330/anysis/issues",
@@ -12,6 +12,21 @@
12
12
  "module": "dist/esm/index.js",
13
13
  "browser": "dist/umd/index.js",
14
14
  "types": "dist/esm/index.d.ts",
15
+ "scripts": {
16
+ "build": "pnpm clean && pnpm build:esm && pnpm build:cjs && pnpm build:umd",
17
+ "build:cjs": "tsc --module commonjs --target es5 --outDir dist/cjs",
18
+ "build:esm": "tsc --module esnext --target es5 --outDir dist/esm",
19
+ "build:umd": "rollup dist/esm/index.js --file dist/umd/index.js --format umd --name anysis",
20
+ "clean": "rimraf dist",
21
+ "lint": "eslint --fix \"**/*.{js,jsx,ts,tsx,mjs}\"",
22
+ "prepare": "pnpm exec husky install",
23
+ "prettier": "pnpm exec prettier --write .",
24
+ "prepublishOnly": "pnpm build",
25
+ "published": "npm publish",
26
+ "unpublished": "npm unpublish --force --registry http://localhost:4873 ",
27
+ "test": "vitest",
28
+ "demo": "node demo/main.js"
29
+ },
15
30
  "lint-staged": {
16
31
  "*.{js,jsx,ts,tsx,mjs}": [
17
32
  "pnpm lint"
@@ -42,18 +57,5 @@
42
57
  },
43
58
  "vota": {
44
59
  "node": "16.11.0"
45
- },
46
- "scripts": {
47
- "build": "pnpm clean && pnpm build:esm && pnpm build:cjs && pnpm build:umd",
48
- "build:cjs": "tsc --module commonjs --target es5 --outDir dist/cjs",
49
- "build:esm": "tsc --module esnext --target es5 --outDir dist/esm",
50
- "build:umd": "rollup dist/esm/index.js --file dist/umd/index.js --format umd --name anysis",
51
- "clean": "rimraf dist",
52
- "lint": "eslint --fix \"**/*.{js,jsx,ts,tsx,mjs}\"",
53
- "prettier": "pnpm exec prettier --write .",
54
- "published": "npm publish",
55
- "unpublished": "npm unpublish --force --registry http://localhost:4873 ",
56
- "test": "vitest",
57
- "demo": "node demo/main.js"
58
60
  }
59
- }
61
+ }