hqchart 1.1.13346 → 1.1.13350

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.
@@ -1152,7 +1152,9 @@ this.CreateKLineChartContainer=function(option){var _this2=this;var chart=null;i
1152
1152
  chart.ModifyIndexDialog=this.ModifyIndexDialog;chart.ChangeIndexDialog=this.ChangeIndexDialog;chart.MinuteDialog=this.MinuteDialog;var pixelRatio=GetDevicePixelRatio();//右键菜单
1153
1153
  if(IFrameSplitOperator.IsBool(option.IsShowRightMenu))chart.IsShowRightMenu=option.IsShowRightMenu;if(option.ScriptError)chart.ScriptErrorCallback=option.ScriptError;if(option.EnableScrollUpDown==true)chart.EnableScrollUpDown=option.EnableScrollUpDown;if(option.DisableMouse==true)chart.DisableMouse=option.DisableMouse;if(option.TouchMoveMinAngle)chart.TouchMoveMinAngle=option.TouchMoveMinAngle;if(option.EnableZoomUpDown)chart.EnableZoomUpDown=option.EnableZoomUpDown;if(IFrameSplitOperator.IsString(option.SplashTitle))chart.LoadDataSplashTitle=option.SplashTitle;if(IFrameSplitOperator.IsBool(option.EnableZoomIndexWindow))chart.EnableZoomIndexWindow=option.EnableZoomIndexWindow;if(IFrameSplitOperator.IsBool(option.IsDrawPictureXY))chart.IsDrawPictureXY=option.IsDrawPictureXY;if(IFrameSplitOperator.IsNumber(option.CtrlMoveStep))chart.CtrlMoveStep=option.CtrlMoveStep;if(IFrameSplitOperator.IsBool(option.EnableIndexChartDrag))chart.EnableIndexChartDrag=option.EnableIndexChartDrag;if(IFrameSplitOperator.IsBool(option.EnableVerifyRecvData))chart.EnableVerifyRecvData=option.EnableVerifyRecvData;if(option.GlobalOption){var item=option.GlobalOption;if(IFrameSplitOperator.IsBool(item.IsValueFullRange))chart.GlobalOption.IsValueFullRange=item.IsValueFullRange;if(item.SelectedBorder){var subItem=item.SelectedBorder;if(IFrameSplitOperator.IsNumber(subItem.Mode))chart.GlobalOption.SelectedBorder.Mode=subItem.Mode;}}if(option.EnableYDrag){var item=option.EnableYDrag;if(IFrameSplitOperator.IsBool(item.Left))chart.EnableYDrag.Left=item.Left;if(IFrameSplitOperator.IsBool(item.Right))chart.EnableYDrag.Right=item.Right;if(IFrameSplitOperator.IsBool(item.Wheel))chart.EnableYDrag.Wheel=item.Wheel;if(IFrameSplitOperator.IsNumber(item.WheelYMove))chart.EnableYDrag.WheelYMove=item.WheelYMove;}if(option.KLine)//k线图的属性设置
1154
1154
  {var item=option.KLine;if(option.KLine.DragMode>=0)chart.DragMode=option.KLine.DragMode;if(option.KLine.Right>=0)chart.Right=option.KLine.Right;if(option.KLine.Period>=0)chart.Period=option.KLine.Period;if(option.KLine.MaxReqeustDataCount>0)chart.MaxRequestDataCount=option.KLine.MaxReqeustDataCount;//兼容老版本
1155
- if(option.KLine.MaxRequestDataCount>0)chart.MaxRequestDataCount=option.KLine.MaxRequestDataCount;if(option.KLine.Info&&option.KLine.Info.length>0)chart.SetKLineInfo(option.KLine.Info,false);if(option.KLine.KLineDoubleClick==false)chart.MinuteDialog=this.MinuteDialog=null;if(IFrameSplitOperator.IsBool(item.IsShowTooltip))chart.IsShowTooltip=item.IsShowTooltip;if(IFrameSplitOperator.IsBool(item.IsShowKLineDivTooltip))chart.IsShowKLineDivTooltip=item.IsShowKLineDivTooltip;if(option.KLine.MaxRequestMinuteDayCount>0)chart.MaxRequestMinuteDayCount=option.KLine.MaxRequestMinuteDayCount;if(option.KLine.DrawType)chart.KLineDrawType=option.KLine.DrawType;if(option.KLine.FirstShowDate>19910101)chart.CustomShow={Date:option.KLine.FirstShowDate,PageSize:option.KLine.PageSize};if(option.KLine.RightSpaceCount>0)chart.RightSpaceCount=option.KLine.RightSpaceCount;if(option.KLine.ZoomType>0)chart.ZoomType=option.KLine.ZoomType;if(option.KLine.DataWidth>=1)chart.KLineSize={DataWidth:option.KLine.DataWidth};if(IFrameSplitOperator.IsNumber(option.KLine.RightFormula))chart.RightFormula=option.KLine.RightFormula;}if(option.EnableFlowCapital){var item=option.EnableFlowCapital;if(item.BIT==true)chart.EnableFlowCapital.BIT=item.BIT;}if(IFrameSplitOperator.IsBool(option.EnableBorderDrag)){chart.EnableBorderDrag=option.EnableBorderDrag;}if(option.Page){if(option.Page.Day&&option.Page.Day.Enable==true)chart.Page.Day.Enable=true;if(option.Page.Minute&&option.Page.Minute.Enable==true)chart.Page.Minute.Enable=true;}if(option.DragDownload){if(option.DragDownload.Day&&option.DragDownload.Day.Enable==true)chart.DragDownload.Day.Enable=true;if(option.DragDownload.Minute&&option.DragDownload.Minute.Enable==true)chart.DragDownload.Minute.Enable=true;}if(option.ZoomDownload){if(option.ZoomDownload.Day&&IFrameSplitOperator.IsBool(option.ZoomDownload.Day.Enable))chart.ZoomDownload.Day.Enable=option.ZoomDownload.Day.Enable;if(option.ZoomDownload.Minute&&IFrameSplitOperator.IsBool(option.ZoomDownload.Minute.Enable))chart.ZoomDownload.Minute.Enable=option.ZoomDownload.Minute.Enable;}if(option.Language){var value=g_JSChartLocalization.GetLanguageID(option.Language);if(IFrameSplitOperator.IsNumber(value))chart.LanguageID=value;}if(option.SourceDatatLimit)chart.SetSourceDatatLimit(option.SourceDatatLimit);if(option.DrawPicture)//画图工具
1155
+ if(option.KLine.MaxRequestDataCount>0)chart.MaxRequestDataCount=option.KLine.MaxRequestDataCount;if(option.KLine.Info&&option.KLine.Info.length>0)chart.SetKLineInfo(option.KLine.Info,false);if(option.KLine.KLineDoubleClick==false)chart.MinuteDialog=this.MinuteDialog=null;if(IFrameSplitOperator.IsBool(item.IsShowTooltip))chart.IsShowTooltip=item.IsShowTooltip;if(IFrameSplitOperator.IsBool(item.IsShowKLineDivTooltip))chart.IsShowKLineDivTooltip=item.IsShowKLineDivTooltip;if(option.KLine.MaxRequestMinuteDayCount>0)chart.MaxRequestMinuteDayCount=option.KLine.MaxRequestMinuteDayCount;if(option.KLine.DrawType)chart.KLineDrawType=option.KLine.DrawType;if(option.KLine.FirstShowDate>19910101)chart.CustomShow={Date:option.KLine.FirstShowDate,PageSize:option.KLine.PageSize};//!!已弃用 新的格式"CustomShow"
1156
+ if(option.KLine.RightSpaceCount>0)chart.RightSpaceCount=option.KLine.RightSpaceCount;if(option.KLine.ZoomType>0)chart.ZoomType=option.KLine.ZoomType;if(option.KLine.DataWidth>=1)chart.KLineSize={DataWidth:option.KLine.DataWidth};if(IFrameSplitOperator.IsNumber(option.KLine.RightFormula))chart.RightFormula=option.KLine.RightFormula;}//自定义显示位置
1157
+ if(option.CustomShow&&IFrameSplitOperator.IsPlusNumber(option.CustomShow.Date)){var item=option.CustomShow;chart.CustomShow={Date:item.Date};if(IFrameSplitOperator.IsNumber(item.Time))chart.CustomShow.Time=item.Time;if(IFrameSplitOperator.IsPlusNumber(item.PageSize))chart.CustomShow.PageSize=item.PageSize;}if(option.EnableFlowCapital){var item=option.EnableFlowCapital;if(item.BIT==true)chart.EnableFlowCapital.BIT=item.BIT;}if(IFrameSplitOperator.IsBool(option.EnableBorderDrag)){chart.EnableBorderDrag=option.EnableBorderDrag;}if(option.Page){if(option.Page.Day&&option.Page.Day.Enable==true)chart.Page.Day.Enable=true;if(option.Page.Minute&&option.Page.Minute.Enable==true)chart.Page.Minute.Enable=true;}if(option.DragDownload){if(option.DragDownload.Day&&option.DragDownload.Day.Enable==true)chart.DragDownload.Day.Enable=true;if(option.DragDownload.Minute&&option.DragDownload.Minute.Enable==true)chart.DragDownload.Minute.Enable=true;}if(option.ZoomDownload){if(option.ZoomDownload.Day&&IFrameSplitOperator.IsBool(option.ZoomDownload.Day.Enable))chart.ZoomDownload.Day.Enable=option.ZoomDownload.Day.Enable;if(option.ZoomDownload.Minute&&IFrameSplitOperator.IsBool(option.ZoomDownload.Minute.Enable))chart.ZoomDownload.Minute.Enable=option.ZoomDownload.Minute.Enable;}if(option.Language){var value=g_JSChartLocalization.GetLanguageID(option.Language);if(IFrameSplitOperator.IsNumber(value))chart.LanguageID=value;}if(option.SourceDatatLimit)chart.SetSourceDatatLimit(option.SourceDatatLimit);if(option.DrawPicture)//画图工具
1156
1158
  {if(option.DrawPicture.StorageKey&&chart.ChartDrawStorage)chart.ChartDrawStorage.Load(option.DrawPicture.StorageKey);}if(option.DrawTool)//画图工具
1157
1159
  {if(option.DrawTool.StorageKey&&chart.ChartDrawStorage)chart.ChartDrawStorage.Load(option.DrawTool.StorageKey);}if(IFrameSplitOperator.IsNumber(option.StepPixel))chart.StepPixel=option.StepPixel;if(option.ZoomStepPixel>0)chart.ZoomStepPixel=option.ZoomStepPixel;if(option.IsApiPeriod==true)chart.IsApiPeriod=option.IsApiPeriod;//图形选中
1158
1160
  if(option.SelectedChart){var item=option.SelectedChart;if(IFrameSplitOperator.IsBool(item.EnableSelected))chart.SelectedChart.EnableSelected=item.EnableSelected;if(IFrameSplitOperator.IsBool(item.EnableMoveOn))chart.SelectedChart.EnableMoveOn=item.EnableMoveOn;}if(!option.Windows||option.Windows.length<=0)return null;//K线扩展计算方法配置
@@ -5947,7 +5949,7 @@ var sColorChange=[];for(var i=1;i<7;i+=2){sColorChange.push(parseInt("0x"+color.
5947
5949
  {Name:"涂鸦线段",ClassName:'ChartDrawGraffitiLine',Create:function Create(){return new ChartDrawGraffitiLine();}},{Name:"固定范围成交量分布图",ClassName:"ChartDrawVolProfile",Create:function Create(){return new ChartDrawVolProfile();}},{Name:"DisjointChannel",ClassName:"ChartDrawDisjontChannel",Create:function Create(){return new ChartDrawDisjontChannel();}},{Name:"FlatTop",ClassName:"ChartDrawFlatTop",Create:function Create(){return new ChartDrawFlatTop();}},{Name:"水平线2",ClassName:"ChartDrawHLine",Create:function Create(){return new ChartDrawHLine();}},{Name:"MonitorLine",ClassName:"ChartDrawMonitorLine",Create:function Create(){return new ChartDrawMonitorLine();}},//trading view样式
5948
5950
  {Name:"Note",ClassName:"ChartDrawNote",Create:function Create(){return new ChartDrawNote();}},{Name:"AnchoredText",ClassName:"ChartDrawAnchoredText",Create:function Create(){return new ChartDrawAnchoredText();}},{Name:"PriceLabel",ClassName:"ChartDrawPriceLabel",Create:function Create(){return new ChartDrawPriceLabel();}},{Name:"PriceNote",ClassName:"ChartDrawPriceNote",Create:function Create(){return new ChartDrawPriceNote();}},{Name:"FibWedge",ClassName:"ChartDrawFibWedge",Create:function Create(){return new ChartDrawFibWedge();}},{Name:"FibRetracement",ClassName:"ChartFibRetracement",Create:function Create(){return new ChartFibRetracement();}},//斐波那契回测
5949
5951
  {Name:"FibSpeedResistanceFan",ClassName:"ChartFibSpeedResistanceFan",Create:function Create(){return new ChartFibSpeedResistanceFan();}},//斐波那契扇形
5950
- {Name:"PriceRange",ClassName:"ChartPriceRange",Create:function Create(){return new ChartPriceRange();}},{Name:"DateRange",ClassName:"ChartDateRange",Create:function Create(){return new ChartDateRange();}},{Name:"InfoLine",ClassName:"ChartInfoLine",Create:function Create(){return new ChartInfoLine();}}];IChartDrawPicture.MapIonFont=new _map2.default([["icon-arrow_up",{Text:'\uE683',Color:'#318757',Family:"iconfont"}],["icon-arrow_down",{Text:'\uE681',Color:'#db563e',Family:"iconfont"}],["icon-arrow_right",{Text:'\uE682',Color:'#318757',Family:"iconfont"}],["icon-arrow_left",{Text:'\uE680',Color:'#318757',Family:"iconfont"}]]);IChartDrawPicture.GetDrawPictureByName=function(value){for(var i in IChartDrawPicture.ArrayDrawPricture){var item=IChartDrawPicture.ArrayDrawPricture[i];if(item.Name==value)return item;}return null;};IChartDrawPicture.GetDrawPictureByClassName=function(value){for(var i in IChartDrawPicture.ArrayDrawPricture){var item=IChartDrawPicture.ArrayDrawPricture[i];if(item.ClassName==value)return item;}return null;};//注册一个新的画图工具 {Name:中文名字, ClassName:类名, Create:function()}
5952
+ {Name:"PriceRange",ClassName:"ChartPriceRange",Create:function Create(){return new ChartPriceRange();}},{Name:"DateRange",ClassName:"ChartDateRange",Create:function Create(){return new ChartDateRange();}},{Name:"InfoLine",ClassName:"ChartInfoLine",Create:function Create(){return new ChartInfoLine();}},{Name:"TrendAngle",ClassName:"ChartTrendAngle",Create:function Create(){return new ChartTrendAngle();}}];IChartDrawPicture.MapIonFont=new _map2.default([["icon-arrow_up",{Text:'\uE683',Color:'#318757',Family:"iconfont"}],["icon-arrow_down",{Text:'\uE681',Color:'#db563e',Family:"iconfont"}],["icon-arrow_right",{Text:'\uE682',Color:'#318757',Family:"iconfont"}],["icon-arrow_left",{Text:'\uE680',Color:'#318757',Family:"iconfont"}]]);IChartDrawPicture.GetDrawPictureByName=function(value){for(var i in IChartDrawPicture.ArrayDrawPricture){var item=IChartDrawPicture.ArrayDrawPricture[i];if(item.Name==value)return item;}return null;};IChartDrawPicture.GetDrawPictureByClassName=function(value){for(var i in IChartDrawPicture.ArrayDrawPricture){var item=IChartDrawPicture.ArrayDrawPricture[i];if(item.ClassName==value)return item;}return null;};//注册一个新的画图工具 {Name:中文名字, ClassName:类名, Create:function()}
5951
5953
  IChartDrawPicture.RegisterDrawPicture=function(obj){if(!obj.Name||!obj.ClassName||!obj.Create)return false;var item={Name:obj.Name,ClassName:obj.ClassName,Create:obj.Create};IChartDrawPicture.ArrayDrawPricture.push(item);JSConsole.Chart.Log('[IChartDrawPicture.RegisterDrawPicture] registered new draw picture class. item=',item);return true;};//注册一个新图标 {Name:, Text: , Color:, Family:}
5952
5954
  IChartDrawPicture.RegisterIonFont=function(obj){if(!obj.Name||!obj.Text||!obj.Family)return false;var isOverwirte=IChartDrawPicture.MapIonFont.has(obj.Name);IChartDrawPicture.MapIonFont.set(obj.Name,obj);JSConsole.Chart.Log('[IChartDrawPicture.RegisterIonFont] registered new icon font, obj=, isOverwirte=',obj,isOverwirte);return true;};IChartDrawPicture.CreateChartDrawPicture=function(obj)//创建画图工具
5953
5955
  {var item=IChartDrawPicture.GetDrawPictureByClassName(obj.ClassName);if(!item)return null;var chartDraw=item.Create();//TODO:后面都放到每一个SetOptin里面
@@ -5962,7 +5964,14 @@ this.newMethod();delete this.newMethod;this.ClassName='ChartDrawPictureLine';thi
5962
5964
  }
5963
5965
  */var line={Start:ptStart,End:ptEnd};this.LinePoint.push(line);this.DrawPoint(drawPoint);//画点
5964
5966
  this.Canvas.restore();};this.GetYCoordinatePoint=function(){if(this.IsFrameMinSize())return null;if(!this.IsShow)return null;if(this.Status<2)return null;if(!this.Point.length||!this.Frame)return null;if(this.Status!=10)return null;//完成
5965
- var aryPoint=[];for(var i=0;i<this.Value.length;++i){var item=this.Value[i];var y=this.Frame.GetYFromData(item.YValue,false);aryPoint.push({Y:y,YValue:item.YValue,Item:item,Color:this.PointColor});}return aryPoint;};}//画图工具-涂鸦线段 Y轴关联数值, X轴不关联
5967
+ var aryPoint=[];for(var i=0;i<this.Value.length;++i){var item=this.Value[i];var y=this.Frame.GetYFromData(item.YValue,false);aryPoint.push({Y:y,YValue:item.YValue,Item:item,Color:this.PointColor});}return aryPoint;};}//趋势线角度
5968
+ function ChartTrendAngle(){this.newMethod=ChartDrawPictureLine;//派生
5969
+ this.newMethod();delete this.newMethod;this.ClassName='ChartTrendAngle';this.AngleLineLength=100;this.AngleLineDash=[3,3];this.Font=12*GetDevicePixelRatio()+"px 微软雅黑";this.Super_SetOption=this.SetOption;//父类函数
5970
+ this.SetOption=function(option){if(this.Super_SetOption)this.Super_SetOption(option);if(option){if(IFrameSplitOperator.IsNumber(option.AngleLineLength))this.AngleLineLength=option.AngleLineLength;if(option.Font)this.Font=option.Font;if(option.AngleLineDash)this.AngleLineDash=option.AngleLineDash;}};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:false});if(!drawPoint)return;if(drawPoint.length!=2)return;this.ClipFrame();var ptStart=drawPoint[0];var ptEnd=drawPoint[1];this.SetLineWidth();this.Canvas.strokeStyle=this.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(ptStart.X,ptStart.Y);this.Canvas.lineTo(ptEnd.X,ptEnd.Y);this.Canvas.stroke();this.RestoreLineWidth();this.DrawAngle(ptStart,ptEnd);var line={Start:ptStart,End:ptEnd};this.LinePoint.push(line);this.DrawPoint(drawPoint);//画点
5971
+ this.Canvas.restore();};this.DrawAngle=function(ptStart,ptEnd){var pixelRatio=GetDevicePixelRatio();var angle=this.CalculateAngle(ptStart.X,ptStart.Y,ptEnd.X,ptEnd.Y);//角度
5972
+ var lineLength=this.AngleLineLength*pixelRatio;//角度线长度
5973
+ var ptRight={X:ptStart.X+lineLength,Y:ptStart.Y};if(this.AngleLineDash)this.Canvas.setLineDash(this.AngleLineDash);//画虚线
5974
+ this.Canvas.lineWidth=1*GetDevicePixelRatio();this.Canvas.beginPath();this.Canvas.moveTo(ToFixedPoint(ptStart.X),ToFixedPoint(ptStart.Y));this.Canvas.lineTo(ToFixedPoint(ptRight.X),ToFixedPoint(ptRight.Y));this.Canvas.stroke();this.Canvas.beginPath();if(angle<=180){this.Canvas.arc(ptStart.X,ToFixedPoint(ptStart.Y),lineLength,0,Math.PI/180*(360-angle),true);var text=angle.toFixed(0)+'\xB0';}else{this.Canvas.arc(ptStart.X,ToFixedPoint(ptStart.Y),lineLength,0,Math.PI/180*(360-angle),false);var text=(angle-360).toFixed(0)+'\xB0';}this.Canvas.stroke();this.Canvas.textAlign="left";this.Canvas.textBaseline="middle";this.Canvas.font=this.Font;this.Canvas.fillStyle=this.LineColor;if(this.AngleLineDash)this.Canvas.setLineDash([]);this.Canvas.fillText(text,ptRight.X+5,ptRight.Y);};}//画图工具-涂鸦线段 Y轴关联数值, X轴不关联
5966
5975
  function ChartDrawGraffitiLine(){this.newMethod=IChartDrawPicture;//派生
5967
5976
  this.newMethod();delete this.newMethod;this.ClassName='ChartDrawGraffitiLine';this.IsPointIn=this.IsPointIn_XYValue_Line;this.GetXYCoordinate=null;this.PointCount=2;//画点的个数
5968
5977
  this.EnableMoveCheck=false;//允许移动时不监测是否超出边界
@@ -6897,7 +6906,7 @@ this.ChartDrawStorage=new ChartDrawStorage();this.ChartDrawStorageCache=null;//
6897
6906
  this.RightSpaceCount=0;//右侧空白个数
6898
6907
  this.SourceDataLimit=new _map2.default();//每个周期缓存数据最大个数 key=周期 value=最大个数
6899
6908
  this.CtrlMoveStep=5;//Ctrl+(Left/Right) 移动数据个数
6900
- this.CustomShow=null;//首先显示的K线的起始日期 { Date:日期 PageSize:}
6909
+ this.CustomShow=null;//首先显示的K线的起始日期 { Date:日期, Time:时间, PageSize:}
6901
6910
  this.ZoomType=0;//缩放模式 0=最右边固定缩放, 1=十字光标两边缩放
6902
6911
  this.IsZoomLockRight=false;this.KLineSize=null;//{ DataWidth:, }
6903
6912
  //this.EnableYDrag={ Left:false, Right:true };
@@ -6979,8 +6988,7 @@ if(obj.Type==0)//滑块移动
6979
6988
  {var startIndex=obj.Start.Index;var showCount=obj.End.Index-obj.Start.Index+1;var start=hisData.Data[obj.Start.Index];var end=hisData.Data[obj.End.Index];//设置X轴显示数据个数
6980
6989
  this.Frame.SetXShowCount(showCount);hisData.DataOffset=obj.Start.Index;this.CursorIndex=0;this.LastPoint.X=null;this.LastPoint.Y=null;this.ChartOperator_Temp_Update();}}else if(id==JSCHART_OPERATOR_ID.OP_GOTO)//{ Date:日期, Time:, PageSize:可选 }
6981
6990
  {if(!IFrameSplitOperator.IsNumber(obj.Date))return;var hisData=this.ChartOperator_Temp_GetHistroyData();if(!hisData)return;//数据还没有到达
6982
- var index=null;if(ChartData.IsDayPeriod(this.Period,true)){for(var i=0;i<hisData.Data.length;++i){var item=hisData.Data[i];if(item.Date>=obj.Date){index=i;break;}}}else if(ChartData.IsMinutePeriod(this.Period,true)){var findTime=obj.Time;if(IFrameSplitOperator.IsPlusNumber(findTime)){for(var i=0;i<hisData.Data.length;++i){var item=hisData.Data[i];if(item.Date>obj.Date||item.Date==obj.Date&&item.Time>=findTime){index=i;break;}}}else//只有日期
6983
- {for(var i=0;i<hisData.Data.length;++i){var item=hisData.Data[i];if(item.Date>=obj.Date){index=i;break;}}}}if(index===null){JSConsole.Chart.Log('[KLineChartContainer::ChartOperator] OP_GOTO can\'t find date='+obj.Date+' time='+obj.Time);return;}var oldXPointCount=this.Frame.SubFrame[0].Frame.XPointCount;var xPointCount=oldXPointCount;if(obj.PageSize>0)//调整一屏显示的个数
6991
+ var index=this.ChartOperator_GetIndex_ByDateTime(hisData,obj,this.Period,0);if(index===null){JSConsole.Chart.Log('[KLineChartContainer::ChartOperator] OP_GOTO can\'t find date='+obj.Date+' time='+obj.Time);return;}var oldXPointCount=this.Frame.SubFrame[0].Frame.XPointCount;var xPointCount=oldXPointCount;if(obj.PageSize>0)//调整一屏显示的个数
6984
6992
  {xPointCount=obj.PageSize;}if(xPointCount!=oldXPointCount){//设置X轴显示数据个数
6985
6993
  this.Frame.SetXShowCount(xPointCount);}hisData.DataOffset=index;this.CursorIndex=0;this.LastPoint.X=null;this.LastPoint.Y=null;this.ChartOperator_Temp_Update();}else if(id==JSCHART_OPERATOR_ID.OP_CORSSCURSOR_GOTO)//移动十字光标{ Date:, Time }
6986
6994
  {if(!IFrameSplitOperator.IsNumber(obj.Date))return;var bTime=IFrameSplitOperator.IsNumber(obj.Time);var pageInfo=this.GetChartStatus();if(!pageInfo)return;var hisData=this.ChartOperator_Temp_GetHistroyData();if(!hisData)return;//数据还没有到达
@@ -6991,7 +6999,12 @@ this.ChartOperator_Temp_GetHistroyData=function(){var hisData=null;if(!this.Fram
6991
6999
  return hisData;};this.ChartOperator_Temp_Update=function(){this.UpdataDataoffset();//更新数据偏移
6992
7000
  this.UpdateFrameMaxMin();//调整坐标最大 最小值
6993
7001
  this.ResetFrameXSplit();this.Frame.SetSizeChage(true);this.Draw();this.UpdatePointByCursorIndex();//更新十字光标位子
6994
- };this.OnWheel=function(e){var _this16=this;JSConsole.Chart.Log('[KLineChartContainer::OnWheel]',e);if(this.ChartSplashPaint&&this.ChartSplashPaint.IsEnableSplash==true)return;var pixelTatio=GetDevicePixelRatio();var x=(e.clientX-this.UIElement.getBoundingClientRect().left)*pixelTatio;var y=(e.clientY-this.UIElement.getBoundingClientRect().top)*pixelTatio;var isInClient=false;this.Canvas.beginPath();this.Canvas.rect(this.Frame.ChartBorder.GetLeft(),this.Frame.ChartBorder.GetTop(),this.Frame.ChartBorder.GetWidth(),this.Frame.ChartBorder.GetHeight());isInClient=this.Canvas.isPointInPath(x,y);var wheelValue=e.wheelDelta;if(!IFrameSplitOperator.IsObjectExist(e.wheelDelta))wheelValue=e.deltaY*-0.01;var enableZoomUpDown=true;//是否允许缩放
7002
+ };//定位K线的索引
7003
+ //searchType 0模糊匹配 1=精确匹配
7004
+ this.ChartOperator_GetIndex_ByDateTime=function(hisData,dateTime,period,searchType){if(!hisData)return null;//数据还没有到达
7005
+ if(!IFrameSplitOperator.IsNonEmptyArray(hisData.Data))return null;if(!IFrameSplitOperator.IsPlusNumber(dateTime.Date)||dateTime.Date<19810101)return null;if(ChartData.IsDayPeriod(period,true)){for(var i=0;i<hisData.Data.length;++i){var item=hisData.Data[i];if(searchType==1){if(item.Date==dateTime.Date)return i;}else{if(item.Date>=dateTime.Date)return i;}}return null;}if(ChartData.IsMinutePeriod(period,true)||ChartData.IsMilliSecondPeriod(period)){var findTime=null;if(IFrameSplitOperator.IsNumber(dateTime.Time))findTime=dateTime.Time;for(var i=0;i<hisData.Data.length;++i){var item=hisData.Data[i];if(searchType==1)//精确匹配
7006
+ {if(findTime==null)return null;if(item.Date==dateTime.Date&&item.Time==findTime)return i;}else{if(findTime==null)//只有日期
7007
+ {if(item.Date>=dateTime.Date)return i;}else{if(item.Date>dateTime.Date||item.Date==dateTime.Date&&item.Time>=findTime)return i;}}}return null;}return null;};this.OnWheel=function(e){var _this16=this;JSConsole.Chart.Log('[KLineChartContainer::OnWheel]',e);if(this.ChartSplashPaint&&this.ChartSplashPaint.IsEnableSplash==true)return;var pixelTatio=GetDevicePixelRatio();var x=(e.clientX-this.UIElement.getBoundingClientRect().left)*pixelTatio;var y=(e.clientY-this.UIElement.getBoundingClientRect().top)*pixelTatio;var isInClient=false;this.Canvas.beginPath();this.Canvas.rect(this.Frame.ChartBorder.GetLeft(),this.Frame.ChartBorder.GetTop(),this.Frame.ChartBorder.GetWidth(),this.Frame.ChartBorder.GetHeight());isInClient=this.Canvas.isPointInPath(x,y);var wheelValue=e.wheelDelta;if(!IFrameSplitOperator.IsObjectExist(e.wheelDelta))wheelValue=e.deltaY*-0.01;var enableZoomUpDown=true;//是否允许缩放
6995
7008
  if(this.EnableZoomUpDown&&this.EnableZoomUpDown.Wheel===false)enableZoomUpDown=false;if(this.SourceData&&this.SourceData.Data){if(isInClient&&wheelValue<0&&enableZoomUpDown)//缩小
6996
7009
  {var cursorIndex={ZoomType:this.ZoomType,IsLockRight:this.IsZoomLockRight};cursorIndex.Index=parseInt(Math.abs(this.CursorIndex-0.5).toFixed(0));if(e.ctrlKey)cursorIndex.ZoomType=1;//ctrl+滚轴 十字中心缩放
6997
7010
  if(this.Frame.ZoomDown(cursorIndex,{ZoomDownloadDataCallback:function ZoomDownloadDataCallback(requestData){_this16.ZoomDownloadData(requestData);}})){this.CursorIndex=cursorIndex.Index;this.UpdataDataoffset();this.UpdatePointByCursorIndex();this.UpdateFrameMaxMin();this.ResetFrameXSplit();if(this.ChartSplashPaint&&this.ChartSplashPaint.IsEnableSplash==true){}else{this.Draw();}this.OnKLinePageChange("wheel");}}else if(isInClient&&wheelValue>0&&enableZoomUpDown)//放大
@@ -7051,7 +7064,8 @@ item.YSplitOperator.Period=this.Period;//周期
7051
7064
  }}this.TitlePaint[0].Data=this.ChartPaint[0].Data;//动态标题
7052
7065
  this.TitlePaint[0].Symbol=this.Symbol;this.TitlePaint[0].Name=this.Name;this.ChartCorssCursor.StringFormatX.Data=this.ChartPaint[0].Data;//十字光标
7053
7066
  this.Frame.Data=this.ChartPaint[0].Data;for(var i in this.OverlayChartPaint)//主图股票数据绑定到叠加股票上
7054
- {var item=this.OverlayChartPaint[i];item.MainData=this.ChartPaint[0].Data;}this.ChartCorssCursor.StringFormatY.Symbol=this.Symbol;};this.SetCustomShow=function(customShow,hisData){if(!customShow||!customShow.Date||customShow.Date<19910101)return;var firstDate=customShow.Date;var index=null;for(var i=0;i<hisData.Data.length;++i){var item=hisData.Data[i];if(item.Date>=firstDate){index=i;break;}}if(index===null){JSConsole.Chart.Log('[KLineChartContainer::SetCustomShow] Can\'t find first date='+firstDate);return;}var count=hisData.Data.length-index;if(customShow.PageSize>0)count=customShow.PageSize;var customShowCount=count;var pageSize=this.GetMaxMinPageSize();if(count>pageSize.Max)customShowCount=pageSize.Max;else if(count<pageSize.Min)customShowCount=pageSize.Min;for(var i in this.Frame.SubFrame){var item=this.Frame.SubFrame[i].Frame;item.XPointCount=customShowCount;}this.ChartPaint[0].Data.DataOffset=index;this.CursorIndex=0;};this.OnDragSelectRectMouseUp=function(e){var paint=this.GetRectSelectPaint();if(!paint)return;var selectData=paint.GetSelectRectData();if(!selectData)return;var pixelTatio=GetDevicePixelRatio();var corssCursor=this.ChartCorssCursor;//十字光标
7067
+ {var item=this.OverlayChartPaint[i];item.MainData=this.ChartPaint[0].Data;}this.ChartCorssCursor.StringFormatY.Symbol=this.Symbol;};this.SetCustomShow=function(customShow,hisData){var index=this.ChartOperator_GetIndex_ByDateTime(hisData,customShow,this.Period,0);if(index===null){JSConsole.Chart.Log("[KLineChartContainer::SetCustomShow] Can't find index by customShow=",customShow);return;}if(IFrameSplitOperator.IsPlusNumber(customShow.PageSize))//调整一屏显示个数 否则使用默认的
7068
+ {var showCount=customShow.PageSize;for(var i=0;i<this.Frame.SubFrame.length;++i){var item=this.Frame.SubFrame[i].Frame;item.XPointCount=showCount;}}this.ChartPaint[0].Data.DataOffset=index;this.CursorIndex=0;};this.OnDragSelectRectMouseUp=function(e){var paint=this.GetRectSelectPaint();if(!paint)return;var selectData=paint.GetSelectRectData();if(!selectData)return;var pixelTatio=GetDevicePixelRatio();var corssCursor=this.ChartCorssCursor;//十字光标
7055
7069
  var x=corssCursor.LastPoint.X/pixelTatio;var y=corssCursor.LastPoint.Y/pixelTatio;var isShowMenu=true;var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_DRAG_SELECT_RECT_MOUSEUP);if(event){var data={X:x,Y:y,SelectData:selectData,//区间选择的数据
7056
7070
  RectSelectPaint:paint,//区间选择背景
7057
7071
  IsShowMenu:false};event.Callback(event,data,this);isShowMenu=data.IsShowMenu;}if(isShowMenu){var data={Chart:this,X:x,Y:y,SelectData:selectData,//区间选择的数据
@@ -7492,7 +7506,7 @@ this.ClearIndexPaint();//清空指标
7492
7506
  if(option){if(IFrameSplitOperator.IsNonEmptyArray(option.Windows)){var windows=option.Windows;for(var i=0;i<windows.length;++i){if(i>=this.WindowIndex.length)break;//暂时不支持 动态增加/减少
7493
7507
  var item=windows[i];if(!item)continue;if(item.Script){this.WindowIndex[i]=new ScriptIndex(item.Name,item.Script,item.Args,item);//脚本执行
7494
7508
  }else if(item.API){var apiItem=item.API;this.WindowIndex[i]=new APIScriptIndex(apiItem.Name,apiItem.Script,apiItem.Args,item);}else{var indexID=item.Index;var systemScript=new JSIndexScript();var indexInfo=systemScript.Get(indexID);if(indexInfo){JSIndexScript.ModifyAttribute(indexInfo,item);indexInfo.ID=indexID;this.WindowIndex[i]=new ScriptIndex(indexInfo.Name,indexInfo.Script,indexInfo.Args,indexInfo);//脚本执行
7495
- }}}}}this.ReloadChartDrawPicture();this.Frame.ClearUpDonwFrameYData();if(ChartData.IsDayPeriod(this.Period,true)){this.ClearStockCache();this.RequestHistoryData();//请求日线数据
7509
+ }}}}if(option.CustomShow&&IFrameSplitOperator.IsPlusNumber(option.CustomShow.Date)){var item=option.CustomShow;this.CustomShow={Date:item.Date};if(IFrameSplitOperator.IsNumber(item.Time))this.CustomShow.Time=item.Time;if(IFrameSplitOperator.IsPlusNumber(item.PageSize))this.CustomShow.PageSize=item.PageSize;}}this.ReloadChartDrawPicture();this.Frame.ClearUpDonwFrameYData();if(ChartData.IsDayPeriod(this.Period,true)){this.ClearStockCache();this.RequestHistoryData();//请求日线数据
7496
7510
  //this.ReqeustKLineInfoData();
7497
7511
  }else if(ChartData.IsMinutePeriod(this.Period,true)||ChartData.IsSecondPeriod(this.Period)||ChartData.IsMilliSecondPeriod(this.Period)){this.ClearStockCache();this.RequestHistoryMinuteData();//请求分钟数据
7498
7512
  }else if(ChartData.IsTickPeriod(this.Period)){this.ClearStockCache();this.RequestTickData();}};this.ReqeustKLineInfoData=function(obj){if(obj&&obj.FunctionName=="RecvDragDayData")//增量更新
@@ -13272,7 +13286,7 @@ JSPopMenu.SEPARATOR_LINE_NAME="MENU_SEPARATOR";//分割线
13272
13286
  */var JS_DRAWTOOL_MENU_ID={CMD_SELECTED_ID:1,CMD_CHANGE_LINE_COLOR_ID:2,CMD_DELETE_ALL_DRAW_CHART_ID:3,CMD_ERASE_DRAW_CHART_ID:4,CMD_ENABLE_MAGNET_ID:5,//画图工具磁体功能
13273
13287
  CMD_DELETE_DRAW_CHART_ID:6,CMD_CHANGE_FONT_COLOR_ID:7,//切换字体颜色
13274
13288
  CMD_CHANGE_BG_COLOR_ID:8//切换背景色
13275
- };function JSDialogDrawTool(){this.AryChartGroup=[{Title:"线段",AryChart:[{Title:'线段',ClassName:'hqchart_drawtool icon-draw_line',Type:0,Data:{ID:"线段"}},{Title:'线段信息',ClassName:'hqchart_drawtool icon-infoline',Type:0,Data:{ID:"InfoLine"}},{Title:'射线',ClassName:'hqchart_drawtool icon-draw_rays',Type:0,Data:{ID:"射线"}},{Title:'标价线',ClassName:'hqchart_drawtool icon-price_line',Type:0,Data:{ID:"标价线"}},{Title:'垂直线',ClassName:'hqchart_drawtool icon-vertical_line',Type:0,Data:{ID:"垂直线"}},{Title:'十字线',ClassName:'hqchart_drawtool icon-tubiao_shizixian',Type:0,Data:{ID:"十字线"}},{Title:'箭头',ClassName:'hqchart_drawtool icon-draw_rays',Type:0,Data:{ID:"箭头"}},{Title:'趋势线',ClassName:'hqchart_drawtool icon-draw_trendline',Type:0,Data:{ID:"趋势线"}},{Title:'水平线',ClassName:'hqchart_drawtool icon-draw_hline',Type:0,Data:{ID:"水平线"}},{Title:'涂鸦线段',ClassName:'hqchart_drawtool icon-draw_line',Type:0,Data:{ID:"涂鸦线段"}},{Title:'阻速线',ClassName:'hqchart_drawtool icon-draw_resline',Type:0,Data:{ID:"阻速线"}},{Title:'江恩角度线',ClassName:'hqchart_drawtool icon-jiangenjiaoduxian',Type:0,Data:{ID:"江恩角度线"}}]},{Title:"通道",AryChart:[{Title:'平行线',ClassName:'hqchart_drawtool icon-draw_parallel_lines',Type:0,Data:{ID:"平行线"}},{Title:'水平线段',ClassName:'hqchart_drawtool icon-draw_hlinesegment',Type:0,Data:{ID:"水平线段"}},{Title:'平行射线',ClassName:'hqchart_drawtool icon-draw_p_rays_lines',Type:0,Data:{ID:"平行射线"}},{Title:'平行通道',ClassName:'hqchart_drawtool icon-draw_parallelchannel',Type:0,Data:{ID:"平行通道"}},{Title:'价格通道线',ClassName:'hqchart_drawtool icon-draw_pricechannel',Type:0,Data:{ID:"价格通道线"}},{Title:'箱型线',ClassName:'hqchart_drawtool icon-draw_box',Type:0,Data:{ID:"箱型线"}},{Title:"不相交通道",ClassName:"hqchart_drawtool icon-buxiangjiaojiao",Type:0,Data:{ID:"DisjointChannel"}},{Title:"平滑顶/底",ClassName:"hqchart_drawtool icon-tubiao_buxiangjiaotongdao",Type:0,Data:{ID:"FlatTop"}},{Title:"波段线",ClassName:'hqchart_drawtool icon-draw_waveband',Type:0,Data:{ID:"波段线"}},{Title:"百分比线",ClassName:'hqchart_drawtool icon-PercentageLine',Type:0,Data:{ID:"百分比线"}},{Title:"黄金分割",ClassName:'hqchart_drawtool icon-GoldenSection',Type:0,Data:{ID:"黄金分割"}},{Title:"线形回归线",ClassName:'hqchart_drawtool icon-linear_3',Type:0,Data:{ID:"线形回归线"}},{Title:"线形回归带",ClassName:'hqchart_drawtool icon-linear_1',Type:0,Data:{ID:"线形回归带"}},{Title:"延长线形回归带",ClassName:'hqchart_drawtool icon-linear_2',Type:0,Data:{ID:"延长线形回归带"}}]},{Title:"形状",AryChart:[{Title:'圆弧线',ClassName:'hqchart_drawtool icon-draw_arc',Type:0,Data:{ID:"圆弧线"}},{Title:'矩形',ClassName:'hqchart_drawtool icon-rectangle',Type:0,Data:{ID:"矩形"}},{Title:'平行四边形',ClassName:'hqchart_drawtool icon-draw_quadrangle',Type:0,Data:{ID:"平行四边形"}},{Title:'三角形',ClassName:'hqchart_drawtool icon-draw_triangle',Type:0,Data:{ID:"三角形"}},{Title:'圆',ClassName:'hqchart_drawtool icon-draw_circle',Type:0,Data:{ID:"圆"}},{Title:'对称角度',ClassName:'hqchart_drawtool icon-draw_symangle',Type:0,Data:{ID:"对称角度"}}]},{Title:"波浪线",AryChart:[{Title:'M头W底',ClassName:'hqchart_drawtool icon-draw_wavemw',Type:0,Data:{ID:"M头W底"}},{Title:'头肩型',ClassName:'hqchart_drawtool icon-draw_head_shoulders_bt',Type:0,Data:{ID:"头肩型"}},{Title:'波浪尺',ClassName:'hqchart_drawtool icon-waveruler',Type:0,Data:{ID:"波浪尺"}},{Title:'AB波浪尺',ClassName:'hqchart_drawtool icon-waveruler',Type:0,Data:{ID:"AB波浪尺"}}]},{Title:"斐波那契",AryChart:[{Title:'斐波那契周期线',ClassName:'hqchart_drawtool icon-feibonaqizhouqixian',Type:0,Data:{ID:"斐波那契周期线"}},{Title:'斐波那契楔形',ClassName:'hqchart_drawtool icon-feibonaqiqixing',Type:0,Data:{ID:"FibWedge"}},{Title:'斐波那契回撤',ClassName:'hqchart_drawtool icon-feibonaqihuiche',Type:0,Data:{ID:"FibRetracement"}},{Title:'斐波那契速度阻力扇',ClassName:'hqchart_drawtool icon-feibonaqisuduzulishan',Type:0,Data:{ID:"FibSpeedResistanceFan"}}]},{Title:"测量工具",AryChart:[{Title:'价格范围',ClassName:'hqchart_drawtool icon-shijianfanwei',Type:0,Data:{ID:"PriceRange"}},{Title:'时间范围',ClassName:'hqchart_drawtool icon-jiagefanwei',Type:0,Data:{ID:"DateRange"}},{Title:"监测线",ClassName:"hqchart_drawtool icon-jiance",Type:0,Data:{ID:"MonitorLine"}}]},{Title:"文字",AryChart:[{Title:"文字",ClassName:'hqchart_drawtool icon-draw_text',Type:0,Data:{ID:"文本"}},{Title:"锚点文字",ClassName:'hqchart_drawtool icon-maodianwenzi',Type:0,Data:{ID:"AnchoredText"}},{Title:"注释",ClassName:'hqchart_drawtool icon-maodian ',Type:0,Data:{ID:"Note"}},{Title:'价格标签',ClassName:'hqchart_drawtool icon-Tooltip',Type:0,Data:{ID:"PriceLabel"}},{Title:'价格注释',ClassName:'hqchart_drawtool icon-tooltiptext',Type:0,Data:{ID:"PriceNote"}},{Title:'向上箭头',ClassName:'iconfont icon-arrow_up',Type:0,Data:{ID:"icon-arrow_up"}},{Title:'向下箭头',ClassName:'iconfont icon-arrow_down',Type:0,Data:{ID:"icon-arrow_down"}},{Title:'向左箭头',ClassName:'iconfont icon-arrow_left',Type:0,Data:{ID:"icon-arrow_left"}},{Title:'向右箭头',ClassName:'iconfont icon-arrow_right',Type:0,Data:{ID:"icon-arrow_right"}}]}];this.ToolConfig={Title:"工具",AryTool:[{Title:"选中",ClassName:'hqchart_drawtool icon-arrow',Type:1,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_SELECTED_ID}},{Title:'尺子',ClassName:'hqchart_drawtool icon-ruler',Type:0,Data:{ID:"尺子"}},{Title:"磁铁",ClassName:'hqchart_drawtool icon-xifu',Type:2,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_ENABLE_MAGNET_ID}},{Title:"点击切换颜色",ClassName:'hqchart_drawtool icon-fangkuai',Type:2,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_CHANGE_LINE_COLOR_ID}},{Title:"擦除画线",ClassName:'hqchart_drawtool icon-a-xiangpicachuxiangpica',Type:2,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_ERASE_DRAW_CHART_ID}},{Title:"删除所有画线",ClassName:'hqchart_drawtool icon-recycle_bin',Type:2,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_DELETE_ALL_DRAW_CHART_ID}}]};this.DivDialog=null;this.AryDivChart=[];this.HQChart=null;this.LineColor='rgb(255,140,0)';this.LineColorIndex=0;this.RandomLineColor=["rgb(255,69,0)","rgb(0,191,255)","rgb(255,0,255)","rgb(255,105,180)"];this.LineWidth=1*GetDevicePixelRatio();this.ColumnCount=4;this.DragTitle=null;this.Inital=function(hqchart){this.LineColor=g_JSChartResource.DrawPicture.LineColor[0];this.RandomLineColor.splice(0,0,this.LineColor);this.HQChart=hqchart;};this.Create=function(){var _this69=this;var divDom=document.createElement("div");divDom.className='UMyChart_DrawTool_Dialog_Div';var divTitle=document.createElement("div");divTitle.className='UMyChart_DrawTool_Title_Div';divTitle.innerText="画图工具";divTitle.onmousedown=function(e){_this69.OnMouseDownTitle(e);};var divClose=document.createElement("div");divClose.className='UMyChart_DrawTool_Close_Div';divClose.innerText="x";divClose.onmousedown=function(e){_this69.Close(e);};divTitle.appendChild(divClose);divDom.appendChild(divTitle);var table=document.createElement("table");table.className="UMyChart_DrawTool_Table";divDom.appendChild(table);var tbody=document.createElement("tbody");tbody.className="UMyChart_DrawTool_Tbody";table.appendChild(tbody);for(var i=0;i<this.AryChartGroup.length;++i){var item=this.AryChartGroup[i];if(!IFrameSplitOperator.IsNonEmptyArray(item.AryChart))continue;this.CreateChartGroupItem(item,tbody);var trDom=document.createElement("tr");trDom.className='UMyChart_DrawTool_Group_End_Tr';tbody.appendChild(trDom);}//工具栏
13289
+ };function JSDialogDrawTool(){this.AryChartGroup=[{Title:"线段",AryChart:[{Title:'线段',ClassName:'hqchart_drawtool icon-draw_line',Type:0,Data:{ID:"线段"}},{Title:'线段信息',ClassName:'hqchart_drawtool icon-infoline',Type:0,Data:{ID:"InfoLine"}},{Title:'射线',ClassName:'hqchart_drawtool icon-draw_rays',Type:0,Data:{ID:"射线"}},{Title:"趋势线角度",ClassName:"hqchart_drawtool icon-qushixianjiaodu",Type:0,Data:{ID:"TrendAngle"}},{Title:'标价线',ClassName:'hqchart_drawtool icon-price_line',Type:0,Data:{ID:"标价线"}},{Title:'垂直线',ClassName:'hqchart_drawtool icon-vertical_line',Type:0,Data:{ID:"垂直线"}},{Title:'十字线',ClassName:'hqchart_drawtool icon-tubiao_shizixian',Type:0,Data:{ID:"十字线"}},{Title:'箭头',ClassName:'hqchart_drawtool icon-draw_rays',Type:0,Data:{ID:"箭头"}},{Title:'趋势线',ClassName:'hqchart_drawtool icon-draw_trendline',Type:0,Data:{ID:"趋势线"}},{Title:'水平线',ClassName:'hqchart_drawtool icon-draw_hline',Type:0,Data:{ID:"水平线"}},{Title:'涂鸦线段',ClassName:'hqchart_drawtool icon-draw_line',Type:0,Data:{ID:"涂鸦线段"}},{Title:'阻速线',ClassName:'hqchart_drawtool icon-draw_resline',Type:0,Data:{ID:"阻速线"}},{Title:'江恩角度线',ClassName:'hqchart_drawtool icon-jiangenjiaoduxian',Type:0,Data:{ID:"江恩角度线"}}]},{Title:"通道",AryChart:[{Title:'平行线',ClassName:'hqchart_drawtool icon-draw_parallel_lines',Type:0,Data:{ID:"平行线"}},{Title:'水平线段',ClassName:'hqchart_drawtool icon-draw_hlinesegment',Type:0,Data:{ID:"水平线段"}},{Title:'平行射线',ClassName:'hqchart_drawtool icon-draw_p_rays_lines',Type:0,Data:{ID:"平行射线"}},{Title:'平行通道',ClassName:'hqchart_drawtool icon-draw_parallelchannel',Type:0,Data:{ID:"平行通道"}},{Title:'价格通道线',ClassName:'hqchart_drawtool icon-draw_pricechannel',Type:0,Data:{ID:"价格通道线"}},{Title:'箱型线',ClassName:'hqchart_drawtool icon-draw_box',Type:0,Data:{ID:"箱型线"}},{Title:"不相交通道",ClassName:"hqchart_drawtool icon-buxiangjiaojiao",Type:0,Data:{ID:"DisjointChannel"}},{Title:"平滑顶/底",ClassName:"hqchart_drawtool icon-tubiao_buxiangjiaotongdao",Type:0,Data:{ID:"FlatTop"}},{Title:"波段线",ClassName:'hqchart_drawtool icon-draw_waveband',Type:0,Data:{ID:"波段线"}},{Title:"百分比线",ClassName:'hqchart_drawtool icon-PercentageLine',Type:0,Data:{ID:"百分比线"}},{Title:"黄金分割",ClassName:'hqchart_drawtool icon-GoldenSection',Type:0,Data:{ID:"黄金分割"}},{Title:"线形回归线",ClassName:'hqchart_drawtool icon-linear_3',Type:0,Data:{ID:"线形回归线"}},{Title:"线形回归带",ClassName:'hqchart_drawtool icon-linear_1',Type:0,Data:{ID:"线形回归带"}},{Title:"延长线形回归带",ClassName:'hqchart_drawtool icon-linear_2',Type:0,Data:{ID:"延长线形回归带"}}]},{Title:"形状",AryChart:[{Title:'圆弧线',ClassName:'hqchart_drawtool icon-draw_arc',Type:0,Data:{ID:"圆弧线"}},{Title:'矩形',ClassName:'hqchart_drawtool icon-rectangle',Type:0,Data:{ID:"矩形"}},{Title:'平行四边形',ClassName:'hqchart_drawtool icon-draw_quadrangle',Type:0,Data:{ID:"平行四边形"}},{Title:'三角形',ClassName:'hqchart_drawtool icon-draw_triangle',Type:0,Data:{ID:"三角形"}},{Title:'圆',ClassName:'hqchart_drawtool icon-draw_circle',Type:0,Data:{ID:"圆"}},{Title:'对称角度',ClassName:'hqchart_drawtool icon-draw_symangle',Type:0,Data:{ID:"对称角度"}}]},{Title:"波浪线",AryChart:[{Title:'M头W底',ClassName:'hqchart_drawtool icon-draw_wavemw',Type:0,Data:{ID:"M头W底"}},{Title:'头肩型',ClassName:'hqchart_drawtool icon-draw_head_shoulders_bt',Type:0,Data:{ID:"头肩型"}},{Title:'波浪尺',ClassName:'hqchart_drawtool icon-waveruler',Type:0,Data:{ID:"波浪尺"}},{Title:'AB波浪尺',ClassName:'hqchart_drawtool icon-waveruler',Type:0,Data:{ID:"AB波浪尺"}}]},{Title:"斐波那契",AryChart:[{Title:'斐波那契周期线',ClassName:'hqchart_drawtool icon-feibonaqizhouqixian',Type:0,Data:{ID:"斐波那契周期线"}},{Title:'斐波那契楔形',ClassName:'hqchart_drawtool icon-feibonaqiqixing',Type:0,Data:{ID:"FibWedge"}},{Title:'斐波那契回撤',ClassName:'hqchart_drawtool icon-feibonaqihuiche',Type:0,Data:{ID:"FibRetracement"}},{Title:'斐波那契速度阻力扇',ClassName:'hqchart_drawtool icon-feibonaqisuduzulishan',Type:0,Data:{ID:"FibSpeedResistanceFan"}}]},{Title:"测量工具",AryChart:[{Title:'价格范围',ClassName:'hqchart_drawtool icon-shijianfanwei',Type:0,Data:{ID:"PriceRange"}},{Title:'时间范围',ClassName:'hqchart_drawtool icon-jiagefanwei',Type:0,Data:{ID:"DateRange"}},{Title:"监测线",ClassName:"hqchart_drawtool icon-jiance",Type:0,Data:{ID:"MonitorLine"}}]},{Title:"文字",AryChart:[{Title:"文字",ClassName:'hqchart_drawtool icon-draw_text',Type:0,Data:{ID:"文本"}},{Title:"锚点文字",ClassName:'hqchart_drawtool icon-maodianwenzi',Type:0,Data:{ID:"AnchoredText"}},{Title:"注释",ClassName:'hqchart_drawtool icon-maodian ',Type:0,Data:{ID:"Note"}},{Title:'价格标签',ClassName:'hqchart_drawtool icon-Tooltip',Type:0,Data:{ID:"PriceLabel"}},{Title:'价格注释',ClassName:'hqchart_drawtool icon-tooltiptext',Type:0,Data:{ID:"PriceNote"}},{Title:'向上箭头',ClassName:'iconfont icon-arrow_up',Type:0,Data:{ID:"icon-arrow_up"}},{Title:'向下箭头',ClassName:'iconfont icon-arrow_down',Type:0,Data:{ID:"icon-arrow_down"}},{Title:'向左箭头',ClassName:'iconfont icon-arrow_left',Type:0,Data:{ID:"icon-arrow_left"}},{Title:'向右箭头',ClassName:'iconfont icon-arrow_right',Type:0,Data:{ID:"icon-arrow_right"}}]}];this.ToolConfig={Title:"工具",AryTool:[{Title:"选中",ClassName:'hqchart_drawtool icon-arrow',Type:1,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_SELECTED_ID}},{Title:'尺子',ClassName:'hqchart_drawtool icon-ruler',Type:0,Data:{ID:"尺子"}},{Title:"磁铁",ClassName:'hqchart_drawtool icon-xifu',Type:2,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_ENABLE_MAGNET_ID}},{Title:"点击切换颜色",ClassName:'hqchart_drawtool icon-fangkuai',Type:2,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_CHANGE_LINE_COLOR_ID}},{Title:"擦除画线",ClassName:'hqchart_drawtool icon-a-xiangpicachuxiangpica',Type:2,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_ERASE_DRAW_CHART_ID}},{Title:"删除所有画线",ClassName:'hqchart_drawtool icon-recycle_bin',Type:2,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_DELETE_ALL_DRAW_CHART_ID}}]};this.DivDialog=null;this.AryDivChart=[];this.HQChart=null;this.LineColor='rgb(255,140,0)';this.LineColorIndex=0;this.RandomLineColor=["rgb(255,69,0)","rgb(0,191,255)","rgb(255,0,255)","rgb(255,105,180)"];this.LineWidth=1*GetDevicePixelRatio();this.ColumnCount=5;this.DragTitle=null;this.Inital=function(hqchart){this.LineColor=g_JSChartResource.DrawPicture.LineColor[0];this.RandomLineColor.splice(0,0,this.LineColor);this.HQChart=hqchart;};this.Create=function(){var _this69=this;var divDom=document.createElement("div");divDom.className='UMyChart_DrawTool_Dialog_Div';var divTitle=document.createElement("div");divTitle.className='UMyChart_DrawTool_Title_Div';divTitle.innerText="画图工具";divTitle.onmousedown=function(e){_this69.OnMouseDownTitle(e);};var divClose=document.createElement("div");divClose.className='UMyChart_DrawTool_Close_Div';divClose.innerText="x";divClose.onmousedown=function(e){_this69.Close(e);};divTitle.appendChild(divClose);divDom.appendChild(divTitle);var table=document.createElement("table");table.className="UMyChart_DrawTool_Table";divDom.appendChild(table);var tbody=document.createElement("tbody");tbody.className="UMyChart_DrawTool_Tbody";table.appendChild(tbody);for(var i=0;i<this.AryChartGroup.length;++i){var item=this.AryChartGroup[i];if(!IFrameSplitOperator.IsNonEmptyArray(item.AryChart))continue;this.CreateChartGroupItem(item,tbody);var trDom=document.createElement("tr");trDom.className='UMyChart_DrawTool_Group_End_Tr';tbody.appendChild(trDom);}//工具栏
13276
13290
  this.CreateToolGroup(tbody);this.DivDialog=divDom;document.body.appendChild(divDom);};this.Destroy=function(){this.AryDivChart=[];document.body.remove(this.DivDialog);this.DivDialog=null;};this.CreateChartGroupItem=function(groupItem,tbody){var trDom=document.createElement("tr");trDom.className='UMyChart_DrawTool_Group_Tr';tbody.appendChild(trDom);var tdDom=document.createElement("td");tdDom.className="UMyChart_DrawTool_Group_Td";tdDom.innerText=groupItem.Title;tdDom.colSpan=this.ColumnCount;trDom.appendChild(tdDom);var chartCount=groupItem.AryChart.length;for(var i=0,j=0;i<chartCount;){var trDom=document.createElement("tr");trDom.className='UMyChart_DrawTool_Tr';for(j=0;j<this.ColumnCount&&i<chartCount;++j,++i){var item=groupItem.AryChart[i];this.CreateChartItem(item,trDom);}tbody.appendChild(trDom);}};this.CreateChartItem=function(item,trDom){var _this70=this;var tdDom=document.createElement("td");tdDom.className="UMyChart_DrawTool_Td";tdDom.title=item.Title;trDom.appendChild(tdDom);var spanDom=document.createElement("span");spanDom.className=item.ClassName;spanDom.classList.add("UMyChart_DrawTool_Span");tdDom.appendChild(spanDom);var data={Item:item,TD:tdDom,Span:spanDom};tdDom.onmousedown=function(e){_this70.OnClickItem(e,data);};//点击
13277
13291
  this.AryDivChart.push(data);};this.OnClickItem=function(e,data){console.log('[JSDialogDrawTool::OnClickChartItem] ',data);if(!data.Item||!data.Item.Data)return;var type=data.Item.Type;var id=data.Item.Data.ID;if(type==2&&id==JS_DRAWTOOL_MENU_ID.CMD_CHANGE_LINE_COLOR_ID){this.OnChangeLineColor(data);}else if(type==2&&id==JS_DRAWTOOL_MENU_ID.CMD_DELETE_ALL_DRAW_CHART_ID){this.DeleteAllChart();}else if(type==2&&id==JS_DRAWTOOL_MENU_ID.CMD_ERASE_DRAW_CHART_ID){this.ClearAllSelectedChart();this.ClearCurrnetDrawPicture();this.EnableEraseChart(true);}else if(type==1&&id==JS_DRAWTOOL_MENU_ID.CMD_SELECTED_ID){this.ClearAllSelectedChart();this.ClearCurrnetDrawPicture();this.EnableEraseChart(false);}else if(type==2&&id==JS_DRAWTOOL_MENU_ID.CMD_ENABLE_MAGNET_ID){this.ChangeMagnet(data);}else if(type==0){this.ClearAllSelectedChart();this.EnableEraseChart(false);data.Span.classList.remove("UMyChart_DrawTool_Span");data.Span.classList.add("UMyChart_DrawTool_Span_Selected");this.CreateDrawPicture(data);}};//清空选中状态
13278
13292
  this.ClearAllSelectedChart=function(){for(var i=0;i<this.AryDivChart.length;++i){var item=this.AryDivChart[i];if(item.Item.Type==2)continue;item.Span.classList.remove("UMyChart_DrawTool_Span_Selected");item.Span.classList.add("UMyChart_DrawTool_Span");}};this.CreateToolGroup=function(tbody){var trDom=document.createElement("tr");trDom.className='UMyChart_DrawTool_Group_Tr';tbody.appendChild(trDom);var tdDom=document.createElement("td");tdDom.className="UMyChart_DrawTool_Group_Td";tdDom.innerText=this.ToolConfig.Title;tdDom.colSpan=this.ColumnCount;trDom.appendChild(tdDom);var chartCount=this.ToolConfig.AryTool.length;for(var i=0,j=0;i<chartCount;){var trDom=document.createElement("tr");trDom.className='UMyChart_DrawTool_Tr';for(j=0;j<this.ColumnCount&&i<chartCount;++j,++i){var item=this.ToolConfig.AryTool[i];this.CreateToolItem(item,trDom);}tbody.appendChild(trDom);}};this.CreateToolItem=function(item,trDom){var _this71=this;var tdDom=document.createElement("td");tdDom.className="UMyChart_DrawTool_Td";tdDom.title=item.Title;trDom.appendChild(tdDom);var spanDom=document.createElement("span");spanDom.className=item.ClassName;spanDom.classList.add("UMyChart_DrawTool_Span");tdDom.appendChild(spanDom);var data={Item:item,TD:tdDom,Span:spanDom};if(item.Type==2&&item.Data.ID==JS_DRAWTOOL_MENU_ID.CMD_CHANGE_LINE_COLOR_ID)//颜色
@@ -13308,7 +13322,7 @@ hisData.Symbol=message.symbol;}var stockObj={HQDataType:HQ_DATA_TYPE.KLINE_ID,St
13308
13322
  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);};}/********************************************************************************
13309
13323
  * 版本信息输出
13310
13324
  *
13311
- */var HQCHART_VERSION="1.1.13345";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();//把给外界调用的方法暴露出来
13325
+ */var HQCHART_VERSION="1.1.13349";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();//把给外界调用的方法暴露出来
13312
13326
  exports.default=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
13313
13327
  // BaseIndex:BaseIndex,
13314
13328
  // ChartLine:ChartLine,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hqchart",
3
- "version": "1.1.13346",
3
+ "version": "1.1.13350",
4
4
  "description": "HQChart - H5, 微信小程序 沪深/港股/数字货币/期货/美股 K线图(kline),走势图,缩放,拖拽,十字光标,画图工具,截图,筹码图. 分析家语法,通达信语法,(麦语法),第3方数据对接",
5
5
  "main": "lib/main.js",
6
6
  "scripts": {
@@ -34,6 +34,7 @@ function JSDialogDrawTool()
34
34
  { Title: '线段', ClassName: 'hqchart_drawtool icon-draw_line', Type:0, Data:{ ID:"线段" } },
35
35
  { Title: '线段信息', ClassName: 'hqchart_drawtool icon-infoline', Type:0, Data:{ ID:"InfoLine" } },
36
36
  { Title: '射线', ClassName: 'hqchart_drawtool icon-draw_rays', Type:0, Data:{ ID:"射线" } },
37
+ { Title: "趋势线角度", ClassName:"hqchart_drawtool icon-qushixianjiaodu", Type:0, Data:{ ID:"TrendAngle" }},
37
38
  { Title: '标价线', ClassName: 'hqchart_drawtool icon-price_line', Type:0, Data:{ ID:"标价线" } },
38
39
  { Title: '垂直线', ClassName: 'hqchart_drawtool icon-vertical_line', Type:0, Data:{ ID:"垂直线" } },
39
40
  { Title: '十字线', ClassName: 'hqchart_drawtool icon-tubiao_shizixian', Type:0, Data:{ ID:"十字线" } },
@@ -149,7 +150,7 @@ function JSDialogDrawTool()
149
150
  this.LineColorIndex=0;
150
151
  this.RandomLineColor=["rgb(255,69,0)", "rgb(0,191,255)", "rgb(255,0,255)", "rgb(255,105,180)"];
151
152
  this.LineWidth=1*GetDevicePixelRatio();
152
- this.ColumnCount=4;
153
+ this.ColumnCount=5
153
154
 
154
155
  this.DragTitle=null;
155
156
 
@@ -334,13 +334,22 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
334
334
  if (IFrameSplitOperator.IsBool(item.IsShowKLineDivTooltip)) chart.IsShowKLineDivTooltip=item.IsShowKLineDivTooltip;
335
335
  if (option.KLine.MaxRequestMinuteDayCount>0) chart.MaxRequestMinuteDayCount=option.KLine.MaxRequestMinuteDayCount;
336
336
  if (option.KLine.DrawType) chart.KLineDrawType=option.KLine.DrawType;
337
- if (option.KLine.FirstShowDate>19910101) chart.CustomShow={ Date:option.KLine.FirstShowDate, PageSize:option.KLine.PageSize };
337
+ if (option.KLine.FirstShowDate>19910101) chart.CustomShow={ Date:option.KLine.FirstShowDate, PageSize:option.KLine.PageSize }; //!!已弃用 新的格式"CustomShow"
338
338
  if (option.KLine.RightSpaceCount>0) chart.RightSpaceCount=option.KLine.RightSpaceCount;
339
339
  if (option.KLine.ZoomType>0) chart.ZoomType=option.KLine.ZoomType;
340
340
  if (option.KLine.DataWidth>=1) chart.KLineSize={ DataWidth:option.KLine.DataWidth };
341
341
  if (IFrameSplitOperator.IsNumber(option.KLine.RightFormula)) chart.RightFormula=option.KLine.RightFormula;
342
342
  }
343
343
 
344
+ //自定义显示位置
345
+ if (option.CustomShow && IFrameSplitOperator.IsPlusNumber(option.CustomShow.Date))
346
+ {
347
+ var item=option.CustomShow;
348
+ chart.CustomShow={ Date:item.Date };
349
+ if (IFrameSplitOperator.IsNumber(item.Time)) chart.CustomShow.Time=item.Time;
350
+ if (IFrameSplitOperator.IsPlusNumber(item.PageSize)) chart.CustomShow.PageSize=item.PageSize;
351
+ }
352
+
344
353
  if (option.EnableFlowCapital)
345
354
  {
346
355
  var item=option.EnableFlowCapital;
@@ -55746,6 +55755,7 @@ IChartDrawPicture.ArrayDrawPricture=
55746
55755
  { Name:"PriceRange", ClassName:"ChartPriceRange", Create:function() { return new ChartPriceRange(); }},
55747
55756
  { Name:"DateRange", ClassName:"ChartDateRange", Create:function() { return new ChartDateRange(); }},
55748
55757
  { Name:"InfoLine", ClassName:"ChartInfoLine", Create:function() { return new ChartInfoLine(); }},
55758
+ { Name:"TrendAngle", ClassName:"ChartTrendAngle", Create:function() { return new ChartTrendAngle(); }}
55749
55759
  ];
55750
55760
 
55751
55761
  IChartDrawPicture.MapIonFont=new Map(
@@ -55910,6 +55920,103 @@ function ChartDrawPictureLine()
55910
55920
  }
55911
55921
  }
55912
55922
 
55923
+ //趋势线角度
55924
+ function ChartTrendAngle()
55925
+ {
55926
+ this.newMethod=ChartDrawPictureLine; //派生
55927
+ this.newMethod();
55928
+ delete this.newMethod;
55929
+
55930
+ this.ClassName='ChartTrendAngle';
55931
+ this.AngleLineLength=100;
55932
+ this.AngleLineDash=[3,3];
55933
+ this.Font=12*GetDevicePixelRatio() +"px 微软雅黑";
55934
+ this.Super_SetOption=this.SetOption; //父类函数
55935
+
55936
+ this.SetOption=function(option)
55937
+ {
55938
+ if (this.Super_SetOption) this.Super_SetOption(option);
55939
+ if (option)
55940
+ {
55941
+ if (IFrameSplitOperator.IsNumber(option.AngleLineLength)) this.AngleLineLength=option.AngleLineLength;
55942
+ if (option.Font) this.Font=option.Font;
55943
+ if (option.AngleLineDash) this.AngleLineDash=option.AngleLineDash;
55944
+ }
55945
+ }
55946
+
55947
+ this.Draw=function()
55948
+ {
55949
+ this.LinePoint=[];
55950
+ if (this.IsFrameMinSize()) return;
55951
+ if (!this.IsShow) return;
55952
+
55953
+ var drawPoint=this.CalculateDrawPoint( {IsCheckX:true, IsCheckY:false} );
55954
+ if (!drawPoint) return;
55955
+ if (drawPoint.length!=2) return;
55956
+
55957
+ this.ClipFrame();
55958
+
55959
+ var ptStart=drawPoint[0];
55960
+ var ptEnd=drawPoint[1];
55961
+
55962
+ this.SetLineWidth();
55963
+ this.Canvas.strokeStyle=this.LineColor;
55964
+ this.Canvas.beginPath();
55965
+ this.Canvas.moveTo(ptStart.X,ptStart.Y);
55966
+ this.Canvas.lineTo(ptEnd.X,ptEnd.Y);
55967
+ this.Canvas.stroke();
55968
+ this.RestoreLineWidth();
55969
+
55970
+ this.DrawAngle(ptStart, ptEnd);
55971
+
55972
+ var line={Start:ptStart, End:ptEnd};
55973
+ this.LinePoint.push(line);
55974
+
55975
+ this.DrawPoint(drawPoint); //画点
55976
+ this.Canvas.restore();
55977
+ }
55978
+
55979
+ this.DrawAngle=function(ptStart, ptEnd)
55980
+ {
55981
+ var pixelRatio=GetDevicePixelRatio();
55982
+ var angle=this.CalculateAngle(ptStart.X, ptStart.Y, ptEnd.X, ptEnd.Y); //角度
55983
+ var lineLength=this.AngleLineLength*pixelRatio; //角度线长度
55984
+ var ptRight={ X:ptStart.X+lineLength, Y:ptStart.Y };
55985
+
55986
+ if (this.AngleLineDash) this.Canvas.setLineDash(this.AngleLineDash); //画虚线
55987
+
55988
+ this.Canvas.lineWidth=1*GetDevicePixelRatio();
55989
+ this.Canvas.beginPath();
55990
+ this.Canvas.moveTo(ToFixedPoint(ptStart.X),ToFixedPoint(ptStart.Y));
55991
+ this.Canvas.lineTo(ToFixedPoint(ptRight.X),ToFixedPoint(ptRight.Y));
55992
+ this.Canvas.stroke();
55993
+
55994
+ this.Canvas.beginPath();
55995
+ if (angle<=180)
55996
+ {
55997
+ this.Canvas.arc(ptStart.X,ToFixedPoint(ptStart.Y),lineLength,0,(Math.PI / 180)*(360-angle), true);
55998
+ var text=`${angle.toFixed(0)}°`;
55999
+ }
56000
+ else
56001
+ {
56002
+ this.Canvas.arc(ptStart.X,ToFixedPoint(ptStart.Y),lineLength,0,(Math.PI / 180)*(360-angle), false);
56003
+ var text=`${(angle-360).toFixed(0)}°`;
56004
+ }
56005
+
56006
+ this.Canvas.stroke();
56007
+
56008
+ this.Canvas.textAlign="left";
56009
+ this.Canvas.textBaseline="middle";
56010
+ this.Canvas.font=this.Font;
56011
+ this.Canvas.fillStyle=this.LineColor;
56012
+
56013
+ if (this.AngleLineDash) this.Canvas.setLineDash([]);
56014
+
56015
+
56016
+ this.Canvas.fillText(text,ptRight.X+5,ptRight.Y);
56017
+ }
56018
+ }
56019
+
55913
56020
  //画图工具-涂鸦线段 Y轴关联数值, X轴不关联
55914
56021
  function ChartDrawGraffitiLine()
55915
56022
  {
@@ -68189,7 +68296,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
68189
68296
  this.SourceDataLimit=new Map(); //每个周期缓存数据最大个数 key=周期 value=最大个数
68190
68297
  this.CtrlMoveStep=5; //Ctrl+(Left/Right) 移动数据个数
68191
68298
 
68192
- this.CustomShow=null; //首先显示的K线的起始日期 { Date:日期 PageSize:}
68299
+ this.CustomShow=null; //首先显示的K线的起始日期 { Date:日期, Time:时间, PageSize:}
68193
68300
  this.ZoomType=0; //缩放模式 0=最右边固定缩放, 1=十字光标两边缩放
68194
68301
  this.IsZoomLockRight=false;
68195
68302
  this.KLineSize=null; //{ DataWidth:, }
@@ -68775,47 +68882,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
68775
68882
  var hisData=this.ChartOperator_Temp_GetHistroyData();
68776
68883
  if (!hisData) return; //数据还没有到达
68777
68884
 
68778
- var index=null;
68779
- if (ChartData.IsDayPeriod(this.Period,true))
68780
- {
68781
- for(var i=0;i<hisData.Data.length;++i)
68782
- {
68783
- var item=hisData.Data[i];
68784
- if (item.Date>=obj.Date)
68785
- {
68786
- index=i;
68787
- break;
68788
- }
68789
- }
68790
- }
68791
- else if (ChartData.IsMinutePeriod(this.Period,true))
68792
- {
68793
- let findTime=obj.Time;
68794
- if (IFrameSplitOperator.IsPlusNumber(findTime))
68795
- {
68796
- for(var i=0;i<hisData.Data.length;++i)
68797
- {
68798
- var item=hisData.Data[i];
68799
- if (item.Date>obj.Date || (item.Date==obj.Date && item.Time>=findTime))
68800
- {
68801
- index=i;
68802
- break;
68803
- }
68804
- }
68805
- }
68806
- else //只有日期
68807
- {
68808
- for(var i=0;i<hisData.Data.length;++i)
68809
- {
68810
- var item=hisData.Data[i];
68811
- if (item.Date>=obj.Date)
68812
- {
68813
- index=i;
68814
- break;
68815
- }
68816
- }
68817
- }
68818
- }
68885
+ var index=this.ChartOperator_GetIndex_ByDateTime(hisData, obj, this.Period, 0);
68819
68886
 
68820
68887
  if (index===null)
68821
68888
  {
@@ -68935,6 +69002,63 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
68935
69002
  this.UpdatePointByCursorIndex(); //更新十字光标位子
68936
69003
  }
68937
69004
 
69005
+ //定位K线的索引
69006
+ //searchType 0模糊匹配 1=精确匹配
69007
+ this.ChartOperator_GetIndex_ByDateTime=function(hisData, dateTime, period, searchType)
69008
+ {
69009
+ if (!hisData) return null; //数据还没有到达
69010
+ if (!IFrameSplitOperator.IsNonEmptyArray(hisData.Data)) return null;
69011
+ if (!IFrameSplitOperator.IsPlusNumber(dateTime.Date) || dateTime.Date<19810101) return null;
69012
+
69013
+ if (ChartData.IsDayPeriod(period, true))
69014
+ {
69015
+ for(var i=0;i<hisData.Data.length;++i)
69016
+ {
69017
+ var item=hisData.Data[i];
69018
+ if (searchType==1)
69019
+ {
69020
+ if (item.Date==dateTime.Date) return i;
69021
+ }
69022
+ else
69023
+ {
69024
+ if (item.Date>=dateTime.Date) return i;
69025
+ }
69026
+ }
69027
+
69028
+ return null;
69029
+ }
69030
+
69031
+ if (ChartData.IsMinutePeriod(period,true) || ChartData.IsMilliSecondPeriod(period))
69032
+ {
69033
+ var findTime=null;
69034
+ if (IFrameSplitOperator.IsNumber(dateTime.Time)) findTime=dateTime.Time;
69035
+ for(var i=0;i<hisData.Data.length;++i)
69036
+ {
69037
+ var item=hisData.Data[i];
69038
+ if (searchType==1) //精确匹配
69039
+ {
69040
+ if (findTime==null) return null;
69041
+ if (item.Date==dateTime.Date && item.Time==findTime) return i;
69042
+ }
69043
+ else
69044
+ {
69045
+ if (findTime==null) //只有日期
69046
+ {
69047
+ if (item.Date>=dateTime.Date) return i;
69048
+ }
69049
+ else
69050
+ {
69051
+ if (item.Date>dateTime.Date || (item.Date==dateTime.Date && item.Time>=findTime)) return i;
69052
+ }
69053
+ }
69054
+ }
69055
+
69056
+ return null;
69057
+ }
69058
+
69059
+ return null;
69060
+ }
69061
+
68938
69062
  this.OnWheel=function(e)
68939
69063
  {
68940
69064
  JSConsole.Chart.Log('[KLineChartContainer::OnWheel]',e);
@@ -69553,37 +69677,21 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
69553
69677
 
69554
69678
  this.SetCustomShow=function(customShow,hisData)
69555
69679
  {
69556
- if (!customShow || !customShow.Date || customShow.Date<19910101) return;
69557
-
69558
- var firstDate=customShow.Date;
69559
- var index=null;
69560
- for(var i =0;i<hisData.Data.length;++i)
69561
- {
69562
- var item=hisData.Data[i];
69563
- if (item.Date>=firstDate)
69564
- {
69565
- index=i;
69566
- break;
69567
- }
69568
- }
69680
+ var index=this.ChartOperator_GetIndex_ByDateTime(hisData,customShow, this.Period, 0);
69569
69681
  if (index===null)
69570
69682
  {
69571
- JSConsole.Chart.Log(`[KLineChartContainer::SetCustomShow] Can't find first date=${firstDate}`);
69683
+ JSConsole.Chart.Log("[KLineChartContainer::SetCustomShow] Can't find index by customShow=",customShow);
69572
69684
  return;
69573
69685
  }
69574
69686
 
69575
- var count=hisData.Data.length-index;
69576
- if (customShow.PageSize>0) count=customShow.PageSize;
69577
-
69578
- var customShowCount=count;
69579
- var pageSize=this.GetMaxMinPageSize();
69580
- if (count>pageSize.Max) customShowCount=pageSize.Max;
69581
- else if (count<pageSize.Min) customShowCount=pageSize.Min;
69582
-
69583
- for(var i in this.Frame.SubFrame)
69687
+ if (IFrameSplitOperator.IsPlusNumber(customShow.PageSize)) //调整一屏显示个数 否则使用默认的
69584
69688
  {
69585
- var item =this.Frame.SubFrame[i].Frame;
69586
- item.XPointCount=customShowCount;
69689
+ var showCount=customShow.PageSize;
69690
+ for(var i=0;i<this.Frame.SubFrame.length; ++i)
69691
+ {
69692
+ var item =this.Frame.SubFrame[i].Frame;
69693
+ item.XPointCount=showCount;
69694
+ }
69587
69695
  }
69588
69696
 
69589
69697
  this.ChartPaint[0].Data.DataOffset=index;
@@ -72871,6 +72979,14 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
72871
72979
  }
72872
72980
  }
72873
72981
  }
72982
+
72983
+ if (option.CustomShow && IFrameSplitOperator.IsPlusNumber(option.CustomShow.Date))
72984
+ {
72985
+ var item=option.CustomShow;
72986
+ this.CustomShow={ Date:item.Date };
72987
+ if (IFrameSplitOperator.IsNumber(item.Time)) this.CustomShow.Time=item.Time;
72988
+ if (IFrameSplitOperator.IsPlusNumber(item.PageSize)) this.CustomShow.PageSize=item.PageSize;
72989
+ }
72874
72990
  }
72875
72991
 
72876
72992
  this.ReloadChartDrawPicture();
@@ -54,6 +54,12 @@
54
54
  <div class="content unicode" style="display: block;">
55
55
  <ul class="icon_lists dib-box">
56
56
 
57
+ <li class="dib">
58
+ <span class="icon hqchart_drawtool">&#xe60c;</span>
59
+ <div class="name">趋势线角度</div>
60
+ <div class="code-name">&amp;#xe60c;</div>
61
+ </li>
62
+
57
63
  <li class="dib">
58
64
  <span class="icon hqchart_drawtool">&#xe64a;</span>
59
65
  <div class="name">info line</div>
@@ -438,9 +444,9 @@
438
444
  <pre><code class="language-css"
439
445
  >@font-face {
440
446
  font-family: 'hqchart_drawtool';
441
- src: url('iconfont.woff2?t=1716274976221') format('woff2'),
442
- url('iconfont.woff?t=1716274976221') format('woff'),
443
- url('iconfont.ttf?t=1716274976221') format('truetype');
447
+ src: url('iconfont.woff2?t=1716529516458') format('woff2'),
448
+ url('iconfont.woff?t=1716529516458') format('woff'),
449
+ url('iconfont.ttf?t=1716529516458') format('truetype');
444
450
  }
445
451
  </code></pre>
446
452
  <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
@@ -466,6 +472,15 @@
466
472
  <div class="content font-class">
467
473
  <ul class="icon_lists dib-box">
468
474
 
475
+ <li class="dib">
476
+ <span class="icon hqchart_drawtool icon-qushixianjiaodu"></span>
477
+ <div class="name">
478
+ 趋势线角度
479
+ </div>
480
+ <div class="code-name">.icon-qushixianjiaodu
481
+ </div>
482
+ </li>
483
+
469
484
  <li class="dib">
470
485
  <span class="icon hqchart_drawtool icon-infoline"></span>
471
486
  <div class="name">
@@ -1042,6 +1057,14 @@
1042
1057
  <div class="content symbol">
1043
1058
  <ul class="icon_lists dib-box">
1044
1059
 
1060
+ <li class="dib">
1061
+ <svg class="icon svg-icon" aria-hidden="true">
1062
+ <use xlink:href="#icon-qushixianjiaodu"></use>
1063
+ </svg>
1064
+ <div class="name">趋势线角度</div>
1065
+ <div class="code-name">#icon-qushixianjiaodu</div>
1066
+ </li>
1067
+
1045
1068
  <li class="dib">
1046
1069
  <svg class="icon svg-icon" aria-hidden="true">
1047
1070
  <use xlink:href="#icon-infoline"></use>
@@ -1,8 +1,8 @@
1
1
  @font-face {
2
2
  font-family: "hqchart_drawtool"; /* Project id 4529603 */
3
- src: url('iconfont.woff2?t=1716274976221') format('woff2'),
4
- url('iconfont.woff?t=1716274976221') format('woff'),
5
- url('iconfont.ttf?t=1716274976221') format('truetype');
3
+ src: url('iconfont.woff2?t=1716529516458') format('woff2'),
4
+ url('iconfont.woff?t=1716529516458') format('woff'),
5
+ url('iconfont.ttf?t=1716529516458') format('truetype');
6
6
  }
7
7
 
8
8
  .hqchart_drawtool {
@@ -13,6 +13,10 @@
13
13
  -moz-osx-font-smoothing: grayscale;
14
14
  }
15
15
 
16
+ .icon-qushixianjiaodu:before {
17
+ content: "\e60c";
18
+ }
19
+
16
20
  .icon-infoline:before {
17
21
  content: "\e64a";
18
22
  }