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.
@@ -931,6 +931,9 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
931
931
 
932
932
  if (item.TopSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.TopSpace=item.TopSpace;
933
933
  if (item.BottomSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.BottomSpace=item.BottomSpace;
934
+
935
+ //是否显示关闭集合竞价按钮
936
+ if (IFrameSplitOperator.IsNumber(item.CloseBeforeButton)) chart.Frame.SubFrame[i].Frame.IsShowCloseButton=item.CloseBeforeButton;
934
937
  }
935
938
 
936
939
  chart.UpdateXShowText();
@@ -20340,7 +20343,7 @@ function ChartData()
20340
20343
 
20341
20344
  var result=[ {Name:"Date", Data:aryDate} ];
20342
20345
 
20343
- if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period))
20346
+ if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period) || ChartData.IsMilliSecondPeriod(this.Period))
20344
20347
  result.push({ Name:"Time", Data:aryTime} );
20345
20348
 
20346
20349
  result.push
@@ -20507,6 +20510,14 @@ ChartData.IsSecondPeriod=function(period)
20507
20510
  return false;
20508
20511
  }
20509
20512
 
20513
+ var CUSTOM_MILLISECOND_PERIOD_START=50000, CUSTOM_MILLISECOND_PERIOD_END=60000;
20514
+ ChartData.IsMilliSecondPeriod=function(period)
20515
+ {
20516
+ if (period>CUSTOM_MILLISECOND_PERIOD_START && period<=CUSTOM_MILLISECOND_PERIOD_END) return true;
20517
+ return false;
20518
+ }
20519
+
20520
+
20510
20521
 
20511
20522
  //是否是分笔图 10=分笔
20512
20523
  ChartData.IsTickPeriod=function(period)
@@ -37763,6 +37774,11 @@ function KLineTooltipPaint()
37763
37774
  text=IFrameSplitOperator.FormatTimeString(item.Time,'HH:MM:SS');
37764
37775
  aryText.push({ Text:text, Color:this.DateTimeColor });
37765
37776
  }
37777
+ else if (ChartData.IsMilliSecondPeriod(period) && IFrameSplitOperator.IsNumber(item.Time))
37778
+ {
37779
+ text=IFrameSplitOperator.FormatTimeString(item.Time,'HH:MM:SS.fff');
37780
+ aryText.push({ Text:text, Color:this.DateTimeColor });
37781
+ }
37766
37782
 
37767
37783
  if (IFrameSplitOperator.IsNumber(item.Open)) //开盘
37768
37784
  {
@@ -40043,6 +40059,7 @@ function RectSelectPaint()
40043
40059
  if (ChartData.IsDayPeriod(period, true)) return value.Date; //YYYYMMDD
40044
40060
  else if (ChartData.IsMinutePeriod(period, true)) return value.Date*10000+value.Time; //YYYYMMDDHHMM
40045
40061
  else if (ChartData.IsSecondPeriod(period) || ChartData.IsTickPeriod(period)) return value.Date*1000000+value.Time; //YYYYMMDDHHMMSS
40062
+ else if (ChartData.IsMilliSecondPeriod(period) ) return value.Date*1000000000+value.Time; //YYYYMMDDHHMMSSFFF
40046
40063
  }
40047
40064
 
40048
40065
  return null;
@@ -44023,6 +44040,44 @@ function FrameSplitKLineX()
44023
44040
  }
44024
44041
  }
44025
44042
 
44043
+ this.SplitMilliSecond=function()
44044
+ {
44045
+ this.Frame.VerticalInfo=[];
44046
+ var itemWidth=this.Frame.DistanceWidth+this.Frame.DataWidth;
44047
+ var xOffset=this.Frame.Data.DataOffset;
44048
+ var xPointCount=this.Frame.XPointCount;
44049
+ var textDistance=0;
44050
+ var barDistance=0;
44051
+
44052
+ for(var i=0, index=xOffset; i<xPointCount && index<this.Frame.Data.Data.length; ++i,++index)
44053
+ {
44054
+ textDistance+=itemWidth;
44055
+ ++barDistance;
44056
+ var infoData=null;
44057
+ if (i==0)
44058
+ {
44059
+ var date=IFrameSplitOperator.FormatDateString(this.Frame.Data.Data[index].Date,'HH:MM:SS.fff');
44060
+ infoData={Value:index-xOffset, Text:date};
44061
+ }
44062
+ else if (textDistance>this.MinTextDistance && barDistance>=this.MinBarDistance)
44063
+ {
44064
+ var time=IFrameSplitOperator.FormatTimeString(this.Frame.Data.Data[index].Time,"HH:MM:SS.fff");
44065
+ infoData={Value:index-xOffset, Text:time};
44066
+ }
44067
+
44068
+ if (infoData)
44069
+ {
44070
+ var info= new CoordinateInfo();
44071
+ info.Value=infoData.Value;
44072
+ if (this.ShowText) info.Message[0]=infoData.Text;
44073
+ this.Frame.VerticalInfo.push(info);
44074
+ textDistance=0;
44075
+ barDistance=0;
44076
+ if (i==0) textDistance=-(this.MinTextDistance/2);
44077
+ }
44078
+ }
44079
+ }
44080
+
44026
44081
  this.SplitDate=function() //根据日期分割
44027
44082
  {
44028
44083
  this.Frame.VerticalInfo=[];
@@ -44130,6 +44185,7 @@ function FrameSplitKLineX()
44130
44185
  else if (ChartData.IsMinutePeriod(this.Period, true)) this.SplitDateTime();
44131
44186
  else if (ChartData.IsSecondPeriod(this.Period)) this.SplitSecond();
44132
44187
  else if (ChartData.IsTickPeriod(this.Period)) this.SplitSecond();
44188
+ else if (ChartData.IsMilliSecondPeriod(this.Period)) this.SplitMilliSecond();
44133
44189
  else this.SplitDate();
44134
44190
 
44135
44191
  if (this.GetEventCallback)
@@ -46947,6 +47003,11 @@ function HQDateStringFormat()
46947
47003
  var time = IFrameSplitOperator.FormatTimeString(currentData.Time,'HH:MM:SS');
46948
47004
  this.Text = this.Text + " " + time;
46949
47005
  }
47006
+ else if (ChartData.IsMilliSecondPeriod(this.Data.Period))
47007
+ {
47008
+ var time = IFrameSplitOperator.FormatTimeString(currentData.Time,'HH:MM:SS.fff');
47009
+ this.Text = this.Text + " " + time;
47010
+ }
46950
47011
  else if (ChartData.IsTickPeriod(this.Data.Period)) //分笔
46951
47012
  {
46952
47013
  var time = IFrameSplitOperator.FormatTimeString(currentData.Time);
@@ -48020,6 +48081,8 @@ function DynamicKLineTitlePainting()
48020
48081
  periodName=(this.Data.Period-CUSTOM_DAY_PERIOD_START)+g_JSChartLocalization.GetText('自定义日线',this.LanguageID);
48021
48082
  else if (this.Data.Period>CUSTOM_SECOND_PERIOD_START && this.Data.Period<=CUSTOM_SECOND_PERIOD_END)
48022
48083
  periodName=(this.Data.Period-CUSTOM_SECOND_PERIOD_START)+g_JSChartLocalization.GetText('自定义秒',this.LanguageID);
48084
+ else if (this.Data.Period>CUSTOM_MILLISECOND_PERIOD_START&& this.Data.Period<=CUSTOM_MILLISECOND_PERIOD_END)
48085
+ periodName=(this.Data.Period-CUSTOM_MILLISECOND_PERIOD_START)+g_JSChartLocalization.GetText('自定义毫秒',this.LanguageID);
48023
48086
  else
48024
48087
  periodName=g_JSChartLocalization.GetText(ChartData.GetPeriodName(this.Data.Period),this.LanguageID);
48025
48088
  var rightName=g_JSChartLocalization.GetText(RIGHT_NAME[this.Data.Right],this.LanguageID);
@@ -48049,6 +48112,11 @@ function DynamicKLineTitlePainting()
48049
48112
  var text=IFrameSplitOperator.FormatTimeString(item.Time, "HH:MM:SS");
48050
48113
  aryText.push({ Text:text, Color:this.DateTimeColor });
48051
48114
  }
48115
+ else if (ChartData.IsMilliSecondPeriod(this.Period) && IFrameSplitOperator.IsNumber(item.Time))
48116
+ {
48117
+ var text=IFrameSplitOperator.FormatTimeString(item.Time, "HH:MM:SS.fff");
48118
+ aryText.push({ Text:text, Color:this.DateTimeColor });
48119
+ }
48052
48120
  else if (isTickPeriod)
48053
48121
  {
48054
48122
  var text=IFrameSplitOperator.FormatTimeString(item.Time, "HH:MM:SS");
@@ -51324,6 +51392,32 @@ function IChartDrawPicture()
51324
51392
  this.Canvas.restore();
51325
51393
  }
51326
51394
 
51395
+ this.DrawArrow=function(ptStart,ptEnd)
51396
+ {
51397
+ //计算箭头
51398
+ var theta=35; //三角斜边一直线夹角
51399
+ var headlen=10; //三角斜边长度
51400
+ var angle = Math.atan2(ptStart.Y - ptEnd.Y, ptStart.X - ptEnd.X) * 180 / Math.PI,
51401
+ angle1 = (angle + theta) * Math.PI / 180,
51402
+ angle2 = (angle - theta) * Math.PI / 180,
51403
+ topX = headlen * Math.cos(angle1),
51404
+ topY = headlen * Math.sin(angle1),
51405
+ botX = headlen * Math.cos(angle2),
51406
+ botY = headlen * Math.sin(angle2);
51407
+
51408
+ this.Canvas.beginPath();
51409
+ var arrowX = ptEnd.X + topX;
51410
+ var arrowY = ptEnd.Y + topY;
51411
+ this.Canvas.moveTo(arrowX,arrowY);
51412
+
51413
+ this.Canvas.lineTo(ptEnd.X, ptEnd.Y);
51414
+
51415
+ arrowX = ptEnd.X + botX;
51416
+ arrowY = ptEnd.Y + botY;
51417
+ this.Canvas.lineTo(arrowX,arrowY);
51418
+ this.Canvas.stroke();
51419
+ }
51420
+
51327
51421
  //计算2个点线的,左右的延长线的点
51328
51422
  this.CalculateExtendLinePoint=function(ptStart,ptEnd)
51329
51423
  {
@@ -52038,7 +52132,9 @@ IChartDrawPicture.ArrayDrawPricture=
52038
52132
  { Name:"PriceNote", ClassName:"ChartDrawPriceNote", Create:function() { return new ChartDrawPriceNote();} },
52039
52133
  { Name:"FibWedge", ClassName:"ChartDrawFibWedge", Create:function(){ return new ChartDrawFibWedge(); }},
52040
52134
  { Name:"FibRetracement", ClassName:"ChartFibRetracement", Create:function() { return new ChartFibRetracement(); }}, //斐波那契回测
52041
- { Name:"FibSpeedResistanceFan", ClassName:"ChartFibSpeedResistanceFan", Create:function() { return new ChartFibSpeedResistanceFan(); }} //斐波那契扇形
52135
+ { Name:"FibSpeedResistanceFan", ClassName:"ChartFibSpeedResistanceFan", Create:function() { return new ChartFibSpeedResistanceFan(); }}, //斐波那契扇形
52136
+ { Name:"PriceRange", ClassName:"ChartPriceRange", Create:function() { return new ChartPriceRange(); }},
52137
+ { Name:"DateRange", ClassName:"ChartDateRange", Create:function() { return new ChartDateRange(); }}
52042
52138
  ];
52043
52139
 
52044
52140
  IChartDrawPicture.MapIonFont=new Map(
@@ -60047,6 +60143,239 @@ function ChartFibSpeedResistanceFan()
60047
60143
 
60048
60144
  }
60049
60145
 
60146
+
60147
+ function ChartPriceRange()
60148
+ {
60149
+ this.newMethod=IChartDrawPicture; //派生
60150
+ this.newMethod();
60151
+ delete this.newMethod;
60152
+
60153
+ this.ClassName='ChartPriceRange';
60154
+ this.PointCount=2;
60155
+ this.Font=12*GetDevicePixelRatio() +"px 微软雅黑";
60156
+ this.TextColor=this.LineColor;
60157
+ this.IsPointIn=this.IsPointIn_XYValue_Line;
60158
+ this.GetXYCoordinate=this.GetXYCoordinate_default;
60159
+ this.PointToValue_Default=this.PointToValue;
60160
+ this.OnlyMoveXIndex=true;
60161
+ this.IsSupportMagnet=true;
60162
+ this.LineWidth=1;
60163
+ this.EnableBGColor=true;
60164
+ this.BGColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.15);
60165
+ this.ExtendLine={ Left:false, Right: false }; //延长线
60166
+
60167
+ this.Label={ TextColor:"rgb(0,0,0)", BGColor:"rgb(211,211,211)", EnableBGColor:true, LeftMargin:5, RightMargin:5 };
60168
+
60169
+ this.Draw=function()
60170
+ {
60171
+ this.LinePoint=[];
60172
+ if (this.IsFrameMinSize()) return;
60173
+ var bCheckXY=true;
60174
+ if (this.ExtendLine.Left || this.ExtendLine.Right) bCheckXY=false;
60175
+ var drawPoint=this.CalculateDrawPoint( {IsCheckX:bCheckXY, IsCheckY:bCheckXY} );
60176
+ if (!drawPoint) return;
60177
+ if (drawPoint.length!=2) return;
60178
+
60179
+ this.ClipFrame();
60180
+
60181
+ var ptStart=drawPoint[0];
60182
+ var ptEnd=drawPoint[1];
60183
+
60184
+ this.SetLineWidth();
60185
+ this.DrawRange(ptStart,ptEnd);
60186
+ this.RestoreLineWidth();
60187
+
60188
+ this.DrawPoint(drawPoint); //画点
60189
+ this.Canvas.restore();
60190
+ }
60191
+
60192
+ this.DrawRange=function(ptStart, ptEnd)
60193
+ {
60194
+ var yTop=Math.min(ptStart.Y, ptEnd.Y);
60195
+ var yBottom=Math.max(ptStart.Y, ptEnd.Y);
60196
+ var xLeft=Math.min(ptStart.X, ptEnd.X);
60197
+ var xRight=Math.max(ptStart.X, ptEnd.X);
60198
+ var height=yBottom-yTop;
60199
+ var xCenter=ptStart.X+(ptEnd.X-ptStart.X)/2;
60200
+
60201
+ if (this.ExtendLine.Right) xRight=this.Frame.ChartBorder.GetRight();
60202
+ if (this.ExtendLine.Left) xLeft=this.Frame.ChartBorder.GetLeft();
60203
+
60204
+ if (this.EnableBGColor)
60205
+ {
60206
+ var rtBG={ Left:xLeft, Top:yTop, Right:xRight, Bottom:yBottom };
60207
+ rtBG.Width=rtBG.Right-rtBG.Left;
60208
+ rtBG.Height=rtBG.Bottom-rtBG.Top;
60209
+ this.Canvas.fillStyle=this.BGColor;
60210
+ this.Canvas.fillRect(rtBG.Left, rtBG.Top, rtBG.Width, rtBG.Height);
60211
+ }
60212
+
60213
+
60214
+ this.Canvas.strokeStyle=this.LineColor;
60215
+ this.Canvas.beginPath();
60216
+ this.Canvas.moveTo(xLeft,ToFixedPoint(yTop));
60217
+ this.Canvas.lineTo(xRight,ToFixedPoint(yTop));
60218
+
60219
+ this.Canvas.moveTo(xLeft,ToFixedPoint(yBottom));
60220
+ this.Canvas.lineTo(xRight,ToFixedPoint(yBottom));
60221
+
60222
+ this.Canvas.moveTo(ToFixedPoint(xCenter),ToFixedPoint(yTop));
60223
+ this.Canvas.lineTo(ToFixedPoint(xCenter),ToFixedPoint(yBottom));
60224
+ this.Canvas.stroke();
60225
+
60226
+ this.LinePoint.push({ Start:{X:xLeft, Y:yTop}, End:{X:xRight, Y:yTop} });
60227
+ this.LinePoint.push({ Start:{X:xLeft, Y:yBottom}, End:{X:xRight, Y:yBottom} });
60228
+ this.LinePoint.push({ Start:{X:xCenter, Y:yTop}, End:{X:xCenter, Y:yBottom} });
60229
+
60230
+ this.DrawArrow({X:ToFixedPoint(xCenter), Y:ptStart.Y}, {X:ToFixedPoint(xCenter), Y:ptEnd.Y});
60231
+
60232
+ //文字输出
60233
+ var startValue=this.Frame.GetYData(ptStart.Y,false);
60234
+ var endValue=this.Frame.GetYData(ptEnd.Y,false);
60235
+ var diffValue=endValue-startValue;
60236
+ var rate=(diffValue/startValue)*100;
60237
+ var text=`${diffValue.toFixed(2)} (${rate.toFixed(2)}%)`;
60238
+
60239
+ this.Canvas.font=this.Font;
60240
+ var textHeight=this.GetFontHeight();
60241
+ var textWidth=this.Canvas.measureText(text).width+4+(this.Label.LeftMargin+this.Label.RightMargin);
60242
+ var rtTextBG={ Left:xCenter-textWidth/2, Width:textWidth, Height:textHeight+2 };
60243
+ if (diffValue>0) rtTextBG.Top=ptEnd.Y-rtTextBG.Height-4;
60244
+ else rtTextBG.Top=ptEnd.Y+4;
60245
+ rtTextBG.Bottom=rtTextBG.Top+rtTextBG.Height;
60246
+
60247
+ if (this.Label.EnableBGColor)
60248
+ {
60249
+ var path=new Path2D();
60250
+ path.roundRect(ToFixedPoint(rtTextBG.Left), ToFixedPoint(rtTextBG.Top), ToFixedRect(rtTextBG.Width), ToFixedRect(rtTextBG.Height), [3]);
60251
+ this.Canvas.fillStyle=this.Label.BGColor;
60252
+ this.Canvas.fill(path);
60253
+ }
60254
+
60255
+ this.Canvas.fillStyle=this.Label.TextColor;
60256
+ this.Canvas.textAlign="left";
60257
+ this.Canvas.textBaseline="bottom";
60258
+ this.Canvas.fillText(text,rtTextBG.Left+2+this.Label.LeftMargin,rtTextBG.Bottom-2);
60259
+ }
60260
+
60261
+ }
60262
+
60263
+
60264
+ function ChartDateRange()
60265
+ {
60266
+ this.newMethod=IChartDrawPicture; //派生
60267
+ this.newMethod();
60268
+ delete this.newMethod;
60269
+
60270
+ this.ClassName='ChartDateRange';
60271
+ this.PointCount=2;
60272
+ this.Font=12*GetDevicePixelRatio() +"px 微软雅黑";
60273
+ this.TextColor=this.LineColor;
60274
+ this.IsPointIn=this.IsPointIn_XYValue_Line;
60275
+ this.GetXYCoordinate=this.GetXYCoordinate_default;
60276
+ this.PointToValue_Default=this.PointToValue;
60277
+ this.OnlyMoveXIndex=true;
60278
+ this.IsSupportMagnet=true;
60279
+ this.LineWidth=1;
60280
+ this.EnableBGColor=true;
60281
+ this.BGColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.15);
60282
+ this.ExtendLine={ Top:false, Bottom: false }; //延长线
60283
+
60284
+ this.Label={ TextColor:"rgb(0,0,0)", BGColor:"rgb(211,211,211)", EnableBGColor:true, LeftMargin:5, RightMargin:5 };
60285
+
60286
+ this.Draw=function()
60287
+ {
60288
+ this.LinePoint=[];
60289
+ if (this.IsFrameMinSize()) return;
60290
+ var bCheckXY=true;
60291
+ var drawPoint=this.CalculateDrawPoint( {IsCheckX:bCheckXY, IsCheckY:bCheckXY} );
60292
+ if (!drawPoint) return;
60293
+ if (drawPoint.length!=2) return;
60294
+
60295
+ this.ClipFrame();
60296
+
60297
+ var ptStart=drawPoint[0];
60298
+ var ptEnd=drawPoint[1];
60299
+
60300
+ this.SetLineWidth();
60301
+ this.DrawRange(ptStart,ptEnd);
60302
+ this.RestoreLineWidth();
60303
+
60304
+ this.DrawPoint(drawPoint); //画点
60305
+ this.Canvas.restore();
60306
+ }
60307
+
60308
+ this.DrawRange=function(ptStart, ptEnd)
60309
+ {
60310
+ var yTop=Math.min(ptStart.Y, ptEnd.Y);
60311
+ var yBottom=Math.max(ptStart.Y, ptEnd.Y);
60312
+ var xLeft=Math.min(ptStart.X, ptEnd.X);
60313
+ var xRight=Math.max(ptStart.X, ptEnd.X);
60314
+ var height=yBottom-yTop;
60315
+ var width=xRight-xLeft;
60316
+ var yCenter=ptStart.Y+(ptEnd.Y-ptStart.Y)/2;
60317
+ var xCenter=ptStart.X+(ptEnd.X-ptStart.X)/2;
60318
+
60319
+ if (this.ExtendLine.Top) yTop=this.Frame.ChartBorder.GetTopEx();
60320
+ if (this.ExtendLine.Bottom) yBottom=this.Frame.ChartBorder.GetBottomEx();
60321
+
60322
+ if (this.EnableBGColor)
60323
+ {
60324
+ var rtBG={ Left:xLeft, Top:yTop, Right:xRight, Bottom:yBottom };
60325
+ rtBG.Width=rtBG.Right-rtBG.Left;
60326
+ rtBG.Height=rtBG.Bottom-rtBG.Top;
60327
+ this.Canvas.fillStyle=this.BGColor;
60328
+ this.Canvas.fillRect(rtBG.Left, rtBG.Top, rtBG.Width, rtBG.Height);
60329
+ }
60330
+
60331
+ this.Canvas.strokeStyle=this.LineColor;
60332
+ this.Canvas.beginPath();
60333
+ this.Canvas.moveTo(ToFixedPoint(xLeft),yTop);
60334
+ this.Canvas.lineTo(ToFixedPoint(xLeft),yBottom);
60335
+
60336
+ this.Canvas.moveTo(ToFixedPoint(xRight),yTop);
60337
+ this.Canvas.lineTo(ToFixedPoint(xRight),yBottom);
60338
+
60339
+ this.Canvas.moveTo(ToFixedPoint(xLeft),ToFixedPoint(yCenter));
60340
+ this.Canvas.lineTo(ToFixedPoint(xRight),ToFixedPoint(yCenter));
60341
+ this.Canvas.stroke();
60342
+
60343
+ this.LinePoint.push({ Start:{X:xLeft, Y:yTop}, End:{X:xLeft, Y:yBottom} });
60344
+ this.LinePoint.push({ Start:{X:xRight, Y:yTop}, End:{X:xRight, Y:yBottom} });
60345
+ this.LinePoint.push({ Start:{X:xLeft, Y:yCenter}, End:{X:xRight, Y:yCenter} });
60346
+
60347
+ this.DrawArrow({X:ptStart.X, Y:ToFixedPoint(yCenter)}, {X:ptEnd.X, Y:ToFixedPoint(yCenter)});
60348
+
60349
+
60350
+ //文字输出
60351
+ var startIndex=this.Frame.GetXData(ptStart.X,false);
60352
+ var endIndex=this.Frame.GetXData(ptEnd.X,false);
60353
+ var barCount=endIndex-startIndex+1;
60354
+ var text=`${barCount} bars`;
60355
+
60356
+ this.Canvas.font=this.Font;
60357
+ var textHeight=this.GetFontHeight();
60358
+ var textWidth=this.Canvas.measureText(text).width+4+(this.Label.LeftMargin+this.Label.RightMargin);
60359
+ var rtTextBG={ Left:xCenter-textWidth/2, Top:ptEnd.Y+4, Width:textWidth, Height:textHeight+2 };
60360
+ rtTextBG.Bottom=rtTextBG.Top+rtTextBG.Height;
60361
+
60362
+ if (this.Label.EnableBGColor)
60363
+ {
60364
+ var path=new Path2D();
60365
+ path.roundRect(ToFixedPoint(rtTextBG.Left), ToFixedPoint(rtTextBG.Top), ToFixedRect(rtTextBG.Width), ToFixedRect(rtTextBG.Height), [3]);
60366
+ this.Canvas.fillStyle=this.Label.BGColor;
60367
+ this.Canvas.fill(path);
60368
+ }
60369
+
60370
+ this.Canvas.fillStyle=this.Label.TextColor;
60371
+ this.Canvas.textAlign="left";
60372
+ this.Canvas.textBaseline="bottom";
60373
+ this.Canvas.fillText(text,rtTextBG.Left+2+this.Label.LeftMargin,rtTextBG.Bottom-2);
60374
+
60375
+ }
60376
+ }
60377
+
60378
+
60050
60379
  function ChartDrawStorage()
60051
60380
  {
60052
60381
  this.DrawData=new Map(); //画图工具数据 key=symbol-Period, value=Map() Key:Guid, Value:{Guid, Symbol, Period, ClassName, Value}
@@ -62376,6 +62705,7 @@ function JSChartLocalization()
62376
62705
  ['自定义分钟', {CN:'分', EN:'Min', TC:'分'}],
62377
62706
  ['自定义日线', {CN:'日', EN:'D', TC:'日'}],
62378
62707
  ['自定义秒', {CN:'秒', EN:'S', TC:'秒'}],
62708
+ ['自定义毫秒', {CN:'毫秒', EN:'MS', TC:'毫秒'}],
62379
62709
 
62380
62710
  ["MVol-Vol", {CN:"成交量", EN:"Volume", TC:'成交量'} ],
62381
62711
  ["MVol-Position", {CN:"持仓量", EN:"Position", TC:'持倉量'} ],
@@ -65462,6 +65792,7 @@ function KLineChartContainer(uielement,OffscreenElement)
65462
65792
  if (ChartData.IsDayPeriod(self.Period,true)) self.RecvRealtimeData(data);
65463
65793
  else if (ChartData.IsMinutePeriod(self.Period,true)) self.RecvMinuteRealtimeData(data);
65464
65794
  else if (ChartData.IsSecondPeriod(self.Period)) self.RecvMinuteRealtimeData(data);
65795
+ else if (ChartData.IsMilliSecondPeriod(self.Period)) self.RecvMinuteRealtimeData(data);
65465
65796
  }
65466
65797
  }
65467
65798
  event.Callback(event,data,this);
@@ -66966,10 +67297,12 @@ function KLineChartContainer(uielement,OffscreenElement)
66966
67297
  if (this.SourceData.DataType!=0) isDataTypeChange=true;
66967
67298
  }
66968
67299
  else if ((period>CUSTOM_MINUTE_PERIOD_START && period<=CUSTOM_MINUTE_PERIOD_END) ||
66969
- (period>CUSTOM_SECOND_PERIOD_START && period<=CUSTOM_SECOND_PERIOD_END))
67300
+ (period>CUSTOM_SECOND_PERIOD_START && period<=CUSTOM_SECOND_PERIOD_END) ||
67301
+ (period>CUSTOM_MILLISECOND_PERIOD_START && period<=CUSTOM_MILLISECOND_PERIOD_END) )
66970
67302
  {
66971
67303
  if (this.SourceData.DataType!=1) isDataTypeChange=true;
66972
67304
  else if (ChartData.IsSecondPeriod(period)) isDataTypeChange=true;
67305
+ else if (ChartData.IsMilliSecondPeriod(period)) isDataTypeChange=true;
66973
67306
  }
66974
67307
  else
66975
67308
  {
@@ -67046,7 +67379,7 @@ function KLineChartContainer(uielement,OffscreenElement)
67046
67379
  this.RequestHistoryData(); //请求日线数据
67047
67380
  //this.ReqeustKLineInfoData();
67048
67381
  }
67049
- else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period))
67382
+ else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period) || ChartData.IsMilliSecondPeriod(this.Period))
67050
67383
  {
67051
67384
  this.CancelAutoUpdate(); //先停止定时器
67052
67385
  this.AutoUpdateEvent(false,'KLineChartContainer::ChangePeriod'); //切换周期先停止更新
@@ -67095,7 +67428,7 @@ function KLineChartContainer(uielement,OffscreenElement)
67095
67428
  this.ResetScrollBar();
67096
67429
  this.RequestHistoryData(); //请求日线数据
67097
67430
  }
67098
- else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period))
67431
+ else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period) || ChartData.IsMilliSecondPeriod(this.Period))
67099
67432
  {
67100
67433
  this.CancelAutoUpdate(); //先停止定时器
67101
67434
  this.AutoUpdateEvent(false,'KLineChartContainer::ChangeRight'); //切换复权先停止更新
@@ -67581,7 +67914,7 @@ function KLineChartContainer(uielement,OffscreenElement)
67581
67914
  this.ResetOverlaySymbolStatus();
67582
67915
  this.RequestHistoryData(); //请求日线数据
67583
67916
  }
67584
- else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period))
67917
+ else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period) || ChartData.IsMilliSecondPeriod(this.Period))
67585
67918
  {
67586
67919
  this.ResetOverlaySymbolStatus();
67587
67920
  this.ReqeustHistoryMinuteData(); //请求分钟数据
@@ -68428,7 +68761,7 @@ function KLineChartContainer(uielement,OffscreenElement)
68428
68761
  this.RequestHistoryData(); //请求日线数据
68429
68762
  //this.ReqeustKLineInfoData();
68430
68763
  }
68431
- else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period))
68764
+ else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period) || ChartData.IsMilliSecondPeriod(this.Period))
68432
68765
  {
68433
68766
  this.ReqeustHistoryMinuteData(); //请求分钟数据
68434
68767
  }
@@ -71085,6 +71418,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
71085
71418
 
71086
71419
  this.DayOffset={ Offset:0, ShowDayCount:-1, DataOffset:0, DayCount:1, }; //Offset 日期偏移 , DataOffset数据偏移
71087
71420
  this.PageInfo={ Enable:false, Offset:-8888, ShowDayCount:4 }; //分页配置
71421
+ this.DataStatus={ MultiDay:false, LatestDay:false }; //MultiDay=多日 LatestDay:当天
71088
71422
 
71089
71423
  this.ZoomStepPixel=50;
71090
71424
 
@@ -73452,6 +73786,12 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
73452
73786
  this.DayOffset.PageInfo=null;
73453
73787
  }
73454
73788
 
73789
+ this.ResetDataStatus=function()
73790
+ {
73791
+ this.DataStatus.MultiDay=false;
73792
+ this.DataStatus.LatestDay=false;
73793
+ }
73794
+
73455
73795
  //切换股票代码
73456
73796
  this.ChangeSymbol=function(symbol,option)
73457
73797
  {
@@ -73460,6 +73800,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
73460
73800
  this.AutoUpdateEvent(false, "MinuteChartContainer::ChangeSymbol");
73461
73801
  this.Symbol=symbol;
73462
73802
  this.ResetDayOffset();
73803
+ this.ResetDataStatus();
73463
73804
  this.ClearIndexPaint(); //清空指标
73464
73805
  this.ResetOverlaySymbolStatus();
73465
73806
  this.ReloadChartDrawPicture();
@@ -73561,6 +73902,8 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
73561
73902
  {
73562
73903
  this.ReloadChartDrawPicture();
73563
73904
  }
73905
+
73906
+ this.ResetDataStatus();
73564
73907
  this.ClearIndexPaint(); //清空指标
73565
73908
  this.ResetOverlaySymbolStatus();
73566
73909
  this.RequestData();
@@ -73841,6 +74184,9 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
73841
74184
  this.MultiDayBeforeOpenData=MinuteChartContainer.JosnDataToBeforeOpenDataArray(data);
73842
74185
  this.MultiDayAfterCloseData=MinuteChartContainer.JosnDataToAfterCloseDataArray(data);
73843
74186
  var updateTime=MinuteChartContainer.JsonDataToHistoryMinuteLastUpdateTime(data);
74187
+
74188
+ this.DataStatus.MultiDay=true;
74189
+
73844
74190
  this.CaclutateCallCationYRange();
73845
74191
  this.Symbol=data.symbol;
73846
74192
  this.Name=data.name;
@@ -74418,6 +74764,8 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
74418
74764
 
74419
74765
  if (this.IsBeforeData) this.BeforeOpenData=beforeOpenData;
74420
74766
  if (this.IsAfterData) this.AfterCloseData=afterCloseData;
74767
+
74768
+ this.DataStatus.LatestDay=true;
74421
74769
 
74422
74770
  if (this.DayCount>1) //多日走势图
74423
74771
  {