hqchart 1.1.14125 → 1.1.14133

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.
@@ -7015,6 +7015,13 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7015
7015
  this.DialogModifyIndexParam; //指标参数修改
7016
7016
 
7017
7017
 
7018
+ this.GetVolUnit=function() //成交量单位
7019
+ {
7020
+ var upperSymbol=this.Symbol?this.Symbol.toUpperCase():null;
7021
+ var unit=MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol);
7022
+ return unit;
7023
+ }
7024
+
7018
7025
  this.ClearStockCache=function()
7019
7026
  {
7020
7027
  this.StockCache.Data=null;
@@ -35358,6 +35365,13 @@ function ChartMinuteVolumBar()
35358
35365
  return this.DrawLinePoint({ MinuteVolBar:true });
35359
35366
  }
35360
35367
 
35368
+ this.GetVolUnit=function()
35369
+ {
35370
+ var upperSymbol=this.Symbol?this.Symbol.toUpperCase():null;
35371
+ var unit=MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol);
35372
+ return unit;
35373
+ }
35374
+
35361
35375
  this.Draw=function()
35362
35376
  {
35363
35377
  var isHScreen = (this.ChartFrame.IsHScreen === true);
@@ -35380,9 +35394,11 @@ function ChartMinuteVolumBar()
35380
35394
  var yBottom=this.ChartFrame.GetYFromData(0);
35381
35395
  var yPrice=this.YClose; //上一分钟的价格
35382
35396
  var data=this.Data;
35397
+
35383
35398
  var bShowColorBar=MARKET_SUFFIX_NAME.IsShowMinuteColorVolBar(this.Symbol);
35384
-
35385
35399
  if (bShowColorBar) this.Canvas.strokeStyle=this.CustomColor;
35400
+ var unit=this.GetVolUnit();
35401
+
35386
35402
  for(var i=data.DataOffset,j=0;i<data.Data.length && j<xPointCount;++i,++j)
35387
35403
  {
35388
35404
  var item = data.Data[i];
@@ -35390,7 +35406,7 @@ function ChartMinuteVolumBar()
35390
35406
  if (!item) continue;
35391
35407
  var price=null;
35392
35408
 
35393
- vol=item.Vol;
35409
+ vol=item.Vol/unit;
35394
35410
  price=item.Close;
35395
35411
 
35396
35412
  if (!vol) continue;
@@ -35497,6 +35513,7 @@ function ChartMinuteVolumBar()
35497
35513
  var isHScreen=(this.ChartFrame.IsHScreen===true);
35498
35514
  var yPrice=this.YClose; //上一分钟的价格
35499
35515
  var yBottom=this.ChartFrame.GetYFromData(0);
35516
+ var unit=this.GetVolUnit();
35500
35517
  if (callAutionData.Ver==1.0)
35501
35518
  {
35502
35519
  for(var i in callAutionData.Data)
@@ -35507,12 +35524,12 @@ function ChartMinuteVolumBar()
35507
35524
  if (isBeforeOpen)
35508
35525
  {
35509
35526
  var x=this.ChartFrame.GetLeftExtendXFromIndex(i,callAutionData);
35510
- var y=this.ChartFrame.GetLeftExtendYFromData(item.Vol[0]);
35527
+ var y=this.ChartFrame.GetLeftExtendYFromData(item.Vol[0]/unit);
35511
35528
  }
35512
35529
  else
35513
35530
  {
35514
35531
  var x=this.ChartFrame.GetRightExtendXFromIndex(i,callAutionData);
35515
- var y=this.ChartFrame.GetRightExtendYFromData(item.Vol[0]);
35532
+ var y=this.ChartFrame.GetRightExtendYFromData(item.Vol[0]/unit);
35516
35533
  }
35517
35534
 
35518
35535
 
@@ -35545,13 +35562,13 @@ function ChartMinuteVolumBar()
35545
35562
  if (isBeforeOpen)
35546
35563
  {
35547
35564
  var x=this.ChartFrame.GetLeftExtendXFromIndex(i,callAutionData);
35548
- var y=this.ChartFrame.GetLeftExtendYFromData(item.Vol[0],false, { Range:range });
35565
+ var y=this.ChartFrame.GetLeftExtendYFromData(item.Vol[0]/unit,false, { Range:range });
35549
35566
  }
35550
35567
  else
35551
35568
  {
35552
35569
  var x=this.ChartFrame.GetRightExtendXFromIndex(i,callAutionData);
35553
- if (this.ShareAfterVol==1) var y=this.ChartFrame.GetYFromData(item.Vol[0]);
35554
- else var y=this.ChartFrame.GetRightExtendYFromData(item.Vol[0],false, { Range:range });
35570
+ if (this.ShareAfterVol==1) var y=this.ChartFrame.GetYFromData(item.Vol[0]/unit);
35571
+ else var y=this.ChartFrame.GetRightExtendYFromData(item.Vol[0]/unit,false, { Range:range });
35555
35572
  }
35556
35573
 
35557
35574
  this.Canvas.strokeStyle = this.GetBarColor(item.ColorID);
@@ -35575,13 +35592,13 @@ function ChartMinuteVolumBar()
35575
35592
  if (isBeforeOpen)
35576
35593
  {
35577
35594
  var x=this.ChartFrame.GetLeftExtendXFromIndex(i,callAutionData);
35578
- var y=this.ChartFrame.GetLeftExtendYFromData(item.Vol[1],false, { Range:range });
35595
+ var y=this.ChartFrame.GetLeftExtendYFromData(item.Vol[1]/unit,false, { Range:range });
35579
35596
  }
35580
35597
  else
35581
35598
  {
35582
35599
  var x=this.ChartFrame.GetRightExtendXFromIndex(i,callAutionData);
35583
- if (this.ShareAfterVol==1) var y=this.ChartFrame.GetYFromData(item.Vol[1]);
35584
- else var y=this.ChartFrame.GetRightExtendYFromData(item.Vol[1],false, { Range:range });
35600
+ if (this.ShareAfterVol==1) var y=this.ChartFrame.GetYFromData(item.Vol[1]/unit);
35601
+ else var y=this.ChartFrame.GetRightExtendYFromData(item.Vol[1]/unit,false, { Range:range });
35585
35602
  }
35586
35603
 
35587
35604
  this.Canvas.strokeStyle = this.GetBarColor(item.ColorID);
@@ -35630,6 +35647,7 @@ function ChartMinuteVolumBar()
35630
35647
 
35631
35648
  this.GetMaxMin=function()
35632
35649
  {
35650
+ var unit=this.GetVolUnit();
35633
35651
  var xPointCount=this.ChartFrame.XPointCount;
35634
35652
  var start=this.Data.DataOffset;
35635
35653
  if (this.ChartFrame.GlobalOption && this.ChartFrame.GlobalOption.IsValueFullRange===true)
@@ -35646,10 +35664,9 @@ function ChartMinuteVolumBar()
35646
35664
  {
35647
35665
  var item = this.Data.Data[i];
35648
35666
  if (!item || !item.Vol) continue;
35649
- if (range.Max == null) range.Max = item.Vol;
35650
- if (range.Max < item.Vol) range.Max = item.Vol;
35667
+ var value=item.Vol/unit;
35668
+ if (range.Max == null || range.Max < value) range.Max = value;
35651
35669
  }
35652
-
35653
35670
 
35654
35671
  if (this.ShareAfterVol==1)
35655
35672
  {
@@ -39386,6 +39403,136 @@ function ChartDrawNumber()
39386
39403
  }
39387
39404
  }
39388
39405
 
39406
+ function ChartDrawLastBarText()
39407
+ {
39408
+ this.newMethod=IChartPainting; //派生
39409
+ this.newMethod();
39410
+ delete this.newMethod;
39411
+
39412
+ this.ClassName='ChartDrawLastBarText'; //类名
39413
+ this.LastBarItem=null;
39414
+
39415
+ this.TextSize=
39416
+ {
39417
+ Max: g_JSChartResource.DRAWICON.Text.MaxSize, Min:g_JSChartResource.DRAWICON.Text.MinSize, //字体的最大最小值
39418
+ Zoom:{ Type:g_JSChartResource.DRAWICON.Text.Zoom.Type , Value:g_JSChartResource.DRAWICON.Text.Zoom.Value }, //放大倍数
39419
+ FontName:g_JSChartResource.DRAWICON.Text.FontName,
39420
+ YOffset:g_JSChartResource.DRAWICON.Text.YOffset
39421
+ }
39422
+
39423
+ this.IconSize=
39424
+ {
39425
+ Max: g_JSChartResource.DRAWICON.Icon.MaxSize, Min:g_JSChartResource.DRAWICON.Icon.MinSize, //图标的最大最小值
39426
+ Zoom:{ Type:g_JSChartResource.DRAWICON.Icon.Zoom.Type , Value:g_JSChartResource.DRAWICON.Icon.Zoom.Value }, //放大倍数
39427
+ YOffset:g_JSChartResource.DRAWICON.Icon.YOffset //Direction==2的向下偏移
39428
+ };
39429
+
39430
+ this.IconFamily=g_JSChartResource.DRAWLASTICON.Family;
39431
+
39432
+ this.ReloadResource=function(resource)
39433
+ {
39434
+ this.TextSize=
39435
+ {
39436
+ Max: g_JSChartResource.DRAWTEXT.MaxSize, Min:g_JSChartResource.DRAWTEXT.MinSize, //字体的最大最小值
39437
+ Zoom:{ Type:g_JSChartResource.DRAWTEXT.Zoom.Type , Value:g_JSChartResource.DRAWTEXT.Zoom.Value }, //放大倍数
39438
+ FontName:g_JSChartResource.DRAWTEXT.FontName,
39439
+ };
39440
+
39441
+ this.IconSize=
39442
+ {
39443
+ Max: g_JSChartResource.DRAWICON.Icon.MaxSize, Min:g_JSChartResource.DRAWICON.Icon.MinSize, //图标的最大最小值
39444
+ Zoom:{ Type:g_JSChartResource.DRAWICON.Icon.Zoom.Type , Value:g_JSChartResource.DRAWICON.Icon.Zoom.Value }, //放大倍数
39445
+ };
39446
+
39447
+ this.IconFamily=g_JSChartResource.DRAWLASTICON.Family;
39448
+ }
39449
+
39450
+ this.Draw=function()
39451
+ {
39452
+ if (!this.IsShow || this.ChartFrame.IsMinSize || !this.IsVisible) return;
39453
+ if (this.IsShowIndexTitleOnly()) return;
39454
+ if (this.IsHideScriptIndex()) return;
39455
+ if (!this.LastBarItem) return;
39456
+ if (!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return;
39457
+
39458
+ this.IsHScreen=(this.ChartFrame.IsHScreen===true);
39459
+ var xPointCount=this.ChartFrame.XPointCount;
39460
+ var offset=this.Data.DataOffset;
39461
+ var index=offset+xPointCount;
39462
+ if (index<this.Data.Data.length) return;
39463
+ var lastIndex=(this.Data.Data.length-1)-offset;
39464
+ var x=this.ChartFrame.GetXFromIndex(lastIndex);
39465
+ var item=this.LastBarItem;
39466
+
39467
+ if (item.Value=="Top") y=top;
39468
+ else if (item.Value=="Bottom") y=bottom;
39469
+ else y=this.ChartFrame.GetYFromData(item.Value, false);
39470
+ if (IFrameSplitOperator.IsNumber(item.YOffset)) y+=item.YOffset; //Y轴偏移
39471
+ if (IFrameSplitOperator.IsNumber(item.XOffset)) x+=item.XOffset;
39472
+
39473
+ this.Canvas.save();
39474
+ this.ClipClient(this.IsHScreen);
39475
+
39476
+ //文本
39477
+ if (item.Text) this.DrawLastText(item, x, y);
39478
+ else if (item.Icon) this.DrawLastIcon(item, x, y);
39479
+
39480
+ this.Canvas.restore();
39481
+ }
39482
+
39483
+ this.DrawLastText=function(item,x,y)
39484
+ {
39485
+ var dataWidth=this.ChartFrame.DataWidth;
39486
+ var distanceWidth=this.ChartFrame.DistanceWidth;
39487
+ var font=this.GetDynamicFont(dataWidth,distanceWidth,this.TextSize.Max,this.TextSize.Min,this.TextSize.Zoom,this.TextSize.FontName);
39488
+
39489
+ var textBaseline='bottom';
39490
+ if (item.TextBaseline) textBaseline=item.TextBaseline;
39491
+ var textAlign="center";
39492
+ if (item.TextAlign) textAlign=item.TextAlign;
39493
+
39494
+ this.Canvas.font=font;
39495
+ this.Canvas.textBaseline=textBaseline;
39496
+ this.Canvas.textAlign=textAlign;
39497
+ this.Canvas.fillStyle = item.Color;
39498
+ this.Canvas.fillText(item.Text, x, y);
39499
+ }
39500
+
39501
+ this.DrawLastIcon=function(item,x,y)
39502
+ {
39503
+ var dataWidth=this.ChartFrame.DataWidth;
39504
+ var distanceWidth=this.ChartFrame.DistanceWidth;
39505
+ var iconSize=this.GetDynamicIconSize(dataWidth,distanceWidth,this.IconSize.Max,this.IconSize.Min,this.IconSize.Zoom);
39506
+ var font=`${iconSize}px ${this.IconFamily}`;
39507
+
39508
+ var textBaseline='bottom';
39509
+ if (item.TextBaseline) textBaseline=item.TextBaseline;
39510
+ var textAlign="center";
39511
+ if (item.TextAlign) textAlign=item.TextAlign;
39512
+
39513
+ this.Canvas.font=font;
39514
+ this.Canvas.textBaseline=textBaseline;
39515
+ this.Canvas.textAlign=textAlign;
39516
+ this.Canvas.fillStyle = item.Color;
39517
+ this.Canvas.fillText(item.Icon.Symbol, x, y);
39518
+ }
39519
+
39520
+ this.GetMaxMin=function()
39521
+ {
39522
+ var range={ Min:null, Max:null };
39523
+ if (!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return range;
39524
+ var xPointCount=this.ChartFrame.XPointCount;
39525
+ var offset=this.Data.DataOffset;
39526
+ var index=offset+xPointCount;
39527
+ if (index<this.Data.Data.length) return range;
39528
+ if (!this.LastBarItem) return range;
39529
+
39530
+ if (IFrameSplitOperator.IsNumber(this.LastBarItem.Value)) range.Max=range.Min=this.LastBarItem.Value;
39531
+
39532
+ return range;
39533
+ }
39534
+ }
39535
+
39389
39536
  //直线 水平直线 只有1个数据
39390
39537
  function ChartStraightLine()
39391
39538
  {
@@ -46589,6 +46736,7 @@ function KLineTooltipPaint()
46589
46736
  var upperSymbol;
46590
46737
  if (this.HQChart.Symbol) upperSymbol=this.HQChart.Symbol.toUpperCase();
46591
46738
  var defaultfloatPrecision=GetfloatPrecision(this.HQChart.Symbol);//价格小数位数
46739
+ var unit=MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol);
46592
46740
 
46593
46741
  var aryText=[];
46594
46742
  var result={ AryText:aryText };
@@ -46672,7 +46820,7 @@ function KLineTooltipPaint()
46672
46820
  title=g_JSChartLocalization.GetText('Tooltip-Vol',this.LanguageID);
46673
46821
  var vol=item.Vol;
46674
46822
  if (upperSymbol && MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol)) vol/=100; //A股统一转成手
46675
- text=IFrameSplitOperator.FromatIntegerString(vol,2,this.LanguageID);
46823
+ text=IFrameSplitOperator.FromatIntegerString(vol/unit,2,this.LanguageID);
46676
46824
  aryText.push({Title:title, TitleColor:this.TitleColor, Text:text, Color:this.VolColor });
46677
46825
  }
46678
46826
 
@@ -47049,6 +47197,7 @@ function MinuteTooltipPaint()
47049
47197
  if (this.HQChart.Symbol) upperSymbol=this.HQChart.Symbol.toUpperCase();
47050
47198
  var isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol); //国内期货, 纽约期货交易所
47051
47199
  var defaultfloatPrecision=GetfloatPrecision(this.HQChart.Symbol);//价格小数位数
47200
+ var unit=MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol);
47052
47201
 
47053
47202
  this.YClose=this.TitlePaint.YClose;
47054
47203
  this.YClose=item.YClose;
@@ -47115,7 +47264,7 @@ function MinuteTooltipPaint()
47115
47264
  if (IFrameSplitOperator.IsNumber(vol))
47116
47265
  {
47117
47266
  title=g_JSChartLocalization.GetText('Tooltip-Vol',this.LanguageID);
47118
- var text=IFrameSplitOperator.FromatIntegerString(vol,2,this.LanguageID);
47267
+ var text=IFrameSplitOperator.FromatIntegerString(vol/unit,2,this.LanguageID);
47119
47268
  aryText.push({Title:title, TitleColor:this.TitleColor, Text:text, Color:this.VolColor });
47120
47269
  }
47121
47270
 
@@ -47136,134 +47285,6 @@ function MinuteTooltipPaint()
47136
47285
 
47137
47286
  return result;
47138
47287
  }
47139
-
47140
- /*
47141
- this.DrawTooltipData=function(item)
47142
- {
47143
- //JSConsole.Chart.Log('[KLineTooltipPaint::DrawKLineData] ', item);
47144
- if (!this.HQChart.Symbol) return;
47145
-
47146
- var defaultfloatPrecision=GetfloatPrecision(this.HQChart.Symbol);//价格小数位数
47147
- var left=this.GetLeft()+2*GetDevicePixelRatio();
47148
- var top=this.GetTop()+3*GetDevicePixelRatio();
47149
- this.YClose=this.KLineTitlePaint.YClose;
47150
- var upperSymbol=this.HQChart.Symbol.toUpperCase();
47151
-
47152
- if (this.IsHScreen)
47153
- {
47154
- this.Canvas.save();
47155
- var x=this.GetLeft()+this.Height, y=this.GetTop();
47156
-
47157
- this.Canvas.translate(x, y);
47158
- this.Canvas.rotate(90 * Math.PI / 180);
47159
-
47160
- //x, y 作为原点
47161
- left=2*GetDevicePixelRatio();
47162
- top=3*GetDevicePixelRatio();
47163
- }
47164
-
47165
- this.Canvas.textBaseline="top";
47166
- this.Canvas.textAlign="left";
47167
- this.Canvas.font=this.Font[0];
47168
- var labelWidth=this.Canvas.measureText('擎: ').width;
47169
-
47170
- var aryDateTime=item.DateTime.split(' ');
47171
- if (aryDateTime && aryDateTime.length==2)
47172
- {
47173
- var text=IFrameSplitOperator.FormatDateString(aryDateTime[0]);
47174
- this.Canvas.fillStyle=this.TitleColor;
47175
- this.Canvas.fillText(text, left,top);
47176
-
47177
- top+=this.LineHeight;
47178
- text=IFrameSplitOperator.FormatTimeString(aryDateTime[1]);
47179
- this.Canvas.fillText(text, left,top);
47180
- }
47181
-
47182
- var close=item.Close;
47183
- var increase=item.Increase;
47184
- var vol=item.Vol;
47185
- var amount=item.Amount;
47186
- if (item.Before) //读取盘前数据
47187
- {
47188
- close=item.Before.Close;
47189
- increase=item.Before.Increase;
47190
- vol=item.Before.Vol;
47191
- amount=item.Before.Amount;
47192
- }
47193
-
47194
- //最新价格
47195
- top+=this.LineHeight;
47196
- this.Canvas.fillStyle=this.TitleColor;
47197
- text=g_JSChartLocalization.GetText('Tooltip-Price',this.LanguageID);
47198
- this.Canvas.fillText(text, left,top);
47199
- var color=this.KLineTitlePaint.GetColor(close,this.YClose);
47200
- var text=close.toFixed(defaultfloatPrecision);
47201
- this.Canvas.fillStyle=color;
47202
- this.Canvas.fillText(text,left+labelWidth,top);
47203
-
47204
- var isShowAvPrice=true;
47205
- if (item.Before) isShowAvPrice=false; //集合竞价均价
47206
- else if (MARKET_SUFFIX_NAME.IsForeignExchange(upperSymbol)) isShowAvPrice=false; //外汇没有均价
47207
- else if (MARKET_SUFFIX_NAME.IsET(upperSymbol) && !MARKET_SUFFIX_NAME.IsETShowAvPrice(upperSymbol)) isShowAvPrice=false;
47208
- else if (MARKET_SUFFIX_NAME.IsShowAvPrice && !MARKET_SUFFIX_NAME.IsShowAvPrice(upperSymbol)) isShowAvPrice=false;
47209
-
47210
- //均价
47211
- if (isShowAvPrice && IFrameSplitOperator.IsNumber(item.AvPrice) && this.IsShowAveragePrice)
47212
- {
47213
- top+=this.LineHeight;
47214
- this.Canvas.fillStyle=this.TitleColor;
47215
- text=g_JSChartLocalization.GetText('Tooltip-AvPrice',this.LanguageID);
47216
- this.Canvas.fillText(text, left,top);
47217
- var color=this.KLineTitlePaint.GetColor(item.AvPrice,this.YClose);
47218
- var text=item.AvPrice.toFixed(defaultfloatPrecision);
47219
- this.Canvas.fillStyle=color;
47220
- this.Canvas.fillText(text,left+labelWidth,top);
47221
- }
47222
-
47223
- //涨幅
47224
- top+=this.LineHeight;
47225
- this.Canvas.fillStyle=this.TitleColor;
47226
- text=g_JSChartLocalization.GetText('Tooltip-Increase',this.LanguageID);
47227
- this.Canvas.fillText(text, left,top);
47228
- var value=(close-this.YClose)/this.YClose*100;
47229
- var color = this.KLineTitlePaint.GetColor(value, 0);
47230
- var text = value.toFixed(2)+'%';
47231
- this.Canvas.fillStyle=color;
47232
- this.Canvas.fillText(text,left+labelWidth,top);
47233
-
47234
- //成交量
47235
- if (IFrameSplitOperator.IsNumber(vol))
47236
- {
47237
- this.Canvas.fillStyle=this.TitleColor;
47238
- top+=this.LineHeight;
47239
- text=g_JSChartLocalization.GetText('Tooltip-Vol',this.LanguageID);
47240
- this.Canvas.fillText(text, left,top);
47241
- var text=IFrameSplitOperator.FromatIntegerString(vol,2,this.LanguageID);
47242
- this.Canvas.fillText(text,left+labelWidth,top);
47243
- }
47244
-
47245
- //成交金额
47246
- if (IFrameSplitOperator.IsNumber(amount))
47247
- {
47248
- top+=this.LineHeight;
47249
- text=g_JSChartLocalization.GetText('Tooltip-Amount',this.LanguageID);
47250
- this.Canvas.fillText(text, left,top);
47251
- var text=IFrameSplitOperator.FormatValueString(amount,2,this.LanguageID);
47252
- this.Canvas.fillText(text,left+labelWidth,top);
47253
- }
47254
-
47255
- if (IFrameSplitOperator.IsNumber(item.Position))
47256
- {
47257
- top+=this.LineHeight;
47258
- text=g_JSChartLocalization.GetText('Tooltip-Position',this.LanguageID);
47259
- this.Canvas.fillText(text, left,top);
47260
- var text=IFrameSplitOperator.FormatValueString(item.Position,2,this.LanguageID);
47261
- this.Canvas.fillText(text,left+labelWidth,top);
47262
- }
47263
-
47264
- if (this.IsHScreen) this.Canvas.restore();
47265
- }
47266
- */
47267
47288
  }
47268
47289
 
47269
47290
  //PC端 分时图tooltip左侧固定
@@ -47419,6 +47440,7 @@ function MinuteLeftTooltipPaint()
47419
47440
  if (this.HQChart.Symbol) upperSymbol=this.HQChart.Symbol.toUpperCase();
47420
47441
  var defaultfloatPrecision=GetfloatPrecision(upperSymbol);//价格小数位数
47421
47442
  if (upperSymbol) isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol); //国内期货, 纽约期货交易所
47443
+ var unit=MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol);
47422
47444
 
47423
47445
  if (drawData.Type==0) //连续交易
47424
47446
  {
@@ -47442,7 +47464,7 @@ function MinuteLeftTooltipPaint()
47442
47464
  var titleItem=this.ForamtIncrease(item.Close,"PCTooltip-Increase");
47443
47465
  if (titleItem) aryText.push(titleItem);
47444
47466
 
47445
- var titleItem=this.FormatVol(item.Vol,'PCTooltip-Vol');
47467
+ var titleItem=this.FormatVol(item.Vol/unit,'PCTooltip-Vol');
47446
47468
  if (titleItem) aryText.push(titleItem);
47447
47469
 
47448
47470
  if (IFrameSplitOperator.IsNumber(item.Amount))
@@ -47488,10 +47510,10 @@ function MinuteLeftTooltipPaint()
47488
47510
 
47489
47511
  if (IFrameSplitOperator.IsNonEmptyArray(item.Vol))
47490
47512
  {
47491
- var titleItem=this.FormatVol(item.Vol[0],'PCTooltip-AC-Vol');
47513
+ var titleItem=this.FormatVol(item.Vol[0]/unit,'PCTooltip-AC-Vol');
47492
47514
  if (titleItem) aryText.push(titleItem);
47493
47515
 
47494
- var titleItem=this.FormatVol(item.Vol[1],'PCTooltip-AC-NotMatchVol');
47516
+ var titleItem=this.FormatVol(item.Vol[1]/unit,'PCTooltip-AC-NotMatchVol');
47495
47517
  if (titleItem) aryText.push(titleItem);
47496
47518
  }
47497
47519
  }
@@ -58151,8 +58173,8 @@ function DynamicKLineTitlePainting()
58151
58173
 
58152
58174
  if (IFrameSplitOperator.IsNumber(item.Vol)) //成交量
58153
58175
  {
58154
- var vol=item.Vol;
58155
- if (upperSymbol && MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol)) vol/=100; //A股原始单位股, 转成股
58176
+ var unit=MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol);
58177
+ var vol=item.Vol/unit;
58156
58178
  var text=g_JSChartLocalization.GetText('KTitle-Vol',this.LanguageID)+IFrameSplitOperator.FromatIntegerString(vol,2,this.LanguageID);
58157
58179
  aryText.push({ Text:text, Color:this.VolColor});
58158
58180
  }
@@ -58582,6 +58604,7 @@ function DynamicMinuteTitlePainting()
58582
58604
  var upperSymbol=this.Symbol.toUpperCase();
58583
58605
  var defaultfloatPrecision=GetfloatPrecision(this.Symbol); //价格小数位数
58584
58606
  var isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol); //国内期货, 纽约期货交易所
58607
+ var unit=MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol);
58585
58608
 
58586
58609
  var item=data.Data;
58587
58610
  var isLastOne=data.IsLastOne;
@@ -58659,7 +58682,7 @@ function DynamicMinuteTitlePainting()
58659
58682
 
58660
58683
  if (IFrameSplitOperator.IsNumber(vol))
58661
58684
  {
58662
- var text=g_JSChartLocalization.GetText('MTitle-Vol',this.LanguageID)+IFrameSplitOperator.FromatIntegerString(vol,2,this.LanguageID);
58685
+ var text=g_JSChartLocalization.GetText('MTitle-Vol',this.LanguageID)+IFrameSplitOperator.FromatIntegerString(vol/unit,2,this.LanguageID);
58663
58686
  aryText.push({Text:text, Color:this.VolColor});
58664
58687
  }
58665
58688
 
@@ -58766,7 +58789,8 @@ function DynamicMinuteTitlePainting()
58766
58789
  var aryText=[] //{ Color: Text: }
58767
58790
 
58768
58791
  var defaultfloatPrecision=GetfloatPrecision(this.Symbol);//价格小数位数
58769
-
58792
+ var upperSymbol=this.Symbol.toUpperCase();
58793
+ var unit=MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol);
58770
58794
  //股票名称
58771
58795
  if (this.IsShowName) aryText.push({Text:this.Name, Color:this.NameColor});
58772
58796
 
@@ -58818,14 +58842,14 @@ function DynamicMinuteTitlePainting()
58818
58842
  {
58819
58843
  var filedName='MTitle-AC-Vol';
58820
58844
  if (data.Ver==1.0) filedName="MTitle-Vol";
58821
- var text=g_JSChartLocalization.GetText(filedName,this.LanguageID)+IFrameSplitOperator.FromatIntegerString(item.Vol[0],2);
58845
+ var text=g_JSChartLocalization.GetText(filedName,this.LanguageID)+IFrameSplitOperator.FromatIntegerString(item.Vol[0]/unit,2);
58822
58846
  aryText.push({Text:text, Color:this.VolColor});
58823
58847
  }
58824
58848
 
58825
58849
  //未匹配量
58826
58850
  if (IFrameSplitOperator.IsNumber(item.Vol[1]) && this.CallAuctionShowTitle.has("MTitle-AC-NotMatchVol"))
58827
58851
  {
58828
- var text=g_JSChartLocalization.GetText('MTitle-AC-NotMatchVol',this.LanguageID)+IFrameSplitOperator.FromatIntegerString(item.Vol[1],2);
58852
+ var text=g_JSChartLocalization.GetText('MTitle-AC-NotMatchVol',this.LanguageID)+IFrameSplitOperator.FromatIntegerString(item.Vol[1]/unit,2);
58829
58853
  aryText.push({Text:text, Color:this.VolColor});
58830
58854
  }
58831
58855
 
@@ -73615,6 +73639,11 @@ function JSChartResource()
73615
73639
  Color:"rgb(255,165,0)"
73616
73640
  }
73617
73641
 
73642
+ this.DRAWLASTICON=
73643
+ {
73644
+ Family:'iconfont',
73645
+ }
73646
+
73618
73647
  this.POINTDOT=
73619
73648
  {
73620
73649
  Radius:2*GetDevicePixelRatio()
@@ -77216,6 +77245,9 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
77216
77245
  this.Canvas.rect(this.Frame.ChartBorder.GetLeft(),this.Frame.ChartBorder.GetTop(),this.Frame.ChartBorder.GetWidth(),this.Frame.ChartBorder.GetHeight());
77217
77246
  isInClient=this.Canvas.isPointInPath(x,y);
77218
77247
 
77248
+ //PC触摸板双指缩放时deltaY数值在[-20,20]之间
77249
+ if (IFrameSplitOperator.IsNumber(e.deltaY) && Math.abs(e.deltaY)<90) return;
77250
+
77219
77251
  var wheelValue=e.wheelDelta;
77220
77252
  if (!IFrameSplitOperator.IsObjectExist(e.wheelDelta))
77221
77253
  wheelValue=e.deltaY* -0.01;
@@ -89843,7 +89875,7 @@ MinuteChartContainer.JsonDataToBeforeOpenData=function(data)
89843
89875
  var symbol=data.stock[0].symbol;
89844
89876
  var upperSymbol=symbol.toUpperCase();
89845
89877
  var isSHSZ=MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol);
89846
-
89878
+ var unit=MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol);
89847
89879
  var yClose=data.stock[0].yclose;
89848
89880
  var preClose=data.stock[0].yclose; //前一个数据价格
89849
89881
  var stockData=data.stock[0];
@@ -89870,8 +89902,7 @@ MinuteChartContainer.JsonDataToBeforeOpenData=function(data)
89870
89902
  item.Price=jsData[1];
89871
89903
  if (!item.Price) item.Price=preClose;
89872
89904
  else preClose=item.Price;
89873
- if (isSHSZ) item.Vol[0]=jsData[2]/100; //沪深股票原始单位股
89874
- else item.Vol[0]=jsData[2];
89905
+ item.Vol[0]=jsData[2];
89875
89906
  item.Amount=jsData[3];
89876
89907
 
89877
89908
  if (IFrameSplitOperator.IsNumber(jsData[4]) && jsData[4]>19000101) //日期
@@ -89907,7 +89938,7 @@ MinuteChartContainer.JsonDataToBeforeOpenData=function(data)
89907
89938
  beforeOpenData.Data.push(item);
89908
89939
  }
89909
89940
 
89910
- beforeOpenData.VolMax=max;
89941
+ beforeOpenData.VolMax=max/unit;
89911
89942
  beforeOpenData.VolMin=0;
89912
89943
  }
89913
89944
  else if (beforeOpenData.Ver==3.0)
@@ -89935,7 +89966,7 @@ MinuteChartContainer.JsonDataToBeforeOpenData=function(data)
89935
89966
  beforeOpenData.Data.push(item);
89936
89967
  }
89937
89968
 
89938
- beforeOpenData.VolMax=max;
89969
+ beforeOpenData.VolMax=max/unit;
89939
89970
  beforeOpenData.VolMin=0;
89940
89971
  }
89941
89972
 
@@ -89950,12 +89981,14 @@ MinuteChartContainer.JsonDataToAfterCloseData=function(data)
89950
89981
  var stockData=data.stock[0];
89951
89982
  var date=stockData.date; //日期
89952
89983
  if (!stockData.afterinfo) return null;
89953
-
89984
+ var symbol=data.stock[0].symbol;
89985
+ var upperSymbol=symbol.toLowerCase();
89954
89986
  var afterCloseData={ Data:[], TotalCount:3*60, Ver:2.0, Date:date };
89955
89987
  var item=stockData.afterinfo;
89956
89988
  if (IFrameSplitOperator.IsNumber(item.totalcount)) afterCloseData.TotalCount=item.totalcount;
89957
89989
  if (IFrameSplitOperator.IsNumber(item.ver)) afterCloseData.Ver=item.ver;
89958
89990
  var extendDataIndex=JSCHART_DATA_FIELD_ID.MINUTE_AFTERCLOSE_EXTENDDATA; //扩展数据序号
89991
+ var unit=MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol);
89959
89992
 
89960
89993
  if (afterCloseData.Ver==1.0)
89961
89994
  {
@@ -90001,7 +90034,7 @@ MinuteChartContainer.JsonDataToAfterCloseData=function(data)
90001
90034
  afterCloseData.Data.push(item);
90002
90035
  }
90003
90036
 
90004
- afterCloseData.VolMax=max;
90037
+ afterCloseData.VolMax=max/unit;
90005
90038
  afterCloseData.VolMin=0;
90006
90039
  }
90007
90040
  else if (afterCloseData.Ver==3.0)
@@ -90028,7 +90061,7 @@ MinuteChartContainer.JsonDataToAfterCloseData=function(data)
90028
90061
  afterCloseData.Data.push(item);
90029
90062
  }
90030
90063
 
90031
- afterCloseData.VolMax=max;
90064
+ afterCloseData.VolMax=max/unit;
90032
90065
  afterCloseData.VolMin=0;
90033
90066
  }
90034
90067
 
@@ -90065,8 +90098,7 @@ MinuteChartContainer.JsonDataToMinuteData=function(data,isBeforeData)
90065
90098
  item.Open=jsData.open;
90066
90099
  item.High=jsData.high;
90067
90100
  item.Low=jsData.low;
90068
- if (isSHSZ) item.Vol=jsData.vol/100; //沪深股票原始单位股
90069
- else item.Vol=jsData.vol;
90101
+ item.Vol=jsData.vol;
90070
90102
  item.Amount=jsData.amount;
90071
90103
  if (jsData.date>0) date=jsData.date; //分钟数据中有日期 优先使用
90072
90104
  item.DateTime=date.toString()+" "+jsData.time.toString();
@@ -90150,7 +90182,6 @@ MinuteChartContainer.JsonDataToUpdateMinuteData=function(data)
90150
90182
 
90151
90183
  if (jsData[extendDataIndex]) item.ExtendData=jsData[extendDataIndex];
90152
90184
  item.DateTime=item.Date.toString()+" "+item.Time.toString();
90153
- if (isSHSZ) item.Vol=item.Vol/100; //沪深股票原始单位股
90154
90185
 
90155
90186
  if (IFrameSplitOperator.IsNumber(minuteData.YClose) && item.Close)
90156
90187
  item.Increase=(item.Close-minuteData.YClose)/minuteData.YClose*100; //涨幅 (最新价格-昨收)/昨收*100;
@@ -90244,8 +90275,7 @@ MinuteChartContainer.JsonDataToMinuteDataArray=function(data)
90244
90275
  item.High=jsData[3];
90245
90276
  item.Low=jsData[4];
90246
90277
  item.Increase=null;
90247
- if (isSHSZ) item.Vol=jsData[5]/100; //原始单位股
90248
- else item.Vol=jsData[5];
90278
+ item.Vol=jsData[5];
90249
90279
  item.Amount=jsData[6];
90250
90280
  if (7<jsData.length && jsData[7]>0) item.AvPrice=jsData[7]; //均价
90251
90281
  item.DateTime=date.toString()+" "+jsData[0].toString();
@@ -90324,12 +90354,8 @@ MinuteChartContainer.JsonDataToHistoryMinuteLineColorData=function(data)
90324
90354
 
90325
90355
  MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, isBeforeOpen, symbol)
90326
90356
  {
90327
- var isSHSZ=false;
90328
- if (symbol)
90329
- {
90330
- var upperSymbol=symbol.toUpperCase();
90331
- isSHSZ=MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol);
90332
- }
90357
+ var upperSymbol=symbol?symbol.toUpperCase():null;
90358
+ var unit=MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol);
90333
90359
 
90334
90360
  var date=callAuctionData.Date;
90335
90361
  var yClose=callAuctionData.YClose;
@@ -90349,7 +90375,7 @@ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, i
90349
90375
  item.Price=jsData[1];
90350
90376
  if (!item.Price) item.Price=preClose;
90351
90377
  else preClose=item.Price;
90352
- item.Vol[0]=isSHSZ ? jsData[2]/100 : jsData[2]; //沪深股票原始单位股
90378
+ item.Vol[0]=jsData[2]; //沪深股票原始单位股
90353
90379
  item.Amount=jsData[3];
90354
90380
  if (IFrameSplitOperator.IsNumber(jsData[4])) //日期
90355
90381
  item.Date=jsData[4];
@@ -90384,7 +90410,7 @@ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, i
90384
90410
  callAuctionData.Data.push(item);
90385
90411
  }
90386
90412
 
90387
- callAuctionData.VolMax=max;
90413
+ callAuctionData.VolMax=max/unit;
90388
90414
  callAuctionData.VolMin=0;
90389
90415
  }
90390
90416
  else if (beforeOpenData.Ver==3.0)
@@ -90412,7 +90438,7 @@ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, i
90412
90438
  callAuctionData.Data.push(item);
90413
90439
  }
90414
90440
 
90415
- callAuctionData.VolMax=max;
90441
+ callAuctionData.VolMax=max/unit;
90416
90442
  callAuctionData.VolMin=0;
90417
90443
  }
90418
90444
  }
@@ -90468,201 +90494,6 @@ MinuteChartContainer.JosnDataToAfterCloseDataArray=function(data)
90468
90494
  return aryDay;
90469
90495
  }
90470
90496
 
90471
- /*
90472
- 历史分钟走势图
90473
- */
90474
- /* 废弃 统一使用 MinuteChartContainer
90475
- function HistoryMinuteChartContainer(uielement)
90476
- {
90477
- this.newMethod=MinuteChartContainer; //派生
90478
- this.newMethod(uielement);
90479
- delete this.newMethod;
90480
-
90481
- this.HistoryMinuteApiUrl="http://127.0.0.1:8080/cache/minuteday/day/";
90482
- this.ClassName='HistoryMinuteChartContainer';
90483
-
90484
- //创建主图K线画法
90485
- this.CreateMainKLine=function()
90486
- {
90487
- //分钟线
90488
- var minuteLine=new ChartMinutePriceLine();
90489
- minuteLine.Canvas=this.Canvas;
90490
- minuteLine.ChartBorder=this.Frame.SubFrame[0].Frame.ChartBorder;
90491
- minuteLine.ChartFrame=this.Frame.SubFrame[0].Frame;
90492
- minuteLine.Name="Minute-Line";
90493
- minuteLine.Color=g_JSChartResource.Minute.PriceColor;
90494
-
90495
- this.ChartPaint[0]=minuteLine;
90496
-
90497
- //分钟线均线
90498
- var averageLine=new ChartLine();
90499
- averageLine.Canvas=this.Canvas;
90500
- averageLine.ChartBorder=this.Frame.SubFrame[0].Frame.ChartBorder;
90501
- averageLine.ChartFrame=this.Frame.SubFrame[0].Frame;
90502
- averageLine.Name="Minute-Average-Line";
90503
- averageLine.Color=g_JSChartResource.Minute.AvPriceColor;
90504
- this.ChartPaint[1]=averageLine;
90505
-
90506
- var averageLine=new ChartMinuteVolumBar();
90507
- averageLine.Color=g_JSChartResource.Minute.VolBarColor;
90508
- averageLine.Canvas=this.Canvas;
90509
- averageLine.ChartBorder=this.Frame.SubFrame[1].Frame.ChartBorder;
90510
- averageLine.ChartFrame=this.Frame.SubFrame[1].Frame;
90511
- averageLine.Name="Minute-Vol-Bar";
90512
- this.ChartPaint[2]=averageLine;
90513
-
90514
-
90515
- this.TitlePaint[0]=new DynamicMinuteTitlePainting();
90516
- this.TitlePaint[0].Frame=this.Frame.SubFrame[0].Frame;
90517
- this.TitlePaint[0].Canvas=this.Canvas;
90518
- this.TitlePaint[0].IsShowDate=true;
90519
- }
90520
-
90521
- //设置交易日期
90522
- this.ChangeTradeDate=function(trdateDate)
90523
- {
90524
- if (!trdateDate) return;
90525
-
90526
- this.TradeDate=trdateDate;
90527
- this.RequestData(); //更新数据
90528
- }
90529
-
90530
- this.RequestData=function()
90531
- {
90532
- var date=new Date();
90533
- var nowDate=date.getFullYear()*10000+(date.getMonth()+1)*100+date.getDate();
90534
- if (nowDate==this.TradeDate) this.RequestMinuteData();
90535
- else this.RequestHistoryMinuteData();
90536
- }
90537
-
90538
- //请求分钟数据
90539
- this.RequestHistoryMinuteData=function()
90540
- {
90541
- var self=this;
90542
- var url=this.HistoryMinuteApiUrl+this.TradeDate.toString()+"/"+this.Symbol+".json";
90543
-
90544
- JSNetwork.HttpRequest({
90545
- url: url,
90546
- type:"get",
90547
- dataType: "json",
90548
- async:true,
90549
- success: function (data)
90550
- {
90551
- self.ChartSplashPaint.EnableSplash(false);
90552
- self.RecvHistoryMinuteData(data);
90553
- },
90554
- error:function(reqeust)
90555
- {
90556
- self.ChartSplashPaint.EnableSplash(false);
90557
- self.RecvHistoryMinuteError(reqeust);
90558
- }
90559
- });
90560
- }
90561
-
90562
- this.RecvHistoryMinuteError=function(reqeust)
90563
- {
90564
- if (reqeust.status!=404) return;
90565
-
90566
- var sourceData=new ChartData();
90567
- this.SourceData=sourceData;
90568
-
90569
- for(var i in this.ChartPaint)
90570
- {
90571
- this.ChartPaint[i].Data=sourceData;
90572
- if (i==0) this.ChartPaint[i].NotSupportMessage='没有权限访问!';
90573
- }
90574
-
90575
- this.TitlePaint[0].Data=this.SourceData; //动态标题
90576
- this.TitlePaint[0].Symbol=this.Symbol;
90577
- this.TitlePaint[0].Name=null;
90578
-
90579
- this.Draw();
90580
- }
90581
-
90582
- this.RecvHistoryMinuteData=function(data)
90583
- {
90584
- var aryMinuteData=HistoryMinuteChartContainer.JsonDataToMinuteData(data);
90585
-
90586
- //原始数据
90587
- var sourceData=new ChartData();
90588
- sourceData.Data=aryMinuteData;
90589
-
90590
- this.TradeDate=data.date;
90591
-
90592
- this.SourceData=sourceData;
90593
- this.Symbol=data.symbol;
90594
- this.Name=data.name;
90595
-
90596
- this.BindMainData(sourceData,data.day.yclose);
90597
-
90598
- if (this.Frame.SubFrame.length>2)
90599
- {
90600
- var bindData=new ChartData();
90601
- bindData.Data=aryMinuteData;
90602
- for(var i=2; i<this.Frame.SubFrame.length; ++i)
90603
- {
90604
- this.BindIndexData(i,bindData);
90605
- }
90606
- }
90607
-
90608
- this.UpdateFrameMaxMin(); //调整坐标最大 最小值
90609
- this.Frame.SetSizeChage(true);
90610
- this.Draw();
90611
-
90612
- //this.AutoUpdata();
90613
- }
90614
-
90615
- }
90616
-
90617
- //API 返回数据 转化为array[]
90618
- HistoryMinuteChartContainer.JsonDataToMinuteData=function(data)
90619
- {
90620
- var aryMinuteData=[];
90621
- for(var i in data.minute.time)
90622
- {
90623
- var item=new MinuteData();
90624
-
90625
- if (data.minute.price[i]<=0 && i>0) //当前这一分钟价格为空,使用上一分钟的数据
90626
- {
90627
- item.Close=aryMinuteData[i-1].Close;
90628
- item.Open=aryMinuteData[i-1].Close;
90629
- item.High=item.Close;
90630
- item.Low=item.Close;
90631
- item.Vol=data.minute.vol[i]; //原始单位股
90632
- item.Amount=data.minute.amount[i];
90633
- item.DateTime=data.date.toString()+" "+data.minute.time[i].toString();
90634
- //item.Increate=jsData.increate;
90635
- //item.Risefall=jsData.risefall;
90636
- item.AvPrice=aryMinuteData[i-1].AvPrice;
90637
- }
90638
- else
90639
- {
90640
- item.Close=data.minute.price[i];
90641
- item.Open=data.minute.open[i];
90642
- item.High=data.minute.high[i];
90643
- item.Low=data.minute.low[i];
90644
- item.Vol=data.minute.vol[i]; //原始单位股
90645
- item.Amount=data.minute.amount[i];
90646
- item.DateTime=data.date.toString()+" "+data.minute.time[i].toString();
90647
- //item.Increate=jsData.increate;
90648
- //item.Risefall=jsData.risefall;
90649
- item.AvPrice=data.minute.avprice[i];
90650
- }
90651
-
90652
- //价格是0的 都用空
90653
- if (item.Open<=0) item.Open=null;
90654
- if (item.Close<=0) item.Close=null;
90655
- if (item.AvPrice<=0) item.AvPrice=null;
90656
- if (item.High<=0) item.High=null;
90657
- if (item.Low<=0) item.Low=null;
90658
-
90659
- aryMinuteData[i]=item;
90660
- }
90661
-
90662
- return aryMinuteData;
90663
- }
90664
- */
90665
-
90666
90497
  /////////////////////////////////////////////////////////////////////////////
90667
90498
  // 自定义指数
90668
90499
  //
@@ -95723,6 +95554,16 @@ var MARKET_SUFFIX_NAME=
95723
95554
  if (ChartData.IsMinutePeriod(period,true)) return false; //内置分钟K线不支持复权
95724
95555
 
95725
95556
  return true;
95557
+ },
95558
+
95559
+ //获取成交量单位
95560
+ GetVolUnit:function(upperSymbol)
95561
+ {
95562
+ if (!upperSymbol) return 1;
95563
+ if (MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol)) return 100; //单位手=100股
95564
+ if (MARKET_SUFFIX_NAME.IsBJ(upperSymbol)) return 100; //单位手=100股
95565
+
95566
+ return 1;
95726
95567
  }
95727
95568
  }
95728
95569
 
@@ -99014,6 +98855,8 @@ function GetLocalTime(i) //得到标准时区的时间的函数
99014
98855
 
99015
98856
 
99016
98857
 
98858
+
98859
+
99017
98860
  /*
99018
98861
  Copyright (c) 2018 jones
99019
98862
 
@@ -110404,6 +110247,105 @@ function JSDraw(errorHandler,symbolData)
110404
110247
 
110405
110248
  return result;
110406
110249
  }
110250
+
110251
+
110252
+ ///////////////////////////////////////////////////////////////////////////////////
110253
+ //DRAWLASTBARICON :在最后一根k线绘制图标。
110254
+ //用法:DRAWLASTBARICON(PRICE,ICON);
110255
+ //最后一根k线,在PRICE位置画图标ICON。
110256
+ //
110257
+ //注:
110258
+ //1、该函数可以指定位置PRICE标注图标ICON
110259
+ //2、ICON位置可以写成'ICON'的形式,也可以写为数字的形式,即DRAWLASTBARICON(PRICE,'ICO1');等价于DRAWLASTBARICON(PRICE,1);
110260
+ //3、不支持将该函数定义为变量,即不支持下面的写法:
110261
+ //A:DRAWLASTBARICON(PRICE,ICON);
110262
+ //4、该函数可以用ALIGN,VALIGN设置图标的对齐方式。
110263
+ //例1:
110264
+ //DRAWLASTBARICON(LOW,'ICO1');//在最后一根k线最低价上画出图标ICON1。
110265
+ //例2:
110266
+ //MA5:=MA(C,5);
110267
+ //DRAWLASTBARICON(MA5,2);//表示在最后一根k线对应的MA5数值位置上画出图标ICON2。
110268
+
110269
+ this.DRAWLASTBARICON=function(data, type)
110270
+ {
110271
+ if (IFrameSplitOperator.IsString(type)) //把ICO1=>1
110272
+ {
110273
+ var value=type.replace('ICO',"");
110274
+ type=parseInt(value);
110275
+ }
110276
+
110277
+ var icon=g_JSComplierResource.GetDrawIcon(type);
110278
+ if (!icon) g_JSComplierResource.GetDrawTextIcon(type);
110279
+ if (!icon) icon={ Symbol:'🚩'};
110280
+
110281
+ var drawItem={ Value:null, Icon:icon, IconType:type };
110282
+ if (IFrameSplitOperator.IsNonEmptyArray(data)) drawItem.Value=data[data.length-1];
110283
+ else drawItem.Value=data;
110284
+
110285
+ var result={ DrawData:drawItem, DrawType:'DRAWLASTBARICON' };
110286
+
110287
+ return result;
110288
+ }
110289
+
110290
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
110291
+ //DRAWLASTBARTEXT:显在最后一根k线显示文字。
110292
+ //用法:DRAWLASTBARTEXT(PRICE,TEXT);
110293
+ //最后一根k线,在PRICE位置书写文字TEXT。
110294
+ //注:
110295
+ //1、显示的汉字用单引号标注
110296
+ //2、可以设置文字显示的对齐方式,字体大小以及文字的颜色,即支持下面的写法:
110297
+ //DRAWLASTBARTEXT(PRICE,TEXT),COLOR,ALIGN,VALIGN;
110298
+ //例1:
110299
+ //DRAWLASTBARTEXT(LOW,'注');//
110300
+ //最后一根k线,在最低价上写"注"字。
110301
+ //例2:
110302
+ //DRAWLASTBARTEXT(LOW,'低'),ALIGN0,FONTSIZE16,COLORRED;//在最后一根k线,在最低价写"低"字,文字左对齐,字体大小为16,文字颜色为红色。
110303
+
110304
+ this.DRAWLASTBARTEXT=function(data, text)
110305
+ {
110306
+ var drawItem={ Value:null, Text:text };
110307
+ if (IFrameSplitOperator.IsNonEmptyArray(data)) drawItem.Value=data[data.length-1];
110308
+ else drawItem.Value=data;
110309
+
110310
+ var result={ DrawData:drawItem, DrawType:'DRAWLASTBARTEXT' };
110311
+
110312
+ return result;
110313
+ }
110314
+
110315
+ /////////////////////////////////////////////////////////////////////////////////////////////////////
110316
+ //DRAWLASTBARNUMBER:在最后一根k线输出数值。
110317
+ //用法:DRAWLASTBARNUMBER(DATA,NUMBER,PRECISION,COLOR);
110318
+ //最后一根k线在DATA位置写数字NUMBER。PRECISION为精度(小数点后有几位数字)。COLOR为颜色。
110319
+ //注:
110320
+ //该函数支持在函数后设置文字的大小和文字对齐方式。即支持下面的写法:
110321
+ //DRAWLASTBARNUMBER(DATA,NUMBER,PRECISION,COLOR),ALIGN,VALIGN;
110322
+ //例1:
110323
+ //DRAWLASTBARNUMBER(HIGH,(CLOSE-OPEN)/OPEN*100,2,COLORRED);//最后一根k线在最高价位置红色显示涨幅数值(相对开盘价的百分比,精确2位小数)。
110324
+ //例2:
110325
+ //DRAWLASTBARNUMBER(L,REF(C,1),2,COLORRED),ALIGN0,VALIGN0;//表示最后一根k线的最低价处以红色显示昨收盘价数值(精确2位小数),标注文字居左,居上对齐。
110326
+
110327
+ this.DRAWLASTBARNUMBER=function(data,value,dec,color)
110328
+ {
110329
+ var drawItem={ Value:null, Text:null, Color:color };
110330
+ if (IFrameSplitOperator.IsNonEmptyArray(data)) drawItem.Value=data[data.length-1];
110331
+ else drawItem.Value=data;
110332
+
110333
+ var precision=2;
110334
+ if (IFrameSplitOperator.IsNumber(dec)) precision=parseInt(dec);
110335
+ if (IFrameSplitOperator.IsNumber(value))
110336
+ {
110337
+ drawItem.Text=value.toFixed(precision);
110338
+ }
110339
+ else if (IFrameSplitOperator.IsNonEmptyArray(value))
110340
+ {
110341
+ var lastValue=value[value.length-1];
110342
+ if (IFrameSplitOperator.IsNumber(lastValue)) drawItem.Text=lastValue.toFixed(precision);
110343
+ }
110344
+
110345
+ var result={ DrawData:drawItem, DrawType:'DRAWLASTBARNUMBER' };
110346
+
110347
+ return result;
110348
+ }
110407
110349
  }
110408
110350
 
110409
110351
 
@@ -110458,6 +110400,7 @@ JSDraw.prototype.IsDrawFunction=function(name)
110458
110400
  'DRAWOVERLAYLINE',"FILLRGN", "FILLRGN2","FILLTOPRGN", "FILLBOTTOMRGN", "FILLVERTICALRGN","FLOATRGN","DRAWSL", "DRAWGBK2","DRAWGBK_DIV",
110459
110401
  "VERTLINE","HORLINE","TIPICON",
110460
110402
  "BUY","SELL","SELLSHORT","BUYSHORT",
110403
+ "DRAWLASTBARICON","DRAWLASTBARNUMBER", "DRAWLASTBARTEXT",
110461
110404
  ]);
110462
110405
  if (setFunctionName.has(name)) return true;
110463
110406
 
@@ -111397,9 +111340,7 @@ function JSSymbolData(ast,option,jsExecute)
111397
111340
  return kData.GetClose();
111398
111341
  case 'VOL':
111399
111342
  case 'V':
111400
- if (MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol))
111401
- return kData.GetVol(100); //A股的 把股转成手
111402
- return kData.GetVol();
111343
+ return kData.GetVol(MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol));
111403
111344
  case 'OPEN':
111404
111345
  case 'O':
111405
111346
  return kData.GetOpen();
@@ -112028,9 +111969,7 @@ function JSSymbolData(ast,option,jsExecute)
112028
111969
  return this.Data.GetClose();
112029
111970
  case 'VOL':
112030
111971
  case 'V':
112031
- if (MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol) && this.DataType==HQ_DATA_TYPE.KLINE_ID) //!! A股K线量单位时股,分时图单位还是手
112032
- return this.Data.GetVol(100); //A股的 把股转成手
112033
- return this.Data.GetVol();
111972
+ return this.Data.GetVol(MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol));
112034
111973
  case 'OPEN':
112035
111974
  case 'O':
112036
111975
  return this.Data.GetOpen();
@@ -112276,9 +112215,7 @@ function JSSymbolData(ast,option,jsExecute)
112276
112215
  return result.GetAmount();
112277
112216
  case 'V':
112278
112217
  case "VOL":
112279
- if (MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol))
112280
- return result.GetVol(100);
112281
- return result.GetVol();
112218
+ return result.GetVol(MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol));
112282
112219
  case "VOLINSTK":
112283
112220
  return result.GetPosition();
112284
112221
  default:
@@ -115740,6 +115677,7 @@ function JSExecute(ast,option)
115740
115677
  ["OFFERCANCELVOL", null], //累计总有效撤卖量,专业版等(资金流向功能)沪深京品种行情专用 累计总有效委卖量-累计总有效撤卖量=总卖+总成交量
115741
115678
  ["AVGOFFERPX", null], //专业版等(资金流向功能)沪深京品种行情专用:最新委卖均价
115742
115679
  //["", null],
115680
+
115743
115681
  ]);
115744
115682
 
115745
115683
  this.SymbolData=new JSSymbolData(this.AST,option,this);
@@ -117196,6 +117134,20 @@ function JSExecute(ast,option)
117196
117134
  node.Draw=this.Draw.HORLINE(args[0],args[1],args[2],args[3]);
117197
117135
  node.Out=node.Draw.DrawData.Data;
117198
117136
  break;
117137
+
117138
+ case "DRAWLASTBARICON":
117139
+ node.Draw=this.Draw.DRAWLASTBARICON(args[0],args[1]);
117140
+ node.Out=[];
117141
+ break;
117142
+ case "DRAWLASTBARNUMBER":
117143
+ node.Draw=this.Draw.DRAWLASTBARNUMBER(args[0],args[1],args[2],args[3]);
117144
+ node.Out=[];
117145
+ break;
117146
+ case "DRAWLASTBARTEXT":
117147
+ node.Draw=this.Draw.DRAWLASTBARTEXT(args[0],args[1]);
117148
+ node.Out=[];
117149
+ break;
117150
+
117199
117151
  case 'CODELIKE':
117200
117152
  node.Out=this.SymbolData.CODELIKE(args[0]);
117201
117153
  break;
@@ -117608,6 +117560,22 @@ function JSExplainer(ast,option)
117608
117560
  ["OFFERCANCELVOL", "累计总有效撤卖量"],
117609
117561
  ["AVGOFFERPX", "最新委卖均价"],
117610
117562
 
117563
+ ['COLORBLACK','黑色'],
117564
+ ['COLORBLUE','蓝色'],
117565
+ ['COLORGREEN','绿色'],
117566
+ ['COLORCYAN','青色'],
117567
+ ['COLORRED','红色'],
117568
+ ['COLORMAGENTA','洋红色'],
117569
+ ['COLORBROWN','棕色'],
117570
+ ['COLORLIGRAY','淡灰色'],
117571
+ ['COLORGRAY','深灰色'],
117572
+ ['COLORLIBLUE','淡蓝色'],
117573
+ ['COLORLIGREEN','淡绿色'],
117574
+ ['COLORLICYAN','淡青色'],
117575
+ ['COLORLIRED','淡红色'],
117576
+ ['COLORLIMAGENTA','淡洋红色'],
117577
+ ['COLORWHITE','白色'],
117578
+ ['COLORYELLOW','黄色']
117611
117579
  ]);
117612
117580
 
117613
117581
  if (option)
@@ -118309,6 +118277,12 @@ function JSExplainer(ast,option)
118309
118277
  case "BUYSHORT":
118310
118278
  return "买入平仓";
118311
118279
 
118280
+ case "DRAWLASTBARNUMBER":
118281
+ return "在最后一根k线输出数值";
118282
+ case "DRAWLASTBARTEXT":
118283
+ return "在最后一根k线显示文字";
118284
+ case "DRAWLASTBARICON":
118285
+ return "在最后一根k线绘制图标";
118312
118286
  case "YMOVE":
118313
118287
  return;
118314
118288
  case "BACKGROUND":
@@ -120480,6 +120454,49 @@ function ScriptIndex(name,script,args,option)
120480
120454
  hqChart.ChartPaint.push(chart);
120481
120455
  }
120482
120456
 
120457
+ this.CreateDrawLastBarText=function(hqChart,windowIndex,varItem,id)
120458
+ {
120459
+ var chart=new ChartDrawLastBarText();
120460
+ chart.Canvas=hqChart.Canvas;
120461
+ chart.Name=varItem.Name;
120462
+ chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;
120463
+ chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;
120464
+
120465
+ if (hqChart.ChartPaint[0].IsMinuteFrame())
120466
+ chart.Data=hqChart.SourceData;
120467
+ else
120468
+ chart.Data=hqChart.ChartPaint[0].Data;//绑定K线
120469
+
120470
+ var lastItem=varItem.Draw.DrawData;
120471
+ if (lastItem)
120472
+ {
120473
+ if (lastItem.Color) lastItem.Color=this.GetColor(lastItem.Color);
120474
+ else lastItem.Color=this.GetDefaultColor(id);
120475
+ if (varItem.Color) lastItem.Color=this.GetColor(varItem.Color);
120476
+
120477
+ if (varItem.DrawVAlign>=0)
120478
+ {
120479
+ if (varItem.DrawVAlign==0) lastItem.TextBaseline='top';
120480
+ else if (varItem.DrawVAlign==1) lastItem.TextBaseline='middle';
120481
+ else if (varItem.DrawVAlign==2) lastItem.TextBaseline='bottom';
120482
+ }
120483
+
120484
+ if (varItem.DrawAlign>=0)
120485
+ {
120486
+ if (varItem.DrawAlign==0) lastItem.TextAlign="left";
120487
+ else if (varItem.DrawAlign==1) lastItem.TextAlign="center";
120488
+ else if (varItem.DrawAlign==2) lastItem.TextAlign='right';
120489
+ }
120490
+
120491
+ if (IFrameSplitOperator.IsNumber(varItem.YOffset)) lastItem.YOffset=varItem.YOffset;
120492
+ if (IFrameSplitOperator.IsNumber(varItem.XOffset)) lastItem.XOffset=varItem.XOffset;
120493
+ if (varItem.DrawFontSize>0) lastItem.FontSize=varItem.DrawFontSize;
120494
+ }
120495
+
120496
+ chart.LastBarItem=lastItem;
120497
+ hqChart.ChartPaint.push(chart);
120498
+ }
120499
+
120483
120500
  //创建通道
120484
120501
  this.CreateChannel=function(hqChart,windowIndex,varItem,id)
120485
120502
  {
@@ -121076,6 +121093,12 @@ function ScriptIndex(name,script,args,option)
121076
121093
  this.CreateTradeIcon(hqChart,windowIndex,item,i);
121077
121094
  break;
121078
121095
 
121096
+ case "DRAWLASTBARICON":
121097
+ case "DRAWLASTBARNUMBER":
121098
+ case "DRAWLASTBARTEXT":
121099
+ this.CreateDrawLastBarText(hqChart,windowIndex,item,i);
121100
+ break;
121101
+
121079
121102
  case SCRIPT_CHART_NAME.OVERLAY_BARS:
121080
121103
  this.CreateStackedBar(hqChart,windowIndex,item,i);
121081
121104
  break;
@@ -145070,6 +145093,7 @@ function JSDialogTooltip()
145070
145093
  {
145071
145094
  var defaultfloatPrecision=GetfloatPrecision(this.HQChart.Symbol);//价格小数位数
145072
145095
  var upperSymbol=this.HQChart.Symbol.toUpperCase();
145096
+ var unit=MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol);
145073
145097
  var priceFormat=0;
145074
145098
  if (this.Style==1) priceFormat=1;
145075
145099
 
@@ -145087,7 +145111,7 @@ function JSDialogTooltip()
145087
145111
  this.ForamtPrice(data.High,yClose, defaultfloatPrecision,'DialogTooltip-High',priceFormat),
145088
145112
  this.ForamtPrice(data.Low,yClose, defaultfloatPrecision,'DialogTooltip-Low',priceFormat),
145089
145113
  this.ForamtPrice(data.Close,yClose, defaultfloatPrecision,'DialogTooltip-Close',priceFormat),
145090
- this.FormatVol(data.Vol,'DialogTooltip-Vol' ),
145114
+ this.FormatVol(data.Vol/unit,'DialogTooltip-Vol' ),
145091
145115
  this.FormatAmount(data.Amount,'DialogTooltip-Amount' ),
145092
145116
  this.FormatIncrease(data.Close,yClose,defaultfloatPrecision,'DialogTooltip-Increase',priceFormat),
145093
145117
  this.FormatAmplitude(data.High,data.Low,yClose,defaultfloatPrecision,'DialogTooltip-Amplitude',priceFormat),
@@ -145149,6 +145173,8 @@ function JSDialogTooltip()
145149
145173
  this.GetFormatMinuteTooltipText=function(data)
145150
145174
  {
145151
145175
  var defaultfloatPrecision=GetfloatPrecision(this.HQChart.Symbol);//价格小数位数
145176
+ var upperSymbol=this.HQChart.Symbol.toUpperCase();
145177
+ var unit=MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol);
145152
145178
  var aryText=[];
145153
145179
  if (data.Type==0) //连续交易
145154
145180
  {
@@ -145163,7 +145189,7 @@ function JSDialogTooltip()
145163
145189
  this.ForamtPrice(item.AvPrice,item.YClose, defaultfloatPrecision,'DialogTooltip-AvPrice', 1),
145164
145190
  this.FormatRisefall(item.Close,item.YClose, defaultfloatPrecision,'DialogTooltip-Risefall'),
145165
145191
  this.FormatIncrease(item.Close,item.YClose,defaultfloatPrecision,'DialogTooltip-Increase', 1),
145166
- this.FormatVol(item.Vol,'DialogTooltip-Vol' ),
145192
+ this.FormatVol(item.Vol/unit,'DialogTooltip-Vol' ),
145167
145193
  this.FormatAmount(item.Amount,'DialogTooltip-Amount' ),
145168
145194
  ];
145169
145195
 
@@ -145196,7 +145222,7 @@ function JSDialogTooltip()
145196
145222
  this.FormatTime(item.Time, null, timeForamt, 'DialogTooltip-Time'),
145197
145223
  this.ForamtPrice(item.Price,item.YClose, defaultfloatPrecision,'DialogTooltip-AC-Price',1),
145198
145224
  this.FormatIncrease(item.Price,item.YClose,defaultfloatPrecision,'DialogTooltip-AC-Increase',1),
145199
- this.FormatVol(item.Vol[0],'DialogTooltip-AC-Vol' ),
145225
+ this.FormatVol(item.Vol[0]/unit,'DialogTooltip-AC-Vol' ),
145200
145226
  ];
145201
145227
  }
145202
145228
  else
@@ -145938,9 +145964,28 @@ function JSFloatTooltip()
145938
145964
 
145939
145965
  var item=tooltipData.Data.Item;
145940
145966
  var aryText=[];
145967
+ if (item && IFrameSplitOperator.IsObject(item.Text))
145968
+ {
145969
+ var tooltipData=item.Text;
145970
+ if (IFrameSplitOperator.IsNonEmptyArray(tooltipData.AryText))
145971
+ {
145972
+ for(var i=0;i<tooltipData.AryText.length;++i)
145973
+ {
145974
+ var tooltipItem=tooltipData.AryText[i];
145975
+ var textItem={ Title:tooltipItem.Title, Text:tooltipItem.Text, Color:this.ValueColor };
145976
+ if (tooltipItem.Color) textItem.Color=tooltipItem.Color;
145977
+ if (tooltipItem.Align=="Left") tooltipItem.ClassName=this.ValueAlign.Left;
145941
145978
 
145942
- var rowItem={ Text:"", HTMLTitle:item.Text, Color:this.ValueColor, IsMergeCell:true };
145943
- aryText.push(rowItem);
145979
+ aryText.push(tooltipItem);
145980
+ }
145981
+ }
145982
+ }
145983
+ else
145984
+ {
145985
+ var rowItem={ Text:"", HTMLTitle:item.Text, Color:this.ValueColor, IsMergeCell:true };
145986
+ aryText.push(rowItem);
145987
+ }
145988
+
145944
145989
 
145945
145990
  this.AryText=aryText;
145946
145991
  this.UpdateTableDOM();
@@ -146042,6 +146087,7 @@ function JSFloatTooltip()
146042
146087
  var symbol=kItem.Symbol;
146043
146088
  var upperSymbol=symbol.toUpperCase();
146044
146089
  var defaultfloatPrecision=GetfloatPrecision(symbol);//价格小数位数
146090
+ var unit=MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol);
146045
146091
 
146046
146092
  //日期
146047
146093
  var dateItem=this.ForamtDate(data.Date,"YYYY/MM/DD/W",'FloatTooltip-Date' );
@@ -146063,7 +146109,7 @@ function JSFloatTooltip()
146063
146109
  this.ForamtPrice(data.Low,yClose, defaultfloatPrecision,'FloatTooltip-Low'),
146064
146110
  this.ForamtPrice(data.Close,yClose, defaultfloatPrecision,'FloatTooltip-Close'),
146065
146111
  this.ForamtPrice(data.YClose,data.YClose, defaultfloatPrecision,'FloatTooltip-YClose'),
146066
- this.FormatVol(data.Vol,'FloatTooltip-Vol' ),
146112
+ this.FormatVol(data.Vol/unit,'FloatTooltip-Vol' ),
146067
146113
  this.FormatAmount(data.Amount,'FloatTooltip-Amount' ),
146068
146114
  this.FormatIncrease(data.Close,yClose,defaultfloatPrecision,'FloatTooltip-Increase'),
146069
146115
  this.FormatAmplitude(data.High,data.Low,yClose,defaultfloatPrecision,'FloatTooltip-Amplitude'),
@@ -148619,7 +148665,7 @@ function HQChartScriptWorker()
148619
148665
 
148620
148666
 
148621
148667
 
148622
- var HQCHART_VERSION="1.1.14124";
148668
+ var HQCHART_VERSION="1.1.14132";
148623
148669
 
148624
148670
  function PrintHQChartVersion()
148625
148671
  {