hqchart 1.1.14165 → 1.1.14179

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.
@@ -5955,16 +5955,6 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
5955
5955
  }
5956
5956
  }
5957
5957
 
5958
- //历史分钟数据 更改日期
5959
- this.ChangeTradeDate=function(tradeDate)
5960
- {
5961
- if(this.JSChartContainer && typeof(this.JSChartContainer.ChangeTradeDate)=='function')
5962
- {
5963
- JSConsole.Chart.Log('[JSChart:ChangeTradeDate] date', tradeDate);
5964
- this.JSChartContainer.ChangeTradeDate(tradeDate);
5965
- }
5966
- }
5967
-
5968
5958
  //多日走势图
5969
5959
  this.ChangeDayCount=function(count, option)
5970
5960
  {
@@ -6167,6 +6157,15 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
6167
6157
  return this.JSChartContainer.PopupMenuByDrapdown(menuData, rtButton);
6168
6158
  }
6169
6159
  }
6160
+
6161
+ this.ExecuteMenuCommand=function(cmdID, aryArgs)
6162
+ {
6163
+ if(this.JSChartContainer && typeof(this.JSChartContainer.ExecuteMenuCommand)=='function')
6164
+ {
6165
+ JSConsole.Chart.Log('[JSChart:ExecuteMenuCommand] ');
6166
+ return this.JSChartContainer.ExecuteMenuCommand(cmdID, aryArgs);
6167
+ }
6168
+ }
6170
6169
  }
6171
6170
 
6172
6171
  JSChart.LastVersion=null; //最新的版本号
@@ -6964,9 +6963,14 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6964
6963
  {
6965
6964
  IsValueFullRange:false ,
6966
6965
  IsDisplayLatest:false,
6967
- SelectedBorder:{ Mode:0, SelFrame:0 }, //边框选中模式 Mode:0=禁用 1=右侧标记选中 2=指标窗口标记选中
6968
- SelectedXBorder: { Mode:0, Date:null } //X边框选中模式 Mode:0=禁用 分时图图有效
6966
+ SelectedBorder:{ Mode:0, SelFrame:0 }, //边框选中模式 Mode:0=禁用 1=右侧标记选中 2=指标窗口标记选中
6967
+ SelectedXBorder: { Mode:0, Date:null }, //X边框选中模式 Mode:0=禁用 分时图图有效
6969
6968
  //XDateFormat (多日分时图x轴底部日期格式)
6969
+ RightHorizontal:
6970
+ {
6971
+ //Show:true,
6972
+ //Width:5
6973
+ } //右侧框架外部坐标和间距
6970
6974
  };
6971
6975
 
6972
6976
  this.VerticalDrag; //通过X轴左右拖动数据(手势才有)
@@ -13836,22 +13840,19 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
13836
13840
  this.ShowDrawToolDialog();
13837
13841
  break;
13838
13842
  case JSCHART_MENU_ID.CMD_SHOW_STOCKCHIP_ID:
13839
- var option={Name:'筹码分布', ShowType:1, Width:230 };
13840
- var extendChart=this.CreateExtendChart(option.Name, option); //创建扩展图形
13841
- this.SetSizeChange(true);
13842
- this.Draw();
13843
- break;
13844
- case JSCHART_MENU_ID.CMD_HIDE_STOCKCHIP_ID:
13845
- var StockChip=this.GetExtendChartByClassName('StockChip');
13846
- if (StockChip)
13843
+ //var option={Name:'筹码分布', ShowType:1, Width:230 };
13844
+ var stockChip=this.GetStockChipChart();
13845
+ if (stockChip) return;
13846
+ if (srcParam)
13847
13847
  {
13848
- var chipWidth=StockChip.Chart.Width;
13849
- this.DeleteExtendChart(StockChip);
13850
- this.Frame.ChartBorder.Right-=chipWidth;
13848
+ var extendChart=this.CreateExtendChart(srcParam, aryArgs[1]); //创建扩展图形
13851
13849
  this.SetSizeChange(true);
13852
13850
  this.Draw();
13853
13851
  }
13854
13852
  break;
13853
+ case JSCHART_MENU_ID.CMD_HIDE_STOCKCHIP_ID:
13854
+ if (this.DeleteStockChipChart) this.DeleteStockChipChart();
13855
+ break;
13855
13856
  case JSCHART_MENU_ID.CMD_ENABLE_SELECT_RECT_ID:
13856
13857
  if (IFrameSplitOperator.IsBool(srcParam))
13857
13858
  this.EnableSelectRect=srcParam;
@@ -15756,6 +15757,23 @@ function AverageWidthFrame()
15756
15757
  }
15757
15758
  }
15758
15759
 
15760
+ this.IsShowRightHorizontal=function()
15761
+ {
15762
+ var borderRight=this.ChartBorder.Right;
15763
+ if (borderRight<=10) return false;
15764
+
15765
+ if (this.YTextPosition[1]==2) return false;
15766
+ if (this.IsShowYText[1]===false) return false;
15767
+
15768
+ if (this.GlobalOption && this.GlobalOption.RightHorizontal)
15769
+ {
15770
+ var item=this.GlobalOption.RightHorizontal;
15771
+ if (item.Show===false) return false;
15772
+ }
15773
+
15774
+ return true;
15775
+ }
15776
+
15759
15777
  //画Y轴
15760
15778
  this.DrawHorizontal=function()
15761
15779
  {
@@ -15772,7 +15790,8 @@ function AverageWidthFrame()
15772
15790
  var borderLeft=this.ChartBorder.Left;
15773
15791
 
15774
15792
  var isDrawLeft=borderLeft>10 && this.IsShowYText[0]===true && this.YTextPosition[0]!=2;
15775
- var isDrawRight=borderRight>10 && this.IsShowYText[1]===true && this.YTextPosition[1]!=2;
15793
+ //var isDrawRight=borderRight>10 && this.IsShowYText[1]===true && this.YTextPosition[1]!=2;
15794
+ var isDrawRight=this.IsShowRightHorizontal();
15776
15795
 
15777
15796
  var rightExtendLine=null; //右侧延长线
15778
15797
  var leftExtendLine=null; //左侧延长线
@@ -17764,14 +17783,16 @@ function AverageWidthFrame()
17764
17783
  var borderTop=this.ChartBorder.Top;
17765
17784
  var borderBottom=this.ChartBorder.Bottom;
17766
17785
  var isDrawLeft=borderTop>10*pixelTatio && this.IsShowYText[0]===true && this.YTextPosition[0]!=2;
17767
- var isDrawRight=borderBottom>10*pixelTatio && this.IsShowYText[1]===true && this.YTextPosition[1]!=2;
17786
+ //var isDrawRight=borderBottom>10*pixelTatio && this.IsShowYText[1]===true && this.YTextPosition[1]!=2;
17787
+ var isDrawRight=this.IsShowRightHorizontal();
17768
17788
  }
17769
17789
  else
17770
17790
  {
17771
17791
  var borderRight=this.ChartBorder.Right;
17772
17792
  var borderLeft=this.ChartBorder.Left;
17773
17793
  var isDrawLeft=borderLeft>10 && this.IsShowYText[0]===true && this.YTextPosition[0]!=2;
17774
- var isDrawRight=borderRight>10 && this.IsShowYText[1]===true && this.YTextPosition[1]!=2;
17794
+ //var isDrawRight=borderRight>10 && this.IsShowYText[1]===true && this.YTextPosition[1]!=2;
17795
+ var isDrawRight=this.IsShowRightHorizontal();
17775
17796
  }
17776
17797
 
17777
17798
  if (!isDrawRight && !isDrawLeft) return null;
@@ -22461,6 +22482,25 @@ function KLineHScreenFrame()
22461
22482
  }
22462
22483
  }
22463
22484
 
22485
+ this.IsShowRightHorizontal=function()
22486
+ {
22487
+ var pixelTatio = GetDevicePixelRatio(); //获取设备的分辨率
22488
+ var borderBottom=this.ChartBorder.Bottom;
22489
+ if (borderBottom<=10*pixelTatio) return false;
22490
+
22491
+ if (this.YTextPosition[1]==2) return false;
22492
+ if (this.IsShowYText[1]===false) return false;
22493
+
22494
+ if (this.GlobalOption && this.GlobalOption.RightHorizontal)
22495
+ {
22496
+ var item=this.GlobalOption.RightHorizontal;
22497
+ if (item.Show===false) return false;
22498
+ }
22499
+
22500
+ return true;
22501
+ }
22502
+
22503
+
22464
22504
  //画Y轴
22465
22505
  this.DrawHorizontal=function()
22466
22506
  {
@@ -22476,7 +22516,8 @@ function KLineHScreenFrame()
22476
22516
  var pixelTatio = GetDevicePixelRatio(); //获取设备的分辨率
22477
22517
 
22478
22518
  var isDrawLeft=borderTop>10*pixelTatio && this.IsShowYText[0]===true && this.YTextPosition[0]!=2;
22479
- var isDrawRight=borderBottom>10*pixelTatio && this.IsShowYText[1]===true && this.YTextPosition[1]!=2;
22519
+ //var isDrawRight=borderBottom>10*pixelTatio && this.IsShowYText[1]===true && this.YTextPosition[1]!=2;
22520
+ var isDrawRight=this.IsShowRightHorizontal();
22480
22521
 
22481
22522
  for(var i=this.HorizontalInfo.length-1; i>=0; --i) //从左往右画分割线
22482
22523
  {
@@ -47669,7 +47710,7 @@ function StockInfoExtendChartPaint()
47669
47710
  this.Canvas.textAlign="left";
47670
47711
  this.Canvas.fillText(this.Name,middle+2,y);
47671
47712
  }
47672
- ;
47713
+
47673
47714
  this.Canvas.strokeStyle=this.BorderColor;
47674
47715
  this.Canvas.moveTo(left,y);
47675
47716
  this.Canvas.lineTo(right,y);
@@ -48450,6 +48491,428 @@ function StockChip()
48450
48491
  }
48451
48492
  }
48452
48493
 
48494
+ //筹码分布手机版
48495
+ function StockChipPhone()
48496
+ {
48497
+ this.newMethod=StockChip; //派生
48498
+ this.newMethod();
48499
+ delete this.newMethod;
48500
+
48501
+ this.Name='筹码分布手机版';
48502
+ this.ClassName='StockChipPhone';
48503
+ this.ShowType=0; //0=所有筹码 手机版只支持0
48504
+
48505
+ //手机端没有按钮
48506
+ this.DrawToolbar=function(moveonPoint, mouseStatus) { }
48507
+
48508
+ this.Draw=function()
48509
+ {
48510
+ this.IsHScreen=this.ChartFrame.IsHScreen==true;
48511
+ this.PixelRatio=GetDevicePixelRatio();
48512
+ if (this.IsHScreen)
48513
+ {
48514
+ var border=this.ChartBorder.GetHScreenBorder();
48515
+ var left=ToFixedPoint(border.Left);
48516
+ var right=ToFixedPoint(border.Right);
48517
+ var top=ToFixedPoint(border.Bottom+this.Left);
48518
+ var bottom=ToFixedPoint(border.ChartHeight-2*this.PixelRatio);
48519
+ this.ClientRect={Left:left,Top:top, Right:right, Bottom:bottom};
48520
+ this.ClientRect.Width=this.ClientRect.Right-this.ClientRect.Left;
48521
+ this.ClientRect.Height=this.ClientRect.Bottom-this.ClientRect.Top;
48522
+ }
48523
+ else
48524
+ {
48525
+ var left=ToFixedPoint(this.ChartBorder.GetRight()+this.Left);
48526
+ var top=ToFixedPoint(this.ChartBorder.GetTop());
48527
+ var right=ToFixedPoint(left+this.Width-1*this.PixelRatio);
48528
+ var bottom=ToFixedPoint(this.ChartBorder.GetBottom());
48529
+ this.ClientRect={Left:left,Top:top,Right:right, Bottom:bottom};
48530
+ this.ClientRect.Width=this.ClientRect.Right-this.ClientRect.Left;
48531
+ this.ClientRect.Height=this.ClientRect.Bottom-this.ClientRect.Top;
48532
+ }
48533
+
48534
+ if (ChartData.IsTickPeriod(this.HQChart.Period))
48535
+ {
48536
+
48537
+ }
48538
+ else
48539
+ {
48540
+ if (this.CalculateChip())
48541
+ {
48542
+ this.DrawAllChip();
48543
+ if (this.ShowType==1|| this.ShowType==2) this.DrawDayChip();
48544
+
48545
+ this.CalculateCast(); //计算成本
48546
+ if (this.IsHScreen) this.DrawHScreenChipInfo();
48547
+ else this.DrawChipInfo();
48548
+ }
48549
+ }
48550
+
48551
+ this.DrawBorder();
48552
+ this.SizeChange=false;
48553
+ }
48554
+
48555
+ this.DrawAllChip=function()
48556
+ {
48557
+ var KLineFrame=this.HQChart.Frame.SubFrame[0].Frame;
48558
+ var selectPrice=this.Data.SelectData.Close;
48559
+ var aryProfitPoint=[];
48560
+ var aryNoProfitPoint=[];
48561
+ var totalVol=0,totalAmount=0,totalProfitVol=0, totalYProfitVol=0; //总的成交量, 总的成交金额, 总的盈利的成交量
48562
+ var yPrice=this.Data.YPrice;
48563
+
48564
+ var maxPrice=KLineFrame.HorizontalMax;
48565
+ var minPrice=KLineFrame.HorizontalMin;
48566
+
48567
+ var MaxVol=1;
48568
+ for(var i=0;i<this.Data.AllChip.length;++i)
48569
+ {
48570
+ var vol=this.Data.AllChip[i];
48571
+ if(!vol) continue;
48572
+ var price=(i+this.Data.MinPrice)/this.PriceZoom;
48573
+ totalVol+=vol;
48574
+ totalAmount+=price*vol;
48575
+
48576
+ if (price<yPrice) totalYProfitVol+=vol; //获利的成交量
48577
+ if (price<selectPrice) totalProfitVol+=vol; //鼠标当前位置 获利的成交量
48578
+
48579
+ if (price<=maxPrice && price>=minPrice)
48580
+ {
48581
+ if (MaxVol<vol) MaxVol=vol;
48582
+ }
48583
+ }
48584
+ this.Data.MaxVol=MaxVol; //把成交量最大值替换成 当前屏成交量最大值
48585
+
48586
+ for(var i=0;i<this.Data.AllChip.length;++i)
48587
+ {
48588
+ var vol=this.Data.AllChip[i];
48589
+ if(!vol) continue;
48590
+ var price=(i+this.Data.MinPrice)/this.PriceZoom;
48591
+ if (price>maxPrice || price<minPrice) continue;
48592
+
48593
+ if (this.IsHScreen)
48594
+ {
48595
+ var y=KLineFrame.GetYFromData(price,false);
48596
+ var x=(vol/this.Data.MaxVol)*this.ClientRect.Height+this.ClientRect.Top;
48597
+ }
48598
+ else
48599
+ {
48600
+ var y=KLineFrame.GetYFromData(price,false);
48601
+ var x=(vol/this.Data.MaxVol)*this.ClientRect.Width+this.ClientRect.Left;
48602
+ }
48603
+
48604
+ if (price<selectPrice) aryProfitPoint.push({X:x,Y:y});
48605
+ else aryNoProfitPoint.push({X:x,Y:y});
48606
+ }
48607
+
48608
+ this.Data.ChipInfo=
48609
+ {
48610
+ Vol:totalVol, AveragePrice:totalAmount/totalVol, ProfitVol:totalProfitVol,
48611
+ ProfitRate:totalVol>0?totalProfitVol/totalVol*100:0,
48612
+ YProfitRate:totalVol>0?totalYProfitVol/totalVol*100:0
48613
+ };
48614
+
48615
+ if (this.ShowType==0)
48616
+ {
48617
+ this.DrawLines(aryProfitPoint,this.ColorProfit);
48618
+ this.DrawLines(aryNoProfitPoint,this.ColorNoProfit);
48619
+ var averagePrice=this.Data.ChipInfo.AveragePrice;
48620
+ if (averagePrice>0 && averagePrice<=maxPrice && averagePrice>=minPrice)
48621
+ {
48622
+ averagePrice=averagePrice.toFixed(2);
48623
+ this.DrawAveragePriceLine(aryProfitPoint,aryNoProfitPoint,KLineFrame.GetYFromData(averagePrice),this.ColorAveragePrice);
48624
+ }
48625
+ }
48626
+ else //在火焰山模式下, 筹码用一个颜色
48627
+ {
48628
+ this.DrawLines(aryProfitPoint,this.ColorBG);
48629
+ this.DrawLines(aryNoProfitPoint,this.ColorBG);
48630
+ }
48631
+ }
48632
+
48633
+ this.DrawLines=function(aryPoint,color)
48634
+ {
48635
+ if (!IFrameSplitOperator.IsNonEmptyArray(aryPoint)) return;
48636
+
48637
+ this.Canvas.strokeStyle=color;
48638
+ this.Canvas.beginPath();
48639
+ for(var i =0; i<aryPoint.length; ++i)
48640
+ {
48641
+ var item=aryPoint[i];
48642
+ if (this.IsHScreen)
48643
+ {
48644
+ this.Canvas.moveTo(item.Y,this.ClientRect.Top);
48645
+ this.Canvas.lineTo(item.Y,item.X);
48646
+ }
48647
+ else
48648
+ {
48649
+ this.Canvas.moveTo(this.ClientRect.Left,item.Y);
48650
+ this.Canvas.lineTo(item.X,item.Y);
48651
+ }
48652
+
48653
+ }
48654
+ this.Canvas.stroke();
48655
+ }
48656
+
48657
+ this.DrawAveragePriceLine=function(aryProfitPoint,aryNoProfitPoint,y,color)
48658
+ {
48659
+ for(var i=0; i<aryProfitPoint.length; ++i)
48660
+ {
48661
+ var item=aryProfitPoint[i];
48662
+ if (item.Y==y)
48663
+ {
48664
+ this.Canvas.strokeStyle=color;
48665
+ this.Canvas.beginPath();
48666
+ if (this.IsHScreen)
48667
+ {
48668
+ this.Canvas.moveTo(item.Y,this.ClientRect.Top);
48669
+ this.Canvas.lineTo(item.Y,item.X);
48670
+ }
48671
+ else
48672
+ {
48673
+ this.Canvas.moveTo(this.ClientRect.Left,item.Y);
48674
+ this.Canvas.lineTo(item.X,item.Y);
48675
+ }
48676
+
48677
+ this.Canvas.stroke();
48678
+ return;
48679
+ }
48680
+ }
48681
+
48682
+ for(var i=0; i<aryNoProfitPoint.length; ++i)
48683
+ {
48684
+ var item=aryNoProfitPoint[i];
48685
+ if (item.Y==y)
48686
+ {
48687
+ this.Canvas.strokeStyle=color;
48688
+ this.Canvas.beginPath();
48689
+ if (this.IsHScreen)
48690
+ {
48691
+ this.Canvas.moveTo(item.Y,this.ClientRect.Top);
48692
+ this.Canvas.lineTo(item.Y,item.X);
48693
+ }
48694
+ else
48695
+ {
48696
+ this.Canvas.moveTo(this.ClientRect.Left,item.Y);
48697
+ this.Canvas.lineTo(item.X,item.Y);
48698
+ }
48699
+ this.Canvas.stroke();
48700
+ return;
48701
+ }
48702
+ }
48703
+ }
48704
+
48705
+ this.GetChipInfoTitle=function()
48706
+ {
48707
+ var aryText=[]; //从底部往上
48708
+
48709
+ if (ChartData.IsDayPeriod(this.HQChart.Period, true))
48710
+ {
48711
+ var item={ Title:"日期:", Text:IFrameSplitOperator.FormatDateString(this.Data.SelectData.Date) };
48712
+ aryText.push(item);
48713
+ }
48714
+ else if (ChartData.IsMinutePeriod(this.HQChart.Period, true))
48715
+ {
48716
+ var item={ Title:`${IFrameSplitOperator.FormatDateString(this.Data.SelectData.Date)} ${IFrameSplitOperator.FormatTimeString(this.Data.SelectData.Time, "HH:MM")}` };
48717
+ aryText.push(item);
48718
+ }
48719
+
48720
+ var item={ Title:"集中度:", Text:"--.--%", };
48721
+ if (IFrameSplitOperator.IsNonEmptyArray(this.Data.Cast)) item.Text=`${this.Data.Cast[0].Rate.toFixed(2)}%`;
48722
+ aryText.push(item);
48723
+
48724
+ var item={ Title:"90%成本:", Text:"--.--", };
48725
+ if (IFrameSplitOperator.IsNonEmptyArray(this.Data.Cast)) item.Text=`${this.Data.Cast[0].MinPrice.toFixed(2)}-${this.Data.Cast[0].MaxPrice.toFixed(2)}`;
48726
+ aryText.push(item);
48727
+
48728
+
48729
+ var item={ Title:"平均成本::", Text:"--.--", };
48730
+ if (this.Data.ChipInfo && IFrameSplitOperator.IsNumber(this.Data.ChipInfo.AveragePrice)) item.Text=`${this.Data.ChipInfo.AveragePrice.toFixed(2)}`;
48731
+
48732
+ if (IFrameSplitOperator.IsNumber(this.Data.YPrice) && IFrameSplitOperator.IsNumber(this.Data.ChipInfo.YProfitRate))
48733
+ {
48734
+ var item={ Title:`${this.Data.YPrice.toFixed(2)}获利:`, Text:`${this.Data.ChipInfo.YProfitRate.toFixed(2)}%` };
48735
+ aryText.push(item);
48736
+ }
48737
+
48738
+ if (this.IsHScreen) //横屏直接就显示数值 画进度条太麻烦了
48739
+ {
48740
+ var item={ Title:"获利比例:", Text: `${this.Data.ChipInfo.ProfitRate.toFixed(2)}%`};
48741
+ aryText.push(item);
48742
+ }
48743
+ else
48744
+ {
48745
+ var item={ Title:"获利比例:", Type:1 };
48746
+ aryText.push(item);
48747
+ }
48748
+
48749
+ return aryText;
48750
+ }
48751
+
48752
+ this.DrawHScreenChipInfo=function()
48753
+ {
48754
+ var aryText=this.GetChipInfoTitle();
48755
+ if (!IFrameSplitOperator.IsNonEmptyArray(aryText)) return;
48756
+
48757
+ this.Canvas.font=this.Font;
48758
+ this.Canvas.fillStyle=this.InfoColor;
48759
+ this.Canvas.textBaseline='bottom';
48760
+ this.Canvas.textAlign='left';
48761
+
48762
+ var top=this.ClientRect.Top+2*this.PixelRatio;
48763
+ var left=this.ClientRect.Left+2*this.PixelRatio;
48764
+ var bottom=this.ClientRect.Bottom;
48765
+ var lineHeight=this.LineHeight*GetDevicePixelRatio();
48766
+
48767
+ this.Canvas.save();
48768
+ this.Canvas.translate(left, top);
48769
+ this.Canvas.rotate(90 * Math.PI / 180);
48770
+
48771
+ var yText=0, xText=0;
48772
+ for(var i=0;i<aryText.length;++i)
48773
+ {
48774
+ var item=aryText[i];
48775
+ yText=0;
48776
+ var textColor=item.TitleColor;
48777
+ if (item.TitleColor) textColor=item.TitleColor;
48778
+ this.Canvas.fillStyle=textColor;
48779
+ this.Canvas.fillText(item.Title,yText,xText);
48780
+ var textWidth=this.Canvas.measureText(item.Title).width+4*this.PixelRatio;
48781
+ var yText=textWidth;
48782
+
48783
+ if (item.Text)
48784
+ {
48785
+ var textColor=item.TitleColor;
48786
+ if (item.TextColor) textColor=item.TextColor;
48787
+ this.Canvas.fillStyle=textColor;
48788
+ this.Canvas.fillText(item.Text,yText,xText);
48789
+ }
48790
+
48791
+ xText-=lineHeight;
48792
+ }
48793
+
48794
+
48795
+ this.Canvas.restore();
48796
+ }
48797
+
48798
+ this.DrawChipInfo=function()
48799
+ {
48800
+ var aryText=this.GetChipInfoTitle();
48801
+ if (!IFrameSplitOperator.IsNonEmptyArray(aryText)) return;
48802
+
48803
+ var bottom=this.ClientRect.Top+this.ClientRect.Height-1;
48804
+ var left=this.ClientRect.Left+2;
48805
+ var right=this.ClientRect.Left+this.ClientRect.Width;
48806
+
48807
+ this.Canvas.font=this.Font;
48808
+ this.Canvas.fillStyle=this.InfoColor;
48809
+ this.Canvas.textBaseline='bottom';
48810
+ this.Canvas.textAlign='left';
48811
+
48812
+ var lineHeight=this.LineHeight*GetDevicePixelRatio();
48813
+ var yText=bottom;
48814
+ for(var i=0;i<aryText.length;++i)
48815
+ {
48816
+ var item=aryText[i];
48817
+
48818
+ var textColor=item.TitleColor;
48819
+ if (item.TitleColor) textColor=item.TitleColor;
48820
+ this.Canvas.fillStyle=textColor;
48821
+ this.Canvas.fillText(item.Title,left,yText);
48822
+ var textWidth=this.Canvas.measureText(item.Title).width+4;
48823
+ var xText=left+textWidth;
48824
+
48825
+ if (item.Text)
48826
+ {
48827
+ var textColor=item.TitleColor;
48828
+ if (item.TextColor) textColor=item.TextColor;
48829
+ this.Canvas.fillStyle=textColor;
48830
+ this.Canvas.fillText(item.Text,xText,yText);
48831
+ }
48832
+
48833
+ if (item.Type==1)
48834
+ {
48835
+ var barLeft=left+textWidth+2;
48836
+ var barWidth=(right-5-barLeft);
48837
+ this.Canvas.strokeStyle=this.ColorNoProfit;
48838
+ this.Canvas.strokeRect(barLeft,yText-lineHeight,barWidth,lineHeight);
48839
+ this.Canvas.strokeStyle=this.ColorProfit;
48840
+ this.Canvas.strokeRect(barLeft,yText-lineHeight,barWidth*(this.Data.ChipInfo.ProfitRate/100),lineHeight);
48841
+ var text=this.Data.ChipInfo.ProfitRate.toFixed(2)+'%';
48842
+ this.Canvas.textAlign='center';
48843
+ this.Canvas.fillText(text,barLeft+barWidth/2,yText);
48844
+ }
48845
+
48846
+ yText-=lineHeight;
48847
+ }
48848
+ }
48849
+
48850
+ this.DrawDayChip=function()
48851
+ {
48852
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.Data.DayChip)) return;
48853
+
48854
+ var KLineFrame=this.HQChart.Frame.SubFrame[0].Frame;
48855
+ for(var i=0;i<this.Data.DayChip.length;++i)
48856
+ {
48857
+ var aryPoint=[];
48858
+ var chipData=this.Data.DayChip[i].Chip;
48859
+ if (!chipData) continue;
48860
+ var totalVol=0;
48861
+ for(var j=0;j<chipData.length;++j)
48862
+ {
48863
+ var vol=chipData[j];
48864
+ if(!vol) continue;
48865
+ totalVol+=vol;
48866
+ var price=(j+this.Data.MinPrice)/100;
48867
+ if (this.IsHScreen)
48868
+ {
48869
+ var y=KLineFrame.GetYFromData(price);
48870
+ var x=(vol/this.Data.MaxVol)*this.ClientRect.Height+this.ClientRect.Top;
48871
+ }
48872
+ else
48873
+ {
48874
+ var y=KLineFrame.GetYFromData(price);
48875
+ var x=(vol/this.Data.MaxVol)*this.ClientRect.Width+this.ClientRect.Left;
48876
+ }
48877
+
48878
+ aryPoint.push({X:x,Y:y});
48879
+ }
48880
+ this.Data.DayChip[i].Vol=totalVol;
48881
+ this.DrawArea(aryPoint,this.Data.DayChip[i].Color);
48882
+ }
48883
+ }
48884
+
48885
+ this.DrawArea=function(aryPoint,color)
48886
+ {
48887
+ if (!IFrameSplitOperator.IsNonEmptyArray(aryPoint)) return;
48888
+
48889
+ this.Canvas.fillStyle=color;
48890
+ this.Canvas.beginPath();
48891
+ if (this.IsHScreen)
48892
+ {
48893
+ this.Canvas.moveTo(aryPoint[0].Y,this.ClientRect.Top);
48894
+ for(var i=0; i<aryPoint.length; ++i)
48895
+ {
48896
+ var item=aryPoint[i];
48897
+ this.Canvas.lineTo(item.Y,item.X);
48898
+ }
48899
+ this.Canvas.lineTo(aryPoint[aryPoint.length-1].Y,this.ClientRect.Top);
48900
+ }
48901
+ else
48902
+ {
48903
+ this.Canvas.moveTo(this.ClientRect.Left,aryPoint[0].Y);
48904
+ for(var i=0; i<aryPoint.length; ++i)
48905
+ {
48906
+ var item=aryPoint[i];
48907
+ this.Canvas.lineTo(item.X,item.Y);
48908
+ }
48909
+ this.Canvas.lineTo(this.ClientRect.Left,aryPoint[aryPoint.length-1].Y);
48910
+ }
48911
+
48912
+ this.Canvas.fill();
48913
+ }
48914
+ }
48915
+
48453
48916
  //窗口分割
48454
48917
  function FrameSplitPaint()
48455
48918
  {
@@ -80980,12 +81443,59 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
80980
81443
  this.Draw();
80981
81444
  }
80982
81445
 
81446
+ //获取筹码图 className=指定筹码类名 否则就查询所有
81447
+ this.GetStockChipChart=function(className)
81448
+ {
81449
+ if (className)
81450
+ return this.GetExtendChartByClassName(className);
81451
+
81452
+ var chart=this.GetExtendChartByClassName('StockChip');
81453
+ if (chart) return chart;
81454
+
81455
+ chart=this.GetExtendChartByClassName("StockChipPhone");
81456
+ return chart;
81457
+ }
81458
+
81459
+ this.DeleteStockChipChart=function()
81460
+ {
81461
+ var stockChip=this.GetStockChipChart();
81462
+ if (!stockChip) return;
81463
+
81464
+ var chipWidth=stockChip.Chart.Width;
81465
+ this.DeleteExtendChart(stockChip);
81466
+ this.Frame.ChartBorder.Right-=chipWidth;
81467
+ if (stockChip.Chart.ClassName=="StockChipPhone")
81468
+ {
81469
+ this.GlobalOption.RightHorizontal.Show=true;
81470
+ this.Frame.ResetXYSplit();
81471
+ }
81472
+ this.SetSizeChange(true);
81473
+ this.Draw();
81474
+ }
81475
+
81476
+ this.CreateStockChipPhone=function(option)
81477
+ {
81478
+ var chart=new StockChipPhone();
81479
+ chart.Canvas=this.Canvas;
81480
+ chart.ChartBorder=this.Frame.ChartBorder;
81481
+ chart.ChartFrame=this.Frame;
81482
+ chart.HQChart=this;
81483
+ chart.Left=this.Frame.ChartBorder.Right; //左边间距使用当前框架间距
81484
+ chart.SetOption(option);
81485
+ this.ExtendChartPaint.push(chart);
81486
+ this.Frame.ChartBorder.Right+=chart.Width; //创建筹码需要增加右边的间距
81487
+ this.GlobalOption.RightHorizontal.Show=false;
81488
+
81489
+ return chart;
81490
+ }
81491
+
80983
81492
  this.CreateExtendChart=function(name, option) //创建扩展图形
80984
81493
  {
80985
81494
  var chart;
80986
81495
  switch(name)
80987
81496
  {
80988
81497
  case '筹码分布':
81498
+ case "StockChip":
80989
81499
  chart=new StockChip();
80990
81500
  chart.Canvas=this.Canvas;
80991
81501
  chart.ChartBorder=this.Frame.ChartBorder;
@@ -80996,6 +81506,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
80996
81506
  this.ExtendChartPaint.push(chart);
80997
81507
  this.Frame.ChartBorder.Right+=chart.Width; //创建筹码需要增加右边的间距
80998
81508
  return chart;
81509
+ case "StockChipPhone":
81510
+ return this.CreateStockChipPhone(option);
80999
81511
  case 'KLineTooltip':
81000
81512
  if (option.Create && typeof(option.Create)=='function') chart=option.Create();
81001
81513
  else chart=new KLineTooltipPaint();
@@ -82169,7 +82681,9 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
82169
82681
 
82170
82682
  var bBGSpit=false, bShowStockChip=false;
82171
82683
  if (this.GetExtendChartByClassName("SessionBreaksPaint")) bBGSpit=true;
82172
- if (this.GetExtendChartByClassName('StockChip')) bShowStockChip=true; //筹码
82684
+ if (this.GetStockChipChart()) bShowStockChip=true; //筹码
82685
+ var stockChipConfig={Name:'StockChip', ShowType:1, Width:230 };
82686
+ //var stockChipConfig={Name:'StockChipPhone', Width:150 }; //手机版筹码
82173
82687
 
82174
82688
  var bShowCorss=false; //十字光标十字线
82175
82689
  if (this.ChartCorssCursor) bShowCorss=this.ChartCorssCursor.IsShowCorss;
@@ -82344,7 +82858,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
82344
82858
 
82345
82859
  { Name:"画图工具", Data:{ ID:JSCHART_MENU_ID.CMD_SHOW_DRAWTOOL_ID, Args:[]}, Checked:this.IsShowDrawToolDialog() },
82346
82860
 
82347
- { Name:"移动筹码图", Data:{ ID:bShowStockChip?JSCHART_MENU_ID.CMD_HIDE_STOCKCHIP_ID:JSCHART_MENU_ID.CMD_SHOW_STOCKCHIP_ID, Args:[]}, Checked:bShowStockChip},
82861
+ { Name:"移动筹码图", Data:{ ID:bShowStockChip?JSCHART_MENU_ID.CMD_HIDE_STOCKCHIP_ID:JSCHART_MENU_ID.CMD_SHOW_STOCKCHIP_ID, Args:[stockChipConfig.Name, stockChipConfig]}, Checked:bShowStockChip},
82348
82862
 
82349
82863
  { Name:"十字光标线", Data:{ ID:JSCHART_MENU_ID.CMD_SHOW_CORSS_LINE_ID, Args:[!bShowCorss]}, Checked:bShowCorss },
82350
82864
 
@@ -91827,6 +92341,8 @@ function KLineChartHScreenContainer(uielement)
91827
92341
  frame.ChartBorder=border;
91828
92342
  frame.Identify=i; //窗口序号
91829
92343
  frame.RightSpaceCount=this.RightSpaceCount; //右边
92344
+ frame.GetEventCallback=(id)=> { return this.GetEventCallback(id); };
92345
+ frame.GlobalOption=this.GlobalOption;
91830
92346
 
91831
92347
  frame.HorizontalMax=20;
91832
92348
  frame.HorizontalMin=10;
@@ -91837,6 +92353,7 @@ function KLineChartHScreenContainer(uielement)
91837
92353
  frame.YSplitOperator.FrameSplitData=this.FrameSplitData.get('price');
91838
92354
  frame.YSplitOperator.FrameSplitData2=this.FrameSplitData.get('double');
91839
92355
  frame.YSplitOperator.GetEventCallback=(id)=> { return this.GetEventCallback(id); }
92356
+ frame.YSplitOperator.HQChart=this;
91840
92357
  //主图上下间距
91841
92358
  var pixelTatio = GetDevicePixelRatio(); //获取设备的分辨率
91842
92359
  border.TopSpace=12*pixelTatio;
@@ -91847,6 +92364,8 @@ function KLineChartHScreenContainer(uielement)
91847
92364
  frame.YSplitOperator=new FrameSplitY();
91848
92365
  frame.YSplitOperator.LanguageID=this.LanguageID;
91849
92366
  frame.YSplitOperator.FrameSplitData=this.FrameSplitData.get('double');
92367
+ frame.YSplitOperator.GetEventCallback=(id)=> { return this.GetEventCallback(id); };
92368
+ frame.YSplitOperator.HQChart=this;
91850
92369
  //frame.IsLocked = true;
91851
92370
  }
91852
92371
 
@@ -91880,6 +92399,39 @@ function KLineChartHScreenContainer(uielement)
91880
92399
  this.Frame.SubFrame[i]=subFrame;
91881
92400
  }
91882
92401
  }
92402
+
92403
+ this.CreateStockChipPhone=function(option)
92404
+ {
92405
+ var chart=new StockChipPhone();
92406
+ chart.Canvas=this.Canvas;
92407
+ chart.ChartBorder=this.Frame.ChartBorder;
92408
+ chart.ChartFrame=this.Frame;
92409
+ chart.HQChart=this;
92410
+ chart.Left=this.Frame.ChartBorder.Bottom; //左边间距使用当前框架间距
92411
+ chart.SetOption(option);
92412
+ this.ExtendChartPaint.push(chart);
92413
+ this.Frame.ChartBorder.Bottom+=chart.Width; //创建筹码需要增加右边的间距
92414
+ this.GlobalOption.RightHorizontal.Show=false;
92415
+
92416
+ return chart;
92417
+ }
92418
+
92419
+ this.DeleteStockChipChart=function()
92420
+ {
92421
+ var stockChip=this.GetStockChipChart();
92422
+ if (!stockChip) return;
92423
+
92424
+ var chipWidth=stockChip.Chart.Width;
92425
+ this.DeleteExtendChart(stockChip);
92426
+ this.Frame.ChartBorder.Bottom-=chipWidth;
92427
+ if (stockChip.Chart.ClassName=="StockChipPhone")
92428
+ {
92429
+ this.GlobalOption.RightHorizontal.Show=true;
92430
+ this.Frame.ResetXYSplit();
92431
+ }
92432
+ this.SetSizeChange(true);
92433
+ this.Draw();
92434
+ }
91883
92435
  }
91884
92436
 
91885
92437
 
@@ -129240,6 +129792,8 @@ function JSReportChartContainer(uielement)
129240
129792
 
129241
129793
  this.UIOnMounseOut=function(e)
129242
129794
  {
129795
+ this.HideMinuteChartTooltip();
129796
+
129243
129797
  var bDraw=false;
129244
129798
  var tabChart=this.GetTabChart();
129245
129799
  if (tabChart && tabChart.MoveOnTabIndex>=0)
@@ -129264,6 +129818,8 @@ function JSReportChartContainer(uielement)
129264
129818
 
129265
129819
  this.UIOnMouseleave=function(e)
129266
129820
  {
129821
+ this.HideMinuteChartTooltip();
129822
+
129267
129823
  var tabChart=this.GetTabChart();
129268
129824
  if (tabChart && tabChart.MoveOnTabIndex>=0)
129269
129825
  {
@@ -139531,7 +140087,7 @@ function ScrollBarBGChart()
139531
140087
 
139532
140088
 
139533
140089
 
139534
- var HQCHART_VERSION="1.1.14164";
140090
+ var HQCHART_VERSION="1.1.14178";
139535
140091
 
139536
140092
  function PrintHQChartVersion()
139537
140093
  {