hqchart 1.1.12674 → 1.1.12678

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.
@@ -1972,7 +1972,15 @@ this.Tooltip.style.position="absolute";this.Tooltip.style.left=left+"px";this.To
1972
1972
  {var left=x;var top=y;var format=g_DivTooltipDataForamt.Create('ScatterPlotDataStringFormat');format.Value=toolTip;format.Symbol=this.Symbol;format.Period=this.Period;format.LanguageID=this.LanguageID;if(!format.Operator())return;var width=format.Width;this.Tooltip.className='jchart-charscatterplot-tooltip';//OX指标数据
1973
1973
  this.Tooltip.style.position="absolute";this.Tooltip.style.left=left+"px";this.Tooltip.style.top=top+xMove+"px";this.Tooltip.style.width=width+"px";this.Tooltip.style.height=null;this.Tooltip.innerHTML=format.Text;;this.Tooltip.style.display="block";}else if(toolTip.Type==7)//ChartDrawSVG
1974
1974
  {var left=x;var top=y;var format=g_DivTooltipDataForamt.Create('ChartDrawSVGDataStringFormat');format.Value=toolTip;format.Symbol=this.Symbol;format.Period=this.Period;format.LanguageID=this.LanguageID;if(!format.Operator())return;var width=format.Width;this.Tooltip.className='jchart-chartdrawsvg-tooltip';//ChartDrawSVG指标数据
1975
- this.Tooltip.style.position="absolute";this.Tooltip.style.left=left+"px";this.Tooltip.style.top=top+xMove+"px";this.Tooltip.style.width=width+"px";this.Tooltip.style.height=null;this.Tooltip.innerHTML=format.Text;;this.Tooltip.style.display="block";}};this.HideTooltip=function(){if(this.Tooltip.style.display!="none")this.Tooltip.style.display="none";};this.ShowSelectRect=function(x,y,x2,y2){var left=x;var top=y;var border=this.Frame.ChartBorder.GetBorder();var borderRight=border.Right;var borderLeft=border.Left;if(x>borderRight)x=borderRight;if(x2>borderRight)x2=borderRight;if(x<borderLeft)x=borderLeft;if(x2<borderLeft)x2=borderLeft;if(x>x2)left=x2;if(y>y2)top=y2;var width=Math.abs(x-x2);var height=Math.abs(y-y2);this.SelectRect.style.width=width+"px";this.SelectRect.style.height=height+"px";this.SelectRect.style.position="absolute";this.SelectRect.style.left=left+"px";this.SelectRect.style.top=top+"px";this.SelectRect.style.display="block";};this.UpdateSelectRect=function(start,end){if(!this.ChartPaint[0].Data)return;var paint=this.GetRectSelectPaint();if(!paint)return;var data=this.ChartPaint[0].Data;var startItem=data.Data[start];var endItem=data.Data[end];JSConsole.Chart.Log('[JSChartContainer::UpdateSelectRect]',startItem,endItem);paint.SetPoint(startItem,{Index:0,DataIndex:start});paint.SetPoint(endItem,{Index:1,DataIndex:end});this.Draw();};this.HideSelectRect=function(){this.SelectRect.style.display="none";};this.ResetFrameXYSplit=function(){if(typeof this.Frame.ResetXYSplit=='function')this.Frame.ResetXYSplit();};this.UpdateFrameMaxMin=function(){var frameMaxMinData=new Array();var chartPaint=new Array();for(var i=0;i<this.ChartPaint.length;++i){var item=this.ChartPaint[i];if(item.IsShow==false)continue;//隐藏的图形不计算
1975
+ this.Tooltip.style.position="absolute";this.Tooltip.style.left=left+"px";this.Tooltip.style.top=top+xMove+"px";this.Tooltip.style.width=width+"px";this.Tooltip.style.height=null;this.Tooltip.innerHTML=format.Text;;this.Tooltip.style.display="block";}};this.HideTooltip=function(){if(this.Tooltip.style.display!="none")this.Tooltip.style.display="none";};this.ShowSelectRect=function(x,y,x2,y2){var left=x;var top=y;var border=this.Frame.ChartBorder.GetBorder();var borderRight=border.Right;var borderLeft=border.Left;if(x>borderRight)x=borderRight;if(x2>borderRight)x2=borderRight;if(x<borderLeft)x=borderLeft;if(x2<borderLeft)x2=borderLeft;if(x>x2)left=x2;if(y>y2)top=y2;var width=Math.abs(x-x2);var height=Math.abs(y-y2);this.SelectRect.style.width=width+"px";this.SelectRect.style.height=height+"px";this.SelectRect.style.position="absolute";this.SelectRect.style.left=left+"px";this.SelectRect.style.top=top+"px";this.SelectRect.style.display="block";};this.UpdateSelectRect=function(start,end){if(!this.ChartPaint[0].Data)return;var paint=this.GetRectSelectPaint();if(!paint)return;var data=this.ChartPaint[0].Data;var startItem=data.Data[start];var endItem=data.Data[end];JSConsole.Chart.Log('[JSChartContainer::UpdateSelectRect]',startItem,endItem);paint.SetPoint(startItem,{Index:0,DataIndex:start});paint.SetPoint(endItem,{Index:1,DataIndex:end});this.Draw();};this.HideSelectRect=function(){this.SelectRect.style.display="none";};this.ResetFrameXYSplit=function(){if(typeof this.Frame.ResetXYSplit=='function')this.Frame.ResetXYSplit();};this.UpdateFrameMaxMinV2=function(){var mapFrame=new _map2.default();//key=frameid, value:{ ChartPaint:[] }
1976
+ for(var i=0;i<this.Frame.SubFrame.length;++i){var subItem=this.Frame.SubFrame[i];if(!subItem||!subItem.Frame)continue;var frame=subItem.Frame;var key=frame.Identify;var item={ID:key,Frame:frame,ChartPaint:[],Max:null,Min:null,OverlayFrame:[],//共享坐标
1977
+ SingleOverlay:[]//独立坐标
1978
+ };for(var j=0;j<subItem.OverlayIndex.length;++j){var overlayItem=subItem.OverlayIndex[j];var overlayFrame=overlayItem.Frame;if(overlayFrame.IsShareY){if(!overlayFrame.MainFrame)continue;if(overlayFrame.IsCalculateYMaxMin===false)continue;//叠加坐标Y轴不调整
1979
+ item.OverlayFrame.push(overlayFrame);for(var k=0;k<overlayItem.ChartPaint.length;++k){var chart=overlayItem.ChartPaint[k];item.ChartPaint.push(chart);}}else{item.SingleOverlay.push(overlayItem);}}mapFrame.set(key,item);}for(var i=0;i<this.ChartPaint.length;++i){var chart=this.ChartPaint[i];var key=chart.ChartFrame.Identify;if(!mapFrame.has(key))continue;var finder=mapFrame.get(key);finder.ChartPaint.push(chart);}for(var i=0;i<this.OverlayChartPaint.length;++i){var chart=this.OverlayChartPaint[i];if(!chart.ChartFrame)continue;var key=chart.ChartFrame.Identify;if(!mapFrame.has(key))continue;var finder=mapFrame.get(key);finder.ChartPaint.push(chart);}var _iteratorNormalCompletion3=true;var _didIteratorError3=false;var _iteratorError3=undefined;try{for(var _iterator3=(0,_getIterator3.default)(mapFrame),_step3;!(_iteratorNormalCompletion3=(_step3=_iterator3.next()).done);_iteratorNormalCompletion3=true){var mapItem=_step3.value;var item=mapItem[1];var frame=item.Frame;//计算主框架最大最小
1980
+ for(var i=0;i<item.ChartPaint.length;++i){var chart=item.ChartPaint[i];if(chart.IsShow==false)continue;//隐藏的图形不计算
1981
+ if(chart.NotSupportMessage)continue;if(!chart.ChartFrame)continue;var range=chart.GetMaxMin();if(range==null||range.Max==null||range.Min==null)continue;if(item.Max==null||item.Max<range.Max)item.Max=range.Max;if(item.Min==null||item.Min>range.Min)item.Min=range.Min;}if(item.Frame.YSpecificMaxMin)//固定坐标
1982
+ {item.Min=item.Frame.YSpecificMaxMin.Max;item.Max=item.Frame.YSpecificMaxMin.Min;}if(!IFrameSplitOperator.IsNumber(frame.YMaxMin.Max)||frame.YMaxMin.Max!=item.Max){frame.YMaxMin.Max=item.Max;frame.XYSplit=true;}if(!IFrameSplitOperator.IsNumber(frame.YMaxMin.Min)||frame.YMaxMin.Min!=item.Min){frame.YMaxMin.Min=item.Min;frame.XYSplit=true;}if(frame.XYSplit){var max=10,min=0;if(item.Max!=null)max=item.Max;if(item.Min!=null)min=item.Min;frame.HorizontalMax=max;frame.HorizontalMin=min;for(var j=0;j<item.OverlayFrame.length;++j){item.OverlayFrame[j].XYSplit=true;}}//独立坐标叠加指标
1983
+ for(var i=0;i<item.SingleOverlay.length;++i){var overlayItem=item.SingleOverlay[i];overlayItem.UpdateFrameMaxMin();}}}catch(err){_didIteratorError3=true;_iteratorError3=err;}finally{try{if(!_iteratorNormalCompletion3&&_iterator3.return){_iterator3.return();}}finally{if(_didIteratorError3){throw _iteratorError3;}}}};this.UpdateFrameMaxMin=function(){this.UpdateFrameMaxMinV2();return;var frameMaxMinData=new Array();var chartPaint=new Array();for(var i=0;i<this.ChartPaint.length;++i){var item=this.ChartPaint[i];if(item.IsShow==false)continue;//隐藏的图形不计算
1976
1984
  chartPaint.push(this.ChartPaint[i]);}for(var i=0;i<this.OverlayChartPaint.length;++i){chartPaint.push(this.OverlayChartPaint[i]);}var aryNotSupport=[];for(var i=0;i<chartPaint.length;++i){var paint=chartPaint[i];if(paint.NotSupportMessage){aryNotSupport.push(paint);continue;}var range=paint.GetMaxMin();if(range==null||range.Max==null||range.Min==null)continue;var frameItem=null;for(var j=0;j<frameMaxMinData.length;++j){if(frameMaxMinData[j].Frame==paint.ChartFrame){frameItem=frameMaxMinData[j];break;}}if(frameItem){if(frameItem.Range.Max<range.Max)frameItem.Range.Max=range.Max;if(frameItem.Range.Min>range.Min)frameItem.Range.Min=range.Min;}else{frameItem={OverlayFrame:[]};frameItem.Frame=paint.ChartFrame;frameItem.Range=range;frameMaxMinData.push(frameItem);}}//当前计算
1977
1985
  for(var i=0;i<aryNotSupport.length;++i){var paint=aryNotSupport[i];var range={Max:10,Min:1};var frameItem=null;for(var j=0;j<frameMaxMinData.length;++j){if(frameMaxMinData[j].Frame==paint.ChartFrame){frameItem=frameMaxMinData[j];break;}}if(frameItem)continue;frameItem={OverlayFrame:[]};frameItem.Frame=paint.ChartFrame;frameItem.Range=range;frameMaxMinData.push(frameItem);}var mapFrame=new _map2.default();for(var i=0;i<frameMaxMinData.length;++i){var item=frameMaxMinData[i];mapFrame.set(item.Frame.Identify,item);}//叠加坐标Y轴使用主图指标, 最大最小值
1978
1986
  for(var i=0;i<this.Frame.SubFrame.length;++i){var subFrame=this.Frame.SubFrame[i];for(var j=0;j<subFrame.OverlayIndex.length;++j){var overlayItem=subFrame.OverlayIndex[j];var overlayFrame=overlayItem.Frame;if(overlayFrame.IsShareY!=true)continue;if(!overlayFrame.MainFrame)continue;if(!mapFrame.has(overlayFrame.MainFrame.Identify))continue;var frameItem=mapFrame.get(overlayFrame.MainFrame.Identify);if(!frameItem)continue;frameItem.OverlayFrame.push(overlayFrame);if(overlayFrame.IsCalculateYMaxMin===false)continue;//叠加坐标Y轴不调整
@@ -2183,7 +2191,8 @@ this.XYSplit=true;//XY轴坐标信息改变
2183
2191
  this.HorizontalMax;//Y轴最大值
2184
2192
  this.HorizontalMin;//Y轴最小值
2185
2193
  this.XPointCount=10;//X轴数据个数
2186
- this.YSplitOperator;//Y轴分割
2194
+ //Y轴原始的最大值 最小值
2195
+ this.YMaxMin={Max:null,Min:null};this.YSplitOperator;//Y轴分割
2187
2196
  this.XSplitOperator;//X轴分割
2188
2197
  this.Data;//主数据
2189
2198
  this.IsLocked=false;//是否上锁
@@ -3588,9 +3597,9 @@ this.DrawHeatMap();if(!this.IsShow)return;if(this.ChartFrame.IsMinSize&&this.Nam
3588
3597
  {if(ptMax.X==null||ptMax.Y==null||ptMax.Value==null)return;if(ptMin.X==null||ptMin.Y==null||ptMin.Value==null)return;var leftArrow=g_JSChartResource.KLine.MaxMin.LeftArrow;var rightArrow=g_JSChartResource.KLine.MaxMin.RightArrow;var highYOffset=g_JSChartResource.KLine.MaxMin.HighYOffset;var lowYOffset=g_JSChartResource.KLine.MaxMin.LowYOffset;var defaultfloatPrecision=GetfloatPrecision(this.Symbol);var xText=ptMax.Y;var yText=ptMax.X;if(IFrameSplitOperator.IsNumber(highYOffset))xText+=highYOffset;this.Canvas.save();this.Canvas.translate(xText,yText);this.Canvas.rotate(90*Math.PI/180);this.Canvas.font=this.TextFont;this.Canvas.fillStyle=this.TextColor;this.Canvas.textAlign=ptMax.Align;this.Canvas.textBaseline='bottom';var text=ptMax.Value.toFixed(defaultfloatPrecision);if(ptMax.Align=='left')text=leftArrow+text;else text=text+rightArrow;this.Canvas.fillText(text,0,0);this.Canvas.restore();var xText=ptMin.Y;var yText=ptMin.X;if(IFrameSplitOperator.IsNumber(lowYOffset))xText+=lowYOffset;this.Canvas.save();this.Canvas.translate(xText,yText);this.Canvas.rotate(90*Math.PI/180);this.Canvas.font=this.TextFont;this.Canvas.fillStyle=this.TextColor;this.Canvas.textAlign=ptMin.Align;this.Canvas.textBaseline='top';var text=ptMin.Value.toFixed(defaultfloatPrecision);if(ptMin.Align=='left')text=leftArrow+text;else text=text+rightArrow;this.Canvas.fillText(text,0,0);this.Canvas.restore();};//画某一天的信息地雷
3589
3598
  this.DrawInfo=function(item){if(!this.InfoData||this.InfoData.size<=0)return;var isHScreen=this.ChartFrame.IsHScreen===true;var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var bottom=this.ChartBorder.GetBottom();var top=this.ChartBorder.GetTop();var key=''+item.DayData.Date;if(this.Data.DataType==1)key=item.DayData.Date+'-'+item.DayData.Time;if(!this.InfoData.has(key))return;var infoData=this.InfoData.get(key);if(!infoData||infoData.Data.length<=0)return;this.Canvas.restore();this.Canvas.save();this.ClipWindow(isHScreen);var pixelTatio=GetDevicePixelRatio();//获取设备的分辨率
3590
3599
  var iconSize=dataWidth+distanceWidth;var minIconSize=18*pixelTatio;var bShowNum=true;if(iconSize<=15)bShowNum=false;if(iconSize<minIconSize)iconSize=minIconSize;var text='',title='';var mapImage=new _map2.default();var iconTop=item.YMax+1*pixelTatio;var iconBottom=item.YMin+1*pixelTatio+iconSize;var drawTop=true;var yOffset=0;for(var i in infoData.Data){var infoItem=infoData.Data[i];var imageInfo=mapImage.get(infoItem.InfoType);if(!imageInfo){var icon=JSKLineInfoMap.GetIconFont(infoItem.InfoType);this.Canvas.fillStyle=icon.Color;this.Canvas.font=iconSize+'px '+icon.Family;if(isHScreen){this.Canvas.textBaseline="middle";this.Canvas.textAlign="left";this.Canvas.fillText(icon.HScreenText,iconTop,item.XCenter,iconSize);var iconRect=new Rect(item.XCenter-iconSize/2,iconTop-iconSize,iconSize,iconSize);var infoCache={Data:new Array(infoItem),Rect:iconRect,Type:infoItem.InfoType,TextRect:{X:iconTop,Y:item.XCenter}};mapImage.set(infoItem.InfoType,infoCache);iconTop+=iconSize;}else{this.Canvas.textBaseline="bottom";this.Canvas.textAlign="center";if(this.InfoPosition===1){var yBottom=bottom+yOffset;this.Canvas.fillText(icon.Text,item.XCenter,yBottom,iconSize);var iconRect=new Rect(item.XCenter-iconSize/2,yBottom-iconSize,iconSize,iconSize);var infoCache={Data:new Array(infoItem),Rect:iconRect,Type:infoItem.InfoType,TextRect:{X:item.XCenter,Y:yBottom}};mapImage.set(infoItem.InfoType,infoCache);yOffset-=iconSize;}else{if(drawTop){this.Canvas.fillText(icon.Text,item.XCenter,iconTop,iconSize);var iconRect=new Rect(item.XCenter-iconSize/2,iconTop-iconSize,iconSize,iconSize);var infoCache={Data:new Array(infoItem),Rect:iconRect,Type:infoItem.InfoType,TextRect:{X:item.XCenter,Y:iconTop}};mapImage.set(infoItem.InfoType,infoCache);iconTop-=iconSize;if(iconTop-iconSize<top)drawTop=false;}else//上面显示不下,就显示在下面
3591
- {this.Canvas.fillText(icon.Text,item.XCenter,iconBottom,iconSize);var iconRect=new Rect(item.XCenter-iconSize/2,iconBottom-iconSize,iconSize,iconSize);var infoCache={Data:new Array(infoItem),Rect:iconRect,Type:infoItem.InfoType,TextRect:{X:item.XCenter,Y:iconBottom}};mapImage.set(infoItem.InfoType,infoCache);iconBottom+=iconSize;}}}}else{imageInfo.Data.push(infoItem);}}var numText;if(g_JSChartResource.KLine.NumIcon){if(isHScreen)numText=g_JSChartResource.KLine.NumIcon.HScreenText;else numText=g_JSChartResource.KLine.NumIcon.Text;}var _iteratorNormalCompletion3=true;var _didIteratorError3=false;var _iteratorError3=undefined;try{for(var _iterator3=(0,_getIterator3.default)(mapImage),_step3;!(_iteratorNormalCompletion3=(_step3=_iterator3.next()).done);_iteratorNormalCompletion3=true){var item=_step3.value;var value=item[1];if(value.Data.length>=2&&numText&&bShowNum)//太小了 就不显示了
3600
+ {this.Canvas.fillText(icon.Text,item.XCenter,iconBottom,iconSize);var iconRect=new Rect(item.XCenter-iconSize/2,iconBottom-iconSize,iconSize,iconSize);var infoCache={Data:new Array(infoItem),Rect:iconRect,Type:infoItem.InfoType,TextRect:{X:item.XCenter,Y:iconBottom}};mapImage.set(infoItem.InfoType,infoCache);iconBottom+=iconSize;}}}}else{imageInfo.Data.push(infoItem);}}var numText;if(g_JSChartResource.KLine.NumIcon){if(isHScreen)numText=g_JSChartResource.KLine.NumIcon.HScreenText;else numText=g_JSChartResource.KLine.NumIcon.Text;}var _iteratorNormalCompletion4=true;var _didIteratorError4=false;var _iteratorError4=undefined;try{for(var _iterator4=(0,_getIterator3.default)(mapImage),_step4;!(_iteratorNormalCompletion4=(_step4=_iterator4.next()).done);_iteratorNormalCompletion4=true){var item=_step4.value;var value=item[1];if(value.Data.length>=2&&numText&&bShowNum)//太小了 就不显示了
3592
3601
  {var iconID=value.Data.length;if(iconID>=numText.length)iconID=0;this.Canvas.fillStyle=g_JSChartResource.KLine.NumIcon.Color;var text=numText[iconID];this.Canvas.fillText(text,value.TextRect.X,value.TextRect.Y,iconSize);}if(!isHScreen)this.InfoTooltipRect.push(value);//横屏没有tooltip
3593
- }}catch(err){_didIteratorError3=true;_iteratorError3=err;}finally{try{if(!_iteratorNormalCompletion3&&_iterator3.return){_iterator3.return();}}finally{if(_didIteratorError3){throw _iteratorError3;}}}this.Canvas.restore();this.Canvas.save();this.ClipClient(isHScreen);};//画交易图标
3602
+ }}catch(err){_didIteratorError4=true;_iteratorError4=err;}finally{try{if(!_iteratorNormalCompletion4&&_iterator4.return){_iterator4.return();}}finally{if(_didIteratorError4){throw _iteratorError4;}}}this.Canvas.restore();this.Canvas.save();this.ClipClient(isHScreen);};//画交易图标
3594
3603
  this.DrawTradeIcon=function(){if(!this.TradeData)return;var isHScreen=this.ChartFrame.IsHScreen===true;var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var xOffset=this.ChartBorder.GetLeft()+distanceWidth/2.0+2.0;var chartright=this.ChartBorder.GetRight();var xPointCount=this.ChartFrame.XPointCount;if(isHScreen){xOffset=this.ChartBorder.GetTop()+distanceWidth/2.0+2.0;chartright=this.ChartBorder.GetBottom();}var sellData=this.TradeData.Sell;var buyData=this.TradeData.Buy;var iconSize=dataWidth+distanceWidth;var pixelTatio=GetDevicePixelRatio();//获取设备的分辨率
3595
3604
  var iconSizeMax=24*pixelTatio,iconSizeMin=12*pixelTatio;if(iconSize<iconSizeMin)iconSize=iconSizeMin;else if(iconSize>iconSizeMax)iconSize=iconSizeMax;this.Canvas.font=iconSize+'px '+this.TradeIcon.Family;for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j,xOffset+=dataWidth+distanceWidth){var data=this.Data.Data[i];if(data.Open==null||data.High==null||data.Low==null||data.Close==null)continue;var buy=false,sell=false;if(sellData&&i<sellData.length)sell=sellData[i]>0;if(buyData&&i<buyData.length)buy=buyData[i]>0;if(!sell&&!buy)continue;var left=xOffset;var right=xOffset+dataWidth;if(right>chartright)break;var x=left+(right-left)/2;var yLow=this.GetYFromData(data.Low,false);var yHigh=this.GetYFromData(data.High,false);var yOpen=this.GetYFromData(data.Open,false);var yClose=this.GetYFromData(data.Close,false);var y=yHigh;if(buy){this.Canvas.fillStyle=this.TradeIcon.Buy.Color;if(isHScreen){this.Canvas.textAlign='right';this.Canvas.textBaseline='middle';this.Canvas.fillText(this.TradeIcon.Buy.HScreenText,yLow,x);}else{this.Canvas.textAlign='center';this.Canvas.textBaseline='top';this.Canvas.fillText(this.TradeIcon.Buy.Text,x,yLow);var iconRect=new Rect(x-iconSize/2,yLow,iconSize,iconSize);var iconData={Data:{Type:1,KData:data,Name:this.TradeData.Name,Param:this.TradeData.Param},Rect:iconRect,TextRect:{X:x,Y:yLow}};this.TradeIconTooltipRect.push(iconData);}}if(sell){this.Canvas.fillStyle=this.TradeIcon.Sell.Color;if(isHScreen){this.Canvas.textAlign='left';this.Canvas.textBaseline='middle';this.Canvas.fillText(this.TradeIcon.Sell.HScreenText,yHigh,x);}else{this.Canvas.textAlign='center';this.Canvas.textBaseline='bottom';this.Canvas.fillText(this.TradeIcon.Sell.Text,x,yHigh);var iconRect=new Rect(x-iconSize/2,yHigh-iconSize,iconSize,iconSize);var iconData={Data:{Type:2,KData:data,Name:this.TradeData.Name,Param:this.TradeData.Param},Rect:iconRect,TextRect:{X:x,Y:yHigh}};this.TradeIconTooltipRect.push(iconData);}}}};this.GetTooltipData=function(x,y,tooltip){if(!this.IsShow)return false;for(var i in this.TradeIconTooltipRect){var item=this.TradeIconTooltipRect[i];if(!item.Rect)continue;var rect=item.Rect;this.Canvas.beginPath();this.Canvas.rect(rect.X,rect.Y,rect.Width,rect.Height);if(this.Canvas.isPointInPath(x,y)){JSConsole.Chart.Log('[ChartKLine::GetTooltipData] trade icon ',item);tooltip.Data=item;tooltip.ChartPaint=this;tooltip.Type=2;//指标
3596
3605
  return true;}}for(var i in this.InfoTooltipRect){var item=this.InfoTooltipRect[i];if(!item.Rect)continue;var rect=item.Rect;this.Canvas.beginPath();this.Canvas.rect(rect.X,rect.Y,rect.Width,rect.Height);if(this.Canvas.isPointInPath(x,y)){//JSConsole.Chart.Log('[ChartKLine::GetTooltipData] info ', item);
@@ -3599,7 +3608,7 @@ return true;}}for(var i in this.TooltipRect){var rect=this.TooltipRect[i][1];thi
3599
3608
  return true;}}return false;};//计算当天显示数据的最大最小值
3600
3609
  this.GetMaxMin=function(){if(this.DrawType==14){if(this.FFKChart&&this.FFKChart.GetMaxMin){return this.FFKChart.GetMaxMin(this);}}var xPointCount=this.ChartFrame.XPointCount;var start=this.Data.DataOffset;if(this.ChartFrame.GlobalOption&&this.ChartFrame.GlobalOption.IsValueFullRange){start=0;xPointCount=this.Data.Data.length;}var range={Max:null,Min:null};if(this.DrawType==1||this.DrawType==4)// 1=收盘价线 4=收盘价面积图
3601
3610
  {for(var i=start,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j){var data=this.Data.Data[i];if(!IFrameSplitOperator.IsNumber(data.Close))continue;if(range.Max==null)range.Max=data.Close;if(range.Min==null)range.Min=data.Close;if(range.Max<data.Close)range.Max=data.Close;if(range.Min>data.Close)range.Min=data.Close;}}else{for(var i=start,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j){var data=this.Data.Data[i];if(data.Open==null||data.High==null||data.Low==null||data.Close==null)continue;if(this.DrawType==5&&data.OrderFlow&&IFrameSplitOperator.IsNumber(data.OrderFlow.PriceOffset)){var high=data.High;var low=data.Low;if(IFrameSplitOperator.IsNonEmptyArray(data.OrderFlow.High)){for(var k=0;k<data.OrderFlow.High.length;++k){var item=data.OrderFlow.High[k];if(high<item.Price)high=item.Price;}}if(IFrameSplitOperator.IsNonEmptyArray(data.OrderFlow.Low)){for(var k=0;k<data.OrderFlow.Low.length;++k){var item=data.OrderFlow.Low[k];if(low>item.Price)low=item.Price;}}high+=data.OrderFlow.PriceOffset;low-=data.OrderFlow.PriceOffset;if(range.Max==null)range.Max=high;if(range.Min==null)range.Min=low;if(range.Max<high)range.Max=high;if(range.Min>low)range.Min=low;}else{if(range.Max==null)range.Max=data.High;if(range.Min==null)range.Min=data.Low;if(range.Max<data.High)range.Max=data.High;if(range.Min>data.Low)range.Min=data.Low;}}}return range;};//获取所有的价格
3602
- this.GetAllPrice=function(){var xPointCount=this.ChartFrame.XPointCount;var setPrice=new _set2.default();for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j){var data=this.Data.Data[i];if(data.Open==null||data.High==null||data.Low==null||data.Close==null)continue;var value=data.Close;setPrice.add(value);}var aryPrice=[];var _iteratorNormalCompletion4=true;var _didIteratorError4=false;var _iteratorError4=undefined;try{for(var _iterator4=(0,_getIterator3.default)(setPrice),_step4;!(_iteratorNormalCompletion4=(_step4=_iterator4.next()).done);_iteratorNormalCompletion4=true){var item=_step4.value;aryPrice.push(item);}}catch(err){_didIteratorError4=true;_iteratorError4=err;}finally{try{if(!_iteratorNormalCompletion4&&_iterator4.return){_iterator4.return();}}finally{if(_didIteratorError4){throw _iteratorError4;}}}aryPrice.sort(function(a,b){return a-b;});//排序 升序
3611
+ this.GetAllPrice=function(){var xPointCount=this.ChartFrame.XPointCount;var setPrice=new _set2.default();for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j){var data=this.Data.Data[i];if(data.Open==null||data.High==null||data.Low==null||data.Close==null)continue;var value=data.Close;setPrice.add(value);}var aryPrice=[];var _iteratorNormalCompletion5=true;var _didIteratorError5=false;var _iteratorError5=undefined;try{for(var _iterator5=(0,_getIterator3.default)(setPrice),_step5;!(_iteratorNormalCompletion5=(_step5=_iterator5.next()).done);_iteratorNormalCompletion5=true){var item=_step5.value;aryPrice.push(item);}}catch(err){_didIteratorError5=true;_iteratorError5=err;}finally{try{if(!_iteratorNormalCompletion5&&_iterator5.return){_iterator5.return();}}finally{if(_didIteratorError5){throw _iteratorError5;}}}aryPrice.sort(function(a,b){return a-b;});//排序 升序
3603
3612
  return aryPrice;};this.DrawLastPointEvent=function(ptLast){if(!this.GetEventCallback)return;//通知外部绘制最后一个点
3604
3613
  var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_DRAW_KLINE_LAST_POINT);if(event){var kWidth={Data:this.ChartFrame.DataWidth,Distance:this.ChartFrame.DistanceWidth};if(ptLast)var data={LastPoint:{X:ptLast.X,Y:ptLast.Y,XLeft:ptLast.XLeft,XRight:ptLast.XRight},KItem:ptLast.KItem,DrawType:this.DrawType,KWidth:kWidth,ChartRight:ptLast.ChartRight};else var data={LastPoint:null,KItem:null,KWidth:kWidth};event.Callback(event,data,this);}};this.DrawOrderFlow=function(){var isHScreen=this.ChartFrame.IsHScreen===true;var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var border=this.ChartBorder.GetBorder();var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.RightEx;var xPointCount=this.ChartFrame.XPointCount;if(isHScreen){var border=this.ChartBorder.GetHScreenBorder();xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;chartright=border.BottomEx;}var upColor=this.UpColor;var downColor=this.DownColor;var unchagneColor=this.UnchagneColor;this.ShowRange.Start=this.Data.DataOffset;this.ShowRange.End=this.ShowRange.Start;this.ShowRange.DataCount=0;this.ShowRange.ShowCount=xPointCount;this.DrawKRange.Start=this.Data.DataOffset;var ptLast=null;this.DrawOrderFlowHBar();//横向柱子
3605
3614
  for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j,xOffset+=dataWidth+distanceWidth,++this.ShowRange.DataCount){var data=this.Data.Data[i];this.ShowRange.End=i;if(data.Open==null||data.High==null||data.Low==null||data.Close==null)continue;var left=xOffset;var right=xOffset+dataWidth;if(right>chartright)break;var x=left+(right-left)/2;var yLow=this.GetYFromData(data.Low,false);var yHigh=this.GetYFromData(data.High,false);var yOpen=this.GetYFromData(data.Open,false);var yClose=this.GetYFromData(data.Close,false);var y=yHigh;this.DrawKRange.End=i;var yKline={Low:yLow,High:yHigh,Open:yOpen,Close:yClose};var xKLine={Left:left,Center:x,Right:right,DataWidth:dataWidth};this.DrawOrderFlowBar(data.OrderFlow,data,xKLine,yKline,isHScreen);if(this.IsShowKTooltip&&!isHScreen)//添加tooltip区域
@@ -4881,7 +4890,7 @@ this.ID=Guid();//唯一的ID
4881
4890
  return aryData;};this.BuildKLineMap=function(){var isHScreen=this.ChartSubFrame.IsHScreen===true;var dataWidth=this.ChartSubFrame.DataWidth;var distanceWidth=this.ChartSubFrame.DistanceWidth;var xOffset=this.ChartBorder.GetLeft()+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;if(isHScreen)xOffset=this.ChartBorder.GetTop()+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=this.ChartBorder.GetRight();if(isHScreen)chartright=this.ChartBorder.GetBottom();var mapKLine={Data:new _map2.default(),Start:null,End:null};//Key: date / date time, Value:索引
4882
4891
  for(var i=this.KData.DataOffset,j=0;i<this.KData.Data.length&&j<this.XPointCount;++i,++j,xOffset+=dataWidth+distanceWidth){var kItem=this.KData.Data[i];var left=xOffset;var right=xOffset+dataWidth;if(right>chartright)break;var x=left+(right-left)/2;if(j==0)mapKLine.XLeft=left;mapKLine.XRight=right;var value={Index:i,ShowIndex:j,X:x,Right:right,Left:left,Date:kItem.Date};if(ChartData.IsMinutePeriod(this.Period,true)){var key='Date:'+kItem.Date+' Time:'+kItem.Time;value.Time=kItem.Time;}else{var key='Date:'+kItem.Date;}mapKLine.Data.set(key,value);//保存下起始和结束位置
4883
4892
  if(j==0)mapKLine.Start=value;mapKLine.End=value;}return mapKLine;};this.GetBGCoordinate=function(item,kLineMap){var xLeft=null,xRight=null;var isMinutePeriod=ChartData.IsMinutePeriod(this.Period,true);var bSingleDate=false;//JSConsole.Chart.Log('[BackgroundPaint::GetBGCoordinate] item ', item);
4884
- if(isMinutePeriod){if(item.Start&&item.End&&item.Start.Date==item.End.Date&&item.Start.Time==item.End.Time)bSingleDate=true;}else{if(item.Start&&item.End&&item.Start.Date==item.End.Date)bSingleDate=true;}if(bSingleDate){if(isMinutePeriod)var key='Date:'+item.Start.Date+' Time:'+item.Start.Time;else var key='Date:'+item.Start.Date;if(!kLineMap.Data.has(key))return null;var findItem=kLineMap.Data.get(key);xLeft=findItem.Left;xRight=findItem.Right;return{Left:xLeft,Right:xRight,Width:xRight-xLeft};}if(item.Start){if(isMinutePeriod)var key='Date:'+item.Start.Date+' Time:'+item.Start.Time;else var key='Date:'+item.Start.Date;if(kLineMap.Data.has(key)){var findItem=kLineMap.Data.get(key);xLeft=findItem.Left;}else{if(isMinutePeriod){if(item.Start.Date<kLineMap.Start.Date||item.Start.Date==kLineMap.Start.Date&&item.Start.Time<=kLineMap.Start.Time){xLeft=kLineMap.Start.Left;}else{var _iteratorNormalCompletion5=true;var _didIteratorError5=false;var _iteratorError5=undefined;try{for(var _iterator5=(0,_getIterator3.default)(kLineMap.Data),_step5;!(_iteratorNormalCompletion5=(_step5=_iterator5.next()).done);_iteratorNormalCompletion5=true){var kItem=_step5.value;var value=kItem[1];if(value.Date>item.Start.Date||value.Date==item.Start.Date&&value.Time>item.Start.Time){xLeft=value.Left;break;}}}catch(err){_didIteratorError5=true;_iteratorError5=err;}finally{try{if(!_iteratorNormalCompletion5&&_iterator5.return){_iterator5.return();}}finally{if(_didIteratorError5){throw _iteratorError5;}}}}}else{if(item.Start.Date<=kLineMap.Start.Date){xLeft=kLineMap.Start.Left;}else{var _iteratorNormalCompletion6=true;var _didIteratorError6=false;var _iteratorError6=undefined;try{for(var _iterator6=(0,_getIterator3.default)(kLineMap.Data),_step6;!(_iteratorNormalCompletion6=(_step6=_iterator6.next()).done);_iteratorNormalCompletion6=true){var kItem=_step6.value;var value=kItem[1];if(value.Date>item.Start.Date){xLeft=value.Left;break;}}}catch(err){_didIteratorError6=true;_iteratorError6=err;}finally{try{if(!_iteratorNormalCompletion6&&_iterator6.return){_iterator6.return();}}finally{if(_didIteratorError6){throw _iteratorError6;}}}}}}}else{xLeft=kLineMap.XLeft;}if(item.End){if(isMinutePeriod)var key='Date:'+item.End.Date+' Time:'+item.End.Time;else var key='Date:'+item.End.Date;if(kLineMap.Data.has(key)){var findItem=kLineMap.Data.get(key);xRight=findItem.Right;}else{if(isMinutePeriod){if(item.End.Date<kLineMap.Start.Date||item.End.Date==kLineMap.Start.Date&&item.End.Time<kLineMap.Start.Time)return null;if(item.End.Date<kLineMap.End.Date||item.End.Date==kLineMap.End.Date&&item.End.Time>=kLineMap.End.Time){xRight=kLineMap.End.Right;}else{var previousX=null;var _iteratorNormalCompletion7=true;var _didIteratorError7=false;var _iteratorError7=undefined;try{for(var _iterator7=(0,_getIterator3.default)(kLineMap.Data),_step7;!(_iteratorNormalCompletion7=(_step7=_iterator7.next()).done);_iteratorNormalCompletion7=true){var kItem=_step7.value;var value=kItem[1];if(value.Date>item.End.Date||value.Date==item.End.Date&&value.Time>item.End.Time){xRight=previousX;break;}previousX=value.Right;}}catch(err){_didIteratorError7=true;_iteratorError7=err;}finally{try{if(!_iteratorNormalCompletion7&&_iterator7.return){_iterator7.return();}}finally{if(_didIteratorError7){throw _iteratorError7;}}}}}else{if(item.End.Date<kLineMap.Start.Date)return null;if(item.End.Date<=kLineMap.End.Date){xRight=kLineMap.End.Right;}else{var previousX=null;var _iteratorNormalCompletion8=true;var _didIteratorError8=false;var _iteratorError8=undefined;try{for(var _iterator8=(0,_getIterator3.default)(kLineMap.Data),_step8;!(_iteratorNormalCompletion8=(_step8=_iterator8.next()).done);_iteratorNormalCompletion8=true){var kItem=_step8.value;var value=kItem[1];if(value.Date>item.End.Date){xRight=previousX;break;}previousX=value.Right;}}catch(err){_didIteratorError8=true;_iteratorError8=err;}finally{try{if(!_iteratorNormalCompletion8&&_iterator8.return){_iterator8.return();}}finally{if(_didIteratorError8){throw _iteratorError8;}}}}}}}else{xRight=kLineMap.XRight;}if(xLeft==null||xRight==null)return null;return{Left:xLeft,Right:xRight,Width:xRight-xLeft};};}function MinuteBackgroundPaint(){this.newMethod=IExtendChartPainting;//派生
4893
+ if(isMinutePeriod){if(item.Start&&item.End&&item.Start.Date==item.End.Date&&item.Start.Time==item.End.Time)bSingleDate=true;}else{if(item.Start&&item.End&&item.Start.Date==item.End.Date)bSingleDate=true;}if(bSingleDate){if(isMinutePeriod)var key='Date:'+item.Start.Date+' Time:'+item.Start.Time;else var key='Date:'+item.Start.Date;if(!kLineMap.Data.has(key))return null;var findItem=kLineMap.Data.get(key);xLeft=findItem.Left;xRight=findItem.Right;return{Left:xLeft,Right:xRight,Width:xRight-xLeft};}if(item.Start){if(isMinutePeriod)var key='Date:'+item.Start.Date+' Time:'+item.Start.Time;else var key='Date:'+item.Start.Date;if(kLineMap.Data.has(key)){var findItem=kLineMap.Data.get(key);xLeft=findItem.Left;}else{if(isMinutePeriod){if(item.Start.Date<kLineMap.Start.Date||item.Start.Date==kLineMap.Start.Date&&item.Start.Time<=kLineMap.Start.Time){xLeft=kLineMap.Start.Left;}else{var _iteratorNormalCompletion6=true;var _didIteratorError6=false;var _iteratorError6=undefined;try{for(var _iterator6=(0,_getIterator3.default)(kLineMap.Data),_step6;!(_iteratorNormalCompletion6=(_step6=_iterator6.next()).done);_iteratorNormalCompletion6=true){var kItem=_step6.value;var value=kItem[1];if(value.Date>item.Start.Date||value.Date==item.Start.Date&&value.Time>item.Start.Time){xLeft=value.Left;break;}}}catch(err){_didIteratorError6=true;_iteratorError6=err;}finally{try{if(!_iteratorNormalCompletion6&&_iterator6.return){_iterator6.return();}}finally{if(_didIteratorError6){throw _iteratorError6;}}}}}else{if(item.Start.Date<=kLineMap.Start.Date){xLeft=kLineMap.Start.Left;}else{var _iteratorNormalCompletion7=true;var _didIteratorError7=false;var _iteratorError7=undefined;try{for(var _iterator7=(0,_getIterator3.default)(kLineMap.Data),_step7;!(_iteratorNormalCompletion7=(_step7=_iterator7.next()).done);_iteratorNormalCompletion7=true){var kItem=_step7.value;var value=kItem[1];if(value.Date>item.Start.Date){xLeft=value.Left;break;}}}catch(err){_didIteratorError7=true;_iteratorError7=err;}finally{try{if(!_iteratorNormalCompletion7&&_iterator7.return){_iterator7.return();}}finally{if(_didIteratorError7){throw _iteratorError7;}}}}}}}else{xLeft=kLineMap.XLeft;}if(item.End){if(isMinutePeriod)var key='Date:'+item.End.Date+' Time:'+item.End.Time;else var key='Date:'+item.End.Date;if(kLineMap.Data.has(key)){var findItem=kLineMap.Data.get(key);xRight=findItem.Right;}else{if(isMinutePeriod){if(item.End.Date<kLineMap.Start.Date||item.End.Date==kLineMap.Start.Date&&item.End.Time<kLineMap.Start.Time)return null;if(item.End.Date<kLineMap.End.Date||item.End.Date==kLineMap.End.Date&&item.End.Time>=kLineMap.End.Time){xRight=kLineMap.End.Right;}else{var previousX=null;var _iteratorNormalCompletion8=true;var _didIteratorError8=false;var _iteratorError8=undefined;try{for(var _iterator8=(0,_getIterator3.default)(kLineMap.Data),_step8;!(_iteratorNormalCompletion8=(_step8=_iterator8.next()).done);_iteratorNormalCompletion8=true){var kItem=_step8.value;var value=kItem[1];if(value.Date>item.End.Date||value.Date==item.End.Date&&value.Time>item.End.Time){xRight=previousX;break;}previousX=value.Right;}}catch(err){_didIteratorError8=true;_iteratorError8=err;}finally{try{if(!_iteratorNormalCompletion8&&_iterator8.return){_iterator8.return();}}finally{if(_didIteratorError8){throw _iteratorError8;}}}}}else{if(item.End.Date<kLineMap.Start.Date)return null;if(item.End.Date<=kLineMap.End.Date){xRight=kLineMap.End.Right;}else{var previousX=null;var _iteratorNormalCompletion9=true;var _didIteratorError9=false;var _iteratorError9=undefined;try{for(var _iterator9=(0,_getIterator3.default)(kLineMap.Data),_step9;!(_iteratorNormalCompletion9=(_step9=_iterator9.next()).done);_iteratorNormalCompletion9=true){var kItem=_step9.value;var value=kItem[1];if(value.Date>item.End.Date){xRight=previousX;break;}previousX=value.Right;}}catch(err){_didIteratorError9=true;_iteratorError9=err;}finally{try{if(!_iteratorNormalCompletion9&&_iterator9.return){_iterator9.return();}}finally{if(_didIteratorError9){throw _iteratorError9;}}}}}}}else{xRight=kLineMap.XRight;}if(xLeft==null||xRight==null)return null;return{Left:xLeft,Right:xRight,Width:xRight-xLeft};};}function MinuteBackgroundPaint(){this.newMethod=IExtendChartPainting;//派生
4885
4894
  this.newMethod();delete this.newMethod;this.ClassName='MinuteBackgroundPaint';this.IsDynamic=true;this.IsCallbackDraw=false;//在回调函数里绘制, 不在Draw()中绘制
4886
4895
  this.HQChart;this.Data;//背景数据 { [Date:, Text:, TextColor:, Font: }
4887
4896
  //this.Data=[ {Date:20210421, Text:"测试测试测试!!!!!"}];
@@ -5745,17 +5754,17 @@ var value=null;var preVaildItem=null;if(item.DataType=="StraightLine")//直线
5745
5754
  {preVaildItem=this.GetPreVaildItem(item.Data.Data,dataIndex);if(!preVaildItem)return null;preText=this.FormatValue(preVaildItem.Item,item);if(item.Name){var dyValue=this.GetDynamicOutValue(item.Name,preText);if(dyValue)preText=dyValue;}valueText='--('+preText+')';return{Text:valueText,ArrayText:aryText};}if(value==null)return null;if(item.DataType=="HistoryData-Vol"){value=value.Vol;valueText=this.FormatValue(value,item);}else if(item.DataType=="MultiReport"){valueText=this.FormatMultiReport(value,item);}else if(item.DataType=="MULTI_POINT_LINE"){valueText=this.FromatMultiDataLine(value,item);if(!valueText)return null;}else if(item.DataType=="ChartStackedBar"){aryText=this.FromatStackedBarTitle(value,item);if(!aryText)return null;return{Text:null,ArrayText:aryText};}else if(g_ScriptIndexChartFactory.Has(item.DataType))//外部挂接
5746
5755
  {var find=g_ScriptIndexChartFactory.Get(item.DataType);if(find&&find.FormatTitleCallback)return find.FormatTitleCallback(value,item,dataIndex);}else{if(this.GetEventCallback){var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_FORMAT_INDEX_OUT_TEXT);if(event){var data={Item:item,Index:titleIndex,Data:this.Data,FrameID:this.Frame.Identify,DataIndex:dataIndex,Value:value,Out:null};event.Callback(event,data,this);if(data.Out)return data.Out;}}var arrow=null;if(this.IsShowUpDownArrow){var preValue=null;if(dataIndex-1>=0)preValue=item.Data.Data[dataIndex-1];if(IFrameSplitOperator.IsNumber(preValue)){if(preValue>value)arrow='↓';else if(preValue<value)arrow='↑';else arrow='→';}}valueText=this.FormatValue(value,item);if(item.Name){var dyValue=this.GetDynamicOutValue(item.Name,valueText);if(dyValue)valueText=dyValue;}if(arrow)valueText+=arrow;}}return{Text:valueText,ArrayText:aryText};};//获取上一个有效数据
5747
5756
  this.GetPreVaildItem=function(data,start){for(var i=start;i>=0;--i){var item=data[i];if(item)return{Item:item,Index:i};}return null;};this.DrawSelectedLine=function(left,bottom,textWidth){this.Canvas.save();var fontHeight=this.GetFontHeight();this.Canvas.strokeStyle=this.SelectedColor;var lineWidth=4;var lineBottom=ToFixedPoint2(lineWidth,bottom+fontHeight/2);this.Canvas.lineWidth=lineWidth;this.Canvas.beginPath();this.Canvas.moveTo(left,lineBottom);this.Canvas.lineTo(left+textWidth,lineBottom);this.Canvas.stroke();this.Canvas.restore();};this.DrawOverlayIndexSingleLine=function(moveonPoint,mouseStatus)//叠加指标1个指标一行
5748
- {var pixelRatio=GetDevicePixelRatio();var border=this.Frame.GetBorder();if(this.Frame.IsHScreen===true){var left=1;var top=2*pixelRatio;var right=this.Frame.ChartBorder.GetHeight();var bottom=this.Frame.ChartBorder.GetWidthEx();}else{var top=border.TopTitle+2*pixelRatio;var left=this.Frame.ChartBorder.GetLeft()+this.MerginLeft;var right=border.Right;var bottom=border.Bottom;}var lineSpace=this.OverlayIndexType.LineSpace*pixelRatio;var x=left,y=top;var fontHeight=GetFontHeight(this.Canvas,this.Font,"擎");y=top+fontHeight/2;var _iteratorNormalCompletion9=true;var _didIteratorError9=false;var _iteratorError9=undefined;try{for(var _iterator9=(0,_getIterator3.default)(this.OverlayIndex),_step9;!(_iteratorNormalCompletion9=(_step9=_iterator9.next()).done);_iteratorNormalCompletion9=true){item=_step9.value;var overlayItem=item[1];var overlayID=item[0];var toolbarInfo={Width:0,YCenter:y,ID:overlayID};this.DrawOverlayToolbar(overlayItem,toolbarInfo,moveonPoint,mouseStatus);if(!overlayItem.Frame.IsShowIndexTitle)continue;x=left+toolbarInfo.Width;this.Canvas.font=this.Font;this.Canvas.textAlign="left";this.Canvas.textBaseline="middle";if(overlayItem.Title&&this.IsShowOverlayIndexName){var textWidth=this.Canvas.measureText(overlayItem.Title).width+2;if(x+textWidth<right){if(this.OverlayIndexType.BGColor){this.Canvas.fillStyle=this.OverlayIndexType.BGColor;var rtBG={Left:x,Top:y-fontHeight/2,Width:textWidth,Height:fontHeight+lineSpace};//保存下标题的坐标
5757
+ {var pixelRatio=GetDevicePixelRatio();var border=this.Frame.GetBorder();if(this.Frame.IsHScreen===true){var left=1;var top=2*pixelRatio;var right=this.Frame.ChartBorder.GetHeight();var bottom=this.Frame.ChartBorder.GetWidthEx();}else{var top=border.TopTitle+2*pixelRatio;var left=this.Frame.ChartBorder.GetLeft()+this.MerginLeft;var right=border.Right;var bottom=border.Bottom;}var lineSpace=this.OverlayIndexType.LineSpace*pixelRatio;var x=left,y=top;var fontHeight=GetFontHeight(this.Canvas,this.Font,"擎");y=top+fontHeight/2;var _iteratorNormalCompletion10=true;var _didIteratorError10=false;var _iteratorError10=undefined;try{for(var _iterator10=(0,_getIterator3.default)(this.OverlayIndex),_step10;!(_iteratorNormalCompletion10=(_step10=_iterator10.next()).done);_iteratorNormalCompletion10=true){item=_step10.value;var overlayItem=item[1];var overlayID=item[0];var toolbarInfo={Width:0,YCenter:y,ID:overlayID};this.DrawOverlayToolbar(overlayItem,toolbarInfo,moveonPoint,mouseStatus);if(!overlayItem.Frame.IsShowIndexTitle)continue;x=left+toolbarInfo.Width;this.Canvas.font=this.Font;this.Canvas.textAlign="left";this.Canvas.textBaseline="middle";if(overlayItem.Title&&this.IsShowOverlayIndexName){var textWidth=this.Canvas.measureText(overlayItem.Title).width+2;if(x+textWidth<right){if(this.OverlayIndexType.BGColor){this.Canvas.fillStyle=this.OverlayIndexType.BGColor;var rtBG={Left:x,Top:y-fontHeight/2,Width:textWidth,Height:fontHeight+lineSpace};//保存下标题的坐标
5749
5758
  this.Canvas.fillRect(rtBG.Left,rtBG.Top,rtBG.Width,rtBG.Height);}if(this.IsSelectedChart(overlayID))this.DrawSelectedLine(x,y,textWidth,overlayItem.Title);this.Canvas.fillStyle=this.TitleColor;this.Canvas.fillText(overlayItem.Title,x,y,textWidth);}x+=textWidth;}for(var i=0;i<overlayItem.Data.length;++i){var item=overlayItem.Data[i];if(!item||!item.Data||!item.Data.Data||!item.Name)continue;if(item.IsVisible===false)continue;if(item.Data.Data.length<=0)continue;var value=null;var valueText=null;var aryText=null;if(item.DataType=="StraightLine")//直线只有1个数据
5750
5759
  {value=item.Data.Data[0];valueText=this.FormatValue(value,item);}else{var index=Math.abs(this.CursorIndex-0.5);index=parseInt(index.toFixed(0));if(this.IsKLineFrame)index=this.CursorIndex;var dataIndex=item.Data.DataOffset+index;if(dataIndex>=item.Data.Data.length)dataIndex=item.Data.Data.length-1;if(dataIndex<0)continue;value=item.Data.Data[dataIndex];if(value==null)continue;if(item.DataType=="HistoryData-Vol"){value=value.Vol;valueText=this.FormatValue(value,item);}else if(item.DataType=="MultiReport"){valueText=this.FormatMultiReport(value,item);}else if(item.DataType=="ChartStackedBar"){aryText=this.FromatStackedBarTitle(value,item);if(!aryText)continue;}else{valueText=this.FormatValue(value,item);}}if(aryText){var text;for(var k=0;k<aryText.length;++k){var titleItem=aryText[k];if(titleItem.Name)text=titleItem.Name+":"+titleItem.Text;else text=titleItem.Text;var textWidth=this.Canvas.measureText(text).width+2;//后空2个像素
5751
5760
  if(x+textWidth>right)break;if(this.OverlayIndexType.BGColor){this.Canvas.fillStyle=this.OverlayIndexType.BGColor;var rtBG={Left:x,Top:y-fontHeight/2,Width:textWidth,Height:fontHeight+lineSpace};//保存下标题的坐标
5752
5761
  this.Canvas.fillRect(rtBG.Left,rtBG.Top,rtBG.Width,rtBG.Height);}this.Canvas.fillStyle=titleItem.Color;this.Canvas.fillText(text,x,y,textWidth);x+=textWidth;}}else{var text=valueText;if(item.Name){var dyTitle=this.GetDynamicOutName(item.Name,overlayID);if(dyTitle)text=dyTitle+":"+valueText;else text=item.Name+":"+valueText;}var textWidth=this.Canvas.measureText(text).width+2;//后空2个像素
5753
5762
  if(x+textWidth>right)break;if(this.OverlayIndexType.BGColor){this.Canvas.fillStyle=this.OverlayIndexType.BGColor;var rtBG={Left:x,Top:y-fontHeight/2,Width:textWidth,Height:fontHeight+lineSpace};//保存下标题的坐标
5754
- this.Canvas.fillRect(rtBG.Left,rtBG.Top,rtBG.Width,rtBG.Height);}this.Canvas.fillStyle=item.Color;this.Canvas.fillText(text,x,y,textWidth);x+=textWidth;}}y+=fontHeight+lineSpace;if(y+fontHeight+lineSpace>=bottom)break;}}catch(err){_didIteratorError9=true;_iteratorError9=err;}finally{try{if(!_iteratorNormalCompletion9&&_iterator9.return){_iterator9.return();}}finally{if(_didIteratorError9){throw _iteratorError9;}}}};this.DrawOverlayIndex=function(left)//叠加指标标题
5763
+ this.Canvas.fillRect(rtBG.Left,rtBG.Top,rtBG.Width,rtBG.Height);}this.Canvas.fillStyle=item.Color;this.Canvas.fillText(text,x,y,textWidth);x+=textWidth;}}y+=fontHeight+lineSpace;if(y+fontHeight+lineSpace>=bottom)break;}}catch(err){_didIteratorError10=true;_iteratorError10=err;}finally{try{if(!_iteratorNormalCompletion10&&_iterator10.return){_iterator10.return();}}finally{if(_didIteratorError10){throw _iteratorError10;}}}};this.DrawOverlayIndex=function(left)//叠加指标标题
5755
5764
  {var bottom=this.Frame.ChartBorder.GetTop()+this.Frame.ChartBorder.TitleHeight/2;//上下居中显示
5756
- var right=this.Frame.ChartBorder.GetRight();if(this.Frame.IsHScreen===true){bottom=-this.Frame.ChartBorder.TitleHeight/2;right=this.Frame.ChartBorder.GetHeight();}if(left>right)return;var spaceWidth=5*GetDevicePixelRatio();var drawLeft=left;var _iteratorNormalCompletion10=true;var _didIteratorError10=false;var _iteratorError10=undefined;try{for(var _iterator10=(0,_getIterator3.default)(this.OverlayIndex),_step10;!(_iteratorNormalCompletion10=(_step10=_iterator10.next()).done);_iteratorNormalCompletion10=true){item=_step10.value;left+=spaceWidth;var overlayItem=item[1];var overlayID=item[0];if(overlayItem.Title&&this.IsShowOverlayIndexName){this.Canvas.fillStyle=this.TitleColor;var textWidth=this.Canvas.measureText(overlayItem.Title).width+2;drawLeft=left;left+=textWidth;if(left>right)break;this.Canvas.fillText(overlayItem.Title,drawLeft,bottom,textWidth);if(this.IsSelectedChart(overlayID))this.DrawSelectedLine(drawLeft,bottom,textWidth);}for(var i in overlayItem.Data){var item=overlayItem.Data[i];if(!item||!item.Data||!item.Data.Data||!item.Name)continue;if(item.Data.Data.length<=0)continue;var value=null;var valueText=null;if(item.DataType=="StraightLine")//直线只有1个数据
5765
+ var right=this.Frame.ChartBorder.GetRight();if(this.Frame.IsHScreen===true){bottom=-this.Frame.ChartBorder.TitleHeight/2;right=this.Frame.ChartBorder.GetHeight();}if(left>right)return;var spaceWidth=5*GetDevicePixelRatio();var drawLeft=left;var _iteratorNormalCompletion11=true;var _didIteratorError11=false;var _iteratorError11=undefined;try{for(var _iterator11=(0,_getIterator3.default)(this.OverlayIndex),_step11;!(_iteratorNormalCompletion11=(_step11=_iterator11.next()).done);_iteratorNormalCompletion11=true){item=_step11.value;left+=spaceWidth;var overlayItem=item[1];var overlayID=item[0];if(overlayItem.Title&&this.IsShowOverlayIndexName){this.Canvas.fillStyle=this.TitleColor;var textWidth=this.Canvas.measureText(overlayItem.Title).width+2;drawLeft=left;left+=textWidth;if(left>right)break;this.Canvas.fillText(overlayItem.Title,drawLeft,bottom,textWidth);if(this.IsSelectedChart(overlayID))this.DrawSelectedLine(drawLeft,bottom,textWidth);}for(var i in overlayItem.Data){var item=overlayItem.Data[i];if(!item||!item.Data||!item.Data.Data||!item.Name)continue;if(item.Data.Data.length<=0)continue;var value=null;var valueText=null;if(item.DataType=="StraightLine")//直线只有1个数据
5757
5766
  {value=item.Data.Data[0];valueText=this.FormatValue(value,item);}else{var index=Math.abs(this.CursorIndex-0.5);index=parseInt(index.toFixed(0));if(this.IsKLineFrame)index=this.CursorIndex;var dataIndex=item.Data.DataOffset+index;if(dataIndex>=item.Data.Data.length)dataIndex=item.Data.Data.length-1;if(dataIndex<0)continue;value=item.Data.Data[dataIndex];if(value==null)continue;if(item.DataType=="HistoryData-Vol"){value=value.Vol;valueText=this.FormatValue(value,item);}else if(item.DataType=="MultiReport"){valueText=this.FormatMultiReport(value,item);}else{valueText=this.FormatValue(value,item);}}this.Canvas.fillStyle=item.Color;var text=item.Name+":"+valueText;var textWidth=this.Canvas.measureText(text).width+2;//后空2个像素
5758
- drawLeft=left;left+=textWidth;if(left>right)break;this.Canvas.fillText(text,drawLeft,bottom,textWidth);}if(left>right)break;}}catch(err){_didIteratorError10=true;_iteratorError10=err;}finally{try{if(!_iteratorNormalCompletion10&&_iterator10.return){_iterator10.return();}}finally{if(_didIteratorError10){throw _iteratorError10;}}}};this.HScreenDraw=function(){var border=this.Frame.ChartBorder.GetHScreenBorder();var xText=this.Frame.ChartBorder.GetRightTitle();var yText=border.TopEx;this.Canvas.translate(xText,yText);this.Canvas.rotate(90*Math.PI/180);var left=1;var bottom=-this.Frame.ChartBorder.TitleHeight/2;//上下居中显示
5767
+ drawLeft=left;left+=textWidth;if(left>right)break;this.Canvas.fillText(text,drawLeft,bottom,textWidth);}if(left>right)break;}}catch(err){_didIteratorError11=true;_iteratorError11=err;}finally{try{if(!_iteratorNormalCompletion11&&_iterator11.return){_iterator11.return();}}finally{if(_didIteratorError11){throw _iteratorError11;}}}};this.HScreenDraw=function(){var border=this.Frame.ChartBorder.GetHScreenBorder();var xText=this.Frame.ChartBorder.GetRightTitle();var yText=border.TopEx;this.Canvas.translate(xText,yText);this.Canvas.rotate(90*Math.PI/180);var left=1;var bottom=-this.Frame.ChartBorder.TitleHeight/2;//上下居中显示
5759
5768
  var right=this.Frame.ChartBorder.GetHeight();this.Canvas.textAlign="left";this.Canvas.textBaseline="middle";this.Canvas.font=this.Font;var pixelRatio=GetDevicePixelRatio();if(this.Title&&this.IsShowIndexName){var textWidth=this.Canvas.measureText(this.Title).width+2;if(this.IsDrawTitleBG){var title=this.Title;if(this.IsShowNameArrow)title+='▼';var textWidth=this.Canvas.measureText(title).width;var bgHeight=this.Canvas.measureText("擎").width+4*pixelRatio;var bgWidth=textWidth+4*pixelRatio;this.TitleRect={Top:border.Top,Left:this.Frame.ChartBorder.GetRightTitle()+this.Frame.ChartBorder.TitleHeight/2-bgHeight/2,Width:bgHeight,Height:bgWidth};//保存下标题的坐标
5760
5769
  this.Canvas.fillStyle=this.BGColor;var drawRect={Left:left,Top:bottom-bgHeight/2,Width:bgWidth,Height:bgHeight};this.Canvas.fillRect(drawRect.Left,drawRect.Top,drawRect.Width,drawRect.Height);if(this.BGBorderColor){this.Canvas.strokeStyle=this.BGBorderColor;this.Canvas.strokeRect(ToFixedPoint(drawRect.Left),ToFixedPoint(drawRect.Top),ToFixedRect(drawRect.Width),ToFixedRect(drawRect.Height));}this.Canvas.fillStyle=this.TitleColor;this.Canvas.fillText(title,left+2*pixelRatio,bottom,textWidth);left+=bgWidth+2*pixelRatio;left+=this.TitleSpace;}else{this.Canvas.fillStyle=this.TitleColor;this.Canvas.fillText(this.Title,left,bottom,textWidth);left+=textWidth;left+=this.TitleSpace;}}if(this.ArgumentsText&&this.IsShowIndexName){var textWidth=this.Canvas.measureText(this.ArgumentsText).width+2;this.Canvas.fillStyle=this.TitleColor;this.Canvas.fillText(this.ArgumentsText,left,bottom,textWidth);left+=textWidth;left+=this.TitleSpace;}var isShowLastData=this.IsShowLastData();var lockRect=this.Frame.GetLockRect();if(lockRect)//指标上锁区域不显示动态标题
5761
5770
  {var index=Math.abs(this.CursorIndex-0.5);if(this.IsKLineFrame)index=this.CursorIndex;var x=this.Frame.GetXFromIndex(index.toFixed(0));if(x>=lockRect.Top)return;if(isShowLastData)return;}for(var i in this.Data){var item=this.Data[i];var outText=this.GetTitleItem(item,isShowLastData);if(!outText)continue;var valueText=outText.Text;var aryText=outText.ArrayText;if(aryText){var text;for(var k=0;k<aryText.length;++k){var titleItem=aryText[k];if(titleItem.Name)text=titleItem.Name+":"+titleItem.Text;else text=titleItem.Text;var space=this.ParamSpace*GetDevicePixelRatio();var textWidth=this.Canvas.measureText(text).width+space;if(left+textWidth>right)break;this.Canvas.fillStyle=titleItem.Color;this.Canvas.fillText(text,left,bottom,textWidth);left+=textWidth;}}else{this.Canvas.fillStyle=item.Color;var text=valueText;if(item.Name){var dyTitle=this.GetDynamicOutName(item.Name);if(dyTitle)text=dyTitle+":"+valueText;else text=item.Name+":"+valueText;}var space=this.ParamSpace*GetDevicePixelRatio();var textWidth=this.Canvas.measureText(text).width+space;//后空2个像素
@@ -6373,13 +6382,13 @@ var startIndex=this.Frame.GetXData(ptStart.X,false);var endIndex=this.Frame.GetX
6373
6382
  this.StorageKey;this.GetEventCallback;//事件回调
6374
6383
  this.Load=function(key)//从本地读取画图工具
6375
6384
  {if(!key)return;this.StorageKey=key;var cacheValue=localStorage[this.StorageKey];JSConsole.Chart.Log('[ChartDrawStorage::Load] Load to localStorage, key='+this.StorageKey+', cache='+cacheValue);if(!cacheValue)return;if(typeof cacheValue!="string")return;var saveData=JSON.parse(cacheValue);for(var i in saveData){var item=saveData[i];var drawMap=new _map2.default();for(var j in item.Value){var drawItem=item.Value[j];drawMap.set(drawItem.Key,drawItem.Value);}this.DrawData.set(item.Key,drawMap);}};this.Save=function()//把数据保存到本地
6376
- {if(!this.StorageKey)return;var saveData=[];var _iteratorNormalCompletion11=true;var _didIteratorError11=false;var _iteratorError11=undefined;try{for(var _iterator11=(0,_getIterator3.default)(this.DrawData),_step11;!(_iteratorNormalCompletion11=(_step11=_iterator11.next()).done);_iteratorNormalCompletion11=true){var stock=_step11.value;var key=stock[0];var value=stock[1];var itemData={Key:key,Value:[]};var _iteratorNormalCompletion12=true;var _didIteratorError12=false;var _iteratorError12=undefined;try{for(var _iterator12=(0,_getIterator3.default)(value),_step12;!(_iteratorNormalCompletion12=(_step12=_iterator12.next()).done);_iteratorNormalCompletion12=true){var drawItem=_step12.value;if(drawItem[1]&&drawItem[1].EnableSave===false)continue;itemData.Value.push({Key:drawItem[0],Value:drawItem[1]});}}catch(err){_didIteratorError12=true;_iteratorError12=err;}finally{try{if(!_iteratorNormalCompletion12&&_iterator12.return){_iterator12.return();}}finally{if(_didIteratorError12){throw _iteratorError12;}}}if(IFrameSplitOperator.IsNonEmptyArray(itemData.Value))saveData.push(itemData);}}catch(err){_didIteratorError11=true;_iteratorError11=err;}finally{try{if(!_iteratorNormalCompletion11&&_iterator11.return){_iterator11.return();}}finally{if(_didIteratorError11){throw _iteratorError11;}}}JSConsole.Chart.Log('[ChartDrawStorage::Save] save to localStorage, key='+this.StorageKey);var strData=(0,_stringify2.default)(saveData);localStorage[this.StorageKey]=strData;};this.GetItemKey=function(obj)//生成每个画图工具的key
6385
+ {if(!this.StorageKey)return;var saveData=[];var _iteratorNormalCompletion12=true;var _didIteratorError12=false;var _iteratorError12=undefined;try{for(var _iterator12=(0,_getIterator3.default)(this.DrawData),_step12;!(_iteratorNormalCompletion12=(_step12=_iterator12.next()).done);_iteratorNormalCompletion12=true){var stock=_step12.value;var key=stock[0];var value=stock[1];var itemData={Key:key,Value:[]};var _iteratorNormalCompletion13=true;var _didIteratorError13=false;var _iteratorError13=undefined;try{for(var _iterator13=(0,_getIterator3.default)(value),_step13;!(_iteratorNormalCompletion13=(_step13=_iterator13.next()).done);_iteratorNormalCompletion13=true){var drawItem=_step13.value;if(drawItem[1]&&drawItem[1].EnableSave===false)continue;itemData.Value.push({Key:drawItem[0],Value:drawItem[1]});}}catch(err){_didIteratorError13=true;_iteratorError13=err;}finally{try{if(!_iteratorNormalCompletion13&&_iterator13.return){_iterator13.return();}}finally{if(_didIteratorError13){throw _iteratorError13;}}}if(IFrameSplitOperator.IsNonEmptyArray(itemData.Value))saveData.push(itemData);}}catch(err){_didIteratorError12=true;_iteratorError12=err;}finally{try{if(!_iteratorNormalCompletion12&&_iterator12.return){_iterator12.return();}}finally{if(_didIteratorError12){throw _iteratorError12;}}}JSConsole.Chart.Log('[ChartDrawStorage::Save] save to localStorage, key='+this.StorageKey);var strData=(0,_stringify2.default)(saveData);localStorage[this.StorageKey]=strData;};this.GetItemKey=function(obj)//生成每个画图工具的key
6377
6386
  {var strKey=obj.Symbol+'-'+obj.Period;return strKey;};this.SaveDrawData=function(drawPicture)//保存一个画图工具
6378
6387
  {var strKey=this.GetItemKey(drawPicture);var data=drawPicture.ExportStorageData();if(!data)return;if(this.DrawData.has(strKey))//更新
6379
6388
  {JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] Upate: key, drawPicture, data',strKey,drawPicture,data);this.DrawData.get(strKey).set(data.Guid,data);}else//新增
6380
6389
  {JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] Insert: key, drawPicture, data',strKey,drawPicture,data);var newData=new _map2.default();newData.set(data.Guid,data);this.DrawData.set(strKey,newData);}JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] All draw data: ',this.DrawData);this.Save();};this.DeleteDrawData=function(drawPicture)//删除一个画图工具
6381
6390
  {var strKey=this.GetItemKey(drawPicture);if(!this.DrawData.has(strKey))return;var mapDraw=this.DrawData.get(strKey);if(!mapDraw.has(drawPicture.Guid))return;mapDraw.delete(drawPicture.Guid);this.Save();};this.Clear=function(){this.DrawData=new _map2.default();this.Save();};this.GetDrawData=function(obj)//获取已有的画图工具数据{Symbol: , Period:, }
6382
- {var data=[];var strKey=this.GetItemKey(obj);if(!this.DrawData.has(strKey))return data;var stockData=this.DrawData.get(strKey);var _iteratorNormalCompletion13=true;var _didIteratorError13=false;var _iteratorError13=undefined;try{for(var _iterator13=(0,_getIterator3.default)(stockData),_step13;!(_iteratorNormalCompletion13=(_step13=_iterator13.next()).done);_iteratorNormalCompletion13=true){var item=_step13.value;data.push(item[1]);}}catch(err){_didIteratorError13=true;_iteratorError13=err;}finally{try{if(!_iteratorNormalCompletion13&&_iterator13.return){_iterator13.return();}}finally{if(_didIteratorError13){throw _iteratorError13;}}}return data;};}/////////////////////////////////////////////////////////////////////////////////////////////////////////
6391
+ {var data=[];var strKey=this.GetItemKey(obj);if(!this.DrawData.has(strKey))return data;var stockData=this.DrawData.get(strKey);var _iteratorNormalCompletion14=true;var _didIteratorError14=false;var _iteratorError14=undefined;try{for(var _iterator14=(0,_getIterator3.default)(stockData),_step14;!(_iteratorNormalCompletion14=(_step14=_iterator14.next()).done);_iteratorNormalCompletion14=true){var item=_step14.value;data.push(item[1]);}}catch(err){_didIteratorError14=true;_iteratorError14=err;}finally{try{if(!_iteratorNormalCompletion14&&_iterator14.return){_iterator14.return();}}finally{if(_didIteratorError14){throw _iteratorError14;}}}return data;};}/////////////////////////////////////////////////////////////////////////////////////////////////////////
6383
6392
  // 数据分割
6384
6393
  // [0]=Start起始 [1]=End结束 [2]=FixInterval修正的间隔 [3]=Increase
6385
6394
  //
@@ -8487,7 +8496,7 @@ this.newMethod('财务粉饰');delete this.newMethod;this.Index=new Array(new In
8487
8496
  this.ApiUrl=g_JSChartResource.Index.StockHistoryDayApiUrl;this.Index[0].LineColor=g_JSChartResource.Index.LineColor[0];this.Index[1].LineColor='rgb(105,105,105)';this.CreateChart=function(id){if(id==0)return new ChartStraightArea();return new ChartLineMultiData();};this.GetOutData=function(){return{Data:this.Data};};//请求数据
8488
8497
  this.RequestData=function(hqChart,windowIndex,hisData){var self=this;var param={HQChart:hqChart,WindowIndex:windowIndex,HistoryData:hisData};this.Data=[];if(param.HQChart.Period!=2)//周期数据
8489
8498
  {this.NotSupport(param.HQChart,param.WindowIndex,"只支持月线");param.HQChart.Draw();this.SendEvent(hqChart,windowIndex,hisData,"只支持月线");return false;}var aryField=["finance.benford","announcement2.quarter","announcement1.quarter","announcement3.quarter","announcement4.quarter"];var aryCondition=[{item:["date","int32","gte","20130101"]},{item:["announcement1.year","int32","gte",0,"announcement2.year","int32","gte",0,"announcement3.year","int32","gte",0,"announcement4.year","int32","gte",0,"or"]}];//请求数据
8490
- JSNetwork.HttpRequest({url:this.ApiUrl,data:{"symbol":[param.HQChart.Symbol],"field":aryField,"condition":aryCondition},type:"post",dataType:"json",async:true,success:function success(recvData){self.RecvData(recvData,param);self.SendEvent(hqChart,windowIndex,hisData);}});return true;};this.JsonDataToMapSingleData=function(recvData){var stockData=recvData.stock[0].stockday;var mapData=new _map2.default();for(var i in stockData){var item=stockData[i];var indexData=new SingleData();indexData.Date=item.date;indexData.Value=new Array();if(item.finance1!=null&&item.announcement1!=null){var year=item.announcement1.year;var quarter=item.announcement1.quarter;var value=item.finance1.benford;indexData.Value.push({Year:year,Quarter:quarter,Value:value});}if(item.finance2!=null&&item.announcement2!=null){var _year=item.announcement2.year;var _quarter=item.announcement2.quarter;var _value=item.finance2.benford;indexData.Value.push({Year:_year,Quarter:_quarter,Value:_value});}if(item.finance3!=null&&item.announcement3!=null){var _year2=item.announcement3.year;var _quarter2=item.announcement3.quarter;var _value2=item.finance3.benford;indexData.Value.push({Year:_year2,Quarter:_quarter2,Value:_value2});}if(item.finance4!=null&&item.announcement4!=null){var _year3=item.announcement4.year;var _quarter3=item.announcement4.quarter;var _value3=item.finance4.benford;indexData.Value.push({Year:_year3,Quarter:_quarter3,Value:_value3});}mapData.set(indexData.Date,indexData);}var aryData=new Array();var _iteratorNormalCompletion14=true;var _didIteratorError14=false;var _iteratorError14=undefined;try{for(var _iterator14=(0,_getIterator3.default)(mapData),_step14;!(_iteratorNormalCompletion14=(_step14=_iterator14.next()).done);_iteratorNormalCompletion14=true){var item=_step14.value;aryData.push(item[1]);}}catch(err){_didIteratorError14=true;_iteratorError14=err;}finally{try{if(!_iteratorNormalCompletion14&&_iterator14.return){_iterator14.return();}}finally{if(_didIteratorError14){throw _iteratorError14;}}}return aryData;};this.RecvData=function(recvData,param){JSConsole.Chart.Log(recvData);if(recvData.stock==null||recvData.stock.length<=0)return;var aryData=this.JsonDataToMapSingleData(recvData);var aryFittingData=param.HistoryData.GetFittingMonthData(aryData);var bindData=new ChartData();bindData.Data=aryFittingData;bindData.Period=param.HQChart.Period;//周期
8499
+ JSNetwork.HttpRequest({url:this.ApiUrl,data:{"symbol":[param.HQChart.Symbol],"field":aryField,"condition":aryCondition},type:"post",dataType:"json",async:true,success:function success(recvData){self.RecvData(recvData,param);self.SendEvent(hqChart,windowIndex,hisData);}});return true;};this.JsonDataToMapSingleData=function(recvData){var stockData=recvData.stock[0].stockday;var mapData=new _map2.default();for(var i in stockData){var item=stockData[i];var indexData=new SingleData();indexData.Date=item.date;indexData.Value=new Array();if(item.finance1!=null&&item.announcement1!=null){var year=item.announcement1.year;var quarter=item.announcement1.quarter;var value=item.finance1.benford;indexData.Value.push({Year:year,Quarter:quarter,Value:value});}if(item.finance2!=null&&item.announcement2!=null){var _year=item.announcement2.year;var _quarter=item.announcement2.quarter;var _value=item.finance2.benford;indexData.Value.push({Year:_year,Quarter:_quarter,Value:_value});}if(item.finance3!=null&&item.announcement3!=null){var _year2=item.announcement3.year;var _quarter2=item.announcement3.quarter;var _value2=item.finance3.benford;indexData.Value.push({Year:_year2,Quarter:_quarter2,Value:_value2});}if(item.finance4!=null&&item.announcement4!=null){var _year3=item.announcement4.year;var _quarter3=item.announcement4.quarter;var _value3=item.finance4.benford;indexData.Value.push({Year:_year3,Quarter:_quarter3,Value:_value3});}mapData.set(indexData.Date,indexData);}var aryData=new Array();var _iteratorNormalCompletion15=true;var _didIteratorError15=false;var _iteratorError15=undefined;try{for(var _iterator15=(0,_getIterator3.default)(mapData),_step15;!(_iteratorNormalCompletion15=(_step15=_iterator15.next()).done);_iteratorNormalCompletion15=true){var item=_step15.value;aryData.push(item[1]);}}catch(err){_didIteratorError15=true;_iteratorError15=err;}finally{try{if(!_iteratorNormalCompletion15&&_iterator15.return){_iterator15.return();}}finally{if(_didIteratorError15){throw _iteratorError15;}}}return aryData;};this.RecvData=function(recvData,param){JSConsole.Chart.Log(recvData);if(recvData.stock==null||recvData.stock.length<=0)return;var aryData=this.JsonDataToMapSingleData(recvData);var aryFittingData=param.HistoryData.GetFittingMonthData(aryData);var bindData=new ChartData();bindData.Data=aryFittingData;bindData.Period=param.HQChart.Period;//周期
8491
8500
  bindData.Right=param.HQChart.Right;//复权
8492
8501
  this.Data=bindData.GetValue();this.BindData(param.HQChart,param.WindowIndex,param.HistoryData);param.HQChart.UpdataDataoffset();//更新数据偏移
8493
8502
  param.HQChart.UpdateFrameMaxMin();//调整坐标最大 最小值
@@ -9605,11 +9614,11 @@ this.ErrorHandler=ErrorHandler;this.GetDataJobList=function()//下载数据任
9605
9614
  {var jobs=[];if(this.IsNeedSymbolData)jobs.push({ID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_SYMBOL_DATA});if(this.IsNeedIndexData)jobs.push({ID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_INDEX_DATA});if(this.IsNeedLatestIndexData)jobs.push({ID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_LATEST_INDEX_DATA});//最新的个股行情数据
9606
9615
  for(var i=0;i<this.Dynainfo.length;++i){var item=this.Dynainfo[i];jobs.push(item);}//涨跌停家数统计
9607
9616
  for(var i in this.NeedBlockIncreaseData){jobs.push(this.NeedBlockIncreaseData[i]);}//加载融资融券
9608
- var _iteratorNormalCompletion15=true;var _didIteratorError15=false;var _iteratorError15=undefined;try{for(var _iterator15=(0,_getIterator3.default)(this.IsNeedMarginData),_step15;!(_iteratorNormalCompletion15=(_step15=_iterator15.next()).done);_iteratorNormalCompletion15=true){var jobID=_step15.value;jobs.push({ID:jobID});}//加载北上资金
9609
- }catch(err){_didIteratorError15=true;_iteratorError15=err;}finally{try{if(!_iteratorNormalCompletion15&&_iterator15.return){_iterator15.return();}}finally{if(_didIteratorError15){throw _iteratorError15;}}}for(var i in this.NeedHK2SHSZData){jobs.push(this.NeedHK2SHSZData[i]);}//加载新闻统计
9610
- var _iteratorNormalCompletion16=true;var _didIteratorError16=false;var _iteratorError16=undefined;try{for(var _iterator16=(0,_getIterator3.default)(this.IsNeedNewsAnalysisData),_step16;!(_iteratorNormalCompletion16=(_step16=_iterator16.next()).done);_iteratorNormalCompletion16=true){var jobID=_step16.value;jobs.push({ID:jobID});}//行情其他数据
9611
- }catch(err){_didIteratorError16=true;_iteratorError16=err;}finally{try{if(!_iteratorNormalCompletion16&&_iterator16.return){_iterator16.return();}}finally{if(_didIteratorError16){throw _iteratorError16;}}}var _iteratorNormalCompletion17=true;var _didIteratorError17=false;var _iteratorError17=undefined;try{for(var _iterator17=(0,_getIterator3.default)(this.IsNeedSymbolExData),_step17;!(_iteratorNormalCompletion17=(_step17=_iterator17.next()).done);_iteratorNormalCompletion17=true){var jobID=_step17.value;jobs.push({ID:jobID});}//获取截面数据下载任务
9612
- }catch(err){_didIteratorError17=true;_iteratorError17=err;}finally{try{if(!_iteratorNormalCompletion17&&_iterator17.return){_iterator17.return();}}finally{if(_didIteratorError17){throw _iteratorError17;}}}var _iteratorNormalCompletion18=true;var _didIteratorError18=false;var _iteratorError18=undefined;try{for(var _iterator18=(0,_getIterator3.default)(this.IsNeedSectionFinance),_step18;!(_iteratorNormalCompletion18=(_step18=_iterator18.next()).done);_iteratorNormalCompletion18=true){var item=_step18.value;jobs.push({ID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_SECTION_SF,SF:item});}}catch(err){_didIteratorError18=true;_iteratorError18=err;}finally{try{if(!_iteratorNormalCompletion18&&_iterator18.return){_iterator18.return();}}finally{if(_didIteratorError18){throw _iteratorError18;}}}for(var i in this.IsAPIData){var item=this.IsAPIData[i];jobs.push(item);}for(var i in this.ExecuteIndex){var item=this.ExecuteIndex[i];jobs.push(item);}for(var i in this.OtherSymbolData){var item=this.OtherSymbolData[i];jobs.push(item);}for(var i in this.PeriodSymbolData){var item=this.PeriodSymbolData[i];jobs.push(item);}for(var i in this.FunctionData){var item=this.FunctionData[i];jobs.push(item);}return jobs;};this.VerifySymbolVariable=function(varName,token){var setIndexName=new _set2.default(['INDEXA','INDEXC','INDEXH','INDEXL',"INDEXO","INDEXV",'INDEXDEC','INDEXADV']);if(setIndexName.has(varName)){this.IsNeedIndexData=true;return;}var setSymbolDataName=new _set2.default(['CLOSE','C','VOL','V','OPEN','O','HIGH','H','LOW','L','AMOUNT','AMO','VOLINSTK']);if(setSymbolDataName.has(varName)){this.IsNeedSymbolData=true;return;}if(varName==='VOLR'){if(!this.IsNeedSymbolExData.has(JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_VOLR_DATA))this.IsNeedSymbolExData.add(JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_VOLR_DATA);}//CAPITAL流通股本(手), EXCHANGE 换手率, TOTALCAPITAL 总股本(手)
9617
+ var _iteratorNormalCompletion16=true;var _didIteratorError16=false;var _iteratorError16=undefined;try{for(var _iterator16=(0,_getIterator3.default)(this.IsNeedMarginData),_step16;!(_iteratorNormalCompletion16=(_step16=_iterator16.next()).done);_iteratorNormalCompletion16=true){var jobID=_step16.value;jobs.push({ID:jobID});}//加载北上资金
9618
+ }catch(err){_didIteratorError16=true;_iteratorError16=err;}finally{try{if(!_iteratorNormalCompletion16&&_iterator16.return){_iterator16.return();}}finally{if(_didIteratorError16){throw _iteratorError16;}}}for(var i in this.NeedHK2SHSZData){jobs.push(this.NeedHK2SHSZData[i]);}//加载新闻统计
9619
+ var _iteratorNormalCompletion17=true;var _didIteratorError17=false;var _iteratorError17=undefined;try{for(var _iterator17=(0,_getIterator3.default)(this.IsNeedNewsAnalysisData),_step17;!(_iteratorNormalCompletion17=(_step17=_iterator17.next()).done);_iteratorNormalCompletion17=true){var jobID=_step17.value;jobs.push({ID:jobID});}//行情其他数据
9620
+ }catch(err){_didIteratorError17=true;_iteratorError17=err;}finally{try{if(!_iteratorNormalCompletion17&&_iterator17.return){_iterator17.return();}}finally{if(_didIteratorError17){throw _iteratorError17;}}}var _iteratorNormalCompletion18=true;var _didIteratorError18=false;var _iteratorError18=undefined;try{for(var _iterator18=(0,_getIterator3.default)(this.IsNeedSymbolExData),_step18;!(_iteratorNormalCompletion18=(_step18=_iterator18.next()).done);_iteratorNormalCompletion18=true){var jobID=_step18.value;jobs.push({ID:jobID});}//获取截面数据下载任务
9621
+ }catch(err){_didIteratorError18=true;_iteratorError18=err;}finally{try{if(!_iteratorNormalCompletion18&&_iterator18.return){_iterator18.return();}}finally{if(_didIteratorError18){throw _iteratorError18;}}}var _iteratorNormalCompletion19=true;var _didIteratorError19=false;var _iteratorError19=undefined;try{for(var _iterator19=(0,_getIterator3.default)(this.IsNeedSectionFinance),_step19;!(_iteratorNormalCompletion19=(_step19=_iterator19.next()).done);_iteratorNormalCompletion19=true){var item=_step19.value;jobs.push({ID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_SECTION_SF,SF:item});}}catch(err){_didIteratorError19=true;_iteratorError19=err;}finally{try{if(!_iteratorNormalCompletion19&&_iterator19.return){_iterator19.return();}}finally{if(_didIteratorError19){throw _iteratorError19;}}}for(var i in this.IsAPIData){var item=this.IsAPIData[i];jobs.push(item);}for(var i in this.ExecuteIndex){var item=this.ExecuteIndex[i];jobs.push(item);}for(var i in this.OtherSymbolData){var item=this.OtherSymbolData[i];jobs.push(item);}for(var i in this.PeriodSymbolData){var item=this.PeriodSymbolData[i];jobs.push(item);}for(var i in this.FunctionData){var item=this.FunctionData[i];jobs.push(item);}return jobs;};this.VerifySymbolVariable=function(varName,token){var setIndexName=new _set2.default(['INDEXA','INDEXC','INDEXH','INDEXL',"INDEXO","INDEXV",'INDEXDEC','INDEXADV']);if(setIndexName.has(varName)){this.IsNeedIndexData=true;return;}var setSymbolDataName=new _set2.default(['CLOSE','C','VOL','V','OPEN','O','HIGH','H','LOW','L','AMOUNT','AMO','VOLINSTK']);if(setSymbolDataName.has(varName)){this.IsNeedSymbolData=true;return;}if(varName==='VOLR'){if(!this.IsNeedSymbolExData.has(JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_VOLR_DATA))this.IsNeedSymbolExData.add(JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_VOLR_DATA);}//CAPITAL流通股本(手), EXCHANGE 换手率, TOTALCAPITAL 总股本(手)
9613
9622
  var setVariantName=new _set2.default(["CAPITAL","TOTALCAPITAL","EXCHANGE","HYBLOCK","DYBLOCK","GNBLOCK","FGBLOCK","ZSBLOCK","ZHBLOCK","ZDBLOCK","HYZSCODE","GNBLOCKNUM","FGBLOCKNUM","ZSBLOCKNUM","ZHBLOCKNUM","ZDBLOCKNUM","HYSYL","HYSJL"]);if(setVariantName.has(varName)){var item={ID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_VARIANT,VariantName:varName};if(token)item.Token={Index:token.Start,Line:token.LineNumber};this.FunctionData.push(item);return;}if(varName=='FROMOPEN'){this.IsNeedLatestIndexData=true;return;}if(varName=='ADVANCE'||varName=="DECLINE"){var item={ID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_INDEX_INCREASE_DATA,IsSelfSymbol:true,FunctionName:varName};if(token)item.Token={Index:token.Start,Line:token.LineNumber};this.NeedBlockIncreaseData.push(item);return;}if(varName.indexOf('#')>0){var aryWrods=varName.split('#');if(aryWrods.length!=2){var errorMessage=varName+', \u8DE8\u5468\u671F\u8BED\u6CD5\u9519\u8BEF, \u53D8\u91CF\u540D#\u5468\u671F';this.ThrowUnexpectedToken(token,errorMessage);}else{var VAR_NAME=["C","CLOSE","O","OPEN","H","HIGH","L","LOW","AMOUNT","AMO","VOL","V","VOLINSTK"];if(VAR_NAME.indexOf(aryWrods[0])<0){var errorMessage=varName+', \u8DE8\u5468\u671F\u8BED\u6CD5\u9519\u8BEF, \u6570\u636E\u53EA\u652F\u6301\'OPEN,HIGH,LOW,CLOSE,VOL,AMOUNT,VOLINSTK\'';this.ThrowUnexpectedToken(token,errorMessage);}var VAR_PERIOD_NAME=["MIN1","MIN5","MIN15","MIN30","MIN60","MIN120","MIN240","DAY","WEEK","MONTH","SEASON","YEAR","HALFYEAR","WEEK2","MULTIDAY","DAY2","DAY3","DAY4","DAY5","DAY6","DAY7","DAY8","DAY9","DAY10","DAY11","DAY12","DAY13","DAY14","DAY15"];if(VAR_PERIOD_NAME.indexOf(aryWrods[1])<0){var errorMessage=varName+', \u8DE8\u5468\u671F\u8BED\u6CD5\u9519\u8BEF\uFF0C \u5468\u671F\u53EA\u652F\u6301\'MIN1,MIN5,MIN15,MIN30,MIN60,DAY,WEEK,MONTH,SEASON,YEAR\'';this.ThrowUnexpectedToken(token,errorMessage);}var item={ID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_SYMBOL_PERIOD_DATA,VarName:varName,ValueName:aryWrods[0],PeriodName:aryWrods[1]};if(token)item.Token={Index:token.Start,Line:token.LineNumber};this.PeriodSymbolData.push(item);}return;}if(g_JSComplierResource.IsCustomVariant(varName))//自定义函数
9614
9623
  {var item={VariantName:varName,ID:JS_EXECUTE_JOB_ID.JOB_CUSTOM_VARIANT_DATA};if(token)item.Token={Index:token.Start,Line:token.LineNumber};this.FunctionData.push(item);return;}};this.VerifySymbolLiteral=function(value,token){if(IFrameSplitOperator.IsString(value)){if(value.indexOf('$')>0){var aryValue=value.split('$');if(aryValue.length!=2)return;var item={Literal:value,ID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_OTHER_SYMBOL_DATA};if(token)item.Token={Index:token.Start,Line:token.LineNumber};this.OtherSymbolData.push(item);}}};this.VerifySymbolFunction=function(callee,args,token){//自定义函数 可以覆盖系统内置函数
9615
9624
  if(g_JSComplierResource.IsCustomFunction(callee.Name)){var item={FunctionName:callee.Name,ID:JS_EXECUTE_JOB_ID.JOB_CUSTOM_FUNCTION_DATA,Args:args};if(token)item.Token={Index:token.Start,Line:token.LineNumber};this.FunctionData.push(item);return;}if(callee.Name=='DYNAINFO'){var item={ID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_SYMBOL_LATEST_DATA,Args:args,FunctionName:callee.Name};this.Dynainfo.push(item);return;}//财务函数
@@ -10437,7 +10446,7 @@ this.ALL=function(data,n){if(n<=0)n=1;var result=[];if(Array.isArray(data)){if(n
10437
10446
  }return result;};//格式化字符串 "{0}-{1}", C, O; 小数位数 {0:0.00}
10438
10447
  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}
10439
10448
  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;//是否输出数组字符串
10440
- 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;}};//函数调用
10449
+ 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 _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){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){_didIteratorError20=true;_iteratorError20=err;}finally{try{if(!_iteratorNormalCompletion20&&_iterator20.return){_iterator20.return();}}finally{if(_didIteratorError20){throw _iteratorError20;}}}result[i]=strItem;}return result;}else{var result=strFormat;var _iteratorNormalCompletion21=true;var _didIteratorError21=false;var _iteratorError21=undefined;try{for(var _iterator21=(0,_getIterator3.default)(mapParam),_step21;!(_iteratorNormalCompletion21=(_step21=_iterator21.next()).done);_iteratorNormalCompletion21=true){var item=_step21.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){_didIteratorError21=true;_iteratorError21=err;}finally{try{if(!_iteratorNormalCompletion21&&_iterator21.return){_iterator21.return();}}finally{if(_didIteratorError21){throw _iteratorError21;}}}return result;}};//函数调用
10441
10450
  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"://文华函数
10442
10451
  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"STDDEV":return this.STDDEV(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]);//三角函数
10443
10452
  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:绘图数据(可选)}
@@ -12258,7 +12267,7 @@ for(var i=0;i<data.data.length;++i){var item=data.data[i];var symbol=item[0];var
12258
12267
  this.GetStockData=function(symbol){if(!this.MapStockData)return null;if(!this.MapStockData.has(symbol))return null;return this.MapStockData.get(symbol);};this.GetBlockData=function(symbol){if(!this.BlockData)return null;if(!this.BlockData.has(symbol))return null;return this.BlockData.get(symbol);};//obj={ ID:, Color: , Time:, Count: }
12259
12268
  this.SetFlashBGItem=function(symbol,obj){var item={ID:obj.ID,Color:obj.Color,Count:1};if(IFrameSplitOperator.IsNumber(obj.Count))item.Count=obj.Count;if(IFrameSplitOperator.IsNumber(obj.Time))item.Time=obj.Time;else item.Time=Date.now();if(this.FlashBG.has(symbol)){var stockItem=this.FlashBG.get(symbol);stockItem.LastTime=item.Time;stockItem.Data.set(item.ID,item);}else{var stockItem={LastTime:item.Time,Data:new _map2.default([[item.ID,item]])};this.FlashBG.set(symbol,stockItem);}};this.GetFlashBGData=function(symbol,time){if(!this.FlashBG)return null;if(!this.FlashBG.has(symbol))return null;var timeDiff=3*1000;var stockItem=this.FlashBG.get(symbol);if(time-stockItem.LastTime>=timeDiff)//超时的删除
12260
12269
  {this.FlashBG.delete(symbol);return null;}if(!stockItem.Data||stockItem.Data.size<=0){this.FlashBG.delete(symbol);return null;}var aryDelID=[];//超时需要参数的
12261
- var _iteratorNormalCompletion21=true;var _didIteratorError21=false;var _iteratorError21=undefined;try{for(var _iterator21=(0,_getIterator3.default)(stockItem.Data),_step21;!(_iteratorNormalCompletion21=(_step21=_iterator21.next()).done);_iteratorNormalCompletion21=true){var mapItem=_step21.value;var item=mapItem[1];if(time-item.Time>=timeDiff||item.Count<=0)aryDelID.push(item.ID);}}catch(err){_didIteratorError21=true;_iteratorError21=err;}finally{try{if(!_iteratorNormalCompletion21&&_iterator21.return){_iterator21.return();}}finally{if(_didIteratorError21){throw _iteratorError21;}}}if(IFrameSplitOperator.IsNonEmptyArray(aryDelID)){for(var i=0;i<aryDelID.length;++i){stockItem.Data.delete(aryDelID[i]);}if(stockItem.Data.size<=0){this.FlashBG.delete(symbol);return null;}}return stockItem;};//delay=是否延迟
12270
+ var _iteratorNormalCompletion22=true;var _didIteratorError22=false;var _iteratorError22=undefined;try{for(var _iterator22=(0,_getIterator3.default)(stockItem.Data),_step22;!(_iteratorNormalCompletion22=(_step22=_iterator22.next()).done);_iteratorNormalCompletion22=true){var mapItem=_step22.value;var item=mapItem[1];if(time-item.Time>=timeDiff||item.Count<=0)aryDelID.push(item.ID);}}catch(err){_didIteratorError22=true;_iteratorError22=err;}finally{try{if(!_iteratorNormalCompletion22&&_iterator22.return){_iterator22.return();}}finally{if(_didIteratorError22){throw _iteratorError22;}}}if(IFrameSplitOperator.IsNonEmptyArray(aryDelID)){for(var i=0;i<aryDelID.length;++i){stockItem.Data.delete(aryDelID[i]);}if(stockItem.Data.size<=0){this.FlashBG.delete(symbol);return null;}}return stockItem;};//delay=是否延迟
12262
12271
  this.DelayUpdateStockData=function(){var _this52=this;if(this.DelayUpdateTimer!=null){clearTimeout(this.DelayUpdateTimer);this.DelayUpdateTimer=null;}var frequency=this.DelayUpdateFrequency;this.DelayUpdateTimer=setTimeout(function(){_this52.UpdateStockData();},frequency);};this.UpdateStockData=function(){if(!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data))return;var chart=this.ChartPaint[0];if(!chart)return;if(this.SortInfo&&this.SortInfo.Field>=0&&this.SortInfo.Sort>0){var column=chart.Column[this.SortInfo.Field];if(column.Sort==2){this.RequestStockSortData(column,this.SortInfo.Field,this.SortInfo.Sort);//远程排序
12263
12272
  return;}}var arySymbol=chart.ShowSymbol;if(!IFrameSplitOperator.IsNonEmptyArray(arySymbol))return;this.RequestStockData(arySymbol);};//下载股票数据
12264
12273
  this.RequestStockData=function(arySymbol){var self=this;if(this.NetworkFilter){var obj={Name:'JSDealChartContainer::RequestStockData',//类名::函数名
@@ -12830,7 +12839,7 @@ hisData.Symbol=message.symbol;}var stockObj={HQDataType:HQ_DATA_TYPE.KLINE_ID,St
12830
12839
  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);};}/********************************************************************************
12831
12840
  * 版本信息输出
12832
12841
  *
12833
- */var HQCHART_VERSION="1.1.12673";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();//把给外界调用的方法暴露出来
12842
+ */var HQCHART_VERSION="1.1.12677";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();//把给外界调用的方法暴露出来
12834
12843
  exports.default=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
12835
12844
  // BaseIndex:BaseIndex,
12836
12845
  // 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.12674",
5
+ "version": "1.1.12678",
6
6
  "main": "lib/main.js",
7
7
  "private": false,
8
8
  "license": "Apache License 2.0",
@@ -6671,8 +6671,137 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6671
6671
  this.Frame.ResetXYSplit();
6672
6672
  }
6673
6673
 
6674
+ this.UpdateFrameMaxMinV2=function()
6675
+ {
6676
+ var mapFrame=new Map(); //key=frameid, value:{ ChartPaint:[] }
6677
+ for(var i=0;i<this.Frame.SubFrame.length;++i)
6678
+ {
6679
+ var subItem=this.Frame.SubFrame[i];
6680
+ if (!subItem || !subItem.Frame) continue;
6681
+
6682
+ var frame=subItem.Frame;
6683
+ var key=frame.Identify;
6684
+ var item=
6685
+ {
6686
+ ID:key, Frame:frame, ChartPaint:[] , Max:null, Min:null,
6687
+ OverlayFrame:[], //共享坐标
6688
+ SingleOverlay:[] //独立坐标
6689
+ };
6690
+
6691
+ for(var j=0;j<subItem.OverlayIndex.length;++j)
6692
+ {
6693
+ var overlayItem=subItem.OverlayIndex[j];
6694
+ var overlayFrame=overlayItem.Frame;
6695
+ if (overlayFrame.IsShareY)
6696
+ {
6697
+ if (!overlayFrame.MainFrame) continue;
6698
+ if (overlayFrame.IsCalculateYMaxMin===false) continue; //叠加坐标Y轴不调整
6699
+ item.OverlayFrame.push(overlayFrame);
6700
+ for(var k=0; k<overlayItem.ChartPaint.length; ++k)
6701
+ {
6702
+ var chart=overlayItem.ChartPaint[k];
6703
+ item.ChartPaint.push(chart);
6704
+ }
6705
+ }
6706
+ else
6707
+ {
6708
+ item.SingleOverlay.push(overlayItem);
6709
+ }
6710
+
6711
+ }
6712
+
6713
+ mapFrame.set(key, item);
6714
+ }
6715
+
6716
+ for(var i=0;i<this.ChartPaint.length;++i)
6717
+ {
6718
+ var chart=this.ChartPaint[i];
6719
+ var key=chart.ChartFrame.Identify;
6720
+ if (!mapFrame.has(key)) continue;
6721
+
6722
+ var finder=mapFrame.get(key);
6723
+ finder.ChartPaint.push(chart);
6724
+ }
6725
+
6726
+ for(var i=0;i<this.OverlayChartPaint.length;++i)
6727
+ {
6728
+ var chart=this.OverlayChartPaint[i];
6729
+ if (!chart.ChartFrame) continue;
6730
+ var key=chart.ChartFrame.Identify;
6731
+ if (!mapFrame.has(key)) continue;
6732
+
6733
+ var finder=mapFrame.get(key);
6734
+ finder.ChartPaint.push(chart);
6735
+ }
6736
+
6737
+ for(var mapItem of mapFrame)
6738
+ {
6739
+ var item=mapItem[1];
6740
+ var frame=item.Frame;
6741
+ //计算主框架最大最小
6742
+ for(var i=0;i<item.ChartPaint.length;++i)
6743
+ {
6744
+ var chart=item.ChartPaint[i];
6745
+ if (chart.IsShow==false) continue; //隐藏的图形不计算
6746
+ if (chart.NotSupportMessage) continue;
6747
+ if (!chart.ChartFrame) continue;
6748
+
6749
+ var range=chart.GetMaxMin();
6750
+ if (range==null || range.Max==null || range.Min==null) continue;
6751
+
6752
+ if (item.Max==null || item.Max<range.Max) item.Max=range.Max;
6753
+ if (item.Min==null || item.Min>range.Min) item.Min=range.Min;
6754
+ }
6755
+
6756
+ if (item.Frame.YSpecificMaxMin) //固定坐标
6757
+ {
6758
+ item.Min=item.Frame.YSpecificMaxMin.Max;
6759
+ item.Max=item.Frame.YSpecificMaxMin.Min;
6760
+ }
6761
+
6762
+ if (!IFrameSplitOperator.IsNumber(frame.YMaxMin.Max) || frame.YMaxMin.Max!=item.Max)
6763
+ {
6764
+ frame.YMaxMin.Max=item.Max;
6765
+ frame.XYSplit=true;
6766
+ }
6767
+
6768
+ if (!IFrameSplitOperator.IsNumber(frame.YMaxMin.Min) || frame.YMaxMin.Min!=item.Min)
6769
+ {
6770
+ frame.YMaxMin.Min=item.Min
6771
+ frame.XYSplit=true;
6772
+ }
6773
+
6774
+ if (frame.XYSplit)
6775
+ {
6776
+ var max=10, min=0;
6777
+ if (item.Max!=null) max=item.Max;
6778
+ if (item.Min!=null) min=item.Min;
6779
+
6780
+ frame.HorizontalMax=max;
6781
+ frame.HorizontalMin=min;
6782
+
6783
+ for(var j=0;j<item.OverlayFrame.length;++j)
6784
+ {
6785
+ item.OverlayFrame[j].XYSplit=true;
6786
+ }
6787
+ }
6788
+
6789
+
6790
+ //独立坐标叠加指标
6791
+ for(var i=0;i<item.SingleOverlay.length;++i)
6792
+ {
6793
+ var overlayItem=item.SingleOverlay[i];
6794
+ overlayItem.UpdateFrameMaxMin();
6795
+ }
6796
+ }
6797
+ }
6798
+
6674
6799
  this.UpdateFrameMaxMin=function()
6675
6800
  {
6801
+ this.UpdateFrameMaxMinV2();
6802
+
6803
+ return;
6804
+
6676
6805
  var frameMaxMinData=new Array();
6677
6806
 
6678
6807
  var chartPaint=new Array();
@@ -9046,6 +9175,9 @@ function IChartFramePainting()
9046
9175
  this.HorizontalMin; //Y轴最小值
9047
9176
  this.XPointCount=10; //X轴数据个数
9048
9177
 
9178
+ //Y轴原始的最大值 最小值
9179
+ this.YMaxMin={ Max:null, Min:null };
9180
+
9049
9181
  this.YSplitOperator; //Y轴分割
9050
9182
  this.XSplitOperator; //X轴分割
9051
9183
  this.Data; //主数据
@@ -10815,8 +10815,137 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10815
10815
  this.Frame.ResetXYSplit();
10816
10816
  }
10817
10817
 
10818
+ this.UpdateFrameMaxMinV2=function()
10819
+ {
10820
+ var mapFrame=new Map(); //key=frameid, value:{ ChartPaint:[] }
10821
+ for(var i=0;i<this.Frame.SubFrame.length;++i)
10822
+ {
10823
+ var subItem=this.Frame.SubFrame[i];
10824
+ if (!subItem || !subItem.Frame) continue;
10825
+
10826
+ var frame=subItem.Frame;
10827
+ var key=frame.Identify;
10828
+ var item=
10829
+ {
10830
+ ID:key, Frame:frame, ChartPaint:[] , Max:null, Min:null,
10831
+ OverlayFrame:[], //共享坐标
10832
+ SingleOverlay:[] //独立坐标
10833
+ };
10834
+
10835
+ for(var j=0;j<subItem.OverlayIndex.length;++j)
10836
+ {
10837
+ var overlayItem=subItem.OverlayIndex[j];
10838
+ var overlayFrame=overlayItem.Frame;
10839
+ if (overlayFrame.IsShareY)
10840
+ {
10841
+ if (!overlayFrame.MainFrame) continue;
10842
+ if (overlayFrame.IsCalculateYMaxMin===false) continue; //叠加坐标Y轴不调整
10843
+ item.OverlayFrame.push(overlayFrame);
10844
+ for(var k=0; k<overlayItem.ChartPaint.length; ++k)
10845
+ {
10846
+ var chart=overlayItem.ChartPaint[k];
10847
+ item.ChartPaint.push(chart);
10848
+ }
10849
+ }
10850
+ else
10851
+ {
10852
+ item.SingleOverlay.push(overlayItem);
10853
+ }
10854
+
10855
+ }
10856
+
10857
+ mapFrame.set(key, item);
10858
+ }
10859
+
10860
+ for(var i=0;i<this.ChartPaint.length;++i)
10861
+ {
10862
+ var chart=this.ChartPaint[i];
10863
+ var key=chart.ChartFrame.Identify;
10864
+ if (!mapFrame.has(key)) continue;
10865
+
10866
+ var finder=mapFrame.get(key);
10867
+ finder.ChartPaint.push(chart);
10868
+ }
10869
+
10870
+ for(var i=0;i<this.OverlayChartPaint.length;++i)
10871
+ {
10872
+ var chart=this.OverlayChartPaint[i];
10873
+ if (!chart.ChartFrame) continue;
10874
+ var key=chart.ChartFrame.Identify;
10875
+ if (!mapFrame.has(key)) continue;
10876
+
10877
+ var finder=mapFrame.get(key);
10878
+ finder.ChartPaint.push(chart);
10879
+ }
10880
+
10881
+ for(var mapItem of mapFrame)
10882
+ {
10883
+ var item=mapItem[1];
10884
+ var frame=item.Frame;
10885
+ //计算主框架最大最小
10886
+ for(var i=0;i<item.ChartPaint.length;++i)
10887
+ {
10888
+ var chart=item.ChartPaint[i];
10889
+ if (chart.IsShow==false) continue; //隐藏的图形不计算
10890
+ if (chart.NotSupportMessage) continue;
10891
+ if (!chart.ChartFrame) continue;
10892
+
10893
+ var range=chart.GetMaxMin();
10894
+ if (range==null || range.Max==null || range.Min==null) continue;
10895
+
10896
+ if (item.Max==null || item.Max<range.Max) item.Max=range.Max;
10897
+ if (item.Min==null || item.Min>range.Min) item.Min=range.Min;
10898
+ }
10899
+
10900
+ if (item.Frame.YSpecificMaxMin) //固定坐标
10901
+ {
10902
+ item.Min=item.Frame.YSpecificMaxMin.Max;
10903
+ item.Max=item.Frame.YSpecificMaxMin.Min;
10904
+ }
10905
+
10906
+ if (!IFrameSplitOperator.IsNumber(frame.YMaxMin.Max) || frame.YMaxMin.Max!=item.Max)
10907
+ {
10908
+ frame.YMaxMin.Max=item.Max;
10909
+ frame.XYSplit=true;
10910
+ }
10911
+
10912
+ if (!IFrameSplitOperator.IsNumber(frame.YMaxMin.Min) || frame.YMaxMin.Min!=item.Min)
10913
+ {
10914
+ frame.YMaxMin.Min=item.Min
10915
+ frame.XYSplit=true;
10916
+ }
10917
+
10918
+ if (frame.XYSplit)
10919
+ {
10920
+ var max=10, min=0;
10921
+ if (item.Max!=null) max=item.Max;
10922
+ if (item.Min!=null) min=item.Min;
10923
+
10924
+ frame.HorizontalMax=max;
10925
+ frame.HorizontalMin=min;
10926
+
10927
+ for(var j=0;j<item.OverlayFrame.length;++j)
10928
+ {
10929
+ item.OverlayFrame[j].XYSplit=true;
10930
+ }
10931
+ }
10932
+
10933
+
10934
+ //独立坐标叠加指标
10935
+ for(var i=0;i<item.SingleOverlay.length;++i)
10936
+ {
10937
+ var overlayItem=item.SingleOverlay[i];
10938
+ overlayItem.UpdateFrameMaxMin();
10939
+ }
10940
+ }
10941
+ }
10942
+
10818
10943
  this.UpdateFrameMaxMin=function()
10819
10944
  {
10945
+ this.UpdateFrameMaxMinV2();
10946
+
10947
+ return;
10948
+
10820
10949
  var frameMaxMinData=new Array();
10821
10950
 
10822
10951
  var chartPaint=new Array();
@@ -13190,6 +13319,9 @@ function IChartFramePainting()
13190
13319
  this.HorizontalMin; //Y轴最小值
13191
13320
  this.XPointCount=10; //X轴数据个数
13192
13321
 
13322
+ //Y轴原始的最大值 最小值
13323
+ this.YMaxMin={ Max:null, Min:null };
13324
+
13193
13325
  this.YSplitOperator; //Y轴分割
13194
13326
  this.XSplitOperator; //X轴分割
13195
13327
  this.Data; //主数据
@@ -130383,7 +130515,7 @@ function ScrollBarBGChart()
130383
130515
 
130384
130516
 
130385
130517
 
130386
- var HQCHART_VERSION="1.1.12673";
130518
+ var HQCHART_VERSION="1.1.12677";
130387
130519
 
130388
130520
  function PrintHQChartVersion()
130389
130521
  {
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.12673";
8
+ var HQCHART_VERSION="1.1.12677";
9
9
 
10
10
  function PrintHQChartVersion()
11
11
  {
@@ -10859,8 +10859,137 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10859
10859
  this.Frame.ResetXYSplit();
10860
10860
  }
10861
10861
 
10862
+ this.UpdateFrameMaxMinV2=function()
10863
+ {
10864
+ var mapFrame=new Map(); //key=frameid, value:{ ChartPaint:[] }
10865
+ for(var i=0;i<this.Frame.SubFrame.length;++i)
10866
+ {
10867
+ var subItem=this.Frame.SubFrame[i];
10868
+ if (!subItem || !subItem.Frame) continue;
10869
+
10870
+ var frame=subItem.Frame;
10871
+ var key=frame.Identify;
10872
+ var item=
10873
+ {
10874
+ ID:key, Frame:frame, ChartPaint:[] , Max:null, Min:null,
10875
+ OverlayFrame:[], //共享坐标
10876
+ SingleOverlay:[] //独立坐标
10877
+ };
10878
+
10879
+ for(var j=0;j<subItem.OverlayIndex.length;++j)
10880
+ {
10881
+ var overlayItem=subItem.OverlayIndex[j];
10882
+ var overlayFrame=overlayItem.Frame;
10883
+ if (overlayFrame.IsShareY)
10884
+ {
10885
+ if (!overlayFrame.MainFrame) continue;
10886
+ if (overlayFrame.IsCalculateYMaxMin===false) continue; //叠加坐标Y轴不调整
10887
+ item.OverlayFrame.push(overlayFrame);
10888
+ for(var k=0; k<overlayItem.ChartPaint.length; ++k)
10889
+ {
10890
+ var chart=overlayItem.ChartPaint[k];
10891
+ item.ChartPaint.push(chart);
10892
+ }
10893
+ }
10894
+ else
10895
+ {
10896
+ item.SingleOverlay.push(overlayItem);
10897
+ }
10898
+
10899
+ }
10900
+
10901
+ mapFrame.set(key, item);
10902
+ }
10903
+
10904
+ for(var i=0;i<this.ChartPaint.length;++i)
10905
+ {
10906
+ var chart=this.ChartPaint[i];
10907
+ var key=chart.ChartFrame.Identify;
10908
+ if (!mapFrame.has(key)) continue;
10909
+
10910
+ var finder=mapFrame.get(key);
10911
+ finder.ChartPaint.push(chart);
10912
+ }
10913
+
10914
+ for(var i=0;i<this.OverlayChartPaint.length;++i)
10915
+ {
10916
+ var chart=this.OverlayChartPaint[i];
10917
+ if (!chart.ChartFrame) continue;
10918
+ var key=chart.ChartFrame.Identify;
10919
+ if (!mapFrame.has(key)) continue;
10920
+
10921
+ var finder=mapFrame.get(key);
10922
+ finder.ChartPaint.push(chart);
10923
+ }
10924
+
10925
+ for(var mapItem of mapFrame)
10926
+ {
10927
+ var item=mapItem[1];
10928
+ var frame=item.Frame;
10929
+ //计算主框架最大最小
10930
+ for(var i=0;i<item.ChartPaint.length;++i)
10931
+ {
10932
+ var chart=item.ChartPaint[i];
10933
+ if (chart.IsShow==false) continue; //隐藏的图形不计算
10934
+ if (chart.NotSupportMessage) continue;
10935
+ if (!chart.ChartFrame) continue;
10936
+
10937
+ var range=chart.GetMaxMin();
10938
+ if (range==null || range.Max==null || range.Min==null) continue;
10939
+
10940
+ if (item.Max==null || item.Max<range.Max) item.Max=range.Max;
10941
+ if (item.Min==null || item.Min>range.Min) item.Min=range.Min;
10942
+ }
10943
+
10944
+ if (item.Frame.YSpecificMaxMin) //固定坐标
10945
+ {
10946
+ item.Min=item.Frame.YSpecificMaxMin.Max;
10947
+ item.Max=item.Frame.YSpecificMaxMin.Min;
10948
+ }
10949
+
10950
+ if (!IFrameSplitOperator.IsNumber(frame.YMaxMin.Max) || frame.YMaxMin.Max!=item.Max)
10951
+ {
10952
+ frame.YMaxMin.Max=item.Max;
10953
+ frame.XYSplit=true;
10954
+ }
10955
+
10956
+ if (!IFrameSplitOperator.IsNumber(frame.YMaxMin.Min) || frame.YMaxMin.Min!=item.Min)
10957
+ {
10958
+ frame.YMaxMin.Min=item.Min
10959
+ frame.XYSplit=true;
10960
+ }
10961
+
10962
+ if (frame.XYSplit)
10963
+ {
10964
+ var max=10, min=0;
10965
+ if (item.Max!=null) max=item.Max;
10966
+ if (item.Min!=null) min=item.Min;
10967
+
10968
+ frame.HorizontalMax=max;
10969
+ frame.HorizontalMin=min;
10970
+
10971
+ for(var j=0;j<item.OverlayFrame.length;++j)
10972
+ {
10973
+ item.OverlayFrame[j].XYSplit=true;
10974
+ }
10975
+ }
10976
+
10977
+
10978
+ //独立坐标叠加指标
10979
+ for(var i=0;i<item.SingleOverlay.length;++i)
10980
+ {
10981
+ var overlayItem=item.SingleOverlay[i];
10982
+ overlayItem.UpdateFrameMaxMin();
10983
+ }
10984
+ }
10985
+ }
10986
+
10862
10987
  this.UpdateFrameMaxMin=function()
10863
10988
  {
10989
+ this.UpdateFrameMaxMinV2();
10990
+
10991
+ return;
10992
+
10864
10993
  var frameMaxMinData=new Array();
10865
10994
 
10866
10995
  var chartPaint=new Array();
@@ -13234,6 +13363,9 @@ function IChartFramePainting()
13234
13363
  this.HorizontalMin; //Y轴最小值
13235
13364
  this.XPointCount=10; //X轴数据个数
13236
13365
 
13366
+ //Y轴原始的最大值 最小值
13367
+ this.YMaxMin={ Max:null, Min:null };
13368
+
13237
13369
  this.YSplitOperator; //Y轴分割
13238
13370
  this.XSplitOperator; //X轴分割
13239
13371
  this.Data; //主数据
@@ -130541,7 +130673,7 @@ function HQChartScriptWorker()
130541
130673
 
130542
130674
 
130543
130675
 
130544
- var HQCHART_VERSION="1.1.12673";
130676
+ var HQCHART_VERSION="1.1.12677";
130545
130677
 
130546
130678
  function PrintHQChartVersion()
130547
130679
  {
@@ -68,7 +68,8 @@ function IChartFramePainting()
68
68
 
69
69
  this.HorizontalMax; //Y轴最大值
70
70
  this.HorizontalMin; //Y轴最小值
71
- this.XPointCount = 10; //X轴数据个数
71
+ this.XPointCount = 10; //X轴数据个数
72
+ this.YMaxMin={ Max:null, Min:null }; //Y轴原始的最大值 最小值
72
73
 
73
74
  this.YSplitOperator; //Y轴分割
74
75
  this.XSplitOperator; //X轴分割
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.12666";
8
+ var HQCHART_VERSION="1.1.12676";
9
9
 
10
10
  function PrintHQChartVersion()
11
11
  {
@@ -2630,8 +2630,135 @@ function JSChartContainer(uielement)
2630
2630
  if (typeof (this.Frame.ResetXYSplit) == 'function') this.Frame.ResetXYSplit();
2631
2631
  }
2632
2632
 
2633
+ this.UpdateFrameMaxMinV2=function()
2634
+ {
2635
+ var mapFrame=new Map(); //key=frameid, value:{ ChartPaint:[] }
2636
+ for(var i=0;i<this.Frame.SubFrame.length;++i)
2637
+ {
2638
+ var subItem=this.Frame.SubFrame[i];
2639
+ if (!subItem || !subItem.Frame) continue;
2640
+
2641
+ var frame=subItem.Frame;
2642
+ var key=frame.Identify;
2643
+ var item=
2644
+ {
2645
+ ID:key, Frame:frame, ChartPaint:[] , Max:null, Min:null,
2646
+ OverlayFrame:[], //共享坐标
2647
+ SingleOverlay:[] //独立坐标
2648
+ };
2649
+
2650
+ for(var j=0;j<subItem.OverlayIndex.length;++j)
2651
+ {
2652
+ var overlayItem=subItem.OverlayIndex[j];
2653
+ var overlayFrame=overlayItem.Frame;
2654
+ if (overlayFrame.IsShareY)
2655
+ {
2656
+ if (!overlayFrame.MainFrame) continue;
2657
+ if (overlayFrame.IsCalculateYMaxMin===false) continue; //叠加坐标Y轴不调整
2658
+ item.OverlayFrame.push(overlayFrame);
2659
+ for(var k=0; k<overlayItem.ChartPaint.length; ++k)
2660
+ {
2661
+ var chart=overlayItem.ChartPaint[k];
2662
+ item.ChartPaint.push(chart);
2663
+ }
2664
+ }
2665
+ else
2666
+ {
2667
+ item.SingleOverlay.push(overlayItem);
2668
+ }
2669
+
2670
+ }
2671
+
2672
+ mapFrame.set(key, item);
2673
+ }
2674
+
2675
+ for(var i=0;i<this.ChartPaint.length;++i)
2676
+ {
2677
+ var chart=this.ChartPaint[i];
2678
+ var key=chart.ChartFrame.Identify;
2679
+ if (!mapFrame.has(key)) continue;
2680
+
2681
+ var finder=mapFrame.get(key);
2682
+ finder.ChartPaint.push(chart);
2683
+ }
2684
+
2685
+ for(var i=0;i<this.OverlayChartPaint.length;++i)
2686
+ {
2687
+ var chart=this.OverlayChartPaint[i];
2688
+ if (!chart.ChartFrame) continue;
2689
+ var key=chart.ChartFrame.Identify;
2690
+ if (!mapFrame.has(key)) continue;
2691
+
2692
+ var finder=mapFrame.get(key);
2693
+ finder.ChartPaint.push(chart);
2694
+ }
2695
+
2696
+ for(var mapItem of mapFrame)
2697
+ {
2698
+ var item=mapItem[1];
2699
+ var frame=item.Frame;
2700
+ //计算主框架最大最小
2701
+ for(var i=0;i<item.ChartPaint.length;++i)
2702
+ {
2703
+ var chart=item.ChartPaint[i];
2704
+ if (chart.IsShow==false) continue; //隐藏的图形不计算
2705
+ if (chart.NotSupportMessage) continue;
2706
+ if (!chart.ChartFrame) continue;
2707
+
2708
+ var range=chart.GetMaxMin();
2709
+ if (range==null || range.Max==null || range.Min==null) continue;
2710
+
2711
+ if (item.Max==null || item.Max<range.Max) item.Max=range.Max;
2712
+ if (item.Min==null || item.Min>range.Min) item.Min=range.Min;
2713
+ }
2714
+
2715
+ if (item.Frame.YSpecificMaxMin) //固定坐标
2716
+ {
2717
+ item.Min=item.Frame.YSpecificMaxMin.Max;
2718
+ item.Max=item.Frame.YSpecificMaxMin.Min;
2719
+ }
2720
+
2721
+ if (!IFrameSplitOperator.IsNumber(frame.YMaxMin.Max) || frame.YMaxMin.Max!=item.Max)
2722
+ {
2723
+ frame.YMaxMin.Max=item.Max;
2724
+ frame.XYSplit=true;
2725
+ }
2726
+
2727
+ if (!IFrameSplitOperator.IsNumber(frame.YMaxMin.Min) || frame.YMaxMin.Min!=item.Min)
2728
+ {
2729
+ frame.YMaxMin.Min=item.Min
2730
+ frame.XYSplit=true;
2731
+ }
2732
+
2733
+ if (frame.XYSplit)
2734
+ {
2735
+ var max=10, min=0;
2736
+ if (item.Max!=null) max=item.Max;
2737
+ if (item.Min!=null) min=item.Min;
2738
+
2739
+ frame.HorizontalMax=max;
2740
+ frame.HorizontalMin=min;
2741
+
2742
+ for(var j=0;j<item.OverlayFrame.length;++j)
2743
+ {
2744
+ item.OverlayFrame[j].XYSplit=true;
2745
+ }
2746
+ }
2747
+
2748
+
2749
+ //独立坐标叠加指标
2750
+ for(var i=0;i<item.SingleOverlay.length;++i)
2751
+ {
2752
+ var overlayItem=item.SingleOverlay[i];
2753
+ overlayItem.UpdateFrameMaxMin();
2754
+ }
2755
+ }
2756
+ }
2633
2757
  this.UpdateFrameMaxMin = function ()
2634
2758
  {
2759
+ this.UpdateFrameMaxMinV2();
2760
+ return;
2761
+
2635
2762
  var frameMaxMinData = new Array();
2636
2763
  var chartPaint = new Array();
2637
2764