hqchart 1.1.14947 → 1.1.14956

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.
@@ -15338,7 +15338,16 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
15338
15338
  var left=null,right=null;
15339
15339
  if (IFrameSplitOperator.IsBool(srcParam.Left)) left=srcParam.Left;
15340
15340
  if (IFrameSplitOperator.IsBool(srcParam.Right)) right=srcParam.Right;
15341
- this.ShowCallAuctionData({ Left:left, Right:right });
15341
+
15342
+ var multiDay=null;
15343
+ if (srcParam.MultiDay)
15344
+ {
15345
+ var item=srcParam.MultiDay;
15346
+ multiDay={ };
15347
+ if (IFrameSplitOperator.IsBool(item.Left)) multiDay.Left=item.Left;
15348
+ if (IFrameSplitOperator.IsBool(item.Right)) multiDay.Right=item.Right;
15349
+ }
15350
+ this.ShowCallAuctionData({ Left:left, Right:right, MultiDay:multiDay });
15342
15351
  }
15343
15352
 
15344
15353
  break;
@@ -15914,7 +15923,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
15914
15923
  {
15915
15924
  //清空当前鼠标坐标
15916
15925
  this.LastPoint.X=null;
15917
- this.LastPoint.Y=null
15926
+ this.LastPoint.Y=null;
15918
15927
  this.HideTooltip();
15919
15928
  this.CloseTooltipDialog();
15920
15929
  }
@@ -15923,7 +15932,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
15923
15932
  if (IFrameSplitOperator.IsNumber(data.X) && IFrameSplitOperator.IsNumber(data.Y))
15924
15933
  {
15925
15934
  //设置鼠标位置
15926
- if (this.LastPoint && !IFrameSplitOperator.IsNumber(this.LastPoint.X) && !IFrameSplitOperator.IsNumber(this.LastPoint.Y))
15935
+ if (this.LastPoint && (!IFrameSplitOperator.IsNumber(this.LastPoint.X) || !IFrameSplitOperator.IsNumber(this.LastPoint.Y)))
15927
15936
  {
15928
15937
  this.LastPoint.X=data.X;
15929
15938
  this.LastPoint.Y=data.Y;
@@ -39464,10 +39473,10 @@ function ChartMinuteVolumBar()
39464
39473
  var unit=this.GetVolUnit();
39465
39474
  if (callAutionData.Ver==1.0)
39466
39475
  {
39467
- for(var i in callAutionData.Data)
39476
+ for(var i=0;i<callAutionData.Data.length;++i)
39468
39477
  {
39469
39478
  var item=callAutionData.Data[i];
39470
- if (!item || !IFrameSplitOperator.IsNumber(item.Vol[0])) continue;
39479
+ if (!item || !IFrameSplitOperator.IsNonEmptyArray(item.Vol) || !IFrameSplitOperator.IsNumber(item.Vol[0])) continue;
39471
39480
 
39472
39481
  if (isBeforeOpen)
39473
39482
  {
@@ -39501,11 +39510,11 @@ function ChartMinuteVolumBar()
39501
39510
  {
39502
39511
  var range={ Max: callAutionData.VolMax, Min:callAutionData.VolMin }
39503
39512
 
39504
- for(var i in callAutionData.Data)
39513
+ for(var i=0; i<callAutionData.Data.length; ++i)
39505
39514
  {
39506
39515
  var item=callAutionData.Data[i];
39507
39516
  if (!item) continue;
39508
- if (IFrameSplitOperator.IsPlusNumber(item.Vol[0]))
39517
+ if (item.Vol && IFrameSplitOperator.IsPlusNumber(item.Vol[0]))
39509
39518
  {
39510
39519
  if (isBeforeOpen)
39511
39520
  {
@@ -39535,7 +39544,7 @@ function ChartMinuteVolumBar()
39535
39544
  this.Canvas.stroke();
39536
39545
  }
39537
39546
 
39538
- if (IFrameSplitOperator.IsPlusNumber(item.Vol[1]))
39547
+ if (item.Vol && IFrameSplitOperator.IsPlusNumber(item.Vol[1]))
39539
39548
  {
39540
39549
  if (isBeforeOpen)
39541
39550
  {
@@ -44515,16 +44524,23 @@ function ChartMinutePriceLine()
44515
44524
  var item=callAutionData.Data[i];
44516
44525
  if (!item || !IFrameSplitOperator.IsNumber(item.Price))
44517
44526
  {
44518
- if (i==0 && isBeforeOpen && IFrameSplitOperator.IsNumber(this.YClose))
44527
+ if (i==0 && isBeforeOpen)
44519
44528
  {
44520
- var x=this.ChartFrame.GetLeftExtendXFromIndex(i,callAutionData);
44521
- var y=this.ChartFrame.GetLeftExtendYFromData(this.YClose);
44529
+ //盘前集合竞价起始点为昨收或昨结算
44530
+ var price=callAutionData.YClose;
44531
+ if (IFrameSplitOperator.IsNumber(callAutionData.YClearing)) price=callAutionData.YClearing;
44522
44532
 
44523
- this.Canvas.strokeStyle=this.BeforeLineColor;
44524
- this.Canvas.beginPath();
44525
- if (isHScreen) this.Canvas.moveTo(y,x);
44526
- else this.Canvas.moveTo(x,y);
44527
- bFirstPoint=false;
44533
+ if (IFrameSplitOperator.IsNumber(price))
44534
+ {
44535
+ var x=this.ChartFrame.GetLeftExtendXFromIndex(i,callAutionData);
44536
+ var y=this.ChartFrame.GetLeftExtendYFromData(price);
44537
+
44538
+ this.Canvas.strokeStyle=this.BeforeLineColor;
44539
+ this.Canvas.beginPath();
44540
+ if (isHScreen) this.Canvas.moveTo(y,x);
44541
+ else this.Canvas.moveTo(x,y);
44542
+ bFirstPoint=false;
44543
+ }
44528
44544
  }
44529
44545
 
44530
44546
  continue;
@@ -94797,7 +94813,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
94797
94813
 
94798
94814
  var bShow=(this.IsShowAfterData && this.IsShowBeforeData);
94799
94815
  var subItem={ Name:"盘后盘前(单日)",Data:{ ID: JSCHART_MENU_ID.CMD_SHOW_CALLCATION_ID, Args:[{ Left:!bShow, Right:!bShow } ] }, Checked:bShow };
94800
- item.SubMenu.push(subItem);
94816
+ item.SubMenu.push(subItem);
94801
94817
 
94802
94818
  var subItem={ Name:"盘前(单日)",Data:{ ID: JSCHART_MENU_ID.CMD_SHOW_CALLCATION_ID, Args:[{ Left:!this.IsShowBeforeData} ] }, Checked:this.IsShowBeforeData };
94803
94819
  item.SubMenu.push(subItem);
@@ -94805,6 +94821,16 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
94805
94821
  var subItem={ Name:"盘后(单日)",Data:{ ID: JSCHART_MENU_ID.CMD_SHOW_CALLCATION_ID, Args:[{ Right:!this.IsShowAfterData} ] }, Checked:this.IsShowAfterData };
94806
94822
  item.SubMenu.push(subItem);
94807
94823
 
94824
+ var bShow=(this.IsShowMultiDayBeforeData && this.IsShowMultiDayAfterData);
94825
+ var subItem={ Name:"盘后盘前(多日)",Data:{ ID: JSCHART_MENU_ID.CMD_SHOW_CALLCATION_ID, Args:[{ MultiDay:{ Left:!bShow, Right:!bShow} } ] }, Checked:bShow };
94826
+ item.SubMenu.push(subItem);
94827
+
94828
+ var subItem={ Name:"盘前(多日)",Data:{ ID: JSCHART_MENU_ID.CMD_SHOW_CALLCATION_ID, Args:[{ MultiDay:{ Left:!this.IsShowMultiDayBeforeData } } ] }, Checked:this.IsShowMultiDayBeforeData };
94829
+ item.SubMenu.push(subItem);
94830
+
94831
+ var subItem={ Name:"盘后(多日)",Data:{ ID: JSCHART_MENU_ID.CMD_SHOW_CALLCATION_ID, Args:[{ MultiDay:{ Right:!this.IsShowMultiDayAfterData } } ] }, Checked:this.IsShowMultiDayAfterData };
94832
+ item.SubMenu.push(subItem);
94833
+
94808
94834
  aryMenu.splice(4,0,item);
94809
94835
  }
94810
94836
 
@@ -96693,6 +96719,8 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
96693
96719
  //更新最新的几条数据
96694
96720
  this.UpdateLatestMinuteDataV2=function(minuteData)
96695
96721
  {
96722
+ if (!minuteData || !IFrameSplitOperator.IsNonEmptyArray(minuteData.Data)) return;
96723
+
96696
96724
  if (this.DayCount>1)
96697
96725
  {
96698
96726
  if (!this.DayData) return;
@@ -96701,7 +96729,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
96701
96729
  for(var i=0; i<this.DayData.length; ++i)
96702
96730
  {
96703
96731
  var item=this.DayData[i];
96704
- if (item.Date===date)
96732
+ if (item.Date===minuteData.Date)
96705
96733
  {
96706
96734
  findItem=item;
96707
96735
  break;
@@ -96812,6 +96840,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
96812
96840
 
96813
96841
  var callCation={ Before:this.IsShowBeforeData, After:this.IsShowAfterData } //集合竞价
96814
96842
  if (this.DayCount>1) callCation={ Before:this.IsShowMultiDayBeforeData, After:this.IsShowMultiDayAfterData } //多日集合竞价
96843
+ callCation.Latest={ Before:this.GetLatestBeforeOpenItem(), After:this.GetLatestAfterCloseItem() }; //最新一条的盘前盘后数据
96815
96844
 
96816
96845
  var obj=
96817
96846
  {
@@ -96887,24 +96916,50 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
96887
96916
  this.ColorLineData=aryColorLineData;
96888
96917
  }
96889
96918
 
96890
- this.UpdateCallCationData=function(beforeOpenData,afterCloseData)
96919
+ this.UpdateCallCationData=function(beforeOpenData,afterCloseData,option)
96891
96920
  {
96892
- if (beforeOpenData && IFrameSplitOperator.IsNonEmptyArray(this.MultiDayBeforeOpenData))
96921
+ var dataType=0;
96922
+ if (option && IFrameSplitOperator.IsNumber(option.DataType)) dataType=option.DataType;
96923
+
96924
+ if (dataType==1)
96893
96925
  {
96894
- var lastItem=this.MultiDayBeforeOpenData[this.MultiDayBeforeOpenData.length-1];
96895
- if (lastItem.Date==beforeOpenData.Date) //存在更新
96896
- this.MultiDayBeforeOpenData[this.MultiDayBeforeOpenData.length-1]=beforeOpenData;
96897
- else if (lastItem.Date<beforeOpenData.Date) //新的一天插入
96898
- this.MultiDayBeforeOpenData.push(beforeOpenData);
96899
- }
96926
+ if (beforeOpenData && IFrameSplitOperator.IsNonEmptyArray(this.MultiDayBeforeOpenData))
96927
+ {
96928
+ var lastItem=this.MultiDayBeforeOpenData[this.MultiDayBeforeOpenData.length-1];
96929
+ if (lastItem.Date==beforeOpenData.Date) //增量更新
96930
+ {
96931
+ this.UpdateLatestCallCationData(lastItem, beforeOpenData);
96932
+ }
96933
+ }
96900
96934
 
96901
- if (afterCloseData && IFrameSplitOperator.IsNonEmptyArray(this.MultiDayAfterCloseData))
96935
+ if (afterCloseData && IFrameSplitOperator.IsNonEmptyArray(this.MultiDayAfterCloseData))
96936
+ {
96937
+ var lastItem=this.MultiDayAfterCloseData[this.MultiDayAfterCloseData.length-1];
96938
+ if (lastItem.Date==afterCloseData.Date) //增量更新
96939
+ {
96940
+ this.UpdateLatestCallCationData(lastItem, afterCloseData);
96941
+ }
96942
+ }
96943
+ }
96944
+ else
96902
96945
  {
96903
- var lastItem=this.MultiDayAfterCloseData[this.MultiDayAfterCloseData.length-1];
96904
- if (lastItem.Date==afterCloseData.Date)
96905
- this.MultiDayAfterCloseData[this.MultiDayAfterCloseData.length-1]=afterCloseData;
96906
- else if (lastItem.Date<afterCloseData.Date)
96907
- this.MultiDayAfterCloseData.push(afterCloseData);
96946
+ if (beforeOpenData && IFrameSplitOperator.IsNonEmptyArray(this.MultiDayBeforeOpenData))
96947
+ {
96948
+ var lastItem=this.MultiDayBeforeOpenData[this.MultiDayBeforeOpenData.length-1];
96949
+ if (lastItem.Date==beforeOpenData.Date) //存在更新
96950
+ this.MultiDayBeforeOpenData[this.MultiDayBeforeOpenData.length-1]=beforeOpenData;
96951
+ else if (lastItem.Date<beforeOpenData.Date) //新的一天插入
96952
+ this.MultiDayBeforeOpenData.push(beforeOpenData);
96953
+ }
96954
+
96955
+ if (afterCloseData && IFrameSplitOperator.IsNonEmptyArray(this.MultiDayAfterCloseData))
96956
+ {
96957
+ var lastItem=this.MultiDayAfterCloseData[this.MultiDayAfterCloseData.length-1];
96958
+ if (lastItem.Date==afterCloseData.Date)
96959
+ this.MultiDayAfterCloseData[this.MultiDayAfterCloseData.length-1]=afterCloseData;
96960
+ else if (lastItem.Date<afterCloseData.Date)
96961
+ this.MultiDayAfterCloseData.push(afterCloseData);
96962
+ }
96908
96963
  }
96909
96964
 
96910
96965
  this.CaclutateCallCationYRange();
@@ -96920,9 +96975,16 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
96920
96975
  var afterCloseData=MinuteChartContainer.JsonDataToAfterCloseData(data);
96921
96976
  var updateTime=MinuteChartContainer.JsonDataToMinuteLastUpdateTime(data); //数据最后的更新时间
96922
96977
 
96978
+ if (data.LatestPointFlash) //最新数据闪烁
96979
+ {
96980
+ var item=data.LatestPointFlash;
96981
+ if (IFrameSplitOperator.IsNumber(item.FlashCount))
96982
+ this.SetLatestPointFlash(item.FlashCount)
96983
+ }
96984
+
96923
96985
  if (this.DayCount>1) //多日走势图
96924
96986
  {
96925
- this.UpdateCallCationData(beforeOpenData,afterCloseData);
96987
+ this.UpdateCallCationData(beforeOpenData,afterCloseData, { DataType:1});
96926
96988
  this.UpdateLineColorData(aryColorData,minuteData.date);
96927
96989
  this.UpdateLatestMinuteDataV2(minuteData);
96928
96990
  this.UpdateHistoryMinuteUI(updateTime);
@@ -96934,10 +96996,13 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
96934
96996
  return;
96935
96997
  }
96936
96998
 
96937
- if (this.IsBeforeData && beforeOpenData) this.BeforeOpenData=beforeOpenData;
96938
- if (this.IsAfterData && afterCloseData) this.AfterCloseData=afterCloseData;
96999
+ //if (this.IsBeforeData && beforeOpenData) this.BeforeOpenData=beforeOpenData;
97000
+ //if (this.IsAfterData && afterCloseData) this.AfterCloseData=afterCloseData;
97001
+
97002
+ //盘前盘后数据更新
97003
+ if (this.IsBeforeData && beforeOpenData) this.UpdateLatestCallCationData(this.BeforeOpenData, beforeOpenData);
97004
+ if (this.IsAfterData && afterCloseData) this.UpdateLatestCallCationData(this.AfterCloseData, afterCloseData);
96939
97005
 
96940
- //原始数据
96941
97006
  this.UpdateLatestMinuteDataV2(minuteData);
96942
97007
  this.UpdateMinuteUI(data.stock[0], {FunctionName:"RecvUpdateMinuteData"});
96943
97008
 
@@ -96952,6 +97017,45 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
96952
97017
  }
96953
97018
  }
96954
97019
 
97020
+ this.UpdateLatestCallCationData=function(destData, updateData)
97021
+ {
97022
+ if (!destData) return;
97023
+ if (!updateData || !IFrameSplitOperator.IsNonEmptyArray(updateData.Data)) return;
97024
+
97025
+ if (destData.Data.length==0)
97026
+ {
97027
+ destData.Data=updateData.Data;
97028
+ destData.VolMax=updateData.VolMax;
97029
+ destData.VolMin=updateData.VolMin;
97030
+ return;
97031
+ }
97032
+
97033
+ //覆盖历史数据
97034
+ var mapData=new Map(updateData.Data.map((obj) => [obj.Time, obj]));
97035
+ var lastTime=null; //最后的时间
97036
+ for(var i=0;i<destData.Data.length;++i)
97037
+ {
97038
+ var item=destData.Data[i];
97039
+ lastTime=item.Time;
97040
+ if (!mapData.has(item.Time)) continue;
97041
+ var newItem=mapData.get(item.Time);
97042
+ if (!newItem || !IFrameSplitOperator.IsNumber(newItem.Price)) continue; //只覆盖有效数据
97043
+
97044
+ destData.Data[i]=newItem;
97045
+ }
97046
+
97047
+ //新数据往后插
97048
+ for(var i=0;i<updateData.Data.length;++i)
97049
+ {
97050
+ var item=updateData.Data[i];
97051
+ if (item.Time<=lastTime) continue;
97052
+ destData.Data.push(item);
97053
+ }
97054
+
97055
+ if (destData.VolMax<updateData.VolMax) destData.VolMax=updateData.VolMax;
97056
+ if (IFrameSplitOperator.IsNumber(updateData.TotalCount) && updateData.TotalCount>destData.TotalCount) updateData.TotalCount=destData.TotalCount;
97057
+ }
97058
+
96955
97059
  this.RecvBuySellData=function(data)
96956
97060
  {
96957
97061
  if (!data) return;
@@ -97018,7 +97122,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
97018
97122
 
97019
97123
  if (this.DayCount>1) //多日走势图
97020
97124
  {
97021
- this.UpdateCallCationData(beforeOpenData,afterCloseData);
97125
+ this.UpdateCallCationData(beforeOpenData,afterCloseData, { DataType:0});
97022
97126
  this.UpdateLineColorData(aryColorData,data.stock[0].date);
97023
97127
  this.UpdateLatestMinuteData(aryMinuteData, data.stock[0].date, data.stock[0]);
97024
97128
  this.UpdateTradeStatusData(data.TradeStatus);
@@ -98804,6 +98908,54 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
98804
98908
  return data;
98805
98909
  }
98806
98910
 
98911
+ //获取最新的一条盘前数据
98912
+ this.GetLatestBeforeOpenItem=function()
98913
+ {
98914
+ var lastItem=null;
98915
+ if (this.DayCount>1)
98916
+ {
98917
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.MultiDayBeforeOpenData)) return null;
98918
+ var dayItem=this.MultiDayBeforeOpenData[this.MultiDayBeforeOpenData.length-1];
98919
+ if (!dayItem || !IFrameSplitOperator.IsNonEmptyArray(dayItem.Data)) return null;
98920
+
98921
+ var finder = dayItem.Data.findLast((element) => { return element && IFrameSplitOperator.IsNumber(element.Price); });
98922
+ if (finder) lastItem=finder;
98923
+ }
98924
+ else
98925
+ {
98926
+ if (!this.BeforeOpenData || !IFrameSplitOperator.IsNonEmptyArray(this.BeforeOpenData.Data)) return null;
98927
+
98928
+ var finder = this.BeforeOpenData.Data.findLast((element) => { return element && IFrameSplitOperator.IsNumber(element.Price); });
98929
+ if (finder) lastItem=finder;
98930
+ }
98931
+
98932
+ return lastItem;
98933
+ }
98934
+
98935
+ //获取最新的一条盘后数据
98936
+ this.GetLatestAfterCloseItem=function()
98937
+ {
98938
+ if (this.DayCount>1)
98939
+ {
98940
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.MultiDayAfterCloseData)) return null;
98941
+ var dayItem=this.MultiDayAfterCloseData[this.MultiDayAfterCloseData.length-1];
98942
+ if (!dayItem || !IFrameSplitOperator.IsNonEmptyArray(dayItem.Data)) return null;
98943
+
98944
+ var finder = dayItem.Data.findLast((element) => { return element && IFrameSplitOperator.IsNumber(element.Price); });
98945
+ if (finder) lastItem=finder;
98946
+ }
98947
+ else
98948
+ {
98949
+ if (!this.AfterCloseData || !IFrameSplitOperator.IsNonEmptyArray(this.AfterCloseData.Data)) return null;
98950
+
98951
+ var finder = this.AfterCloseData.Data.findLast((element) => { return element && IFrameSplitOperator.IsNumber(element.Price); });
98952
+ if (finder) lastItem=finder;
98953
+ }
98954
+
98955
+ return lastItem;
98956
+ }
98957
+
98958
+
98807
98959
  this.IsCallAuctionFrame=function(frameID)
98808
98960
  {
98809
98961
  if (!IFrameSplitOperator.IsNonEmptyArray(this.ChartPaintEx)) return false;
@@ -98835,7 +98987,7 @@ MinuteChartContainer.JsonDataToBeforeOpenData=function(data)
98835
98987
  var preClose=data.stock[0].yclose; //前一个数据价格
98836
98988
  var stockData=data.stock[0];
98837
98989
  var date=stockData.date; //日期
98838
- var beforeOpenData={ Data:[], TotalCount:15, Ver:1.0, Date:date };
98990
+ var beforeOpenData={ Data:[], TotalCount:15, Ver:1.0, Date:date, YClose:stockData.yclose, YClearing:stockData.yclearing };
98839
98991
  var extendDataIndex=JSCHART_DATA_FIELD_ID.MINUTE_BEFOREOPEN_EXTENDDATA; //扩展数据序号
98840
98992
  if (stockData.beforeinfo)
98841
98993
  {
@@ -98871,7 +99023,7 @@ MinuteChartContainer.JsonDataToBeforeOpenData=function(data)
98871
99023
  else if (beforeOpenData.Ver==2.0)
98872
99024
  {
98873
99025
  var max=0;
98874
- for(var i in stockData.before)
99026
+ for(var i=0;i<stockData.before.length;++i)
98875
99027
  {
98876
99028
  var item=new BeforeOpenData();
98877
99029
  var jsData=stockData.before[i];
@@ -98883,7 +99035,6 @@ MinuteChartContainer.JsonDataToBeforeOpenData=function(data)
98883
99035
  item.Vol[1]=jsData[3]; //未匹配量
98884
99036
  item.ColorID=jsData[4]; //柱子颜色ID
98885
99037
  if (IFrameSplitOperator.IsNumber(jsData[6])) item.Date=jsData[6] //日期
98886
- item.DateTime=`${item.Date} ${item.Time})`;
98887
99038
 
98888
99039
  var totalVol=item.Vol[0]+item.Vol[1];
98889
99040
  if (IFrameSplitOperator.IsNumber(jsData[5])) totalVol=jsData[5];
@@ -98895,12 +99046,14 @@ MinuteChartContainer.JsonDataToBeforeOpenData=function(data)
98895
99046
 
98896
99047
  beforeOpenData.VolMax=max/unit;
98897
99048
  beforeOpenData.VolMin=0;
99049
+
99050
+ if (stockData.beforeinfo && stockData.beforeinfo.TimeConfig) //固定时间
99051
+ MinuteChartContainer.CompleteCallAuctionData(stockData.beforeinfo.TimeConfig, beforeOpenData);
98898
99052
  }
98899
99053
  else if (beforeOpenData.Ver==3.0)
98900
99054
  {
98901
99055
  var max=0;
98902
-
98903
- for(var i in stockData.before)
99056
+ for(var i=0; i<stockData.before.length; ++i)
98904
99057
  {
98905
99058
  var item=new BeforeOpenData();
98906
99059
  var jsData=stockData.before[i];
@@ -98911,7 +99064,6 @@ MinuteChartContainer.JsonDataToBeforeOpenData=function(data)
98911
99064
  item.AvPrice=jsData[2]; //均价
98912
99065
  item.Vol[0]=jsData[3]; //匹配量
98913
99066
  item.ColorID=jsData[4]; //柱子颜色ID
98914
- item.DateTime=date.toString()+" "+item.Time.toString();
98915
99067
 
98916
99068
  var totalVol=item.Vol[0];
98917
99069
  if (IFrameSplitOperator.IsNumber(jsData[5])) totalVol=jsData[5];
@@ -98923,11 +99075,72 @@ MinuteChartContainer.JsonDataToBeforeOpenData=function(data)
98923
99075
 
98924
99076
  beforeOpenData.VolMax=max/unit;
98925
99077
  beforeOpenData.VolMin=0;
99078
+
99079
+ if (stockData.beforeinfo && stockData.beforeinfo.TimeConfig) //固定时间
99080
+ MinuteChartContainer.CompleteCallAuctionData(stockData.beforeinfo.TimeConfig, beforeOpenData);
98926
99081
  }
98927
99082
 
98928
99083
  return beforeOpenData;
98929
99084
  }
98930
99085
 
99086
+
99087
+ MinuteChartContainer.CompleteCallAuctionData=function(timeConfig, callAuctionData)
99088
+ {
99089
+ var aryData=MinuteChartContainer.CreateCallAuctionTimeData(timeConfig);
99090
+ if (!IFrameSplitOperator.IsNonEmptyArray(aryData)) return false;
99091
+
99092
+ var mapData=new Map(callAuctionData.Data.map((obj) => [obj.Time, obj]));
99093
+ for(var i=0;i<aryData.length;++i)
99094
+ {
99095
+ var time=aryData[i].Time;
99096
+ if (!mapData.has(time)) continue;
99097
+
99098
+ var item=mapData.get(time);
99099
+ aryData[i]=item;
99100
+ }
99101
+
99102
+ callAuctionData.Data=aryData;
99103
+ callAuctionData.TotalCount=aryData.length;
99104
+
99105
+ return true;
99106
+ }
99107
+
99108
+ //创建集合竞价秒级时间 { AryTime:[ { Start:92500, End:92459, Date:20250101 } ] } hhmmss
99109
+ MinuteChartContainer.CreateCallAuctionTimeData=function(config)
99110
+ {
99111
+ if (!config || !IFrameSplitOperator.IsNonEmptyArray(config.AryTime)) return null;
99112
+
99113
+ var step=1; //1s
99114
+ if (IFrameSplitOperator.IsPlusNumber(config.Step)) step=config.Step;
99115
+ var aryData=[];
99116
+ for(var i=0;i<config.AryTime.length;++i)
99117
+ {
99118
+ var item=config.AryTime[i];
99119
+
99120
+ var value=item.Start;
99121
+ var hour=parseInt(value/10000);
99122
+ var minute=parseInt((value%10000)/100);
99123
+ var second=value%100;
99124
+ var startTime=new Date(2021,5,2, hour,minute, second);
99125
+
99126
+ value=item.End;
99127
+ var hour=parseInt(value/10000);
99128
+ var minute=parseInt((value%10000)/100);
99129
+ var second=value%100;
99130
+ var endTime=new Date(2021,5,2, hour,minute, second);
99131
+
99132
+ for(var j=0; j<5000 && startTime<=endTime; ++j)
99133
+ {
99134
+ var time=startTime.getHours()*10000+startTime.getMinutes()*100+startTime.getSeconds();
99135
+ var secItem={ Time:time, Date:item.Date };
99136
+ aryData.push(secItem);
99137
+ startTime.setSeconds(startTime.getSeconds()+step);
99138
+ }
99139
+ }
99140
+
99141
+ return aryData;
99142
+ }
99143
+
98931
99144
  //收盘集合竞价
98932
99145
  MinuteChartContainer.JsonDataToAfterCloseData=function(data)
98933
99146
  {
@@ -98938,7 +99151,7 @@ MinuteChartContainer.JsonDataToAfterCloseData=function(data)
98938
99151
  if (!stockData.afterinfo) return null;
98939
99152
  var symbol=data.stock[0].symbol;
98940
99153
  var upperSymbol=symbol.toUpperCase();
98941
- var afterCloseData={ Data:[], TotalCount:3*60, Ver:2.0, Date:date };
99154
+ var afterCloseData={ Data:[], TotalCount:3*60, Ver:2.0, Date:date, YClose:stockData.yclose, YClearing:stockData.yclearing };
98942
99155
  var item=stockData.afterinfo;
98943
99156
  if (IFrameSplitOperator.IsNumber(item.totalcount)) afterCloseData.TotalCount=item.totalcount;
98944
99157
  if (IFrameSplitOperator.IsNumber(item.ver)) afterCloseData.Ver=item.ver;
@@ -98968,7 +99181,7 @@ MinuteChartContainer.JsonDataToAfterCloseData=function(data)
98968
99181
  else if (afterCloseData.Ver==2.0)
98969
99182
  {
98970
99183
  var max=0;
98971
- for(var i in stockData.after)
99184
+ for(var i=0; i<stockData.after.length; ++i)
98972
99185
  {
98973
99186
  var item=new AfterCloseData();
98974
99187
  var jsData=stockData.after[i];
@@ -98991,6 +99204,9 @@ MinuteChartContainer.JsonDataToAfterCloseData=function(data)
98991
99204
 
98992
99205
  afterCloseData.VolMax=max/unit;
98993
99206
  afterCloseData.VolMin=0;
99207
+
99208
+ if (stockData.afterinfo && stockData.afterinfo.TimeConfig) //固定时间
99209
+ MinuteChartContainer.CompleteCallAuctionData(stockData.afterinfo.TimeConfig, afterCloseData);
98994
99210
  }
98995
99211
  else if (afterCloseData.Ver==3.0)
98996
99212
  {
@@ -99018,6 +99234,9 @@ MinuteChartContainer.JsonDataToAfterCloseData=function(data)
99018
99234
 
99019
99235
  afterCloseData.VolMax=max/unit;
99020
99236
  afterCloseData.VolMin=0;
99237
+
99238
+ if (stockData.afterinfo && stockData.afterinfo.TimeConfig) //固定时间
99239
+ MinuteChartContainer.CompleteCallAuctionData(stockData.afterinfo.TimeConfig, afterCloseData);
99021
99240
  }
99022
99241
 
99023
99242
  return afterCloseData;
@@ -99139,12 +99358,13 @@ MinuteChartContainer.JsonDataToUpdateMinuteData=function(data)
99139
99358
 
99140
99359
  item.DateTime=`${item.Date} ${item.Time}`;
99141
99360
 
99142
- if (IFrameSplitOperator.IsNumber(minuteData.YClose) && item.Close)
99143
- item.Increase=(item.Close-minuteData.YClose)/minuteData.YClose*100; //涨幅 (最新价格-昨收)/昨收*100;
99144
-
99145
- if (isFutures && minuteData.YClearing && item.Close)
99146
- item.Increase=(item.Close-minuteData.YClearing)/minuteData.YClearing*100; //涨幅 (最新价格-昨结算价)/昨结算价*100;
99147
-
99361
+ if (!IFrameSplitOperator.IsNumber(item.Increase) && IFrameSplitOperator.IsNumber(minuteData.YClose) && item.Close)
99362
+ {
99363
+ if (isFutures && minuteData.YClearing && item.Close)
99364
+ item.Increase=(item.Close-minuteData.YClearing)/minuteData.YClearing*100; //涨幅 (最新价格-昨结算价)/昨结算价*100;
99365
+ else
99366
+ item.Increase=(item.Close-minuteData.YClose)/minuteData.YClose*100; //涨幅 (最新价格-昨收)/昨收*100;
99367
+ }
99148
99368
 
99149
99369
  minuteData.Data.push(item);
99150
99370
  }
@@ -99308,8 +99528,9 @@ MinuteChartContainer.JsonDataToHistoryMinuteLineColorData=function(data)
99308
99528
  }
99309
99529
 
99310
99530
 
99311
- MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, isBeforeOpen, symbol)
99531
+ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, isBeforeOpen, symbol, dataInfo)
99312
99532
  {
99533
+ if (!IFrameSplitOperator.IsNonEmptyArray(data)) return;
99313
99534
  var upperSymbol=symbol?symbol.toUpperCase():null;
99314
99535
  var unit=MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol);
99315
99536
 
@@ -99320,7 +99541,7 @@ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, i
99320
99541
  if (callAuctionData.Ver==1.0)
99321
99542
  {
99322
99543
  var preClose=null;
99323
- for(var i in data)
99544
+ for(var i=0; i<data.length; ++i)
99324
99545
  {
99325
99546
  var item=isBeforeOpen? new BeforeOpenData() : new AfterCloseData();
99326
99547
  var jsData=data[i];
@@ -99344,7 +99565,7 @@ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, i
99344
99565
  else if (callAuctionData.Ver==2.0)
99345
99566
  {
99346
99567
  var max=0;
99347
- for(var i in data)
99568
+ for(var i=0; i<data.length; ++i)
99348
99569
  {
99349
99570
  var item=isBeforeOpen? new BeforeOpenData() : new AfterCloseData();
99350
99571
  var jsData=data[i];
@@ -99356,7 +99577,6 @@ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, i
99356
99577
  item.Vol[0]=jsData[2]; //匹配量
99357
99578
  item.Vol[1]=jsData[3]; //未匹配量
99358
99579
  item.ColorID=jsData[4]; //柱子颜色ID
99359
- item.DateTime=date.toString()+" "+item.Time.toString();
99360
99580
 
99361
99581
  var totalVol=item.Vol[0]+item.Vol[1];
99362
99582
  if (IFrameSplitOperator.IsNumber(jsData[5])) totalVol=jsData[5];
@@ -99368,6 +99588,9 @@ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, i
99368
99588
 
99369
99589
  callAuctionData.VolMax=max/unit;
99370
99590
  callAuctionData.VolMin=0;
99591
+
99592
+ if (dataInfo && dataInfo.TimeConfig) //固定时间
99593
+ MinuteChartContainer.CompleteCallAuctionData(dataInfo.TimeConfig, callAuctionData);
99371
99594
  }
99372
99595
  else if (beforeOpenData.Ver==3.0)
99373
99596
  {
@@ -99384,7 +99607,6 @@ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, i
99384
99607
  item.AvPrice=jsData[2]; //均价
99385
99608
  item.Vol[0]=jsData[3]; //匹配量
99386
99609
  item.ColorID=jsData[4]; //柱子颜色ID
99387
- item.DateTime=date.toString()+" "+item.Time.toString();
99388
99610
 
99389
99611
  var totalVol=item.Vol[0];
99390
99612
  if (IFrameSplitOperator.IsNumber(jsData[5])) totalVol=jsData[5];
@@ -99396,6 +99618,9 @@ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, i
99396
99618
 
99397
99619
  callAuctionData.VolMax=max/unit;
99398
99620
  callAuctionData.VolMin=0;
99621
+
99622
+ if (dataInfo && dataInfo.TimeConfig) //固定时间
99623
+ MinuteChartContainer.CompleteCallAuctionData(dataInfo.TimeConfig, callAuctionData);
99399
99624
  }
99400
99625
  }
99401
99626
 
@@ -99404,7 +99629,7 @@ MinuteChartContainer.JosnDataToBeforeOpenDataArray=function(data)
99404
99629
  if (!data || !data.data) return null;
99405
99630
 
99406
99631
  var aryDay=[];
99407
- for(var i in data.data)
99632
+ for(var i=0; i<data.data.length; ++i)
99408
99633
  {
99409
99634
  var dayItem=data.data[i];
99410
99635
  var beforeOpenData={ Data:[], TotalCount:15, Ver:1.0, Date:dayItem.date, YClose:dayItem.yclose, YClearing:dayItem.YClearing };
@@ -99414,7 +99639,7 @@ MinuteChartContainer.JosnDataToBeforeOpenDataArray=function(data)
99414
99639
  if (IFrameSplitOperator.IsNumber(dayItem.beforeinfo.ver)) beforeOpenData.Ver=dayItem.beforeinfo.ver;
99415
99640
  }
99416
99641
 
99417
- MinuteChartContainer.JsonDataToCallAuctionItem(dayItem.before, beforeOpenData, true, data.symbol);
99642
+ MinuteChartContainer.JsonDataToCallAuctionItem(dayItem.before, beforeOpenData, true, data.symbol, dayItem.beforeinfo);
99418
99643
 
99419
99644
  aryDay.push(beforeOpenData);
99420
99645
  }
@@ -99429,7 +99654,7 @@ MinuteChartContainer.JosnDataToAfterCloseDataArray=function(data)
99429
99654
  if (!data || !data.data) return null;
99430
99655
 
99431
99656
  var aryDay=[];
99432
- for(var i in data.data)
99657
+ for(var i=0; i<data.data.length; ++i)
99433
99658
  {
99434
99659
  var dayItem=data.data[i];
99435
99660
  var afterCloseData={ Data:[], TotalCount:15, Ver:1.0, Date:dayItem.date, YClose:dayItem.yclose, YClearing:dayItem.YClearing };
@@ -99440,7 +99665,7 @@ MinuteChartContainer.JosnDataToAfterCloseDataArray=function(data)
99440
99665
  if (IFrameSplitOperator.IsNumber(dayItem.afterinfo.ver)) afterCloseData.Ver=dayItem.afterinfo.ver;
99441
99666
  }
99442
99667
 
99443
- MinuteChartContainer.JsonDataToCallAuctionItem(dayItem.after, afterCloseData, false, data.symbol);
99668
+ MinuteChartContainer.JsonDataToCallAuctionItem(dayItem.after, afterCloseData, false, data.symbol, dayItem.afterinfo);
99444
99669
 
99445
99670
  aryDay.push(afterCloseData);
99446
99671
  }
@@ -162614,7 +162839,7 @@ function HQChartScriptWorker()
162614
162839
 
162615
162840
 
162616
162841
 
162617
- var HQCHART_VERSION="1.1.14946";
162842
+ var HQCHART_VERSION="1.1.14955";
162618
162843
 
162619
162844
  function PrintHQChartVersion()
162620
162845
  {