需求
分钟数据周期,有时候根据不同的场景需要定制算法, HQChart开放了一个分钟周期计算的接口, 如果需要定制分钟周期计算,可以实现这个接口, 就可以使用外部的分钟周期计算函数了。
分钟周期计算接口
重写这个函数就可以 覆盖HQChart的周期计算函数, 从而调用外部的这个函数
DataPlus.GetMinutePeriodData=function(period,data,self)
{
.... 周期计算
}
参数说明
period 周期
data 原始的 1分钟或日K现数
self 数据类实例
返回:
HistoryData类 数组
样例代码
//定义外部计算周期函数 替换掉内部的
DataPlus.GetMinutePeriodData=function(period,data,self)
{
console.log('[GetMinutePeriodData] symbol= ', self.Symbol);
var result = [];
var startIndex=0; //开始合并的起始位置,根据周期不一样需要调整
var periodDataCount = 5;
var firstDateTime=data[0].Time;
if (period == 5)
{
periodDataCount = 5;
for(startIndex=0;startIndex<data.length;++startIndex)
{
var item=data[startIndex];
var time=item.Time;
//1, 16, 21, 26, 31,36, 41, 46, 51, 56
if (time%10==6 || time%10==1) break;
}
}
else if (period == 6)
{
periodDataCount = 15;
for(startIndex=0;startIndex<data.length;++startIndex)
{
var item=data[startIndex];
var time=item.Time;
var m1=parseInt(time/10);
var m2=time%10;
//1, 16, 31, 46
if ( (m2==6 && (m1==1 || m1==4)) || (m2==1 && (m1==0|| m1==3)) )
break;
}
}
else if (period == 7)
{
periodDataCount = 30;
for(startIndex=0;startIndex<data.length;++startIndex)
{
var item=data[startIndex];
var time=item.Time;
var m1=parseInt(time/10);
var m2=time%10;
//16, 46 ,1
if ( time==16 || time==46 || time==1 )
break;
}
}
else if (period == 8)
{
periodDataCount = 60;
for(startIndex=0;startIndex<data.length;++startIndex)
{
var item=data[startIndex];
var time=item.Time;
var m1=parseInt(time/10);
var m2=time%10;
//16
if ( time==16)
break;
}
}
var bFirstPeriodData = false;
var newData = null;
var preTime=null; //上一次的计算时间
for (var i = startIndex; i < data.length; )
{
bFirstPeriodData = true;
for (var j = 0; j < periodDataCount && i < data.length; ++i)
{
if (bFirstPeriodData)
{
newData = new HistoryData();
result.push(newData);
bFirstPeriodData = false;
}
var minData = data[i];
if (minData == null)
{
++j;
continue;
}
else
++j;
newData.Date = minData.Date;
newData.Time = minData.Time;
preTime=newData.Time;
if (minData.Open==null || minData.Close==null)
continue;
if (newData.Open==null || newData.Close==null)
{
newData.Open=minData.Open;
newData.High=minData.High;
newData.Low=minData.Low;
newData.YClose=minData.YClose;
newData.Close=minData.Close;
newData.Vol=minData.Vol;
newData.Amount=minData.Amount;
newData.FlowCapital=minData.FlowCapital;
}
else
{
if (newData.High<minData.High)
newData.High=minData.High;
if (newData.Low>minData.Low)
newData.Low=minData.Low;
newData.Close=minData.Close;
newData.Vol+=minData.Vol;
if (minData.Amount!=null) newData.Amount+=minData.Amount;
newData.FlowCapital=minData.FlowCapital;
}
}
}
return result;
}
注意事项
- 周期计算只能是同步的, 不支持异步
- 如果你要取异步的数据, 只能点击周期按钮的时候, 你先异步取数据, 取完数据以后再调用HQChart的周期切换函数, 这样再外部调用DataPlus.GetMinutePeriodData() 就可以把之前取到的数据填上去。
推荐是本地算, 这样任意周期的你都可以做, 不需要后台了。
如果还有问题可以加交流QQ群: 950092318
HQChart代码地址
地址:github.com/jones2000/HQChart