hqchart 1.1.12470 → 1.1.12475

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4910,7 +4910,8 @@ IFrameSplitOperator.IsPlusNumber=function(value){if(value==null)return false;if(
4910
4910
  IFrameSplitOperator.IsInteger=function(x){return typeof x==='number'&&x%1===0;};//判断字段是否存在
4911
4911
  IFrameSplitOperator.IsObjectExist=function(obj){if(obj===undefined)return false;if(obj==null)return false;return true;};//是否时bool
4912
4912
  IFrameSplitOperator.IsBool=function(value){if(value===true||value===false)return true;return false;};IFrameSplitOperator.IsString=function(value){var type=typeof value==='undefined'?'undefined':(0,_typeof3.default)(value);if(type=='string')return true;return false;};//是否是非空的数组
4913
- IFrameSplitOperator.IsNonEmptyArray=function(ary){if(!ary)return false;if(!Array.isArray(ary))return false;return ary.length>0;};IFrameSplitOperator.IsFloat=function(value){if(value===undefined)return false;if(value==null)return false;if(isNaN(value))return false;return value!=parseInt(value);};IFrameSplitOperator.RemoveZero=function(strValue){while(strValue.length>0){var index=strValue.length-1;var ch=strValue[index];if(ch=="0"){strValue=strValue.substr(0,index);}else if(ch=="."){strValue=strValue.substr(0,index);break;}else{break;}}return strValue;};function FrameSplitKLinePriceY(){this.newMethod=IFrameSplitOperator;//派生
4913
+ IFrameSplitOperator.IsNonEmptyArray=function(ary){if(!ary)return false;if(!Array.isArray(ary))return false;return ary.length>0;};IFrameSplitOperator.IsFloat=function(value){if(value===undefined)return false;if(value==null)return false;if(isNaN(value))return false;return value!=parseInt(value);};//是否有效
4914
+ IFrameSplitOperator.IsVaild=function(value){if(isNaN(value))return false;if(value==null)return false;if(value===undefined)return false;return true;};IFrameSplitOperator.RemoveZero=function(strValue){while(strValue.length>0){var index=strValue.length-1;var ch=strValue[index];if(ch=="0"){strValue=strValue.substr(0,index);}else if(ch=="."){strValue=strValue.substr(0,index);break;}else{break;}}return strValue;};function FrameSplitKLinePriceY(){this.newMethod=IFrameSplitOperator;//派生
4914
4915
  this.newMethod();delete this.newMethod;this.CoordinateType=0;//坐标类型 0=普通坐标 1=百分比坐标 (右边坐标刻度) 2=对数对标 3=等比坐标 4=等分坐标 5=黄金分割
4915
4916
  this.Symbol;this.Data;//K线数据 (计算百分比坐标)
4916
4917
  this.FrameSplitData2;//坐标轴分割方法(计算百分比刻度)
@@ -9381,27 +9382,27 @@ if(_i53<data.length&&_i53<data2.length){if(this.IsNumber(data[_i53])&&this.IsDiv
9381
9382
  this.GT=function(data,data2){var isNumber=IFrameSplitOperator.IsNumber(data);var isNumber2=IFrameSplitOperator.IsNumber(data2);//单数值比较
9382
9383
  if(isNumber&&isNumber2)return data>data2?1:0;//都是数组比较
9383
9384
  var result=[];if(Array.isArray(data)&&Array.isArray(data2)){var count=Math.max(data.length,data2.length);for(var _i56=0;_i56<count;++_i56){result[_i56]=null;//初始化
9384
- if(_i56<data.length&&_i56<data2.length){if(!isNaN(data[_i56])&&!isNaN(data2[_i56]))result[_i56]=data[_i56]>data2[_i56]?1:0;}}return result;}if(isNumber&&Array.isArray(data2))//单数据-数组
9385
- {for(var _i57 in data2){result[_i57]=null;if(!isNaN(data)&&!isNaN(data2[_i57]))result[_i57]=data>data2[_i57]?1:0;}}else if(isNumber2&&Array.isArray(data))//数组-单数据
9386
- {for(var _i58 in data){result[_i58]=null;if(!isNaN(data[_i58])&&!isNaN(data2))result[_i58]=data[_i58]>data2?1:0;}}return result;};//大于等于
9385
+ if(_i56<data.length&&_i56<data2.length){if(!IFrameSplitOperator.IsVaild(data[_i56]))continue;if(!IFrameSplitOperator.IsVaild(data2[_i56]))continue;if(!isNaN(data[_i56])&&!isNaN(data2[_i56]))result[_i56]=data[_i56]>data2[_i56]?1:0;}}return result;}if(isNumber&&Array.isArray(data2))//单数据-数组
9386
+ {for(var _i57 in data2){result[_i57]=null;if(!IFrameSplitOperator.IsVaild(data))continue;if(!IFrameSplitOperator.IsVaild(data2[_i57]))continue;if(!isNaN(data)&&!isNaN(data2[_i57]))result[_i57]=data>data2[_i57]?1:0;}}else if(isNumber2&&Array.isArray(data))//数组-单数据
9387
+ {for(var _i58 in data){result[_i58]=null;if(!IFrameSplitOperator.IsVaild(data[_i58]))continue;if(!IFrameSplitOperator.IsVaild(data2))continue;if(!isNaN(data[_i58])&&!isNaN(data2))result[_i58]=data[_i58]>data2?1:0;}}return result;};//大于等于
9387
9388
  this.GTE=function(data,data2){var isNumber=IFrameSplitOperator.IsNumber(data);var isNumber2=IFrameSplitOperator.IsNumber(data2);//单数值比较
9388
9389
  if(isNumber&&isNumber2)return data>=data2?1:0;//都是数组比较
9389
9390
  var result=[];if(Array.isArray(data)&&Array.isArray(data2)){var count=Math.max(data.length,data2.length);for(var _i59=0;_i59<count;++_i59){result[_i59]=null;//初始化
9390
- if(_i59<data.length&&_i59<data2.length){if(!isNaN(data[_i59])&&!isNaN(data2[_i59]))result[_i59]=data[_i59]>=data2[_i59]?1:0;}}return result;}if(isNumber&&Array.isArray(data2))//单数据-数组
9391
- {for(var _i60 in data2){result[_i60]=null;if(!isNaN(data)&&!isNaN(data2[_i60]))result[_i60]=data>=data2[_i60]?1:0;}}else if(isNumber2&&Array.isArray(data))//数组-单数据
9392
- {for(var _i61 in data){result[_i61]=null;if(!isNaN(data[_i61])&&!isNaN(data2))result[_i61]=data[_i61]>=data2?1:0;}}return result;};//小于
9391
+ if(_i59<data.length&&_i59<data2.length){if(!IFrameSplitOperator.IsVaild(data[_i59]))continue;if(!IFrameSplitOperator.IsVaild(data2[_i59]))continue;result[_i59]=data[_i59]>=data2[_i59]?1:0;}}return result;}if(isNumber&&Array.isArray(data2))//单数据-数组
9392
+ {for(var _i60 in data2){result[_i60]=null;if(!IFrameSplitOperator.IsVaild(data))continue;if(!IFrameSplitOperator.IsVaild(data2[_i60]))continue;result[_i60]=data>=data2[_i60]?1:0;}}else if(isNumber2&&Array.isArray(data))//数组-单数据
9393
+ {for(var _i61 in data){result[_i61]=null;if(!IFrameSplitOperator.IsVaild(data[_i61]))continue;if(!IFrameSplitOperator.IsVaild(data2))continue;result[_i61]=data[_i61]>=data2?1:0;}}return result;};//小于
9393
9394
  this.LT=function(data,data2){var isNumber=IFrameSplitOperator.IsNumber(data);var isNumber2=IFrameSplitOperator.IsNumber(data2);//单数值比较
9394
9395
  if(isNumber&&isNumber2)return data<data2?1:0;//都是数组比较
9395
9396
  var result=[];if(Array.isArray(data)&&Array.isArray(data2)){var count=Math.max(data.length,data2.length);for(var _i62=0;_i62<count;++_i62){result[_i62]=null;//初始化
9396
- if(_i62<data.length&&_i62<data2.length){if(!isNaN(data[_i62])&&!isNaN(data2[_i62]))result[_i62]=data[_i62]<data2[_i62]?1:0;}}return result;}if(isNumber&&Array.isArray(data2))//单数据-数组
9397
- {for(var _i63 in data2){result[_i63]=null;if(!isNaN(data)&&!isNaN(data2[_i63]))result[_i63]=data<data2[_i63]?1:0;}}else if(isNumber2&&Array.isArray(data))//数组-单数据
9398
- {for(var _i64 in data){result[_i64]=null;if(!isNaN(data[_i64])&&!isNaN(data2))result[_i64]=data[_i64]<data2?1:0;}}return result;};//小于等于
9397
+ if(_i62<data.length&&_i62<data2.length){if(!IFrameSplitOperator.IsVaild(data[_i62]))continue;if(!IFrameSplitOperator.IsVaild(data2[_i62]))continue;result[_i62]=data[_i62]<data2[_i62]?1:0;}}return result;}if(isNumber&&Array.isArray(data2))//单数据-数组
9398
+ {for(var _i63 in data2){result[_i63]=null;if(!IFrameSplitOperator.IsVaild(data))continue;if(!IFrameSplitOperator.IsVaild(data2[_i63]))continue;result[_i63]=data<data2[_i63]?1:0;}}else if(isNumber2&&Array.isArray(data))//数组-单数据
9399
+ {for(var _i64 in data){result[_i64]=null;if(!IFrameSplitOperator.IsVaild(data[_i64]))continue;if(!IFrameSplitOperator.IsVaild(data2))continue;result[_i64]=data[_i64]<data2?1:0;}}return result;};//小于等于
9399
9400
  this.LTE=function(data,data2){var isNumber=IFrameSplitOperator.IsNumber(data);var isNumber2=IFrameSplitOperator.IsNumber(data2);//单数值比较
9400
9401
  if(isNumber&&isNumber2)return data>=data2?1:0;//都是数组比较
9401
9402
  var result=[];if(Array.isArray(data)&&Array.isArray(data2)){var count=Math.max(data.length,data2.length);for(var _i65=0;_i65<count;++_i65){result[_i65]=null;//初始化
9402
- if(_i65<data.length&&_i65<data2.length){if(!isNaN(data[_i65])&&!isNaN(data2[_i65]))result[_i65]=data[_i65]<=data2[_i65]?1:0;}}return result;}if(isNumber&&Array.isArray(data2))//单数据-数组
9403
- {for(var _i66 in data2){result[_i66]=null;if(!isNaN(data)&&!isNaN(data2[_i66]))result[_i66]=data<=data2[_i66]?1:0;}}else if(isNumber2&&Array.isArray(data))//数组-单数据
9404
- {for(var _i67 in data){result[_i67]=null;if(!isNaN(data[_i67])&&!isNaN(data2))result[_i67]=data[_i67]<=data2?1:0;}}return result;};//等于
9403
+ if(_i65<data.length&&_i65<data2.length){if(!IFrameSplitOperator.IsVaild(data[_i65]))continue;if(!IFrameSplitOperator.IsVaild(data2[_i65]))continue;result[_i65]=data[_i65]<=data2[_i65]?1:0;}}return result;}if(isNumber&&Array.isArray(data2))//单数据-数组
9404
+ {for(var _i66 in data2){result[_i66]=null;if(!IFrameSplitOperator.IsVaild(data))continue;if(!IFrameSplitOperator.IsVaild(data2[_i66]))continue;result[_i66]=data<=data2[_i66]?1:0;}}else if(isNumber2&&Array.isArray(data))//数组-单数据
9405
+ {for(var _i67 in data){result[_i67]=null;if(!IFrameSplitOperator.IsVaild(data[_i67]))continue;if(!IFrameSplitOperator.IsVaild(data2))continue;result[_i67]=data[_i67]<=data2?1:0;}}return result;};//等于
9405
9406
  this.EQ=function(data,data2){var isNumber=IFrameSplitOperator.IsNumber(data);var isNumber2=IFrameSplitOperator.IsNumber(data2);//单数值比较
9406
9407
  if(isNumber&&isNumber2)return data==data2?1:0;//都是数组比较
9407
9408
  var result=[];if(Array.isArray(data)&&Array.isArray(data2)){var count=Math.max(data.length,data2.length);for(var _i68=0;_i68<count;++_i68){result[_i68]=null;//初始化
@@ -9512,7 +9513,8 @@ this.EXPMEMA=function(data,dayCount){var result=[];if(dayCount>=data.length)retu
9512
9513
  用法:COUNT(X, N), 统计N周期中满足X条件的周期数, 若N<0则从第一个有效值开始.
9513
9514
  例如 :COUNT(CLOSE>OPEN, 20)表示统计20周期内收阳的周期数
9514
9515
  N 支持数组
9515
- */this.COUNT=function(data,n){if(Array.isArray(n)){var start=null;var dataCount=data.length;for(var i=0;i<dataCount;++i){if(this.IsNumber(data[i])){start=i;break;}}if(start==null)return[];var result=[];var count=0;for(var i=0;i<n.length;++i){var period=n[i];if(!IFrameSplitOperator.IsNumber(period))continue;if(period<1)period=i+1;count=0;for(var j=i,k=0;j>=0&&k<period;--j,++k)//当前往前period天 统计
9516
+ */this.COUNT=function(data,n){if(Array.isArray(n)){var start=null;var dataCount=data.length;for(var i=0;i<dataCount;++i){if(this.IsNumber(data[i])){start=i;break;}}if(start==null)return[];var result=[];var count=0;for(var i=0;i<n.length;++i){var period=n[i];if(period==0){result[i]=0;continue;}if(!IFrameSplitOperator.IsNumber(period))period=i+1;//无效周期 第一个有效值开始.
9517
+ else if(period<0)period=i+1;count=0;for(var j=i,k=0;j>=0&&k<period;--j,++k)//当前往前period天 统计
9516
9518
  {if(data[j])++count;}result[i]=count;}return result;}else{var period=n;var dataCount=data.length;var period=period<1?dataCount:period;var i=0,j=0;for(;i<dataCount;++i)// 取第1个有效数据
9517
9519
  {if(this.IsNumber(data[i]))break;}var result=[];var days=0;for(;i<dataCount&&j<period;++i,++j){days=data[i]?days+1:days;result[i]=days;}for(;i<dataCount;++i){if(data[i-period]&&days)days--;days=data[i]?days+1:days;result[i]=days;}return result;}};/*
9518
9520
  HHV 最高值
@@ -9580,8 +9582,9 @@ this.CROSS=function(data,data2){var result=[];if(Array.isArray(data)&&Array.isAr
9580
9582
  CROSSUP(MA5,MA10),ICON(1,'ICO4');//MA5上穿MA10,标注红箭头。
9581
9583
  //CROSSUP(MA5,MA10),ICON(1,'ICO4'); 与 CROSSUP(MA5,MA10)=1,ICON(1,'ICO4');表达同等意义
9582
9584
  */this.CROSSUP=function(data,data2){return this.CROSS(data,data2);};//累乘
9583
- this.MULAR=function(data,n){var result=[];if(!Array.isArray(n)){if(data.length<n)return result;if(n==0){var index=n;for(;index<data.length;++index){if(this.IsNumber(data[index])){result[index]=data[index];break;}}for(++index;index<data.length;++index){result[index]=result[index-1]*data[index];}}else{for(var i=n-1,j=0;i<data.length;++i,++j){for(var k=0;k<n;++k){if(k==0)result[i]=data[k+j];else result[i]*=data[k+j];}}}}else{for(var i=0;i<data.length;++i){result[i]=null;var totalCount=n[i];if(!this.IsNumber(totalCount))continue;totalCount=parseInt(totalCount);if(totalCount<0)continue;for(var j=i,k=0;j>=0&&k<totalCount;--j,++k){if(k==0)result[i]=data[j];else result[i]*=data[j];}}}return result;};this.SUM=function(data,n){var result=[];if(!Array.isArray(n)){if(n==0){var start=-1;for(var i=0;i<data.length;++i)//取第1个有效数
9584
- {if(IFrameSplitOperator.IsNumber(data[i])){start=i;break;}}if(start<0)return result;result[start]=data[start];for(var i=start+1;i<data.length;++i){result[i]=result[i-1]+data[i];}}else{for(var i=n-1,j=0;i<data.length;++i,++j){for(var k=0;k<n;++k){if(k==0)result[i]=data[k+j];else result[i]+=data[k+j];}}}}else{for(var i=0;i<data.length;++i){result[i]=null;var totalCount=n[i];if(!(totalCount>0))continue;for(var j=i,k=0;j>=0&&k<totalCount;--j,++k){if(k==0)result[i]=data[j];else result[i]+=data[j];}}}return result;};/*
9585
+ this.MULAR=function(data,n){var result=[];if(!Array.isArray(n)){if(data.length<n)return result;if(n==0){var index=n;for(;index<data.length;++index){if(this.IsNumber(data[index])){result[index]=data[index];break;}}for(++index;index<data.length;++index){result[index]=result[index-1]*data[index];}}else{for(var i=n-1,j=0;i<data.length;++i,++j){for(var k=0;k<n;++k){if(k==0)result[i]=data[k+j];else result[i]*=data[k+j];}}}}else{for(var i=0;i<data.length;++i){result[i]=null;var totalCount=n[i];if(!this.IsNumber(totalCount))continue;totalCount=parseInt(totalCount);if(totalCount<0)continue;for(var j=i,k=0;j>=0&&k<totalCount;--j,++k){if(k==0)result[i]=data[j];else result[i]*=data[j];}}}return result;};this.SUM=function(data,n){var result=[];if(!Array.isArray(n)){if(n<=0){var start=-1;for(var i=0;i<data.length;++i)//取第1个有效数
9586
+ {if(IFrameSplitOperator.IsNumber(data[i])){start=i;break;}}if(start<0)return result;result[start]=data[start];for(var i=start+1;i<data.length;++i){result[i]=result[i-1]+data[i];}}else{result[0]=data[0];for(var i=1;i<n&&i<data.length;++i)//前面小于N周期的累加
9587
+ {result[i]=result[i-1]+data[i];}for(var i=n-1,j=0;i<data.length;++i,++j){for(var k=0;k<n;++k){if(k==0)result[i]=data[k+j];else result[i]+=data[k+j];}}}}else{for(var i=0;i<data.length;++i){result[i]=null;var totalCount=n[i];if(!(totalCount>0))continue;for(var j=i,k=0;j>=0&&k<totalCount;--j,++k){if(k==0)result[i]=data[j];else result[i]+=data[j];}}}return result;};/*
9585
9588
  BARSCOUNT 有效数据周期数
9586
9589
  求总的周期数。
9587
9590
  用法: BARSCOUNT(X) 第一个有效数据到当前的天数。
@@ -12474,10 +12477,17 @@ this.AreaColor=g_JSChartResource.ScrollBar.BGChart.AreaColor;//面积图颜色
12474
12477
  this.ReloadResource=function(resource){this.Color=g_JSChartResource.ScrollBar.BGChart.Color;//线段颜色
12475
12478
  this.LineWidth=g_JSChartResource.ScrollBar.BGChart.LineWidth;//线段宽度
12476
12479
  this.AreaColor=g_JSChartResource.ScrollBar.BGChart.AreaColor;//面积图颜色
12477
- };this.Draw=function(){if(!this.Data||!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data))return;this.Canvas.save();if(this.LineWidth>0)this.Canvas.lineWidth=this.LineWidth*GetDevicePixelRatio();var bottom=this.ChartBorder.GetBottom();this.Canvas.strokeStyle=this.Color;var bFirstPoint=true;var drawCount=0,x,y;var firstPoint={};for(var i=0;i<this.Data.Data.length;++i){var item=this.Data.Data[i];var value=item.Close;if(!IFrameSplitOperator.IsNumber(value))continue;x=this.ChartFrame.GetXFromIndex(i);y=this.ChartFrame.GetYFromData(value);if(bFirstPoint){this.Canvas.beginPath();this.Canvas.moveTo(x,y);bFirstPoint=false;firstPoint={X:x,Y:y};}else{this.Canvas.lineTo(x,y);}++drawCount;}if(drawCount>0){this.Canvas.stroke();this.Canvas.lineTo(x,bottom);this.Canvas.lineTo(firstPoint.X,bottom);this.Canvas.closePath();this.Canvas.fillStyle=this.AreaColor;this.Canvas.fill();}this.Canvas.restore();};this.GetMaxMin=function(){var range={Max:null,Min:null};if(!this.Data||!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data))return range;for(var i=0;i<this.Data.Data.length;++i){var item=this.Data.Data[i];var value=item.Close;if(!IFrameSplitOperator.IsNumber(value))continue;if(range.Max==null||range.Max<value)range.Max=value;if(range.Min==null||range.Min>value)range.Min=value;}return range;};}/********************************************************************************
12480
+ };this.Draw=function(){if(!this.Data||!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data))return;this.Canvas.save();if(this.LineWidth>0)this.Canvas.lineWidth=this.LineWidth*GetDevicePixelRatio();var bottom=this.ChartBorder.GetBottom();this.Canvas.strokeStyle=this.Color;var bFirstPoint=true;var drawCount=0,x,y;var firstPoint={};for(var i=0;i<this.Data.Data.length;++i){var item=this.Data.Data[i];var value=item.Close;if(!IFrameSplitOperator.IsNumber(value))continue;x=this.ChartFrame.GetXFromIndex(i);y=this.ChartFrame.GetYFromData(value);if(bFirstPoint){this.Canvas.beginPath();this.Canvas.moveTo(x,y);bFirstPoint=false;firstPoint={X:x,Y:y};}else{this.Canvas.lineTo(x,y);}++drawCount;}if(drawCount>0){this.Canvas.stroke();this.Canvas.lineTo(x,bottom);this.Canvas.lineTo(firstPoint.X,bottom);this.Canvas.closePath();this.Canvas.fillStyle=this.AreaColor;this.Canvas.fill();}this.Canvas.restore();};this.GetMaxMin=function(){var range={Max:null,Min:null};if(!this.Data||!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data))return range;for(var i=0;i<this.Data.Data.length;++i){var item=this.Data.Data[i];var value=item.Close;if(!IFrameSplitOperator.IsNumber(value))continue;if(range.Max==null||range.Max<value)range.Max=value;if(range.Min==null||range.Min>value)range.Min=value;}return range;};}///////////////////////////////////////////////////////////////////////////////////
12481
+ // 工作线程计算指标示例
12482
+ //
12483
+ //
12484
+ //////////////////////////////////////////////////////////////////////////////////
12485
+ function HQChartScriptWorker(){this.Create=function(){var _this60=this;addEventListener('message',function(obj){_this60.OnRecvMessage(obj);});};this.NetworkFilter=function(data,callback,indexInfo){JSConsole.Complier.Log('[HQChartScriptWorker::NetworkFilter] ['+data.Name+']['+data.Explain+'] data=',data);//数据下载
12486
+ };this.ExecuteScript=function(indexData,message){var _this61=this;var scriptObj={};if(indexData.Script){scriptObj.Name=indexData.Name;scriptObj.ID=indexData.Index;scriptObj.Script=indexData.Script;}else{if(!indexData.Index)return false;var scriptData=new JSIndexScript();var finder=scriptData.Get(indexData.Index);if(!finder)return false;scriptObj.ID=indexData.Index;scriptObj.Name=finder.Name;scriptObj.Script=finder.Script;scriptObj.Args=finder.Args;}if(indexData.Args)scriptObj.Args=indexData.Args;var indexInfo={Name:scriptObj.Name,ID:scriptObj.ID,Script:scriptObj.Script,Args:scriptObj.Args,Guid:message.Guid};scriptObj.ErrorCallback=function(error){_this61.OnExecuteError(error,indexInfo);};scriptObj.FinishCallback=function(data,jsExectute){_this61.OnExecuteFinish(data,indexInfo,jsExectute);};scriptObj.NetworkFilter=function(data,callback){_this61.NetworkFilter(data,callback,indexInfo);};JSConsole.Complier.Log('[HQChartScriptWorker::ExecuteScript] scriptObj=',scriptObj);var indexConsole=new ScriptIndexConsole(scriptObj);var hisData=null;if(message&&message.Data){hisData=new ChartData();hisData.Data=message.Data;hisData.Right=message.Right;hisData.Period=message.Period;hisData.DataType=message.DataType;//0=日线 1=分钟
12487
+ hisData.Symbol=message.symbol;}var stockObj={HQDataType:HQ_DATA_TYPE.KLINE_ID,Stock:{Symbol:message.Symbol},Request:{MaxDataCount:500,MaxMinuteDayCount:5},Period:message.Period,Right:message.Right,Data:hisData};if(IFrameSplitOperator.IsNumber(message.HQDataType))stockObj.HQDataType=message.HQDataType;indexConsole.ExecuteScript(stockObj);};this.OnRecvMessage=function(message){var data=message.data;if(!data)return;if(data.ID==JSCHART_WORKER_MESSAGE_ID.EXECUTE_SCRIPT){if(!IFrameSplitOperator.IsNonEmptyArray(data.AryIndex))return;for(var i=0;i<data.AryIndex.length;++i){var item=data.AryIndex[i];this.ExecuteScript(item,data);}}};this.OnExecuteFinish=function(data,indexInfo,jsExectute){var message={Data:data,IndexInfo:indexInfo,ID:JSCHART_WORKER_MESSAGE_ID.FINISH_EXECUTE_SCRIPT};postMessage(message);};this.OnExecuteError=function(error,indexInfo){var message={IndexInfo:indexInfo,ID:JSCHART_WORKER_MESSAGE_ID.ERROR_EXECUTE_SCRIPT,Error:error};postMessage(message);};}/********************************************************************************
12478
12488
  * 版本信息输出
12479
12489
  *
12480
- */var HQCHART_VERSION="1.1.12469";function PrintHQChartVersion(){var log='*************************************************************************************************************\n*\n* HQChart Ver: '+HQCHART_VERSION+' \n* \n* License: Apache License 2.0 \n* Source: https://github.com/jones2000/HQChart\n*\n*************************************************************************************************************\n';console.log(log);}PrintHQChartVersion();//把给外界调用的方法暴露出来
12490
+ */var HQCHART_VERSION="1.1.12474";function PrintHQChartVersion(){var log='*************************************************************************************************************\n*\n* HQChart Ver: '+HQCHART_VERSION+' \n* \n* License: Apache License 2.0 \n* Source: https://github.com/jones2000/HQChart\n*\n*************************************************************************************************************\n';console.log(log);}PrintHQChartVersion();//把给外界调用的方法暴露出来
12481
12491
  exports.default=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
12482
12492
  // BaseIndex:BaseIndex,
12483
12493
  // ChartLine:ChartLine,
@@ -12504,4 +12514,4 @@ GetDevicePixelRatio:GetDevicePixelRatio},(0,_defineProperty3.default)(_jsChartIn
12504
12514
  HQMinuteTimeStringFormat:HQMinuteTimeStringFormat,//分时图X轴 十字光标输出格式化
12505
12515
  HQDateStringFormat:HQDateStringFormat,//K线图X轴 十字光标输出格式化
12506
12516
  HQPriceStringFormat:HQPriceStringFormat//分时图,K线图Y轴 十字光标输出格式化
12507
- }),(0,_defineProperty3.default)(_jsChartInit$jsChartS,'JS_ID',{JSCHART_EVENT_ID:JSCHART_EVENT_ID,JSCHART_OPERATOR_ID:JSCHART_OPERATOR_ID,JSCHART_DRAG_ID:JSCHART_DRAG_ID,JSCHART_BUTTON_ID:JSCHART_BUTTON_ID,JSCHART_DATA_FIELD_ID:JSCHART_DATA_FIELD_ID,JSCHART_WORKER_MESSAGE_ID:JSCHART_WORKER_MESSAGE_ID}),_jsChartInit$jsChartS);
12517
+ }),(0,_defineProperty3.default)(_jsChartInit$jsChartS,'JS_ID',{JSCHART_EVENT_ID:JSCHART_EVENT_ID,JSCHART_OPERATOR_ID:JSCHART_OPERATOR_ID,JSCHART_DRAG_ID:JSCHART_DRAG_ID,JSCHART_BUTTON_ID:JSCHART_BUTTON_ID,JSCHART_DATA_FIELD_ID:JSCHART_DATA_FIELD_ID,JSCHART_WORKER_MESSAGE_ID:JSCHART_WORKER_MESSAGE_ID}),(0,_defineProperty3.default)(_jsChartInit$jsChartS,'HQChartScriptWorker',HQChartScriptWorker),_jsChartInit$jsChartS);
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "hqchart",
3
3
  "description": "stock chart",
4
4
  "author": "jones2000",
5
- "version": "1.1.12470",
5
+ "version": "1.1.12475",
6
6
  "main": "lib/main.js",
7
7
  "private": false,
8
8
  "license": "Apache License 2.0",
@@ -2428,6 +2428,9 @@ function JSAlgorithm(errorHandler,symbolData)
2428
2428
 
2429
2429
  if (i<data.length && i<data2.length)
2430
2430
  {
2431
+ if (!IFrameSplitOperator.IsVaild(data[i])) continue;
2432
+ if (!IFrameSplitOperator.IsVaild(data2[i])) continue;
2433
+
2431
2434
  if ( !isNaN(data[i]) && !isNaN(data2[i]) ) result[i]=(data[i]>data2[i] ? 1:0);
2432
2435
  }
2433
2436
  }
@@ -2440,6 +2443,9 @@ function JSAlgorithm(errorHandler,symbolData)
2440
2443
  for(let i in data2)
2441
2444
  {
2442
2445
  result[i]=null;
2446
+ if (!IFrameSplitOperator.IsVaild(data)) continue;
2447
+ if (!IFrameSplitOperator.IsVaild(data2[i])) continue;
2448
+
2443
2449
  if ( !isNaN(data) && !isNaN(data2[i]) ) result[i]=(data>data2[i] ? 1 : 0);
2444
2450
  }
2445
2451
  }
@@ -2448,6 +2454,9 @@ function JSAlgorithm(errorHandler,symbolData)
2448
2454
  for(let i in data)
2449
2455
  {
2450
2456
  result[i]=null;
2457
+ if (!IFrameSplitOperator.IsVaild(data[i])) continue;
2458
+ if (!IFrameSplitOperator.IsVaild(data2)) continue;
2459
+
2451
2460
  if ( !isNaN(data[i]) && !isNaN(data2) ) result[i]=(data[i]>data2 ? 1 : 0);
2452
2461
  }
2453
2462
  }
@@ -2475,7 +2484,10 @@ function JSAlgorithm(errorHandler,symbolData)
2475
2484
 
2476
2485
  if (i<data.length && i<data2.length)
2477
2486
  {
2478
- if ( !isNaN(data[i]) && !isNaN(data2[i]) ) result[i]=(data[i]>=data2[i] ? 1:0);
2487
+ if (!IFrameSplitOperator.IsVaild(data[i])) continue;
2488
+ if (!IFrameSplitOperator.IsVaild(data2[i])) continue;
2489
+
2490
+ result[i]=(data[i]>=data2[i] ? 1:0);
2479
2491
  }
2480
2492
  }
2481
2493
 
@@ -2487,7 +2499,10 @@ function JSAlgorithm(errorHandler,symbolData)
2487
2499
  for(let i in data2)
2488
2500
  {
2489
2501
  result[i]=null;
2490
- if ( !isNaN(data) && !isNaN(data2[i]) ) result[i]=(data>=data2[i] ? 1 : 0);
2502
+ if (!IFrameSplitOperator.IsVaild(data)) continue;
2503
+ if (!IFrameSplitOperator.IsVaild(data2[i])) continue;
2504
+
2505
+ result[i]=(data>=data2[i] ? 1 : 0);
2491
2506
  }
2492
2507
  }
2493
2508
  else if (isNumber2 && Array.isArray(data)) //数组-单数据
@@ -2495,7 +2510,10 @@ function JSAlgorithm(errorHandler,symbolData)
2495
2510
  for(let i in data)
2496
2511
  {
2497
2512
  result[i]=null;
2498
- if ( !isNaN(data[i]) && !isNaN(data2) ) result[i]=(data[i]>=data2 ? 1 : 0);
2513
+ if (!IFrameSplitOperator.IsVaild(data[i])) continue;
2514
+ if (!IFrameSplitOperator.IsVaild(data2)) continue;
2515
+
2516
+ result[i]=(data[i]>=data2 ? 1 : 0);
2499
2517
  }
2500
2518
  }
2501
2519
 
@@ -2522,7 +2540,10 @@ function JSAlgorithm(errorHandler,symbolData)
2522
2540
 
2523
2541
  if (i<data.length && i<data2.length)
2524
2542
  {
2525
- if ( !isNaN(data[i]) && !isNaN(data2[i]) ) result[i]=(data[i]<data2[i] ? 1:0);
2543
+ if (!IFrameSplitOperator.IsVaild(data[i])) continue;
2544
+ if (!IFrameSplitOperator.IsVaild(data2[i])) continue;
2545
+
2546
+ result[i]=(data[i]<data2[i] ? 1:0);
2526
2547
  }
2527
2548
  }
2528
2549
 
@@ -2534,7 +2555,10 @@ function JSAlgorithm(errorHandler,symbolData)
2534
2555
  for(let i in data2)
2535
2556
  {
2536
2557
  result[i]=null;
2537
- if ( !isNaN(data) && !isNaN(data2[i]) ) result[i]=(data<data2[i] ? 1 : 0);
2558
+ if (!IFrameSplitOperator.IsVaild(data)) continue;
2559
+ if (!IFrameSplitOperator.IsVaild(data2[i])) continue;
2560
+
2561
+ result[i]=(data<data2[i] ? 1 : 0);
2538
2562
  }
2539
2563
  }
2540
2564
  else if (isNumber2 && Array.isArray(data)) //数组-单数据
@@ -2542,7 +2566,10 @@ function JSAlgorithm(errorHandler,symbolData)
2542
2566
  for(let i in data)
2543
2567
  {
2544
2568
  result[i]=null;
2545
- if ( !isNaN(data[i]) && !isNaN(data2) ) result[i]=(data[i]<data2 ? 1 : 0);
2569
+ if (!IFrameSplitOperator.IsVaild(data[i])) continue;
2570
+ if (!IFrameSplitOperator.IsVaild(data2)) continue;
2571
+
2572
+ result[i]=(data[i]<data2 ? 1 : 0);
2546
2573
  }
2547
2574
  }
2548
2575
 
@@ -2569,7 +2596,10 @@ function JSAlgorithm(errorHandler,symbolData)
2569
2596
 
2570
2597
  if (i<data.length && i<data2.length)
2571
2598
  {
2572
- if ( !isNaN(data[i]) && !isNaN(data2[i]) ) result[i]=(data[i]<=data2[i] ? 1:0);
2599
+ if (!IFrameSplitOperator.IsVaild(data[i])) continue;
2600
+ if (!IFrameSplitOperator.IsVaild(data2[i])) continue;
2601
+
2602
+ result[i]=(data[i]<=data2[i] ? 1:0);
2573
2603
  }
2574
2604
  }
2575
2605
 
@@ -2581,7 +2611,10 @@ function JSAlgorithm(errorHandler,symbolData)
2581
2611
  for(let i in data2)
2582
2612
  {
2583
2613
  result[i]=null;
2584
- if ( !isNaN(data) && !isNaN(data2[i]) ) result[i]=(data<=data2[i] ? 1 : 0);
2614
+ if (!IFrameSplitOperator.IsVaild(data)) continue;
2615
+ if (!IFrameSplitOperator.IsVaild(data2[i])) continue;
2616
+
2617
+ result[i]=(data<=data2[i] ? 1 : 0);
2585
2618
  }
2586
2619
  }
2587
2620
  else if (isNumber2 && Array.isArray(data)) //数组-单数据
@@ -2589,7 +2622,10 @@ function JSAlgorithm(errorHandler,symbolData)
2589
2622
  for(let i in data)
2590
2623
  {
2591
2624
  result[i]=null;
2592
- if ( !isNaN(data[i]) && !isNaN(data2) ) result[i]=(data[i]<=data2 ? 1 : 0);
2625
+ if (!IFrameSplitOperator.IsVaild(data[i])) continue;
2626
+ if (!IFrameSplitOperator.IsVaild(data2)) continue;
2627
+
2628
+ result[i]=(data[i]<=data2 ? 1 : 0);
2593
2629
  }
2594
2630
  }
2595
2631
 
@@ -3676,9 +3712,16 @@ function JSAlgorithm(errorHandler,symbolData)
3676
3712
  for(var i=0;i<n.length;++i)
3677
3713
  {
3678
3714
  var period=n[i];
3679
- if (!IFrameSplitOperator.IsNumber(period)) continue;
3680
-
3681
- if (period<1) period=i+1;
3715
+
3716
+ if (period==0)
3717
+ {
3718
+ result[i]=0;
3719
+ continue;
3720
+ }
3721
+
3722
+ if (!IFrameSplitOperator.IsNumber(period) ) period=i+1; //无效周期 第一个有效值开始.
3723
+ else if (period<0) period=i+1;
3724
+
3682
3725
  count=0;
3683
3726
  for(var j=i, k=0 ;j>=0 && k<period ;--j,++k) //当前往前period天 统计
3684
3727
  {
@@ -4142,7 +4185,7 @@ function JSAlgorithm(errorHandler,symbolData)
4142
4185
 
4143
4186
  if (!Array.isArray(n))
4144
4187
  {
4145
- if (n==0)
4188
+ if (n<=0)
4146
4189
  {
4147
4190
  var start=-1;
4148
4191
  for(var i=0; i<data.length; ++i) //取第1个有效数
@@ -4165,6 +4208,12 @@ function JSAlgorithm(errorHandler,symbolData)
4165
4208
  }
4166
4209
  else
4167
4210
  {
4211
+ result[0]=data[0];
4212
+ for(var i=1;i<n && i<data.length;++i) //前面小于N周期的累加
4213
+ {
4214
+ result[i] = result[i-1]+data[i];
4215
+ }
4216
+
4168
4217
  for(var i=n-1,j=0;i<data.length;++i,++j)
4169
4218
  {
4170
4219
  for(var k=0;k<n;++k)
@@ -42552,6 +42552,16 @@ IFrameSplitOperator.IsFloat=function(value)
42552
42552
  return value!=parseInt(value);
42553
42553
  }
42554
42554
 
42555
+ //是否有效
42556
+ IFrameSplitOperator.IsVaild=function(value)
42557
+ {
42558
+ if (isNaN(value)) return false;
42559
+ if (value==null) return false;
42560
+ if (value===undefined) return false;
42561
+
42562
+ return true;
42563
+ }
42564
+
42555
42565
  IFrameSplitOperator.RemoveZero=function(strValue)
42556
42566
  {
42557
42567
  while(strValue.length>0)
@@ -46632,6 +46632,16 @@ IFrameSplitOperator.IsFloat=function(value)
46632
46632
  return value!=parseInt(value);
46633
46633
  }
46634
46634
 
46635
+ //是否有效
46636
+ IFrameSplitOperator.IsVaild=function(value)
46637
+ {
46638
+ if (isNaN(value)) return false;
46639
+ if (value==null) return false;
46640
+ if (value===undefined) return false;
46641
+
46642
+ return true;
46643
+ }
46644
+
46635
46645
  IFrameSplitOperator.RemoveZero=function(strValue)
46636
46646
  {
46637
46647
  while(strValue.length>0)
@@ -94792,6 +94802,9 @@ function JSAlgorithm(errorHandler,symbolData)
94792
94802
 
94793
94803
  if (i<data.length && i<data2.length)
94794
94804
  {
94805
+ if (!IFrameSplitOperator.IsVaild(data[i])) continue;
94806
+ if (!IFrameSplitOperator.IsVaild(data2[i])) continue;
94807
+
94795
94808
  if ( !isNaN(data[i]) && !isNaN(data2[i]) ) result[i]=(data[i]>data2[i] ? 1:0);
94796
94809
  }
94797
94810
  }
@@ -94804,6 +94817,9 @@ function JSAlgorithm(errorHandler,symbolData)
94804
94817
  for(let i in data2)
94805
94818
  {
94806
94819
  result[i]=null;
94820
+ if (!IFrameSplitOperator.IsVaild(data)) continue;
94821
+ if (!IFrameSplitOperator.IsVaild(data2[i])) continue;
94822
+
94807
94823
  if ( !isNaN(data) && !isNaN(data2[i]) ) result[i]=(data>data2[i] ? 1 : 0);
94808
94824
  }
94809
94825
  }
@@ -94812,6 +94828,9 @@ function JSAlgorithm(errorHandler,symbolData)
94812
94828
  for(let i in data)
94813
94829
  {
94814
94830
  result[i]=null;
94831
+ if (!IFrameSplitOperator.IsVaild(data[i])) continue;
94832
+ if (!IFrameSplitOperator.IsVaild(data2)) continue;
94833
+
94815
94834
  if ( !isNaN(data[i]) && !isNaN(data2) ) result[i]=(data[i]>data2 ? 1 : 0);
94816
94835
  }
94817
94836
  }
@@ -94839,7 +94858,10 @@ function JSAlgorithm(errorHandler,symbolData)
94839
94858
 
94840
94859
  if (i<data.length && i<data2.length)
94841
94860
  {
94842
- if ( !isNaN(data[i]) && !isNaN(data2[i]) ) result[i]=(data[i]>=data2[i] ? 1:0);
94861
+ if (!IFrameSplitOperator.IsVaild(data[i])) continue;
94862
+ if (!IFrameSplitOperator.IsVaild(data2[i])) continue;
94863
+
94864
+ result[i]=(data[i]>=data2[i] ? 1:0);
94843
94865
  }
94844
94866
  }
94845
94867
 
@@ -94851,7 +94873,10 @@ function JSAlgorithm(errorHandler,symbolData)
94851
94873
  for(let i in data2)
94852
94874
  {
94853
94875
  result[i]=null;
94854
- if ( !isNaN(data) && !isNaN(data2[i]) ) result[i]=(data>=data2[i] ? 1 : 0);
94876
+ if (!IFrameSplitOperator.IsVaild(data)) continue;
94877
+ if (!IFrameSplitOperator.IsVaild(data2[i])) continue;
94878
+
94879
+ result[i]=(data>=data2[i] ? 1 : 0);
94855
94880
  }
94856
94881
  }
94857
94882
  else if (isNumber2 && Array.isArray(data)) //数组-单数据
@@ -94859,7 +94884,10 @@ function JSAlgorithm(errorHandler,symbolData)
94859
94884
  for(let i in data)
94860
94885
  {
94861
94886
  result[i]=null;
94862
- if ( !isNaN(data[i]) && !isNaN(data2) ) result[i]=(data[i]>=data2 ? 1 : 0);
94887
+ if (!IFrameSplitOperator.IsVaild(data[i])) continue;
94888
+ if (!IFrameSplitOperator.IsVaild(data2)) continue;
94889
+
94890
+ result[i]=(data[i]>=data2 ? 1 : 0);
94863
94891
  }
94864
94892
  }
94865
94893
 
@@ -94886,7 +94914,10 @@ function JSAlgorithm(errorHandler,symbolData)
94886
94914
 
94887
94915
  if (i<data.length && i<data2.length)
94888
94916
  {
94889
- if ( !isNaN(data[i]) && !isNaN(data2[i]) ) result[i]=(data[i]<data2[i] ? 1:0);
94917
+ if (!IFrameSplitOperator.IsVaild(data[i])) continue;
94918
+ if (!IFrameSplitOperator.IsVaild(data2[i])) continue;
94919
+
94920
+ result[i]=(data[i]<data2[i] ? 1:0);
94890
94921
  }
94891
94922
  }
94892
94923
 
@@ -94898,7 +94929,10 @@ function JSAlgorithm(errorHandler,symbolData)
94898
94929
  for(let i in data2)
94899
94930
  {
94900
94931
  result[i]=null;
94901
- if ( !isNaN(data) && !isNaN(data2[i]) ) result[i]=(data<data2[i] ? 1 : 0);
94932
+ if (!IFrameSplitOperator.IsVaild(data)) continue;
94933
+ if (!IFrameSplitOperator.IsVaild(data2[i])) continue;
94934
+
94935
+ result[i]=(data<data2[i] ? 1 : 0);
94902
94936
  }
94903
94937
  }
94904
94938
  else if (isNumber2 && Array.isArray(data)) //数组-单数据
@@ -94906,7 +94940,10 @@ function JSAlgorithm(errorHandler,symbolData)
94906
94940
  for(let i in data)
94907
94941
  {
94908
94942
  result[i]=null;
94909
- if ( !isNaN(data[i]) && !isNaN(data2) ) result[i]=(data[i]<data2 ? 1 : 0);
94943
+ if (!IFrameSplitOperator.IsVaild(data[i])) continue;
94944
+ if (!IFrameSplitOperator.IsVaild(data2)) continue;
94945
+
94946
+ result[i]=(data[i]<data2 ? 1 : 0);
94910
94947
  }
94911
94948
  }
94912
94949
 
@@ -94933,7 +94970,10 @@ function JSAlgorithm(errorHandler,symbolData)
94933
94970
 
94934
94971
  if (i<data.length && i<data2.length)
94935
94972
  {
94936
- if ( !isNaN(data[i]) && !isNaN(data2[i]) ) result[i]=(data[i]<=data2[i] ? 1:0);
94973
+ if (!IFrameSplitOperator.IsVaild(data[i])) continue;
94974
+ if (!IFrameSplitOperator.IsVaild(data2[i])) continue;
94975
+
94976
+ result[i]=(data[i]<=data2[i] ? 1:0);
94937
94977
  }
94938
94978
  }
94939
94979
 
@@ -94945,7 +94985,10 @@ function JSAlgorithm(errorHandler,symbolData)
94945
94985
  for(let i in data2)
94946
94986
  {
94947
94987
  result[i]=null;
94948
- if ( !isNaN(data) && !isNaN(data2[i]) ) result[i]=(data<=data2[i] ? 1 : 0);
94988
+ if (!IFrameSplitOperator.IsVaild(data)) continue;
94989
+ if (!IFrameSplitOperator.IsVaild(data2[i])) continue;
94990
+
94991
+ result[i]=(data<=data2[i] ? 1 : 0);
94949
94992
  }
94950
94993
  }
94951
94994
  else if (isNumber2 && Array.isArray(data)) //数组-单数据
@@ -94953,7 +94996,10 @@ function JSAlgorithm(errorHandler,symbolData)
94953
94996
  for(let i in data)
94954
94997
  {
94955
94998
  result[i]=null;
94956
- if ( !isNaN(data[i]) && !isNaN(data2) ) result[i]=(data[i]<=data2 ? 1 : 0);
94999
+ if (!IFrameSplitOperator.IsVaild(data[i])) continue;
95000
+ if (!IFrameSplitOperator.IsVaild(data2)) continue;
95001
+
95002
+ result[i]=(data[i]<=data2 ? 1 : 0);
94957
95003
  }
94958
95004
  }
94959
95005
 
@@ -96040,9 +96086,16 @@ function JSAlgorithm(errorHandler,symbolData)
96040
96086
  for(var i=0;i<n.length;++i)
96041
96087
  {
96042
96088
  var period=n[i];
96043
- if (!IFrameSplitOperator.IsNumber(period)) continue;
96044
-
96045
- if (period<1) period=i+1;
96089
+
96090
+ if (period==0)
96091
+ {
96092
+ result[i]=0;
96093
+ continue;
96094
+ }
96095
+
96096
+ if (!IFrameSplitOperator.IsNumber(period) ) period=i+1; //无效周期 第一个有效值开始.
96097
+ else if (period<0) period=i+1;
96098
+
96046
96099
  count=0;
96047
96100
  for(var j=i, k=0 ;j>=0 && k<period ;--j,++k) //当前往前period天 统计
96048
96101
  {
@@ -96506,7 +96559,7 @@ function JSAlgorithm(errorHandler,symbolData)
96506
96559
 
96507
96560
  if (!Array.isArray(n))
96508
96561
  {
96509
- if (n==0)
96562
+ if (n<=0)
96510
96563
  {
96511
96564
  var start=-1;
96512
96565
  for(var i=0; i<data.length; ++i) //取第1个有效数
@@ -96529,6 +96582,12 @@ function JSAlgorithm(errorHandler,symbolData)
96529
96582
  }
96530
96583
  else
96531
96584
  {
96585
+ result[0]=data[0];
96586
+ for(var i=1;i<n && i<data.length;++i) //前面小于N周期的累加
96587
+ {
96588
+ result[i] = result[i-1]+data[i];
96589
+ }
96590
+
96532
96591
  for(var i=n-1,j=0;i<data.length;++i,++j)
96533
96592
  {
96534
96593
  for(var k=0;k<n;++k)
@@ -127966,7 +128025,7 @@ function ScrollBarBGChart()
127966
128025
 
127967
128026
 
127968
128027
 
127969
- var HQCHART_VERSION="1.1.12469";
128028
+ var HQCHART_VERSION="1.1.12474";
127970
128029
 
127971
128030
  function PrintHQChartVersion()
127972
128031
  {
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.12469";
8
+ var HQCHART_VERSION="1.1.12474";
9
9
 
10
10
  function PrintHQChartVersion()
11
11
  {
@@ -46676,6 +46676,16 @@ IFrameSplitOperator.IsFloat=function(value)
46676
46676
  return value!=parseInt(value);
46677
46677
  }
46678
46678
 
46679
+ //是否有效
46680
+ IFrameSplitOperator.IsVaild=function(value)
46681
+ {
46682
+ if (isNaN(value)) return false;
46683
+ if (value==null) return false;
46684
+ if (value===undefined) return false;
46685
+
46686
+ return true;
46687
+ }
46688
+
46679
46689
  IFrameSplitOperator.RemoveZero=function(strValue)
46680
46690
  {
46681
46691
  while(strValue.length>0)
@@ -94836,6 +94846,9 @@ function JSAlgorithm(errorHandler,symbolData)
94836
94846
 
94837
94847
  if (i<data.length && i<data2.length)
94838
94848
  {
94849
+ if (!IFrameSplitOperator.IsVaild(data[i])) continue;
94850
+ if (!IFrameSplitOperator.IsVaild(data2[i])) continue;
94851
+
94839
94852
  if ( !isNaN(data[i]) && !isNaN(data2[i]) ) result[i]=(data[i]>data2[i] ? 1:0);
94840
94853
  }
94841
94854
  }
@@ -94848,6 +94861,9 @@ function JSAlgorithm(errorHandler,symbolData)
94848
94861
  for(let i in data2)
94849
94862
  {
94850
94863
  result[i]=null;
94864
+ if (!IFrameSplitOperator.IsVaild(data)) continue;
94865
+ if (!IFrameSplitOperator.IsVaild(data2[i])) continue;
94866
+
94851
94867
  if ( !isNaN(data) && !isNaN(data2[i]) ) result[i]=(data>data2[i] ? 1 : 0);
94852
94868
  }
94853
94869
  }
@@ -94856,6 +94872,9 @@ function JSAlgorithm(errorHandler,symbolData)
94856
94872
  for(let i in data)
94857
94873
  {
94858
94874
  result[i]=null;
94875
+ if (!IFrameSplitOperator.IsVaild(data[i])) continue;
94876
+ if (!IFrameSplitOperator.IsVaild(data2)) continue;
94877
+
94859
94878
  if ( !isNaN(data[i]) && !isNaN(data2) ) result[i]=(data[i]>data2 ? 1 : 0);
94860
94879
  }
94861
94880
  }
@@ -94883,7 +94902,10 @@ function JSAlgorithm(errorHandler,symbolData)
94883
94902
 
94884
94903
  if (i<data.length && i<data2.length)
94885
94904
  {
94886
- if ( !isNaN(data[i]) && !isNaN(data2[i]) ) result[i]=(data[i]>=data2[i] ? 1:0);
94905
+ if (!IFrameSplitOperator.IsVaild(data[i])) continue;
94906
+ if (!IFrameSplitOperator.IsVaild(data2[i])) continue;
94907
+
94908
+ result[i]=(data[i]>=data2[i] ? 1:0);
94887
94909
  }
94888
94910
  }
94889
94911
 
@@ -94895,7 +94917,10 @@ function JSAlgorithm(errorHandler,symbolData)
94895
94917
  for(let i in data2)
94896
94918
  {
94897
94919
  result[i]=null;
94898
- if ( !isNaN(data) && !isNaN(data2[i]) ) result[i]=(data>=data2[i] ? 1 : 0);
94920
+ if (!IFrameSplitOperator.IsVaild(data)) continue;
94921
+ if (!IFrameSplitOperator.IsVaild(data2[i])) continue;
94922
+
94923
+ result[i]=(data>=data2[i] ? 1 : 0);
94899
94924
  }
94900
94925
  }
94901
94926
  else if (isNumber2 && Array.isArray(data)) //数组-单数据
@@ -94903,7 +94928,10 @@ function JSAlgorithm(errorHandler,symbolData)
94903
94928
  for(let i in data)
94904
94929
  {
94905
94930
  result[i]=null;
94906
- if ( !isNaN(data[i]) && !isNaN(data2) ) result[i]=(data[i]>=data2 ? 1 : 0);
94931
+ if (!IFrameSplitOperator.IsVaild(data[i])) continue;
94932
+ if (!IFrameSplitOperator.IsVaild(data2)) continue;
94933
+
94934
+ result[i]=(data[i]>=data2 ? 1 : 0);
94907
94935
  }
94908
94936
  }
94909
94937
 
@@ -94930,7 +94958,10 @@ function JSAlgorithm(errorHandler,symbolData)
94930
94958
 
94931
94959
  if (i<data.length && i<data2.length)
94932
94960
  {
94933
- if ( !isNaN(data[i]) && !isNaN(data2[i]) ) result[i]=(data[i]<data2[i] ? 1:0);
94961
+ if (!IFrameSplitOperator.IsVaild(data[i])) continue;
94962
+ if (!IFrameSplitOperator.IsVaild(data2[i])) continue;
94963
+
94964
+ result[i]=(data[i]<data2[i] ? 1:0);
94934
94965
  }
94935
94966
  }
94936
94967
 
@@ -94942,7 +94973,10 @@ function JSAlgorithm(errorHandler,symbolData)
94942
94973
  for(let i in data2)
94943
94974
  {
94944
94975
  result[i]=null;
94945
- if ( !isNaN(data) && !isNaN(data2[i]) ) result[i]=(data<data2[i] ? 1 : 0);
94976
+ if (!IFrameSplitOperator.IsVaild(data)) continue;
94977
+ if (!IFrameSplitOperator.IsVaild(data2[i])) continue;
94978
+
94979
+ result[i]=(data<data2[i] ? 1 : 0);
94946
94980
  }
94947
94981
  }
94948
94982
  else if (isNumber2 && Array.isArray(data)) //数组-单数据
@@ -94950,7 +94984,10 @@ function JSAlgorithm(errorHandler,symbolData)
94950
94984
  for(let i in data)
94951
94985
  {
94952
94986
  result[i]=null;
94953
- if ( !isNaN(data[i]) && !isNaN(data2) ) result[i]=(data[i]<data2 ? 1 : 0);
94987
+ if (!IFrameSplitOperator.IsVaild(data[i])) continue;
94988
+ if (!IFrameSplitOperator.IsVaild(data2)) continue;
94989
+
94990
+ result[i]=(data[i]<data2 ? 1 : 0);
94954
94991
  }
94955
94992
  }
94956
94993
 
@@ -94977,7 +95014,10 @@ function JSAlgorithm(errorHandler,symbolData)
94977
95014
 
94978
95015
  if (i<data.length && i<data2.length)
94979
95016
  {
94980
- if ( !isNaN(data[i]) && !isNaN(data2[i]) ) result[i]=(data[i]<=data2[i] ? 1:0);
95017
+ if (!IFrameSplitOperator.IsVaild(data[i])) continue;
95018
+ if (!IFrameSplitOperator.IsVaild(data2[i])) continue;
95019
+
95020
+ result[i]=(data[i]<=data2[i] ? 1:0);
94981
95021
  }
94982
95022
  }
94983
95023
 
@@ -94989,7 +95029,10 @@ function JSAlgorithm(errorHandler,symbolData)
94989
95029
  for(let i in data2)
94990
95030
  {
94991
95031
  result[i]=null;
94992
- if ( !isNaN(data) && !isNaN(data2[i]) ) result[i]=(data<=data2[i] ? 1 : 0);
95032
+ if (!IFrameSplitOperator.IsVaild(data)) continue;
95033
+ if (!IFrameSplitOperator.IsVaild(data2[i])) continue;
95034
+
95035
+ result[i]=(data<=data2[i] ? 1 : 0);
94993
95036
  }
94994
95037
  }
94995
95038
  else if (isNumber2 && Array.isArray(data)) //数组-单数据
@@ -94997,7 +95040,10 @@ function JSAlgorithm(errorHandler,symbolData)
94997
95040
  for(let i in data)
94998
95041
  {
94999
95042
  result[i]=null;
95000
- if ( !isNaN(data[i]) && !isNaN(data2) ) result[i]=(data[i]<=data2 ? 1 : 0);
95043
+ if (!IFrameSplitOperator.IsVaild(data[i])) continue;
95044
+ if (!IFrameSplitOperator.IsVaild(data2)) continue;
95045
+
95046
+ result[i]=(data[i]<=data2 ? 1 : 0);
95001
95047
  }
95002
95048
  }
95003
95049
 
@@ -96084,9 +96130,16 @@ function JSAlgorithm(errorHandler,symbolData)
96084
96130
  for(var i=0;i<n.length;++i)
96085
96131
  {
96086
96132
  var period=n[i];
96087
- if (!IFrameSplitOperator.IsNumber(period)) continue;
96088
-
96089
- if (period<1) period=i+1;
96133
+
96134
+ if (period==0)
96135
+ {
96136
+ result[i]=0;
96137
+ continue;
96138
+ }
96139
+
96140
+ if (!IFrameSplitOperator.IsNumber(period) ) period=i+1; //无效周期 第一个有效值开始.
96141
+ else if (period<0) period=i+1;
96142
+
96090
96143
  count=0;
96091
96144
  for(var j=i, k=0 ;j>=0 && k<period ;--j,++k) //当前往前period天 统计
96092
96145
  {
@@ -96550,7 +96603,7 @@ function JSAlgorithm(errorHandler,symbolData)
96550
96603
 
96551
96604
  if (!Array.isArray(n))
96552
96605
  {
96553
- if (n==0)
96606
+ if (n<=0)
96554
96607
  {
96555
96608
  var start=-1;
96556
96609
  for(var i=0; i<data.length; ++i) //取第1个有效数
@@ -96573,6 +96626,12 @@ function JSAlgorithm(errorHandler,symbolData)
96573
96626
  }
96574
96627
  else
96575
96628
  {
96629
+ result[0]=data[0];
96630
+ for(var i=1;i<n && i<data.length;++i) //前面小于N周期的累加
96631
+ {
96632
+ result[i] = result[i-1]+data[i];
96633
+ }
96634
+
96576
96635
  for(var i=n-1,j=0;i<data.length;++i,++j)
96577
96636
  {
96578
96637
  for(var k=0;k<n;++k)
@@ -128003,6 +128062,115 @@ function ScrollBarBGChart()
128003
128062
  }
128004
128063
 
128005
128064
 
128065
+ ///////////////////////////////////////////////////////////////////////////////////
128066
+ // 工作线程计算指标示例
128067
+ //
128068
+ //
128069
+ //////////////////////////////////////////////////////////////////////////////////
128070
+
128071
+ function HQChartScriptWorker()
128072
+ {
128073
+
128074
+ this.Create=function()
128075
+ {
128076
+ addEventListener('message', (obj)=>{ this.OnRecvMessage(obj); });
128077
+ }
128078
+
128079
+ this.NetworkFilter=function(data, callback, indexInfo)
128080
+ {
128081
+ JSConsole.Complier.Log(`[HQChartScriptWorker::NetworkFilter] [${data.Name}][${data.Explain}] data=`, data);
128082
+ //数据下载
128083
+ }
128084
+
128085
+ this.ExecuteScript=function(indexData, message)
128086
+ {
128087
+ var scriptObj={ };
128088
+
128089
+ if (indexData.Script)
128090
+ {
128091
+ scriptObj.Name=indexData.Name;
128092
+ scriptObj.ID=indexData.Index;
128093
+ scriptObj.Script=indexData.Script;
128094
+ }
128095
+ else
128096
+ {
128097
+ if (!indexData.Index) return false;
128098
+ var scriptData = new JSIndexScript();
128099
+ var finder = scriptData.Get(indexData.Index);
128100
+ if (!finder) return false;
128101
+
128102
+ scriptObj.ID=indexData.Index;
128103
+ scriptObj.Name=finder.Name;
128104
+ scriptObj.Script=finder.Script;
128105
+ scriptObj.Args=finder.Args;
128106
+ }
128107
+
128108
+ if (indexData.Args) scriptObj.Args=indexData.Args;
128109
+
128110
+ var indexInfo={ Name:scriptObj.Name, ID:scriptObj.ID, Script:scriptObj.Script, Args:scriptObj.Args, Guid:message.Guid };
128111
+ scriptObj.ErrorCallback=(error)=>{ this.OnExecuteError(error,indexInfo); };
128112
+ scriptObj.FinishCallback=(data, jsExectute)=>{ this.OnExecuteFinish(data, indexInfo, jsExectute); };
128113
+ scriptObj.NetworkFilter=(data, callback)=>{ this.NetworkFilter(data, callback, indexInfo); };
128114
+
128115
+ JSConsole.Complier.Log('[HQChartScriptWorker::ExecuteScript] scriptObj=',scriptObj);
128116
+
128117
+ var indexConsole=new ScriptIndexConsole(scriptObj);
128118
+
128119
+ var hisData=null;
128120
+ if (message && message.Data)
128121
+ {
128122
+ hisData=new ChartData();
128123
+ hisData.Data=message.Data;
128124
+ hisData.Right=message.Right;
128125
+ hisData.Period=message.Period;
128126
+ hisData.DataType=message.DataType; //0=日线 1=分钟
128127
+ hisData.Symbol=message.symbol;
128128
+ }
128129
+
128130
+ var stockObj=
128131
+ {
128132
+ HQDataType:HQ_DATA_TYPE.KLINE_ID,
128133
+ Stock: { Symbol:message.Symbol },
128134
+ Request: { MaxDataCount: 500, MaxMinuteDayCount:5 },
128135
+ Period:message.Period , Right:message.Right,
128136
+ Data:hisData
128137
+ };
128138
+
128139
+ if (IFrameSplitOperator.IsNumber(message.HQDataType)) stockObj.HQDataType=message.HQDataType;
128140
+
128141
+ indexConsole.ExecuteScript(stockObj);
128142
+ }
128143
+
128144
+ this.OnRecvMessage=function(message)
128145
+ {
128146
+ var data=message.data;
128147
+ if (!data) return;
128148
+
128149
+ if (data.ID==JSCHART_WORKER_MESSAGE_ID.EXECUTE_SCRIPT)
128150
+ {
128151
+ if (!IFrameSplitOperator.IsNonEmptyArray(data.AryIndex)) return;
128152
+
128153
+ for(var i=0;i<data.AryIndex.length;++i)
128154
+ {
128155
+ var item=data.AryIndex[i];
128156
+ this.ExecuteScript(item,data);
128157
+ }
128158
+ }
128159
+ }
128160
+
128161
+ this.OnExecuteFinish=function(data, indexInfo, jsExectute)
128162
+ {
128163
+ var message={ Data:data, IndexInfo:indexInfo , ID:JSCHART_WORKER_MESSAGE_ID.FINISH_EXECUTE_SCRIPT };
128164
+ postMessage(message);
128165
+ }
128166
+
128167
+ this.OnExecuteError=function(error,indexInfo)
128168
+ {
128169
+ var message={ IndexInfo:indexInfo, ID:JSCHART_WORKER_MESSAGE_ID.ERROR_EXECUTE_SCRIPT, Error:error };
128170
+ postMessage(message);
128171
+ }
128172
+ }
128173
+
128006
128174
  /********************************************************************************
128007
128175
  * 版本信息输出
128008
128176
  *
@@ -128010,7 +128178,7 @@ function ScrollBarBGChart()
128010
128178
 
128011
128179
 
128012
128180
 
128013
- var HQCHART_VERSION="1.1.12469";
128181
+ var HQCHART_VERSION="1.1.12474";
128014
128182
 
128015
128183
  function PrintHQChartVersion()
128016
128184
  {
@@ -128140,5 +128308,8 @@ export default {
128140
128308
  JSCHART_DATA_FIELD_ID:JSCHART_DATA_FIELD_ID,
128141
128309
  JSCHART_WORKER_MESSAGE_ID:JSCHART_WORKER_MESSAGE_ID
128142
128310
  },
128311
+
128312
+
128313
+ HQChartScriptWorker:HQChartScriptWorker, //计算工作线程
128143
128314
 
128144
128315
  }
@@ -1,4 +1,4 @@
1
- copy ..\umychart.console.js+..\umychart.network.js+..\umychart.index.data.js+..\umychart.js+..\umychart.complier.js+..\umychart.style.js+..\umychart.deal.js+..\umychart.report.js+..\umychart.keyboard.js+..\umychart.scrollbar.js+..\umychart.version.js+umychart.vue.export.js ..\umychart.vue\umychart.vue.js /b
1
+ copy ..\umychart.console.js+..\umychart.network.js+..\umychart.index.data.js+..\umychart.js+..\umychart.complier.js+..\umychart.style.js+..\umychart.deal.js+..\umychart.report.js+..\umychart.keyboard.js+..\umychart.scrollbar.js+..\umychart.worker.js+..\umychart.version.js+umychart.vue.export.js ..\umychart.vue\umychart.vue.js /b
2
2
  copy ..\umychart.regressiontest.js+umychart.regressiontest.vue.export.js ..\umychart.vue\umychart.regressiontest.vue.js /b
3
3
  copy ..\umychart.listctrl.js+umychart.listctrl.vue.export.js ..\umychart.vue\umychart.listctrl.vue.js /b
4
4
 
@@ -105,5 +105,8 @@ export default {
105
105
  JSCHART_DATA_FIELD_ID:JSCHART_DATA_FIELD_ID,
106
106
  JSCHART_WORKER_MESSAGE_ID:JSCHART_WORKER_MESSAGE_ID
107
107
  },
108
+
109
+
110
+ HQChartScriptWorker:HQChartScriptWorker, //计算工作线程
108
111
 
109
112
  }