calDMIDatas method
dynamic
calDMIDatas(
- dynamic close,
- dynamic high,
- dynamic low,
- dynamic p0,
- dynamic p1,
计算DMI指标 @param close 收盘点 @param high 最高点 @param low 最低点 @param p0 = 14 回溯周期 (1 <= p0 <= 300) @param p1 = 6 (1 <= p1 <= 300)
Implementation
calDMIDatas(close, high, low, p0, p1) {
var resultObj = {};
var di1Arr = [];
var di2Arr = [];
var adxArr = [];
var adxrArr = [];
var size = close.length;
var i = 0;
var refArr = REF(close, 1);
var refHighArr = REF(high, 1);
var refLowArr = REF(low, 1);
var tr = [];
var hd = [];
var ld = [];
var dmpArr = [];
var dmmArr = [];
num tempNum = 0;
var tempADXArr = [];
var tempADXRArr = [];
var tempTr = [];
var tempHDArr = [];
var tempLDArr = [];
for (i = 0; i < size; i++) {
tempTr.add(Tools.max(
Tools.max(high[i] - low[i], (high[i] - refArr[i]).abs()),
(low[i] - refArr[i]).abs()));
hd.add(high[i] - refHighArr[i]);
ld.add(refLowArr[i] - low[i]);
//计算dmp
if (hd[i] > 0 && hd[i] > ld[i]) {
tempNum = hd[i];
} else {
tempNum = 0.0;
}
tempHDArr.add(tempNum);
//计算dmm
if (ld[i] > 0 && ld[i] > hd[i]) {
tempNum = ld[i];
} else {
tempNum = 0.0;
}
tempLDArr.add(tempNum);
}
tr = SUM(tempTr, p0);
dmpArr = SUM(tempHDArr, p0);
dmmArr = SUM(tempLDArr, p0);
for (i = 0; i < size; i++) {
if (!Tools.isNaN(tr[i])) {
di1Arr.add((dmpArr[i] * 100) / tr[i]);
di2Arr.add((dmmArr[i] * 100) / tr[i]);
} else {
di1Arr.add(0);
di2Arr.add(0);
}
if (di1Arr[i] + di2Arr[i] == 0) {
tempADXArr.add(0.0);
} else {
tempADXArr.add(
((di2Arr[i] - di1Arr[i]).abs() / (di1Arr[i] + di2Arr[i])) * 100);
}
}
adxArr = MA(tempADXArr, p1);
tempADXRArr = REF(adxArr, p1);
var len = adxArr.length;
for (i = 0; i < len; i++) {
if (Tools.isNaN(adxArr[i]) || Tools.isNaN(tempADXRArr[i])) {
adxrArr.add(0.0);
} else {
adxrArr.add((adxArr[i] + tempADXRArr[i]) / 2);
}
}
resultObj['DI1'] = di1Arr;
resultObj['DI2'] = di2Arr;
resultObj['ADX'] = adxArr;
resultObj['ADXR'] = adxrArr;
return resultObj;
}