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.
@@ -11198,7 +11198,16 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11198
11198
  var left=null,right=null;
11199
11199
  if (IFrameSplitOperator.IsBool(srcParam.Left)) left=srcParam.Left;
11200
11200
  if (IFrameSplitOperator.IsBool(srcParam.Right)) right=srcParam.Right;
11201
- this.ShowCallAuctionData({ Left:left, Right:right });
11201
+
11202
+ var multiDay=null;
11203
+ if (srcParam.MultiDay)
11204
+ {
11205
+ var item=srcParam.MultiDay;
11206
+ multiDay={ };
11207
+ if (IFrameSplitOperator.IsBool(item.Left)) multiDay.Left=item.Left;
11208
+ if (IFrameSplitOperator.IsBool(item.Right)) multiDay.Right=item.Right;
11209
+ }
11210
+ this.ShowCallAuctionData({ Left:left, Right:right, MultiDay:multiDay });
11202
11211
  }
11203
11212
 
11204
11213
  break;
@@ -11774,7 +11783,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11774
11783
  {
11775
11784
  //清空当前鼠标坐标
11776
11785
  this.LastPoint.X=null;
11777
- this.LastPoint.Y=null
11786
+ this.LastPoint.Y=null;
11778
11787
  this.HideTooltip();
11779
11788
  this.CloseTooltipDialog();
11780
11789
  }
@@ -11783,7 +11792,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11783
11792
  if (IFrameSplitOperator.IsNumber(data.X) && IFrameSplitOperator.IsNumber(data.Y))
11784
11793
  {
11785
11794
  //设置鼠标位置
11786
- if (this.LastPoint && !IFrameSplitOperator.IsNumber(this.LastPoint.X) && !IFrameSplitOperator.IsNumber(this.LastPoint.Y))
11795
+ if (this.LastPoint && (!IFrameSplitOperator.IsNumber(this.LastPoint.X) || !IFrameSplitOperator.IsNumber(this.LastPoint.Y)))
11787
11796
  {
11788
11797
  this.LastPoint.X=data.X;
11789
11798
  this.LastPoint.Y=data.Y;
@@ -35324,10 +35333,10 @@ function ChartMinuteVolumBar()
35324
35333
  var unit=this.GetVolUnit();
35325
35334
  if (callAutionData.Ver==1.0)
35326
35335
  {
35327
- for(var i in callAutionData.Data)
35336
+ for(var i=0;i<callAutionData.Data.length;++i)
35328
35337
  {
35329
35338
  var item=callAutionData.Data[i];
35330
- if (!item || !IFrameSplitOperator.IsNumber(item.Vol[0])) continue;
35339
+ if (!item || !IFrameSplitOperator.IsNonEmptyArray(item.Vol) || !IFrameSplitOperator.IsNumber(item.Vol[0])) continue;
35331
35340
 
35332
35341
  if (isBeforeOpen)
35333
35342
  {
@@ -35361,11 +35370,11 @@ function ChartMinuteVolumBar()
35361
35370
  {
35362
35371
  var range={ Max: callAutionData.VolMax, Min:callAutionData.VolMin }
35363
35372
 
35364
- for(var i in callAutionData.Data)
35373
+ for(var i=0; i<callAutionData.Data.length; ++i)
35365
35374
  {
35366
35375
  var item=callAutionData.Data[i];
35367
35376
  if (!item) continue;
35368
- if (IFrameSplitOperator.IsPlusNumber(item.Vol[0]))
35377
+ if (item.Vol && IFrameSplitOperator.IsPlusNumber(item.Vol[0]))
35369
35378
  {
35370
35379
  if (isBeforeOpen)
35371
35380
  {
@@ -35395,7 +35404,7 @@ function ChartMinuteVolumBar()
35395
35404
  this.Canvas.stroke();
35396
35405
  }
35397
35406
 
35398
- if (IFrameSplitOperator.IsPlusNumber(item.Vol[1]))
35407
+ if (item.Vol && IFrameSplitOperator.IsPlusNumber(item.Vol[1]))
35399
35408
  {
35400
35409
  if (isBeforeOpen)
35401
35410
  {
@@ -40375,16 +40384,23 @@ function ChartMinutePriceLine()
40375
40384
  var item=callAutionData.Data[i];
40376
40385
  if (!item || !IFrameSplitOperator.IsNumber(item.Price))
40377
40386
  {
40378
- if (i==0 && isBeforeOpen && IFrameSplitOperator.IsNumber(this.YClose))
40387
+ if (i==0 && isBeforeOpen)
40379
40388
  {
40380
- var x=this.ChartFrame.GetLeftExtendXFromIndex(i,callAutionData);
40381
- var y=this.ChartFrame.GetLeftExtendYFromData(this.YClose);
40389
+ //盘前集合竞价起始点为昨收或昨结算
40390
+ var price=callAutionData.YClose;
40391
+ if (IFrameSplitOperator.IsNumber(callAutionData.YClearing)) price=callAutionData.YClearing;
40382
40392
 
40383
- this.Canvas.strokeStyle=this.BeforeLineColor;
40384
- this.Canvas.beginPath();
40385
- if (isHScreen) this.Canvas.moveTo(y,x);
40386
- else this.Canvas.moveTo(x,y);
40387
- bFirstPoint=false;
40393
+ if (IFrameSplitOperator.IsNumber(price))
40394
+ {
40395
+ var x=this.ChartFrame.GetLeftExtendXFromIndex(i,callAutionData);
40396
+ var y=this.ChartFrame.GetLeftExtendYFromData(price);
40397
+
40398
+ this.Canvas.strokeStyle=this.BeforeLineColor;
40399
+ this.Canvas.beginPath();
40400
+ if (isHScreen) this.Canvas.moveTo(y,x);
40401
+ else this.Canvas.moveTo(x,y);
40402
+ bFirstPoint=false;
40403
+ }
40388
40404
  }
40389
40405
 
40390
40406
  continue;
@@ -90657,7 +90673,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90657
90673
 
90658
90674
  var bShow=(this.IsShowAfterData && this.IsShowBeforeData);
90659
90675
  var subItem={ Name:"盘后盘前(单日)",Data:{ ID: JSCHART_MENU_ID.CMD_SHOW_CALLCATION_ID, Args:[{ Left:!bShow, Right:!bShow } ] }, Checked:bShow };
90660
- item.SubMenu.push(subItem);
90676
+ item.SubMenu.push(subItem);
90661
90677
 
90662
90678
  var subItem={ Name:"盘前(单日)",Data:{ ID: JSCHART_MENU_ID.CMD_SHOW_CALLCATION_ID, Args:[{ Left:!this.IsShowBeforeData} ] }, Checked:this.IsShowBeforeData };
90663
90679
  item.SubMenu.push(subItem);
@@ -90665,6 +90681,16 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90665
90681
  var subItem={ Name:"盘后(单日)",Data:{ ID: JSCHART_MENU_ID.CMD_SHOW_CALLCATION_ID, Args:[{ Right:!this.IsShowAfterData} ] }, Checked:this.IsShowAfterData };
90666
90682
  item.SubMenu.push(subItem);
90667
90683
 
90684
+ var bShow=(this.IsShowMultiDayBeforeData && this.IsShowMultiDayAfterData);
90685
+ var subItem={ Name:"盘后盘前(多日)",Data:{ ID: JSCHART_MENU_ID.CMD_SHOW_CALLCATION_ID, Args:[{ MultiDay:{ Left:!bShow, Right:!bShow} } ] }, Checked:bShow };
90686
+ item.SubMenu.push(subItem);
90687
+
90688
+ var subItem={ Name:"盘前(多日)",Data:{ ID: JSCHART_MENU_ID.CMD_SHOW_CALLCATION_ID, Args:[{ MultiDay:{ Left:!this.IsShowMultiDayBeforeData } } ] }, Checked:this.IsShowMultiDayBeforeData };
90689
+ item.SubMenu.push(subItem);
90690
+
90691
+ var subItem={ Name:"盘后(多日)",Data:{ ID: JSCHART_MENU_ID.CMD_SHOW_CALLCATION_ID, Args:[{ MultiDay:{ Right:!this.IsShowMultiDayAfterData } } ] }, Checked:this.IsShowMultiDayAfterData };
90692
+ item.SubMenu.push(subItem);
90693
+
90668
90694
  aryMenu.splice(4,0,item);
90669
90695
  }
90670
90696
 
@@ -92553,6 +92579,8 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
92553
92579
  //更新最新的几条数据
92554
92580
  this.UpdateLatestMinuteDataV2=function(minuteData)
92555
92581
  {
92582
+ if (!minuteData || !IFrameSplitOperator.IsNonEmptyArray(minuteData.Data)) return;
92583
+
92556
92584
  if (this.DayCount>1)
92557
92585
  {
92558
92586
  if (!this.DayData) return;
@@ -92561,7 +92589,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
92561
92589
  for(var i=0; i<this.DayData.length; ++i)
92562
92590
  {
92563
92591
  var item=this.DayData[i];
92564
- if (item.Date===date)
92592
+ if (item.Date===minuteData.Date)
92565
92593
  {
92566
92594
  findItem=item;
92567
92595
  break;
@@ -92672,6 +92700,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
92672
92700
 
92673
92701
  var callCation={ Before:this.IsShowBeforeData, After:this.IsShowAfterData } //集合竞价
92674
92702
  if (this.DayCount>1) callCation={ Before:this.IsShowMultiDayBeforeData, After:this.IsShowMultiDayAfterData } //多日集合竞价
92703
+ callCation.Latest={ Before:this.GetLatestBeforeOpenItem(), After:this.GetLatestAfterCloseItem() }; //最新一条的盘前盘后数据
92675
92704
 
92676
92705
  var obj=
92677
92706
  {
@@ -92747,24 +92776,50 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
92747
92776
  this.ColorLineData=aryColorLineData;
92748
92777
  }
92749
92778
 
92750
- this.UpdateCallCationData=function(beforeOpenData,afterCloseData)
92779
+ this.UpdateCallCationData=function(beforeOpenData,afterCloseData,option)
92751
92780
  {
92752
- if (beforeOpenData && IFrameSplitOperator.IsNonEmptyArray(this.MultiDayBeforeOpenData))
92781
+ var dataType=0;
92782
+ if (option && IFrameSplitOperator.IsNumber(option.DataType)) dataType=option.DataType;
92783
+
92784
+ if (dataType==1)
92753
92785
  {
92754
- var lastItem=this.MultiDayBeforeOpenData[this.MultiDayBeforeOpenData.length-1];
92755
- if (lastItem.Date==beforeOpenData.Date) //存在更新
92756
- this.MultiDayBeforeOpenData[this.MultiDayBeforeOpenData.length-1]=beforeOpenData;
92757
- else if (lastItem.Date<beforeOpenData.Date) //新的一天插入
92758
- this.MultiDayBeforeOpenData.push(beforeOpenData);
92759
- }
92786
+ if (beforeOpenData && IFrameSplitOperator.IsNonEmptyArray(this.MultiDayBeforeOpenData))
92787
+ {
92788
+ var lastItem=this.MultiDayBeforeOpenData[this.MultiDayBeforeOpenData.length-1];
92789
+ if (lastItem.Date==beforeOpenData.Date) //增量更新
92790
+ {
92791
+ this.UpdateLatestCallCationData(lastItem, beforeOpenData);
92792
+ }
92793
+ }
92760
92794
 
92761
- if (afterCloseData && IFrameSplitOperator.IsNonEmptyArray(this.MultiDayAfterCloseData))
92795
+ if (afterCloseData && IFrameSplitOperator.IsNonEmptyArray(this.MultiDayAfterCloseData))
92796
+ {
92797
+ var lastItem=this.MultiDayAfterCloseData[this.MultiDayAfterCloseData.length-1];
92798
+ if (lastItem.Date==afterCloseData.Date) //增量更新
92799
+ {
92800
+ this.UpdateLatestCallCationData(lastItem, afterCloseData);
92801
+ }
92802
+ }
92803
+ }
92804
+ else
92762
92805
  {
92763
- var lastItem=this.MultiDayAfterCloseData[this.MultiDayAfterCloseData.length-1];
92764
- if (lastItem.Date==afterCloseData.Date)
92765
- this.MultiDayAfterCloseData[this.MultiDayAfterCloseData.length-1]=afterCloseData;
92766
- else if (lastItem.Date<afterCloseData.Date)
92767
- this.MultiDayAfterCloseData.push(afterCloseData);
92806
+ if (beforeOpenData && IFrameSplitOperator.IsNonEmptyArray(this.MultiDayBeforeOpenData))
92807
+ {
92808
+ var lastItem=this.MultiDayBeforeOpenData[this.MultiDayBeforeOpenData.length-1];
92809
+ if (lastItem.Date==beforeOpenData.Date) //存在更新
92810
+ this.MultiDayBeforeOpenData[this.MultiDayBeforeOpenData.length-1]=beforeOpenData;
92811
+ else if (lastItem.Date<beforeOpenData.Date) //新的一天插入
92812
+ this.MultiDayBeforeOpenData.push(beforeOpenData);
92813
+ }
92814
+
92815
+ if (afterCloseData && IFrameSplitOperator.IsNonEmptyArray(this.MultiDayAfterCloseData))
92816
+ {
92817
+ var lastItem=this.MultiDayAfterCloseData[this.MultiDayAfterCloseData.length-1];
92818
+ if (lastItem.Date==afterCloseData.Date)
92819
+ this.MultiDayAfterCloseData[this.MultiDayAfterCloseData.length-1]=afterCloseData;
92820
+ else if (lastItem.Date<afterCloseData.Date)
92821
+ this.MultiDayAfterCloseData.push(afterCloseData);
92822
+ }
92768
92823
  }
92769
92824
 
92770
92825
  this.CaclutateCallCationYRange();
@@ -92780,9 +92835,16 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
92780
92835
  var afterCloseData=MinuteChartContainer.JsonDataToAfterCloseData(data);
92781
92836
  var updateTime=MinuteChartContainer.JsonDataToMinuteLastUpdateTime(data); //数据最后的更新时间
92782
92837
 
92838
+ if (data.LatestPointFlash) //最新数据闪烁
92839
+ {
92840
+ var item=data.LatestPointFlash;
92841
+ if (IFrameSplitOperator.IsNumber(item.FlashCount))
92842
+ this.SetLatestPointFlash(item.FlashCount)
92843
+ }
92844
+
92783
92845
  if (this.DayCount>1) //多日走势图
92784
92846
  {
92785
- this.UpdateCallCationData(beforeOpenData,afterCloseData);
92847
+ this.UpdateCallCationData(beforeOpenData,afterCloseData, { DataType:1});
92786
92848
  this.UpdateLineColorData(aryColorData,minuteData.date);
92787
92849
  this.UpdateLatestMinuteDataV2(minuteData);
92788
92850
  this.UpdateHistoryMinuteUI(updateTime);
@@ -92794,10 +92856,13 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
92794
92856
  return;
92795
92857
  }
92796
92858
 
92797
- if (this.IsBeforeData && beforeOpenData) this.BeforeOpenData=beforeOpenData;
92798
- if (this.IsAfterData && afterCloseData) this.AfterCloseData=afterCloseData;
92859
+ //if (this.IsBeforeData && beforeOpenData) this.BeforeOpenData=beforeOpenData;
92860
+ //if (this.IsAfterData && afterCloseData) this.AfterCloseData=afterCloseData;
92861
+
92862
+ //盘前盘后数据更新
92863
+ if (this.IsBeforeData && beforeOpenData) this.UpdateLatestCallCationData(this.BeforeOpenData, beforeOpenData);
92864
+ if (this.IsAfterData && afterCloseData) this.UpdateLatestCallCationData(this.AfterCloseData, afterCloseData);
92799
92865
 
92800
- //原始数据
92801
92866
  this.UpdateLatestMinuteDataV2(minuteData);
92802
92867
  this.UpdateMinuteUI(data.stock[0], {FunctionName:"RecvUpdateMinuteData"});
92803
92868
 
@@ -92812,6 +92877,45 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
92812
92877
  }
92813
92878
  }
92814
92879
 
92880
+ this.UpdateLatestCallCationData=function(destData, updateData)
92881
+ {
92882
+ if (!destData) return;
92883
+ if (!updateData || !IFrameSplitOperator.IsNonEmptyArray(updateData.Data)) return;
92884
+
92885
+ if (destData.Data.length==0)
92886
+ {
92887
+ destData.Data=updateData.Data;
92888
+ destData.VolMax=updateData.VolMax;
92889
+ destData.VolMin=updateData.VolMin;
92890
+ return;
92891
+ }
92892
+
92893
+ //覆盖历史数据
92894
+ var mapData=new Map(updateData.Data.map((obj) => [obj.Time, obj]));
92895
+ var lastTime=null; //最后的时间
92896
+ for(var i=0;i<destData.Data.length;++i)
92897
+ {
92898
+ var item=destData.Data[i];
92899
+ lastTime=item.Time;
92900
+ if (!mapData.has(item.Time)) continue;
92901
+ var newItem=mapData.get(item.Time);
92902
+ if (!newItem || !IFrameSplitOperator.IsNumber(newItem.Price)) continue; //只覆盖有效数据
92903
+
92904
+ destData.Data[i]=newItem;
92905
+ }
92906
+
92907
+ //新数据往后插
92908
+ for(var i=0;i<updateData.Data.length;++i)
92909
+ {
92910
+ var item=updateData.Data[i];
92911
+ if (item.Time<=lastTime) continue;
92912
+ destData.Data.push(item);
92913
+ }
92914
+
92915
+ if (destData.VolMax<updateData.VolMax) destData.VolMax=updateData.VolMax;
92916
+ if (IFrameSplitOperator.IsNumber(updateData.TotalCount) && updateData.TotalCount>destData.TotalCount) updateData.TotalCount=destData.TotalCount;
92917
+ }
92918
+
92815
92919
  this.RecvBuySellData=function(data)
92816
92920
  {
92817
92921
  if (!data) return;
@@ -92878,7 +92982,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
92878
92982
 
92879
92983
  if (this.DayCount>1) //多日走势图
92880
92984
  {
92881
- this.UpdateCallCationData(beforeOpenData,afterCloseData);
92985
+ this.UpdateCallCationData(beforeOpenData,afterCloseData, { DataType:0});
92882
92986
  this.UpdateLineColorData(aryColorData,data.stock[0].date);
92883
92987
  this.UpdateLatestMinuteData(aryMinuteData, data.stock[0].date, data.stock[0]);
92884
92988
  this.UpdateTradeStatusData(data.TradeStatus);
@@ -94664,6 +94768,54 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
94664
94768
  return data;
94665
94769
  }
94666
94770
 
94771
+ //获取最新的一条盘前数据
94772
+ this.GetLatestBeforeOpenItem=function()
94773
+ {
94774
+ var lastItem=null;
94775
+ if (this.DayCount>1)
94776
+ {
94777
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.MultiDayBeforeOpenData)) return null;
94778
+ var dayItem=this.MultiDayBeforeOpenData[this.MultiDayBeforeOpenData.length-1];
94779
+ if (!dayItem || !IFrameSplitOperator.IsNonEmptyArray(dayItem.Data)) return null;
94780
+
94781
+ var finder = dayItem.Data.findLast((element) => { return element && IFrameSplitOperator.IsNumber(element.Price); });
94782
+ if (finder) lastItem=finder;
94783
+ }
94784
+ else
94785
+ {
94786
+ if (!this.BeforeOpenData || !IFrameSplitOperator.IsNonEmptyArray(this.BeforeOpenData.Data)) return null;
94787
+
94788
+ var finder = this.BeforeOpenData.Data.findLast((element) => { return element && IFrameSplitOperator.IsNumber(element.Price); });
94789
+ if (finder) lastItem=finder;
94790
+ }
94791
+
94792
+ return lastItem;
94793
+ }
94794
+
94795
+ //获取最新的一条盘后数据
94796
+ this.GetLatestAfterCloseItem=function()
94797
+ {
94798
+ if (this.DayCount>1)
94799
+ {
94800
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.MultiDayAfterCloseData)) return null;
94801
+ var dayItem=this.MultiDayAfterCloseData[this.MultiDayAfterCloseData.length-1];
94802
+ if (!dayItem || !IFrameSplitOperator.IsNonEmptyArray(dayItem.Data)) return null;
94803
+
94804
+ var finder = dayItem.Data.findLast((element) => { return element && IFrameSplitOperator.IsNumber(element.Price); });
94805
+ if (finder) lastItem=finder;
94806
+ }
94807
+ else
94808
+ {
94809
+ if (!this.AfterCloseData || !IFrameSplitOperator.IsNonEmptyArray(this.AfterCloseData.Data)) return null;
94810
+
94811
+ var finder = this.AfterCloseData.Data.findLast((element) => { return element && IFrameSplitOperator.IsNumber(element.Price); });
94812
+ if (finder) lastItem=finder;
94813
+ }
94814
+
94815
+ return lastItem;
94816
+ }
94817
+
94818
+
94667
94819
  this.IsCallAuctionFrame=function(frameID)
94668
94820
  {
94669
94821
  if (!IFrameSplitOperator.IsNonEmptyArray(this.ChartPaintEx)) return false;
@@ -94695,7 +94847,7 @@ MinuteChartContainer.JsonDataToBeforeOpenData=function(data)
94695
94847
  var preClose=data.stock[0].yclose; //前一个数据价格
94696
94848
  var stockData=data.stock[0];
94697
94849
  var date=stockData.date; //日期
94698
- var beforeOpenData={ Data:[], TotalCount:15, Ver:1.0, Date:date };
94850
+ var beforeOpenData={ Data:[], TotalCount:15, Ver:1.0, Date:date, YClose:stockData.yclose, YClearing:stockData.yclearing };
94699
94851
  var extendDataIndex=JSCHART_DATA_FIELD_ID.MINUTE_BEFOREOPEN_EXTENDDATA; //扩展数据序号
94700
94852
  if (stockData.beforeinfo)
94701
94853
  {
@@ -94731,7 +94883,7 @@ MinuteChartContainer.JsonDataToBeforeOpenData=function(data)
94731
94883
  else if (beforeOpenData.Ver==2.0)
94732
94884
  {
94733
94885
  var max=0;
94734
- for(var i in stockData.before)
94886
+ for(var i=0;i<stockData.before.length;++i)
94735
94887
  {
94736
94888
  var item=new BeforeOpenData();
94737
94889
  var jsData=stockData.before[i];
@@ -94743,7 +94895,6 @@ MinuteChartContainer.JsonDataToBeforeOpenData=function(data)
94743
94895
  item.Vol[1]=jsData[3]; //未匹配量
94744
94896
  item.ColorID=jsData[4]; //柱子颜色ID
94745
94897
  if (IFrameSplitOperator.IsNumber(jsData[6])) item.Date=jsData[6] //日期
94746
- item.DateTime=`${item.Date} ${item.Time})`;
94747
94898
 
94748
94899
  var totalVol=item.Vol[0]+item.Vol[1];
94749
94900
  if (IFrameSplitOperator.IsNumber(jsData[5])) totalVol=jsData[5];
@@ -94755,12 +94906,14 @@ MinuteChartContainer.JsonDataToBeforeOpenData=function(data)
94755
94906
 
94756
94907
  beforeOpenData.VolMax=max/unit;
94757
94908
  beforeOpenData.VolMin=0;
94909
+
94910
+ if (stockData.beforeinfo && stockData.beforeinfo.TimeConfig) //固定时间
94911
+ MinuteChartContainer.CompleteCallAuctionData(stockData.beforeinfo.TimeConfig, beforeOpenData);
94758
94912
  }
94759
94913
  else if (beforeOpenData.Ver==3.0)
94760
94914
  {
94761
94915
  var max=0;
94762
-
94763
- for(var i in stockData.before)
94916
+ for(var i=0; i<stockData.before.length; ++i)
94764
94917
  {
94765
94918
  var item=new BeforeOpenData();
94766
94919
  var jsData=stockData.before[i];
@@ -94771,7 +94924,6 @@ MinuteChartContainer.JsonDataToBeforeOpenData=function(data)
94771
94924
  item.AvPrice=jsData[2]; //均价
94772
94925
  item.Vol[0]=jsData[3]; //匹配量
94773
94926
  item.ColorID=jsData[4]; //柱子颜色ID
94774
- item.DateTime=date.toString()+" "+item.Time.toString();
94775
94927
 
94776
94928
  var totalVol=item.Vol[0];
94777
94929
  if (IFrameSplitOperator.IsNumber(jsData[5])) totalVol=jsData[5];
@@ -94783,11 +94935,72 @@ MinuteChartContainer.JsonDataToBeforeOpenData=function(data)
94783
94935
 
94784
94936
  beforeOpenData.VolMax=max/unit;
94785
94937
  beforeOpenData.VolMin=0;
94938
+
94939
+ if (stockData.beforeinfo && stockData.beforeinfo.TimeConfig) //固定时间
94940
+ MinuteChartContainer.CompleteCallAuctionData(stockData.beforeinfo.TimeConfig, beforeOpenData);
94786
94941
  }
94787
94942
 
94788
94943
  return beforeOpenData;
94789
94944
  }
94790
94945
 
94946
+
94947
+ MinuteChartContainer.CompleteCallAuctionData=function(timeConfig, callAuctionData)
94948
+ {
94949
+ var aryData=MinuteChartContainer.CreateCallAuctionTimeData(timeConfig);
94950
+ if (!IFrameSplitOperator.IsNonEmptyArray(aryData)) return false;
94951
+
94952
+ var mapData=new Map(callAuctionData.Data.map((obj) => [obj.Time, obj]));
94953
+ for(var i=0;i<aryData.length;++i)
94954
+ {
94955
+ var time=aryData[i].Time;
94956
+ if (!mapData.has(time)) continue;
94957
+
94958
+ var item=mapData.get(time);
94959
+ aryData[i]=item;
94960
+ }
94961
+
94962
+ callAuctionData.Data=aryData;
94963
+ callAuctionData.TotalCount=aryData.length;
94964
+
94965
+ return true;
94966
+ }
94967
+
94968
+ //创建集合竞价秒级时间 { AryTime:[ { Start:92500, End:92459, Date:20250101 } ] } hhmmss
94969
+ MinuteChartContainer.CreateCallAuctionTimeData=function(config)
94970
+ {
94971
+ if (!config || !IFrameSplitOperator.IsNonEmptyArray(config.AryTime)) return null;
94972
+
94973
+ var step=1; //1s
94974
+ if (IFrameSplitOperator.IsPlusNumber(config.Step)) step=config.Step;
94975
+ var aryData=[];
94976
+ for(var i=0;i<config.AryTime.length;++i)
94977
+ {
94978
+ var item=config.AryTime[i];
94979
+
94980
+ var value=item.Start;
94981
+ var hour=parseInt(value/10000);
94982
+ var minute=parseInt((value%10000)/100);
94983
+ var second=value%100;
94984
+ var startTime=new Date(2021,5,2, hour,minute, second);
94985
+
94986
+ value=item.End;
94987
+ var hour=parseInt(value/10000);
94988
+ var minute=parseInt((value%10000)/100);
94989
+ var second=value%100;
94990
+ var endTime=new Date(2021,5,2, hour,minute, second);
94991
+
94992
+ for(var j=0; j<5000 && startTime<=endTime; ++j)
94993
+ {
94994
+ var time=startTime.getHours()*10000+startTime.getMinutes()*100+startTime.getSeconds();
94995
+ var secItem={ Time:time, Date:item.Date };
94996
+ aryData.push(secItem);
94997
+ startTime.setSeconds(startTime.getSeconds()+step);
94998
+ }
94999
+ }
95000
+
95001
+ return aryData;
95002
+ }
95003
+
94791
95004
  //收盘集合竞价
94792
95005
  MinuteChartContainer.JsonDataToAfterCloseData=function(data)
94793
95006
  {
@@ -94798,7 +95011,7 @@ MinuteChartContainer.JsonDataToAfterCloseData=function(data)
94798
95011
  if (!stockData.afterinfo) return null;
94799
95012
  var symbol=data.stock[0].symbol;
94800
95013
  var upperSymbol=symbol.toUpperCase();
94801
- var afterCloseData={ Data:[], TotalCount:3*60, Ver:2.0, Date:date };
95014
+ var afterCloseData={ Data:[], TotalCount:3*60, Ver:2.0, Date:date, YClose:stockData.yclose, YClearing:stockData.yclearing };
94802
95015
  var item=stockData.afterinfo;
94803
95016
  if (IFrameSplitOperator.IsNumber(item.totalcount)) afterCloseData.TotalCount=item.totalcount;
94804
95017
  if (IFrameSplitOperator.IsNumber(item.ver)) afterCloseData.Ver=item.ver;
@@ -94828,7 +95041,7 @@ MinuteChartContainer.JsonDataToAfterCloseData=function(data)
94828
95041
  else if (afterCloseData.Ver==2.0)
94829
95042
  {
94830
95043
  var max=0;
94831
- for(var i in stockData.after)
95044
+ for(var i=0; i<stockData.after.length; ++i)
94832
95045
  {
94833
95046
  var item=new AfterCloseData();
94834
95047
  var jsData=stockData.after[i];
@@ -94851,6 +95064,9 @@ MinuteChartContainer.JsonDataToAfterCloseData=function(data)
94851
95064
 
94852
95065
  afterCloseData.VolMax=max/unit;
94853
95066
  afterCloseData.VolMin=0;
95067
+
95068
+ if (stockData.afterinfo && stockData.afterinfo.TimeConfig) //固定时间
95069
+ MinuteChartContainer.CompleteCallAuctionData(stockData.afterinfo.TimeConfig, afterCloseData);
94854
95070
  }
94855
95071
  else if (afterCloseData.Ver==3.0)
94856
95072
  {
@@ -94878,6 +95094,9 @@ MinuteChartContainer.JsonDataToAfterCloseData=function(data)
94878
95094
 
94879
95095
  afterCloseData.VolMax=max/unit;
94880
95096
  afterCloseData.VolMin=0;
95097
+
95098
+ if (stockData.afterinfo && stockData.afterinfo.TimeConfig) //固定时间
95099
+ MinuteChartContainer.CompleteCallAuctionData(stockData.afterinfo.TimeConfig, afterCloseData);
94881
95100
  }
94882
95101
 
94883
95102
  return afterCloseData;
@@ -94999,12 +95218,13 @@ MinuteChartContainer.JsonDataToUpdateMinuteData=function(data)
94999
95218
 
95000
95219
  item.DateTime=`${item.Date} ${item.Time}`;
95001
95220
 
95002
- if (IFrameSplitOperator.IsNumber(minuteData.YClose) && item.Close)
95003
- item.Increase=(item.Close-minuteData.YClose)/minuteData.YClose*100; //涨幅 (最新价格-昨收)/昨收*100;
95004
-
95005
- if (isFutures && minuteData.YClearing && item.Close)
95006
- item.Increase=(item.Close-minuteData.YClearing)/minuteData.YClearing*100; //涨幅 (最新价格-昨结算价)/昨结算价*100;
95007
-
95221
+ if (!IFrameSplitOperator.IsNumber(item.Increase) && IFrameSplitOperator.IsNumber(minuteData.YClose) && item.Close)
95222
+ {
95223
+ if (isFutures && minuteData.YClearing && item.Close)
95224
+ item.Increase=(item.Close-minuteData.YClearing)/minuteData.YClearing*100; //涨幅 (最新价格-昨结算价)/昨结算价*100;
95225
+ else
95226
+ item.Increase=(item.Close-minuteData.YClose)/minuteData.YClose*100; //涨幅 (最新价格-昨收)/昨收*100;
95227
+ }
95008
95228
 
95009
95229
  minuteData.Data.push(item);
95010
95230
  }
@@ -95168,8 +95388,9 @@ MinuteChartContainer.JsonDataToHistoryMinuteLineColorData=function(data)
95168
95388
  }
95169
95389
 
95170
95390
 
95171
- MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, isBeforeOpen, symbol)
95391
+ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, isBeforeOpen, symbol, dataInfo)
95172
95392
  {
95393
+ if (!IFrameSplitOperator.IsNonEmptyArray(data)) return;
95173
95394
  var upperSymbol=symbol?symbol.toUpperCase():null;
95174
95395
  var unit=MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol);
95175
95396
 
@@ -95180,7 +95401,7 @@ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, i
95180
95401
  if (callAuctionData.Ver==1.0)
95181
95402
  {
95182
95403
  var preClose=null;
95183
- for(var i in data)
95404
+ for(var i=0; i<data.length; ++i)
95184
95405
  {
95185
95406
  var item=isBeforeOpen? new BeforeOpenData() : new AfterCloseData();
95186
95407
  var jsData=data[i];
@@ -95204,7 +95425,7 @@ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, i
95204
95425
  else if (callAuctionData.Ver==2.0)
95205
95426
  {
95206
95427
  var max=0;
95207
- for(var i in data)
95428
+ for(var i=0; i<data.length; ++i)
95208
95429
  {
95209
95430
  var item=isBeforeOpen? new BeforeOpenData() : new AfterCloseData();
95210
95431
  var jsData=data[i];
@@ -95216,7 +95437,6 @@ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, i
95216
95437
  item.Vol[0]=jsData[2]; //匹配量
95217
95438
  item.Vol[1]=jsData[3]; //未匹配量
95218
95439
  item.ColorID=jsData[4]; //柱子颜色ID
95219
- item.DateTime=date.toString()+" "+item.Time.toString();
95220
95440
 
95221
95441
  var totalVol=item.Vol[0]+item.Vol[1];
95222
95442
  if (IFrameSplitOperator.IsNumber(jsData[5])) totalVol=jsData[5];
@@ -95228,6 +95448,9 @@ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, i
95228
95448
 
95229
95449
  callAuctionData.VolMax=max/unit;
95230
95450
  callAuctionData.VolMin=0;
95451
+
95452
+ if (dataInfo && dataInfo.TimeConfig) //固定时间
95453
+ MinuteChartContainer.CompleteCallAuctionData(dataInfo.TimeConfig, callAuctionData);
95231
95454
  }
95232
95455
  else if (beforeOpenData.Ver==3.0)
95233
95456
  {
@@ -95244,7 +95467,6 @@ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, i
95244
95467
  item.AvPrice=jsData[2]; //均价
95245
95468
  item.Vol[0]=jsData[3]; //匹配量
95246
95469
  item.ColorID=jsData[4]; //柱子颜色ID
95247
- item.DateTime=date.toString()+" "+item.Time.toString();
95248
95470
 
95249
95471
  var totalVol=item.Vol[0];
95250
95472
  if (IFrameSplitOperator.IsNumber(jsData[5])) totalVol=jsData[5];
@@ -95256,6 +95478,9 @@ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, i
95256
95478
 
95257
95479
  callAuctionData.VolMax=max/unit;
95258
95480
  callAuctionData.VolMin=0;
95481
+
95482
+ if (dataInfo && dataInfo.TimeConfig) //固定时间
95483
+ MinuteChartContainer.CompleteCallAuctionData(dataInfo.TimeConfig, callAuctionData);
95259
95484
  }
95260
95485
  }
95261
95486
 
@@ -95264,7 +95489,7 @@ MinuteChartContainer.JosnDataToBeforeOpenDataArray=function(data)
95264
95489
  if (!data || !data.data) return null;
95265
95490
 
95266
95491
  var aryDay=[];
95267
- for(var i in data.data)
95492
+ for(var i=0; i<data.data.length; ++i)
95268
95493
  {
95269
95494
  var dayItem=data.data[i];
95270
95495
  var beforeOpenData={ Data:[], TotalCount:15, Ver:1.0, Date:dayItem.date, YClose:dayItem.yclose, YClearing:dayItem.YClearing };
@@ -95274,7 +95499,7 @@ MinuteChartContainer.JosnDataToBeforeOpenDataArray=function(data)
95274
95499
  if (IFrameSplitOperator.IsNumber(dayItem.beforeinfo.ver)) beforeOpenData.Ver=dayItem.beforeinfo.ver;
95275
95500
  }
95276
95501
 
95277
- MinuteChartContainer.JsonDataToCallAuctionItem(dayItem.before, beforeOpenData, true, data.symbol);
95502
+ MinuteChartContainer.JsonDataToCallAuctionItem(dayItem.before, beforeOpenData, true, data.symbol, dayItem.beforeinfo);
95278
95503
 
95279
95504
  aryDay.push(beforeOpenData);
95280
95505
  }
@@ -95289,7 +95514,7 @@ MinuteChartContainer.JosnDataToAfterCloseDataArray=function(data)
95289
95514
  if (!data || !data.data) return null;
95290
95515
 
95291
95516
  var aryDay=[];
95292
- for(var i in data.data)
95517
+ for(var i=0; i<data.data.length; ++i)
95293
95518
  {
95294
95519
  var dayItem=data.data[i];
95295
95520
  var afterCloseData={ Data:[], TotalCount:15, Ver:1.0, Date:dayItem.date, YClose:dayItem.yclose, YClearing:dayItem.YClearing };
@@ -95300,7 +95525,7 @@ MinuteChartContainer.JosnDataToAfterCloseDataArray=function(data)
95300
95525
  if (IFrameSplitOperator.IsNumber(dayItem.afterinfo.ver)) afterCloseData.Ver=dayItem.afterinfo.ver;
95301
95526
  }
95302
95527
 
95303
- MinuteChartContainer.JsonDataToCallAuctionItem(dayItem.after, afterCloseData, false, data.symbol);
95528
+ MinuteChartContainer.JsonDataToCallAuctionItem(dayItem.after, afterCloseData, false, data.symbol, dayItem.afterinfo);
95304
95529
 
95305
95530
  aryDay.push(afterCloseData);
95306
95531
  }