UNPKG

@dickyindra/klinecharts

Version:

Lightweight k-line chart built with html5 canvas

142 lines (122 loc) 4.13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; /** * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http:*www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * MID:=REF(HIGH+LOW,1)/2; * CR:SUM(MAX(0,HIGH-MID),N)/SUM(MAX(0,MID-LOW),N)*100; * MA1:REF(MA(CR,M1),M1/2.5+1); * MA2:REF(MA(CR,M2),M2/2.5+1); * MA3:REF(MA(CR,M3),M3/2.5+1); * MA4:REF(MA(CR,M4),M4/2.5+1); * MID赋值:(昨日最高价+昨日最低价)/2 * 输出带状能量线:0和最高价-MID的较大值的N日累和/0和MID-最低价的较大值的N日累和*100 * 输出MA1:M1(5)/2.5+1日前的CR的M1(5)日简单移动平均 * 输出MA2:M2(10)/2.5+1日前的CR的M2(10)日简单移动平均 * 输出MA3:M3(20)/2.5+1日前的CR的M3(20)日简单移动平均 * 输出MA4:M4/2.5+1日前的CR的M4日简单移动平均 * */ var _default = { name: 'CR', shortName: 'CR', calcParams: [26, 10, 20, 40, 60], plots: [{ key: 'cr', title: 'CR: ', type: 'line' }, { key: 'ma1', title: 'MA1: ', type: 'line' }, { key: 'ma2', title: 'MA2: ', type: 'line' }, { key: 'ma3', title: 'MA3: ', type: 'line' }, { key: 'ma4', title: 'MA4: ', type: 'line' }], calcTechnicalIndicator: function calcTechnicalIndicator(dataList, _ref) { var params = _ref.params; var ma1ForwardPeriod = Math.ceil(params[1] / 2.5 + 1); var ma2ForwardPeriod = Math.ceil(params[2] / 2.5 + 1); var ma3ForwardPeriod = Math.ceil(params[3] / 2.5 + 1); var ma4ForwardPeriod = Math.ceil(params[4] / 2.5 + 1); var ma1Sum = 0; var ma1List = []; var ma2Sum = 0; var ma2List = []; var ma3Sum = 0; var ma3List = []; var ma4Sum = 0; var ma4List = []; var result = []; dataList.forEach(function (kLineData, i) { var cr = {}; var preData = dataList[i - 1] || kLineData; var preMid = (preData.high + preData.close + preData.low + preData.open) / 4; var highSubPreMid = Math.max(0, kLineData.high - preMid); var preMidSubLow = Math.max(0, preMid - kLineData.low); if (i >= params[0] - 1) { if (preMidSubLow !== 0) { cr.cr = highSubPreMid / preMidSubLow * 100; } else { cr.cr = 0; } ma1Sum += cr.cr; ma2Sum += cr.cr; ma3Sum += cr.cr; ma4Sum += cr.cr; if (i >= params[0] + params[1] - 2) { ma1List.push(ma1Sum / params[1]); if (i >= params[0] + params[1] + ma1ForwardPeriod - 3) { cr.ma1 = ma1List[ma1List.length - 1 - ma1ForwardPeriod]; } ma1Sum -= result[i - (params[1] - 1)].cr; } if (i >= params[0] + params[2] - 2) { ma2List.push(ma2Sum / params[2]); if (i >= params[0] + params[2] + ma2ForwardPeriod - 3) { cr.ma2 = ma2List[ma2List.length - 1 - ma2ForwardPeriod]; } ma2Sum -= result[i - (params[2] - 1)].cr; } if (i >= params[0] + params[3] - 2) { ma3List.push(ma3Sum / params[3]); if (i >= params[0] + params[3] + ma3ForwardPeriod - 3) { cr.ma3 = ma3List[ma3List.length - 1 - ma3ForwardPeriod]; } ma3Sum -= result[i - (params[3] - 1)].cr; } if (i >= params[0] + params[4] - 2) { ma4List.push(ma4Sum / params[4]); if (i >= params[0] + params[4] + ma4ForwardPeriod - 3) { cr.ma4 = ma4List[ma4List.length - 1 - ma4ForwardPeriod]; } ma4Sum -= result[i - (params[4] - 1)].cr; } } result.push(cr); }); return result; } }; exports.default = _default;