hqchart 1.1.13339 → 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.
@@ -4226,13 +4226,22 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4226
4226
  if (IFrameSplitOperator.IsBool(item.IsShowKLineDivTooltip)) chart.IsShowKLineDivTooltip=item.IsShowKLineDivTooltip;
4227
4227
  if (option.KLine.MaxRequestMinuteDayCount>0) chart.MaxRequestMinuteDayCount=option.KLine.MaxRequestMinuteDayCount;
4228
4228
  if (option.KLine.DrawType) chart.KLineDrawType=option.KLine.DrawType;
4229
- if (option.KLine.FirstShowDate>19910101) chart.CustomShow={ Date:option.KLine.FirstShowDate, PageSize:option.KLine.PageSize };
4229
+ if (option.KLine.FirstShowDate>19910101) chart.CustomShow={ Date:option.KLine.FirstShowDate, PageSize:option.KLine.PageSize }; //!!已弃用 新的格式"CustomShow"
4230
4230
  if (option.KLine.RightSpaceCount>0) chart.RightSpaceCount=option.KLine.RightSpaceCount;
4231
4231
  if (option.KLine.ZoomType>0) chart.ZoomType=option.KLine.ZoomType;
4232
4232
  if (option.KLine.DataWidth>=1) chart.KLineSize={ DataWidth:option.KLine.DataWidth };
4233
4233
  if (IFrameSplitOperator.IsNumber(option.KLine.RightFormula)) chart.RightFormula=option.KLine.RightFormula;
4234
4234
  }
4235
4235
 
4236
+ //自定义显示位置
4237
+ if (option.CustomShow && IFrameSplitOperator.IsPlusNumber(option.CustomShow.Date))
4238
+ {
4239
+ var item=option.CustomShow;
4240
+ chart.CustomShow={ Date:item.Date };
4241
+ if (IFrameSplitOperator.IsNumber(item.Time)) chart.CustomShow.Time=item.Time;
4242
+ if (IFrameSplitOperator.IsPlusNumber(item.PageSize)) chart.CustomShow.PageSize=item.PageSize;
4243
+ }
4244
+
4236
4245
  if (option.EnableFlowCapital)
4237
4246
  {
4238
4247
  var item=option.EnableFlowCapital;
@@ -5753,12 +5762,6 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
5753
5762
  }
5754
5763
  }
5755
5764
 
5756
- this.ChangMainDataControl=function(dataControl)
5757
- {
5758
- if (this.JSChartContainer && typeof(this.JSChartContainer.SetMainDataConotrl)=='function')
5759
- this.JSChartContainer.SetMainDataConotrl(dataControl);
5760
- }
5761
-
5762
5765
  this.AddOverlayIndex=function(obj) //{WindowIndex:窗口ID, IndexName:指标ID, Identify:叠加指标ID(可选), API}
5763
5766
  {
5764
5767
  if (this.JSChartContainer && typeof(this.JSChartContainer.AddOverlayIndex)=='function')
@@ -11963,7 +11966,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11963
11966
  let sendData={ DrawPicture: drawPicture };
11964
11967
  event.Callback(event,sendData,this);
11965
11968
  }
11966
- else if (drawPicture.FinishedCallback) drawPicture.FinishedCallback(drawPicture);
11969
+
11970
+ //单个回调
11971
+ if (drawPicture.FinishedCallback) drawPicture.FinishedCallback(drawPicture);
11967
11972
 
11968
11973
  if (drawPicture.OnFinish) drawPicture.OnFinish();
11969
11974
 
@@ -13497,6 +13502,11 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
13497
13502
  if (deleteCount>0) this.ChartPaintEx=paint;
13498
13503
  }
13499
13504
  }
13505
+
13506
+ this.ClearCurrnetDrawPicture=function()
13507
+ {
13508
+ this.CurrentChartDrawPicture=null;
13509
+ }
13500
13510
  }
13501
13511
 
13502
13512
  function GetDevicePixelRatio()
@@ -59637,6 +59647,7 @@ IChartDrawPicture.ArrayDrawPricture=
59637
59647
  { Name:"PriceRange", ClassName:"ChartPriceRange", Create:function() { return new ChartPriceRange(); }},
59638
59648
  { Name:"DateRange", ClassName:"ChartDateRange", Create:function() { return new ChartDateRange(); }},
59639
59649
  { Name:"InfoLine", ClassName:"ChartInfoLine", Create:function() { return new ChartInfoLine(); }},
59650
+ { Name:"TrendAngle", ClassName:"ChartTrendAngle", Create:function() { return new ChartTrendAngle(); }}
59640
59651
  ];
59641
59652
 
59642
59653
  IChartDrawPicture.MapIonFont=new Map(
@@ -59801,6 +59812,103 @@ function ChartDrawPictureLine()
59801
59812
  }
59802
59813
  }
59803
59814
 
59815
+ //趋势线角度
59816
+ function ChartTrendAngle()
59817
+ {
59818
+ this.newMethod=ChartDrawPictureLine; //派生
59819
+ this.newMethod();
59820
+ delete this.newMethod;
59821
+
59822
+ this.ClassName='ChartTrendAngle';
59823
+ this.AngleLineLength=100;
59824
+ this.AngleLineDash=[3,3];
59825
+ this.Font=12*GetDevicePixelRatio() +"px 微软雅黑";
59826
+ this.Super_SetOption=this.SetOption; //父类函数
59827
+
59828
+ this.SetOption=function(option)
59829
+ {
59830
+ if (this.Super_SetOption) this.Super_SetOption(option);
59831
+ if (option)
59832
+ {
59833
+ if (IFrameSplitOperator.IsNumber(option.AngleLineLength)) this.AngleLineLength=option.AngleLineLength;
59834
+ if (option.Font) this.Font=option.Font;
59835
+ if (option.AngleLineDash) this.AngleLineDash=option.AngleLineDash;
59836
+ }
59837
+ }
59838
+
59839
+ this.Draw=function()
59840
+ {
59841
+ this.LinePoint=[];
59842
+ if (this.IsFrameMinSize()) return;
59843
+ if (!this.IsShow) return;
59844
+
59845
+ var drawPoint=this.CalculateDrawPoint( {IsCheckX:true, IsCheckY:false} );
59846
+ if (!drawPoint) return;
59847
+ if (drawPoint.length!=2) return;
59848
+
59849
+ this.ClipFrame();
59850
+
59851
+ var ptStart=drawPoint[0];
59852
+ var ptEnd=drawPoint[1];
59853
+
59854
+ this.SetLineWidth();
59855
+ this.Canvas.strokeStyle=this.LineColor;
59856
+ this.Canvas.beginPath();
59857
+ this.Canvas.moveTo(ptStart.X,ptStart.Y);
59858
+ this.Canvas.lineTo(ptEnd.X,ptEnd.Y);
59859
+ this.Canvas.stroke();
59860
+ this.RestoreLineWidth();
59861
+
59862
+ this.DrawAngle(ptStart, ptEnd);
59863
+
59864
+ var line={Start:ptStart, End:ptEnd};
59865
+ this.LinePoint.push(line);
59866
+
59867
+ this.DrawPoint(drawPoint); //画点
59868
+ this.Canvas.restore();
59869
+ }
59870
+
59871
+ this.DrawAngle=function(ptStart, ptEnd)
59872
+ {
59873
+ var pixelRatio=GetDevicePixelRatio();
59874
+ var angle=this.CalculateAngle(ptStart.X, ptStart.Y, ptEnd.X, ptEnd.Y); //角度
59875
+ var lineLength=this.AngleLineLength*pixelRatio; //角度线长度
59876
+ var ptRight={ X:ptStart.X+lineLength, Y:ptStart.Y };
59877
+
59878
+ if (this.AngleLineDash) this.Canvas.setLineDash(this.AngleLineDash); //画虚线
59879
+
59880
+ this.Canvas.lineWidth=1*GetDevicePixelRatio();
59881
+ this.Canvas.beginPath();
59882
+ this.Canvas.moveTo(ToFixedPoint(ptStart.X),ToFixedPoint(ptStart.Y));
59883
+ this.Canvas.lineTo(ToFixedPoint(ptRight.X),ToFixedPoint(ptRight.Y));
59884
+ this.Canvas.stroke();
59885
+
59886
+ this.Canvas.beginPath();
59887
+ if (angle<=180)
59888
+ {
59889
+ this.Canvas.arc(ptStart.X,ToFixedPoint(ptStart.Y),lineLength,0,(Math.PI / 180)*(360-angle), true);
59890
+ var text=`${angle.toFixed(0)}°`;
59891
+ }
59892
+ else
59893
+ {
59894
+ this.Canvas.arc(ptStart.X,ToFixedPoint(ptStart.Y),lineLength,0,(Math.PI / 180)*(360-angle), false);
59895
+ var text=`${(angle-360).toFixed(0)}°`;
59896
+ }
59897
+
59898
+ this.Canvas.stroke();
59899
+
59900
+ this.Canvas.textAlign="left";
59901
+ this.Canvas.textBaseline="middle";
59902
+ this.Canvas.font=this.Font;
59903
+ this.Canvas.fillStyle=this.LineColor;
59904
+
59905
+ if (this.AngleLineDash) this.Canvas.setLineDash([]);
59906
+
59907
+
59908
+ this.Canvas.fillText(text,ptRight.X+5,ptRight.Y);
59909
+ }
59910
+ }
59911
+
59804
59912
  //画图工具-涂鸦线段 Y轴关联数值, X轴不关联
59805
59913
  function ChartDrawGraffitiLine()
59806
59914
  {
@@ -68580,9 +68688,9 @@ function ChartInfoLine()
68580
68688
  labelInfo.PtStart=ptStart;
68581
68689
  labelInfo.PtEnd=ptEnd;
68582
68690
 
68583
- this.DrawLabel(labelInfo);
68584
-
68585
68691
  this.Canvas.restore();
68692
+
68693
+ this.DrawLabel(labelInfo);
68586
68694
  }
68587
68695
 
68588
68696
  this.DrawLabel=function(labelInfo)
@@ -72080,7 +72188,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
72080
72188
  this.SourceDataLimit=new Map(); //每个周期缓存数据最大个数 key=周期 value=最大个数
72081
72189
  this.CtrlMoveStep=5; //Ctrl+(Left/Right) 移动数据个数
72082
72190
 
72083
- this.CustomShow=null; //首先显示的K线的起始日期 { Date:日期 PageSize:}
72191
+ this.CustomShow=null; //首先显示的K线的起始日期 { Date:日期, Time:时间, PageSize:}
72084
72192
  this.ZoomType=0; //缩放模式 0=最右边固定缩放, 1=十字光标两边缩放
72085
72193
  this.IsZoomLockRight=false;
72086
72194
  this.KLineSize=null; //{ DataWidth:, }
@@ -72666,47 +72774,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
72666
72774
  var hisData=this.ChartOperator_Temp_GetHistroyData();
72667
72775
  if (!hisData) return; //数据还没有到达
72668
72776
 
72669
- var index=null;
72670
- if (ChartData.IsDayPeriod(this.Period,true))
72671
- {
72672
- for(var i=0;i<hisData.Data.length;++i)
72673
- {
72674
- var item=hisData.Data[i];
72675
- if (item.Date>=obj.Date)
72676
- {
72677
- index=i;
72678
- break;
72679
- }
72680
- }
72681
- }
72682
- else if (ChartData.IsMinutePeriod(this.Period,true))
72683
- {
72684
- let findTime=obj.Time;
72685
- if (IFrameSplitOperator.IsPlusNumber(findTime))
72686
- {
72687
- for(var i=0;i<hisData.Data.length;++i)
72688
- {
72689
- var item=hisData.Data[i];
72690
- if (item.Date>obj.Date || (item.Date==obj.Date && item.Time>=findTime))
72691
- {
72692
- index=i;
72693
- break;
72694
- }
72695
- }
72696
- }
72697
- else //只有日期
72698
- {
72699
- for(var i=0;i<hisData.Data.length;++i)
72700
- {
72701
- var item=hisData.Data[i];
72702
- if (item.Date>=obj.Date)
72703
- {
72704
- index=i;
72705
- break;
72706
- }
72707
- }
72708
- }
72709
- }
72777
+ var index=this.ChartOperator_GetIndex_ByDateTime(hisData, obj, this.Period, 0);
72710
72778
 
72711
72779
  if (index===null)
72712
72780
  {
@@ -72826,6 +72894,63 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
72826
72894
  this.UpdatePointByCursorIndex(); //更新十字光标位子
72827
72895
  }
72828
72896
 
72897
+ //定位K线的索引
72898
+ //searchType 0模糊匹配 1=精确匹配
72899
+ this.ChartOperator_GetIndex_ByDateTime=function(hisData, dateTime, period, searchType)
72900
+ {
72901
+ if (!hisData) return null; //数据还没有到达
72902
+ if (!IFrameSplitOperator.IsNonEmptyArray(hisData.Data)) return null;
72903
+ if (!IFrameSplitOperator.IsPlusNumber(dateTime.Date) || dateTime.Date<19810101) return null;
72904
+
72905
+ if (ChartData.IsDayPeriod(period, true))
72906
+ {
72907
+ for(var i=0;i<hisData.Data.length;++i)
72908
+ {
72909
+ var item=hisData.Data[i];
72910
+ if (searchType==1)
72911
+ {
72912
+ if (item.Date==dateTime.Date) return i;
72913
+ }
72914
+ else
72915
+ {
72916
+ if (item.Date>=dateTime.Date) return i;
72917
+ }
72918
+ }
72919
+
72920
+ return null;
72921
+ }
72922
+
72923
+ if (ChartData.IsMinutePeriod(period,true) || ChartData.IsMilliSecondPeriod(period))
72924
+ {
72925
+ var findTime=null;
72926
+ if (IFrameSplitOperator.IsNumber(dateTime.Time)) findTime=dateTime.Time;
72927
+ for(var i=0;i<hisData.Data.length;++i)
72928
+ {
72929
+ var item=hisData.Data[i];
72930
+ if (searchType==1) //精确匹配
72931
+ {
72932
+ if (findTime==null) return null;
72933
+ if (item.Date==dateTime.Date && item.Time==findTime) return i;
72934
+ }
72935
+ else
72936
+ {
72937
+ if (findTime==null) //只有日期
72938
+ {
72939
+ if (item.Date>=dateTime.Date) return i;
72940
+ }
72941
+ else
72942
+ {
72943
+ if (item.Date>dateTime.Date || (item.Date==dateTime.Date && item.Time>=findTime)) return i;
72944
+ }
72945
+ }
72946
+ }
72947
+
72948
+ return null;
72949
+ }
72950
+
72951
+ return null;
72952
+ }
72953
+
72829
72954
  this.OnWheel=function(e)
72830
72955
  {
72831
72956
  JSConsole.Chart.Log('[KLineChartContainer::OnWheel]',e);
@@ -73444,37 +73569,21 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
73444
73569
 
73445
73570
  this.SetCustomShow=function(customShow,hisData)
73446
73571
  {
73447
- if (!customShow || !customShow.Date || customShow.Date<19910101) return;
73448
-
73449
- var firstDate=customShow.Date;
73450
- var index=null;
73451
- for(var i =0;i<hisData.Data.length;++i)
73452
- {
73453
- var item=hisData.Data[i];
73454
- if (item.Date>=firstDate)
73455
- {
73456
- index=i;
73457
- break;
73458
- }
73459
- }
73572
+ var index=this.ChartOperator_GetIndex_ByDateTime(hisData,customShow, this.Period, 0);
73460
73573
  if (index===null)
73461
73574
  {
73462
- JSConsole.Chart.Log(`[KLineChartContainer::SetCustomShow] Can't find first date=${firstDate}`);
73575
+ JSConsole.Chart.Log("[KLineChartContainer::SetCustomShow] Can't find index by customShow=",customShow);
73463
73576
  return;
73464
73577
  }
73465
73578
 
73466
- var count=hisData.Data.length-index;
73467
- if (customShow.PageSize>0) count=customShow.PageSize;
73468
-
73469
- var customShowCount=count;
73470
- var pageSize=this.GetMaxMinPageSize();
73471
- if (count>pageSize.Max) customShowCount=pageSize.Max;
73472
- else if (count<pageSize.Min) customShowCount=pageSize.Min;
73473
-
73474
- for(var i in this.Frame.SubFrame)
73579
+ if (IFrameSplitOperator.IsPlusNumber(customShow.PageSize)) //调整一屏显示个数 否则使用默认的
73475
73580
  {
73476
- var item =this.Frame.SubFrame[i].Frame;
73477
- item.XPointCount=customShowCount;
73581
+ var showCount=customShow.PageSize;
73582
+ for(var i=0;i<this.Frame.SubFrame.length; ++i)
73583
+ {
73584
+ var item =this.Frame.SubFrame[i].Frame;
73585
+ item.XPointCount=showCount;
73586
+ }
73478
73587
  }
73479
73588
 
73480
73589
  this.ChartPaint[0].Data.DataOffset=index;
@@ -76762,6 +76871,14 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
76762
76871
  }
76763
76872
  }
76764
76873
  }
76874
+
76875
+ if (option.CustomShow && IFrameSplitOperator.IsPlusNumber(option.CustomShow.Date))
76876
+ {
76877
+ var item=option.CustomShow;
76878
+ this.CustomShow={ Date:item.Date };
76879
+ if (IFrameSplitOperator.IsNumber(item.Time)) this.CustomShow.Time=item.Time;
76880
+ if (IFrameSplitOperator.IsPlusNumber(item.PageSize)) this.CustomShow.PageSize=item.PageSize;
76881
+ }
76765
76882
  }
76766
76883
 
76767
76884
  this.ReloadChartDrawPicture();
@@ -77418,11 +77535,6 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
77418
77535
  return true;
77419
77536
  }
77420
77537
 
77421
- this.ClearCurrnetDrawPicture=function()
77422
- {
77423
- this.CurrentChartDrawPicture=null;
77424
- }
77425
-
77426
77538
  this.AddChartDrawPicture=function(obj)
77427
77539
  {
77428
77540
  if (!obj) return null;
@@ -133122,7 +133234,7 @@ function ScrollBarBGChart()
133122
133234
 
133123
133235
 
133124
133236
 
133125
- var HQCHART_VERSION="1.1.13338";
133237
+ var HQCHART_VERSION="1.1.13349";
133126
133238
 
133127
133239
  function PrintHQChartVersion()
133128
133240
  {
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.13338";
8
+ var HQCHART_VERSION="1.1.13349";
9
9
 
10
10
  function PrintHQChartVersion()
11
11
  {