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.
@@ -6971,6 +6971,13 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6971
6971
  this.DialogModifyIndexParam; //指标参数修改
6972
6972
 
6973
6973
 
6974
+ this.GetVolUnit=function() //成交量单位
6975
+ {
6976
+ var upperSymbol=this.Symbol?this.Symbol.toUpperCase():null;
6977
+ var unit=MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol);
6978
+ return unit;
6979
+ }
6980
+
6974
6981
  this.ClearStockCache=function()
6975
6982
  {
6976
6983
  this.StockCache.Data=null;
@@ -35314,6 +35321,13 @@ function ChartMinuteVolumBar()
35314
35321
  return this.DrawLinePoint({ MinuteVolBar:true });
35315
35322
  }
35316
35323
 
35324
+ this.GetVolUnit=function()
35325
+ {
35326
+ var upperSymbol=this.Symbol?this.Symbol.toUpperCase():null;
35327
+ var unit=MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol);
35328
+ return unit;
35329
+ }
35330
+
35317
35331
  this.Draw=function()
35318
35332
  {
35319
35333
  var isHScreen = (this.ChartFrame.IsHScreen === true);
@@ -35336,9 +35350,11 @@ function ChartMinuteVolumBar()
35336
35350
  var yBottom=this.ChartFrame.GetYFromData(0);
35337
35351
  var yPrice=this.YClose; //上一分钟的价格
35338
35352
  var data=this.Data;
35353
+
35339
35354
  var bShowColorBar=MARKET_SUFFIX_NAME.IsShowMinuteColorVolBar(this.Symbol);
35340
-
35341
35355
  if (bShowColorBar) this.Canvas.strokeStyle=this.CustomColor;
35356
+ var unit=this.GetVolUnit();
35357
+
35342
35358
  for(var i=data.DataOffset,j=0;i<data.Data.length && j<xPointCount;++i,++j)
35343
35359
  {
35344
35360
  var item = data.Data[i];
@@ -35346,7 +35362,7 @@ function ChartMinuteVolumBar()
35346
35362
  if (!item) continue;
35347
35363
  var price=null;
35348
35364
 
35349
- vol=item.Vol;
35365
+ vol=item.Vol/unit;
35350
35366
  price=item.Close;
35351
35367
 
35352
35368
  if (!vol) continue;
@@ -35453,6 +35469,7 @@ function ChartMinuteVolumBar()
35453
35469
  var isHScreen=(this.ChartFrame.IsHScreen===true);
35454
35470
  var yPrice=this.YClose; //上一分钟的价格
35455
35471
  var yBottom=this.ChartFrame.GetYFromData(0);
35472
+ var unit=this.GetVolUnit();
35456
35473
  if (callAutionData.Ver==1.0)
35457
35474
  {
35458
35475
  for(var i in callAutionData.Data)
@@ -35463,12 +35480,12 @@ function ChartMinuteVolumBar()
35463
35480
  if (isBeforeOpen)
35464
35481
  {
35465
35482
  var x=this.ChartFrame.GetLeftExtendXFromIndex(i,callAutionData);
35466
- var y=this.ChartFrame.GetLeftExtendYFromData(item.Vol[0]);
35483
+ var y=this.ChartFrame.GetLeftExtendYFromData(item.Vol[0]/unit);
35467
35484
  }
35468
35485
  else
35469
35486
  {
35470
35487
  var x=this.ChartFrame.GetRightExtendXFromIndex(i,callAutionData);
35471
- var y=this.ChartFrame.GetRightExtendYFromData(item.Vol[0]);
35488
+ var y=this.ChartFrame.GetRightExtendYFromData(item.Vol[0]/unit);
35472
35489
  }
35473
35490
 
35474
35491
 
@@ -35501,13 +35518,13 @@ function ChartMinuteVolumBar()
35501
35518
  if (isBeforeOpen)
35502
35519
  {
35503
35520
  var x=this.ChartFrame.GetLeftExtendXFromIndex(i,callAutionData);
35504
- var y=this.ChartFrame.GetLeftExtendYFromData(item.Vol[0],false, { Range:range });
35521
+ var y=this.ChartFrame.GetLeftExtendYFromData(item.Vol[0]/unit,false, { Range:range });
35505
35522
  }
35506
35523
  else
35507
35524
  {
35508
35525
  var x=this.ChartFrame.GetRightExtendXFromIndex(i,callAutionData);
35509
- if (this.ShareAfterVol==1) var y=this.ChartFrame.GetYFromData(item.Vol[0]);
35510
- else var y=this.ChartFrame.GetRightExtendYFromData(item.Vol[0],false, { Range:range });
35526
+ if (this.ShareAfterVol==1) var y=this.ChartFrame.GetYFromData(item.Vol[0]/unit);
35527
+ else var y=this.ChartFrame.GetRightExtendYFromData(item.Vol[0]/unit,false, { Range:range });
35511
35528
  }
35512
35529
 
35513
35530
  this.Canvas.strokeStyle = this.GetBarColor(item.ColorID);
@@ -35531,13 +35548,13 @@ function ChartMinuteVolumBar()
35531
35548
  if (isBeforeOpen)
35532
35549
  {
35533
35550
  var x=this.ChartFrame.GetLeftExtendXFromIndex(i,callAutionData);
35534
- var y=this.ChartFrame.GetLeftExtendYFromData(item.Vol[1],false, { Range:range });
35551
+ var y=this.ChartFrame.GetLeftExtendYFromData(item.Vol[1]/unit,false, { Range:range });
35535
35552
  }
35536
35553
  else
35537
35554
  {
35538
35555
  var x=this.ChartFrame.GetRightExtendXFromIndex(i,callAutionData);
35539
- if (this.ShareAfterVol==1) var y=this.ChartFrame.GetYFromData(item.Vol[1]);
35540
- else var y=this.ChartFrame.GetRightExtendYFromData(item.Vol[1],false, { Range:range });
35556
+ if (this.ShareAfterVol==1) var y=this.ChartFrame.GetYFromData(item.Vol[1]/unit);
35557
+ else var y=this.ChartFrame.GetRightExtendYFromData(item.Vol[1]/unit,false, { Range:range });
35541
35558
  }
35542
35559
 
35543
35560
  this.Canvas.strokeStyle = this.GetBarColor(item.ColorID);
@@ -35586,6 +35603,7 @@ function ChartMinuteVolumBar()
35586
35603
 
35587
35604
  this.GetMaxMin=function()
35588
35605
  {
35606
+ var unit=this.GetVolUnit();
35589
35607
  var xPointCount=this.ChartFrame.XPointCount;
35590
35608
  var start=this.Data.DataOffset;
35591
35609
  if (this.ChartFrame.GlobalOption && this.ChartFrame.GlobalOption.IsValueFullRange===true)
@@ -35602,10 +35620,9 @@ function ChartMinuteVolumBar()
35602
35620
  {
35603
35621
  var item = this.Data.Data[i];
35604
35622
  if (!item || !item.Vol) continue;
35605
- if (range.Max == null) range.Max = item.Vol;
35606
- if (range.Max < item.Vol) range.Max = item.Vol;
35623
+ var value=item.Vol/unit;
35624
+ if (range.Max == null || range.Max < value) range.Max = value;
35607
35625
  }
35608
-
35609
35626
 
35610
35627
  if (this.ShareAfterVol==1)
35611
35628
  {
@@ -39342,6 +39359,136 @@ function ChartDrawNumber()
39342
39359
  }
39343
39360
  }
39344
39361
 
39362
+ function ChartDrawLastBarText()
39363
+ {
39364
+ this.newMethod=IChartPainting; //派生
39365
+ this.newMethod();
39366
+ delete this.newMethod;
39367
+
39368
+ this.ClassName='ChartDrawLastBarText'; //类名
39369
+ this.LastBarItem=null;
39370
+
39371
+ this.TextSize=
39372
+ {
39373
+ Max: g_JSChartResource.DRAWICON.Text.MaxSize, Min:g_JSChartResource.DRAWICON.Text.MinSize, //字体的最大最小值
39374
+ Zoom:{ Type:g_JSChartResource.DRAWICON.Text.Zoom.Type , Value:g_JSChartResource.DRAWICON.Text.Zoom.Value }, //放大倍数
39375
+ FontName:g_JSChartResource.DRAWICON.Text.FontName,
39376
+ YOffset:g_JSChartResource.DRAWICON.Text.YOffset
39377
+ }
39378
+
39379
+ this.IconSize=
39380
+ {
39381
+ Max: g_JSChartResource.DRAWICON.Icon.MaxSize, Min:g_JSChartResource.DRAWICON.Icon.MinSize, //图标的最大最小值
39382
+ Zoom:{ Type:g_JSChartResource.DRAWICON.Icon.Zoom.Type , Value:g_JSChartResource.DRAWICON.Icon.Zoom.Value }, //放大倍数
39383
+ YOffset:g_JSChartResource.DRAWICON.Icon.YOffset //Direction==2的向下偏移
39384
+ };
39385
+
39386
+ this.IconFamily=g_JSChartResource.DRAWLASTICON.Family;
39387
+
39388
+ this.ReloadResource=function(resource)
39389
+ {
39390
+ this.TextSize=
39391
+ {
39392
+ Max: g_JSChartResource.DRAWTEXT.MaxSize, Min:g_JSChartResource.DRAWTEXT.MinSize, //字体的最大最小值
39393
+ Zoom:{ Type:g_JSChartResource.DRAWTEXT.Zoom.Type , Value:g_JSChartResource.DRAWTEXT.Zoom.Value }, //放大倍数
39394
+ FontName:g_JSChartResource.DRAWTEXT.FontName,
39395
+ };
39396
+
39397
+ this.IconSize=
39398
+ {
39399
+ Max: g_JSChartResource.DRAWICON.Icon.MaxSize, Min:g_JSChartResource.DRAWICON.Icon.MinSize, //图标的最大最小值
39400
+ Zoom:{ Type:g_JSChartResource.DRAWICON.Icon.Zoom.Type , Value:g_JSChartResource.DRAWICON.Icon.Zoom.Value }, //放大倍数
39401
+ };
39402
+
39403
+ this.IconFamily=g_JSChartResource.DRAWLASTICON.Family;
39404
+ }
39405
+
39406
+ this.Draw=function()
39407
+ {
39408
+ if (!this.IsShow || this.ChartFrame.IsMinSize || !this.IsVisible) return;
39409
+ if (this.IsShowIndexTitleOnly()) return;
39410
+ if (this.IsHideScriptIndex()) return;
39411
+ if (!this.LastBarItem) return;
39412
+ if (!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return;
39413
+
39414
+ this.IsHScreen=(this.ChartFrame.IsHScreen===true);
39415
+ var xPointCount=this.ChartFrame.XPointCount;
39416
+ var offset=this.Data.DataOffset;
39417
+ var index=offset+xPointCount;
39418
+ if (index<this.Data.Data.length) return;
39419
+ var lastIndex=(this.Data.Data.length-1)-offset;
39420
+ var x=this.ChartFrame.GetXFromIndex(lastIndex);
39421
+ var item=this.LastBarItem;
39422
+
39423
+ if (item.Value=="Top") y=top;
39424
+ else if (item.Value=="Bottom") y=bottom;
39425
+ else y=this.ChartFrame.GetYFromData(item.Value, false);
39426
+ if (IFrameSplitOperator.IsNumber(item.YOffset)) y+=item.YOffset; //Y轴偏移
39427
+ if (IFrameSplitOperator.IsNumber(item.XOffset)) x+=item.XOffset;
39428
+
39429
+ this.Canvas.save();
39430
+ this.ClipClient(this.IsHScreen);
39431
+
39432
+ //文本
39433
+ if (item.Text) this.DrawLastText(item, x, y);
39434
+ else if (item.Icon) this.DrawLastIcon(item, x, y);
39435
+
39436
+ this.Canvas.restore();
39437
+ }
39438
+
39439
+ this.DrawLastText=function(item,x,y)
39440
+ {
39441
+ var dataWidth=this.ChartFrame.DataWidth;
39442
+ var distanceWidth=this.ChartFrame.DistanceWidth;
39443
+ var font=this.GetDynamicFont(dataWidth,distanceWidth,this.TextSize.Max,this.TextSize.Min,this.TextSize.Zoom,this.TextSize.FontName);
39444
+
39445
+ var textBaseline='bottom';
39446
+ if (item.TextBaseline) textBaseline=item.TextBaseline;
39447
+ var textAlign="center";
39448
+ if (item.TextAlign) textAlign=item.TextAlign;
39449
+
39450
+ this.Canvas.font=font;
39451
+ this.Canvas.textBaseline=textBaseline;
39452
+ this.Canvas.textAlign=textAlign;
39453
+ this.Canvas.fillStyle = item.Color;
39454
+ this.Canvas.fillText(item.Text, x, y);
39455
+ }
39456
+
39457
+ this.DrawLastIcon=function(item,x,y)
39458
+ {
39459
+ var dataWidth=this.ChartFrame.DataWidth;
39460
+ var distanceWidth=this.ChartFrame.DistanceWidth;
39461
+ var iconSize=this.GetDynamicIconSize(dataWidth,distanceWidth,this.IconSize.Max,this.IconSize.Min,this.IconSize.Zoom);
39462
+ var font=`${iconSize}px ${this.IconFamily}`;
39463
+
39464
+ var textBaseline='bottom';
39465
+ if (item.TextBaseline) textBaseline=item.TextBaseline;
39466
+ var textAlign="center";
39467
+ if (item.TextAlign) textAlign=item.TextAlign;
39468
+
39469
+ this.Canvas.font=font;
39470
+ this.Canvas.textBaseline=textBaseline;
39471
+ this.Canvas.textAlign=textAlign;
39472
+ this.Canvas.fillStyle = item.Color;
39473
+ this.Canvas.fillText(item.Icon.Symbol, x, y);
39474
+ }
39475
+
39476
+ this.GetMaxMin=function()
39477
+ {
39478
+ var range={ Min:null, Max:null };
39479
+ if (!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return range;
39480
+ var xPointCount=this.ChartFrame.XPointCount;
39481
+ var offset=this.Data.DataOffset;
39482
+ var index=offset+xPointCount;
39483
+ if (index<this.Data.Data.length) return range;
39484
+ if (!this.LastBarItem) return range;
39485
+
39486
+ if (IFrameSplitOperator.IsNumber(this.LastBarItem.Value)) range.Max=range.Min=this.LastBarItem.Value;
39487
+
39488
+ return range;
39489
+ }
39490
+ }
39491
+
39345
39492
  //直线 水平直线 只有1个数据
39346
39493
  function ChartStraightLine()
39347
39494
  {
@@ -46545,6 +46692,7 @@ function KLineTooltipPaint()
46545
46692
  var upperSymbol;
46546
46693
  if (this.HQChart.Symbol) upperSymbol=this.HQChart.Symbol.toUpperCase();
46547
46694
  var defaultfloatPrecision=GetfloatPrecision(this.HQChart.Symbol);//价格小数位数
46695
+ var unit=MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol);
46548
46696
 
46549
46697
  var aryText=[];
46550
46698
  var result={ AryText:aryText };
@@ -46628,7 +46776,7 @@ function KLineTooltipPaint()
46628
46776
  title=g_JSChartLocalization.GetText('Tooltip-Vol',this.LanguageID);
46629
46777
  var vol=item.Vol;
46630
46778
  if (upperSymbol && MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol)) vol/=100; //A股统一转成手
46631
- text=IFrameSplitOperator.FromatIntegerString(vol,2,this.LanguageID);
46779
+ text=IFrameSplitOperator.FromatIntegerString(vol/unit,2,this.LanguageID);
46632
46780
  aryText.push({Title:title, TitleColor:this.TitleColor, Text:text, Color:this.VolColor });
46633
46781
  }
46634
46782
 
@@ -47005,6 +47153,7 @@ function MinuteTooltipPaint()
47005
47153
  if (this.HQChart.Symbol) upperSymbol=this.HQChart.Symbol.toUpperCase();
47006
47154
  var isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol); //国内期货, 纽约期货交易所
47007
47155
  var defaultfloatPrecision=GetfloatPrecision(this.HQChart.Symbol);//价格小数位数
47156
+ var unit=MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol);
47008
47157
 
47009
47158
  this.YClose=this.TitlePaint.YClose;
47010
47159
  this.YClose=item.YClose;
@@ -47071,7 +47220,7 @@ function MinuteTooltipPaint()
47071
47220
  if (IFrameSplitOperator.IsNumber(vol))
47072
47221
  {
47073
47222
  title=g_JSChartLocalization.GetText('Tooltip-Vol',this.LanguageID);
47074
- var text=IFrameSplitOperator.FromatIntegerString(vol,2,this.LanguageID);
47223
+ var text=IFrameSplitOperator.FromatIntegerString(vol/unit,2,this.LanguageID);
47075
47224
  aryText.push({Title:title, TitleColor:this.TitleColor, Text:text, Color:this.VolColor });
47076
47225
  }
47077
47226
 
@@ -47092,134 +47241,6 @@ function MinuteTooltipPaint()
47092
47241
 
47093
47242
  return result;
47094
47243
  }
47095
-
47096
- /*
47097
- this.DrawTooltipData=function(item)
47098
- {
47099
- //JSConsole.Chart.Log('[KLineTooltipPaint::DrawKLineData] ', item);
47100
- if (!this.HQChart.Symbol) return;
47101
-
47102
- var defaultfloatPrecision=GetfloatPrecision(this.HQChart.Symbol);//价格小数位数
47103
- var left=this.GetLeft()+2*GetDevicePixelRatio();
47104
- var top=this.GetTop()+3*GetDevicePixelRatio();
47105
- this.YClose=this.KLineTitlePaint.YClose;
47106
- var upperSymbol=this.HQChart.Symbol.toUpperCase();
47107
-
47108
- if (this.IsHScreen)
47109
- {
47110
- this.Canvas.save();
47111
- var x=this.GetLeft()+this.Height, y=this.GetTop();
47112
-
47113
- this.Canvas.translate(x, y);
47114
- this.Canvas.rotate(90 * Math.PI / 180);
47115
-
47116
- //x, y 作为原点
47117
- left=2*GetDevicePixelRatio();
47118
- top=3*GetDevicePixelRatio();
47119
- }
47120
-
47121
- this.Canvas.textBaseline="top";
47122
- this.Canvas.textAlign="left";
47123
- this.Canvas.font=this.Font[0];
47124
- var labelWidth=this.Canvas.measureText('擎: ').width;
47125
-
47126
- var aryDateTime=item.DateTime.split(' ');
47127
- if (aryDateTime && aryDateTime.length==2)
47128
- {
47129
- var text=IFrameSplitOperator.FormatDateString(aryDateTime[0]);
47130
- this.Canvas.fillStyle=this.TitleColor;
47131
- this.Canvas.fillText(text, left,top);
47132
-
47133
- top+=this.LineHeight;
47134
- text=IFrameSplitOperator.FormatTimeString(aryDateTime[1]);
47135
- this.Canvas.fillText(text, left,top);
47136
- }
47137
-
47138
- var close=item.Close;
47139
- var increase=item.Increase;
47140
- var vol=item.Vol;
47141
- var amount=item.Amount;
47142
- if (item.Before) //读取盘前数据
47143
- {
47144
- close=item.Before.Close;
47145
- increase=item.Before.Increase;
47146
- vol=item.Before.Vol;
47147
- amount=item.Before.Amount;
47148
- }
47149
-
47150
- //最新价格
47151
- top+=this.LineHeight;
47152
- this.Canvas.fillStyle=this.TitleColor;
47153
- text=g_JSChartLocalization.GetText('Tooltip-Price',this.LanguageID);
47154
- this.Canvas.fillText(text, left,top);
47155
- var color=this.KLineTitlePaint.GetColor(close,this.YClose);
47156
- var text=close.toFixed(defaultfloatPrecision);
47157
- this.Canvas.fillStyle=color;
47158
- this.Canvas.fillText(text,left+labelWidth,top);
47159
-
47160
- var isShowAvPrice=true;
47161
- if (item.Before) isShowAvPrice=false; //集合竞价均价
47162
- else if (MARKET_SUFFIX_NAME.IsForeignExchange(upperSymbol)) isShowAvPrice=false; //外汇没有均价
47163
- else if (MARKET_SUFFIX_NAME.IsET(upperSymbol) && !MARKET_SUFFIX_NAME.IsETShowAvPrice(upperSymbol)) isShowAvPrice=false;
47164
- else if (MARKET_SUFFIX_NAME.IsShowAvPrice && !MARKET_SUFFIX_NAME.IsShowAvPrice(upperSymbol)) isShowAvPrice=false;
47165
-
47166
- //均价
47167
- if (isShowAvPrice && IFrameSplitOperator.IsNumber(item.AvPrice) && this.IsShowAveragePrice)
47168
- {
47169
- top+=this.LineHeight;
47170
- this.Canvas.fillStyle=this.TitleColor;
47171
- text=g_JSChartLocalization.GetText('Tooltip-AvPrice',this.LanguageID);
47172
- this.Canvas.fillText(text, left,top);
47173
- var color=this.KLineTitlePaint.GetColor(item.AvPrice,this.YClose);
47174
- var text=item.AvPrice.toFixed(defaultfloatPrecision);
47175
- this.Canvas.fillStyle=color;
47176
- this.Canvas.fillText(text,left+labelWidth,top);
47177
- }
47178
-
47179
- //涨幅
47180
- top+=this.LineHeight;
47181
- this.Canvas.fillStyle=this.TitleColor;
47182
- text=g_JSChartLocalization.GetText('Tooltip-Increase',this.LanguageID);
47183
- this.Canvas.fillText(text, left,top);
47184
- var value=(close-this.YClose)/this.YClose*100;
47185
- var color = this.KLineTitlePaint.GetColor(value, 0);
47186
- var text = value.toFixed(2)+'%';
47187
- this.Canvas.fillStyle=color;
47188
- this.Canvas.fillText(text,left+labelWidth,top);
47189
-
47190
- //成交量
47191
- if (IFrameSplitOperator.IsNumber(vol))
47192
- {
47193
- this.Canvas.fillStyle=this.TitleColor;
47194
- top+=this.LineHeight;
47195
- text=g_JSChartLocalization.GetText('Tooltip-Vol',this.LanguageID);
47196
- this.Canvas.fillText(text, left,top);
47197
- var text=IFrameSplitOperator.FromatIntegerString(vol,2,this.LanguageID);
47198
- this.Canvas.fillText(text,left+labelWidth,top);
47199
- }
47200
-
47201
- //成交金额
47202
- if (IFrameSplitOperator.IsNumber(amount))
47203
- {
47204
- top+=this.LineHeight;
47205
- text=g_JSChartLocalization.GetText('Tooltip-Amount',this.LanguageID);
47206
- this.Canvas.fillText(text, left,top);
47207
- var text=IFrameSplitOperator.FormatValueString(amount,2,this.LanguageID);
47208
- this.Canvas.fillText(text,left+labelWidth,top);
47209
- }
47210
-
47211
- if (IFrameSplitOperator.IsNumber(item.Position))
47212
- {
47213
- top+=this.LineHeight;
47214
- text=g_JSChartLocalization.GetText('Tooltip-Position',this.LanguageID);
47215
- this.Canvas.fillText(text, left,top);
47216
- var text=IFrameSplitOperator.FormatValueString(item.Position,2,this.LanguageID);
47217
- this.Canvas.fillText(text,left+labelWidth,top);
47218
- }
47219
-
47220
- if (this.IsHScreen) this.Canvas.restore();
47221
- }
47222
- */
47223
47244
  }
47224
47245
 
47225
47246
  //PC端 分时图tooltip左侧固定
@@ -47375,6 +47396,7 @@ function MinuteLeftTooltipPaint()
47375
47396
  if (this.HQChart.Symbol) upperSymbol=this.HQChart.Symbol.toUpperCase();
47376
47397
  var defaultfloatPrecision=GetfloatPrecision(upperSymbol);//价格小数位数
47377
47398
  if (upperSymbol) isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol); //国内期货, 纽约期货交易所
47399
+ var unit=MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol);
47378
47400
 
47379
47401
  if (drawData.Type==0) //连续交易
47380
47402
  {
@@ -47398,7 +47420,7 @@ function MinuteLeftTooltipPaint()
47398
47420
  var titleItem=this.ForamtIncrease(item.Close,"PCTooltip-Increase");
47399
47421
  if (titleItem) aryText.push(titleItem);
47400
47422
 
47401
- var titleItem=this.FormatVol(item.Vol,'PCTooltip-Vol');
47423
+ var titleItem=this.FormatVol(item.Vol/unit,'PCTooltip-Vol');
47402
47424
  if (titleItem) aryText.push(titleItem);
47403
47425
 
47404
47426
  if (IFrameSplitOperator.IsNumber(item.Amount))
@@ -47444,10 +47466,10 @@ function MinuteLeftTooltipPaint()
47444
47466
 
47445
47467
  if (IFrameSplitOperator.IsNonEmptyArray(item.Vol))
47446
47468
  {
47447
- var titleItem=this.FormatVol(item.Vol[0],'PCTooltip-AC-Vol');
47469
+ var titleItem=this.FormatVol(item.Vol[0]/unit,'PCTooltip-AC-Vol');
47448
47470
  if (titleItem) aryText.push(titleItem);
47449
47471
 
47450
- var titleItem=this.FormatVol(item.Vol[1],'PCTooltip-AC-NotMatchVol');
47472
+ var titleItem=this.FormatVol(item.Vol[1]/unit,'PCTooltip-AC-NotMatchVol');
47451
47473
  if (titleItem) aryText.push(titleItem);
47452
47474
  }
47453
47475
  }
@@ -58107,8 +58129,8 @@ function DynamicKLineTitlePainting()
58107
58129
 
58108
58130
  if (IFrameSplitOperator.IsNumber(item.Vol)) //成交量
58109
58131
  {
58110
- var vol=item.Vol;
58111
- if (upperSymbol && MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol)) vol/=100; //A股原始单位股, 转成股
58132
+ var unit=MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol);
58133
+ var vol=item.Vol/unit;
58112
58134
  var text=g_JSChartLocalization.GetText('KTitle-Vol',this.LanguageID)+IFrameSplitOperator.FromatIntegerString(vol,2,this.LanguageID);
58113
58135
  aryText.push({ Text:text, Color:this.VolColor});
58114
58136
  }
@@ -58538,6 +58560,7 @@ function DynamicMinuteTitlePainting()
58538
58560
  var upperSymbol=this.Symbol.toUpperCase();
58539
58561
  var defaultfloatPrecision=GetfloatPrecision(this.Symbol); //价格小数位数
58540
58562
  var isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol); //国内期货, 纽约期货交易所
58563
+ var unit=MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol);
58541
58564
 
58542
58565
  var item=data.Data;
58543
58566
  var isLastOne=data.IsLastOne;
@@ -58615,7 +58638,7 @@ function DynamicMinuteTitlePainting()
58615
58638
 
58616
58639
  if (IFrameSplitOperator.IsNumber(vol))
58617
58640
  {
58618
- var text=g_JSChartLocalization.GetText('MTitle-Vol',this.LanguageID)+IFrameSplitOperator.FromatIntegerString(vol,2,this.LanguageID);
58641
+ var text=g_JSChartLocalization.GetText('MTitle-Vol',this.LanguageID)+IFrameSplitOperator.FromatIntegerString(vol/unit,2,this.LanguageID);
58619
58642
  aryText.push({Text:text, Color:this.VolColor});
58620
58643
  }
58621
58644
 
@@ -58722,7 +58745,8 @@ function DynamicMinuteTitlePainting()
58722
58745
  var aryText=[] //{ Color: Text: }
58723
58746
 
58724
58747
  var defaultfloatPrecision=GetfloatPrecision(this.Symbol);//价格小数位数
58725
-
58748
+ var upperSymbol=this.Symbol.toUpperCase();
58749
+ var unit=MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol);
58726
58750
  //股票名称
58727
58751
  if (this.IsShowName) aryText.push({Text:this.Name, Color:this.NameColor});
58728
58752
 
@@ -58774,14 +58798,14 @@ function DynamicMinuteTitlePainting()
58774
58798
  {
58775
58799
  var filedName='MTitle-AC-Vol';
58776
58800
  if (data.Ver==1.0) filedName="MTitle-Vol";
58777
- var text=g_JSChartLocalization.GetText(filedName,this.LanguageID)+IFrameSplitOperator.FromatIntegerString(item.Vol[0],2);
58801
+ var text=g_JSChartLocalization.GetText(filedName,this.LanguageID)+IFrameSplitOperator.FromatIntegerString(item.Vol[0]/unit,2);
58778
58802
  aryText.push({Text:text, Color:this.VolColor});
58779
58803
  }
58780
58804
 
58781
58805
  //未匹配量
58782
58806
  if (IFrameSplitOperator.IsNumber(item.Vol[1]) && this.CallAuctionShowTitle.has("MTitle-AC-NotMatchVol"))
58783
58807
  {
58784
- var text=g_JSChartLocalization.GetText('MTitle-AC-NotMatchVol',this.LanguageID)+IFrameSplitOperator.FromatIntegerString(item.Vol[1],2);
58808
+ var text=g_JSChartLocalization.GetText('MTitle-AC-NotMatchVol',this.LanguageID)+IFrameSplitOperator.FromatIntegerString(item.Vol[1]/unit,2);
58785
58809
  aryText.push({Text:text, Color:this.VolColor});
58786
58810
  }
58787
58811
 
@@ -73571,6 +73595,11 @@ function JSChartResource()
73571
73595
  Color:"rgb(255,165,0)"
73572
73596
  }
73573
73597
 
73598
+ this.DRAWLASTICON=
73599
+ {
73600
+ Family:'iconfont',
73601
+ }
73602
+
73574
73603
  this.POINTDOT=
73575
73604
  {
73576
73605
  Radius:2*GetDevicePixelRatio()
@@ -77172,6 +77201,9 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
77172
77201
  this.Canvas.rect(this.Frame.ChartBorder.GetLeft(),this.Frame.ChartBorder.GetTop(),this.Frame.ChartBorder.GetWidth(),this.Frame.ChartBorder.GetHeight());
77173
77202
  isInClient=this.Canvas.isPointInPath(x,y);
77174
77203
 
77204
+ //PC触摸板双指缩放时deltaY数值在[-20,20]之间
77205
+ if (IFrameSplitOperator.IsNumber(e.deltaY) && Math.abs(e.deltaY)<90) return;
77206
+
77175
77207
  var wheelValue=e.wheelDelta;
77176
77208
  if (!IFrameSplitOperator.IsObjectExist(e.wheelDelta))
77177
77209
  wheelValue=e.deltaY* -0.01;
@@ -89799,7 +89831,7 @@ MinuteChartContainer.JsonDataToBeforeOpenData=function(data)
89799
89831
  var symbol=data.stock[0].symbol;
89800
89832
  var upperSymbol=symbol.toUpperCase();
89801
89833
  var isSHSZ=MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol);
89802
-
89834
+ var unit=MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol);
89803
89835
  var yClose=data.stock[0].yclose;
89804
89836
  var preClose=data.stock[0].yclose; //前一个数据价格
89805
89837
  var stockData=data.stock[0];
@@ -89826,8 +89858,7 @@ MinuteChartContainer.JsonDataToBeforeOpenData=function(data)
89826
89858
  item.Price=jsData[1];
89827
89859
  if (!item.Price) item.Price=preClose;
89828
89860
  else preClose=item.Price;
89829
- if (isSHSZ) item.Vol[0]=jsData[2]/100; //沪深股票原始单位股
89830
- else item.Vol[0]=jsData[2];
89861
+ item.Vol[0]=jsData[2];
89831
89862
  item.Amount=jsData[3];
89832
89863
 
89833
89864
  if (IFrameSplitOperator.IsNumber(jsData[4]) && jsData[4]>19000101) //日期
@@ -89863,7 +89894,7 @@ MinuteChartContainer.JsonDataToBeforeOpenData=function(data)
89863
89894
  beforeOpenData.Data.push(item);
89864
89895
  }
89865
89896
 
89866
- beforeOpenData.VolMax=max;
89897
+ beforeOpenData.VolMax=max/unit;
89867
89898
  beforeOpenData.VolMin=0;
89868
89899
  }
89869
89900
  else if (beforeOpenData.Ver==3.0)
@@ -89891,7 +89922,7 @@ MinuteChartContainer.JsonDataToBeforeOpenData=function(data)
89891
89922
  beforeOpenData.Data.push(item);
89892
89923
  }
89893
89924
 
89894
- beforeOpenData.VolMax=max;
89925
+ beforeOpenData.VolMax=max/unit;
89895
89926
  beforeOpenData.VolMin=0;
89896
89927
  }
89897
89928
 
@@ -89906,12 +89937,14 @@ MinuteChartContainer.JsonDataToAfterCloseData=function(data)
89906
89937
  var stockData=data.stock[0];
89907
89938
  var date=stockData.date; //日期
89908
89939
  if (!stockData.afterinfo) return null;
89909
-
89940
+ var symbol=data.stock[0].symbol;
89941
+ var upperSymbol=symbol.toLowerCase();
89910
89942
  var afterCloseData={ Data:[], TotalCount:3*60, Ver:2.0, Date:date };
89911
89943
  var item=stockData.afterinfo;
89912
89944
  if (IFrameSplitOperator.IsNumber(item.totalcount)) afterCloseData.TotalCount=item.totalcount;
89913
89945
  if (IFrameSplitOperator.IsNumber(item.ver)) afterCloseData.Ver=item.ver;
89914
89946
  var extendDataIndex=JSCHART_DATA_FIELD_ID.MINUTE_AFTERCLOSE_EXTENDDATA; //扩展数据序号
89947
+ var unit=MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol);
89915
89948
 
89916
89949
  if (afterCloseData.Ver==1.0)
89917
89950
  {
@@ -89957,7 +89990,7 @@ MinuteChartContainer.JsonDataToAfterCloseData=function(data)
89957
89990
  afterCloseData.Data.push(item);
89958
89991
  }
89959
89992
 
89960
- afterCloseData.VolMax=max;
89993
+ afterCloseData.VolMax=max/unit;
89961
89994
  afterCloseData.VolMin=0;
89962
89995
  }
89963
89996
  else if (afterCloseData.Ver==3.0)
@@ -89984,7 +90017,7 @@ MinuteChartContainer.JsonDataToAfterCloseData=function(data)
89984
90017
  afterCloseData.Data.push(item);
89985
90018
  }
89986
90019
 
89987
- afterCloseData.VolMax=max;
90020
+ afterCloseData.VolMax=max/unit;
89988
90021
  afterCloseData.VolMin=0;
89989
90022
  }
89990
90023
 
@@ -90021,8 +90054,7 @@ MinuteChartContainer.JsonDataToMinuteData=function(data,isBeforeData)
90021
90054
  item.Open=jsData.open;
90022
90055
  item.High=jsData.high;
90023
90056
  item.Low=jsData.low;
90024
- if (isSHSZ) item.Vol=jsData.vol/100; //沪深股票原始单位股
90025
- else item.Vol=jsData.vol;
90057
+ item.Vol=jsData.vol;
90026
90058
  item.Amount=jsData.amount;
90027
90059
  if (jsData.date>0) date=jsData.date; //分钟数据中有日期 优先使用
90028
90060
  item.DateTime=date.toString()+" "+jsData.time.toString();
@@ -90106,7 +90138,6 @@ MinuteChartContainer.JsonDataToUpdateMinuteData=function(data)
90106
90138
 
90107
90139
  if (jsData[extendDataIndex]) item.ExtendData=jsData[extendDataIndex];
90108
90140
  item.DateTime=item.Date.toString()+" "+item.Time.toString();
90109
- if (isSHSZ) item.Vol=item.Vol/100; //沪深股票原始单位股
90110
90141
 
90111
90142
  if (IFrameSplitOperator.IsNumber(minuteData.YClose) && item.Close)
90112
90143
  item.Increase=(item.Close-minuteData.YClose)/minuteData.YClose*100; //涨幅 (最新价格-昨收)/昨收*100;
@@ -90200,8 +90231,7 @@ MinuteChartContainer.JsonDataToMinuteDataArray=function(data)
90200
90231
  item.High=jsData[3];
90201
90232
  item.Low=jsData[4];
90202
90233
  item.Increase=null;
90203
- if (isSHSZ) item.Vol=jsData[5]/100; //原始单位股
90204
- else item.Vol=jsData[5];
90234
+ item.Vol=jsData[5];
90205
90235
  item.Amount=jsData[6];
90206
90236
  if (7<jsData.length && jsData[7]>0) item.AvPrice=jsData[7]; //均价
90207
90237
  item.DateTime=date.toString()+" "+jsData[0].toString();
@@ -90280,12 +90310,8 @@ MinuteChartContainer.JsonDataToHistoryMinuteLineColorData=function(data)
90280
90310
 
90281
90311
  MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, isBeforeOpen, symbol)
90282
90312
  {
90283
- var isSHSZ=false;
90284
- if (symbol)
90285
- {
90286
- var upperSymbol=symbol.toUpperCase();
90287
- isSHSZ=MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol);
90288
- }
90313
+ var upperSymbol=symbol?symbol.toUpperCase():null;
90314
+ var unit=MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol);
90289
90315
 
90290
90316
  var date=callAuctionData.Date;
90291
90317
  var yClose=callAuctionData.YClose;
@@ -90305,7 +90331,7 @@ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, i
90305
90331
  item.Price=jsData[1];
90306
90332
  if (!item.Price) item.Price=preClose;
90307
90333
  else preClose=item.Price;
90308
- item.Vol[0]=isSHSZ ? jsData[2]/100 : jsData[2]; //沪深股票原始单位股
90334
+ item.Vol[0]=jsData[2]; //沪深股票原始单位股
90309
90335
  item.Amount=jsData[3];
90310
90336
  if (IFrameSplitOperator.IsNumber(jsData[4])) //日期
90311
90337
  item.Date=jsData[4];
@@ -90340,7 +90366,7 @@ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, i
90340
90366
  callAuctionData.Data.push(item);
90341
90367
  }
90342
90368
 
90343
- callAuctionData.VolMax=max;
90369
+ callAuctionData.VolMax=max/unit;
90344
90370
  callAuctionData.VolMin=0;
90345
90371
  }
90346
90372
  else if (beforeOpenData.Ver==3.0)
@@ -90368,7 +90394,7 @@ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, i
90368
90394
  callAuctionData.Data.push(item);
90369
90395
  }
90370
90396
 
90371
- callAuctionData.VolMax=max;
90397
+ callAuctionData.VolMax=max/unit;
90372
90398
  callAuctionData.VolMin=0;
90373
90399
  }
90374
90400
  }
@@ -90424,201 +90450,6 @@ MinuteChartContainer.JosnDataToAfterCloseDataArray=function(data)
90424
90450
  return aryDay;
90425
90451
  }
90426
90452
 
90427
- /*
90428
- 历史分钟走势图
90429
- */
90430
- /* 废弃 统一使用 MinuteChartContainer
90431
- function HistoryMinuteChartContainer(uielement)
90432
- {
90433
- this.newMethod=MinuteChartContainer; //派生
90434
- this.newMethod(uielement);
90435
- delete this.newMethod;
90436
-
90437
- this.HistoryMinuteApiUrl="http://127.0.0.1:8080/cache/minuteday/day/";
90438
- this.ClassName='HistoryMinuteChartContainer';
90439
-
90440
- //创建主图K线画法
90441
- this.CreateMainKLine=function()
90442
- {
90443
- //分钟线
90444
- var minuteLine=new ChartMinutePriceLine();
90445
- minuteLine.Canvas=this.Canvas;
90446
- minuteLine.ChartBorder=this.Frame.SubFrame[0].Frame.ChartBorder;
90447
- minuteLine.ChartFrame=this.Frame.SubFrame[0].Frame;
90448
- minuteLine.Name="Minute-Line";
90449
- minuteLine.Color=g_JSChartResource.Minute.PriceColor;
90450
-
90451
- this.ChartPaint[0]=minuteLine;
90452
-
90453
- //分钟线均线
90454
- var averageLine=new ChartLine();
90455
- averageLine.Canvas=this.Canvas;
90456
- averageLine.ChartBorder=this.Frame.SubFrame[0].Frame.ChartBorder;
90457
- averageLine.ChartFrame=this.Frame.SubFrame[0].Frame;
90458
- averageLine.Name="Minute-Average-Line";
90459
- averageLine.Color=g_JSChartResource.Minute.AvPriceColor;
90460
- this.ChartPaint[1]=averageLine;
90461
-
90462
- var averageLine=new ChartMinuteVolumBar();
90463
- averageLine.Color=g_JSChartResource.Minute.VolBarColor;
90464
- averageLine.Canvas=this.Canvas;
90465
- averageLine.ChartBorder=this.Frame.SubFrame[1].Frame.ChartBorder;
90466
- averageLine.ChartFrame=this.Frame.SubFrame[1].Frame;
90467
- averageLine.Name="Minute-Vol-Bar";
90468
- this.ChartPaint[2]=averageLine;
90469
-
90470
-
90471
- this.TitlePaint[0]=new DynamicMinuteTitlePainting();
90472
- this.TitlePaint[0].Frame=this.Frame.SubFrame[0].Frame;
90473
- this.TitlePaint[0].Canvas=this.Canvas;
90474
- this.TitlePaint[0].IsShowDate=true;
90475
- }
90476
-
90477
- //设置交易日期
90478
- this.ChangeTradeDate=function(trdateDate)
90479
- {
90480
- if (!trdateDate) return;
90481
-
90482
- this.TradeDate=trdateDate;
90483
- this.RequestData(); //更新数据
90484
- }
90485
-
90486
- this.RequestData=function()
90487
- {
90488
- var date=new Date();
90489
- var nowDate=date.getFullYear()*10000+(date.getMonth()+1)*100+date.getDate();
90490
- if (nowDate==this.TradeDate) this.RequestMinuteData();
90491
- else this.RequestHistoryMinuteData();
90492
- }
90493
-
90494
- //请求分钟数据
90495
- this.RequestHistoryMinuteData=function()
90496
- {
90497
- var self=this;
90498
- var url=this.HistoryMinuteApiUrl+this.TradeDate.toString()+"/"+this.Symbol+".json";
90499
-
90500
- JSNetwork.HttpRequest({
90501
- url: url,
90502
- type:"get",
90503
- dataType: "json",
90504
- async:true,
90505
- success: function (data)
90506
- {
90507
- self.ChartSplashPaint.EnableSplash(false);
90508
- self.RecvHistoryMinuteData(data);
90509
- },
90510
- error:function(reqeust)
90511
- {
90512
- self.ChartSplashPaint.EnableSplash(false);
90513
- self.RecvHistoryMinuteError(reqeust);
90514
- }
90515
- });
90516
- }
90517
-
90518
- this.RecvHistoryMinuteError=function(reqeust)
90519
- {
90520
- if (reqeust.status!=404) return;
90521
-
90522
- var sourceData=new ChartData();
90523
- this.SourceData=sourceData;
90524
-
90525
- for(var i in this.ChartPaint)
90526
- {
90527
- this.ChartPaint[i].Data=sourceData;
90528
- if (i==0) this.ChartPaint[i].NotSupportMessage='没有权限访问!';
90529
- }
90530
-
90531
- this.TitlePaint[0].Data=this.SourceData; //动态标题
90532
- this.TitlePaint[0].Symbol=this.Symbol;
90533
- this.TitlePaint[0].Name=null;
90534
-
90535
- this.Draw();
90536
- }
90537
-
90538
- this.RecvHistoryMinuteData=function(data)
90539
- {
90540
- var aryMinuteData=HistoryMinuteChartContainer.JsonDataToMinuteData(data);
90541
-
90542
- //原始数据
90543
- var sourceData=new ChartData();
90544
- sourceData.Data=aryMinuteData;
90545
-
90546
- this.TradeDate=data.date;
90547
-
90548
- this.SourceData=sourceData;
90549
- this.Symbol=data.symbol;
90550
- this.Name=data.name;
90551
-
90552
- this.BindMainData(sourceData,data.day.yclose);
90553
-
90554
- if (this.Frame.SubFrame.length>2)
90555
- {
90556
- var bindData=new ChartData();
90557
- bindData.Data=aryMinuteData;
90558
- for(var i=2; i<this.Frame.SubFrame.length; ++i)
90559
- {
90560
- this.BindIndexData(i,bindData);
90561
- }
90562
- }
90563
-
90564
- this.UpdateFrameMaxMin(); //调整坐标最大 最小值
90565
- this.Frame.SetSizeChage(true);
90566
- this.Draw();
90567
-
90568
- //this.AutoUpdata();
90569
- }
90570
-
90571
- }
90572
-
90573
- //API 返回数据 转化为array[]
90574
- HistoryMinuteChartContainer.JsonDataToMinuteData=function(data)
90575
- {
90576
- var aryMinuteData=[];
90577
- for(var i in data.minute.time)
90578
- {
90579
- var item=new MinuteData();
90580
-
90581
- if (data.minute.price[i]<=0 && i>0) //当前这一分钟价格为空,使用上一分钟的数据
90582
- {
90583
- item.Close=aryMinuteData[i-1].Close;
90584
- item.Open=aryMinuteData[i-1].Close;
90585
- item.High=item.Close;
90586
- item.Low=item.Close;
90587
- item.Vol=data.minute.vol[i]; //原始单位股
90588
- item.Amount=data.minute.amount[i];
90589
- item.DateTime=data.date.toString()+" "+data.minute.time[i].toString();
90590
- //item.Increate=jsData.increate;
90591
- //item.Risefall=jsData.risefall;
90592
- item.AvPrice=aryMinuteData[i-1].AvPrice;
90593
- }
90594
- else
90595
- {
90596
- item.Close=data.minute.price[i];
90597
- item.Open=data.minute.open[i];
90598
- item.High=data.minute.high[i];
90599
- item.Low=data.minute.low[i];
90600
- item.Vol=data.minute.vol[i]; //原始单位股
90601
- item.Amount=data.minute.amount[i];
90602
- item.DateTime=data.date.toString()+" "+data.minute.time[i].toString();
90603
- //item.Increate=jsData.increate;
90604
- //item.Risefall=jsData.risefall;
90605
- item.AvPrice=data.minute.avprice[i];
90606
- }
90607
-
90608
- //价格是0的 都用空
90609
- if (item.Open<=0) item.Open=null;
90610
- if (item.Close<=0) item.Close=null;
90611
- if (item.AvPrice<=0) item.AvPrice=null;
90612
- if (item.High<=0) item.High=null;
90613
- if (item.Low<=0) item.Low=null;
90614
-
90615
- aryMinuteData[i]=item;
90616
- }
90617
-
90618
- return aryMinuteData;
90619
- }
90620
- */
90621
-
90622
90453
  /////////////////////////////////////////////////////////////////////////////
90623
90454
  // 自定义指数
90624
90455
  //
@@ -95679,6 +95510,16 @@ var MARKET_SUFFIX_NAME=
95679
95510
  if (ChartData.IsMinutePeriod(period,true)) return false; //内置分钟K线不支持复权
95680
95511
 
95681
95512
  return true;
95513
+ },
95514
+
95515
+ //获取成交量单位
95516
+ GetVolUnit:function(upperSymbol)
95517
+ {
95518
+ if (!upperSymbol) return 1;
95519
+ if (MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol)) return 100; //单位手=100股
95520
+ if (MARKET_SUFFIX_NAME.IsBJ(upperSymbol)) return 100; //单位手=100股
95521
+
95522
+ return 1;
95682
95523
  }
95683
95524
  }
95684
95525
 
@@ -98970,6 +98811,8 @@ function GetLocalTime(i) //得到标准时区的时间的函数
98970
98811
 
98971
98812
 
98972
98813
 
98814
+
98815
+
98973
98816
  /*
98974
98817
  Copyright (c) 2018 jones
98975
98818
 
@@ -110360,6 +110203,105 @@ function JSDraw(errorHandler,symbolData)
110360
110203
 
110361
110204
  return result;
110362
110205
  }
110206
+
110207
+
110208
+ ///////////////////////////////////////////////////////////////////////////////////
110209
+ //DRAWLASTBARICON :在最后一根k线绘制图标。
110210
+ //用法:DRAWLASTBARICON(PRICE,ICON);
110211
+ //最后一根k线,在PRICE位置画图标ICON。
110212
+ //
110213
+ //注:
110214
+ //1、该函数可以指定位置PRICE标注图标ICON
110215
+ //2、ICON位置可以写成'ICON'的形式,也可以写为数字的形式,即DRAWLASTBARICON(PRICE,'ICO1');等价于DRAWLASTBARICON(PRICE,1);
110216
+ //3、不支持将该函数定义为变量,即不支持下面的写法:
110217
+ //A:DRAWLASTBARICON(PRICE,ICON);
110218
+ //4、该函数可以用ALIGN,VALIGN设置图标的对齐方式。
110219
+ //例1:
110220
+ //DRAWLASTBARICON(LOW,'ICO1');//在最后一根k线最低价上画出图标ICON1。
110221
+ //例2:
110222
+ //MA5:=MA(C,5);
110223
+ //DRAWLASTBARICON(MA5,2);//表示在最后一根k线对应的MA5数值位置上画出图标ICON2。
110224
+
110225
+ this.DRAWLASTBARICON=function(data, type)
110226
+ {
110227
+ if (IFrameSplitOperator.IsString(type)) //把ICO1=>1
110228
+ {
110229
+ var value=type.replace('ICO',"");
110230
+ type=parseInt(value);
110231
+ }
110232
+
110233
+ var icon=g_JSComplierResource.GetDrawIcon(type);
110234
+ if (!icon) g_JSComplierResource.GetDrawTextIcon(type);
110235
+ if (!icon) icon={ Symbol:'🚩'};
110236
+
110237
+ var drawItem={ Value:null, Icon:icon, IconType:type };
110238
+ if (IFrameSplitOperator.IsNonEmptyArray(data)) drawItem.Value=data[data.length-1];
110239
+ else drawItem.Value=data;
110240
+
110241
+ var result={ DrawData:drawItem, DrawType:'DRAWLASTBARICON' };
110242
+
110243
+ return result;
110244
+ }
110245
+
110246
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
110247
+ //DRAWLASTBARTEXT:显在最后一根k线显示文字。
110248
+ //用法:DRAWLASTBARTEXT(PRICE,TEXT);
110249
+ //最后一根k线,在PRICE位置书写文字TEXT。
110250
+ //注:
110251
+ //1、显示的汉字用单引号标注
110252
+ //2、可以设置文字显示的对齐方式,字体大小以及文字的颜色,即支持下面的写法:
110253
+ //DRAWLASTBARTEXT(PRICE,TEXT),COLOR,ALIGN,VALIGN;
110254
+ //例1:
110255
+ //DRAWLASTBARTEXT(LOW,'注');//
110256
+ //最后一根k线,在最低价上写"注"字。
110257
+ //例2:
110258
+ //DRAWLASTBARTEXT(LOW,'低'),ALIGN0,FONTSIZE16,COLORRED;//在最后一根k线,在最低价写"低"字,文字左对齐,字体大小为16,文字颜色为红色。
110259
+
110260
+ this.DRAWLASTBARTEXT=function(data, text)
110261
+ {
110262
+ var drawItem={ Value:null, Text:text };
110263
+ if (IFrameSplitOperator.IsNonEmptyArray(data)) drawItem.Value=data[data.length-1];
110264
+ else drawItem.Value=data;
110265
+
110266
+ var result={ DrawData:drawItem, DrawType:'DRAWLASTBARTEXT' };
110267
+
110268
+ return result;
110269
+ }
110270
+
110271
+ /////////////////////////////////////////////////////////////////////////////////////////////////////
110272
+ //DRAWLASTBARNUMBER:在最后一根k线输出数值。
110273
+ //用法:DRAWLASTBARNUMBER(DATA,NUMBER,PRECISION,COLOR);
110274
+ //最后一根k线在DATA位置写数字NUMBER。PRECISION为精度(小数点后有几位数字)。COLOR为颜色。
110275
+ //注:
110276
+ //该函数支持在函数后设置文字的大小和文字对齐方式。即支持下面的写法:
110277
+ //DRAWLASTBARNUMBER(DATA,NUMBER,PRECISION,COLOR),ALIGN,VALIGN;
110278
+ //例1:
110279
+ //DRAWLASTBARNUMBER(HIGH,(CLOSE-OPEN)/OPEN*100,2,COLORRED);//最后一根k线在最高价位置红色显示涨幅数值(相对开盘价的百分比,精确2位小数)。
110280
+ //例2:
110281
+ //DRAWLASTBARNUMBER(L,REF(C,1),2,COLORRED),ALIGN0,VALIGN0;//表示最后一根k线的最低价处以红色显示昨收盘价数值(精确2位小数),标注文字居左,居上对齐。
110282
+
110283
+ this.DRAWLASTBARNUMBER=function(data,value,dec,color)
110284
+ {
110285
+ var drawItem={ Value:null, Text:null, Color:color };
110286
+ if (IFrameSplitOperator.IsNonEmptyArray(data)) drawItem.Value=data[data.length-1];
110287
+ else drawItem.Value=data;
110288
+
110289
+ var precision=2;
110290
+ if (IFrameSplitOperator.IsNumber(dec)) precision=parseInt(dec);
110291
+ if (IFrameSplitOperator.IsNumber(value))
110292
+ {
110293
+ drawItem.Text=value.toFixed(precision);
110294
+ }
110295
+ else if (IFrameSplitOperator.IsNonEmptyArray(value))
110296
+ {
110297
+ var lastValue=value[value.length-1];
110298
+ if (IFrameSplitOperator.IsNumber(lastValue)) drawItem.Text=lastValue.toFixed(precision);
110299
+ }
110300
+
110301
+ var result={ DrawData:drawItem, DrawType:'DRAWLASTBARNUMBER' };
110302
+
110303
+ return result;
110304
+ }
110363
110305
  }
110364
110306
 
110365
110307
 
@@ -110414,6 +110356,7 @@ JSDraw.prototype.IsDrawFunction=function(name)
110414
110356
  'DRAWOVERLAYLINE',"FILLRGN", "FILLRGN2","FILLTOPRGN", "FILLBOTTOMRGN", "FILLVERTICALRGN","FLOATRGN","DRAWSL", "DRAWGBK2","DRAWGBK_DIV",
110415
110357
  "VERTLINE","HORLINE","TIPICON",
110416
110358
  "BUY","SELL","SELLSHORT","BUYSHORT",
110359
+ "DRAWLASTBARICON","DRAWLASTBARNUMBER", "DRAWLASTBARTEXT",
110417
110360
  ]);
110418
110361
  if (setFunctionName.has(name)) return true;
110419
110362
 
@@ -111353,9 +111296,7 @@ function JSSymbolData(ast,option,jsExecute)
111353
111296
  return kData.GetClose();
111354
111297
  case 'VOL':
111355
111298
  case 'V':
111356
- if (MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol))
111357
- return kData.GetVol(100); //A股的 把股转成手
111358
- return kData.GetVol();
111299
+ return kData.GetVol(MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol));
111359
111300
  case 'OPEN':
111360
111301
  case 'O':
111361
111302
  return kData.GetOpen();
@@ -111984,9 +111925,7 @@ function JSSymbolData(ast,option,jsExecute)
111984
111925
  return this.Data.GetClose();
111985
111926
  case 'VOL':
111986
111927
  case 'V':
111987
- if (MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol) && this.DataType==HQ_DATA_TYPE.KLINE_ID) //!! A股K线量单位时股,分时图单位还是手
111988
- return this.Data.GetVol(100); //A股的 把股转成手
111989
- return this.Data.GetVol();
111928
+ return this.Data.GetVol(MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol));
111990
111929
  case 'OPEN':
111991
111930
  case 'O':
111992
111931
  return this.Data.GetOpen();
@@ -112232,9 +112171,7 @@ function JSSymbolData(ast,option,jsExecute)
112232
112171
  return result.GetAmount();
112233
112172
  case 'V':
112234
112173
  case "VOL":
112235
- if (MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol))
112236
- return result.GetVol(100);
112237
- return result.GetVol();
112174
+ return result.GetVol(MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol));
112238
112175
  case "VOLINSTK":
112239
112176
  return result.GetPosition();
112240
112177
  default:
@@ -115696,6 +115633,7 @@ function JSExecute(ast,option)
115696
115633
  ["OFFERCANCELVOL", null], //累计总有效撤卖量,专业版等(资金流向功能)沪深京品种行情专用 累计总有效委卖量-累计总有效撤卖量=总卖+总成交量
115697
115634
  ["AVGOFFERPX", null], //专业版等(资金流向功能)沪深京品种行情专用:最新委卖均价
115698
115635
  //["", null],
115636
+
115699
115637
  ]);
115700
115638
 
115701
115639
  this.SymbolData=new JSSymbolData(this.AST,option,this);
@@ -117152,6 +117090,20 @@ function JSExecute(ast,option)
117152
117090
  node.Draw=this.Draw.HORLINE(args[0],args[1],args[2],args[3]);
117153
117091
  node.Out=node.Draw.DrawData.Data;
117154
117092
  break;
117093
+
117094
+ case "DRAWLASTBARICON":
117095
+ node.Draw=this.Draw.DRAWLASTBARICON(args[0],args[1]);
117096
+ node.Out=[];
117097
+ break;
117098
+ case "DRAWLASTBARNUMBER":
117099
+ node.Draw=this.Draw.DRAWLASTBARNUMBER(args[0],args[1],args[2],args[3]);
117100
+ node.Out=[];
117101
+ break;
117102
+ case "DRAWLASTBARTEXT":
117103
+ node.Draw=this.Draw.DRAWLASTBARTEXT(args[0],args[1]);
117104
+ node.Out=[];
117105
+ break;
117106
+
117155
117107
  case 'CODELIKE':
117156
117108
  node.Out=this.SymbolData.CODELIKE(args[0]);
117157
117109
  break;
@@ -117564,6 +117516,22 @@ function JSExplainer(ast,option)
117564
117516
  ["OFFERCANCELVOL", "累计总有效撤卖量"],
117565
117517
  ["AVGOFFERPX", "最新委卖均价"],
117566
117518
 
117519
+ ['COLORBLACK','黑色'],
117520
+ ['COLORBLUE','蓝色'],
117521
+ ['COLORGREEN','绿色'],
117522
+ ['COLORCYAN','青色'],
117523
+ ['COLORRED','红色'],
117524
+ ['COLORMAGENTA','洋红色'],
117525
+ ['COLORBROWN','棕色'],
117526
+ ['COLORLIGRAY','淡灰色'],
117527
+ ['COLORGRAY','深灰色'],
117528
+ ['COLORLIBLUE','淡蓝色'],
117529
+ ['COLORLIGREEN','淡绿色'],
117530
+ ['COLORLICYAN','淡青色'],
117531
+ ['COLORLIRED','淡红色'],
117532
+ ['COLORLIMAGENTA','淡洋红色'],
117533
+ ['COLORWHITE','白色'],
117534
+ ['COLORYELLOW','黄色']
117567
117535
  ]);
117568
117536
 
117569
117537
  if (option)
@@ -118265,6 +118233,12 @@ function JSExplainer(ast,option)
118265
118233
  case "BUYSHORT":
118266
118234
  return "买入平仓";
118267
118235
 
118236
+ case "DRAWLASTBARNUMBER":
118237
+ return "在最后一根k线输出数值";
118238
+ case "DRAWLASTBARTEXT":
118239
+ return "在最后一根k线显示文字";
118240
+ case "DRAWLASTBARICON":
118241
+ return "在最后一根k线绘制图标";
118268
118242
  case "YMOVE":
118269
118243
  return;
118270
118244
  case "BACKGROUND":
@@ -120436,6 +120410,49 @@ function ScriptIndex(name,script,args,option)
120436
120410
  hqChart.ChartPaint.push(chart);
120437
120411
  }
120438
120412
 
120413
+ this.CreateDrawLastBarText=function(hqChart,windowIndex,varItem,id)
120414
+ {
120415
+ var chart=new ChartDrawLastBarText();
120416
+ chart.Canvas=hqChart.Canvas;
120417
+ chart.Name=varItem.Name;
120418
+ chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;
120419
+ chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;
120420
+
120421
+ if (hqChart.ChartPaint[0].IsMinuteFrame())
120422
+ chart.Data=hqChart.SourceData;
120423
+ else
120424
+ chart.Data=hqChart.ChartPaint[0].Data;//绑定K线
120425
+
120426
+ var lastItem=varItem.Draw.DrawData;
120427
+ if (lastItem)
120428
+ {
120429
+ if (lastItem.Color) lastItem.Color=this.GetColor(lastItem.Color);
120430
+ else lastItem.Color=this.GetDefaultColor(id);
120431
+ if (varItem.Color) lastItem.Color=this.GetColor(varItem.Color);
120432
+
120433
+ if (varItem.DrawVAlign>=0)
120434
+ {
120435
+ if (varItem.DrawVAlign==0) lastItem.TextBaseline='top';
120436
+ else if (varItem.DrawVAlign==1) lastItem.TextBaseline='middle';
120437
+ else if (varItem.DrawVAlign==2) lastItem.TextBaseline='bottom';
120438
+ }
120439
+
120440
+ if (varItem.DrawAlign>=0)
120441
+ {
120442
+ if (varItem.DrawAlign==0) lastItem.TextAlign="left";
120443
+ else if (varItem.DrawAlign==1) lastItem.TextAlign="center";
120444
+ else if (varItem.DrawAlign==2) lastItem.TextAlign='right';
120445
+ }
120446
+
120447
+ if (IFrameSplitOperator.IsNumber(varItem.YOffset)) lastItem.YOffset=varItem.YOffset;
120448
+ if (IFrameSplitOperator.IsNumber(varItem.XOffset)) lastItem.XOffset=varItem.XOffset;
120449
+ if (varItem.DrawFontSize>0) lastItem.FontSize=varItem.DrawFontSize;
120450
+ }
120451
+
120452
+ chart.LastBarItem=lastItem;
120453
+ hqChart.ChartPaint.push(chart);
120454
+ }
120455
+
120439
120456
  //创建通道
120440
120457
  this.CreateChannel=function(hqChart,windowIndex,varItem,id)
120441
120458
  {
@@ -121032,6 +121049,12 @@ function ScriptIndex(name,script,args,option)
121032
121049
  this.CreateTradeIcon(hqChart,windowIndex,item,i);
121033
121050
  break;
121034
121051
 
121052
+ case "DRAWLASTBARICON":
121053
+ case "DRAWLASTBARNUMBER":
121054
+ case "DRAWLASTBARTEXT":
121055
+ this.CreateDrawLastBarText(hqChart,windowIndex,item,i);
121056
+ break;
121057
+
121035
121058
  case SCRIPT_CHART_NAME.OVERLAY_BARS:
121036
121059
  this.CreateStackedBar(hqChart,windowIndex,item,i);
121037
121060
  break;
@@ -139369,7 +139392,7 @@ function ScrollBarBGChart()
139369
139392
 
139370
139393
 
139371
139394
 
139372
- var HQCHART_VERSION="1.1.14124";
139395
+ var HQCHART_VERSION="1.1.14132";
139373
139396
 
139374
139397
  function PrintHQChartVersion()
139375
139398
  {