hqchart 1.1.12988 → 1.1.13001

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.
@@ -1852,7 +1852,8 @@ this.EnableShowCorssCursorLine=function(bShow){if(!this.ChartCorssCursor)return;
1852
1852
  this.GetExtendChartByClassName=function(name){for(var i=0;i<this.ExtendChartPaint.length;++i){var item=this.ExtendChartPaint[i];if(item.ClassName==name)return{Index:i,Chart:item};}return null;};//获取多个扩展画法
1853
1853
  this.GetExtendChartByClassNameV2=function(name){var aryChart=[];for(var i=0;i<this.ExtendChartPaint.length;++i){var item=this.ExtendChartPaint[i];if(item.ClassName==name){aryChart.push({Index:i,Chart:item});}}if(aryChart.length<=0)return null;return aryChart;};this.GetExtendChartRightWidth=function()//扩展画法右边宽度
1854
1854
  {var width=0;for(var i=0;i<this.ExtendChartPaint.length;++i){var item=this.ExtendChartPaint[i];if(!item)continue;if(item.ClassName=="StockChip"||item.ClassName=="DrawToolsButton"){if(IFrameSplitOperator.IsNumber(item.Width))width+=item.Width;}}return width;};//删除扩展画法
1855
- this.DeleteExtendChart=function(data){if(data.Index>=this.ExtendChartPaint.length)return;if(this.ExtendChartPaint[data.Index]!=data.Chart)return;if(typeof data.Chart.Clear=='function')data.Chart.Clear();this.ExtendChartPaint.splice(data.Index,1);};//全屏提示信息 { Title:提示信息, Draw:false/true 是否立即重绘, }
1855
+ this.DeleteExtendChart=function(data){if(data.Index>=this.ExtendChartPaint.length)return;if(this.ExtendChartPaint[data.Index]!=data.Chart)return;if(typeof data.Chart.Clear=='function')data.Chart.Clear();this.ExtendChartPaint.splice(data.Index,1);};//删除扩展画法
1856
+ this.DeleteExtendChartByID=function(id){for(var i=0;i<this.ExtendChartPaint.length;++i){var item=this.ExtendChartPaint[i];if(item.ID==id){this.ExtendChartPaint.splice(i,1);return true;}}return false;};//全屏提示信息 { Title:提示信息, Draw:false/true 是否立即重绘, }
1856
1857
  this.EnableSplashScreen=function(enable,option){if(!this.ChartSplashPaint)return;this.ChartSplashPaint.EnableSplash(enable);if(option&&option.Draw===false)return;if(enable)this.DrawSplashScreen(option);else this.Draw();};//设置指标窗口属性 windowItem=SetOption.Windows[i], frameItem=SetOption.Frames[i];
1857
1858
  this.SetSubFrameAttribute=function(subFrame,windowItem,frameItem){if(!subFrame||!subFrame.Frame)return;var frame=subFrame.Frame;if(windowItem){if(IFrameSplitOperator.IsBool(windowItem.Modify))frame.ModifyIndex=windowItem.Modify;if(IFrameSplitOperator.IsBool(windowItem.Change))frame.ChangeIndex=windowItem.Change;if(IFrameSplitOperator.IsBool(windowItem.Close))frame.CloseIndex=windowItem.Close;if(IFrameSplitOperator.IsBool(windowItem.Overlay))frame.OverlayIndex=windowItem.Overlay;if(IFrameSplitOperator.IsBool(windowItem.IsDrawTitleBG))frame.IsDrawTitleBG=windowItem.IsDrawTitleBG;if(IFrameSplitOperator.IsNumber(windowItem.TitleHeight))frame.ChartBorder.TitleHeight=windowItem.TitleHeight;else windowItem.TitleHeight=frame.ChartBorder.TitleHeight;if(IFrameSplitOperator.IsBool(windowItem.IsShowTitleArrow))frame.IsShowTitleArrow=windowItem.IsShowTitleArrow;if(IFrameSplitOperator.IsBool(windowItem.IsShowIndexName))frame.IsShowIndexName=windowItem.IsShowIndexName;if(IFrameSplitOperator.IsNumber(windowItem.IndexParamSpace))frame.IndexParamSpace=windowItem.IndexParamSpace;if(IFrameSplitOperator.IsNumber(windowItem.IndexTitleSpace))frame.IndexTitleSpace=windowItem.IndexTitleSpace;}if(frameItem){if(frameItem.SplitCount)frame.YSplitOperator.SplitCount=frameItem.SplitCount;if(IFrameSplitOperator.IsBool(frameItem.IsShowXLine))frame.IsShowXLine=frameItem.IsShowXLine;if(IFrameSplitOperator.IsBool(frameItem.IsShowYLine))frame.IsShowYLine=frameItem.IsShowYLine;if(IFrameSplitOperator.IsBool(frameItem.IsShowLeftText)){frame.IsShowYText[0]=frameItem.IsShowLeftText;frame.YSplitOperator.IsShowLeftText=frameItem.IsShowLeftText;//显示左边刻度
1858
1859
  }if(IFrameSplitOperator.IsBool(frameItem.IsShowRightText)){frame.IsShowYText[1]=frameItem.IsShowRightText;frame.YSplitOperator.IsShowRightText=frameItem.IsShowRightText;//显示右边刻度
@@ -3127,7 +3128,7 @@ this.PriceGap={Enable:false,Count:1};this.PriceGapStyple={Line:{Color:g_JSChartR
3127
3128
  this.ReloadResource=function(resource){this.TextFont=g_JSChartResource.KLine.MaxMin.Font;this.TextColor=g_JSChartResource.KLine.MaxMin.Color;this.CloseLineColor=g_JSChartResource.CloseLineColor;this.CloseLineAreaColor=g_JSChartResource.CloseLineAreaColor;this.CloseLineWidth=g_JSChartResource.CloseLineWidth;this.UpColor=g_JSChartResource.UpBarColor;this.DownColor=g_JSChartResource.DownBarColor;this.UnchagneColor=g_JSChartResource.UnchagneBarColor;//平盘
3128
3129
  this.HighLowBarColor=g_JSChartResource.HighLowBarColor;this.OrderFlow.UpColor={BG:g_JSChartResource.OrderFlow.UpColor.BG,Border:g_JSChartResource.OrderFlow.UpColor.Border};this.OrderFlow.DownColor={BG:g_JSChartResource.OrderFlow.DownColor.BG,Border:g_JSChartResource.OrderFlow.DownColor.Border};this.OrderFlow.UnchagneColor={BG:g_JSChartResource.OrderFlow.UnchagneColor.BG,Border:g_JSChartResource.OrderFlow.UnchagneColor.Border};this.OrderFlow.Text={Color:g_JSChartResource.OrderFlow.Text.Color,Family:g_JSChartResource.OrderFlow.Text.Family,FontMaxSize:g_JSChartResource.OrderFlow.Text.FontMaxSize,MaxValue:g_JSChartResource.OrderFlow.Text.MaxValue};this.OrderFlow.Line={UpDownColor:g_JSChartResource.OrderFlow.Line.UpDownColor,MiddleColor:g_JSChartResource.OrderFlow.Line.MiddleColor};};this.ClearCustomKLine=function(){this.CustomKLine=null;};this.GetCustomKLine=function(kItem){if(!this.CustomKLine)return null;if(!kItem)return null;var key=kItem.Date*1000000;if(IFrameSplitOperator.IsNumber(kItem.Time))key+=kItem.Time;if(!this.CustomKLine.has(key))return null;var value=this.CustomKLine.get(key);return value;};this.DrawHeatMap=function(){if(!this.ChartHeatMap)return;this.ChartHeatMap.Canvas=this.Canvas;this.ChartHeatMap.ChartBorder=this.ChartBorder;this.ChartHeatMap.ChartFrame=this.ChartFrame;this.ChartHeatMap.Data=this.Data;this.ChartHeatMap.Draw();};this.ClearHeatMap=function(){this.ChartHeatMap=null;};this.CreateHeatMap=function(){this.ChartHeatMap=new ChartHeatMap();};this.DrawAKLine=function()//美国线
3129
3130
  {var isHScreen=this.ChartFrame.IsHScreen===true;var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var xPointCount=this.ChartFrame.XPointCount;if(isHScreen){var border=this.ChartBorder.GetHScreenBorder();var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.BottomEx;}else{var border=this.ChartBorder.GetBorder();var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.RightEx;}var upColor=this.UpColor;var downColor=this.DownColor;var unchagneColor=this.UnchagneColor;var ptMax={X:null,Y:null,Value:null,Align:'left'};var ptMin={X:null,Y:null,Value:null,Align:'left'};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 eventUnchangeKLine=null;//定制平盘K线颜色事件
3130
- if(this.GetEventCallback){eventUnchangeKLine=this.GetEventCallback(JSCHART_EVENT_ID.ON_CUSTOM_UNCHANGE_KLINE_COLOR);}var preKItemInfo=null;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);this.DrawKRange.End=i;var kItemInfo={Data:data,Coordinate:{X:x,Low:yLow,High:yHigh,Close:yClose,Open:yClose,Left:left,Right:right}};if(ptMax.Value==null||ptMax.Value<data.High)//求最大值
3131
+ if(this.GetEventCallback){eventUnchangeKLine=this.GetEventCallback(JSCHART_EVENT_ID.ON_CUSTOM_UNCHANGE_KLINE_COLOR);}var preKItemInfo=null;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);this.DrawKRange.End=i;var kItemInfo={Data:data,Coordinate:{X:x,Low:yLow,High:yHigh,Close:yClose,Open:yOpen,Left:left,Right:right}};if(ptMax.Value==null||ptMax.Value<data.High)//求最大值
3131
3132
  {ptMax.X=x;ptMax.Y=yHigh;ptMax.Value=data.High;ptMax.Align=j<xPointCount/2?'left':'right';}if(ptMin.Value==null||ptMin.Value>data.Low)//求最小值
3132
3133
  {ptMin.X=x;ptMin.Y=yLow;ptMin.Value=data.Low;ptMin.Align=j<xPointCount/2?'left':'right';}unchagneColor=this.UnchagneColor;if(data.Open<data.Close){this.Canvas.strokeStyle=this.UpColor;//阳线
3133
3134
  }else if(data.Open>data.Close){this.Canvas.strokeStyle=this.DownColor;//阳线
@@ -3136,7 +3137,7 @@ if(this.GetEventCallback){eventUnchangeKLine=this.GetEventCallback(JSCHART_EVENT
3136
3137
  {if(i<this.ColorData.length)upColor=downColor=unchagneColor=this.ColorData[i]>0?this.UpColor:this.DownColor;else upColor=downColor=unchagneColor=this.DownColor;}if(this.IsThinAKBar==false&&dataWidth>=9){var coordinateInfo={YLow:yLow,YHigh:yHigh,YOpen:yOpen,YClose:yClose,X:x,Left:left,Right:right};var colorInfo={UpColor:upColor,DownColor:downColor,UnchangeColor:unchagneColor};this.DrawAKBar(data,dataWidth,isHScreen,coordinateInfo,colorInfo);}else{this.Canvas.beginPath();//最高-最低
3137
3138
  if(isHScreen){if(data.High==data.Low&&dataWidth<4){this.Canvas.moveTo(yHigh,ToFixedPoint(x));this.Canvas.lineTo(yLow-1,ToFixedPoint(x));}else{this.Canvas.moveTo(yHigh,ToFixedPoint(x));this.Canvas.lineTo(yLow,ToFixedPoint(x));}}else{if(data.High==data.Low&&dataWidth<4){this.Canvas.moveTo(ToFixedPoint(x),yHigh);this.Canvas.lineTo(ToFixedPoint(x),yLow+1);}else{this.Canvas.moveTo(ToFixedPoint(x),yHigh);this.Canvas.lineTo(ToFixedPoint(x),yLow);}}this.Canvas.stroke();if(dataWidth>=4){this.Canvas.beginPath();//开盘
3138
3139
  if(isHScreen){this.Canvas.moveTo(ToFixedPoint(yOpen),left);this.Canvas.lineTo(ToFixedPoint(yOpen),x);}else{this.Canvas.moveTo(left,ToFixedPoint(yOpen));this.Canvas.lineTo(x,ToFixedPoint(yOpen));}this.Canvas.stroke();this.Canvas.beginPath();//收盘
3139
- if(isHScreen){this.Canvas.moveTo(ToFixedPoint(yClose),right);this.Canvas.lineTo(ToFixedPoint(yClose),x);}else{this.Canvas.moveTo(right,ToFixedPoint(yClose));this.Canvas.lineTo(x,ToFixedPoint(yClose));}this.Canvas.stroke();}}if(this.Data.DataType==0){var infoItem={Xleft:left,XRight:right,YMax:yHigh,XCenter:x,YMin:yLow,DayData:data,Index:j};this.DrawInfo(infoItem);}if(this.PriceGap.Enable&&preKItemInfo){this.CheckPriceGrap(data);var value=this.IsPriceGrap(kItemInfo,preKItemInfo);if(value>0)this.AryPriceGapCache.push({Data:[preKItemInfo,kItemInfo],Type:value});}preKItemInfo=kItemInfo;}this.PtMax=ptMax;this.PtMin=ptMin;};this.DrawAKBar=function(data,dataWidth,isHScreen,coordinateInfo,colorInfo){var barWidth=dataWidth/3;var left=ToFixedRect(coordinateInfo.Left);var aryX=[left,ToFixedRect(left+barWidth),ToFixedRect(left+barWidth*2),ToFixedRect(left+barWidth*3)];var yHigh=coordinateInfo.YHigh,yLow=coordinateInfo.YLow,yOpen=coordinateInfo.YOpen,yClose=coordinateInfo.YClose;if(data.Open<data.Close){this.Canvas.strokeStyle=colorInfo.UpColor;//阳线
3140
+ if(isHScreen){this.Canvas.moveTo(ToFixedPoint(yClose),right);this.Canvas.lineTo(ToFixedPoint(yClose),x);}else{this.Canvas.moveTo(right,ToFixedPoint(yClose));this.Canvas.lineTo(x,ToFixedPoint(yClose));}this.Canvas.stroke();}}if(this.Data.DataType==0){var infoItem={Xleft:left,XRight:right,YMax:yHigh,XCenter:x,YMin:yLow,DayData:data,Index:j};this.DrawInfo(infoItem);}if(this.PriceGap.Enable&&preKItemInfo){this.CheckPriceGap(kItemInfo);var value=this.IsPriceGap(kItemInfo,preKItemInfo);if(value>0)this.AryPriceGapCache.push({Data:[preKItemInfo,kItemInfo],Type:value});}preKItemInfo=kItemInfo;}this.PtMax=ptMax;this.PtMin=ptMin;};this.DrawAKBar=function(data,dataWidth,isHScreen,coordinateInfo,colorInfo){var barWidth=dataWidth/3;var left=ToFixedRect(coordinateInfo.Left);var aryX=[left,ToFixedRect(left+barWidth),ToFixedRect(left+barWidth*2),ToFixedRect(left+barWidth*3)];var yHigh=coordinateInfo.YHigh,yLow=coordinateInfo.YLow,yOpen=coordinateInfo.YOpen,yClose=coordinateInfo.YClose;if(data.Open<data.Close){this.Canvas.strokeStyle=colorInfo.UpColor;//阳线
3140
3141
  this.Canvas.fillStyle=colorInfo.UpColor;}else if(data.Open>data.Close){this.Canvas.strokeStyle=colorInfo.DownColor;//阳线
3141
3142
  this.Canvas.fillStyle=colorInfo.DownColor;}else{this.Canvas.strokeStyle=colorInfo.UnchangeColor;//平线
3142
3143
  this.Canvas.fillStyle=colorInfo.UnchangeColor;}//最高-最低
@@ -3144,11 +3145,11 @@ if(isHScreen){if(data.High==data.Low){var yTop=yHigh-barWidth/2;this.Canvas.fill
3144
3145
  var yTop=yOpen-barWidth/2;if(isHScreen){this.Canvas.fillRect(yTop,aryX[0],barWidth,aryX[1]-aryX[0]);}else{this.Canvas.fillRect(aryX[0],yTop,aryX[1]-aryX[0],barWidth);}//收盘
3145
3146
  var yTop=yClose-barWidth/2;if(isHScreen){this.Canvas.fillRect(yTop,aryX[2],barWidth,aryX[3]-aryX[2]);}else{this.Canvas.fillRect(aryX[2],yTop,aryX[3]-aryX[2],barWidth);}};this.DrawCloseArea=function()//收盘价面积图
3146
3147
  {var isHScreen=this.ChartFrame.IsHScreen===true;var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var xPointCount=this.ChartFrame.XPointCount;if(isHScreen){var border=this.ChartBorder.GetHScreenBorder();var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.BottomEx;var borderLeft=border.TopEx;}else{var border=this.ChartBorder.GetBorder();var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.RightEx;var borderLeft=border.LeftEx;}var bFirstPoint=true;var firstPoint=null;this.Canvas.beginPath();this.Canvas.strokeStyle=this.CloseLineColor;if(IFrameSplitOperator.IsNumber(this.CloseLineWidth))this.Canvas.lineWidth=this.CloseLineWidth;var ptLast=null;if(this.Data.DataOffset>0)//把最左边的一个点连上
3147
- {var data=this.Data.Data[this.Data.DataOffset-1];if(data&&IFrameSplitOperator.IsNumber(data.Close)){var x=borderLeft;var yClose=this.GetYFromData(data.Close,false);if(isHScreen){this.Canvas.moveTo(yClose,x);firstPoint={X:yClose,Y:x};}else{this.Canvas.moveTo(x,yClose);firstPoint={X:x,Y:yClose};}bFirstPoint=false;}}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 preKItemInfo=null;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 yClose=this.GetYFromData(data.Close,false);this.DrawKRange.End=i;if(bFirstPoint){if(isHScreen){this.Canvas.moveTo(yClose,x);firstPoint={X:yClose,Y:x};}else{this.Canvas.moveTo(x,yClose);firstPoint={X:x,Y:yClose};}bFirstPoint=false;}else{if(isHScreen)this.Canvas.lineTo(yClose,x);else this.Canvas.lineTo(x,yClose);}if(i==this.Data.Data.length-1){ptLast={X:x,Y:yClose,XLeft:left,XRight:right,KItem:data,ChartRight:chartright};}if(this.PriceGap.Enable){var yLow=this.GetYFromData(data.Low,false);var yHigh=this.GetYFromData(data.High,false);var yOpen=this.GetYFromData(data.Open,false);var kItemInfo={Data:data,Coordinate:{X:x,Low:yLow,High:yHigh,Close:yClose,Open:yClose,Left:left,Right:right}};if(preKItemInfo){this.CheckPriceGrap(data);var value=this.IsPriceGrap(kItemInfo,preKItemInfo);if(value>0)this.AryPriceGapCache.push({Data:[preKItemInfo,kItemInfo],Type:value});}preKItemInfo=kItemInfo;}}this.DrawLastPointEvent(ptLast);//通知外部绘制最后一个点
3148
+ {var data=this.Data.Data[this.Data.DataOffset-1];if(data&&IFrameSplitOperator.IsNumber(data.Close)){var x=borderLeft;var yClose=this.GetYFromData(data.Close,false);if(isHScreen){this.Canvas.moveTo(yClose,x);firstPoint={X:yClose,Y:x};}else{this.Canvas.moveTo(x,yClose);firstPoint={X:x,Y:yClose};}bFirstPoint=false;}}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 preKItemInfo=null;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 yClose=this.GetYFromData(data.Close,false);this.DrawKRange.End=i;if(bFirstPoint){if(isHScreen){this.Canvas.moveTo(yClose,x);firstPoint={X:yClose,Y:x};}else{this.Canvas.moveTo(x,yClose);firstPoint={X:x,Y:yClose};}bFirstPoint=false;}else{if(isHScreen)this.Canvas.lineTo(yClose,x);else this.Canvas.lineTo(x,yClose);}if(i==this.Data.Data.length-1){ptLast={X:x,Y:yClose,XLeft:left,XRight:right,KItem:data,ChartRight:chartright};}if(this.PriceGap.Enable){var yLow=this.GetYFromData(data.Low,false);var yHigh=this.GetYFromData(data.High,false);var yOpen=this.GetYFromData(data.Open,false);var kItemInfo={Data:data,Coordinate:{X:x,Low:yLow,High:yHigh,Close:yClose,Open:yOpen,Left:left,Right:right}};if(preKItemInfo){this.CheckPriceGap(kItemInfo);var value=this.IsPriceGap(kItemInfo,preKItemInfo);if(value>0)this.AryPriceGapCache.push({Data:[preKItemInfo,kItemInfo],Type:value});}preKItemInfo=kItemInfo;}}this.DrawLastPointEvent(ptLast);//通知外部绘制最后一个点
3148
3149
  if(bFirstPoint)return;this.Canvas.stroke();if(isHScreen){this.Canvas.lineTo(border.Left,x);this.Canvas.lineTo(border.Left,firstPoint.Y);}else{this.Canvas.lineTo(x,border.Bottom);this.Canvas.lineTo(firstPoint.X,border.Bottom);}this.Canvas.closePath();if(Array.isArray(this.CloseLineAreaColor)){if(isHScreen){var gradient=this.Canvas.createLinearGradient(this.ChartBorder.GetRightEx(),this.ChartBorder.GetTop(),this.ChartBorder.GetLeft(),this.ChartBorder.GetTop());gradient.addColorStop(0,this.CloseLineAreaColor[0]);gradient.addColorStop(1,this.CloseLineAreaColor[1]);this.Canvas.fillStyle=gradient;}else{var _gradient=this.Canvas.createLinearGradient(firstPoint.X,this.ChartBorder.GetTopEx(),firstPoint.X,this.ChartBorder.GetBottom());_gradient.addColorStop(0,this.CloseLineAreaColor[0]);_gradient.addColorStop(1,this.CloseLineAreaColor[1]);this.Canvas.fillStyle=_gradient;}}else{this.Canvas.fillStyle=this.CloseLineAreaColor;}this.Canvas.fill();};this.DrawCloseLine=function()//收盘价线
3149
- {var isHScreen=this.ChartFrame.IsHScreen===true;var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var xPointCount=this.ChartFrame.XPointCount;if(isHScreen){var border=this.ChartBorder.GetHScreenBorder();var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.BottomEx;}else{var border=this.ChartBorder.GetBorder();var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.RightEx;}var bFirstPoint=true;this.Canvas.beginPath();this.Canvas.strokeStyle=this.CloseLineColor;if(IFrameSplitOperator.IsNumber(this.CloseLineWidth))this.Canvas.lineWidth=this.CloseLineWidth;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 preKItemInfo=null;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 yClose=this.GetYFromData(data.Close,false);this.DrawKRange.End=i;if(bFirstPoint){if(isHScreen)this.Canvas.moveTo(yClose,x);else this.Canvas.moveTo(x,yClose);bFirstPoint=false;}else{if(isHScreen)this.Canvas.lineTo(yClose,x);else this.Canvas.lineTo(x,yClose);}if(this.PriceGap.Enable){var yLow=this.GetYFromData(data.Low,false);var yHigh=this.GetYFromData(data.High,false);var yOpen=this.GetYFromData(data.Open,false);var kItemInfo={Data:data,Coordinate:{X:x,Low:yLow,High:yHigh,Close:yClose,Open:yClose,Left:left,Right:right}};if(preKItemInfo){this.CheckPriceGrap(data);var value=this.IsPriceGrap(kItemInfo,preKItemInfo);if(value>0)this.AryPriceGapCache.push({Data:[preKItemInfo,kItemInfo],Type:value});}preKItemInfo=kItemInfo;}}if(bFirstPoint==false)this.Canvas.stroke();};this.DrawKBar=function()//蜡烛头
3150
+ {var isHScreen=this.ChartFrame.IsHScreen===true;var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var xPointCount=this.ChartFrame.XPointCount;if(isHScreen){var border=this.ChartBorder.GetHScreenBorder();var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.BottomEx;}else{var border=this.ChartBorder.GetBorder();var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.RightEx;}var bFirstPoint=true;this.Canvas.beginPath();this.Canvas.strokeStyle=this.CloseLineColor;if(IFrameSplitOperator.IsNumber(this.CloseLineWidth))this.Canvas.lineWidth=this.CloseLineWidth;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 preKItemInfo=null;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 yClose=this.GetYFromData(data.Close,false);this.DrawKRange.End=i;if(bFirstPoint){if(isHScreen)this.Canvas.moveTo(yClose,x);else this.Canvas.moveTo(x,yClose);bFirstPoint=false;}else{if(isHScreen)this.Canvas.lineTo(yClose,x);else this.Canvas.lineTo(x,yClose);}if(this.PriceGap.Enable){var yLow=this.GetYFromData(data.Low,false);var yHigh=this.GetYFromData(data.High,false);var yOpen=this.GetYFromData(data.Open,false);var kItemInfo={Data:data,Coordinate:{X:x,Low:yLow,High:yHigh,Close:yClose,Open:yOpen,Left:left,Right:right}};if(preKItemInfo){this.CheckPriceGap(kItemInfo);var value=this.IsPriceGap(kItemInfo,preKItemInfo);if(value>0)this.AryPriceGapCache.push({Data:[preKItemInfo,kItemInfo],Type:value});}preKItemInfo=kItemInfo;}}if(bFirstPoint==false)this.Canvas.stroke();};this.DrawKBar=function()//蜡烛头
3150
3151
  {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 ptMax={X:null,Y:null,Value:null,Align:'left'};var ptMin={X:null,Y:null,Value:null,Align:'left'};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;var ptLast=null;this.DrawKRange.Start=this.Data.DataOffset;var eventUnchangeKLine=null;//定制平盘K线颜色事件
3151
- if(this.GetEventCallback){eventUnchangeKLine=this.GetEventCallback(JSCHART_EVENT_ID.ON_CUSTOM_UNCHANGE_KLINE_COLOR);}var preKItemInfo=null;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;var kItemInfo={Data:data,Coordinate:{X:x,Low:yLow,High:yHigh,Close:yClose,Open:yClose,Left:left,Right:right}};this.DrawKRange.End=i;if(ptMax.Value==null||ptMax.Value<data.High)//求最大值
3152
+ if(this.GetEventCallback){eventUnchangeKLine=this.GetEventCallback(JSCHART_EVENT_ID.ON_CUSTOM_UNCHANGE_KLINE_COLOR);}var preKItemInfo=null;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;var kItemInfo={Data:data,Coordinate:{X:x,Low:yLow,High:yHigh,Close:yClose,Open:yOpen,Left:left,Right:right}};this.DrawKRange.End=i;if(ptMax.Value==null||ptMax.Value<data.High)//求最大值
3152
3153
  {ptMax.X=x;ptMax.Y=yHigh;ptMax.Value=data.High;ptMax.Align=j<xPointCount/2?'left':'right';}if(ptMin.Value==null||ptMin.Value>data.Low)//求最小值
3153
3154
  {ptMin.X=x;ptMin.Y=yLow;ptMin.Value=data.Low;ptMin.Align=j<xPointCount/2?'left':'right';}if(this.ColorData)///五彩K线颜色设置
3154
3155
  {if(i<this.ColorData.length)upColor=downColor=unchagneColor=this.ColorData[i]>0?this.UpColor:this.DownColor;else upColor=downColor=unchagneColor=this.DownColor;}var kLineOption=this.GetCustomKLine(data);if(data.IsNonTrade)//非交易日 绘制虚线柱子
@@ -3160,7 +3161,7 @@ if(this.GetEventCallback){eventUnchangeKLine=this.GetEventCallback(JSCHART_EVENT
3160
3161
  {yTop=Math.min(yHigh,yTop-5);yBottom=Math.max(yLow,yBottom+5);}if(data.IsNonTrade){yTop=yHigh;yBottom=yLow;}var rect=new Rect(left,yTop,dataWidth,yBottom-yTop);//this.Canvas.fillStyle="rgb(0,0,100)";
3161
3162
  //this.Canvas.fillRect(rect.X,rect.Y,rect.Width,rect.Height);
3162
3163
  this.TooltipRect.push([i,rect]);//[0]数据索引 [1]数据区域
3163
- }if(this.Data.DataType==0||this.Data.DataType==1){var infoItem={Xleft:left,XRight:right,XCenter:x,YMax:yHigh,YMin:yLow,DayData:data,Index:j};this.DrawInfo(infoItem);}if(i==this.Data.Data.length-1){ptLast={X:x,Y:yClose,XLeft:left,XRight:right,KItem:data,ChartRight:chartright};}if(this.PriceGap.Enable&&preKItemInfo){this.CheckPriceGrap(data);var value=this.IsPriceGrap(kItemInfo,preKItemInfo);if(value>0)this.AryPriceGapCache.push({Data:[preKItemInfo,kItemInfo],Type:value});}preKItemInfo=kItemInfo;}this.DrawLastPointEvent(ptLast);//通知外部绘制最后一个点
3164
+ }if(this.Data.DataType==0||this.Data.DataType==1){var infoItem={Xleft:left,XRight:right,XCenter:x,YMax:yHigh,YMin:yLow,DayData:data,Index:j};this.DrawInfo(infoItem);}if(i==this.Data.Data.length-1){ptLast={X:x,Y:yClose,XLeft:left,XRight:right,KItem:data,ChartRight:chartright};}if(this.PriceGap.Enable&&preKItemInfo){this.CheckPriceGap(kItemInfo);var value=this.IsPriceGap(kItemInfo,preKItemInfo);if(value>0)this.AryPriceGapCache.push({Data:[preKItemInfo,kItemInfo],Type:value});}preKItemInfo=kItemInfo;}this.DrawLastPointEvent(ptLast);//通知外部绘制最后一个点
3164
3165
  this.PtMax=ptMax;this.PtMin=ptMin;};this.DrawKBar_Up=function(data,dataWidth,upColor,drawType,x,y,left,right,yLow,yHigh,yOpen,yClose,isHScreen)//阳线
3165
3166
  {var isEmptyBar=drawType==3||drawType==6;if(dataWidth>=4){if(isEmptyBar){if(dataWidth%2!=0)dataWidth-=1;}this.Canvas.strokeStyle=upColor;if(data.High>data.Close)//上影线
3166
3167
  {this.Canvas.beginPath();if(isHScreen){this.Canvas.moveTo(ToFixedPoint(y),ToFixedPoint(x));this.Canvas.lineTo(ToFixedPoint(drawType==3?Math.max(yClose,yOpen):yClose),ToFixedPoint(x));}else{if(isEmptyBar){var xFixed=left+dataWidth/2;this.Canvas.moveTo(ToFixedPoint(xFixed),ToFixedPoint(y));this.Canvas.lineTo(ToFixedPoint(xFixed),ToFixedPoint(Math.min(yClose,yOpen)));}else{this.Canvas.moveTo(ToFixedPoint(x),ToFixedPoint(y));this.Canvas.lineTo(ToFixedPoint(x),ToFixedPoint(yClose));}}this.Canvas.stroke();y=yClose;}else{y=yClose;}this.Canvas.fillStyle=upColor;if(isHScreen){if(Math.abs(yOpen-y)<1){this.Canvas.fillRect(ToFixedRect(y),ToFixedRect(left),1,ToFixedRect(dataWidth));//高度小于1,统一使用高度1
@@ -3563,11 +3564,12 @@ this.DrawPriceGap=function(){if(!IFrameSplitOperator.IsNonEmptyArray(this.AryPri
3563
3564
  {if(isHScreen){rect={Left:start.Coordinate.Low,Right:end.Coordinate.High,Top:start.Coordinate.X,Bottom:border.Bottom};rect.Width=rect.Right-rect.Left;rect.Height=rect.Bottom-rect.Top;rtText={Left:start.Coordinate.Low+2,Top:start.Coordinate.Right+2,Height:textHeight};rtText.Bottom=rtText.Top+rtText.Height;}else{rect={Left:start.Coordinate.X,Right:border.Right,Top:start.Coordinate.Low,Bottom:end.Coordinate.High};rect.Width=rect.Right-rect.Left;rect.Height=rect.Bottom-rect.Top;rtText={Left:start.Coordinate.Right+2,Bottom:rect.Top,Right:rect.Right,Height:textHeight};rtText.Top=rtText.Bottom-rtText.Height;}text=start.Data.Low.toFixed(decNum)+'-'+end.Data.High.toFixed(decNum);}else{continue;}if(!rect)return;this.Canvas.fillStyle=this.PriceGapStyple.Line.Color;this.Canvas.fillRect(rect.Left,rect.Top,rect.Width,rect.Height);if(rtText){var textWidth=this.Canvas.measureText(text).width;rtText.Width=textWidth;rtText.Right=rtText.Left+rtText.Width;this.Canvas.fillStyle=this.PriceGapStyple.Text.Color;if(isHScreen){this.Canvas.save();this.Canvas.translate(rtText.Left,rtText.Top);this.Canvas.rotate(90*Math.PI/180);this.Canvas.fillText(text,0,0);this.Canvas.restore();}else{if(rtText.Right>rect.Right){rtText.Right=rect.Right;rtText.Left=rtText.Right-rtText.Width;}this.Canvas.fillStyle=this.PriceGapStyple.Text.Color;this.Canvas.fillText(text,rtText.Left,rtText.Bottom);}//this.Canvas.fillStyle="rgb(250,250,250)"
3564
3565
  //this.Canvas.fillRect(rtText.Left, rtText.Top, rtText.Width, rtText.Height);
3565
3566
  }}};//是否有缺口
3566
- this.IsPriceGrap=function(item,preItem){if(!preItem||!item)return 0;if(preItem.Data.Low>item.Data.High)return 2;//下缺口
3567
+ this.IsPriceGap=function(item,preItem){if(!preItem||!item)return 0;if(preItem.Data.Low>item.Data.High)return 2;//下缺口
3567
3568
  if(preItem.Data.High<item.Data.Low)return 1;//上缺口
3568
- return-1;};this.CheckPriceGrap=function(kItem){for(var i=0;i<this.AryPriceGapCache.length;++i){var item=this.AryPriceGapCache[i];var start=item.Data[0];if(item.Type==1)//上缺口
3569
- {if(kItem.Low<=start.Data.High){this.AryPriceGapCache.splice(i,1);--i;continue;}}else if(item.Type==2)//下缺口
3570
- {if(kItem.High>=start.Data.Low){this.AryPriceGapCache.splice(i,1);--i;continue;}}}};}function ChartColorKline(){this.newMethod=IChartPainting;//派生
3569
+ return-1;};//检测缺口是不回补了
3570
+ this.CheckPriceGap=function(kItemInfo){var kItem=kItemInfo.Data;for(var i=0;i<this.AryPriceGapCache.length;++i){var item=this.AryPriceGapCache[i];var start=item.Data[0];var end=item.Data[1];if(item.Type==1)//上缺口
3571
+ {if(kItem.Low<=start.Data.High){this.AryPriceGapCache.splice(i,1);--i;continue;}if(kItem.Low<end.Data.Low)item.Data[1]=kItemInfo;}else if(item.Type==2)//下缺口
3572
+ {if(kItem.High>=start.Data.Low){this.AryPriceGapCache.splice(i,1);--i;continue;}if(kItem.High>end.Data.High)item.Data[1]=kItemInfo;}}};}function ChartColorKline(){this.newMethod=IChartPainting;//派生
3571
3573
  this.newMethod();delete this.newMethod;this.ClassName='ChartColorKline';//类名
3572
3574
  this.Symbol;//股票代码
3573
3575
  this.Color='rgb(0,255,44)';this.IsEmptyBar=false;this.DrawType=0;//0=实心K线柱子 3=空心K线柱子
@@ -4196,7 +4198,7 @@ this.IsEraseBG=false;//是否每次画的时候需要擦除K线图背景
4196
4198
  this.DrawAfterTitle=false;//是否在动态标题画完以后再画,防止动态标题覆盖
4197
4199
  this.DrawAfterPicture=false;//是否在画图工具以后绘制
4198
4200
  this.IsCallbackDraw=false;//在回调函数里绘制, 不在Draw()中绘制
4199
- //上下左右间距
4201
+ this.ID=Guid();//上下左右间距
4200
4202
  this.Left=5;this.Right=5;this.Top=5;this.Bottom=5;this.Draw=function(){};//设置参数接口
4201
4203
  this.SetOption=function(option){};this.GetFontHeight=function(font){return GetFontHeight(this.Canvas,font,"擎");};}//K线Tooltip, 显示在左边或右边
4202
4204
  function KLineTooltipPaint(){this.newMethod=IExtendChartPainting;//派生
@@ -12622,7 +12624,7 @@ hisData.Symbol=message.symbol;}var stockObj={HQDataType:HQ_DATA_TYPE.KLINE_ID,St
12622
12624
  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);};}/********************************************************************************
12623
12625
  * 版本信息输出
12624
12626
  *
12625
- */var HQCHART_VERSION="1.1.12987";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();//把给外界调用的方法暴露出来
12627
+ */var HQCHART_VERSION="1.1.13000";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();//把给外界调用的方法暴露出来
12626
12628
  exports.default=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
12627
12629
  // BaseIndex:BaseIndex,
12628
12630
  // ChartLine:ChartLine,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hqchart",
3
- "version": "1.1.12988",
3
+ "version": "1.1.13001",
4
4
  "description": "HQChart - H5, 微信小程序 沪深/港股/数字货币/期货/美股 K线图(kline),走势图,缩放,拖拽,十字光标,画图工具,截图,筹码图. 分析家语法,通达信语法,(麦语法),第3方数据对接",
5
5
  "main": "lib/main.js",
6
6
  "scripts": {
@@ -8017,6 +8017,22 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8017
8017
  this.ExtendChartPaint.splice(data.Index,1);
8018
8018
  }
8019
8019
 
8020
+ //删除扩展画法
8021
+ this.DeleteExtendChartByID=function(id)
8022
+ {
8023
+ for(var i=0;i<this.ExtendChartPaint.length;++i)
8024
+ {
8025
+ var item=this.ExtendChartPaint[i];
8026
+ if (item.ID==id)
8027
+ {
8028
+ this.ExtendChartPaint.splice(i, 1);
8029
+ return true;
8030
+ }
8031
+ }
8032
+
8033
+ return false;
8034
+ }
8035
+
8020
8036
  //全屏提示信息 { Title:提示信息, Draw:false/true 是否立即重绘, }
8021
8037
  this.EnableSplashScreen=function(enable, option)
8022
8038
  {
@@ -22675,7 +22691,7 @@ function ChartKLine()
22675
22691
  var yClose=this.GetYFromData(data.Close,false);
22676
22692
  this.DrawKRange.End=i;
22677
22693
 
22678
- var kItemInfo={ Data:data, Coordinate:{ X:x, Low:yLow, High:yHigh, Close:yClose, Open:yClose, Left:left, Right:right }};
22694
+ var kItemInfo={ Data:data, Coordinate:{ X:x, Low:yLow, High:yHigh, Close:yClose, Open:yOpen, Left:left, Right:right }};
22679
22695
 
22680
22696
  if (ptMax.Value==null || ptMax.Value<data.High) //求最大值
22681
22697
  {
@@ -22798,9 +22814,9 @@ function ChartKLine()
22798
22814
 
22799
22815
  if (this.PriceGap.Enable && preKItemInfo)
22800
22816
  {
22801
- this.CheckPriceGrap(data);
22817
+ this.CheckPriceGap(kItemInfo);
22802
22818
 
22803
- var value=this.IsPriceGrap(kItemInfo,preKItemInfo);
22819
+ var value=this.IsPriceGap(kItemInfo,preKItemInfo);
22804
22820
  if (value>0)
22805
22821
  this.AryPriceGapCache.push({ Data:[preKItemInfo, kItemInfo], Type:value });
22806
22822
  }
@@ -22987,12 +23003,12 @@ function ChartKLine()
22987
23003
  var yHigh=this.GetYFromData(data.High, false);
22988
23004
  var yOpen=this.GetYFromData(data.Open, false);
22989
23005
 
22990
- var kItemInfo={ Data:data, Coordinate:{ X:x, Low:yLow, High:yHigh, Close:yClose, Open:yClose, Left:left, Right:right }};
23006
+ var kItemInfo={ Data:data, Coordinate:{ X:x, Low:yLow, High:yHigh, Close:yClose, Open:yOpen, Left:left, Right:right }};
22991
23007
 
22992
23008
  if (preKItemInfo)
22993
23009
  {
22994
- this.CheckPriceGrap(data);
22995
- var value=this.IsPriceGrap(kItemInfo,preKItemInfo);
23010
+ this.CheckPriceGap(kItemInfo);
23011
+ var value=this.IsPriceGap(kItemInfo,preKItemInfo);
22996
23012
  if (value>0) this.AryPriceGapCache.push({ Data:[preKItemInfo, kItemInfo], Type:value });
22997
23013
  }
22998
23014
 
@@ -23103,12 +23119,12 @@ function ChartKLine()
23103
23119
  var yHigh=this.GetYFromData(data.High, false);
23104
23120
  var yOpen=this.GetYFromData(data.Open, false);
23105
23121
 
23106
- var kItemInfo={ Data:data, Coordinate:{ X:x, Low:yLow, High:yHigh, Close:yClose, Open:yClose, Left:left, Right:right }};
23122
+ var kItemInfo={ Data:data, Coordinate:{ X:x, Low:yLow, High:yHigh, Close:yClose, Open:yOpen, Left:left, Right:right }};
23107
23123
 
23108
23124
  if (preKItemInfo)
23109
23125
  {
23110
- this.CheckPriceGrap(data);
23111
- var value=this.IsPriceGrap(kItemInfo,preKItemInfo);
23126
+ this.CheckPriceGap(kItemInfo);
23127
+ var value=this.IsPriceGap(kItemInfo,preKItemInfo);
23112
23128
  if (value>0) this.AryPriceGapCache.push({ Data:[preKItemInfo, kItemInfo], Type:value });
23113
23129
  }
23114
23130
 
@@ -23173,7 +23189,7 @@ function ChartKLine()
23173
23189
  var yClose=this.GetYFromData(data.Close, false);
23174
23190
  var y=yHigh;
23175
23191
 
23176
- var kItemInfo={ Data:data, Coordinate:{ X:x, Low:yLow, High:yHigh, Close:yClose, Open:yClose, Left:left, Right:right }};
23192
+ var kItemInfo={ Data:data, Coordinate:{ X:x, Low:yLow, High:yHigh, Close:yClose, Open:yOpen, Left:left, Right:right }};
23177
23193
 
23178
23194
  this.DrawKRange.End=i;
23179
23195
  if (ptMax.Value==null || ptMax.Value<data.High) //求最大值
@@ -23281,9 +23297,9 @@ function ChartKLine()
23281
23297
 
23282
23298
  if (this.PriceGap.Enable && preKItemInfo)
23283
23299
  {
23284
- this.CheckPriceGrap(data);
23300
+ this.CheckPriceGap(kItemInfo);
23285
23301
 
23286
- var value=this.IsPriceGrap(kItemInfo,preKItemInfo);
23302
+ var value=this.IsPriceGap(kItemInfo,preKItemInfo);
23287
23303
  if (value>0)
23288
23304
  this.AryPriceGapCache.push({ Data:[preKItemInfo, kItemInfo], Type:value });
23289
23305
  }
@@ -26915,7 +26931,7 @@ function ChartKLine()
26915
26931
  }
26916
26932
 
26917
26933
  //是否有缺口
26918
- this.IsPriceGrap=function(item, preItem)
26934
+ this.IsPriceGap=function(item, preItem)
26919
26935
  {
26920
26936
  if (!preItem || !item) return 0;
26921
26937
 
@@ -26926,12 +26942,15 @@ function ChartKLine()
26926
26942
  return -1;
26927
26943
  }
26928
26944
 
26929
- this.CheckPriceGrap=function(kItem)
26945
+ //检测缺口是不回补了
26946
+ this.CheckPriceGap=function(kItemInfo)
26930
26947
  {
26948
+ var kItem=kItemInfo.Data;
26931
26949
  for(var i=0;i<this.AryPriceGapCache.length;++i)
26932
26950
  {
26933
26951
  var item=this.AryPriceGapCache[i];
26934
26952
  var start=item.Data[0];
26953
+ var end=item.Data[1];
26935
26954
  if (item.Type==1) //上缺口
26936
26955
  {
26937
26956
  if (kItem.Low<=start.Data.High)
@@ -26940,6 +26959,8 @@ function ChartKLine()
26940
26959
  --i;
26941
26960
  continue;
26942
26961
  }
26962
+
26963
+ if (kItem.Low<end.Data.Low) item.Data[1]=kItemInfo;
26943
26964
  }
26944
26965
  else if (item.Type==2) //下缺口
26945
26966
  {
@@ -26949,6 +26970,8 @@ function ChartKLine()
26949
26970
  --i;
26950
26971
  continue;
26951
26972
  }
26973
+
26974
+ if (kItem.High>end.Data.High) item.Data[1]=kItemInfo;
26952
26975
  }
26953
26976
  }
26954
26977
  }
@@ -38688,6 +38711,7 @@ function IExtendChartPainting()
38688
38711
  this.DrawAfterTitle=false; //是否在动态标题画完以后再画,防止动态标题覆盖
38689
38712
  this.DrawAfterPicture=false; //是否在画图工具以后绘制
38690
38713
  this.IsCallbackDraw=false; //在回调函数里绘制, 不在Draw()中绘制
38714
+ this.ID=Guid();
38691
38715
 
38692
38716
  //上下左右间距
38693
38717
  this.Left=5;
@@ -11909,6 +11909,22 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11909
11909
  this.ExtendChartPaint.splice(data.Index,1);
11910
11910
  }
11911
11911
 
11912
+ //删除扩展画法
11913
+ this.DeleteExtendChartByID=function(id)
11914
+ {
11915
+ for(var i=0;i<this.ExtendChartPaint.length;++i)
11916
+ {
11917
+ var item=this.ExtendChartPaint[i];
11918
+ if (item.ID==id)
11919
+ {
11920
+ this.ExtendChartPaint.splice(i, 1);
11921
+ return true;
11922
+ }
11923
+ }
11924
+
11925
+ return false;
11926
+ }
11927
+
11912
11928
  //全屏提示信息 { Title:提示信息, Draw:false/true 是否立即重绘, }
11913
11929
  this.EnableSplashScreen=function(enable, option)
11914
11930
  {
@@ -26567,7 +26583,7 @@ function ChartKLine()
26567
26583
  var yClose=this.GetYFromData(data.Close,false);
26568
26584
  this.DrawKRange.End=i;
26569
26585
 
26570
- var kItemInfo={ Data:data, Coordinate:{ X:x, Low:yLow, High:yHigh, Close:yClose, Open:yClose, Left:left, Right:right }};
26586
+ var kItemInfo={ Data:data, Coordinate:{ X:x, Low:yLow, High:yHigh, Close:yClose, Open:yOpen, Left:left, Right:right }};
26571
26587
 
26572
26588
  if (ptMax.Value==null || ptMax.Value<data.High) //求最大值
26573
26589
  {
@@ -26690,9 +26706,9 @@ function ChartKLine()
26690
26706
 
26691
26707
  if (this.PriceGap.Enable && preKItemInfo)
26692
26708
  {
26693
- this.CheckPriceGrap(data);
26709
+ this.CheckPriceGap(kItemInfo);
26694
26710
 
26695
- var value=this.IsPriceGrap(kItemInfo,preKItemInfo);
26711
+ var value=this.IsPriceGap(kItemInfo,preKItemInfo);
26696
26712
  if (value>0)
26697
26713
  this.AryPriceGapCache.push({ Data:[preKItemInfo, kItemInfo], Type:value });
26698
26714
  }
@@ -26879,12 +26895,12 @@ function ChartKLine()
26879
26895
  var yHigh=this.GetYFromData(data.High, false);
26880
26896
  var yOpen=this.GetYFromData(data.Open, false);
26881
26897
 
26882
- var kItemInfo={ Data:data, Coordinate:{ X:x, Low:yLow, High:yHigh, Close:yClose, Open:yClose, Left:left, Right:right }};
26898
+ var kItemInfo={ Data:data, Coordinate:{ X:x, Low:yLow, High:yHigh, Close:yClose, Open:yOpen, Left:left, Right:right }};
26883
26899
 
26884
26900
  if (preKItemInfo)
26885
26901
  {
26886
- this.CheckPriceGrap(data);
26887
- var value=this.IsPriceGrap(kItemInfo,preKItemInfo);
26902
+ this.CheckPriceGap(kItemInfo);
26903
+ var value=this.IsPriceGap(kItemInfo,preKItemInfo);
26888
26904
  if (value>0) this.AryPriceGapCache.push({ Data:[preKItemInfo, kItemInfo], Type:value });
26889
26905
  }
26890
26906
 
@@ -26995,12 +27011,12 @@ function ChartKLine()
26995
27011
  var yHigh=this.GetYFromData(data.High, false);
26996
27012
  var yOpen=this.GetYFromData(data.Open, false);
26997
27013
 
26998
- var kItemInfo={ Data:data, Coordinate:{ X:x, Low:yLow, High:yHigh, Close:yClose, Open:yClose, Left:left, Right:right }};
27014
+ var kItemInfo={ Data:data, Coordinate:{ X:x, Low:yLow, High:yHigh, Close:yClose, Open:yOpen, Left:left, Right:right }};
26999
27015
 
27000
27016
  if (preKItemInfo)
27001
27017
  {
27002
- this.CheckPriceGrap(data);
27003
- var value=this.IsPriceGrap(kItemInfo,preKItemInfo);
27018
+ this.CheckPriceGap(kItemInfo);
27019
+ var value=this.IsPriceGap(kItemInfo,preKItemInfo);
27004
27020
  if (value>0) this.AryPriceGapCache.push({ Data:[preKItemInfo, kItemInfo], Type:value });
27005
27021
  }
27006
27022
 
@@ -27065,7 +27081,7 @@ function ChartKLine()
27065
27081
  var yClose=this.GetYFromData(data.Close, false);
27066
27082
  var y=yHigh;
27067
27083
 
27068
- var kItemInfo={ Data:data, Coordinate:{ X:x, Low:yLow, High:yHigh, Close:yClose, Open:yClose, Left:left, Right:right }};
27084
+ var kItemInfo={ Data:data, Coordinate:{ X:x, Low:yLow, High:yHigh, Close:yClose, Open:yOpen, Left:left, Right:right }};
27069
27085
 
27070
27086
  this.DrawKRange.End=i;
27071
27087
  if (ptMax.Value==null || ptMax.Value<data.High) //求最大值
@@ -27173,9 +27189,9 @@ function ChartKLine()
27173
27189
 
27174
27190
  if (this.PriceGap.Enable && preKItemInfo)
27175
27191
  {
27176
- this.CheckPriceGrap(data);
27192
+ this.CheckPriceGap(kItemInfo);
27177
27193
 
27178
- var value=this.IsPriceGrap(kItemInfo,preKItemInfo);
27194
+ var value=this.IsPriceGap(kItemInfo,preKItemInfo);
27179
27195
  if (value>0)
27180
27196
  this.AryPriceGapCache.push({ Data:[preKItemInfo, kItemInfo], Type:value });
27181
27197
  }
@@ -30807,7 +30823,7 @@ function ChartKLine()
30807
30823
  }
30808
30824
 
30809
30825
  //是否有缺口
30810
- this.IsPriceGrap=function(item, preItem)
30826
+ this.IsPriceGap=function(item, preItem)
30811
30827
  {
30812
30828
  if (!preItem || !item) return 0;
30813
30829
 
@@ -30818,12 +30834,15 @@ function ChartKLine()
30818
30834
  return -1;
30819
30835
  }
30820
30836
 
30821
- this.CheckPriceGrap=function(kItem)
30837
+ //检测缺口是不回补了
30838
+ this.CheckPriceGap=function(kItemInfo)
30822
30839
  {
30840
+ var kItem=kItemInfo.Data;
30823
30841
  for(var i=0;i<this.AryPriceGapCache.length;++i)
30824
30842
  {
30825
30843
  var item=this.AryPriceGapCache[i];
30826
30844
  var start=item.Data[0];
30845
+ var end=item.Data[1];
30827
30846
  if (item.Type==1) //上缺口
30828
30847
  {
30829
30848
  if (kItem.Low<=start.Data.High)
@@ -30832,6 +30851,8 @@ function ChartKLine()
30832
30851
  --i;
30833
30852
  continue;
30834
30853
  }
30854
+
30855
+ if (kItem.Low<end.Data.Low) item.Data[1]=kItemInfo;
30835
30856
  }
30836
30857
  else if (item.Type==2) //下缺口
30837
30858
  {
@@ -30841,6 +30862,8 @@ function ChartKLine()
30841
30862
  --i;
30842
30863
  continue;
30843
30864
  }
30865
+
30866
+ if (kItem.High>end.Data.High) item.Data[1]=kItemInfo;
30844
30867
  }
30845
30868
  }
30846
30869
  }
@@ -42580,6 +42603,7 @@ function IExtendChartPainting()
42580
42603
  this.DrawAfterTitle=false; //是否在动态标题画完以后再画,防止动态标题覆盖
42581
42604
  this.DrawAfterPicture=false; //是否在画图工具以后绘制
42582
42605
  this.IsCallbackDraw=false; //在回调函数里绘制, 不在Draw()中绘制
42606
+ this.ID=Guid();
42583
42607
 
42584
42608
  //上下左右间距
42585
42609
  this.Left=5;
@@ -129521,7 +129545,7 @@ function ScrollBarBGChart()
129521
129545
 
129522
129546
 
129523
129547
 
129524
- var HQCHART_VERSION="1.1.12987";
129548
+ var HQCHART_VERSION="1.1.13000";
129525
129549
 
129526
129550
  function PrintHQChartVersion()
129527
129551
  {
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.12987";
8
+ var HQCHART_VERSION="1.1.13000";
9
9
 
10
10
  function PrintHQChartVersion()
11
11
  {
@@ -11953,6 +11953,22 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11953
11953
  this.ExtendChartPaint.splice(data.Index,1);
11954
11954
  }
11955
11955
 
11956
+ //删除扩展画法
11957
+ this.DeleteExtendChartByID=function(id)
11958
+ {
11959
+ for(var i=0;i<this.ExtendChartPaint.length;++i)
11960
+ {
11961
+ var item=this.ExtendChartPaint[i];
11962
+ if (item.ID==id)
11963
+ {
11964
+ this.ExtendChartPaint.splice(i, 1);
11965
+ return true;
11966
+ }
11967
+ }
11968
+
11969
+ return false;
11970
+ }
11971
+
11956
11972
  //全屏提示信息 { Title:提示信息, Draw:false/true 是否立即重绘, }
11957
11973
  this.EnableSplashScreen=function(enable, option)
11958
11974
  {
@@ -26611,7 +26627,7 @@ function ChartKLine()
26611
26627
  var yClose=this.GetYFromData(data.Close,false);
26612
26628
  this.DrawKRange.End=i;
26613
26629
 
26614
- var kItemInfo={ Data:data, Coordinate:{ X:x, Low:yLow, High:yHigh, Close:yClose, Open:yClose, Left:left, Right:right }};
26630
+ var kItemInfo={ Data:data, Coordinate:{ X:x, Low:yLow, High:yHigh, Close:yClose, Open:yOpen, Left:left, Right:right }};
26615
26631
 
26616
26632
  if (ptMax.Value==null || ptMax.Value<data.High) //求最大值
26617
26633
  {
@@ -26734,9 +26750,9 @@ function ChartKLine()
26734
26750
 
26735
26751
  if (this.PriceGap.Enable && preKItemInfo)
26736
26752
  {
26737
- this.CheckPriceGrap(data);
26753
+ this.CheckPriceGap(kItemInfo);
26738
26754
 
26739
- var value=this.IsPriceGrap(kItemInfo,preKItemInfo);
26755
+ var value=this.IsPriceGap(kItemInfo,preKItemInfo);
26740
26756
  if (value>0)
26741
26757
  this.AryPriceGapCache.push({ Data:[preKItemInfo, kItemInfo], Type:value });
26742
26758
  }
@@ -26923,12 +26939,12 @@ function ChartKLine()
26923
26939
  var yHigh=this.GetYFromData(data.High, false);
26924
26940
  var yOpen=this.GetYFromData(data.Open, false);
26925
26941
 
26926
- var kItemInfo={ Data:data, Coordinate:{ X:x, Low:yLow, High:yHigh, Close:yClose, Open:yClose, Left:left, Right:right }};
26942
+ var kItemInfo={ Data:data, Coordinate:{ X:x, Low:yLow, High:yHigh, Close:yClose, Open:yOpen, Left:left, Right:right }};
26927
26943
 
26928
26944
  if (preKItemInfo)
26929
26945
  {
26930
- this.CheckPriceGrap(data);
26931
- var value=this.IsPriceGrap(kItemInfo,preKItemInfo);
26946
+ this.CheckPriceGap(kItemInfo);
26947
+ var value=this.IsPriceGap(kItemInfo,preKItemInfo);
26932
26948
  if (value>0) this.AryPriceGapCache.push({ Data:[preKItemInfo, kItemInfo], Type:value });
26933
26949
  }
26934
26950
 
@@ -27039,12 +27055,12 @@ function ChartKLine()
27039
27055
  var yHigh=this.GetYFromData(data.High, false);
27040
27056
  var yOpen=this.GetYFromData(data.Open, false);
27041
27057
 
27042
- var kItemInfo={ Data:data, Coordinate:{ X:x, Low:yLow, High:yHigh, Close:yClose, Open:yClose, Left:left, Right:right }};
27058
+ var kItemInfo={ Data:data, Coordinate:{ X:x, Low:yLow, High:yHigh, Close:yClose, Open:yOpen, Left:left, Right:right }};
27043
27059
 
27044
27060
  if (preKItemInfo)
27045
27061
  {
27046
- this.CheckPriceGrap(data);
27047
- var value=this.IsPriceGrap(kItemInfo,preKItemInfo);
27062
+ this.CheckPriceGap(kItemInfo);
27063
+ var value=this.IsPriceGap(kItemInfo,preKItemInfo);
27048
27064
  if (value>0) this.AryPriceGapCache.push({ Data:[preKItemInfo, kItemInfo], Type:value });
27049
27065
  }
27050
27066
 
@@ -27109,7 +27125,7 @@ function ChartKLine()
27109
27125
  var yClose=this.GetYFromData(data.Close, false);
27110
27126
  var y=yHigh;
27111
27127
 
27112
- var kItemInfo={ Data:data, Coordinate:{ X:x, Low:yLow, High:yHigh, Close:yClose, Open:yClose, Left:left, Right:right }};
27128
+ var kItemInfo={ Data:data, Coordinate:{ X:x, Low:yLow, High:yHigh, Close:yClose, Open:yOpen, Left:left, Right:right }};
27113
27129
 
27114
27130
  this.DrawKRange.End=i;
27115
27131
  if (ptMax.Value==null || ptMax.Value<data.High) //求最大值
@@ -27217,9 +27233,9 @@ function ChartKLine()
27217
27233
 
27218
27234
  if (this.PriceGap.Enable && preKItemInfo)
27219
27235
  {
27220
- this.CheckPriceGrap(data);
27236
+ this.CheckPriceGap(kItemInfo);
27221
27237
 
27222
- var value=this.IsPriceGrap(kItemInfo,preKItemInfo);
27238
+ var value=this.IsPriceGap(kItemInfo,preKItemInfo);
27223
27239
  if (value>0)
27224
27240
  this.AryPriceGapCache.push({ Data:[preKItemInfo, kItemInfo], Type:value });
27225
27241
  }
@@ -30851,7 +30867,7 @@ function ChartKLine()
30851
30867
  }
30852
30868
 
30853
30869
  //是否有缺口
30854
- this.IsPriceGrap=function(item, preItem)
30870
+ this.IsPriceGap=function(item, preItem)
30855
30871
  {
30856
30872
  if (!preItem || !item) return 0;
30857
30873
 
@@ -30862,12 +30878,15 @@ function ChartKLine()
30862
30878
  return -1;
30863
30879
  }
30864
30880
 
30865
- this.CheckPriceGrap=function(kItem)
30881
+ //检测缺口是不回补了
30882
+ this.CheckPriceGap=function(kItemInfo)
30866
30883
  {
30884
+ var kItem=kItemInfo.Data;
30867
30885
  for(var i=0;i<this.AryPriceGapCache.length;++i)
30868
30886
  {
30869
30887
  var item=this.AryPriceGapCache[i];
30870
30888
  var start=item.Data[0];
30889
+ var end=item.Data[1];
30871
30890
  if (item.Type==1) //上缺口
30872
30891
  {
30873
30892
  if (kItem.Low<=start.Data.High)
@@ -30876,6 +30895,8 @@ function ChartKLine()
30876
30895
  --i;
30877
30896
  continue;
30878
30897
  }
30898
+
30899
+ if (kItem.Low<end.Data.Low) item.Data[1]=kItemInfo;
30879
30900
  }
30880
30901
  else if (item.Type==2) //下缺口
30881
30902
  {
@@ -30885,6 +30906,8 @@ function ChartKLine()
30885
30906
  --i;
30886
30907
  continue;
30887
30908
  }
30909
+
30910
+ if (kItem.High>end.Data.High) item.Data[1]=kItemInfo;
30888
30911
  }
30889
30912
  }
30890
30913
  }
@@ -42624,6 +42647,7 @@ function IExtendChartPainting()
42624
42647
  this.DrawAfterTitle=false; //是否在动态标题画完以后再画,防止动态标题覆盖
42625
42648
  this.DrawAfterPicture=false; //是否在画图工具以后绘制
42626
42649
  this.IsCallbackDraw=false; //在回调函数里绘制, 不在Draw()中绘制
42650
+ this.ID=Guid();
42627
42651
 
42628
42652
  //上下左右间距
42629
42653
  this.Left=5;
@@ -129679,7 +129703,7 @@ function HQChartScriptWorker()
129679
129703
 
129680
129704
 
129681
129705
 
129682
- var HQCHART_VERSION="1.1.12987";
129706
+ var HQCHART_VERSION="1.1.13000";
129683
129707
 
129684
129708
  function PrintHQChartVersion()
129685
129709
  {