@ch20026103/anysis 0.0.14-alpha → 0.0.16-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.
- package/demo/main.js +19 -12
- package/dist/cjs/stockSkills/boll.d.ts +25 -50
- package/dist/cjs/stockSkills/boll.js +9 -11
- package/dist/cjs/stockSkills/ema.d.ts +11 -33
- package/dist/cjs/stockSkills/gold.d.ts +12 -32
- package/dist/cjs/stockSkills/kd.d.ts +29 -72
- package/dist/cjs/stockSkills/kd.js +14 -11
- package/dist/cjs/stockSkills/kd.test.js +1 -1
- package/dist/cjs/stockSkills/ma.d.ts +39 -60
- package/dist/cjs/stockSkills/ma.js +16 -7
- package/dist/cjs/stockSkills/macd.d.ts +32 -63
- package/dist/cjs/stockSkills/macd.js +21 -24
- package/dist/cjs/stockSkills/obv.d.ts +16 -49
- package/dist/cjs/stockSkills/obv.js +3 -1
- package/dist/cjs/stockSkills/rsi.d.ts +12 -31
- package/dist/cjs/stockSkills/rsi.js +79 -101
- package/dist/cjs/stockSkills/rsi.test.js +9 -20
- package/dist/cjs/stockSkills/types.d.ts +10 -0
- package/dist/cjs/stockSkills/types.js +2 -0
- package/dist/cjs/stockSkills/utils/getWeekLine.d.ts +4 -16
- package/dist/cjs/stockSkills/utils/getWeekLine.js +3 -0
- package/dist/cjs/stockSkills/utils/getWeekLine.test.js +1 -0
- package/dist/cjs/stockSkills/vma.d.ts +11 -26
- package/dist/cjs/stockSkills/williams.d.ts +20 -32
- package/dist/esm/stockSkills/boll.d.ts +25 -50
- package/dist/esm/stockSkills/boll.js +9 -11
- package/dist/esm/stockSkills/ema.d.ts +11 -33
- package/dist/esm/stockSkills/gold.d.ts +12 -32
- package/dist/esm/stockSkills/kd.d.ts +29 -72
- package/dist/esm/stockSkills/kd.js +14 -11
- package/dist/esm/stockSkills/kd.test.js +1 -1
- package/dist/esm/stockSkills/ma.d.ts +39 -60
- package/dist/esm/stockSkills/ma.js +16 -7
- package/dist/esm/stockSkills/macd.d.ts +32 -63
- package/dist/esm/stockSkills/macd.js +21 -24
- package/dist/esm/stockSkills/obv.d.ts +16 -49
- package/dist/esm/stockSkills/obv.js +3 -1
- package/dist/esm/stockSkills/rsi.d.ts +12 -31
- package/dist/esm/stockSkills/rsi.js +79 -101
- package/dist/esm/stockSkills/rsi.test.js +9 -20
- package/dist/esm/stockSkills/types.d.ts +10 -0
- package/dist/esm/stockSkills/types.js +1 -0
- package/dist/esm/stockSkills/utils/getWeekLine.d.ts +4 -16
- package/dist/esm/stockSkills/utils/getWeekLine.js +3 -0
- package/dist/esm/stockSkills/utils/getWeekLine.test.js +1 -0
- package/dist/esm/stockSkills/vma.d.ts +11 -26
- package/dist/esm/stockSkills/williams.d.ts +20 -32
- package/dist/umd/index.js +145 -155
- package/package.json +17 -15
package/dist/umd/index.js
CHANGED
|
@@ -326,9 +326,9 @@
|
|
|
326
326
|
value: function (data) {
|
|
327
327
|
return {
|
|
328
328
|
dataset: [data],
|
|
329
|
-
bollMa:
|
|
330
|
-
bollUb:
|
|
331
|
-
bollLb:
|
|
329
|
+
bollMa: 0,
|
|
330
|
+
bollUb: 0,
|
|
331
|
+
bollLb: 0,
|
|
332
332
|
};
|
|
333
333
|
}
|
|
334
334
|
});
|
|
@@ -342,9 +342,9 @@
|
|
|
342
342
|
return {
|
|
343
343
|
dataset: preList.dataset,
|
|
344
344
|
type: type,
|
|
345
|
-
bollMa:
|
|
346
|
-
bollUb:
|
|
347
|
-
bollLb:
|
|
345
|
+
bollMa: 0,
|
|
346
|
+
bollUb: 0,
|
|
347
|
+
bollLb: 0,
|
|
348
348
|
};
|
|
349
349
|
}
|
|
350
350
|
else {
|
|
@@ -354,7 +354,7 @@
|
|
|
354
354
|
var sum = preList.dataset.reduce(function (pre, current) { return pre + current.c; }, 0);
|
|
355
355
|
var bollMa_1 = Math.round((sum / type) * 100) / 100;
|
|
356
356
|
var difference = preList.dataset.reduce(function (pre, current) {
|
|
357
|
-
return bollMa_1 !==
|
|
357
|
+
return bollMa_1 !== 0 ? pre + Math.pow(current.c - bollMa_1, 2) : pre;
|
|
358
358
|
}, 0);
|
|
359
359
|
var std = Math.round(Math.sqrt(difference / type) * 100) / 100;
|
|
360
360
|
return {
|
|
@@ -375,7 +375,7 @@
|
|
|
375
375
|
var res = [];
|
|
376
376
|
var _loop_1 = function (i) {
|
|
377
377
|
if (i < type)
|
|
378
|
-
res[i] = __assign$7(__assign$7({}, list[i]), { bollMa:
|
|
378
|
+
res[i] = __assign$7(__assign$7({}, list[i]), { bollMa: 0, bollUb: 0, bollLb: 0 });
|
|
379
379
|
else {
|
|
380
380
|
// bollMa
|
|
381
381
|
var sumMa = list
|
|
@@ -386,9 +386,7 @@
|
|
|
386
386
|
var difference = res
|
|
387
387
|
.slice(i - (type - 1), i + 1)
|
|
388
388
|
.reduce(function (pre, current) {
|
|
389
|
-
return bollMa_2 !==
|
|
390
|
-
? pre + Math.pow(current.c - bollMa_2, 2)
|
|
391
|
-
: pre;
|
|
389
|
+
return bollMa_2 !== 0 ? pre + Math.pow(current.c - bollMa_2, 2) : pre;
|
|
392
390
|
}, 0);
|
|
393
391
|
var std = Math.round(Math.sqrt(difference / type) * 100) / 100;
|
|
394
392
|
res[i] = __assign$7(__assign$7({}, list[i]), { bollMa: bollMa_2, bollUb: bollMa_2 + 2 * std, bollLb: bollMa_2 - 2 * std });
|
|
@@ -516,6 +514,7 @@
|
|
|
516
514
|
t: collectWeekData[collectWeekData.length - 1]["t"],
|
|
517
515
|
h: Math.max.apply(Math, collectWeekData.map(function (item) { return item.h; })),
|
|
518
516
|
l: Math.min.apply(Math, collectWeekData.map(function (item) { return item.l; })),
|
|
517
|
+
v: collectWeekData.reduce(function (pre, current) { return pre + current.v; }, 0),
|
|
519
518
|
};
|
|
520
519
|
res.push(addDetail(obj, collectWeekData, detail));
|
|
521
520
|
collectWeekData = [];
|
|
@@ -529,6 +528,7 @@
|
|
|
529
528
|
t: collectWeekData[collectWeekData.length - 1]["t"],
|
|
530
529
|
h: Math.max.apply(Math, collectWeekData.map(function (item) { return item.h; })),
|
|
531
530
|
l: Math.min.apply(Math, collectWeekData.map(function (item) { return item.l; })),
|
|
531
|
+
v: collectWeekData.reduce(function (pre, current) { return pre + current.v; }, 0),
|
|
532
532
|
};
|
|
533
533
|
res.push(addDetail(obj, collectWeekData, detail));
|
|
534
534
|
}
|
|
@@ -544,6 +544,7 @@
|
|
|
544
544
|
t: collectWeekData[collectWeekData.length - 1]["t"],
|
|
545
545
|
h: Math.max.apply(Math, collectWeekData.map(function (item) { return item.h; })),
|
|
546
546
|
l: Math.min.apply(Math, collectWeekData.map(function (item) { return item.l; })),
|
|
547
|
+
v: collectWeekData.reduce(function (pre, current) { return pre + current.v; }, 0),
|
|
547
548
|
};
|
|
548
549
|
res.push(addDetail(obj, collectWeekData, detail));
|
|
549
550
|
}
|
|
@@ -771,13 +772,14 @@
|
|
|
771
772
|
enumerable: false,
|
|
772
773
|
configurable: true,
|
|
773
774
|
writable: true,
|
|
774
|
-
value: function (data) {
|
|
775
|
+
value: function (data, type) {
|
|
775
776
|
return {
|
|
776
777
|
dataset: [data],
|
|
777
|
-
rsv:
|
|
778
|
-
k:
|
|
779
|
-
d:
|
|
780
|
-
"k-d":
|
|
778
|
+
rsv: 0,
|
|
779
|
+
k: 0,
|
|
780
|
+
d: 0,
|
|
781
|
+
"k-d": 0,
|
|
782
|
+
type: type,
|
|
781
783
|
};
|
|
782
784
|
}
|
|
783
785
|
});
|
|
@@ -790,10 +792,11 @@
|
|
|
790
792
|
if (preList.dataset.length < type) {
|
|
791
793
|
return {
|
|
792
794
|
dataset: preList.dataset,
|
|
793
|
-
rsv:
|
|
794
|
-
k:
|
|
795
|
-
d:
|
|
796
|
-
"k-d":
|
|
795
|
+
rsv: 0,
|
|
796
|
+
k: 0,
|
|
797
|
+
d: 0,
|
|
798
|
+
"k-d": 0,
|
|
799
|
+
type: type,
|
|
797
800
|
};
|
|
798
801
|
}
|
|
799
802
|
else {
|
|
@@ -817,6 +820,7 @@
|
|
|
817
820
|
k: k,
|
|
818
821
|
d: d,
|
|
819
822
|
"k-d": k_d,
|
|
823
|
+
type: type,
|
|
820
824
|
};
|
|
821
825
|
}
|
|
822
826
|
}
|
|
@@ -829,7 +833,7 @@
|
|
|
829
833
|
var res = [];
|
|
830
834
|
for (var i = 0; i < list.length; i++) {
|
|
831
835
|
if (i < 8)
|
|
832
|
-
res[i] = __assign$5(__assign$5({}, list[i]), { rsv:
|
|
836
|
+
res[i] = __assign$5(__assign$5({}, list[i]), { rsv: 0 });
|
|
833
837
|
else {
|
|
834
838
|
var low = Math.min.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.l; }));
|
|
835
839
|
var hight = Math.max.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.h; }));
|
|
@@ -852,7 +856,7 @@
|
|
|
852
856
|
var yesterdayD = 50;
|
|
853
857
|
for (var i = 0; i < list.length; i++) {
|
|
854
858
|
if (i < 8)
|
|
855
|
-
res[i] = __assign$5(__assign$5({}, list[i]), { rsv:
|
|
859
|
+
res[i] = __assign$5(__assign$5({}, list[i]), { rsv: 0, k: 0, d: 0, "k-d": 0 });
|
|
856
860
|
else {
|
|
857
861
|
var low = Math.min.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.l; }));
|
|
858
862
|
var hight = Math.max.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.h; }));
|
|
@@ -895,7 +899,12 @@
|
|
|
895
899
|
configurable: true,
|
|
896
900
|
writable: true,
|
|
897
901
|
value: function (data, type) {
|
|
898
|
-
return {
|
|
902
|
+
return {
|
|
903
|
+
dataset: [data],
|
|
904
|
+
ma: 0,
|
|
905
|
+
type: type,
|
|
906
|
+
exclusionValue: { "d+1": 0, d: 0, "d-1": 0 },
|
|
907
|
+
};
|
|
899
908
|
}
|
|
900
909
|
});
|
|
901
910
|
Object.defineProperty(Ma.prototype, "next", {
|
|
@@ -913,7 +922,11 @@
|
|
|
913
922
|
};
|
|
914
923
|
}
|
|
915
924
|
else {
|
|
916
|
-
var exclusionValue = {
|
|
925
|
+
var exclusionValue = {
|
|
926
|
+
"d+1": preList.dataset[1].c,
|
|
927
|
+
d: preList.dataset[0].c,
|
|
928
|
+
"d-1": 0,
|
|
929
|
+
};
|
|
917
930
|
if (preList.dataset.length > type) {
|
|
918
931
|
exclusionValue["d-1"] = exclusionValue.d;
|
|
919
932
|
preList.dataset.shift();
|
|
@@ -950,7 +963,7 @@
|
|
|
950
963
|
var res = [];
|
|
951
964
|
for (var i = 0; i < list.length; i++) {
|
|
952
965
|
if (i < 4)
|
|
953
|
-
res[i] = __assign$4(__assign$4({}, list[i]), { ma5:
|
|
966
|
+
res[i] = __assign$4(__assign$4({}, list[i]), { ma5: 0 });
|
|
954
967
|
else {
|
|
955
968
|
var sum = list
|
|
956
969
|
.slice(i - 4, i + 1)
|
|
@@ -970,7 +983,7 @@
|
|
|
970
983
|
var res = [];
|
|
971
984
|
for (var i = 0; i < list.length; i++) {
|
|
972
985
|
if (i < 9)
|
|
973
|
-
res[i] = __assign$4(__assign$4({}, list[i]), { ma10:
|
|
986
|
+
res[i] = __assign$4(__assign$4({}, list[i]), { ma10: 0 });
|
|
974
987
|
else {
|
|
975
988
|
var sum = list
|
|
976
989
|
.slice(i - 9, i + 1)
|
|
@@ -990,7 +1003,7 @@
|
|
|
990
1003
|
var res = [];
|
|
991
1004
|
for (var i = 0; i < list.length; i++) {
|
|
992
1005
|
if (i < 19)
|
|
993
|
-
res[i] = __assign$4(__assign$4({}, list[i]), { ma20:
|
|
1006
|
+
res[i] = __assign$4(__assign$4({}, list[i]), { ma20: 0 });
|
|
994
1007
|
else {
|
|
995
1008
|
var sum = list
|
|
996
1009
|
.slice(i - 19, i + 1)
|
|
@@ -1010,7 +1023,7 @@
|
|
|
1010
1023
|
var res = [];
|
|
1011
1024
|
for (var i = 0; i < list.length; i++) {
|
|
1012
1025
|
if (i < 59)
|
|
1013
|
-
res[i] = __assign$4(__assign$4({}, list[i]), { ma60:
|
|
1026
|
+
res[i] = __assign$4(__assign$4({}, list[i]), { ma60: 0 });
|
|
1014
1027
|
else {
|
|
1015
1028
|
var sum = list
|
|
1016
1029
|
.slice(i - 59, i + 1)
|
|
@@ -1030,7 +1043,7 @@
|
|
|
1030
1043
|
var res = [];
|
|
1031
1044
|
for (var i = 0; i < list.length; i++) {
|
|
1032
1045
|
if (i < self - 1)
|
|
1033
|
-
res[i] = __assign$4(__assign$4({}, list[i]), { ma:
|
|
1046
|
+
res[i] = __assign$4(__assign$4({}, list[i]), { ma: 0 });
|
|
1034
1047
|
else {
|
|
1035
1048
|
var sum = list
|
|
1036
1049
|
.slice(i - (self - 1), i + 1)
|
|
@@ -1066,11 +1079,11 @@
|
|
|
1066
1079
|
value: function (data) {
|
|
1067
1080
|
return {
|
|
1068
1081
|
dataset: [data],
|
|
1069
|
-
ema12:
|
|
1070
|
-
ema26:
|
|
1082
|
+
ema12: 0,
|
|
1083
|
+
ema26: 0,
|
|
1071
1084
|
dif: [],
|
|
1072
|
-
macd:
|
|
1073
|
-
osc:
|
|
1085
|
+
macd: 0,
|
|
1086
|
+
osc: 0,
|
|
1074
1087
|
};
|
|
1075
1088
|
}
|
|
1076
1089
|
});
|
|
@@ -1084,7 +1097,7 @@
|
|
|
1084
1097
|
if (preList.dataset.length > 34)
|
|
1085
1098
|
preList.dataset.shift();
|
|
1086
1099
|
// EMA12
|
|
1087
|
-
var ema12 =
|
|
1100
|
+
var ema12 = 0;
|
|
1088
1101
|
if (preList.dataset.length === 12) {
|
|
1089
1102
|
ema12 = this.getStartEMA(preList.dataset);
|
|
1090
1103
|
ema12 = (ema12 * 11) / 13 + (this.getDI(data) * 2) / 13;
|
|
@@ -1095,7 +1108,7 @@
|
|
|
1095
1108
|
ema12 = Math.round(ema12 * 100) / 100;
|
|
1096
1109
|
}
|
|
1097
1110
|
// EMA26
|
|
1098
|
-
var ema26 =
|
|
1111
|
+
var ema26 = 0;
|
|
1099
1112
|
if (preList.dataset.length === 26) {
|
|
1100
1113
|
ema26 = this.getStartEMA(preList.dataset);
|
|
1101
1114
|
ema26 = (ema26 * 25) / 27 + (this.getDI(data) * 2) / 27;
|
|
@@ -1106,36 +1119,33 @@
|
|
|
1106
1119
|
ema26 = Math.round(ema26 * 100) / 100;
|
|
1107
1120
|
}
|
|
1108
1121
|
// DIF
|
|
1109
|
-
var dif =
|
|
1122
|
+
var dif = 0;
|
|
1110
1123
|
if (ema12 && ema26) {
|
|
1111
1124
|
dif = ema12 - ema26;
|
|
1112
1125
|
dif = Math.round(dif * 100) / 100;
|
|
1113
1126
|
(_a = preList.dif) === null || _a === void 0 ? void 0 : _a.push(dif);
|
|
1114
|
-
if (preList.dif.length > 9)
|
|
1115
|
-
(_b = preList.dif) === null || _b === void 0 ? void 0 : _b.shift();
|
|
1116
1127
|
}
|
|
1117
1128
|
// MACD & OSC
|
|
1118
|
-
var macd =
|
|
1119
|
-
var osc =
|
|
1129
|
+
var macd = 0;
|
|
1130
|
+
var osc = 0;
|
|
1120
1131
|
if (preList.dif.length === 9) {
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
macd = macd + ((item - macd) * 2) / 10;
|
|
1126
|
-
macd = Math.round(macd * 100) / 100;
|
|
1127
|
-
osc = item - macd;
|
|
1128
|
-
osc = Math.round(osc * 100) / 100;
|
|
1129
|
-
}
|
|
1130
|
-
}
|
|
1131
|
-
else {
|
|
1132
|
-
macd = preList.macd + ((dif - preList.macd) * 2) / 10;
|
|
1132
|
+
macd = preList.dif.reduce(function (accumulator, currentValue) { return accumulator + currentValue; });
|
|
1133
|
+
for (var i = 0; i < 9; i++) {
|
|
1134
|
+
var item = preList.dif[i];
|
|
1135
|
+
macd = macd + ((item - macd) * 2) / 10;
|
|
1133
1136
|
macd = Math.round(macd * 100) / 100;
|
|
1134
|
-
var item = preList.dif[preList.dif.length - 1];
|
|
1135
1137
|
osc = item - macd;
|
|
1136
1138
|
osc = Math.round(osc * 100) / 100;
|
|
1137
1139
|
}
|
|
1138
1140
|
}
|
|
1141
|
+
else if (preList.dif.length > 9) {
|
|
1142
|
+
macd = preList.macd + ((dif - preList.macd) * 2) / 10;
|
|
1143
|
+
macd = Math.round(macd * 100) / 100;
|
|
1144
|
+
var item = preList.dif[preList.dif.length - 1];
|
|
1145
|
+
osc = item - macd;
|
|
1146
|
+
osc = Math.round(osc * 100) / 100;
|
|
1147
|
+
(_b = preList.dif) === null || _b === void 0 ? void 0 : _b.shift();
|
|
1148
|
+
}
|
|
1139
1149
|
return {
|
|
1140
1150
|
dataset: preList.dataset,
|
|
1141
1151
|
ema12: ema12,
|
|
@@ -1308,6 +1318,7 @@
|
|
|
1308
1318
|
obvList: [data.v],
|
|
1309
1319
|
preClose: data.c,
|
|
1310
1320
|
obvMa: 0,
|
|
1321
|
+
type: type,
|
|
1311
1322
|
};
|
|
1312
1323
|
}
|
|
1313
1324
|
});
|
|
@@ -1338,7 +1349,8 @@
|
|
|
1338
1349
|
obv: obv,
|
|
1339
1350
|
preClose: currentClose,
|
|
1340
1351
|
obvList: obvList,
|
|
1341
|
-
obvMa: vma
|
|
1352
|
+
obvMa: vma,
|
|
1353
|
+
type: type,
|
|
1342
1354
|
};
|
|
1343
1355
|
}
|
|
1344
1356
|
});
|
|
@@ -1386,130 +1398,108 @@
|
|
|
1386
1398
|
var Rsi = /** @class */ (function () {
|
|
1387
1399
|
function Rsi() {
|
|
1388
1400
|
}
|
|
1389
|
-
Object.defineProperty(Rsi.prototype, "
|
|
1401
|
+
Object.defineProperty(Rsi.prototype, "init", {
|
|
1390
1402
|
enumerable: false,
|
|
1391
1403
|
configurable: true,
|
|
1392
1404
|
writable: true,
|
|
1393
|
-
value: function (
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1405
|
+
value: function (data, type) {
|
|
1406
|
+
return {
|
|
1407
|
+
dataset: [data],
|
|
1408
|
+
rsi: 0,
|
|
1409
|
+
type: type,
|
|
1410
|
+
avgGain: 0,
|
|
1411
|
+
avgLoss: 0,
|
|
1412
|
+
};
|
|
1401
1413
|
}
|
|
1402
1414
|
});
|
|
1403
|
-
Object.defineProperty(Rsi.prototype, "
|
|
1415
|
+
Object.defineProperty(Rsi.prototype, "next", {
|
|
1404
1416
|
enumerable: false,
|
|
1405
1417
|
configurable: true,
|
|
1406
1418
|
writable: true,
|
|
1407
|
-
value: function (
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
res[i] = __assign$1(__assign$1({}, list[i]), { rsi6: null });
|
|
1419
|
+
value: function (data, preList, type) {
|
|
1420
|
+
preList.dataset.push(data);
|
|
1421
|
+
if (preList.dataset.length < type + 1) {
|
|
1422
|
+
return __assign$1(__assign$1({}, preList), { rsi: 0, type: type, avgGain: 0, avgLoss: 0 });
|
|
1412
1423
|
}
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1424
|
+
else {
|
|
1425
|
+
// 计算初始增益和损失
|
|
1426
|
+
var avgGain = 0;
|
|
1427
|
+
var avgLoss = 0;
|
|
1428
|
+
if (preList.dataset.length === type + 1) {
|
|
1429
|
+
var gains = 0;
|
|
1430
|
+
var losses = 0;
|
|
1431
|
+
for (var i = 1; i <= type; i++) {
|
|
1432
|
+
var change = preList.dataset[i].c - preList.dataset[i - 1].c;
|
|
1433
|
+
if (change > 0) {
|
|
1434
|
+
gains += change;
|
|
1435
|
+
}
|
|
1436
|
+
else {
|
|
1437
|
+
losses -= change;
|
|
1438
|
+
}
|
|
1439
|
+
}
|
|
1440
|
+
avgGain = gains / type;
|
|
1441
|
+
avgLoss = losses / type;
|
|
1425
1442
|
}
|
|
1426
|
-
else {
|
|
1427
|
-
|
|
1443
|
+
else if (preList.dataset.length > type + 1) {
|
|
1444
|
+
preList.dataset.shift();
|
|
1445
|
+
// 更新平均增益和平均损失
|
|
1446
|
+
var change = preList.dataset[preList.dataset.length - 1].c -
|
|
1447
|
+
preList.dataset[preList.dataset.length - 2].c;
|
|
1448
|
+
avgGain =
|
|
1449
|
+
(preList.avgGain * (type - 1) + (change > 0 ? change : 0)) / type;
|
|
1450
|
+
avgLoss =
|
|
1451
|
+
(preList.avgLoss * (type - 1) + (change < 0 ? -change : 0)) / type;
|
|
1428
1452
|
}
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
var
|
|
1432
|
-
|
|
1453
|
+
// 计算RSI
|
|
1454
|
+
var rs = avgGain / avgLoss;
|
|
1455
|
+
var rsi = 100 - 100 / (1 + rs);
|
|
1456
|
+
return __assign$1(__assign$1({}, preList), { type: type, rsi: rsi, avgGain: avgGain, avgLoss: avgLoss });
|
|
1433
1457
|
}
|
|
1434
|
-
return res;
|
|
1435
1458
|
}
|
|
1436
1459
|
});
|
|
1437
|
-
Object.defineProperty(Rsi.prototype, "
|
|
1460
|
+
Object.defineProperty(Rsi.prototype, "calculateRSI", {
|
|
1438
1461
|
enumerable: false,
|
|
1439
1462
|
configurable: true,
|
|
1440
1463
|
writable: true,
|
|
1441
|
-
value: function (
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
res[i] = __assign$1(__assign$1({}, list[i]), { rsi12: null });
|
|
1464
|
+
value: function (prices, period) {
|
|
1465
|
+
if (period === void 0) { period = 5; }
|
|
1466
|
+
if (prices.length < period + 1) {
|
|
1467
|
+
return [];
|
|
1446
1468
|
}
|
|
1447
|
-
//
|
|
1448
|
-
var
|
|
1449
|
-
var
|
|
1450
|
-
|
|
1451
|
-
res[11] = __assign$1(__assign$1({}, list[11]), { rsi12: firstRsi12 });
|
|
1452
|
-
// else
|
|
1453
|
-
for (var i = 12; i < list.length; i++) {
|
|
1454
|
-
var minusU = 0;
|
|
1455
|
-
var minusD = 0;
|
|
1456
|
-
var minusC = list[i]["c"] - list[i - 1]["c"];
|
|
1457
|
-
if (minusC > 0) {
|
|
1458
|
-
minusU = minusC;
|
|
1459
|
-
}
|
|
1460
|
-
else {
|
|
1461
|
-
minusD = minusC;
|
|
1462
|
-
}
|
|
1463
|
-
beforeUpAvg = (beforeUpAvg * 11) / 12 + minusU / 12;
|
|
1464
|
-
beforeDownAvg = (beforeDownAvg * 11) / 12 + Math.abs(minusD) / 12;
|
|
1465
|
-
var rsi12 = this.getRsi(beforeUpAvg, beforeDownAvg);
|
|
1466
|
-
res[i] = __assign$1(__assign$1({}, list[i]), { rsi12: Math.round(rsi12 * 100) / 100 });
|
|
1469
|
+
// 计算价格变化
|
|
1470
|
+
var changes = [];
|
|
1471
|
+
for (var i = 1; i < prices.length; i++) {
|
|
1472
|
+
changes.push(prices[i].c - prices[i - 1].c);
|
|
1467
1473
|
}
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
writable: true,
|
|
1475
|
-
value: function (list, count) {
|
|
1476
|
-
var start = list.slice(0, 5);
|
|
1477
|
-
var sum = 0;
|
|
1478
|
-
for (var i = 1; i < start.length; i++) {
|
|
1479
|
-
var minus = start[i]["c"] - start[i - 1]["c"];
|
|
1480
|
-
if (minus > 0) {
|
|
1481
|
-
sum += minus;
|
|
1474
|
+
// 计算增益和损失
|
|
1475
|
+
var gains = 0;
|
|
1476
|
+
var losses = 0;
|
|
1477
|
+
for (var i = 0; i < period; i++) {
|
|
1478
|
+
if (changes[i] > 0) {
|
|
1479
|
+
gains += changes[i];
|
|
1482
1480
|
}
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
}
|
|
1486
|
-
});
|
|
1487
|
-
Object.defineProperty(Rsi.prototype, "getStartDownAvg", {
|
|
1488
|
-
enumerable: false,
|
|
1489
|
-
configurable: true,
|
|
1490
|
-
writable: true,
|
|
1491
|
-
value: function (list, count) {
|
|
1492
|
-
var start = list.slice(0, 5);
|
|
1493
|
-
var sum = 0;
|
|
1494
|
-
for (var i = 1; i < start.length; i++) {
|
|
1495
|
-
var minus = start[i]["c"] - start[i - 1]["c"];
|
|
1496
|
-
if (minus < 0) {
|
|
1497
|
-
sum += minus;
|
|
1481
|
+
else {
|
|
1482
|
+
losses -= changes[i];
|
|
1498
1483
|
}
|
|
1499
1484
|
}
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
var
|
|
1509
|
-
|
|
1510
|
-
|
|
1485
|
+
// 计算初始平均增益和平均损失
|
|
1486
|
+
var avgGain = gains / period;
|
|
1487
|
+
var avgLoss = losses / period;
|
|
1488
|
+
// 计算RSI
|
|
1489
|
+
var rsis = [];
|
|
1490
|
+
var rs = avgGain / avgLoss;
|
|
1491
|
+
var rsi = 100 - 100 / (1 + rs);
|
|
1492
|
+
rsis.push(rsi);
|
|
1493
|
+
for (var i = period; i < changes.length; i++) {
|
|
1494
|
+
// 更新平均增益和平均损失
|
|
1495
|
+
var change = changes[i];
|
|
1496
|
+
avgGain = (avgGain * (period - 1) + (change > 0 ? change : 0)) / period;
|
|
1497
|
+
avgLoss = (avgLoss * (period - 1) + (change < 0 ? -change : 0)) / period;
|
|
1498
|
+
var rs_1 = avgGain / avgLoss;
|
|
1499
|
+
var rsi_1 = 100 - 100 / (1 + rs_1);
|
|
1500
|
+
rsis.push(rsi_1);
|
|
1511
1501
|
}
|
|
1512
|
-
return
|
|
1502
|
+
return rsis;
|
|
1513
1503
|
}
|
|
1514
1504
|
});
|
|
1515
1505
|
return Rsi;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ch20026103/anysis",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.16-alpha",
|
|
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
|
+
}
|