UNPKG

@symblight/react-stockcharts

Version:

Highly customizable stock charts with ReactJS and d3

70 lines (57 loc) 1.9 kB
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; import { max, min, mean } from "d3-array"; import { ATR as defaultOptions } from "./defaultOptionsForComputation"; import { slidingWindow, last, isDefined } from "../utils"; import { cci } from "../indicator"; export default function () { var options = defaultOptions; var source = function source(d) { return { open: d.open, high: d.high, low: d.low, close: d.close }; }; function calculator(data) { var _options = options, windowSize = _options.windowSize; var high = function high(d) { return source(d).high; }, low = function low(d) { return source(d).low; }, close = function close(d) { return source(d).close; }; var cciAlgorithm = slidingWindow().windowSize(windowSize).source(source).accumulator(function (values) { var highestHigh = max(values, low); var lowestLow = min(values, high); var currentClose = close(last(values)); var TP = (highestHigh + lowestLow + currentClose) / 3; var smaTP = TP / windowSize; var meanDeviation = TP / smaTP; var cciData = (TP - smaTP) / (0.15 * meanDeviation); return cciData; }); var newData = cciAlgorithm(data); return newData; } calculator.undefinedLength = function () { var _options2 = options, windowSize = _options2.windowSize; return windowSize - 1; }; calculator.options = function (x) { if (!arguments.length) { return options; } options = _extends({}, defaultOptions, x); return calculator; }; calculator.source = function (x) { if (!arguments.length) { return source; } source = x; return calculator; }; return calculator; } //# sourceMappingURL=cci.js.map