hqchart 1.1.14313 → 1.1.14330

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.
@@ -35898,6 +35898,313 @@ function ChartSimplePie()
35898
35898
  }
35899
35899
  }
35900
35900
 
35901
+
35902
+ //雷达图
35903
+ function ChartSimpleRadar()
35904
+ {
35905
+ this.newMethod=IChartPainting; //派生
35906
+ this.newMethod();
35907
+ delete this.newMethod;
35908
+
35909
+ this.ClassName='ChartSimpleRadar'; //类名
35910
+
35911
+ this.AreaColor='rgba(242,154,118,0.4)'; //
35912
+ this.AreaLineColor='rgb(242,154,118)';
35913
+
35914
+ this.TitleColor=g_JSChartResource.ChartSimpleRadar.TextColor;
35915
+ this.TextFontConfig=CloneData(g_JSChartResource.ChartSimpleRadar.TextFont);
35916
+ this.Offset=CloneData(g_JSChartResource.ChartSimpleRadar.Offset);
35917
+ this.BorderColor=g_JSChartResource.ChartSimpleRadar.BorderColor;
35918
+ this.AryBGColor=g_JSChartResource.ChartSimpleRadar.AryBGColor.slice();//背景色
35919
+ this.AryAreaConfig=g_JSChartResource.ChartSimpleRadar.AryArea.slice(); //面积图颜色
35920
+
35921
+ this.StartAngle=270;
35922
+ this.Radius=50;
35923
+ this.AryBorder=[1, 0.75, 0.5, 0.25];
35924
+ this.AryIndex; //指标{ Name:, Max:100, Min:0 },
35925
+
35926
+ this.CenterPoint={};
35927
+ this.RectClient={ };
35928
+ this.AryIndexCache=[];
35929
+ this.MapDataCache=new Map(); //key=name value={ Data:[] }
35930
+ this.TextFont;
35931
+
35932
+
35933
+ this.ReloadResource=function(resource)
35934
+ {
35935
+ this.TitleColor=g_JSChartResource.ChartSimpleRadar.TextColor;
35936
+ this.TextFontConfig=CloneData(g_JSChartResource.ChartSimpleRadar.TextFont);
35937
+ this.Offset=CloneData(g_JSChartResource.ChartSimpleRadar.Offset);
35938
+ this.BorderColor=g_JSChartResource.ChartSimpleRadar.BorderColor;
35939
+ this.AryBGColor=g_JSChartResource.ChartSimpleRadar.AryBGColor.slice();//背景色
35940
+ this.AryAreaConfig=g_JSChartResource.ChartSimpleRadar.AryArea.slice(); //面积图颜色
35941
+ }
35942
+
35943
+ this.DrawBorder=function() //画边框
35944
+ {
35945
+ this.Canvas.strokeStyle = this.BorderColor;
35946
+ this.Canvas.font=this.TextFont;
35947
+ for(var i=0;i<this.AryBorder.length;++i)
35948
+ {
35949
+ var rate = this.AryBorder[i];
35950
+ var radius=this.RectClient.Radius*rate;
35951
+ var bFirstDraw=true;
35952
+ for(var j=0;j<this.AryIndexCache.length;++j)
35953
+ {
35954
+ var item=this.AryIndexCache[j];
35955
+ var x = this.CenterPoint.X + radius * Math.cos(item.Angle * Math.PI / 180);
35956
+ var y = this.CenterPoint.Y + radius * Math.sin(item.Angle * Math.PI / 180);
35957
+ if (bFirstDraw)
35958
+ {
35959
+ this.Canvas.beginPath();
35960
+ this.Canvas.moveTo(x,y);
35961
+ bFirstDraw=false;
35962
+ }
35963
+ else
35964
+ {
35965
+ this.Canvas.lineTo(x,y);
35966
+ }
35967
+ }
35968
+
35969
+ this.Canvas.closePath();
35970
+ this.Canvas.stroke();
35971
+
35972
+ if (IFrameSplitOperator.IsNonEmptyArray(this.AryBGColor))
35973
+ {
35974
+ this.Canvas.fillStyle = this.AryBGColor[i%this.AryBGColor.length];
35975
+ this.Canvas.fill();
35976
+ }
35977
+ }
35978
+
35979
+ this.Canvas.beginPath();
35980
+ for(var i=0;i<this.AryIndexCache.length;++i)
35981
+ {
35982
+ var item=this.AryIndexCache[i];
35983
+ var x = this.CenterPoint.X + item.Radius * Math.cos(item.Angle * Math.PI / 180);
35984
+ var y = this.CenterPoint.Y + item.Radius * Math.sin(item.Angle * Math.PI / 180);
35985
+ this.Canvas.moveTo(this.CenterPoint.X,this.CenterPoint.Y);
35986
+ this.Canvas.lineTo(x,y);
35987
+ this.DrawText(item, x, y);
35988
+ }
35989
+ this.Canvas.stroke();
35990
+
35991
+ }
35992
+
35993
+ this.GetRadarRate=function(indexItem, value)
35994
+ {
35995
+ var range={ Max:100, Min:0 };
35996
+ if (IFrameSplitOperator.IsNumber(indexItem.Max)) range.Max=indexItem.Max;
35997
+ if (IFrameSplitOperator.IsNumber(indexItem.Min)) range.Min=indexItem.Min;
35998
+
35999
+ if (value>range.Max) value=range.Max;
36000
+ else if (value<range.Min) value=range.Min;
36001
+
36002
+ return (value-range.Min)/(range.Max-range.Min);
36003
+ }
36004
+
36005
+ this.DrawArea=function()
36006
+ {
36007
+ if (this.MapDataCache.size<=0) return;
36008
+
36009
+ var index=0;
36010
+ for(var mapItem of this.MapDataCache)
36011
+ {
36012
+ var mapData=mapItem[1].MapData;
36013
+
36014
+ var bFirstDraw=true;
36015
+ var pointCount=0;
36016
+ for(var i=0;i<this.AryIndexCache.length;++i)
36017
+ {
36018
+ var indexItem=this.AryIndexCache[i];
36019
+ if (!indexItem.Data || !indexItem.Data.Name) continue;
36020
+ if (!mapData.has(indexItem.Data.Name)) continue;
36021
+ var item=mapData.get(indexItem.Data.Name);
36022
+ if (!item.Data && !IFrameSplitOperator.IsNumber(item.Data.Value)) conintue;
36023
+
36024
+ var widthRate=this.GetRadarRate(indexItem, item.Data.Value);
36025
+ var x = this.CenterPoint.X+indexItem.Radius*widthRate*Math.cos(indexItem.Angle * Math.PI / 180);
36026
+ var y = this.CenterPoint.Y+indexItem.Radius*widthRate*Math.sin(indexItem.Angle * Math.PI / 180);
36027
+
36028
+ if (bFirstDraw)
36029
+ {
36030
+ this.Canvas.beginPath();
36031
+ this.Canvas.moveTo(x,y);
36032
+ bFirstDraw=false;
36033
+ ++pointCount;
36034
+ }
36035
+ else
36036
+ {
36037
+ this.Canvas.lineTo(x,y);
36038
+ ++pointCount;
36039
+ }
36040
+ }
36041
+
36042
+ if (pointCount>0)
36043
+ {
36044
+ this.Canvas.closePath();
36045
+
36046
+ var config=this.AryAreaConfig[index%this.AryAreaConfig.length];
36047
+ if (config.Color)
36048
+ {
36049
+ this.Canvas.fillStyle = config.Color;
36050
+ this.Canvas.fill();
36051
+ }
36052
+
36053
+ if (config.LineColor)
36054
+ {
36055
+ this.Canvas.strokeStyle = config.LineColor;
36056
+ this.Canvas.stroke();
36057
+ }
36058
+ }
36059
+
36060
+ ++index;
36061
+ }
36062
+ }
36063
+
36064
+ this.DrawText=function(item, x, y)
36065
+ {
36066
+ if (!item.Data || !item.Data.Name) return;
36067
+
36068
+ //JSConsole.Chart.Log(item.Text, item.Angle);
36069
+ this.Canvas.fillStyle = this.TitleColor;
36070
+ var xText = x, yText =y;
36071
+
36072
+ var angle=item.Angle%360;
36073
+
36074
+ //显示每个角度的位置
36075
+ if (angle > 0 && angle < 45) {
36076
+ this.Canvas.textAlign = 'left';
36077
+ this.Canvas.textBaseline = 'middle';
36078
+ xText += 2;
36079
+ }
36080
+ else if (angle >= 45 && angle < 90) {
36081
+ this.Canvas.textAlign = 'left';
36082
+ this.Canvas.textBaseline = 'top';
36083
+ xText += 2;
36084
+ }
36085
+ else if (angle==90)
36086
+ {
36087
+ this.Canvas.textAlign = 'center';
36088
+ this.Canvas.textBaseline = 'top';
36089
+ yText+=2;
36090
+ }
36091
+ else if (angle >= 90 && angle < 135) {
36092
+ this.Canvas.textAlign = 'right';
36093
+ this.Canvas.textBaseline = 'top';
36094
+ xText -= 2;
36095
+ }
36096
+ else if (angle >= 135 && angle < 180) {
36097
+ this.Canvas.textAlign = 'right';
36098
+ this.Canvas.textBaseline = 'top';
36099
+ xText -= 2;
36100
+ }
36101
+ else if (angle >= 180 && angle < 225) {
36102
+ this.Canvas.textAlign = 'right';
36103
+ this.Canvas.textBaseline = 'middle';
36104
+ xText -= 2;
36105
+ }
36106
+ else if (angle >= 225 && angle <= 270) {
36107
+ this.Canvas.textAlign = 'center';
36108
+ this.Canvas.textBaseline = 'bottom';
36109
+ }
36110
+ else if (angle > 270 && angle < 315) {
36111
+ this.Canvas.textAlign = 'left';
36112
+ this.Canvas.textBaseline = 'bottom';
36113
+ xText += 2;
36114
+ }
36115
+ else
36116
+ {
36117
+ this.Canvas.textAlign = 'left';
36118
+ this.Canvas.textBaseline = 'middle';
36119
+ xText += 2;
36120
+ }
36121
+
36122
+ this.Canvas.fillText(item.Data.Name, xText, yText);
36123
+ }
36124
+
36125
+ this.Draw=function()
36126
+ {
36127
+ this.AryIndexCache=[];
36128
+ this.MapData=new Map();
36129
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.AryIndex)) return;
36130
+
36131
+ this.CalculateSize();
36132
+
36133
+ this.DrawBorder();
36134
+
36135
+ this.DrawArea();
36136
+ }
36137
+
36138
+ this.BuildCacheData=function()
36139
+ {
36140
+ this.MapDataCache=new Map();
36141
+
36142
+ for(var i=0;i<this.Data.Data.length;++i)
36143
+ {
36144
+ var item=this.Data.Data[i];
36145
+ if (!this.MapDataCache.has(item.Group))
36146
+ {
36147
+ this.MapDataCache.set(item.Group, { MapData:new Map() })
36148
+ }
36149
+
36150
+ var mpaItem=this.MapDataCache.get(item.Group);
36151
+ mpaItem.MapData.set(item.Name, { Data:item });
36152
+ }
36153
+ }
36154
+
36155
+ this.CalculateSize=function(data)
36156
+ {
36157
+ var border=this.ChartBorder.GetBorder();
36158
+ var pixelRatio=GetDevicePixelRatio();
36159
+ this.TextFont=`${this.TextFontConfig.Size*pixelRatio}px ${ this.TextFontConfig.Name}`;
36160
+ var fontHeight=this.GetFontHeight(this.TextFont,"擎")+1;
36161
+
36162
+ var maxTextWidth=0;
36163
+ if (IFrameSplitOperator.IsNonEmptyArray(this.AryIndex))
36164
+ {
36165
+ for(var i=0;i<this.AryIndex.length;++i)
36166
+ {
36167
+ var item=this.AryIndex[i];
36168
+ if (!item.Name) continue;
36169
+ var textWidth=this.Canvas.measureText(item.Name).width;
36170
+ if (maxTextWidth<textWidth) maxTextWidth=textWidth;
36171
+ }
36172
+ }
36173
+
36174
+ var radius=this.Radius*2*pixelRatio; //半径
36175
+ this.RectClient={ Width:radius*2, Height:radius*2, Radius:radius };
36176
+ this.RectClient.Right=border.Right+this.Offset.X-maxTextWidth;
36177
+ this.RectClient.Top=border.TopEx+this.Offset.Y+fontHeight;
36178
+ this.RectClient.Left=this.RectClient.Right-this.RectClient.Width;
36179
+ this.RectClient.Bottom=this.RectClient.Top+this.RectClient.Height;
36180
+
36181
+ var ptCenter={X:this.RectClient.Left+this.RectClient.Width/2, Y:this.RectClient.Top+this.RectClient.Height/2}; //中心点
36182
+
36183
+ var count=Math.max(5,this.AryIndex.length);
36184
+ var averageAngle=360/count;
36185
+ for(var i=0;i<count;++i)
36186
+ {
36187
+ var angle=i*averageAngle+this.StartAngle;
36188
+
36189
+ var indexItem={ Data:null, Index:i, Angle:angle, Radius:radius };
36190
+ if (this.AryIndex && this.AryIndex[i])
36191
+ {
36192
+ indexItem.Data=this.AryIndex[i];
36193
+ }
36194
+
36195
+ this.AryIndexCache.push(indexItem);
36196
+ }
36197
+
36198
+ this.CenterPoint=ptCenter;
36199
+ }
36200
+
36201
+ //空数据
36202
+ this.DrawEmptyData=function()
36203
+ {
36204
+ JSConsole.Chart.Log('[ChartSimpleRadar::DrawEmptyData]')
36205
+ }
36206
+ }
36207
+
35901
36208
  //分钟成交量 支持横屏
35902
36209
  function ChartMinuteVolumBar()
35903
36210
  {
@@ -56525,6 +56832,7 @@ function ChartCorssCursor()
56525
56832
  this.TextBGColor=g_JSChartResource.CorssCursorBGColor; //文本背景色
56526
56833
  this.BorderColor=g_JSChartResource.CorssCursorBorderColor; //边框颜色
56527
56834
  this.XRangeBGColor=g_JSChartResource.CorssCursorXRangeBGColor;
56835
+ this.LineDash=g_JSChartResource.CorssCursorLineDash.slice(); //虚线
56528
56836
  this.TextHeight=20; //文本字体高度
56529
56837
  this.LastPoint;
56530
56838
  this.LastValue; //{ Y:{ Value:, Extend: } }
@@ -56580,6 +56888,7 @@ function ChartCorssCursor()
56580
56888
  this.TextBGColor=g_JSChartResource.CorssCursorBGColor; //文本背景色
56581
56889
  this.BorderColor=g_JSChartResource.CorssCursorBorderColor; //边框颜色
56582
56890
  this.XRangeBGColor=g_JSChartResource.CorssCursorXRangeBGColor;
56891
+ this.LineDash=g_JSChartResource.CorssCursorLineDash.slice(); //虚线
56583
56892
  }
56584
56893
 
56585
56894
  this.GetCloseYPoint=function(index)
@@ -56838,10 +57147,10 @@ function ChartCorssCursor()
56838
57147
  }
56839
57148
 
56840
57149
  var pixel=GetDevicePixelRatio();
56841
- if (this.HPenType==1 || this.HPenType==0) //0=实线 1=虚线
57150
+ if (this.HPenType==1 || this.HPenType==0) //0=虚线 1=实线
56842
57151
  {
56843
57152
  this.Canvas.strokeStyle=this.HPenColor;
56844
- if (this.HPenType==0) this.Canvas.setLineDash([3*pixel,2*pixel]); //虚线
57153
+ if (this.HPenType==0) this.Canvas.setLineDash(this.LineDash); //虚线
56845
57154
  //this.Canvas.lineWidth=0.5
56846
57155
  this.Canvas.beginPath();
56847
57156
  this.Canvas.moveTo(left,ToFixedPoint(y));
@@ -56854,7 +57163,7 @@ function ChartCorssCursor()
56854
57163
  this.Canvas.strokeStyle=this.VPenColor;
56855
57164
  if (this.VPenType==0)
56856
57165
  {
56857
- this.Canvas.setLineDash([3*pixel,2*pixel]); //虚线
57166
+ this.Canvas.setLineDash(this.LineDash); //虚线
56858
57167
  }
56859
57168
  else if (this.VPenType==2)
56860
57169
  {
@@ -57449,7 +57758,7 @@ function ChartCorssCursor()
57449
57758
  var pixel=GetDevicePixelRatio();
57450
57759
  this.Canvas.save();
57451
57760
  this.Canvas.strokeStyle=this.HPenColor;
57452
- if (this.HPenType==0) this.Canvas.setLineDash([3*pixel,2*pixel]); //虚线
57761
+ if (this.HPenType==0) this.Canvas.setLineDash(this.LineDash); //虚线
57453
57762
 
57454
57763
  //画竖线
57455
57764
  this.Canvas.beginPath();
@@ -57463,7 +57772,7 @@ function ChartCorssCursor()
57463
57772
  this.Canvas.strokeStyle=this.VPenColor;
57464
57773
  if (this.VPenType==0)
57465
57774
  {
57466
- this.Canvas.setLineDash([3*pixel,2*pixel]); //虚线
57775
+ this.Canvas.setLineDash(this.LineDash); //虚线
57467
57776
  }
57468
57777
  else if (this.VPenType==2)
57469
57778
  {
@@ -60739,7 +61048,12 @@ function DynamicChartTitlePainting()
60739
61048
  {
60740
61049
  this.Font=g_JSChartResource.TitleFont;
60741
61050
  this.TitleColor=g_JSChartResource.DefaultTextColor;
61051
+ this.SelectedColor=g_JSChartResource.IndexTitleSelectedColor;
60742
61052
  this.OverlayIndexType.BGColor=g_JSChartResource.OverlayIndexTitleBGColor;
61053
+
61054
+ this.BGColor=g_JSChartResource.IndexTitleBGColor;
61055
+ this.BGBorderColor=g_JSChartResource.IndexTitleBorderColor;
61056
+ this.BGBorderMoveOnColor=g_JSChartResource.IndexTitleBorderMoveOnColor;
60743
61057
  }
60744
61058
 
60745
61059
  this.SetDynamicTitleData=function(outName, args, data)
@@ -74413,6 +74727,7 @@ function JSChartResource()
74413
74727
  this.CorssCursorHPenColor="rgb(130,130,130)"; //十字光标线段颜色(水平)
74414
74728
  this.CorssCursorVPenColor="rgb(130,130,130)"; //十字光标线段颜色(垂直)
74415
74729
  this.CorssCursorXRangeBGColor="rgba(100,149,237,0.3)"; //十字光标X轴访问背景色
74730
+ this.CorssCursorLineDash=[3*GetDevicePixelRatio(),2*GetDevicePixelRatio()]; //十字光标虚线
74416
74731
 
74417
74732
  this.CorssCursor=
74418
74733
  {
@@ -74783,6 +75098,20 @@ function JSChartResource()
74783
75098
  Offset:{ X:-5, Y:5 }
74784
75099
  }
74785
75100
 
75101
+ this.ChartSimpleRadar=
75102
+ {
75103
+ TextFont:{ Family:'微软雅黑' , Size:12 },
75104
+ BorderColor:"rgb(169,169,169)",
75105
+ Offset:{ X:-5, Y:5 },
75106
+ TextColor:"rgb(105,105,105)",
75107
+ AryBGColor:['rgba(255,255,255,0.9)', 'rgba(230, 234, 242,0.9)'],
75108
+ AryArea:
75109
+ [
75110
+ { Color:"rgba(242,154,118,0.4)", LineColor:"rgb(242,154,118)"},
75111
+ { Color:"rgba(121,197,228,0.4)", LineColor:"rgb(92,165,196)"},
75112
+ ],
75113
+ }
75114
+
74786
75115
  //手机端tooltip
74787
75116
  this.TooltipPaint = {
74788
75117
  BGColor:'rgba(250,250,250,0.8)', //背景色
@@ -75833,6 +76162,7 @@ function JSChartResource()
75833
76162
  if (style.CorssCursorHPenColor) this.CorssCursorHPenColor = style.CorssCursorHPenColor;
75834
76163
  if (style.CorssCursorBorderColor) this.CorssCursorBorderColor=style.CorssCursorBorderColor;
75835
76164
  if (style.CorssCursorXRangeBGColor) this.CorssCursorXRangeBGColor=style.CorssCursorXRangeBGColor;
76165
+ if (style.CorssCursorLineDash) this.CorssCursorLineDash=style.CorssCursorLineDash.slice();
75836
76166
  if (style.CorssCursor && style.CorssCursor.RightButton)
75837
76167
  {
75838
76168
  var item=style.CorssCursor.RightButton;
@@ -76013,6 +76343,7 @@ function JSChartResource()
76013
76343
 
76014
76344
  if (style.ChartSimpleTable) this.SetChartSimpleTable(style.ChartSimpleTable);
76015
76345
  if (style.ChartSimplePie) this.SetChartSimplePie(style.ChartSimplePie);
76346
+ if (style.ChartSimpleRadar) this.SetChartSimpleRadar(style.ChartSimpleRadar);
76016
76347
 
76017
76348
  if (style.DRAWICON)
76018
76349
  {
@@ -77106,6 +77437,30 @@ function JSChartResource()
77106
77437
  }
77107
77438
  }
77108
77439
 
77440
+ this.SetChartSimpleRadar=function(style)
77441
+ {
77442
+ var dest=this.ChartSimpleRadar;
77443
+ if (style.TextFont)
77444
+ {
77445
+ var item=style.TextFont;
77446
+ if (item.Name) dest.TextFont.Name=item.Name;
77447
+ if (IFrameSplitOperator.IsNumber(item.Size)) dest.TextFont.Size=item.Size;
77448
+ }
77449
+
77450
+ if (style.BorderColor) dest.BorderColor=style.BorderColor;
77451
+ if (style.TextColor) dest.TextColor=style.TextColor;
77452
+
77453
+ if (style.Offset)
77454
+ {
77455
+ var item=style.Offset;
77456
+ if (IFrameSplitOperator.IsNumber(item.X)) dest.Offset.X=item.X;
77457
+ if (IFrameSplitOperator.IsNumber(item.Y)) dest.Offset.Y=item.Y;
77458
+ }
77459
+
77460
+ if (IFrameSplitOperator.IsNonEmptyArray(style.AryBGColor)) dest.AryBGColor=style.AryBGColor.slice();
77461
+ if (IFrameSplitOperator.IsNonEmptyArray(style.AryArea)) dest.AryArea=style.AryArea.slice();
77462
+ }
77463
+
77109
77464
  }
77110
77465
 
77111
77466
  var g_JSChartResource=new JSChartResource();
@@ -89872,12 +90227,12 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
89872
90227
  this.CaclutateCallCationYRange();
89873
90228
  }
89874
90229
 
90230
+ //增量更新
89875
90231
  this.RecvUpdateMinuteData=function(data)
89876
90232
  {
89877
90233
  var minuteData=MinuteChartContainer.JsonDataToUpdateMinuteData(data);
89878
90234
  var aryColorData=MinuteChartContainer.JsonDataToMinuteLineColorData(data);
89879
- this.BeforeOpenData=null;
89880
- this.AfterCloseData=null;
90235
+
89881
90236
  var beforeOpenData=MinuteChartContainer.JsonDataToBeforeOpenData(data);
89882
90237
  var afterCloseData=MinuteChartContainer.JsonDataToAfterCloseData(data);
89883
90238
  var updateTime=MinuteChartContainer.JsonDataToMinuteLastUpdateTime(data); //数据最后的更新时间
@@ -89896,92 +90251,22 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
89896
90251
  return;
89897
90252
  }
89898
90253
 
89899
- //原始数据
90254
+ if (this.IsBeforeData && beforeOpenData) this.BeforeOpenData=beforeOpenData;
90255
+ if (this.IsAfterData && afterCloseData) this.AfterCloseData=afterCloseData;
89900
90256
 
90257
+ //原始数据
89901
90258
  this.UpdateLatestMinuteDataV2(minuteData);
89902
- var sourceData=this.SourceData;
89903
- var aryMinuteData=this.SourceData.Data;
89904
- this.ColorLineData=aryColorData;
89905
- this.TradeDate=data.stock[0].date;
89906
- this.Frame.SetDayCount(1); //单日数据
89907
- this.SourceData.UpdateTime=updateTime;
89908
- this.Symbol=minuteData.Symbol;
89909
- this.Name=minuteData.Name;
89910
-
89911
- this.SetCallCationDataBorder( { Left:this.IsBeforeData, Right:this.IsAfterData , MultiDay:{ Left:false, Right:false }} );
89912
-
89913
- if (this.ShareAfterVol==2) //盘前, 盘后成交量公用坐标
89914
- {
89915
- if (this.BeforeOpenData && this.AfterCloseData)
89916
- {
89917
- var max=Math.max(this.BeforeOpenData.VolMax, this.AfterCloseData.VolMax);
89918
- var min=Math.min(this.BeforeOpenData.VolMin, this.AfterCloseData.VolMin);
89919
- this.BeforeOpenData.VolMax=this.AfterCloseData.VolMax=max;
89920
- this.BeforeOpenData.VolMin=this.AfterCloseData.VolMin=min;
89921
- }
89922
- }
90259
+ this.UpdateMinuteUI(data.stock[0], {FunctionName:"RecvUpdateMinuteData"});
89923
90260
 
89924
- var yClose=minuteData.YClose;
89925
- var upperSymbol=this.Symbol.toUpperCase();
89926
- var isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol);
89927
- if (minuteData.YClearing>0 && isFutures) yClose=minuteData.YClearing; //期货使用前结算价
89928
- this.CaclutateLimitPrice(yClose, minuteData.LimitPrice); //计算涨停价格
89929
- var extendData=null;
89930
- if (minuteData.High>0 && minuteData.Low>0) extendData={ High:minuteData.High, Low:minuteData.Low };
89931
- this.BindMainData(sourceData,yClose, extendData);
89932
-
89933
- if (this.Frame.SubFrame.length>2)
90261
+ if (data.AutoUpdate===false) //不执行自动更新
89934
90262
  {
89935
- var bindData=new ChartData();
89936
- bindData.Data=aryMinuteData;
89937
- for(var i=2; i<this.Frame.SubFrame.length; ++i)
89938
- {
89939
- this.BindIndexData(i,bindData);
89940
- }
89941
- }
89942
90263
 
89943
- for(let i=0; i<this.Frame.SubFrame.length; ++i)
90264
+ }
90265
+ else
89944
90266
  {
89945
- var item=this.Frame.SubFrame[i];
89946
- item.Frame.XSplitOperator.Symbol=this.Symbol;
89947
- item.Frame.XSplitOperator.DayCount=1;
89948
- item.Frame.XSplitOperator.Operator(); //调整X轴个数
89949
- item.Frame.YSplitOperator.Symbol=this.Symbol;
89950
-
89951
- if (IFrameSplitOperator.IsNonEmptyArray(item.OverlayIndex))
89952
- {
89953
- for(var j=0;j<item.OverlayIndex.length; ++j) //子坐标X轴个数同步
89954
- {
89955
- var overlayItem=item.OverlayIndex[j];
89956
- overlayItem.Frame.XPointCount=item.Frame.XPointCount;
89957
- overlayItem.Frame.MinuteCount=item.Frame.MinuteCount;
89958
- }
89959
- }
90267
+ this.AutoUpdateEvent(true, "MinuteChartContainer::RecvUpdateMinuteData");
90268
+ this.AutoUpdate();
89960
90269
  }
89961
-
89962
- this.ChartCorssCursor.StringFormatY.Symbol=this.Symbol;
89963
- this.ChartCorssCursor.StringFormatX.Symbol=this.Symbol;
89964
-
89965
- if (MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol)) this.TitlePaint[0].IsShowDate=false;
89966
-
89967
- if (data.stock[0].IsHistoryMinute==true) this.TitlePaint[0].IsShowDate=true;
89968
-
89969
- var chartInfo=this.GetChartMinuteInfo();
89970
- if (chartInfo) chartInfo.SourceData=this.SourceData; //数据绑定到信息地雷上
89971
-
89972
- this.RecvMinuteDataEvent( {FunctionName:"RecvUpdateMinuteData"} );
89973
- this.RequestMinuteInfoData();
89974
- this.RequestOverlayMinuteData();//请求叠加数据 (主数据下载完再下载)
89975
- this.CreateChartDrawPictureByStorage(); //创建画图工具
89976
-
89977
- this.UpdateFrameMaxMin(); //调整坐标最大 最小值
89978
- this.Frame.SetSizeChage(true);
89979
- this.Draw();
89980
-
89981
- this.BindAllOverlayIndexData(this.SourceData);
89982
-
89983
- this.AutoUpdateEvent(true, "MinuteChartContainer::RecvUpdateMinuteData");
89984
- this.AutoUpdate();
89985
90270
  }
89986
90271
 
89987
90272
  this.RecvMinuteData=function(data)
@@ -90048,15 +90333,31 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90048
90333
  var sourceData=new ChartData();
90049
90334
  sourceData.Data=aryMinuteData;
90050
90335
  sourceData.UpdateTime=updateTime;
90336
+ this.SourceData=sourceData;
90051
90337
 
90052
90338
  this.ColorLineData=aryColorData;
90053
90339
 
90054
- this.TradeDate=data.stock[0].date;
90340
+ this.UpdateMinuteUI(data.stock[0], {FunctionName:"RecvMinuteData", Day:{ IsFirstData:bFirstData} });
90341
+
90342
+ if (data.AutoUpdate===false) //不执行自动更新
90343
+ {
90344
+
90345
+ }
90346
+ else
90347
+ {
90348
+ this.AutoUpdateEvent(true, "MinuteChartContainer::RecvMinuteData");
90349
+ this.AutoUpdate();
90350
+ }
90351
+ }
90352
+
90353
+ //更新单日分时图
90354
+ this.UpdateMinuteUI=function(stockData, eventData)
90355
+ {
90356
+ this.TradeDate=stockData.date;
90055
90357
  this.Frame.SetDayCount(1); //单日数据
90056
90358
 
90057
- this.SourceData=sourceData;
90058
- this.Symbol=data.stock[0].symbol;
90059
- this.Name=data.stock[0].name;
90359
+ this.Symbol=stockData.symbol;
90360
+ this.Name=stockData.name;
90060
90361
 
90061
90362
  this.SetCallCationDataBorder( { Left:this.IsBeforeData, Right:this.IsAfterData , MultiDay:{ Left:false, Right:false }} );
90062
90363
 
@@ -90071,26 +90372,26 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90071
90372
  }
90072
90373
  }
90073
90374
 
90074
- var yClose=data.stock[0].yclose;
90375
+ var yClose=stockData.yclose;
90075
90376
  var upperSymbol=this.Symbol.toUpperCase();
90076
90377
  var isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol);
90077
- if (data.stock[0].yclearing>0 && isFutures) yClose=data.stock[0].yclearing; //期货使用前结算价
90078
- this.CaclutateLimitPrice(yClose, data.stock[0].limitprice); //计算涨停价格
90378
+ if (stockData.yclearing>0 && isFutures) yClose=stockData.yclearing; //期货使用前结算价
90379
+ this.CaclutateLimitPrice(yClose, stockData.limitprice); //计算涨停价格
90079
90380
  var extendData=null;
90080
- if (data.stock[0].high>0 && data.stock[0].low>0) extendData={ High:data.stock[0].high, Low:data.stock[0].low };
90081
- this.BindMainData(sourceData,yClose, extendData);
90381
+ if (stockData.high>0 && stockData.low>0) extendData={ High:stockData.high, Low:stockData.low };
90382
+ this.BindMainData(this.SourceData,yClose, extendData);
90082
90383
 
90083
90384
  if (this.Frame.SubFrame.length>2)
90084
90385
  {
90085
90386
  var bindData=new ChartData();
90086
- bindData.Data=aryMinuteData;
90387
+ bindData.Data=this.SourceData.Data;
90087
90388
  for(var i=2; i<this.Frame.SubFrame.length; ++i)
90088
90389
  {
90089
90390
  this.BindIndexData(i,bindData);
90090
90391
  }
90091
90392
  }
90092
90393
 
90093
- for(let i in this.Frame.SubFrame)
90394
+ for(var i=0, j=0; i<this.Frame.SubFrame.length; ++i)
90094
90395
  {
90095
90396
  var item=this.Frame.SubFrame[i];
90096
90397
  item.Frame.XSplitOperator.Symbol=this.Symbol;
@@ -90098,7 +90399,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90098
90399
  item.Frame.XSplitOperator.Operator(); //调整X轴个数
90099
90400
  item.Frame.YSplitOperator.Symbol=this.Symbol;
90100
90401
 
90101
- for(var j in item.OverlayIndex) //子坐标X轴个数同步
90402
+ for(j=0;j<item.OverlayIndex.length;++j) //子坐标X轴个数同步
90102
90403
  {
90103
90404
  var overlayItem=item.OverlayIndex[j];
90104
90405
  overlayItem.Frame.XPointCount=item.Frame.XPointCount;
@@ -90111,12 +90412,12 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90111
90412
 
90112
90413
  if (MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol)) this.TitlePaint[0].IsShowDate=false;
90113
90414
 
90114
- if (data.stock[0].IsHistoryMinute==true) this.TitlePaint[0].IsShowDate=true;
90415
+ if (stockData.IsHistoryMinute==true) this.TitlePaint[0].IsShowDate=true;
90115
90416
 
90116
90417
  var chartInfo=this.GetChartMinuteInfo();
90117
90418
  if (chartInfo) chartInfo.SourceData=this.SourceData; //数据绑定到信息地雷上
90118
90419
 
90119
- this.RecvMinuteDataEvent( {FunctionName:"RecvMinuteData", Day:{ IsFirstData:bFirstData} } );
90420
+ if (eventData) this.RecvMinuteDataEvent( eventData );
90120
90421
  this.RequestMinuteInfoData();
90121
90422
  this.RequestOverlayMinuteData();//请求叠加数据 (主数据下载完再下载)
90122
90423
  this.CreateChartDrawPictureByStorage(); //创建画图工具
@@ -90126,16 +90427,6 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90126
90427
  this.Draw();
90127
90428
 
90128
90429
  this.BindAllOverlayIndexData(this.SourceData);
90129
-
90130
- if (data.AutoUpdate===false) //不执行自动更新
90131
- {
90132
-
90133
- }
90134
- else
90135
- {
90136
- this.AutoUpdateEvent(true, "MinuteChartContainer::RecvMinuteData");
90137
- this.AutoUpdate();
90138
- }
90139
90430
  }
90140
90431
 
90141
90432
  this.CaclutateLimitPrice=function(yClose, limitData)
@@ -112338,8 +112629,24 @@ function JSDraw(errorHandler,symbolData)
112338
112629
  }
112339
112630
 
112340
112631
  //饼图
112341
- this.PIE_CELL=function(value, color, text, textColor, lineColor)
112632
+ this.PIE_CELL=function(data, color, text, textColor, lineColor)
112342
112633
  {
112634
+ var value=null;
112635
+ if (IFrameSplitOperator.IsNumber(data))
112636
+ {
112637
+ value=data;
112638
+ }
112639
+ else if (IFrameSplitOperator.IsString(data))
112640
+ {
112641
+ value=parseFloat(data);
112642
+ }
112643
+ else if (IFrameSplitOperator.IsNonEmptyArray(data))
112644
+ {
112645
+ var lastValue=data[data.length-1];
112646
+ if (IFrameSplitOperator.IsNumber(lastValue)) value=lastValue;
112647
+ else if (IFrameSplitOperator.IsString(lastValue)) value=parseFloat(lastValue);
112648
+ }
112649
+
112343
112650
  var cellItem={ Value:value, Color:color };
112344
112651
  if (text) cellItem.Text=text;
112345
112652
  if (textColor) cellItem.TextColor=textColor;
@@ -112360,6 +112667,48 @@ function JSDraw(errorHandler,symbolData)
112360
112667
 
112361
112668
  return result={ DrawData:{ Data:aryCell, Radius:radius }, DrawType:"DRAW_SIMPLE_PIE" };
112362
112669
  }
112670
+
112671
+ this.RADAR_CELL=function(name, data, max, min)
112672
+ {
112673
+ var cellItem={ Name:name, Max:100, Min:0, Value:null };
112674
+ if (IFrameSplitOperator.IsNumber(data))
112675
+ {
112676
+ cellItem.Value=data;
112677
+ }
112678
+ else if (IFrameSplitOperator.IsString(data))
112679
+ {
112680
+ cellItem.Value=parseFloat(data);
112681
+ }
112682
+ else if (IFrameSplitOperator.IsNonEmptyArray(data))
112683
+ {
112684
+ var lastValue=data[data.length-1];
112685
+ if (IFrameSplitOperator.IsNumber(lastValue)) cellItem.Value=lastValue;
112686
+ else if (IFrameSplitOperator.IsString(lastValue)) cellItem.Value=parseFloat(lastValue);
112687
+ }
112688
+
112689
+ if (IFrameSplitOperator.IsNumber(max)) cellItem.Max=max;
112690
+ if (IFrameSplitOperator.IsNumber(min)) cellItem.Min=min;
112691
+
112692
+ return cellItem;
112693
+ }
112694
+
112695
+ this.DRAWRADAR=function(args)
112696
+ {
112697
+ var radius=args[0];
112698
+ var color=args[1];
112699
+
112700
+ var aryIndex=[];
112701
+ var aryData=[];
112702
+ for(var i=2;i<args.length;++i)
112703
+ {
112704
+ var item=args[i];
112705
+
112706
+ aryIndex.push({ Name:item.Name, Max:item.Max, Min:item.Min });
112707
+ aryData.push({ Value:item.Value, Name:item.Name, Group:"Default"});
112708
+ }
112709
+
112710
+ return result={ DrawData:{ Data:aryData, AryIndex:aryIndex, Radius:radius, AryArea:[{ LineColor:color }] }, DrawType:"DRAW_SIMPLE_RADAR" };
112711
+ }
112363
112712
  }
112364
112713
 
112365
112714
 
@@ -112414,7 +112763,7 @@ JSDraw.prototype.IsDrawFunction=function(name)
112414
112763
  'DRAWOVERLAYLINE',"FILLRGN", "FILLRGN2","FILLTOPRGN", "FILLBOTTOMRGN", "FILLVERTICALRGN","FLOATRGN","DRAWSL", "DRAWGBK2","DRAWGBK_DIV",
112415
112764
  "VERTLINE","HORLINE","TIPICON",
112416
112765
  "BUY","SELL","SELLSHORT","BUYSHORT",
112417
- "DRAWLASTBARICON","DRAWLASTBARNUMBER", "DRAWLASTBARTEXT","DRAWTABLE","DRAWPIE",
112766
+ "DRAWLASTBARICON","DRAWLASTBARNUMBER", "DRAWLASTBARTEXT","DRAWTABLE","DRAWPIE","DRAWRADAR",
112418
112767
  ]);
112419
112768
  if (setFunctionName.has(name)) return true;
112420
112769
 
@@ -119303,6 +119652,14 @@ function JSExecute(ast,option)
119303
119652
  node.Draw=this.Draw.DRAWPIE(args);
119304
119653
  node.Out=[];
119305
119654
  break;
119655
+ //雷达图
119656
+ case "RADAR_CELL":
119657
+ node.Out=this.Draw.RADAR_CELL(args[0],args[1],args[2],args[3]);
119658
+ break;
119659
+ case "DRAWRADAR":
119660
+ node.Draw=this.Draw.DRAWRADAR(args);
119661
+ node.Out=[];
119662
+ break;
119306
119663
 
119307
119664
  default:
119308
119665
  node.Out=this.Algorithm.CallFunction(funcName, args, node, this.SymbolData);
@@ -122319,6 +122676,35 @@ function ScriptIndex(name,script,args,option)
122319
122676
  hqChart.ChartPaint.push(chart);
122320
122677
  }
122321
122678
 
122679
+ this.CreateSimpleRadar=function(hqChart,windowIndex,varItem,id)
122680
+ {
122681
+ var chart=new ChartSimpleRadar();
122682
+ chart.Canvas=hqChart.Canvas;
122683
+ chart.Name=varItem.Name;
122684
+ chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;
122685
+ chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;
122686
+
122687
+ if (varItem.Draw && varItem.Draw.DrawData)
122688
+ {
122689
+ var drawData=varItem.Draw.DrawData;
122690
+ if (drawData.Data) chart.Data.Data=drawData.Data;
122691
+ if (drawData.AryIndex) chart.AryIndex=drawData.AryIndex;
122692
+ if (IFrameSplitOperator.IsPlusNumber(drawData.Radius)) chart.Radius=drawData.Radius;
122693
+ if (drawData.BorderColor) chart.BorderColor=drawData.BorderColor;
122694
+
122695
+ if (drawData.TextFont) chart.TextFontConfig=drawData.TextFont;
122696
+ if (drawData.TextColor) chart.TextColor=drawData.TextColor;
122697
+ if (drawData.BorderColor) chart.BorderColor=drawData.BorderColor;
122698
+ if (IFrameSplitOperator.IsNumber(drawData.XOffset)) chart.Offset.X=drawData.XOffset;
122699
+ if (IFrameSplitOperator.IsNumber(drawData.YOffset)) chart.Offset.Y=drawData.YOffset;
122700
+ if (IFrameSplitOperator.IsNonEmptyArray(drawData.AryArea)) chart.AryAreaConfig=drawData.AryArea;
122701
+
122702
+ chart.BuildCacheData();
122703
+ }
122704
+
122705
+ hqChart.ChartPaint.push(chart);
122706
+ }
122707
+
122322
122708
  this.CreateTradeIcon=function(hqChart,windowIndex,varItem,id)
122323
122709
  {
122324
122710
  var chart=new ChartTradeIcon();
@@ -123194,6 +123580,10 @@ function ScriptIndex(name,script,args,option)
123194
123580
  break;
123195
123581
  case "DRAW_SIMPLE_PIE":
123196
123582
  this.CreateSimplePie(hqChart,windowIndex,item,i);
123583
+ break;
123584
+ case "DRAW_SIMPLE_RADAR":
123585
+ this.CreateSimpleRadar(hqChart,windowIndex,item,i);
123586
+ break;
123197
123587
  case "BUY":
123198
123588
  case "SELL":
123199
123589
  case "SELLSHORT":
@@ -123546,7 +123936,10 @@ function OverlayScriptIndex(name,script,args,option)
123546
123936
  break;
123547
123937
  case "DRAW_SIMPLE_PIE":
123548
123938
  this.CreateSimplePie(hqChart,windowIndex,item,i);
123549
-
123939
+ break;
123940
+ case "DRAW_SIMPLE_RADAR":
123941
+ this.CreateSimpleRadar(hqChart,windowIndex,item,i);
123942
+ break;
123550
123943
  case "KLINE_BG":
123551
123944
  this.CreateBackgroud(hqChart,windowIndex,item,i);
123552
123945
  break;
@@ -124614,6 +125007,39 @@ function OverlayScriptIndex(name,script,args,option)
124614
125007
  frame.ChartPaint.push(chart);
124615
125008
  }
124616
125009
 
125010
+ this.CreateSimpleRadar=function(hqChart,windowIndex,varItem,id)
125011
+ {
125012
+ var overlayIndex=this.OverlayIndex;
125013
+ var frame=overlayIndex.Frame;
125014
+ var chart=new ChartSimpleRadar();
125015
+ chart.Canvas=hqChart.Canvas;
125016
+ chart.Name=varItem.Name;
125017
+ chart.ChartBorder=frame.Frame.ChartBorder;
125018
+ chart.ChartFrame=frame.Frame;
125019
+ chart.Identify=overlayIndex.Identify;
125020
+ chart.HQChart=hqChart;
125021
+
125022
+ if (varItem.Draw && varItem.Draw.DrawData)
125023
+ {
125024
+ var drawData=varItem.Draw.DrawData;
125025
+ if (drawData.Data) chart.Data.Data=drawData.Data;
125026
+ if (drawData.AryIndex) chart.AryIndex=drawData.AryIndex;
125027
+ if (IFrameSplitOperator.IsPlusNumber(drawData.Radius)) chart.Radius=drawData.Radius;
125028
+ if (drawData.BorderColor) chart.BorderColor=drawData.BorderColor;
125029
+
125030
+ if (drawData.TextFont) chart.TextFontConfig=drawData.TextFont;
125031
+ if (drawData.TextColor) chart.TextColor=drawData.TextColor;
125032
+ if (drawData.BorderColor) chart.BorderColor=drawData.BorderColor;
125033
+ if (IFrameSplitOperator.IsNumber(drawData.XOffset)) chart.Offset.X=drawData.XOffset;
125034
+ if (IFrameSplitOperator.IsNumber(drawData.YOffset)) chart.Offset.Y=drawData.YOffset;
125035
+ if (IFrameSplitOperator.IsNonEmptyArray(drawData.AryArea)) chart.AryAreaConfig=drawData.AryArea;
125036
+
125037
+ chart.BuildCacheData();
125038
+ }
125039
+
125040
+ frame.ChartPaint.push(chart);
125041
+ }
125042
+
124617
125043
  this.CreateChartVericaltLine=function(hqChart,windowIndex,varItem,id)
124618
125044
  {
124619
125045
  var overlayIndex=this.OverlayIndex;
@@ -125827,6 +126253,17 @@ function APIScriptIndex(name,script,args,option, isOverlay)
125827
126253
  outVarItem.Draw=drawItem;
125828
126254
  result.push(outVarItem);
125829
126255
  }
126256
+ else if (draw.DrawType=="DRAW_SIMPLE_RADAR")
126257
+ {
126258
+ drawItem.Name=draw.Name;
126259
+ drawItem.Type=draw.Type;
126260
+
126261
+ drawItem.DrawType=draw.DrawType;
126262
+ drawItem.DrawData=draw.DrawData; //{ AryIndex:[ ], Data:[] };
126263
+
126264
+ outVarItem.Draw=drawItem;
126265
+ result.push(outVarItem);
126266
+ }
125830
126267
  else
125831
126268
  {
125832
126269
  var find=g_ScriptIndexChartFactory.Get(draw.DrawType); //外部挂接
@@ -127443,6 +127880,20 @@ function GetBlackStyle()
127443
127880
  BorderColor:"rgb(220,220,220)",
127444
127881
  },
127445
127882
 
127883
+ ChartSimpleRadar:
127884
+ {
127885
+ //TextFont:{ Family:'微软雅黑' , Size:12 },
127886
+ BorderColor:"rgb(230, 230, 230)",
127887
+ //Offset:{ X:-5, Y:5 },
127888
+ TextColor:"rgb(250, 250, 250)",
127889
+ AryBGColor:['rgba(63,61,82,0.9)','rgba(56,55,80,0.9)'],
127890
+ AryArea:
127891
+ [
127892
+ { Color:"rgba(242,154,118,0.4)", LineColor:"rgb(242,154,118)"},
127893
+ { Color:"rgba(121,197,228,0.4)", LineColor:"rgb(92,165,196)"},
127894
+ ],
127895
+ },
127896
+
127446
127897
  ChartDrawVolProfile:
127447
127898
  {
127448
127899
  BGColor:"rgba(244,250,254,0.3)",
@@ -151582,7 +152033,7 @@ function HQChartScriptWorker()
151582
152033
 
151583
152034
 
151584
152035
 
151585
- var HQCHART_VERSION="1.1.14312";
152036
+ var HQCHART_VERSION="1.1.14329";
151586
152037
 
151587
152038
  function PrintHQChartVersion()
151588
152039
  {