@ch20026103/anysis 0.0.17-alpha1 → 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/demo/main.js +42 -11
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.js +5 -1
- package/dist/cjs/stockSkills/kd.d.ts +0 -18
- package/dist/cjs/stockSkills/kd.js +0 -65
- package/dist/cjs/stockSkills/kd.test.js +3 -50
- package/dist/cjs/stockSkills/mfi.d.ts +15 -0
- package/dist/cjs/stockSkills/mfi.js +166 -0
- package/dist/cjs/stockSkills/mfi.test.d.ts +1 -0
- package/dist/cjs/stockSkills/mfi.test.js +193 -0
- package/dist/cjs/stockSkills/obv.d.ts +4 -7
- package/dist/cjs/stockSkills/obv.js +2 -15
- package/dist/cjs/stockSkills/obv.test.js +5 -3
- package/dist/cjs/stockSkills/obv_ema.d.ts +15 -0
- package/dist/cjs/stockSkills/obv_ema.js +49 -0
- package/dist/cjs/stockSkills/obv_ema.test.d.ts +1 -0
- package/dist/cjs/stockSkills/obv_ema.test.js +23 -0
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/stockSkills/kd.d.ts +0 -18
- package/dist/esm/stockSkills/kd.js +0 -65
- package/dist/esm/stockSkills/kd.test.js +3 -50
- package/dist/esm/stockSkills/mfi.d.ts +15 -0
- package/dist/esm/stockSkills/mfi.js +164 -0
- package/dist/esm/stockSkills/mfi.test.d.ts +1 -0
- package/dist/esm/stockSkills/mfi.test.js +191 -0
- package/dist/esm/stockSkills/obv.d.ts +4 -7
- package/dist/esm/stockSkills/obv.js +2 -15
- package/dist/esm/stockSkills/obv.test.js +5 -3
- package/dist/esm/stockSkills/obv_ema.d.ts +15 -0
- package/dist/esm/stockSkills/obv_ema.js +47 -0
- package/dist/esm/stockSkills/obv_ema.test.d.ts +1 -0
- package/dist/esm/stockSkills/obv_ema.test.js +21 -0
- package/dist/umd/index.js +256 -121
- package/package.json +1 -1
package/dist/umd/index.js
CHANGED
|
@@ -731,17 +731,6 @@
|
|
|
731
731
|
return Gold;
|
|
732
732
|
}());
|
|
733
733
|
|
|
734
|
-
var __assign$5 = (undefined && undefined.__assign) || function () {
|
|
735
|
-
__assign$5 = Object.assign || function(t) {
|
|
736
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
737
|
-
s = arguments[i];
|
|
738
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
739
|
-
t[p] = s[p];
|
|
740
|
-
}
|
|
741
|
-
return t;
|
|
742
|
-
};
|
|
743
|
-
return __assign$5.apply(this, arguments);
|
|
744
|
-
};
|
|
745
734
|
var Kd = /** @class */ (function () {
|
|
746
735
|
function Kd() {
|
|
747
736
|
}
|
|
@@ -807,65 +796,11 @@
|
|
|
807
796
|
}
|
|
808
797
|
}
|
|
809
798
|
});
|
|
810
|
-
Object.defineProperty(Kd.prototype, "getRSV", {
|
|
811
|
-
enumerable: false,
|
|
812
|
-
configurable: true,
|
|
813
|
-
writable: true,
|
|
814
|
-
value: function (list) {
|
|
815
|
-
var res = [];
|
|
816
|
-
for (var i = 0; i < list.length; i++) {
|
|
817
|
-
if (i < 8)
|
|
818
|
-
res[i] = __assign$5(__assign$5({}, list[i]), { rsv: 0 });
|
|
819
|
-
else {
|
|
820
|
-
var low = Math.min.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.l; }));
|
|
821
|
-
var hight = Math.max.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.h; }));
|
|
822
|
-
var close_2 = list[i].c;
|
|
823
|
-
var rsv = ((close_2 - low) / (hight - low)) * 100;
|
|
824
|
-
rsv = Math.round(rsv * 100) / 100;
|
|
825
|
-
res[i] = __assign$5(__assign$5({}, list[i]), { rsv: rsv });
|
|
826
|
-
}
|
|
827
|
-
}
|
|
828
|
-
return res;
|
|
829
|
-
}
|
|
830
|
-
});
|
|
831
|
-
Object.defineProperty(Kd.prototype, "getKD", {
|
|
832
|
-
enumerable: false,
|
|
833
|
-
configurable: true,
|
|
834
|
-
writable: true,
|
|
835
|
-
value: function (list) {
|
|
836
|
-
var res = [];
|
|
837
|
-
var yesterdayK = 50;
|
|
838
|
-
var yesterdayD = 50;
|
|
839
|
-
for (var i = 0; i < list.length; i++) {
|
|
840
|
-
if (i < 8)
|
|
841
|
-
res[i] = __assign$5(__assign$5({}, list[i]), { rsv: 0, k: 0, d: 0, "k-d": 0, j: 0 });
|
|
842
|
-
else {
|
|
843
|
-
var low = Math.min.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.l; }));
|
|
844
|
-
var hight = Math.max.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.h; }));
|
|
845
|
-
var close_3 = list[i].c;
|
|
846
|
-
var rsv = ((close_3 - low) / (hight - low)) * 100;
|
|
847
|
-
rsv = Math.round(rsv * 100) / 100;
|
|
848
|
-
var k = (2 / 3) * yesterdayK + (1 / 3) * rsv;
|
|
849
|
-
var d = (2 / 3) * yesterdayD + (1 / 3) * k;
|
|
850
|
-
var k_d = k - d;
|
|
851
|
-
var j = 3 * k - 2 * d;
|
|
852
|
-
k = Math.round(k * 100) / 100;
|
|
853
|
-
d = Math.round(d * 100) / 100;
|
|
854
|
-
k_d = Math.round(k_d * 100) / 100;
|
|
855
|
-
j = Math.round(j * 100) / 100;
|
|
856
|
-
res[i] = __assign$5(__assign$5({}, list[i]), { rsv: rsv, k: k, d: d, "k-d": k_d, j: j });
|
|
857
|
-
yesterdayK = k;
|
|
858
|
-
yesterdayD = d;
|
|
859
|
-
}
|
|
860
|
-
}
|
|
861
|
-
return res;
|
|
862
|
-
}
|
|
863
|
-
});
|
|
864
799
|
return Kd;
|
|
865
800
|
}());
|
|
866
801
|
|
|
867
|
-
var __assign$
|
|
868
|
-
__assign$
|
|
802
|
+
var __assign$5 = (undefined && undefined.__assign) || function () {
|
|
803
|
+
__assign$5 = Object.assign || function(t) {
|
|
869
804
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
870
805
|
s = arguments[i];
|
|
871
806
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
@@ -873,7 +808,7 @@
|
|
|
873
808
|
}
|
|
874
809
|
return t;
|
|
875
810
|
};
|
|
876
|
-
return __assign$
|
|
811
|
+
return __assign$5.apply(this, arguments);
|
|
877
812
|
};
|
|
878
813
|
var Ma = /** @class */ (function () {
|
|
879
814
|
function Ma() {
|
|
@@ -947,13 +882,13 @@
|
|
|
947
882
|
var res = [];
|
|
948
883
|
for (var i = 0; i < list.length; i++) {
|
|
949
884
|
if (i < 4)
|
|
950
|
-
res[i] = __assign$
|
|
885
|
+
res[i] = __assign$5(__assign$5({}, list[i]), { ma5: 0 });
|
|
951
886
|
else {
|
|
952
887
|
var sum = list
|
|
953
888
|
.slice(i - 4, i + 1)
|
|
954
889
|
.reduce(function (pre, current) { return pre + current.c; }, 0);
|
|
955
890
|
var ma5 = Math.round((sum / 5) * 100) / 100;
|
|
956
|
-
res[i] = __assign$
|
|
891
|
+
res[i] = __assign$5(__assign$5({}, list[i]), { ma5: ma5 });
|
|
957
892
|
}
|
|
958
893
|
}
|
|
959
894
|
return res;
|
|
@@ -967,13 +902,13 @@
|
|
|
967
902
|
var res = [];
|
|
968
903
|
for (var i = 0; i < list.length; i++) {
|
|
969
904
|
if (i < 9)
|
|
970
|
-
res[i] = __assign$
|
|
905
|
+
res[i] = __assign$5(__assign$5({}, list[i]), { ma10: 0 });
|
|
971
906
|
else {
|
|
972
907
|
var sum = list
|
|
973
908
|
.slice(i - 9, i + 1)
|
|
974
909
|
.reduce(function (pre, current) { return pre + current.c; }, 0);
|
|
975
910
|
var ma10 = Math.round((sum / 10) * 100) / 100;
|
|
976
|
-
res[i] = __assign$
|
|
911
|
+
res[i] = __assign$5(__assign$5({}, list[i]), { ma10: ma10 });
|
|
977
912
|
}
|
|
978
913
|
}
|
|
979
914
|
return res;
|
|
@@ -987,13 +922,13 @@
|
|
|
987
922
|
var res = [];
|
|
988
923
|
for (var i = 0; i < list.length; i++) {
|
|
989
924
|
if (i < 19)
|
|
990
|
-
res[i] = __assign$
|
|
925
|
+
res[i] = __assign$5(__assign$5({}, list[i]), { ma20: 0 });
|
|
991
926
|
else {
|
|
992
927
|
var sum = list
|
|
993
928
|
.slice(i - 19, i + 1)
|
|
994
929
|
.reduce(function (pre, current) { return pre + current.c; }, 0);
|
|
995
930
|
var ma20 = Math.round((sum / 20) * 100) / 100;
|
|
996
|
-
res[i] = __assign$
|
|
931
|
+
res[i] = __assign$5(__assign$5({}, list[i]), { ma20: ma20 });
|
|
997
932
|
}
|
|
998
933
|
}
|
|
999
934
|
return res;
|
|
@@ -1007,13 +942,13 @@
|
|
|
1007
942
|
var res = [];
|
|
1008
943
|
for (var i = 0; i < list.length; i++) {
|
|
1009
944
|
if (i < 59)
|
|
1010
|
-
res[i] = __assign$
|
|
945
|
+
res[i] = __assign$5(__assign$5({}, list[i]), { ma60: 0 });
|
|
1011
946
|
else {
|
|
1012
947
|
var sum = list
|
|
1013
948
|
.slice(i - 59, i + 1)
|
|
1014
949
|
.reduce(function (pre, current) { return pre + current.c; }, 0);
|
|
1015
950
|
var ma60 = Math.round((sum / 60) * 100) / 100;
|
|
1016
|
-
res[i] = __assign$
|
|
951
|
+
res[i] = __assign$5(__assign$5({}, list[i]), { ma60: ma60 });
|
|
1017
952
|
}
|
|
1018
953
|
}
|
|
1019
954
|
return res;
|
|
@@ -1027,13 +962,13 @@
|
|
|
1027
962
|
var res = [];
|
|
1028
963
|
for (var i = 0; i < list.length; i++) {
|
|
1029
964
|
if (i < self - 1)
|
|
1030
|
-
res[i] = __assign$
|
|
965
|
+
res[i] = __assign$5(__assign$5({}, list[i]), { ma: 0 });
|
|
1031
966
|
else {
|
|
1032
967
|
var sum = list
|
|
1033
968
|
.slice(i - (self - 1), i + 1)
|
|
1034
969
|
.reduce(function (pre, current) { return pre + current.c; }, 0);
|
|
1035
970
|
var ma = Math.round((sum / self) * 100) / 100;
|
|
1036
|
-
res[i] = __assign$
|
|
971
|
+
res[i] = __assign$5(__assign$5({}, list[i]), { ma: ma });
|
|
1037
972
|
}
|
|
1038
973
|
}
|
|
1039
974
|
return res;
|
|
@@ -1042,8 +977,8 @@
|
|
|
1042
977
|
return Ma;
|
|
1043
978
|
}());
|
|
1044
979
|
|
|
1045
|
-
var __assign$
|
|
1046
|
-
__assign$
|
|
980
|
+
var __assign$4 = (undefined && undefined.__assign) || function () {
|
|
981
|
+
__assign$4 = Object.assign || function(t) {
|
|
1047
982
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
1048
983
|
s = arguments[i];
|
|
1049
984
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
@@ -1051,7 +986,7 @@
|
|
|
1051
986
|
}
|
|
1052
987
|
return t;
|
|
1053
988
|
};
|
|
1054
|
-
return __assign$
|
|
989
|
+
return __assign$4.apply(this, arguments);
|
|
1055
990
|
};
|
|
1056
991
|
var MACD = /** @class */ (function () {
|
|
1057
992
|
function MACD() {
|
|
@@ -1189,10 +1124,10 @@
|
|
|
1189
1124
|
var res = [];
|
|
1190
1125
|
for (var i = 0; i < list.length; i++) {
|
|
1191
1126
|
if (i < 12)
|
|
1192
|
-
res[i] = __assign$
|
|
1127
|
+
res[i] = __assign$4(__assign$4({}, list[i]), { EMA12: null });
|
|
1193
1128
|
else {
|
|
1194
1129
|
beforeEMA12 = (beforeEMA12 * 11) / 13 + (this.getDI(list[i]) * 2) / 13;
|
|
1195
|
-
res[i] = __assign$
|
|
1130
|
+
res[i] = __assign$4(__assign$4({}, list[i]), { EMA12: beforeEMA12 });
|
|
1196
1131
|
}
|
|
1197
1132
|
}
|
|
1198
1133
|
return res;
|
|
@@ -1208,10 +1143,10 @@
|
|
|
1208
1143
|
var res = [];
|
|
1209
1144
|
for (var i = 0; i < list.length; i++) {
|
|
1210
1145
|
if (i < 26)
|
|
1211
|
-
res[i] = __assign$
|
|
1146
|
+
res[i] = __assign$4(__assign$4({}, list[i]), { EMA26: null });
|
|
1212
1147
|
else {
|
|
1213
1148
|
beforeEMA26 = (beforeEMA26 * 25) / 27 + (this.getDI(list[i]) * 2) / 27;
|
|
1214
|
-
res[i] = __assign$
|
|
1149
|
+
res[i] = __assign$4(__assign$4({}, list[i]), { EMA26: beforeEMA26 });
|
|
1215
1150
|
}
|
|
1216
1151
|
}
|
|
1217
1152
|
return res;
|
|
@@ -1226,12 +1161,12 @@
|
|
|
1226
1161
|
var res = [];
|
|
1227
1162
|
for (var i = 0; i < list.length; i++) {
|
|
1228
1163
|
if (i < 26)
|
|
1229
|
-
res[i] = __assign$
|
|
1164
|
+
res[i] = __assign$4(__assign$4({}, list[i]), { DIF: null });
|
|
1230
1165
|
else {
|
|
1231
1166
|
var EMA12 = ((_a = ResEMA12 === null || ResEMA12 === void 0 ? void 0 : ResEMA12[i]) === null || _a === void 0 ? void 0 : _a["EMA12"]) && ResEMA12[i]["EMA12"];
|
|
1232
1167
|
var EMA26 = ((_b = ResEMA26 === null || ResEMA26 === void 0 ? void 0 : ResEMA26[i]) === null || _b === void 0 ? void 0 : _b["EMA26"]) && ResEMA26[i]["EMA26"];
|
|
1233
1168
|
var DIF = EMA12 - EMA26;
|
|
1234
|
-
res[i] = __assign$
|
|
1169
|
+
res[i] = __assign$4(__assign$4({}, list[i]), { DIF: DIF });
|
|
1235
1170
|
}
|
|
1236
1171
|
}
|
|
1237
1172
|
return res;
|
|
@@ -1246,19 +1181,19 @@
|
|
|
1246
1181
|
var beforeMACD9 = 0;
|
|
1247
1182
|
for (var i = 0; i < list.length; i++) {
|
|
1248
1183
|
if (i < 26)
|
|
1249
|
-
res[i] = __assign$
|
|
1184
|
+
res[i] = __assign$4(__assign$4({}, list[i]), { MACD9: null, OSC: null });
|
|
1250
1185
|
else if (i === 26) {
|
|
1251
1186
|
var MACD9 = DIF.slice(26, 34)
|
|
1252
1187
|
.map(function (item) { return ((item === null || item === void 0 ? void 0 : item.DIF) ? item["DIF"] : 0); })
|
|
1253
1188
|
.reduce(function (accumulator, currentValue) { return accumulator + currentValue; });
|
|
1254
1189
|
var OSC = DIF[i]["DIF"] - MACD9;
|
|
1255
|
-
res[26] = __assign$
|
|
1190
|
+
res[26] = __assign$4(__assign$4({}, list[i]), { MACD9: MACD9, OSC: OSC });
|
|
1256
1191
|
beforeMACD9 = MACD9;
|
|
1257
1192
|
}
|
|
1258
1193
|
else {
|
|
1259
1194
|
var MACD9 = beforeMACD9 + ((DIF[i]["DIF"] - beforeMACD9) * 2) / 10;
|
|
1260
1195
|
var OSC = DIF[i]["DIF"] - MACD9;
|
|
1261
|
-
res[i] = __assign$
|
|
1196
|
+
res[i] = __assign$4(__assign$4({}, list[i]), { MACD9: MACD9, OSC: OSC });
|
|
1262
1197
|
beforeMACD9 = MACD9;
|
|
1263
1198
|
}
|
|
1264
1199
|
}
|
|
@@ -1268,8 +1203,8 @@
|
|
|
1268
1203
|
return MACD;
|
|
1269
1204
|
}());
|
|
1270
1205
|
|
|
1271
|
-
var __assign$
|
|
1272
|
-
__assign$
|
|
1206
|
+
var __assign$3 = (undefined && undefined.__assign) || function () {
|
|
1207
|
+
__assign$3 = Object.assign || function(t) {
|
|
1273
1208
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
1274
1209
|
s = arguments[i];
|
|
1275
1210
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
@@ -1277,7 +1212,7 @@
|
|
|
1277
1212
|
}
|
|
1278
1213
|
return t;
|
|
1279
1214
|
};
|
|
1280
|
-
return __assign$
|
|
1215
|
+
return __assign$3.apply(this, arguments);
|
|
1281
1216
|
};
|
|
1282
1217
|
var __spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {
|
|
1283
1218
|
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
@@ -1295,14 +1230,11 @@
|
|
|
1295
1230
|
enumerable: false,
|
|
1296
1231
|
configurable: true,
|
|
1297
1232
|
writable: true,
|
|
1298
|
-
value: function (data
|
|
1233
|
+
value: function (data) {
|
|
1299
1234
|
return {
|
|
1300
1235
|
dataset: [data],
|
|
1301
1236
|
obv: data.v,
|
|
1302
|
-
obvList: [data.v],
|
|
1303
1237
|
preClose: data.c,
|
|
1304
|
-
obvMa: 0,
|
|
1305
|
-
type: type,
|
|
1306
1238
|
};
|
|
1307
1239
|
}
|
|
1308
1240
|
});
|
|
@@ -1310,7 +1242,7 @@
|
|
|
1310
1242
|
enumerable: false,
|
|
1311
1243
|
configurable: true,
|
|
1312
1244
|
writable: true,
|
|
1313
|
-
value: function (data, preList
|
|
1245
|
+
value: function (data, preList) {
|
|
1314
1246
|
var currentVolume = data.v;
|
|
1315
1247
|
var currentClose = data.c;
|
|
1316
1248
|
// obv
|
|
@@ -1321,20 +1253,10 @@
|
|
|
1321
1253
|
else if (currentClose < preList.preClose) {
|
|
1322
1254
|
obv -= currentVolume;
|
|
1323
1255
|
}
|
|
1324
|
-
// obv Ma
|
|
1325
|
-
var obvList = preList.obvList;
|
|
1326
|
-
obvList.push(obv);
|
|
1327
|
-
if (obvList.length > type)
|
|
1328
|
-
obvList.shift();
|
|
1329
|
-
var sum = obvList.reduce(function (pre, current) { return pre + current; }, 0);
|
|
1330
|
-
var vma = Math.round((sum / type) * 100) / 100;
|
|
1331
1256
|
return {
|
|
1332
1257
|
dataset: __spreadArray(__spreadArray([], preList.dataset, true), [data], false),
|
|
1333
1258
|
obv: obv,
|
|
1334
1259
|
preClose: currentClose,
|
|
1335
|
-
obvList: obvList,
|
|
1336
|
-
obvMa: vma,
|
|
1337
|
-
type: type,
|
|
1338
1260
|
};
|
|
1339
1261
|
}
|
|
1340
1262
|
});
|
|
@@ -1360,7 +1282,7 @@
|
|
|
1360
1282
|
else {
|
|
1361
1283
|
obv = currentVolume;
|
|
1362
1284
|
}
|
|
1363
|
-
res[i] = __assign$
|
|
1285
|
+
res[i] = __assign$3(__assign$3({}, list[i]), { obv: obv });
|
|
1364
1286
|
}
|
|
1365
1287
|
return res;
|
|
1366
1288
|
}
|
|
@@ -1368,8 +1290,8 @@
|
|
|
1368
1290
|
return Obv;
|
|
1369
1291
|
}());
|
|
1370
1292
|
|
|
1371
|
-
var __assign$
|
|
1372
|
-
__assign$
|
|
1293
|
+
var __assign$2 = (undefined && undefined.__assign) || function () {
|
|
1294
|
+
__assign$2 = Object.assign || function(t) {
|
|
1373
1295
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
1374
1296
|
s = arguments[i];
|
|
1375
1297
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
@@ -1377,7 +1299,7 @@
|
|
|
1377
1299
|
}
|
|
1378
1300
|
return t;
|
|
1379
1301
|
};
|
|
1380
|
-
return __assign$
|
|
1302
|
+
return __assign$2.apply(this, arguments);
|
|
1381
1303
|
};
|
|
1382
1304
|
var Rsi = /** @class */ (function () {
|
|
1383
1305
|
function Rsi() {
|
|
@@ -1403,7 +1325,7 @@
|
|
|
1403
1325
|
value: function (data, preList, type) {
|
|
1404
1326
|
preList.dataset.push(data);
|
|
1405
1327
|
if (preList.dataset.length < type + 1) {
|
|
1406
|
-
return __assign$
|
|
1328
|
+
return __assign$2(__assign$2({}, preList), { rsi: 0, type: type, avgGain: 0, avgLoss: 0 });
|
|
1407
1329
|
}
|
|
1408
1330
|
else {
|
|
1409
1331
|
// 计算初始增益和损失
|
|
@@ -1437,7 +1359,7 @@
|
|
|
1437
1359
|
// 计算RSI
|
|
1438
1360
|
var rs = avgGain / avgLoss;
|
|
1439
1361
|
var rsi = 100 - 100 / (1 + rs);
|
|
1440
|
-
return __assign$
|
|
1362
|
+
return __assign$2(__assign$2({}, preList), { type: type, rsi: rsi, avgGain: avgGain, avgLoss: avgLoss });
|
|
1441
1363
|
}
|
|
1442
1364
|
}
|
|
1443
1365
|
});
|
|
@@ -1625,8 +1547,8 @@
|
|
|
1625
1547
|
return Vma;
|
|
1626
1548
|
}());
|
|
1627
1549
|
|
|
1628
|
-
var __assign = (undefined && undefined.__assign) || function () {
|
|
1629
|
-
__assign = Object.assign || function(t) {
|
|
1550
|
+
var __assign$1 = (undefined && undefined.__assign) || function () {
|
|
1551
|
+
__assign$1 = Object.assign || function(t) {
|
|
1630
1552
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
1631
1553
|
s = arguments[i];
|
|
1632
1554
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
@@ -1634,7 +1556,7 @@
|
|
|
1634
1556
|
}
|
|
1635
1557
|
return t;
|
|
1636
1558
|
};
|
|
1637
|
-
return __assign.apply(this, arguments);
|
|
1559
|
+
return __assign$1.apply(this, arguments);
|
|
1638
1560
|
};
|
|
1639
1561
|
var Williams = /** @class */ (function () {
|
|
1640
1562
|
function Williams() {
|
|
@@ -1697,7 +1619,7 @@
|
|
|
1697
1619
|
var res = [];
|
|
1698
1620
|
for (var i = 0; i < list.length; i++) {
|
|
1699
1621
|
if (i < 9)
|
|
1700
|
-
res[i] = __assign(__assign({}, list[i]), { williams9: null });
|
|
1622
|
+
res[i] = __assign$1(__assign$1({}, list[i]), { williams9: null });
|
|
1701
1623
|
else {
|
|
1702
1624
|
var maxList = list.slice(i - 8, i).map(function (item) { return item["h"]; });
|
|
1703
1625
|
var minList = list.slice(i - 8, i).map(function (item) { return item["l"]; });
|
|
@@ -1705,7 +1627,7 @@
|
|
|
1705
1627
|
var min = Math.min.apply(Math, minList);
|
|
1706
1628
|
var close_2 = list[i]["c"];
|
|
1707
1629
|
var williams9 = ((max - close_2) / (max - min)) * -100;
|
|
1708
|
-
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 });
|
|
1709
1631
|
}
|
|
1710
1632
|
}
|
|
1711
1633
|
return res;
|
|
@@ -1719,7 +1641,7 @@
|
|
|
1719
1641
|
var res = [];
|
|
1720
1642
|
for (var i = 0; i < list.length; i++) {
|
|
1721
1643
|
if (i < 18)
|
|
1722
|
-
res[i] = __assign(__assign({}, list[i]), { williams18: null });
|
|
1644
|
+
res[i] = __assign$1(__assign$1({}, list[i]), { williams18: null });
|
|
1723
1645
|
else {
|
|
1724
1646
|
var maxList = list.slice(i - 17, i).map(function (item) { return item["h"]; });
|
|
1725
1647
|
var minList = list.slice(i - 17, i).map(function (item) { return item["l"]; });
|
|
@@ -1727,7 +1649,7 @@
|
|
|
1727
1649
|
var min = Math.min.apply(Math, minList);
|
|
1728
1650
|
var close_3 = list[i]["c"];
|
|
1729
1651
|
var williams18 = ((max - close_3) / (max - min)) * -100;
|
|
1730
|
-
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 });
|
|
1731
1653
|
}
|
|
1732
1654
|
}
|
|
1733
1655
|
return res;
|
|
@@ -1736,6 +1658,217 @@
|
|
|
1736
1658
|
return Williams;
|
|
1737
1659
|
}());
|
|
1738
1660
|
|
|
1661
|
+
var ObvEma = /** @class */ (function () {
|
|
1662
|
+
function ObvEma() {
|
|
1663
|
+
}
|
|
1664
|
+
Object.defineProperty(ObvEma.prototype, "init", {
|
|
1665
|
+
enumerable: false,
|
|
1666
|
+
configurable: true,
|
|
1667
|
+
writable: true,
|
|
1668
|
+
value: function (obv, type) {
|
|
1669
|
+
return {
|
|
1670
|
+
obvList: [obv],
|
|
1671
|
+
ema: 0,
|
|
1672
|
+
ma: 0,
|
|
1673
|
+
type: type,
|
|
1674
|
+
};
|
|
1675
|
+
}
|
|
1676
|
+
});
|
|
1677
|
+
Object.defineProperty(ObvEma.prototype, "next", {
|
|
1678
|
+
enumerable: false,
|
|
1679
|
+
configurable: true,
|
|
1680
|
+
writable: true,
|
|
1681
|
+
value: function (obv, preList, type) {
|
|
1682
|
+
var obvList = preList.obvList;
|
|
1683
|
+
obvList.push(obv);
|
|
1684
|
+
var ma = 0;
|
|
1685
|
+
var ema = 0;
|
|
1686
|
+
if (obvList.length === type) {
|
|
1687
|
+
var sum = obvList.reduce(function (pre, current) { return pre + current; }, 0);
|
|
1688
|
+
ma = Math.round((sum / type) * 100) / 100;
|
|
1689
|
+
ema = ma;
|
|
1690
|
+
}
|
|
1691
|
+
else if (obvList.length > type) {
|
|
1692
|
+
obvList.shift();
|
|
1693
|
+
var sum = obvList.reduce(function (pre, current) { return pre + current; }, 0);
|
|
1694
|
+
ma = Math.round((sum / type) * 100) / 100;
|
|
1695
|
+
ema = (obv * 2 + (type - 1) * preList.ema) / (type + 1);
|
|
1696
|
+
}
|
|
1697
|
+
return {
|
|
1698
|
+
obvList: obvList,
|
|
1699
|
+
ema: ema,
|
|
1700
|
+
ma: ma,
|
|
1701
|
+
type: type,
|
|
1702
|
+
};
|
|
1703
|
+
}
|
|
1704
|
+
});
|
|
1705
|
+
return ObvEma;
|
|
1706
|
+
}());
|
|
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
|
+
|
|
1739
1872
|
function add(a, b) {
|
|
1740
1873
|
return a + b;
|
|
1741
1874
|
}
|
|
@@ -1779,7 +1912,9 @@
|
|
|
1779
1912
|
exports.Kd = Kd;
|
|
1780
1913
|
exports.Ma = Ma;
|
|
1781
1914
|
exports.Macd = MACD;
|
|
1915
|
+
exports.Mfi = Mfi;
|
|
1782
1916
|
exports.Obv = Obv;
|
|
1917
|
+
exports.ObvEma = ObvEma;
|
|
1783
1918
|
exports.Rsi = Rsi;
|
|
1784
1919
|
exports.SwingExtremes = SwingExtremes;
|
|
1785
1920
|
exports.Vma = Vma;
|