| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- const NumKit = require("./num-kit");
- class TickKit {}
- /**
- * EMA计算器
- * @param lastEma 上一个EMA
- * @param closePrice 收盘价
- * @param units 数据条数
- * @returns {number}
- */
- TickKit.EMA = function (lastEma, closePrice, units) {
- return (lastEma * (units - 1) + closePrice * 2) / (units + 1)
- }
- /**
- *
- * 计算移动平均线指标, ma的周期为days
- *
- * @method MA
- * @param {Array} ticks 一维数组类型,每个元素为当前Tick的收盘价格
- * @param {Integer} day
- * @return {Array} mas
- */
- TickKit.MA = function (ticks, day) {
- const mas = []
- for (let i = 0; i < ticks.length; i++) {
- if (i < day - 1) {
- mas.push(ticks[i])
- } else {
- let valueSum = 0
- for (let j = i; j > i - day; j--) {
- valueSum += ticks[j]
- }
- mas.push(valueSum / day)
- }
- }
- return mas
- }
- /**
- *
- * 计算macd指标,快速和慢速移动平均线的周期分别取12和26
- *
- * @method MACD
- * @param {Array} ticks
- * 一维数组类型,每个元素为tick的收盘价格
- * @param {Integer} N1
- * 整数类型,是为快线
- * @param {Integer} N2
- * 整数类型,是为慢线
- * @param {Integer} N3
- * 整数类型,是为信号长度
- * @return {Object} 返回一个包含diffs deas bars属性的对象,每个属性对应的类型为{Array[Number]}
- */
- TickKit.MACD = function (ticks, N1, N2, N3) {
- const emaN1 = []
- const emaN2 = []
- const diffs = []
- const deas = []
- const bars = []
- for (let i = 0; i < ticks.length; i++) {
- const c = ticks[i]
- if (i === 0) {
- emaN1.push(c)
- emaN2.push(c)
- deas.push(0)
- } else {
- emaN1.push(TickKit.EMA(emaN1[i - 1], c, N1))
- emaN2.push(TickKit.EMA(emaN2[i - 1], c, N2))
- }
- // 计算离差值
- diffs.push(emaN1[i] - emaN2[i])
- if (i !== 0) {
- deas.push(TickKit.EMA(deas[i - 1], diffs[i], N3))
- }
- // bars.push((diffs[i]-deas[i]) * 2);
- bars.push(diffs[i] - deas[i])
- }
- return { diffs: diffs, deas: deas, bars: bars }
- }
- module.exports = TickKit
|