hqchart 1.1.12622 → 1.1.12627

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.
@@ -5770,7 +5770,7 @@ this.PointToValue=function(){if(!this.Frame)return false;if(this.Frame.ClassName
5770
5770
  this.ValueToPoint=function(){if(!this.Frame)return false;var data=this.Frame.Data;if(!data)return false;//this.UpdateXValue();
5771
5771
  var isHScreen=this.Frame.IsHScreen;this.Point=[];for(var i=0;i<this.Value.length;++i){var item=this.Value[i];var pt=new Point();if(isHScreen){pt.Y=this.Frame.GetXFromIndex(item.XValue-data.DataOffset,false);pt.X=this.Frame.GetYFromData(item.YValue,false);}else{pt.X=this.Frame.GetXFromIndex(item.XValue-data.DataOffset,false);pt.Y=this.Frame.GetYFromData(item.YValue,false);}this.Point[i]=pt;}};this.UpdateXValue=function()//通过datetime更新x的索引
5772
5772
  {if(!this.Frame)return false;var data=this.Frame.Data;if(!data)return false;var aryDateTime=[];for(var i=0;i<this.Value.length;++i){var item=this.Value[i];if(!item.DateTime)break;var dateTime={Date:item.DateTime.Date};if(IFrameSplitOperator.IsNumber(item.DateTime.Time))dateTime.Time=item.DateTime.Time;aryDateTime[i]=dateTime;}data.FindDataIndexByDateTime(aryDateTime);for(var i in aryDateTime){var findItem=aryDateTime[i];var valueItem=this.Value[i];if(findItem.Index>=0)valueItem.XValue=findItem.Index;}};//xStep,yStep 移动的偏移量
5773
- this.Move=function(xStep,yStep){if(this.Status!=20)return fasle;if(!this.Frame)return false;var data=this.Frame.Data;if(!data)return false;if(this.MovePointIndex==null)return false;var index=parseInt(this.MovePointIndex);if(index===100)//整体移动
5773
+ this.Move=function(xStep,yStep){if(this.Status!=20)return false;if(!this.Frame)return false;var data=this.Frame.Data;if(!data)return false;if(this.MovePointIndex==null)return false;var index=parseInt(this.MovePointIndex);if(index===100)//整体移动
5774
5774
  {if(this.IsMoveOutOfBounds(this.Point,xStep,yStep))return false;for(var i in this.Point){this.Point[i].X+=xStep;this.Point[i].Y+=yStep;}}else if(index===0||index===1||index===2||index===3||index===4||index===5){if(index<this.Point.length){this.Point[index].X+=xStep;this.Point[index].Y+=yStep;}}else{return false;}};//是否超出边界了
5775
5775
  this.IsMoveOutOfBounds=function(aryPoint,xStep,yStep){if(!this.EnableMoveCheck)return false;if(!this.Frame)return false;if(this.Frame.ClassName=="MinuteFrame"||this.Frame.Class=="MinuteHScreenFrame")return false;var data=this.Frame.Data;if(!data)return false;if(!IFrameSplitOperator.IsNonEmptyArray(data.Data))return false;if(!IFrameSplitOperator.IsNonEmptyArray(aryPoint))return false;var isHScreen=this.Frame.IsHScreen;if(isHScreen){//TODO:横屏以后再做
5776
5776
  return false;}else{var offset=data.DataOffset;var startIndex=0-offset;var endIndex=data.Data.length-offset;if(xStep>0){var xEnd=this.Frame.GetXFromIndex(endIndex-1,false);for(var i=0;i<aryPoint.length;++i){var item=aryPoint[i];if(item.X+xStep>xEnd)return true;}}else if(xStep<0){var xStart=this.Frame.GetXFromIndex(startIndex,false);for(var i=0;i<aryPoint.length;++i){var item=aryPoint[i];if(item.X+xStep<xStart)return true;}}return false;}};this.ClipFrame=function(){if(this.Frame.IsHScreen){var left=this.Frame.ChartBorder.GetLeftEx();var top=this.Frame.ChartBorder.GetTop();var width=this.Frame.ChartBorder.GetWidthEx();var height=this.Frame.ChartBorder.GetHeight();}else{var left=this.Frame.ChartBorder.GetLeft();var top=this.Frame.ChartBorder.GetTopEx();var width=this.Frame.ChartBorder.GetWidth();var height=this.Frame.ChartBorder.GetHeightEx();}this.Canvas.save();this.Canvas.beginPath();this.Canvas.rect(left,top,width,height);this.Canvas.clip();};//计算需要画的点的坐标option:{IsCheckX:是否检测X值, IsCheckY:是否检测Y值}
@@ -5987,7 +5987,7 @@ this.CalculateDrawPoint=function(){if(this.Status<2)return null;if(!this.Point.l
5987
5987
  linePoint={Start:new Point(),End:new Point()};linePoint.Start.X=drawPoint[0].X;linePoint.Start.Y=drawPoint[0].Y-yMove;linePoint.End.X=drawPoint[1].X;linePoint.End.Y=drawPoint[1].Y-yMove;this.LinePoint.push(linePoint);var ptCenter=new Point();ptCenter.X=linePoint.Start.X+(linePoint.End.X-linePoint.Start.X)/2;ptCenter.Y=linePoint.Start.Y+(linePoint.End.Y-linePoint.Start.Y)/2;drawPoint[2]=ptCenter;this.Point[2]=ptCenter;var xValue=parseInt(this.Frame.GetXData(ptCenter.X))+data.DataOffset;var yValue=this.Frame.GetYData(ptCenter.Y);this.Value[2]={XValue:xValue,YValue:yValue};this.PointCount=this.Point.length;//完成以后是3个点
5988
5988
  linePoint={Start:new Point(),End:new Point()};linePoint.Start.X=drawPoint[0].X;linePoint.Start.Y=drawPoint[0].Y-yMove/2;linePoint.End.X=drawPoint[1].X;linePoint.End.Y=drawPoint[1].Y-yMove/2;this.CenterLine.Line=linePoint;}}return drawPoint;};this.DrawArea=function(pt,pt2,pt3,pt4){this.Canvas.fillStyle=this.AreaColor;this.Canvas.beginPath();this.Canvas.moveTo(pt.X,pt.Y);this.Canvas.lineTo(pt2.X,pt2.Y);this.Canvas.lineTo(pt3.X,pt3.Y);this.Canvas.lineTo(pt4.X,pt4.Y);this.Canvas.closePath();this.Canvas.fill();};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint();if(!drawPoint)return;this.AreaColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.3);this.ClipFrame();if(this.LinePoint.length==2){this.DrawArea(this.LinePoint[0].Start,this.LinePoint[0].End,this.LinePoint[1].End,this.LinePoint[1].Start);}for(var i=0;i<this.LinePoint.length;++i){var item=this.LinePoint[i];this.DrawLine(item.Start,item.End);}if(this.CenterLine.IsShow&&this.CenterLine.Line){var item=this.CenterLine.Line;this.Canvas.setLineDash(this.CenterLine.LineDash);this.DrawLine(item.Start,item.End);this.Canvas.setLineDash([]);}this.Canvas.restore();this.DrawPoint(drawPoint);//画点
5989
5989
  };//xStep,yStep 移动的偏移量
5990
- this.Move=function(xStep,yStep){if(this.Status!=20)return fasle;if(!this.Frame)return false;var data=this.Frame.Data;if(!data)return false;if(this.MovePointIndex==100)//整体移动
5990
+ this.Move=function(xStep,yStep){if(this.Status!=20)return false;if(!this.Frame)return false;var data=this.Frame.Data;if(!data)return false;if(this.MovePointIndex==100)//整体移动
5991
5991
  {for(var i=0;i<this.Point.length;++i){this.Point[i].X+=xStep;this.Point[i].Y+=yStep;}}else if(this.MovePointIndex==0||this.MovePointIndex==1){if(this.MovePointIndex<this.Point.length){this.Point[this.MovePointIndex].X+=xStep;this.Point[this.MovePointIndex].Y+=yStep;}}else if(this.MovePointIndex==2)//宽度的点要计算
5992
5992
  {this.Point[this.MovePointIndex].X+=xStep;this.Point[this.MovePointIndex].Y+=yStep;var x=this.Point[1].X-this.Point[0].X;var y=this.Point[1].Y-this.Point[0].Y;var angle=Math.atan(Math.abs(x/y));var yMove=this.ChannelWidth/Math.sin(angle)-yStep;this.ChannelWidth=Math.sin(angle)*yMove;}};//0-10 鼠标对应的点索引 100=鼠标在正个图形上 -1 鼠标不在图形上
5993
5993
  this.IsPointIn=function(x,y){if(!this.Frame||this.Status!=10)return-1;var data=this.Frame.Data;if(!data)return-1;//是否在点上
@@ -7780,10 +7780,10 @@ var item=option.Windows[i];if(!item)continue;if(item.Script){this.WindowIndex[in
7780
7780
  }else if(item.API){var apiItem=item.API;this.WindowIndex[index]=new APIScriptIndex(apiItem.Name,apiItem.Script,apiItem.Args,item);}else{var indexID=item.Index;var indexInfo=systemScript.Get(indexID);if(indexInfo){var args=indexInfo.Args;if(item.Args)indexInfo.Args=item.Args;indexInfo.ID=indexID;this.WindowIndex[index]=new ScriptIndex(indexInfo.Name,indexInfo.Script,indexInfo.Args,indexInfo);//脚本执行
7781
7781
  }}}}}if(!symbol||this.DayCount<=0){this.DrawEmpty();}else{this.ChartSplashPaint.SetTitle(this.LoadDataSplashTitle);this.ChartSplashPaint.EnableSplash(true);//增加下载动画
7782
7782
  this.Draw();this.RequestData();}};this.SetPageInfo=function(pageInfo){if(!pageInfo)return;if(IFrameSplitOperator.IsBool(pageInfo.Enable))this.PageInfo.Enable=pageInfo.Enable;if(IFrameSplitOperator.IsNumber(pageInfo.Offset))this.PageInfo.Offset=pageInfo.Offset;if(IFrameSplitOperator.IsNumber(pageInfo.ShowDayCount))this.PageInfo.ShowDayCount=pageInfo.ShowDayCount;};this.ClearMinuteData=function(){this.SourceData=null;this.DayData=null;this.BeforeOpenData=null;this.AfterCloseData=null;this.MultiDayBeforeOpenData=null;this.MultiDayAfterCloseData=null;};this.ChangeDayCount=function(count,option){if(count<0)return;this.StopDisplayLatest();this.CancelAutoUpdate();this.AutoUpdateEvent(false,"MinuteChartContainer::ChangeDayCount");this.DayCount=count;this.ClearMinuteData();if(option&&option.PageInfo){this.SetPageInfo(option.PageInfo);this.ResetDayOffset();}if(this.DayCount>1){this.ChartDrawPicture=[];}else{this.ReloadChartDrawPicture();}this.ResetDataStatus();this.ClearIndexPaint();//清空指标
7783
- this.ResetOverlaySymbolStatus();this.RequestData();};//叠加股票
7784
- this.OverlaySymbol=function(symbol,option){for(var i=0;i<this.OverlayChartPaint.length;++i){var item=this.OverlayChartPaint[i];if(item.Symbol==symbol){console.warn('[MinuteChartContainer::OverlaySymbol] overlay symbol='+symbol+' exist.');return false;}}var paint=new ChartOverlayMinutePriceLine();paint.Canvas=this.Canvas;paint.ChartBorder=this.Frame.SubFrame[0].Frame.ChartBorder;paint.ChartFrame=this.Frame.SubFrame[0].Frame;paint.Name="Overlay-Minute";paint.Symbol=symbol;paint.Identify='Overlay-Minute-'+symbol;if(option&&option.Color)paint.Color=option.Color;//外部设置颜色
7783
+ this.ResetOverlaySymbolStatus();this.RequestData();};//叠加股票 symbol支持数据 ["600000.sh", "0000001.sz"]
7784
+ this.OverlaySymbol=function(symbol,option){var arySymbol=null;if(IFrameSplitOperator.IsString(symbol))arySymbol=[symbol];else if(Array.isArray(symbol))arySymbol=symbol;if(!IFrameSplitOperator.IsNonEmptyArray(arySymbol))return false;var aryNewSymbol=[];for(var i=0,j=0;i<arySymbol.length;++i){var strSymbol=arySymbol[i];var bFind=false;for(j=0;j<this.OverlayChartPaint.length;++j){var item=this.OverlayChartPaint[j];if(item.Symbol==strSymbol){bFind=true;console.warn('[MinuteChartContainer::OverlaySymbol] overlay symbol='+strSymbol+' exist.');break;}}if(!bFind)aryNewSymbol.push(strSymbol);}if(!IFrameSplitOperator.IsNonEmptyArray(arySymbol))return true;for(var i=0;i<aryNewSymbol.length;++i){var strSymbol=aryNewSymbol[i];var paint=new ChartOverlayMinutePriceLine();paint.Canvas=this.Canvas;paint.ChartBorder=this.Frame.SubFrame[0].Frame.ChartBorder;paint.ChartFrame=this.Frame.SubFrame[0].Frame;paint.Name="Overlay-Minute";paint.Symbol=strSymbol;paint.Identify='Overlay-Minute-'+strSymbol;if(option&&option.Color)paint.Color=option.Color;//外部设置颜色
7785
7785
  else paint.Color=g_JSChartResource.OverlaySymbol.Color[g_JSChartResource.OverlaySymbol.Random%g_JSChartResource.OverlaySymbol.Color.length];++g_JSChartResource.OverlaySymbol.Random;paint.MainData=this.SourceData;//绑定主图数据
7786
- if(paint.SetOption)paint.SetOption(option);this.OverlayChartPaint.push(paint);if(this.DayCount<=1)this.RequestOverlayMinuteData();//请求数据
7786
+ if(paint.SetOption)paint.SetOption(option);this.OverlayChartPaint.push(paint);}if(this.DayCount<=1)this.RequestOverlayMinuteData();//请求数据
7787
7787
  else this.RequestOverlayHistoryMinuteData();return true;};this.ResetOverlaySymbolStatus=function(){for(var i in this.OverlayChartPaint){var item=this.OverlayChartPaint[i];item.Status=OVERLAY_STATUS_ID.STATUS_NONE_ID;}};//删除一个叠加股票
7788
7788
  this.DeleteOverlaySymbol=function(symbol){for(var i in this.OverlayChartPaint){var item=this.OverlayChartPaint[i];if(item.Symbol===symbol){item.IsDelete=true;this.OverlayChartPaint.splice(i,1);this.UpdateFrameMaxMin();this.Draw();return true;}}console.warn('[MinuteChartContainer::DeleteOverlaySymbol] overlay symbol='+symbol+' not exist.');return false;};//取消叠加股票
7789
7789
  this.ClearOverlaySymbol=function(){for(var i in this.OverlayChartPaint){var item=this.OverlayChartPaint[i];item.IsDelete=true;}this.OverlayChartPaint=[];this.Frame.SubFrame[0].Frame.YSplitOperator.OverlayChartPaint=this.OverlayChartPaint;this.TitlePaint[0].OverlayChartPaint=this.OverlayChartPaint;//绑定叠加
@@ -10351,10 +10351,10 @@ this.ALL=function(data,n){if(n<=0)n=1;var result=[];if(Array.isArray(data)){if(n
10351
10351
  SUMBARS(X,A):将X向前累加直到大于等于A,返回这个区间的周期数,若所有的数据都累加后还不能达到A,则返回此时前面的总周期数.
10352
10352
  例如:SUMBARS(VOL,CAPITAL)求完全换手到现在的周期数
10353
10353
  */this.SUMBARS=function(data,data2){var isArray=Array.isArray(data);var isArray2=Array.isArray(data2);var isNumber=IFrameSplitOperator.IsNumber(data);var isNumber2=IFrameSplitOperator.IsNumber(data2);var result=[];if(isArray&&isNumber2){for(var i=0,n=0;i<data.length;++i){var sum=0;var n=0;for(var j=i-1;j>=0;--j,++n){var item=data[i];if(!IFrameSplitOperator.IsNumber(item))continue;sum+=data[j];if(sum>data2){break;}}result[i]=n;}}else if(isArray&&isArray2){var count=Math.max(data.length,data2.length);for(var i=0;i<count;++i){result[i]=null;var sum=0;var n=0;var value=data2[i];if(!IFrameSplitOperator.IsNumber(value))continue;for(var j=i-1;j>=0;--j,++n){var item=data[i];if(!IFrameSplitOperator.IsNumber(item))continue;sum+=data[j];if(sum>value){break;}}result[i]=n;}}else if(isNumber&&isArray2){for(var i=0;i<data2.length;++i){result[i]=null;var sum=0;var n=0;var value=data2[i];if(!IFrameSplitOperator.IsNumber(value))continue;for(var j=i-1;j>=0;--j,++n){sum+=data;if(sum>value){break;}}result[i]=n;}}else if(isNumber&&isNumber2){//TODO: 后面再写吧
10354
- }return result;};//格式化字符串 "{0}-{1}", C, O;
10355
- this.STRFORMAT=function(strFormat,args,node){var aryParam=strFormat.match(/{\d+}/g);if(!IFrameSplitOperator.IsNonEmptyArray(aryParam))return null;var mapParam=new _map2.default();//key=index, value={Text}
10356
- var maxIndex=-1;for(var i=0;i<aryParam.length;++i){var item=aryParam[i];if(item.length<3)continue;var value=item.slice(1,item.length-1);var index=parseInt(value);var paramItem={Src:item,Index:index,Text:null};if(maxIndex<index)maxIndex=index;mapParam.set(index,paramItem);}var isArray=false;//是否输出数组字符串
10357
- var maxCount=0;for(var i=1;i<args.length;++i){var item=args[i];if(Array.isArray(item)){isArray=true;if(maxCount<item.length)maxCount=item.length;}}if(isArray){var result=[];for(var i=0;i<maxCount;++i){var strItem=strFormat;var _iteratorNormalCompletion19=true;var _didIteratorError19=false;var _iteratorError19=undefined;try{for(var _iterator19=(0,_getIterator3.default)(mapParam),_step19;!(_iteratorNormalCompletion19=(_step19=_iterator19.next()).done);_iteratorNormalCompletion19=true){var item=_step19.value;var paramInfo=item[1];var paramItem=args[paramInfo.Index+1];var text="null";if(paramItem){if(Array.isArray(paramItem)){var value=paramItem[i];if(value)text=''+value;}else{text=''+paramItem;}}strItem=strItem.replace(paramInfo.Src,text);}}catch(err){_didIteratorError19=true;_iteratorError19=err;}finally{try{if(!_iteratorNormalCompletion19&&_iterator19.return){_iterator19.return();}}finally{if(_didIteratorError19){throw _iteratorError19;}}}result[i]=strItem;}return result;}else{var result=strFormat;var _iteratorNormalCompletion20=true;var _didIteratorError20=false;var _iteratorError20=undefined;try{for(var _iterator20=(0,_getIterator3.default)(mapParam),_step20;!(_iteratorNormalCompletion20=(_step20=_iterator20.next()).done);_iteratorNormalCompletion20=true){var item=_step20.value;var paramInfo=item[1];var paramItem=args[paramInfo.Index+1];var text="null";if(paramItem){text=''+paramItem;}result=result.replace(paramInfo.Src,text);}}catch(err){_didIteratorError20=true;_iteratorError20=err;}finally{try{if(!_iteratorNormalCompletion20&&_iterator20.return){_iterator20.return();}}finally{if(_didIteratorError20){throw _iteratorError20;}}}return result;}};//函数调用
10354
+ }return result;};//格式化字符串 "{0}-{1}", C, O; 小数位数 {0:0.00}
10355
+ this.STRFORMAT=function(strFormat,args,node){var aryParam=strFormat.match(/{[0-9.:]+}/g);if(!IFrameSplitOperator.IsNonEmptyArray(aryParam))return null;var mapParam=new _map2.default();//key=index, value={Text}
10356
+ var maxIndex=-1;for(var i=0;i<aryParam.length;++i){var item=aryParam[i];if(item.length<3)continue;var value=item.slice(1,item.length-1);var index=-1,decimal=-1;if(value.indexOf(":")>0){var aryTemp=value.split(":");if(aryTemp){if(aryTemp[0])index=parseInt(aryTemp[0]);if(aryTemp[1]){if(aryTemp[1].indexOf(".")>=0){var zeroCount=0;var strTemp=aryTemp[1];for(var j=strTemp.length-1;j>=0;--j){if(strTemp[j]=="0")++zeroCount;else break;}if(zeroCount>0)decimal=zeroCount;}else if(aryTemp[1]=="0"){decimal=0;}}}}else{index=parseInt(value);}if(index<0)continue;var paramItem={Src:item,Index:index,Text:null,Decimal:null};if(decimal>=0)paramItem.Decimal=decimal;if(maxIndex<index)maxIndex=index;mapParam.set(index,paramItem);}var isArray=false;//是否输出数组字符串
10357
+ var maxCount=0;for(var i=1;i<args.length;++i){var item=args[i];if(Array.isArray(item)){isArray=true;if(maxCount<item.length)maxCount=item.length;}}if(isArray){var result=[];for(var i=0;i<maxCount;++i){var strItem=strFormat;var _iteratorNormalCompletion19=true;var _didIteratorError19=false;var _iteratorError19=undefined;try{for(var _iterator19=(0,_getIterator3.default)(mapParam),_step19;!(_iteratorNormalCompletion19=(_step19=_iterator19.next()).done);_iteratorNormalCompletion19=true){var item=_step19.value;var paramInfo=item[1];var paramItem=args[paramInfo.Index+1];var text="null";if(paramItem){if(Array.isArray(paramItem)){var value=paramItem[i];if(value){if(IFrameSplitOperator.IsNumber(paramInfo.Decimal))text=''+value.toFixed(paramInfo.Decimal);else text=''+value;}}else{text=''+paramItem;}}strItem=strItem.replace(paramInfo.Src,text);}}catch(err){_didIteratorError19=true;_iteratorError19=err;}finally{try{if(!_iteratorNormalCompletion19&&_iterator19.return){_iterator19.return();}}finally{if(_didIteratorError19){throw _iteratorError19;}}}result[i]=strItem;}return result;}else{var result=strFormat;var _iteratorNormalCompletion20=true;var _didIteratorError20=false;var _iteratorError20=undefined;try{for(var _iterator20=(0,_getIterator3.default)(mapParam),_step20;!(_iteratorNormalCompletion20=(_step20=_iterator20.next()).done);_iteratorNormalCompletion20=true){var item=_step20.value;var paramInfo=item[1];var paramItem=args[paramInfo.Index+1];var text="null";if(paramItem){text=''+paramItem;}result=result.replace(paramInfo.Src,text);}}catch(err){_didIteratorError20=true;_iteratorError20=err;}finally{try{if(!_iteratorNormalCompletion20&&_iterator20.return){_iterator20.return();}}finally{if(_didIteratorError20){throw _iteratorError20;}}}return result;}};//函数调用
10358
10358
  this.CallFunction=function(name,args,node,symbolData){switch(name){case'MAX':case"MAX6":return this.MAX(args,node);case'MIN':case"MIN6":return this.MIN(args,node);case'REF':return this.REF(args[0],args[1]);case"REFV":return this.REFV(args[0],args[1]);case'REFX':return this.REFX(args[0],args[1]);case"REFXV":return this.REFXV(args[0],args[1]);case"REFX1"://文华函数
10359
10359
  return this.REFX(args[0],args[1]);case'ABS':return this.ABS(args[0]);case'MA':return this.MA(args[0],args[1]);case"EMA":return this.EMA(args[0],args[1]);case"SMA":return this.SMA(args[0],args[1],args[2]);case"DMA":return this.DMA(args[0],args[1]);case"XMA":return this.XMA(args[0],args[1]);case'EXPMA':return this.EXPMA(args[0],args[1]);case'EXPMEMA':return this.EXPMEMA(args[0],args[1]);case'COUNT':return this.COUNT(args[0],args[1]);case'LLV':return this.LLV(args[0],args[1]);case"LV":return this.LV(args[0],args[1]);case'LLVBARS':return this.LLVBARS(args[0],args[1]);case'HHV':return this.HHV(args[0],args[1]);case'HV':return this.HV(args[0],args[1]);case'HHVBARS':return this.HHVBARS(args[0],args[1]);case'MULAR':return this.MULAR(args[0],args[1]);case'CROSS':return this.CROSS(args[0],args[1]);case'LONGCROSS':return this.LONGCROSS(args[0],args[1],args[2]);case"ISVALID":return this.ISVALID(args[0]);case"CROSSDOWN":return this.CROSSDOWN(args[0],args[1]);case"CROSSUP":return this.CROSSUP(args[0],args[1]);case'AVEDEV':return this.AVEDEV(args[0],args[1]);case'STD':return this.STD(args[0],args[1]);case'IF':case'IFF':case"IFELSE":return this.IF(args[0],args[1],args[2]);case'IFN':return this.IFN(args[0],args[1],args[2]);case'NOT':return this.NOT(args[0]);case'SUM':return this.SUM(args[0],args[1]);case'RANGE':return this.RANGE(args[0],args[1],args[2]);case'EXIST':return this.EXIST(args[0],args[1]);case'EXISTR':return this.EXISTR(args[0],args[1],args[2]);case'FILTER':return this.FILTER(args[0],args[1]);case'TFILTER':return this.TFILTER(args[0],args[1],args[2]);case'SLOPE':return this.SLOPE(args[0],args[1]);case'BARSLAST':return this.BARSLAST(args[0]);case'BARSCOUNT':return this.BARSCOUNT(args[0]);case'BARSSINCEN':return this.BARSSINCEN(args[0],args[1]);case'BARSSINCE':return this.BARSSINCE(args[0]);case'LAST':return this.LAST(args[0],args[1],args[2]);case'EVERY':return this.EVERY(args[0],args[1]);case'DEVSQ':return this.DEVSQ(args[0],args[1]);case'ZIG':return this.ZIG(args[0],args[1]);case'TROUGHBARS':return this.TROUGHBARS(args[0],args[1],args[2]);case"TROUGH":return this.TROUGH(args[0],args[1],args[2]);case'PEAKBARS':return this.PEAKBARS(args[0],args[1],args[2]);case'PEAK':return this.PEAK(args[0],args[1],args[2]);case'COST':return this.COST(args[0]);case'WINNER':return this.WINNER(args[0],node);case'PPART':return this.PPART(args[0],node);case"COSTEX":return this.COSTEX(args[0],args[1],node);case"LWINNER":return this.LWINNER(args[0],args[1],node);case"PWINNER":return this.PWINNER(args[0],args[1],node);case'FORCAST':return this.FORCAST(args[0],args[1]);case"TSMA":return this.TSMA(args[0],args[1]);case'STDP':return this.STDP(args[0],args[1]);case'VAR':return this.VAR(args[0],args[1]);case'VARP':return this.VARP(args[0],args[1]);case'UPNDAY':return this.UPNDAY(args[0],args[1]);case'DOWNNDAY':return this.DOWNNDAY(args[0],args[1]);case'NDAY':return this.NDAY(args[0],args[1],args[2]);case'RELATE':return this.RELATE(args[0],args[1],args[2]);case'COVAR':return this.COVAR(args[0],args[1],args[2]);case'BETA':return this.BETA(args[0]);case'BETA2':return this.BETA2(args[0],args[1],args[2]);case'WMA':return this.WMA(args[0],args[1]);case'MEMA':return this.MEMA(args[0],args[1]);case'SUMBARS':return this.SUMBARS(args[0],args[1]);case'REVERSE':return this.REVERSE(args[0]);case'SAR':return this.SAR(args[0],args[1],args[2]);case'SARTURN':return this.SARTURN(args[0],args[1],args[2]);case'BACKSET':return this.BACKSET(args[0],args[1]);case'BETWEEN':return this.BETWEEN(args[0],args[1],args[2]);case'STRCAT':return this.STRCAT(args[0],args[1]);case'CON2STR':return this.CON2STR(args[0],args[1]);case"VAR2STR":return this.VAR2STR(args[0],args[1]);case"VARCAT":return this.VARCAT(args[0],args[1]);case"STRSPACE":return this.STRSPACE(args[0]);case"FINDSTR":return this.FINDSTR(args[0],args[1]);case"STRCMP":return this.STRCMP(args[0],args[1]);case"STRLEN":return this.STRLEN(args[0]);case"STRFORMAT":return this.STRFORMAT(args[0],args,node);case'DTPRICE':return this.DTPRICE(args[0],args[1]);case'ZTPRICE':return this.ZTPRICE(args[0],args[1]);case'MOD':return this.MOD(args[0],args[1]);case'POW':return this.POW(args[0],args[1]);case'CEILING':return this.CEILING(args[0]);case'FLOOR':return this.FLOOR(args[0]);case'FRACPART':return this.FRACPART(args[0]);case"SIGN":return this.SIGN(args[0]);case'BARSLASTCOUNT':return this.BARSLASTCOUNT(args[0]);case'INTPART':return this.INTPART(args[0]);case"CONST":return this.CONST(args[0]);case"TOPRANGE":return this.TOPRANGE(args[0]);case"LOWRANGE":return this.LOWRANGE(args[0]);case"FINDLOW":return this.FINDLOW(args[0],args[1],args[2],args[3]);case"FINDLOWBARS":return this.FINDLOWBARS(args[0],args[1],args[2],args[3]);case"FINDHIGH":return this.FINDHIGH(args[0],args[1],args[2],args[3]);case"FINDHIGHBARS":return this.FINDHIGHBARS(args[0],args[1],args[2],args[3]);case"BARSNEXT":return this.BARSNEXT(args[0]);case"HOD":return this.HOD(args[0],args[1]);case"LOD":return this.LOD(args[0],args[1]);case"AMA":return this.AMA(args[0],args[1]);case"TMA":return this.TMA(args[0],args[1],args[2]);case"ROUND":return this.ROUND(args[0]);case"ROUND2":return this.ROUND2(args[0],args[1]);case"TRMA":return this.TRMA(args[0],args[1]);case"VALUEWHEN":return this.VALUEWHEN(args[0],args[1]);case"HARMEAN":return this.HARMEAN(args[0],args[1]);case"DATETODAY":return this.DATETODAY(args[0]);case"DAYTODATE":return this.DAYTODATE(args[0]);case"TIMETOSEC":return this.TIMETOSEC(args[0]);case"SECTOTIME":return this.SECTOTIME(args[0]);case"ANY":return this.ANY(args[0],args[1]);case"ALL":return this.ALL(args[0],args[1]);case"TESTSKIP":return this.TESTSKIP(args[0],node);case"SUMBARS":return this.SUMBARS(args[0],args[1]);case"ALIGNRIGHT":return this.ALIGNRIGHT(args[0]);//三角函数
10360
10360
  case'ATAN':return this.Trigonometric(args[0],Math.atan);case'ACOS':return this.ACOS(args[0]);case'ASIN':return this.ASIN(args[0]);case'COS':return this.Trigonometric(args[0],Math.cos);case'SIN':return this.Trigonometric(args[0],Math.sin);case'TAN':return this.Trigonometric(args[0],Math.tan);case'LN':return this.Trigonometric(args[0],Math.log);case'LOG':return this.Trigonometric(args[0],_log2.default);case'EXP':return this.Trigonometric(args[0],Math.exp);case'SQRT':return this.Trigonometric(args[0],Math.sqrt);case"RAND":return this.RAND(args[0]);default:this.ThrowUnexpectedNode(node,'函数'+name+'不存在',name);}};//调用自定义函数 返回数据格式{Out:输出数据, Draw:绘图数据(可选)}
@@ -12734,7 +12734,7 @@ hisData.Symbol=message.symbol;}var stockObj={HQDataType:HQ_DATA_TYPE.KLINE_ID,St
12734
12734
  this.ExecuteScript(item,data);}this.Status=0;}};this.OnExecuteFinish=function(data,indexInfo,jsExectute,jobInfo){var message={Data:data,IndexInfo:indexInfo,ID:JSCHART_WORKER_MESSAGE_ID.FINISH_EXECUTE_SCRIPT,JobInfo:jobInfo};postMessage(message);};this.OnExecuteError=function(error,indexInfo,jobData){var message={IndexInfo:indexInfo,ID:JSCHART_WORKER_MESSAGE_ID.ERROR_EXECUTE_SCRIPT,Error:error};postMessage(message);};}/********************************************************************************
12735
12735
  * 版本信息输出
12736
12736
  *
12737
- */var HQCHART_VERSION="1.1.12621";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();//把给外界调用的方法暴露出来
12737
+ */var HQCHART_VERSION="1.1.12627";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();//把给外界调用的方法暴露出来
12738
12738
  exports.default=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
12739
12739
  // BaseIndex:BaseIndex,
12740
12740
  // ChartLine:ChartLine,
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.12622",
5
+ "version": "1.1.12627",
6
6
  "main": "lib/main.js",
7
7
  "private": false,
8
8
  "license": "Apache License 2.0",
@@ -8611,10 +8611,10 @@ function JSAlgorithm(errorHandler,symbolData)
8611
8611
  }
8612
8612
 
8613
8613
 
8614
- //格式化字符串 "{0}-{1}", C, O;
8614
+ //格式化字符串 "{0}-{1}", C, O; 小数位数 {0:0.00}
8615
8615
  this.STRFORMAT=function(strFormat,args,node)
8616
8616
  {
8617
- var aryParam=strFormat.match(/{\d+}/g);
8617
+ var aryParam=strFormat.match(/{[0-9.:]+}/g);
8618
8618
 
8619
8619
  if (!IFrameSplitOperator.IsNonEmptyArray(aryParam)) return null;
8620
8620
 
@@ -8626,9 +8626,47 @@ function JSAlgorithm(errorHandler,symbolData)
8626
8626
  if (item.length<3) continue;
8627
8627
 
8628
8628
  var value=item.slice(1, item.length-1);
8629
- var index=parseInt(value);
8629
+ var index=-1,decimal=-1;
8630
+ if (value.indexOf(":")>0)
8631
+ {
8632
+ var aryTemp=value.split(":");
8633
+ if (aryTemp)
8634
+ {
8635
+ if (aryTemp[0])
8636
+ index=parseInt(aryTemp[0]);
8630
8637
 
8631
- var paramItem={ Src:item, Index:index, Text:null};
8638
+ if (aryTemp[1])
8639
+ {
8640
+ if (aryTemp[1].indexOf(".")>=0)
8641
+ {
8642
+ var zeroCount=0;
8643
+ var strTemp=aryTemp[1];
8644
+ for(var j=strTemp.length-1; j>=0; --j)
8645
+ {
8646
+ if (strTemp[j]=="0") ++zeroCount;
8647
+ else break;
8648
+ }
8649
+
8650
+ if (zeroCount>0) decimal=zeroCount;
8651
+ }
8652
+ else if (aryTemp[1]=="0")
8653
+ {
8654
+ decimal=0;
8655
+ }
8656
+ }
8657
+
8658
+ }
8659
+
8660
+ }
8661
+ else
8662
+ {
8663
+ index=parseInt(value);
8664
+ }
8665
+
8666
+ if (index<0) continue;
8667
+
8668
+ var paramItem={ Src:item, Index:index, Text:null, Decimal:null };
8669
+ if (decimal>=0) paramItem.Decimal=decimal;
8632
8670
 
8633
8671
  if (maxIndex<index) maxIndex=index;
8634
8672
 
@@ -8665,7 +8703,13 @@ function JSAlgorithm(errorHandler,symbolData)
8665
8703
  if (Array.isArray(paramItem))
8666
8704
  {
8667
8705
  var value=paramItem[i];
8668
- if (value) text=`${value}`;
8706
+ if (value)
8707
+ {
8708
+ if (IFrameSplitOperator.IsNumber(paramInfo.Decimal))
8709
+ text=`${value.toFixed(paramInfo.Decimal)}`;
8710
+ else
8711
+ text=`${value}`;
8712
+ }
8669
8713
  }
8670
8714
  else
8671
8715
  {
@@ -51289,7 +51289,7 @@ function IChartDrawPicture()
51289
51289
  //xStep,yStep 移动的偏移量
51290
51290
  this.Move=function(xStep,yStep)
51291
51291
  {
51292
- if (this.Status!=20) return fasle;
51292
+ if (this.Status!=20) return false;
51293
51293
  if (!this.Frame) return false;
51294
51294
  var data=this.Frame.Data;
51295
51295
  if (!data) return false;
@@ -54714,7 +54714,7 @@ function ChartDrawPictureParallelChannel()
54714
54714
  //xStep,yStep 移动的偏移量
54715
54715
  this.Move=function(xStep,yStep)
54716
54716
  {
54717
- if (this.Status!=20) return fasle;
54717
+ if (this.Status!=20) return false;
54718
54718
  if (!this.Frame) return false;
54719
54719
  var data=this.Frame.Data;
54720
54720
  if (!data) return false;
@@ -74153,34 +74153,55 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
74153
74153
  this.RequestData();
74154
74154
  }
74155
74155
 
74156
- //叠加股票
74156
+ //叠加股票 symbol支持数据 ["600000.sh", "0000001.sz"]
74157
74157
  this.OverlaySymbol=function(symbol,option)
74158
74158
  {
74159
- for(var i=0; i<this.OverlayChartPaint.length; ++i)
74159
+ var arySymbol=null;
74160
+ if (IFrameSplitOperator.IsString(symbol)) arySymbol=[symbol];
74161
+ else if (Array.isArray(symbol)) arySymbol=symbol;
74162
+ if (!IFrameSplitOperator.IsNonEmptyArray(arySymbol)) return false;
74163
+
74164
+ var aryNewSymbol=[];
74165
+ for(var i=0, j=0;i<arySymbol.length;++i)
74160
74166
  {
74161
- var item=this.OverlayChartPaint[i];
74162
- if (item.Symbol==symbol)
74167
+ var strSymbol=arySymbol[i];
74168
+ var bFind=false;
74169
+ for(j=0;j<this.OverlayChartPaint.length; ++j)
74163
74170
  {
74164
- console.warn(`[MinuteChartContainer::OverlaySymbol] overlay symbol=${symbol} exist.`);
74165
- return false;
74171
+ var item=this.OverlayChartPaint[j];
74172
+ if (item.Symbol==strSymbol)
74173
+ {
74174
+ bFind=true;
74175
+ console.warn(`[MinuteChartContainer::OverlaySymbol] overlay symbol=${strSymbol} exist.`);
74176
+ break;
74177
+ }
74166
74178
  }
74179
+
74180
+ if (!bFind) aryNewSymbol.push(strSymbol);
74167
74181
  }
74168
74182
 
74169
- var paint=new ChartOverlayMinutePriceLine();
74170
- paint.Canvas=this.Canvas;
74171
- paint.ChartBorder=this.Frame.SubFrame[0].Frame.ChartBorder;
74172
- paint.ChartFrame=this.Frame.SubFrame[0].Frame;
74173
- paint.Name="Overlay-Minute";
74174
- paint.Symbol=symbol;
74175
- paint.Identify=`Overlay-Minute-${symbol}`;
74176
- if (option && option.Color) paint.Color=option.Color; //外部设置颜色
74177
- else paint.Color=g_JSChartResource.OverlaySymbol.Color[g_JSChartResource.OverlaySymbol.Random%g_JSChartResource.OverlaySymbol.Color.length];
74178
- ++g_JSChartResource.OverlaySymbol.Random;
74179
- paint.MainData=this.SourceData; //绑定主图数据
74183
+ if (!IFrameSplitOperator.IsNonEmptyArray(arySymbol)) return true;
74180
74184
 
74181
- if (paint.SetOption) paint.SetOption(option);
74185
+ for(var i=0;i<aryNewSymbol.length;++i)
74186
+ {
74187
+ var strSymbol=aryNewSymbol[i];
74182
74188
 
74183
- this.OverlayChartPaint.push(paint);
74189
+ var paint=new ChartOverlayMinutePriceLine();
74190
+ paint.Canvas=this.Canvas;
74191
+ paint.ChartBorder=this.Frame.SubFrame[0].Frame.ChartBorder;
74192
+ paint.ChartFrame=this.Frame.SubFrame[0].Frame;
74193
+ paint.Name="Overlay-Minute";
74194
+ paint.Symbol=strSymbol;
74195
+ paint.Identify=`Overlay-Minute-${strSymbol}`;
74196
+ if (option && option.Color) paint.Color=option.Color; //外部设置颜色
74197
+ else paint.Color=g_JSChartResource.OverlaySymbol.Color[g_JSChartResource.OverlaySymbol.Random%g_JSChartResource.OverlaySymbol.Color.length];
74198
+ ++g_JSChartResource.OverlaySymbol.Random;
74199
+ paint.MainData=this.SourceData; //绑定主图数据
74200
+
74201
+ if (paint.SetOption) paint.SetOption(option);
74202
+
74203
+ this.OverlayChartPaint.push(paint);
74204
+ }
74184
74205
 
74185
74206
  if (this.DayCount<=1) this.RequestOverlayMinuteData(); //请求数据
74186
74207
  else this.RequestOverlayHistoryMinuteData();
@@ -55369,7 +55369,7 @@ function IChartDrawPicture()
55369
55369
  //xStep,yStep 移动的偏移量
55370
55370
  this.Move=function(xStep,yStep)
55371
55371
  {
55372
- if (this.Status!=20) return fasle;
55372
+ if (this.Status!=20) return false;
55373
55373
  if (!this.Frame) return false;
55374
55374
  var data=this.Frame.Data;
55375
55375
  if (!data) return false;
@@ -58794,7 +58794,7 @@ function ChartDrawPictureParallelChannel()
58794
58794
  //xStep,yStep 移动的偏移量
58795
58795
  this.Move=function(xStep,yStep)
58796
58796
  {
58797
- if (this.Status!=20) return fasle;
58797
+ if (this.Status!=20) return false;
58798
58798
  if (!this.Frame) return false;
58799
58799
  var data=this.Frame.Data;
58800
58800
  if (!data) return false;
@@ -78233,34 +78233,55 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
78233
78233
  this.RequestData();
78234
78234
  }
78235
78235
 
78236
- //叠加股票
78236
+ //叠加股票 symbol支持数据 ["600000.sh", "0000001.sz"]
78237
78237
  this.OverlaySymbol=function(symbol,option)
78238
78238
  {
78239
- for(var i=0; i<this.OverlayChartPaint.length; ++i)
78239
+ var arySymbol=null;
78240
+ if (IFrameSplitOperator.IsString(symbol)) arySymbol=[symbol];
78241
+ else if (Array.isArray(symbol)) arySymbol=symbol;
78242
+ if (!IFrameSplitOperator.IsNonEmptyArray(arySymbol)) return false;
78243
+
78244
+ var aryNewSymbol=[];
78245
+ for(var i=0, j=0;i<arySymbol.length;++i)
78240
78246
  {
78241
- var item=this.OverlayChartPaint[i];
78242
- if (item.Symbol==symbol)
78247
+ var strSymbol=arySymbol[i];
78248
+ var bFind=false;
78249
+ for(j=0;j<this.OverlayChartPaint.length; ++j)
78243
78250
  {
78244
- console.warn(`[MinuteChartContainer::OverlaySymbol] overlay symbol=${symbol} exist.`);
78245
- return false;
78251
+ var item=this.OverlayChartPaint[j];
78252
+ if (item.Symbol==strSymbol)
78253
+ {
78254
+ bFind=true;
78255
+ console.warn(`[MinuteChartContainer::OverlaySymbol] overlay symbol=${strSymbol} exist.`);
78256
+ break;
78257
+ }
78246
78258
  }
78259
+
78260
+ if (!bFind) aryNewSymbol.push(strSymbol);
78247
78261
  }
78248
78262
 
78249
- var paint=new ChartOverlayMinutePriceLine();
78250
- paint.Canvas=this.Canvas;
78251
- paint.ChartBorder=this.Frame.SubFrame[0].Frame.ChartBorder;
78252
- paint.ChartFrame=this.Frame.SubFrame[0].Frame;
78253
- paint.Name="Overlay-Minute";
78254
- paint.Symbol=symbol;
78255
- paint.Identify=`Overlay-Minute-${symbol}`;
78256
- if (option && option.Color) paint.Color=option.Color; //外部设置颜色
78257
- else paint.Color=g_JSChartResource.OverlaySymbol.Color[g_JSChartResource.OverlaySymbol.Random%g_JSChartResource.OverlaySymbol.Color.length];
78258
- ++g_JSChartResource.OverlaySymbol.Random;
78259
- paint.MainData=this.SourceData; //绑定主图数据
78263
+ if (!IFrameSplitOperator.IsNonEmptyArray(arySymbol)) return true;
78260
78264
 
78261
- if (paint.SetOption) paint.SetOption(option);
78265
+ for(var i=0;i<aryNewSymbol.length;++i)
78266
+ {
78267
+ var strSymbol=aryNewSymbol[i];
78262
78268
 
78263
- this.OverlayChartPaint.push(paint);
78269
+ var paint=new ChartOverlayMinutePriceLine();
78270
+ paint.Canvas=this.Canvas;
78271
+ paint.ChartBorder=this.Frame.SubFrame[0].Frame.ChartBorder;
78272
+ paint.ChartFrame=this.Frame.SubFrame[0].Frame;
78273
+ paint.Name="Overlay-Minute";
78274
+ paint.Symbol=strSymbol;
78275
+ paint.Identify=`Overlay-Minute-${strSymbol}`;
78276
+ if (option && option.Color) paint.Color=option.Color; //外部设置颜色
78277
+ else paint.Color=g_JSChartResource.OverlaySymbol.Color[g_JSChartResource.OverlaySymbol.Random%g_JSChartResource.OverlaySymbol.Color.length];
78278
+ ++g_JSChartResource.OverlaySymbol.Random;
78279
+ paint.MainData=this.SourceData; //绑定主图数据
78280
+
78281
+ if (paint.SetOption) paint.SetOption(option);
78282
+
78283
+ this.OverlayChartPaint.push(paint);
78284
+ }
78264
78285
 
78265
78286
  if (this.DayCount<=1) this.RequestOverlayMinuteData(); //请求数据
78266
78287
  else this.RequestOverlayHistoryMinuteData();
@@ -102543,10 +102564,10 @@ function JSAlgorithm(errorHandler,symbolData)
102543
102564
  }
102544
102565
 
102545
102566
 
102546
- //格式化字符串 "{0}-{1}", C, O;
102567
+ //格式化字符串 "{0}-{1}", C, O; 小数位数 {0:0.00}
102547
102568
  this.STRFORMAT=function(strFormat,args,node)
102548
102569
  {
102549
- var aryParam=strFormat.match(/{\d+}/g);
102570
+ var aryParam=strFormat.match(/{[0-9.:]+}/g);
102550
102571
 
102551
102572
  if (!IFrameSplitOperator.IsNonEmptyArray(aryParam)) return null;
102552
102573
 
@@ -102558,9 +102579,47 @@ function JSAlgorithm(errorHandler,symbolData)
102558
102579
  if (item.length<3) continue;
102559
102580
 
102560
102581
  var value=item.slice(1, item.length-1);
102561
- var index=parseInt(value);
102582
+ var index=-1,decimal=-1;
102583
+ if (value.indexOf(":")>0)
102584
+ {
102585
+ var aryTemp=value.split(":");
102586
+ if (aryTemp)
102587
+ {
102588
+ if (aryTemp[0])
102589
+ index=parseInt(aryTemp[0]);
102562
102590
 
102563
- var paramItem={ Src:item, Index:index, Text:null};
102591
+ if (aryTemp[1])
102592
+ {
102593
+ if (aryTemp[1].indexOf(".")>=0)
102594
+ {
102595
+ var zeroCount=0;
102596
+ var strTemp=aryTemp[1];
102597
+ for(var j=strTemp.length-1; j>=0; --j)
102598
+ {
102599
+ if (strTemp[j]=="0") ++zeroCount;
102600
+ else break;
102601
+ }
102602
+
102603
+ if (zeroCount>0) decimal=zeroCount;
102604
+ }
102605
+ else if (aryTemp[1]=="0")
102606
+ {
102607
+ decimal=0;
102608
+ }
102609
+ }
102610
+
102611
+ }
102612
+
102613
+ }
102614
+ else
102615
+ {
102616
+ index=parseInt(value);
102617
+ }
102618
+
102619
+ if (index<0) continue;
102620
+
102621
+ var paramItem={ Src:item, Index:index, Text:null, Decimal:null };
102622
+ if (decimal>=0) paramItem.Decimal=decimal;
102564
102623
 
102565
102624
  if (maxIndex<index) maxIndex=index;
102566
102625
 
@@ -102597,7 +102656,13 @@ function JSAlgorithm(errorHandler,symbolData)
102597
102656
  if (Array.isArray(paramItem))
102598
102657
  {
102599
102658
  var value=paramItem[i];
102600
- if (value) text=`${value}`;
102659
+ if (value)
102660
+ {
102661
+ if (IFrameSplitOperator.IsNumber(paramInfo.Decimal))
102662
+ text=`${value.toFixed(paramInfo.Decimal)}`;
102663
+ else
102664
+ text=`${value}`;
102665
+ }
102601
102666
  }
102602
102667
  else
102603
102668
  {
@@ -129881,7 +129946,7 @@ function ScrollBarBGChart()
129881
129946
 
129882
129947
 
129883
129948
 
129884
- var HQCHART_VERSION="1.1.12621";
129949
+ var HQCHART_VERSION="1.1.12627";
129885
129950
 
129886
129951
  function PrintHQChartVersion()
129887
129952
  {
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.12621";
8
+ var HQCHART_VERSION="1.1.12627";
9
9
 
10
10
  function PrintHQChartVersion()
11
11
  {
@@ -55413,7 +55413,7 @@ function IChartDrawPicture()
55413
55413
  //xStep,yStep 移动的偏移量
55414
55414
  this.Move=function(xStep,yStep)
55415
55415
  {
55416
- if (this.Status!=20) return fasle;
55416
+ if (this.Status!=20) return false;
55417
55417
  if (!this.Frame) return false;
55418
55418
  var data=this.Frame.Data;
55419
55419
  if (!data) return false;
@@ -58838,7 +58838,7 @@ function ChartDrawPictureParallelChannel()
58838
58838
  //xStep,yStep 移动的偏移量
58839
58839
  this.Move=function(xStep,yStep)
58840
58840
  {
58841
- if (this.Status!=20) return fasle;
58841
+ if (this.Status!=20) return false;
58842
58842
  if (!this.Frame) return false;
58843
58843
  var data=this.Frame.Data;
58844
58844
  if (!data) return false;
@@ -78277,34 +78277,55 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
78277
78277
  this.RequestData();
78278
78278
  }
78279
78279
 
78280
- //叠加股票
78280
+ //叠加股票 symbol支持数据 ["600000.sh", "0000001.sz"]
78281
78281
  this.OverlaySymbol=function(symbol,option)
78282
78282
  {
78283
- for(var i=0; i<this.OverlayChartPaint.length; ++i)
78283
+ var arySymbol=null;
78284
+ if (IFrameSplitOperator.IsString(symbol)) arySymbol=[symbol];
78285
+ else if (Array.isArray(symbol)) arySymbol=symbol;
78286
+ if (!IFrameSplitOperator.IsNonEmptyArray(arySymbol)) return false;
78287
+
78288
+ var aryNewSymbol=[];
78289
+ for(var i=0, j=0;i<arySymbol.length;++i)
78284
78290
  {
78285
- var item=this.OverlayChartPaint[i];
78286
- if (item.Symbol==symbol)
78291
+ var strSymbol=arySymbol[i];
78292
+ var bFind=false;
78293
+ for(j=0;j<this.OverlayChartPaint.length; ++j)
78287
78294
  {
78288
- console.warn(`[MinuteChartContainer::OverlaySymbol] overlay symbol=${symbol} exist.`);
78289
- return false;
78295
+ var item=this.OverlayChartPaint[j];
78296
+ if (item.Symbol==strSymbol)
78297
+ {
78298
+ bFind=true;
78299
+ console.warn(`[MinuteChartContainer::OverlaySymbol] overlay symbol=${strSymbol} exist.`);
78300
+ break;
78301
+ }
78290
78302
  }
78303
+
78304
+ if (!bFind) aryNewSymbol.push(strSymbol);
78291
78305
  }
78292
78306
 
78293
- var paint=new ChartOverlayMinutePriceLine();
78294
- paint.Canvas=this.Canvas;
78295
- paint.ChartBorder=this.Frame.SubFrame[0].Frame.ChartBorder;
78296
- paint.ChartFrame=this.Frame.SubFrame[0].Frame;
78297
- paint.Name="Overlay-Minute";
78298
- paint.Symbol=symbol;
78299
- paint.Identify=`Overlay-Minute-${symbol}`;
78300
- if (option && option.Color) paint.Color=option.Color; //外部设置颜色
78301
- else paint.Color=g_JSChartResource.OverlaySymbol.Color[g_JSChartResource.OverlaySymbol.Random%g_JSChartResource.OverlaySymbol.Color.length];
78302
- ++g_JSChartResource.OverlaySymbol.Random;
78303
- paint.MainData=this.SourceData; //绑定主图数据
78307
+ if (!IFrameSplitOperator.IsNonEmptyArray(arySymbol)) return true;
78304
78308
 
78305
- if (paint.SetOption) paint.SetOption(option);
78309
+ for(var i=0;i<aryNewSymbol.length;++i)
78310
+ {
78311
+ var strSymbol=aryNewSymbol[i];
78306
78312
 
78307
- this.OverlayChartPaint.push(paint);
78313
+ var paint=new ChartOverlayMinutePriceLine();
78314
+ paint.Canvas=this.Canvas;
78315
+ paint.ChartBorder=this.Frame.SubFrame[0].Frame.ChartBorder;
78316
+ paint.ChartFrame=this.Frame.SubFrame[0].Frame;
78317
+ paint.Name="Overlay-Minute";
78318
+ paint.Symbol=strSymbol;
78319
+ paint.Identify=`Overlay-Minute-${strSymbol}`;
78320
+ if (option && option.Color) paint.Color=option.Color; //外部设置颜色
78321
+ else paint.Color=g_JSChartResource.OverlaySymbol.Color[g_JSChartResource.OverlaySymbol.Random%g_JSChartResource.OverlaySymbol.Color.length];
78322
+ ++g_JSChartResource.OverlaySymbol.Random;
78323
+ paint.MainData=this.SourceData; //绑定主图数据
78324
+
78325
+ if (paint.SetOption) paint.SetOption(option);
78326
+
78327
+ this.OverlayChartPaint.push(paint);
78328
+ }
78308
78329
 
78309
78330
  if (this.DayCount<=1) this.RequestOverlayMinuteData(); //请求数据
78310
78331
  else this.RequestOverlayHistoryMinuteData();
@@ -102587,10 +102608,10 @@ function JSAlgorithm(errorHandler,symbolData)
102587
102608
  }
102588
102609
 
102589
102610
 
102590
- //格式化字符串 "{0}-{1}", C, O;
102611
+ //格式化字符串 "{0}-{1}", C, O; 小数位数 {0:0.00}
102591
102612
  this.STRFORMAT=function(strFormat,args,node)
102592
102613
  {
102593
- var aryParam=strFormat.match(/{\d+}/g);
102614
+ var aryParam=strFormat.match(/{[0-9.:]+}/g);
102594
102615
 
102595
102616
  if (!IFrameSplitOperator.IsNonEmptyArray(aryParam)) return null;
102596
102617
 
@@ -102602,9 +102623,47 @@ function JSAlgorithm(errorHandler,symbolData)
102602
102623
  if (item.length<3) continue;
102603
102624
 
102604
102625
  var value=item.slice(1, item.length-1);
102605
- var index=parseInt(value);
102626
+ var index=-1,decimal=-1;
102627
+ if (value.indexOf(":")>0)
102628
+ {
102629
+ var aryTemp=value.split(":");
102630
+ if (aryTemp)
102631
+ {
102632
+ if (aryTemp[0])
102633
+ index=parseInt(aryTemp[0]);
102606
102634
 
102607
- var paramItem={ Src:item, Index:index, Text:null};
102635
+ if (aryTemp[1])
102636
+ {
102637
+ if (aryTemp[1].indexOf(".")>=0)
102638
+ {
102639
+ var zeroCount=0;
102640
+ var strTemp=aryTemp[1];
102641
+ for(var j=strTemp.length-1; j>=0; --j)
102642
+ {
102643
+ if (strTemp[j]=="0") ++zeroCount;
102644
+ else break;
102645
+ }
102646
+
102647
+ if (zeroCount>0) decimal=zeroCount;
102648
+ }
102649
+ else if (aryTemp[1]=="0")
102650
+ {
102651
+ decimal=0;
102652
+ }
102653
+ }
102654
+
102655
+ }
102656
+
102657
+ }
102658
+ else
102659
+ {
102660
+ index=parseInt(value);
102661
+ }
102662
+
102663
+ if (index<0) continue;
102664
+
102665
+ var paramItem={ Src:item, Index:index, Text:null, Decimal:null };
102666
+ if (decimal>=0) paramItem.Decimal=decimal;
102608
102667
 
102609
102668
  if (maxIndex<index) maxIndex=index;
102610
102669
 
@@ -102641,7 +102700,13 @@ function JSAlgorithm(errorHandler,symbolData)
102641
102700
  if (Array.isArray(paramItem))
102642
102701
  {
102643
102702
  var value=paramItem[i];
102644
- if (value) text=`${value}`;
102703
+ if (value)
102704
+ {
102705
+ if (IFrameSplitOperator.IsNumber(paramInfo.Decimal))
102706
+ text=`${value.toFixed(paramInfo.Decimal)}`;
102707
+ else
102708
+ text=`${value}`;
102709
+ }
102645
102710
  }
102646
102711
  else
102647
102712
  {
@@ -130039,7 +130104,7 @@ function HQChartScriptWorker()
130039
130104
 
130040
130105
 
130041
130106
 
130042
- var HQCHART_VERSION="1.1.12621";
130107
+ var HQCHART_VERSION="1.1.12627";
130043
130108
 
130044
130109
  function PrintHQChartVersion()
130045
130110
  {