JS实现MA、BOLL指标计算
MA指标
1.计算公式 1.N日MA=N日收市价的总和/N(即算术平均数) 2.要设置多条移动平均线,一般参数设置为N1=5,N2=10,N3=20,N4=60,N5=120,N6=250
2.代码实现
参数kline格式: let kline=[{‘symbol’: ‘000001.SH’, ‘date’: ‘2019-02-13’, ‘open’: 2674.52, ‘close’: 2721.07, ‘high’: 2727.07, ‘low’: 2666.52, ‘vol’: ‘24379401000’}];
/**
* 计算指定周期的若干 MA 均线
* @param kline K线
* @param params tuple
* @return {
*[]} 在原始数据中新增若干 MA 均线
*/
ma = (kline,params=[5, 10, 20, 60, 120, 250]) => {
let len_kline=kline.length;
let len_params=params.length;
for(let i=0;i<len_kline;i++){
let k=kline[i];
for(let n=0;n<params.length;n++){
let ma_col=ma+params[n];
k[ma_col]=null;
}
for(let j=0;j<len_params;j++){
let col=ma+params[j];
if(i<params[j]-1){
break;
}else {
let sum=0;
for(let m=0;m<params[j];m++){
sum+=kline[i-m].close;
}
k[col]=(sum/params[j]).toFixed(2); //保留两位小数,四舍五入
}
}
}
return kline;
};
BOLL指标
1.代码实现
/**
* 计算 BOLL 指标
* BOLL线参数20,26
* @param kline K线
* @return {
*} 在原始数据中新增 BOLL 指标结果
*/
boll=(kline)=>{
let len=kline.length;
for(let i=0;i<len;i++){
let k=kline[i];
k.boll_mid=null;
k.boll_tmp2=null;
k.boll_top=null;
k.boll_bottom=null;
if(i<19){
// break;
}else if(18<i && i<25){
let tmp2_data=[];
for(let m=0;m<20;m++){
tmp2_data.push(kline[i-m].close);
}
let mean = tmp2_data.reduce(this.sum)/tmp2_data.length; //数组平均值
let deviations = tmp2_data.map(function(x){
return x-mean;}); //方差
let std = Math.sqrt(deviations.map(this.square).reduce(this.sum)/(tmp2_data.length-1)); //标准差
k.boll_tmp2=std.toFixed(2);
}else{
let tmp2_data=[];
for(let m=0;m<20;m++){
tmp2_data.push(kline[i-m].close);
}
/*计算boll_tmp2*/
let mean = tmp2_data.reduce(this.sum)/tmp2_data.length; //数组平均值
let deviations = tmp2_data.map(function(x){
return x-mean;}); //方差
let std = Math.sqrt(deviations.map(this.square).reduce(this.sum)/(tmp2_data.length-1)); //标准差
/*计算boll_mid , boll_tmp2 ,boll-top, boll-bottom */
let data=[];
for(let m=0;m<26;m++){
data.push(kline[i-m].close);
}
let mid = data.reduce(this.sum)/data.length; //数组平均值
let top=mid+2*std;
let bottom=mid-2*std;
k.boll_tmp2=std.toFixed(2);
k.boll_mid=mid.toFixed(2);
k.boll_top=top.toFixed(2);
k.boll_bottom=bottom.toFixed(2);
}
}
return kline;
};
sum= function(x,y){
return x+y;}; //求和函数
square = function(x){
return x*x;}; //数组中每个元素求它的平方
