hqchart 1.1.12542 → 1.1.12553

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.
@@ -5011,6 +5011,9 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
5011
5011
 
5012
5012
  if (item.TopSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.TopSpace=item.TopSpace;
5013
5013
  if (item.BottomSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.BottomSpace=item.BottomSpace;
5014
+
5015
+ //是否显示关闭集合竞价按钮
5016
+ if (IFrameSplitOperator.IsNumber(item.CloseBeforeButton)) chart.Frame.SubFrame[i].Frame.IsShowCloseButton=item.CloseBeforeButton;
5014
5017
  }
5015
5018
 
5016
5019
  chart.UpdateXShowText();
@@ -24420,7 +24423,7 @@ function ChartData()
24420
24423
 
24421
24424
  var result=[ {Name:"Date", Data:aryDate} ];
24422
24425
 
24423
- if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period))
24426
+ if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period) || ChartData.IsMilliSecondPeriod(this.Period))
24424
24427
  result.push({ Name:"Time", Data:aryTime} );
24425
24428
 
24426
24429
  result.push
@@ -24587,6 +24590,14 @@ ChartData.IsSecondPeriod=function(period)
24587
24590
  return false;
24588
24591
  }
24589
24592
 
24593
+ var CUSTOM_MILLISECOND_PERIOD_START=50000, CUSTOM_MILLISECOND_PERIOD_END=60000;
24594
+ ChartData.IsMilliSecondPeriod=function(period)
24595
+ {
24596
+ if (period>CUSTOM_MILLISECOND_PERIOD_START && period<=CUSTOM_MILLISECOND_PERIOD_END) return true;
24597
+ return false;
24598
+ }
24599
+
24600
+
24590
24601
 
24591
24602
  //是否是分笔图 10=分笔
24592
24603
  ChartData.IsTickPeriod=function(period)
@@ -41843,6 +41854,11 @@ function KLineTooltipPaint()
41843
41854
  text=IFrameSplitOperator.FormatTimeString(item.Time,'HH:MM:SS');
41844
41855
  aryText.push({ Text:text, Color:this.DateTimeColor });
41845
41856
  }
41857
+ else if (ChartData.IsMilliSecondPeriod(period) && IFrameSplitOperator.IsNumber(item.Time))
41858
+ {
41859
+ text=IFrameSplitOperator.FormatTimeString(item.Time,'HH:MM:SS.fff');
41860
+ aryText.push({ Text:text, Color:this.DateTimeColor });
41861
+ }
41846
41862
 
41847
41863
  if (IFrameSplitOperator.IsNumber(item.Open)) //开盘
41848
41864
  {
@@ -44123,6 +44139,7 @@ function RectSelectPaint()
44123
44139
  if (ChartData.IsDayPeriod(period, true)) return value.Date; //YYYYMMDD
44124
44140
  else if (ChartData.IsMinutePeriod(period, true)) return value.Date*10000+value.Time; //YYYYMMDDHHMM
44125
44141
  else if (ChartData.IsSecondPeriod(period) || ChartData.IsTickPeriod(period)) return value.Date*1000000+value.Time; //YYYYMMDDHHMMSS
44142
+ else if (ChartData.IsMilliSecondPeriod(period) ) return value.Date*1000000000+value.Time; //YYYYMMDDHHMMSSFFF
44126
44143
  }
44127
44144
 
44128
44145
  return null;
@@ -48103,6 +48120,44 @@ function FrameSplitKLineX()
48103
48120
  }
48104
48121
  }
48105
48122
 
48123
+ this.SplitMilliSecond=function()
48124
+ {
48125
+ this.Frame.VerticalInfo=[];
48126
+ var itemWidth=this.Frame.DistanceWidth+this.Frame.DataWidth;
48127
+ var xOffset=this.Frame.Data.DataOffset;
48128
+ var xPointCount=this.Frame.XPointCount;
48129
+ var textDistance=0;
48130
+ var barDistance=0;
48131
+
48132
+ for(var i=0, index=xOffset; i<xPointCount && index<this.Frame.Data.Data.length; ++i,++index)
48133
+ {
48134
+ textDistance+=itemWidth;
48135
+ ++barDistance;
48136
+ var infoData=null;
48137
+ if (i==0)
48138
+ {
48139
+ var date=IFrameSplitOperator.FormatDateString(this.Frame.Data.Data[index].Date,'HH:MM:SS.fff');
48140
+ infoData={Value:index-xOffset, Text:date};
48141
+ }
48142
+ else if (textDistance>this.MinTextDistance && barDistance>=this.MinBarDistance)
48143
+ {
48144
+ var time=IFrameSplitOperator.FormatTimeString(this.Frame.Data.Data[index].Time,"HH:MM:SS.fff");
48145
+ infoData={Value:index-xOffset, Text:time};
48146
+ }
48147
+
48148
+ if (infoData)
48149
+ {
48150
+ var info= new CoordinateInfo();
48151
+ info.Value=infoData.Value;
48152
+ if (this.ShowText) info.Message[0]=infoData.Text;
48153
+ this.Frame.VerticalInfo.push(info);
48154
+ textDistance=0;
48155
+ barDistance=0;
48156
+ if (i==0) textDistance=-(this.MinTextDistance/2);
48157
+ }
48158
+ }
48159
+ }
48160
+
48106
48161
  this.SplitDate=function() //根据日期分割
48107
48162
  {
48108
48163
  this.Frame.VerticalInfo=[];
@@ -48210,6 +48265,7 @@ function FrameSplitKLineX()
48210
48265
  else if (ChartData.IsMinutePeriod(this.Period, true)) this.SplitDateTime();
48211
48266
  else if (ChartData.IsSecondPeriod(this.Period)) this.SplitSecond();
48212
48267
  else if (ChartData.IsTickPeriod(this.Period)) this.SplitSecond();
48268
+ else if (ChartData.IsMilliSecondPeriod(this.Period)) this.SplitMilliSecond();
48213
48269
  else this.SplitDate();
48214
48270
 
48215
48271
  if (this.GetEventCallback)
@@ -51027,6 +51083,11 @@ function HQDateStringFormat()
51027
51083
  var time = IFrameSplitOperator.FormatTimeString(currentData.Time,'HH:MM:SS');
51028
51084
  this.Text = this.Text + " " + time;
51029
51085
  }
51086
+ else if (ChartData.IsMilliSecondPeriod(this.Data.Period))
51087
+ {
51088
+ var time = IFrameSplitOperator.FormatTimeString(currentData.Time,'HH:MM:SS.fff');
51089
+ this.Text = this.Text + " " + time;
51090
+ }
51030
51091
  else if (ChartData.IsTickPeriod(this.Data.Period)) //分笔
51031
51092
  {
51032
51093
  var time = IFrameSplitOperator.FormatTimeString(currentData.Time);
@@ -52100,6 +52161,8 @@ function DynamicKLineTitlePainting()
52100
52161
  periodName=(this.Data.Period-CUSTOM_DAY_PERIOD_START)+g_JSChartLocalization.GetText('自定义日线',this.LanguageID);
52101
52162
  else if (this.Data.Period>CUSTOM_SECOND_PERIOD_START && this.Data.Period<=CUSTOM_SECOND_PERIOD_END)
52102
52163
  periodName=(this.Data.Period-CUSTOM_SECOND_PERIOD_START)+g_JSChartLocalization.GetText('自定义秒',this.LanguageID);
52164
+ else if (this.Data.Period>CUSTOM_MILLISECOND_PERIOD_START&& this.Data.Period<=CUSTOM_MILLISECOND_PERIOD_END)
52165
+ periodName=(this.Data.Period-CUSTOM_MILLISECOND_PERIOD_START)+g_JSChartLocalization.GetText('自定义毫秒',this.LanguageID);
52103
52166
  else
52104
52167
  periodName=g_JSChartLocalization.GetText(ChartData.GetPeriodName(this.Data.Period),this.LanguageID);
52105
52168
  var rightName=g_JSChartLocalization.GetText(RIGHT_NAME[this.Data.Right],this.LanguageID);
@@ -52129,6 +52192,11 @@ function DynamicKLineTitlePainting()
52129
52192
  var text=IFrameSplitOperator.FormatTimeString(item.Time, "HH:MM:SS");
52130
52193
  aryText.push({ Text:text, Color:this.DateTimeColor });
52131
52194
  }
52195
+ else if (ChartData.IsMilliSecondPeriod(this.Period) && IFrameSplitOperator.IsNumber(item.Time))
52196
+ {
52197
+ var text=IFrameSplitOperator.FormatTimeString(item.Time, "HH:MM:SS.fff");
52198
+ aryText.push({ Text:text, Color:this.DateTimeColor });
52199
+ }
52132
52200
  else if (isTickPeriod)
52133
52201
  {
52134
52202
  var text=IFrameSplitOperator.FormatTimeString(item.Time, "HH:MM:SS");
@@ -55404,6 +55472,32 @@ function IChartDrawPicture()
55404
55472
  this.Canvas.restore();
55405
55473
  }
55406
55474
 
55475
+ this.DrawArrow=function(ptStart,ptEnd)
55476
+ {
55477
+ //计算箭头
55478
+ var theta=35; //三角斜边一直线夹角
55479
+ var headlen=10; //三角斜边长度
55480
+ var angle = Math.atan2(ptStart.Y - ptEnd.Y, ptStart.X - ptEnd.X) * 180 / Math.PI,
55481
+ angle1 = (angle + theta) * Math.PI / 180,
55482
+ angle2 = (angle - theta) * Math.PI / 180,
55483
+ topX = headlen * Math.cos(angle1),
55484
+ topY = headlen * Math.sin(angle1),
55485
+ botX = headlen * Math.cos(angle2),
55486
+ botY = headlen * Math.sin(angle2);
55487
+
55488
+ this.Canvas.beginPath();
55489
+ var arrowX = ptEnd.X + topX;
55490
+ var arrowY = ptEnd.Y + topY;
55491
+ this.Canvas.moveTo(arrowX,arrowY);
55492
+
55493
+ this.Canvas.lineTo(ptEnd.X, ptEnd.Y);
55494
+
55495
+ arrowX = ptEnd.X + botX;
55496
+ arrowY = ptEnd.Y + botY;
55497
+ this.Canvas.lineTo(arrowX,arrowY);
55498
+ this.Canvas.stroke();
55499
+ }
55500
+
55407
55501
  //计算2个点线的,左右的延长线的点
55408
55502
  this.CalculateExtendLinePoint=function(ptStart,ptEnd)
55409
55503
  {
@@ -56118,7 +56212,9 @@ IChartDrawPicture.ArrayDrawPricture=
56118
56212
  { Name:"PriceNote", ClassName:"ChartDrawPriceNote", Create:function() { return new ChartDrawPriceNote();} },
56119
56213
  { Name:"FibWedge", ClassName:"ChartDrawFibWedge", Create:function(){ return new ChartDrawFibWedge(); }},
56120
56214
  { Name:"FibRetracement", ClassName:"ChartFibRetracement", Create:function() { return new ChartFibRetracement(); }}, //斐波那契回测
56121
- { Name:"FibSpeedResistanceFan", ClassName:"ChartFibSpeedResistanceFan", Create:function() { return new ChartFibSpeedResistanceFan(); }} //斐波那契扇形
56215
+ { Name:"FibSpeedResistanceFan", ClassName:"ChartFibSpeedResistanceFan", Create:function() { return new ChartFibSpeedResistanceFan(); }}, //斐波那契扇形
56216
+ { Name:"PriceRange", ClassName:"ChartPriceRange", Create:function() { return new ChartPriceRange(); }},
56217
+ { Name:"DateRange", ClassName:"ChartDateRange", Create:function() { return new ChartDateRange(); }}
56122
56218
  ];
56123
56219
 
56124
56220
  IChartDrawPicture.MapIonFont=new Map(
@@ -64127,6 +64223,239 @@ function ChartFibSpeedResistanceFan()
64127
64223
 
64128
64224
  }
64129
64225
 
64226
+
64227
+ function ChartPriceRange()
64228
+ {
64229
+ this.newMethod=IChartDrawPicture; //派生
64230
+ this.newMethod();
64231
+ delete this.newMethod;
64232
+
64233
+ this.ClassName='ChartPriceRange';
64234
+ this.PointCount=2;
64235
+ this.Font=12*GetDevicePixelRatio() +"px 微软雅黑";
64236
+ this.TextColor=this.LineColor;
64237
+ this.IsPointIn=this.IsPointIn_XYValue_Line;
64238
+ this.GetXYCoordinate=this.GetXYCoordinate_default;
64239
+ this.PointToValue_Default=this.PointToValue;
64240
+ this.OnlyMoveXIndex=true;
64241
+ this.IsSupportMagnet=true;
64242
+ this.LineWidth=1;
64243
+ this.EnableBGColor=true;
64244
+ this.BGColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.15);
64245
+ this.ExtendLine={ Left:false, Right: false }; //延长线
64246
+
64247
+ this.Label={ TextColor:"rgb(0,0,0)", BGColor:"rgb(211,211,211)", EnableBGColor:true, LeftMargin:5, RightMargin:5 };
64248
+
64249
+ this.Draw=function()
64250
+ {
64251
+ this.LinePoint=[];
64252
+ if (this.IsFrameMinSize()) return;
64253
+ var bCheckXY=true;
64254
+ if (this.ExtendLine.Left || this.ExtendLine.Right) bCheckXY=false;
64255
+ var drawPoint=this.CalculateDrawPoint( {IsCheckX:bCheckXY, IsCheckY:bCheckXY} );
64256
+ if (!drawPoint) return;
64257
+ if (drawPoint.length!=2) return;
64258
+
64259
+ this.ClipFrame();
64260
+
64261
+ var ptStart=drawPoint[0];
64262
+ var ptEnd=drawPoint[1];
64263
+
64264
+ this.SetLineWidth();
64265
+ this.DrawRange(ptStart,ptEnd);
64266
+ this.RestoreLineWidth();
64267
+
64268
+ this.DrawPoint(drawPoint); //画点
64269
+ this.Canvas.restore();
64270
+ }
64271
+
64272
+ this.DrawRange=function(ptStart, ptEnd)
64273
+ {
64274
+ var yTop=Math.min(ptStart.Y, ptEnd.Y);
64275
+ var yBottom=Math.max(ptStart.Y, ptEnd.Y);
64276
+ var xLeft=Math.min(ptStart.X, ptEnd.X);
64277
+ var xRight=Math.max(ptStart.X, ptEnd.X);
64278
+ var height=yBottom-yTop;
64279
+ var xCenter=ptStart.X+(ptEnd.X-ptStart.X)/2;
64280
+
64281
+ if (this.ExtendLine.Right) xRight=this.Frame.ChartBorder.GetRight();
64282
+ if (this.ExtendLine.Left) xLeft=this.Frame.ChartBorder.GetLeft();
64283
+
64284
+ if (this.EnableBGColor)
64285
+ {
64286
+ var rtBG={ Left:xLeft, Top:yTop, Right:xRight, Bottom:yBottom };
64287
+ rtBG.Width=rtBG.Right-rtBG.Left;
64288
+ rtBG.Height=rtBG.Bottom-rtBG.Top;
64289
+ this.Canvas.fillStyle=this.BGColor;
64290
+ this.Canvas.fillRect(rtBG.Left, rtBG.Top, rtBG.Width, rtBG.Height);
64291
+ }
64292
+
64293
+
64294
+ this.Canvas.strokeStyle=this.LineColor;
64295
+ this.Canvas.beginPath();
64296
+ this.Canvas.moveTo(xLeft,ToFixedPoint(yTop));
64297
+ this.Canvas.lineTo(xRight,ToFixedPoint(yTop));
64298
+
64299
+ this.Canvas.moveTo(xLeft,ToFixedPoint(yBottom));
64300
+ this.Canvas.lineTo(xRight,ToFixedPoint(yBottom));
64301
+
64302
+ this.Canvas.moveTo(ToFixedPoint(xCenter),ToFixedPoint(yTop));
64303
+ this.Canvas.lineTo(ToFixedPoint(xCenter),ToFixedPoint(yBottom));
64304
+ this.Canvas.stroke();
64305
+
64306
+ this.LinePoint.push({ Start:{X:xLeft, Y:yTop}, End:{X:xRight, Y:yTop} });
64307
+ this.LinePoint.push({ Start:{X:xLeft, Y:yBottom}, End:{X:xRight, Y:yBottom} });
64308
+ this.LinePoint.push({ Start:{X:xCenter, Y:yTop}, End:{X:xCenter, Y:yBottom} });
64309
+
64310
+ this.DrawArrow({X:ToFixedPoint(xCenter), Y:ptStart.Y}, {X:ToFixedPoint(xCenter), Y:ptEnd.Y});
64311
+
64312
+ //文字输出
64313
+ var startValue=this.Frame.GetYData(ptStart.Y,false);
64314
+ var endValue=this.Frame.GetYData(ptEnd.Y,false);
64315
+ var diffValue=endValue-startValue;
64316
+ var rate=(diffValue/startValue)*100;
64317
+ var text=`${diffValue.toFixed(2)} (${rate.toFixed(2)}%)`;
64318
+
64319
+ this.Canvas.font=this.Font;
64320
+ var textHeight=this.GetFontHeight();
64321
+ var textWidth=this.Canvas.measureText(text).width+4+(this.Label.LeftMargin+this.Label.RightMargin);
64322
+ var rtTextBG={ Left:xCenter-textWidth/2, Width:textWidth, Height:textHeight+2 };
64323
+ if (diffValue>0) rtTextBG.Top=ptEnd.Y-rtTextBG.Height-4;
64324
+ else rtTextBG.Top=ptEnd.Y+4;
64325
+ rtTextBG.Bottom=rtTextBG.Top+rtTextBG.Height;
64326
+
64327
+ if (this.Label.EnableBGColor)
64328
+ {
64329
+ var path=new Path2D();
64330
+ path.roundRect(ToFixedPoint(rtTextBG.Left), ToFixedPoint(rtTextBG.Top), ToFixedRect(rtTextBG.Width), ToFixedRect(rtTextBG.Height), [3]);
64331
+ this.Canvas.fillStyle=this.Label.BGColor;
64332
+ this.Canvas.fill(path);
64333
+ }
64334
+
64335
+ this.Canvas.fillStyle=this.Label.TextColor;
64336
+ this.Canvas.textAlign="left";
64337
+ this.Canvas.textBaseline="bottom";
64338
+ this.Canvas.fillText(text,rtTextBG.Left+2+this.Label.LeftMargin,rtTextBG.Bottom-2);
64339
+ }
64340
+
64341
+ }
64342
+
64343
+
64344
+ function ChartDateRange()
64345
+ {
64346
+ this.newMethod=IChartDrawPicture; //派生
64347
+ this.newMethod();
64348
+ delete this.newMethod;
64349
+
64350
+ this.ClassName='ChartDateRange';
64351
+ this.PointCount=2;
64352
+ this.Font=12*GetDevicePixelRatio() +"px 微软雅黑";
64353
+ this.TextColor=this.LineColor;
64354
+ this.IsPointIn=this.IsPointIn_XYValue_Line;
64355
+ this.GetXYCoordinate=this.GetXYCoordinate_default;
64356
+ this.PointToValue_Default=this.PointToValue;
64357
+ this.OnlyMoveXIndex=true;
64358
+ this.IsSupportMagnet=true;
64359
+ this.LineWidth=1;
64360
+ this.EnableBGColor=true;
64361
+ this.BGColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.15);
64362
+ this.ExtendLine={ Top:false, Bottom: false }; //延长线
64363
+
64364
+ this.Label={ TextColor:"rgb(0,0,0)", BGColor:"rgb(211,211,211)", EnableBGColor:true, LeftMargin:5, RightMargin:5 };
64365
+
64366
+ this.Draw=function()
64367
+ {
64368
+ this.LinePoint=[];
64369
+ if (this.IsFrameMinSize()) return;
64370
+ var bCheckXY=true;
64371
+ var drawPoint=this.CalculateDrawPoint( {IsCheckX:bCheckXY, IsCheckY:bCheckXY} );
64372
+ if (!drawPoint) return;
64373
+ if (drawPoint.length!=2) return;
64374
+
64375
+ this.ClipFrame();
64376
+
64377
+ var ptStart=drawPoint[0];
64378
+ var ptEnd=drawPoint[1];
64379
+
64380
+ this.SetLineWidth();
64381
+ this.DrawRange(ptStart,ptEnd);
64382
+ this.RestoreLineWidth();
64383
+
64384
+ this.DrawPoint(drawPoint); //画点
64385
+ this.Canvas.restore();
64386
+ }
64387
+
64388
+ this.DrawRange=function(ptStart, ptEnd)
64389
+ {
64390
+ var yTop=Math.min(ptStart.Y, ptEnd.Y);
64391
+ var yBottom=Math.max(ptStart.Y, ptEnd.Y);
64392
+ var xLeft=Math.min(ptStart.X, ptEnd.X);
64393
+ var xRight=Math.max(ptStart.X, ptEnd.X);
64394
+ var height=yBottom-yTop;
64395
+ var width=xRight-xLeft;
64396
+ var yCenter=ptStart.Y+(ptEnd.Y-ptStart.Y)/2;
64397
+ var xCenter=ptStart.X+(ptEnd.X-ptStart.X)/2;
64398
+
64399
+ if (this.ExtendLine.Top) yTop=this.Frame.ChartBorder.GetTopEx();
64400
+ if (this.ExtendLine.Bottom) yBottom=this.Frame.ChartBorder.GetBottomEx();
64401
+
64402
+ if (this.EnableBGColor)
64403
+ {
64404
+ var rtBG={ Left:xLeft, Top:yTop, Right:xRight, Bottom:yBottom };
64405
+ rtBG.Width=rtBG.Right-rtBG.Left;
64406
+ rtBG.Height=rtBG.Bottom-rtBG.Top;
64407
+ this.Canvas.fillStyle=this.BGColor;
64408
+ this.Canvas.fillRect(rtBG.Left, rtBG.Top, rtBG.Width, rtBG.Height);
64409
+ }
64410
+
64411
+ this.Canvas.strokeStyle=this.LineColor;
64412
+ this.Canvas.beginPath();
64413
+ this.Canvas.moveTo(ToFixedPoint(xLeft),yTop);
64414
+ this.Canvas.lineTo(ToFixedPoint(xLeft),yBottom);
64415
+
64416
+ this.Canvas.moveTo(ToFixedPoint(xRight),yTop);
64417
+ this.Canvas.lineTo(ToFixedPoint(xRight),yBottom);
64418
+
64419
+ this.Canvas.moveTo(ToFixedPoint(xLeft),ToFixedPoint(yCenter));
64420
+ this.Canvas.lineTo(ToFixedPoint(xRight),ToFixedPoint(yCenter));
64421
+ this.Canvas.stroke();
64422
+
64423
+ this.LinePoint.push({ Start:{X:xLeft, Y:yTop}, End:{X:xLeft, Y:yBottom} });
64424
+ this.LinePoint.push({ Start:{X:xRight, Y:yTop}, End:{X:xRight, Y:yBottom} });
64425
+ this.LinePoint.push({ Start:{X:xLeft, Y:yCenter}, End:{X:xRight, Y:yCenter} });
64426
+
64427
+ this.DrawArrow({X:ptStart.X, Y:ToFixedPoint(yCenter)}, {X:ptEnd.X, Y:ToFixedPoint(yCenter)});
64428
+
64429
+
64430
+ //文字输出
64431
+ var startIndex=this.Frame.GetXData(ptStart.X,false);
64432
+ var endIndex=this.Frame.GetXData(ptEnd.X,false);
64433
+ var barCount=endIndex-startIndex+1;
64434
+ var text=`${barCount} bars`;
64435
+
64436
+ this.Canvas.font=this.Font;
64437
+ var textHeight=this.GetFontHeight();
64438
+ var textWidth=this.Canvas.measureText(text).width+4+(this.Label.LeftMargin+this.Label.RightMargin);
64439
+ var rtTextBG={ Left:xCenter-textWidth/2, Top:ptEnd.Y+4, Width:textWidth, Height:textHeight+2 };
64440
+ rtTextBG.Bottom=rtTextBG.Top+rtTextBG.Height;
64441
+
64442
+ if (this.Label.EnableBGColor)
64443
+ {
64444
+ var path=new Path2D();
64445
+ path.roundRect(ToFixedPoint(rtTextBG.Left), ToFixedPoint(rtTextBG.Top), ToFixedRect(rtTextBG.Width), ToFixedRect(rtTextBG.Height), [3]);
64446
+ this.Canvas.fillStyle=this.Label.BGColor;
64447
+ this.Canvas.fill(path);
64448
+ }
64449
+
64450
+ this.Canvas.fillStyle=this.Label.TextColor;
64451
+ this.Canvas.textAlign="left";
64452
+ this.Canvas.textBaseline="bottom";
64453
+ this.Canvas.fillText(text,rtTextBG.Left+2+this.Label.LeftMargin,rtTextBG.Bottom-2);
64454
+
64455
+ }
64456
+ }
64457
+
64458
+
64130
64459
  function ChartDrawStorage()
64131
64460
  {
64132
64461
  this.DrawData=new Map(); //画图工具数据 key=symbol-Period, value=Map() Key:Guid, Value:{Guid, Symbol, Period, ClassName, Value}
@@ -66456,6 +66785,7 @@ function JSChartLocalization()
66456
66785
  ['自定义分钟', {CN:'分', EN:'Min', TC:'分'}],
66457
66786
  ['自定义日线', {CN:'日', EN:'D', TC:'日'}],
66458
66787
  ['自定义秒', {CN:'秒', EN:'S', TC:'秒'}],
66788
+ ['自定义毫秒', {CN:'毫秒', EN:'MS', TC:'毫秒'}],
66459
66789
 
66460
66790
  ["MVol-Vol", {CN:"成交量", EN:"Volume", TC:'成交量'} ],
66461
66791
  ["MVol-Position", {CN:"持仓量", EN:"Position", TC:'持倉量'} ],
@@ -69542,6 +69872,7 @@ function KLineChartContainer(uielement,OffscreenElement)
69542
69872
  if (ChartData.IsDayPeriod(self.Period,true)) self.RecvRealtimeData(data);
69543
69873
  else if (ChartData.IsMinutePeriod(self.Period,true)) self.RecvMinuteRealtimeData(data);
69544
69874
  else if (ChartData.IsSecondPeriod(self.Period)) self.RecvMinuteRealtimeData(data);
69875
+ else if (ChartData.IsMilliSecondPeriod(self.Period)) self.RecvMinuteRealtimeData(data);
69545
69876
  }
69546
69877
  }
69547
69878
  event.Callback(event,data,this);
@@ -71046,10 +71377,12 @@ function KLineChartContainer(uielement,OffscreenElement)
71046
71377
  if (this.SourceData.DataType!=0) isDataTypeChange=true;
71047
71378
  }
71048
71379
  else if ((period>CUSTOM_MINUTE_PERIOD_START && period<=CUSTOM_MINUTE_PERIOD_END) ||
71049
- (period>CUSTOM_SECOND_PERIOD_START && period<=CUSTOM_SECOND_PERIOD_END))
71380
+ (period>CUSTOM_SECOND_PERIOD_START && period<=CUSTOM_SECOND_PERIOD_END) ||
71381
+ (period>CUSTOM_MILLISECOND_PERIOD_START && period<=CUSTOM_MILLISECOND_PERIOD_END) )
71050
71382
  {
71051
71383
  if (this.SourceData.DataType!=1) isDataTypeChange=true;
71052
71384
  else if (ChartData.IsSecondPeriod(period)) isDataTypeChange=true;
71385
+ else if (ChartData.IsMilliSecondPeriod(period)) isDataTypeChange=true;
71053
71386
  }
71054
71387
  else
71055
71388
  {
@@ -71126,7 +71459,7 @@ function KLineChartContainer(uielement,OffscreenElement)
71126
71459
  this.RequestHistoryData(); //请求日线数据
71127
71460
  //this.ReqeustKLineInfoData();
71128
71461
  }
71129
- else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period))
71462
+ else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period) || ChartData.IsMilliSecondPeriod(this.Period))
71130
71463
  {
71131
71464
  this.CancelAutoUpdate(); //先停止定时器
71132
71465
  this.AutoUpdateEvent(false,'KLineChartContainer::ChangePeriod'); //切换周期先停止更新
@@ -71175,7 +71508,7 @@ function KLineChartContainer(uielement,OffscreenElement)
71175
71508
  this.ResetScrollBar();
71176
71509
  this.RequestHistoryData(); //请求日线数据
71177
71510
  }
71178
- else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period))
71511
+ else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period) || ChartData.IsMilliSecondPeriod(this.Period))
71179
71512
  {
71180
71513
  this.CancelAutoUpdate(); //先停止定时器
71181
71514
  this.AutoUpdateEvent(false,'KLineChartContainer::ChangeRight'); //切换复权先停止更新
@@ -71661,7 +71994,7 @@ function KLineChartContainer(uielement,OffscreenElement)
71661
71994
  this.ResetOverlaySymbolStatus();
71662
71995
  this.RequestHistoryData(); //请求日线数据
71663
71996
  }
71664
- else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period))
71997
+ else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period) || ChartData.IsMilliSecondPeriod(this.Period))
71665
71998
  {
71666
71999
  this.ResetOverlaySymbolStatus();
71667
72000
  this.ReqeustHistoryMinuteData(); //请求分钟数据
@@ -72508,7 +72841,7 @@ function KLineChartContainer(uielement,OffscreenElement)
72508
72841
  this.RequestHistoryData(); //请求日线数据
72509
72842
  //this.ReqeustKLineInfoData();
72510
72843
  }
72511
- else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period))
72844
+ else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period) || ChartData.IsMilliSecondPeriod(this.Period))
72512
72845
  {
72513
72846
  this.ReqeustHistoryMinuteData(); //请求分钟数据
72514
72847
  }
@@ -75165,6 +75498,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
75165
75498
 
75166
75499
  this.DayOffset={ Offset:0, ShowDayCount:-1, DataOffset:0, DayCount:1, }; //Offset 日期偏移 , DataOffset数据偏移
75167
75500
  this.PageInfo={ Enable:false, Offset:-8888, ShowDayCount:4 }; //分页配置
75501
+ this.DataStatus={ MultiDay:false, LatestDay:false }; //MultiDay=多日 LatestDay:当天
75168
75502
 
75169
75503
  this.ZoomStepPixel=50;
75170
75504
 
@@ -77532,6 +77866,12 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
77532
77866
  this.DayOffset.PageInfo=null;
77533
77867
  }
77534
77868
 
77869
+ this.ResetDataStatus=function()
77870
+ {
77871
+ this.DataStatus.MultiDay=false;
77872
+ this.DataStatus.LatestDay=false;
77873
+ }
77874
+
77535
77875
  //切换股票代码
77536
77876
  this.ChangeSymbol=function(symbol,option)
77537
77877
  {
@@ -77540,6 +77880,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
77540
77880
  this.AutoUpdateEvent(false, "MinuteChartContainer::ChangeSymbol");
77541
77881
  this.Symbol=symbol;
77542
77882
  this.ResetDayOffset();
77883
+ this.ResetDataStatus();
77543
77884
  this.ClearIndexPaint(); //清空指标
77544
77885
  this.ResetOverlaySymbolStatus();
77545
77886
  this.ReloadChartDrawPicture();
@@ -77641,6 +77982,8 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
77641
77982
  {
77642
77983
  this.ReloadChartDrawPicture();
77643
77984
  }
77985
+
77986
+ this.ResetDataStatus();
77644
77987
  this.ClearIndexPaint(); //清空指标
77645
77988
  this.ResetOverlaySymbolStatus();
77646
77989
  this.RequestData();
@@ -77921,6 +78264,9 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
77921
78264
  this.MultiDayBeforeOpenData=MinuteChartContainer.JosnDataToBeforeOpenDataArray(data);
77922
78265
  this.MultiDayAfterCloseData=MinuteChartContainer.JosnDataToAfterCloseDataArray(data);
77923
78266
  var updateTime=MinuteChartContainer.JsonDataToHistoryMinuteLastUpdateTime(data);
78267
+
78268
+ this.DataStatus.MultiDay=true;
78269
+
77924
78270
  this.CaclutateCallCationYRange();
77925
78271
  this.Symbol=data.symbol;
77926
78272
  this.Name=data.name;
@@ -78498,6 +78844,8 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
78498
78844
 
78499
78845
  if (this.IsBeforeData) this.BeforeOpenData=beforeOpenData;
78500
78846
  if (this.IsAfterData) this.AfterCloseData=afterCloseData;
78847
+
78848
+ this.DataStatus.LatestDay=true;
78501
78849
 
78502
78850
  if (this.DayCount>1) //多日走势图
78503
78851
  {