hqchart 1.1.14734 → 1.1.14742

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.
@@ -7080,6 +7080,18 @@ var JSCHART_MENU_ID=
7080
7080
  CMD_REPORT_CHANGE_COLUMN_ID:105, //报价列表 切换列 Arg[Column, ]
7081
7081
  }
7082
7082
 
7083
+ var JSCHART_TRADE_STATUS_ID=
7084
+ {
7085
+ START_ID:1000, //8:45~9:15
7086
+ BEFORE_OPEN_ID:2000, //9:15~9:25 是开盘集合竞价阶段
7087
+ TRADE_ID:3000, //9:25~14:57 是连续竞价阶段
7088
+ AFTER_CLOSE_ID:4000, //14:57~15:00 是收盘集合竞价阶段
7089
+ CLOSE_ID:5000, //15:00 后,首先发 CLOSE 标志
7090
+ ENDTR_ID:6000, //交易结束
7091
+ //上面状态个位数 是停牌状态 如3001 连续交易时间段停牌
7092
+ SUSP_ID:1, //停牌
7093
+ }
7094
+
7083
7095
 
7084
7096
  function PhoneDBClick()
7085
7097
  {
@@ -7296,6 +7308,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7296
7308
 
7297
7309
  //图形中的单元选中状态
7298
7310
  MapIndexChartCache:new Map(), //key 指标GUID
7311
+
7312
+ TradeStatus:null, //当前交易状态 { Date, Time:数据最后更新的时间, Status: }
7299
7313
  };
7300
7314
 
7301
7315
  this.VerticalDrag; //通过X轴左右拖动数据(手势才有)
@@ -15819,6 +15833,26 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
15819
15833
  {
15820
15834
  return false;
15821
15835
  }
15836
+
15837
+ //更新交易状态
15838
+ this.UpdateTradeStatusData=function(data, option)
15839
+ {
15840
+ if (option)
15841
+ {
15842
+ //是否清空
15843
+ if (option.IsClear===true) this.GlobalOption.TradeStatus=null;
15844
+ }
15845
+
15846
+ if (!data) return false;
15847
+
15848
+ if (IFrameSplitOperator.IsNumber(data.Date) && IFrameSplitOperator.IsNumber(data.Time) && IFrameSplitOperator.IsNumber(data.Status))
15849
+ {
15850
+ this.GlobalOption.TradeStatus={ Date:data.Date, Time:data.Time, Status:data.Status };
15851
+ return true;
15852
+ }
15853
+
15854
+ return false;
15855
+ }
15822
15856
  }
15823
15857
 
15824
15858
  function GetDevicePixelRatio()
@@ -16354,6 +16388,40 @@ function ChartBorder()
16354
16388
  {
16355
16389
  return this.TitleHeight;
16356
16390
  }
16391
+
16392
+ //是否显示单日集合竞价 盘前
16393
+ this.IsShowBeforeOpen=function()
16394
+ {
16395
+ if (this.LeftExtendWidth<10) return false;
16396
+
16397
+ return true;
16398
+ }
16399
+
16400
+ //是否显示单日集合竞价 盘后
16401
+ this.IsShowAfterClose=function()
16402
+ {
16403
+ if (this.RightExtendWidth<10) return false;
16404
+
16405
+ return true;
16406
+ }
16407
+
16408
+ //是否显示多日集合竞价 盘前
16409
+ this.IsShowMultiDayBeforeOpen=function()
16410
+ {
16411
+ if (!this.MultiDayMinute) return false;
16412
+ if (this.MultiDayMinute.Count<=1 || this.MultiDayMinute.Left<=0) return false;
16413
+
16414
+ return true;
16415
+ }
16416
+
16417
+ //是否显示多日集合竞价 盘后
16418
+ this.IsShowMultiDayAfterClose=function()
16419
+ {
16420
+ if (!this.MultiDayMinute) return false;
16421
+ if (this.MultiDayMinute.Count<=1 || this.MultiDayMinute.Right<=0) return false;
16422
+
16423
+ return true;
16424
+ }
16357
16425
  }
16358
16426
 
16359
16427
  //框架外部挂接
@@ -58332,7 +58400,7 @@ function FrameSplitY()
58332
58400
 
58333
58401
  this.RightFrameSplitY();
58334
58402
  this.MainOverlayFrameSplitY(); //主图Y轴绑定叠加Y轴坐标
58335
- this.CallAcutionSplitY(this.SplitCount,splitData);
58403
+ this.CallAcutionSplitYV2(splitData, this.Frame.HorizontalInfo.slice());
58336
58404
 
58337
58405
  if (this.EnableRemoveZero) this.RemoveZero(this.Frame.HorizontalInfo);
58338
58406
 
@@ -58413,6 +58481,173 @@ function FrameSplitY()
58413
58481
  }
58414
58482
  }
58415
58483
 
58484
+ this.CallAcutionSplitYV2=function(splitData, aryHorizontalInfo)
58485
+ {
58486
+ if (!this.IsCallAuctionFrame()) return;
58487
+ if (!IFrameSplitOperator.IsNonEmptyArray(aryHorizontalInfo)) return;
58488
+
58489
+ var aryCallAcution=this.GetCallAcutionSplitYV2(splitData,aryHorizontalInfo);
58490
+ if (!aryCallAcution) return;
58491
+
58492
+ for(var i=0; i<this.Frame.HorizontalInfo.length; ++i) //把显示的数据迁移到 Message[2] Message[3]
58493
+ {
58494
+ var item=this.Frame.HorizontalInfo[i];
58495
+ if (aryCallAcution.IsBeforeData)
58496
+ {
58497
+ item.Message[2]=item.Message[0];
58498
+ item.Message[0]=null;
58499
+ }
58500
+
58501
+ if (aryCallAcution.IsAfterData && (this.ShareAfterVol==0 || this.ShareAfterVol==2) )
58502
+ {
58503
+ item.Message[3]=item.Message[1];
58504
+ item.Message[1]=null;
58505
+ }
58506
+ }
58507
+
58508
+ //集合竞价的坐标插入最后
58509
+ for(var i=0; i<aryCallAcution.HorizontalInfo.length; ++i)
58510
+ {
58511
+ var item=aryCallAcution.HorizontalInfo[i];
58512
+ this.Frame.HorizontalInfo.push(item);
58513
+ }
58514
+ }
58515
+
58516
+ this.GetCallAcutionSplitYV2=function(splitData, arySource)
58517
+ {
58518
+ if (!this.IsCallAuctionFrame()) return null;
58519
+
58520
+ var bBeforeData=(this.IsBeforeData==true && this.BeforeOpenData && (this.BeforeOpenData.Ver==2.0 || this.BeforeOpenData.Ver==3.0));
58521
+ var bAfterData=(this.IsAfterData==true && this.AfterCloseData && (this.AfterCloseData.Ver==2.0 || this.AfterCloseData.Ver==3.0));
58522
+
58523
+ var bottom=this.Frame.ChartBorder.GetBottomEx();
58524
+ var height=this.Frame.ChartBorder.GetHeightEx();
58525
+ var bHScreen=this.Frame.IsHScreen;
58526
+ if (this.Frame.IsHScreen)
58527
+ {
58528
+ var border=this.Frame.GetBorder();
58529
+ var width=border.RightEx-border.LeftEx;
58530
+ }
58531
+
58532
+ if (bBeforeData || bAfterData)
58533
+ {
58534
+ var aryHorizontalInfo=[];
58535
+ for(var i=0;i<arySource.length;++i)
58536
+ {
58537
+ var hItem=arySource[i];
58538
+ if (!hItem || !IFrameSplitOperator.IsNumber(hItem.Value)) continue;
58539
+ var y=this.Frame.GetYFromData(hItem.Value);
58540
+
58541
+ var item=new CoordinateInfo();
58542
+ item.Value=hItem.Value;
58543
+ item.LineType=8;
58544
+ if (bBeforeData)
58545
+ {
58546
+ if (bHScreen)
58547
+ {
58548
+ var value=(y-border.LeftEx)/width*(this.BeforeOpenData.VolMax-this.BeforeOpenData.VolMin)+this.BeforeOpenData.VolMin;
58549
+ }
58550
+ else
58551
+ {
58552
+ var value=(bottom-y)/height*(this.BeforeOpenData.VolMax-this.BeforeOpenData.VolMin)+this.BeforeOpenData.VolMin;
58553
+ }
58554
+
58555
+ item.Message[0]=this.FormatValueString(value);
58556
+ }
58557
+
58558
+ if (bAfterData && (this.ShareAfterVol==0 || this.ShareAfterVol==2) )
58559
+ {
58560
+ if (bHScreen)
58561
+ {
58562
+ var value=(y-border.LeftEx)/width*(this.AfterCloseData.VolMax-this.AfterCloseData.VolMin)+this.AfterCloseData.VolMin;
58563
+ }
58564
+ else
58565
+ {
58566
+ var value=(bottom-y)/height*(this.AfterCloseData.VolMax-this.AfterCloseData.VolMin)+this.AfterCloseData.VolMin;
58567
+ }
58568
+
58569
+ item.Message[1]=this.FormatValueString(value);
58570
+ }
58571
+
58572
+ aryHorizontalInfo.push(item);
58573
+ }
58574
+
58575
+ return { HorizontalInfo:aryHorizontalInfo, IsBeforeData:bBeforeData, IsAfterData:bAfterData };
58576
+ }
58577
+
58578
+ var bMultiDayBeforeData=false, bMultiDayAfterData=false;
58579
+ var beforeDayData=null, afterDayData=null;
58580
+ if (this.MultiDayBeforeOpenData && IFrameSplitOperator.IsNonEmptyArray(this.MultiDayBeforeOpenData))
58581
+ {
58582
+ bMultiDayBeforeData=true;
58583
+ var firstDayData=this.MultiDayBeforeOpenData[0];
58584
+ if (firstDayData.Ver==2.0 || firstDayData.Ver==3.0)
58585
+ beforeDayData=firstDayData;
58586
+ }
58587
+
58588
+ if (this.MultiDayAfterCloseData && IFrameSplitOperator.IsNonEmptyArray(this.MultiDayAfterCloseData))
58589
+ {
58590
+ bMultiDayAfterData=true;
58591
+ var firstDayData=this.MultiDayAfterCloseData[0];
58592
+ if (firstDayData.Ver==2.0 || firstDayData.Ver==3.0)
58593
+ afterDayData=firstDayData;
58594
+ }
58595
+
58596
+ if (bMultiDayBeforeData || bMultiDayAfterData)
58597
+ {
58598
+ var aryHorizontalInfo=[];
58599
+ for(var i=0;i<arySource.length;++i)
58600
+ {
58601
+ var hItem=arySource[i];
58602
+ if (!hItem || !IFrameSplitOperator.IsNumber(hItem.Value)) continue;
58603
+ var y=this.Frame.GetYFromData(hItem.Value);
58604
+
58605
+ var item=new CoordinateInfo();
58606
+ item.Value=hItem.Value;
58607
+ item.LineType=9;
58608
+
58609
+ var isVaild=false;
58610
+ if (beforeDayData)
58611
+ {
58612
+ if (bHScreen)
58613
+ {
58614
+ var value=(y-border.LeftEx)/width*(beforeDayData.VolMax-beforeDayData.VolMin)+beforeDayData.VolMin;
58615
+ }
58616
+ else
58617
+ {
58618
+ var value=(bottom-y)/height*(beforeDayData.VolMax-beforeDayData.VolMin)+beforeDayData.VolMin;
58619
+ }
58620
+
58621
+ item.Message[0]=this.FormatValueString(value);
58622
+ isVaild=true;
58623
+ }
58624
+
58625
+ if (afterDayData && (this.ShareAfterVol==0 || this.ShareAfterVol==2))
58626
+ {
58627
+ if (bHScreen)
58628
+ {
58629
+ var value=(y-border.LeftEx)/width*(afterDayData.VolMax-afterDayData.VolMin)+afterDayData.VolMin;
58630
+ }
58631
+ else
58632
+ {
58633
+ var value=(bottom-y)/height*(afterDayData.VolMax-afterDayData.VolMin)+afterDayData.VolMin;
58634
+ }
58635
+
58636
+ item.Message[1]=this.FormatValueString(value);
58637
+ isVaild=true;
58638
+ }
58639
+
58640
+ if (isVaild) aryHorizontalInfo.push(item);
58641
+ }
58642
+
58643
+ if (IFrameSplitOperator.IsNonEmptyArray(aryHorizontalInfo))
58644
+ return { HorizontalInfo:aryHorizontalInfo, IsBeforeData:bMultiDayBeforeData, IsAfterData:bMultiDayAfterData };
58645
+ }
58646
+
58647
+ return null;
58648
+ }
58649
+
58650
+ /* 废弃 使用 CallAcutionSplitYV2
58416
58651
  this.CallAcutionSplitY=function(count,splitData)
58417
58652
  {
58418
58653
  if (!this.IsCallAuctionFrame()) return;
@@ -58443,6 +58678,7 @@ function FrameSplitY()
58443
58678
  this.Frame.HorizontalInfo.push(item);
58444
58679
  }
58445
58680
  }
58681
+ */
58446
58682
 
58447
58683
  this.IsCallAuctionFrame=function()
58448
58684
  {
@@ -58453,6 +58689,7 @@ function FrameSplitY()
58453
58689
  return this.HQChart.IsCallAuctionFrame(this.Frame.Identify);
58454
58690
  }
58455
58691
 
58692
+ /* 废弃 使用 GetCallAcutionSplitYV2
58456
58693
  this.GetCallAcutionSplitY=function(count,splitData)
58457
58694
  {
58458
58695
  if (!this.IsCallAuctionFrame()) return null;
@@ -58547,6 +58784,7 @@ function FrameSplitY()
58547
58784
 
58548
58785
  return null;
58549
58786
  }
58787
+ */
58550
58788
 
58551
58789
  this.RightFrameSplitY=function()
58552
58790
  {
@@ -64206,7 +64444,17 @@ function DynamicMinuteTitlePainting()
64206
64444
  {
64207
64445
  this.OnDrawEventCallback(null);
64208
64446
 
64209
- if (this.IsAlwaysShowLastData)
64447
+ var bShowLastData=this.IsAlwaysShowLastData
64448
+ if (this.DrawStatus && this.DrawStatus.IsTitleShowLatestData)
64449
+ {
64450
+ var status=this.DrawStatus;
64451
+ if (!IFrameSplitOperator.IsNumber(status.FrameID) || status.FrameID<0)
64452
+ bShowLastData=true;
64453
+ else if (status.CorssCursorTouchEnd && status.IsOnTouch==false)
64454
+ bShowLastData=true;
64455
+ }
64456
+
64457
+ if (bShowLastData)
64210
64458
  {
64211
64459
  this.Canvas.save();
64212
64460
  this.DrawLastDataItem();
@@ -95271,6 +95519,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
95271
95519
  this.UpdateCallCationData(beforeOpenData,afterCloseData);
95272
95520
  this.UpdateLineColorData(aryColorData,data.stock[0].date);
95273
95521
  this.UpdateLatestMinuteData(aryMinuteData, data.stock[0].date, data.stock[0]);
95522
+ this.UpdateTradeStatusData(data.TradeStatus);
95274
95523
  this.UpdateHistoryMinuteUI(updateTime);
95275
95524
  this.RecvMinuteDataEvent({FunctionName:"RecvMinuteData"} );
95276
95525
  this.RequestOverlayMinuteData(); //请求叠加数据 (主数据下载完再下载)
@@ -95297,6 +95546,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
95297
95546
 
95298
95547
  this.ColorLineData=aryColorData;
95299
95548
 
95549
+ this.UpdateTradeStatusData(data.TradeStatus);
95300
95550
  this.UpdateMinuteUI(data.stock[0], {FunctionName:"RecvMinuteData", Day:{ IsFirstData:bFirstData} });
95301
95551
 
95302
95552
  if (data.AutoUpdate===false) //不执行自动更新
@@ -148133,7 +148383,7 @@ function ScrollBarBGChart()
148133
148383
 
148134
148384
 
148135
148385
 
148136
- var HQCHART_VERSION="1.1.14733";
148386
+ var HQCHART_VERSION="1.1.14741";
148137
148387
 
148138
148388
  function PrintHQChartVersion()
148139
148389
  {
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.14733";
8
+ var HQCHART_VERSION="1.1.14741";
9
9
 
10
10
  function PrintHQChartVersion()
11
11
  {
@@ -55762,7 +55762,6 @@ HQData.Minute_RequestMinuteData=function(data, callback)
55762
55762
 
55763
55763
  var lastPrice=stockItem.minute[stockItem.minute.length-1].price;
55764
55764
 
55765
-
55766
55765
  if (bBuySellBar) //盘口分析
55767
55766
  {
55768
55767
  var aryBuy=[];
@@ -55803,6 +55802,95 @@ HQData.Minute_RequestMinuteData=function(data, callback)
55803
55802
  }, 50);
55804
55803
  }
55805
55804
 
55805
+ HQData.Minute_RequestMinuteDataV2=function(data, callback)
55806
+ {
55807
+ data.PreventDefault=true;
55808
+ var symbol=data.Request.Data.symbol[0]; //请求的股票代码
55809
+ var callcation=data.Request.Data.callcation; //集合竞价
55810
+ console.log(`[HQData::Minute_RequestMinuteDataV2] Symbol=${symbol}`);
55811
+
55812
+ setTimeout(()=>
55813
+ {
55814
+ var fullData=HQData.GetDayMinuteDataBySymbol(symbol);
55815
+ var srcStock=fullData[0];
55816
+ var stockItem={ date:srcStock.date, minute:srcStock.minute, yclose:srcStock.yclose, symbol:symbol, name:symbol };
55817
+
55818
+ if (callcation.Before)
55819
+ {
55820
+ var TEST_BEFORE_DATA=
55821
+ [
55822
+ [8.52, 50000, 30000, 1, 200000],
55823
+ [8.53, 55000, 40000, 0, 80000],
55824
+ [8.52, 40000, 60000, 1, 80000],
55825
+ [8.55, 30000, 21000, 2, 44000],
55826
+ [8.51, 21000, 25000, 2, 40000],
55827
+ [8.50, 36000, 55000, 2, 60000],
55828
+ [8.49, 10000, 20000, 2, 33000],
55829
+ ];
55830
+
55831
+ var date=new Date(parseInt(stockItem.date/10000),(stockItem.date/100%100-1),stockItem.date%100, 9, 15, 0);
55832
+ var count=10*60; //9:15-9:25
55833
+ var before=[];
55834
+ for(var i=0;i<count;++i)
55835
+ {
55836
+ var time=date.getHours()*10000+date.getMinutes()*100+date.getSeconds();
55837
+ var testIndex=Math.floor(Math.random()*10)%TEST_BEFORE_DATA.length;
55838
+ var testData=TEST_BEFORE_DATA[testIndex];
55839
+ var item=[ time, null, null, null, null, null ];
55840
+ if (i%20==0 || i==count-1)
55841
+ {
55842
+ item=[ time, testData[0], testData[1], testData[2], testData[3], (testData[1]+testData[2])*1.5 ];
55843
+ }
55844
+ before.push(item);
55845
+ date.setSeconds(date.getSeconds()+1);
55846
+ }
55847
+
55848
+ //before.length=200;
55849
+ var beforeinfo={ totalcount:count, ver:2.0 };
55850
+
55851
+ stockItem.before=before;
55852
+ stockItem.beforeinfo=beforeinfo;
55853
+
55854
+ var TEST_AFTER_DATA=
55855
+ [
55856
+ [8.51, 40000, 30000, 1, 80000],
55857
+ [8.51, 55000, 60000, 0, 150000],
55858
+ [8.51, 30000, 60000, 1, 160000],
55859
+ [8.51, 35000, 21000, 2, 50000],
55860
+ [8.51, 21000, 35000, 2, 70000],
55861
+ [8.51, 26000, 55000, 2, 100000],
55862
+ [8.51, 30000, 10000, 2, 50000],
55863
+ ];
55864
+
55865
+ var date=new Date(parseInt(stockItem.date/10000),(stockItem.date/100%100-1),stockItem.date%100, 14, 57, 0);
55866
+ var count=3*60; //14:57-15:00
55867
+ var after=[];
55868
+ for(var i=0;i<count;++i)
55869
+ {
55870
+ var time=date.getHours()*10000+date.getMinutes()*100+date.getSeconds();
55871
+ var testIndex=Math.floor(Math.random()*10)%TEST_AFTER_DATA.length;
55872
+ var testData=TEST_AFTER_DATA[testIndex];
55873
+ var item=[ time, null, null, null, null, null ];
55874
+ if (i%10==0 || i==count-1)
55875
+ {
55876
+ item=[ time, testData[0], testData[1], testData[2], testData[3], (testData[1]+testData[2])*1.5 ];
55877
+ }
55878
+ after.push(item);
55879
+ date.setSeconds(date.getSeconds()+1);
55880
+ }
55881
+
55882
+ var afterinfo={ totalcount:count, ver:2.0 };
55883
+ stockItem.after=after;
55884
+ stockItem.afterinfo=afterinfo;
55885
+ }
55886
+
55887
+ //stockItem.minute.length=0;
55888
+
55889
+ var hqchartData={code:0, stock:[stockItem] };
55890
+ callback(hqchartData);
55891
+ }, 50);
55892
+ }
55893
+
55806
55894
  HQData.Minute_RequestPopMinuteData=function(data, callback)
55807
55895
  {
55808
55896
  data.PreventDefault=true;