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.
@@ -5055,6 +5055,9 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
5055
5055
 
5056
5056
  if (item.TopSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.TopSpace=item.TopSpace;
5057
5057
  if (item.BottomSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.BottomSpace=item.BottomSpace;
5058
+
5059
+ //是否显示关闭集合竞价按钮
5060
+ if (IFrameSplitOperator.IsNumber(item.CloseBeforeButton)) chart.Frame.SubFrame[i].Frame.IsShowCloseButton=item.CloseBeforeButton;
5058
5061
  }
5059
5062
 
5060
5063
  chart.UpdateXShowText();
@@ -24464,7 +24467,7 @@ function ChartData()
24464
24467
 
24465
24468
  var result=[ {Name:"Date", Data:aryDate} ];
24466
24469
 
24467
- if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period))
24470
+ if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period) || ChartData.IsMilliSecondPeriod(this.Period))
24468
24471
  result.push({ Name:"Time", Data:aryTime} );
24469
24472
 
24470
24473
  result.push
@@ -24631,6 +24634,14 @@ ChartData.IsSecondPeriod=function(period)
24631
24634
  return false;
24632
24635
  }
24633
24636
 
24637
+ var CUSTOM_MILLISECOND_PERIOD_START=50000, CUSTOM_MILLISECOND_PERIOD_END=60000;
24638
+ ChartData.IsMilliSecondPeriod=function(period)
24639
+ {
24640
+ if (period>CUSTOM_MILLISECOND_PERIOD_START && period<=CUSTOM_MILLISECOND_PERIOD_END) return true;
24641
+ return false;
24642
+ }
24643
+
24644
+
24634
24645
 
24635
24646
  //是否是分笔图 10=分笔
24636
24647
  ChartData.IsTickPeriod=function(period)
@@ -41887,6 +41898,11 @@ function KLineTooltipPaint()
41887
41898
  text=IFrameSplitOperator.FormatTimeString(item.Time,'HH:MM:SS');
41888
41899
  aryText.push({ Text:text, Color:this.DateTimeColor });
41889
41900
  }
41901
+ else if (ChartData.IsMilliSecondPeriod(period) && IFrameSplitOperator.IsNumber(item.Time))
41902
+ {
41903
+ text=IFrameSplitOperator.FormatTimeString(item.Time,'HH:MM:SS.fff');
41904
+ aryText.push({ Text:text, Color:this.DateTimeColor });
41905
+ }
41890
41906
 
41891
41907
  if (IFrameSplitOperator.IsNumber(item.Open)) //开盘
41892
41908
  {
@@ -44167,6 +44183,7 @@ function RectSelectPaint()
44167
44183
  if (ChartData.IsDayPeriod(period, true)) return value.Date; //YYYYMMDD
44168
44184
  else if (ChartData.IsMinutePeriod(period, true)) return value.Date*10000+value.Time; //YYYYMMDDHHMM
44169
44185
  else if (ChartData.IsSecondPeriod(period) || ChartData.IsTickPeriod(period)) return value.Date*1000000+value.Time; //YYYYMMDDHHMMSS
44186
+ else if (ChartData.IsMilliSecondPeriod(period) ) return value.Date*1000000000+value.Time; //YYYYMMDDHHMMSSFFF
44170
44187
  }
44171
44188
 
44172
44189
  return null;
@@ -48147,6 +48164,44 @@ function FrameSplitKLineX()
48147
48164
  }
48148
48165
  }
48149
48166
 
48167
+ this.SplitMilliSecond=function()
48168
+ {
48169
+ this.Frame.VerticalInfo=[];
48170
+ var itemWidth=this.Frame.DistanceWidth+this.Frame.DataWidth;
48171
+ var xOffset=this.Frame.Data.DataOffset;
48172
+ var xPointCount=this.Frame.XPointCount;
48173
+ var textDistance=0;
48174
+ var barDistance=0;
48175
+
48176
+ for(var i=0, index=xOffset; i<xPointCount && index<this.Frame.Data.Data.length; ++i,++index)
48177
+ {
48178
+ textDistance+=itemWidth;
48179
+ ++barDistance;
48180
+ var infoData=null;
48181
+ if (i==0)
48182
+ {
48183
+ var date=IFrameSplitOperator.FormatDateString(this.Frame.Data.Data[index].Date,'HH:MM:SS.fff');
48184
+ infoData={Value:index-xOffset, Text:date};
48185
+ }
48186
+ else if (textDistance>this.MinTextDistance && barDistance>=this.MinBarDistance)
48187
+ {
48188
+ var time=IFrameSplitOperator.FormatTimeString(this.Frame.Data.Data[index].Time,"HH:MM:SS.fff");
48189
+ infoData={Value:index-xOffset, Text:time};
48190
+ }
48191
+
48192
+ if (infoData)
48193
+ {
48194
+ var info= new CoordinateInfo();
48195
+ info.Value=infoData.Value;
48196
+ if (this.ShowText) info.Message[0]=infoData.Text;
48197
+ this.Frame.VerticalInfo.push(info);
48198
+ textDistance=0;
48199
+ barDistance=0;
48200
+ if (i==0) textDistance=-(this.MinTextDistance/2);
48201
+ }
48202
+ }
48203
+ }
48204
+
48150
48205
  this.SplitDate=function() //根据日期分割
48151
48206
  {
48152
48207
  this.Frame.VerticalInfo=[];
@@ -48254,6 +48309,7 @@ function FrameSplitKLineX()
48254
48309
  else if (ChartData.IsMinutePeriod(this.Period, true)) this.SplitDateTime();
48255
48310
  else if (ChartData.IsSecondPeriod(this.Period)) this.SplitSecond();
48256
48311
  else if (ChartData.IsTickPeriod(this.Period)) this.SplitSecond();
48312
+ else if (ChartData.IsMilliSecondPeriod(this.Period)) this.SplitMilliSecond();
48257
48313
  else this.SplitDate();
48258
48314
 
48259
48315
  if (this.GetEventCallback)
@@ -51071,6 +51127,11 @@ function HQDateStringFormat()
51071
51127
  var time = IFrameSplitOperator.FormatTimeString(currentData.Time,'HH:MM:SS');
51072
51128
  this.Text = this.Text + " " + time;
51073
51129
  }
51130
+ else if (ChartData.IsMilliSecondPeriod(this.Data.Period))
51131
+ {
51132
+ var time = IFrameSplitOperator.FormatTimeString(currentData.Time,'HH:MM:SS.fff');
51133
+ this.Text = this.Text + " " + time;
51134
+ }
51074
51135
  else if (ChartData.IsTickPeriod(this.Data.Period)) //分笔
51075
51136
  {
51076
51137
  var time = IFrameSplitOperator.FormatTimeString(currentData.Time);
@@ -52144,6 +52205,8 @@ function DynamicKLineTitlePainting()
52144
52205
  periodName=(this.Data.Period-CUSTOM_DAY_PERIOD_START)+g_JSChartLocalization.GetText('自定义日线',this.LanguageID);
52145
52206
  else if (this.Data.Period>CUSTOM_SECOND_PERIOD_START && this.Data.Period<=CUSTOM_SECOND_PERIOD_END)
52146
52207
  periodName=(this.Data.Period-CUSTOM_SECOND_PERIOD_START)+g_JSChartLocalization.GetText('自定义秒',this.LanguageID);
52208
+ else if (this.Data.Period>CUSTOM_MILLISECOND_PERIOD_START&& this.Data.Period<=CUSTOM_MILLISECOND_PERIOD_END)
52209
+ periodName=(this.Data.Period-CUSTOM_MILLISECOND_PERIOD_START)+g_JSChartLocalization.GetText('自定义毫秒',this.LanguageID);
52147
52210
  else
52148
52211
  periodName=g_JSChartLocalization.GetText(ChartData.GetPeriodName(this.Data.Period),this.LanguageID);
52149
52212
  var rightName=g_JSChartLocalization.GetText(RIGHT_NAME[this.Data.Right],this.LanguageID);
@@ -52173,6 +52236,11 @@ function DynamicKLineTitlePainting()
52173
52236
  var text=IFrameSplitOperator.FormatTimeString(item.Time, "HH:MM:SS");
52174
52237
  aryText.push({ Text:text, Color:this.DateTimeColor });
52175
52238
  }
52239
+ else if (ChartData.IsMilliSecondPeriod(this.Period) && IFrameSplitOperator.IsNumber(item.Time))
52240
+ {
52241
+ var text=IFrameSplitOperator.FormatTimeString(item.Time, "HH:MM:SS.fff");
52242
+ aryText.push({ Text:text, Color:this.DateTimeColor });
52243
+ }
52176
52244
  else if (isTickPeriod)
52177
52245
  {
52178
52246
  var text=IFrameSplitOperator.FormatTimeString(item.Time, "HH:MM:SS");
@@ -55448,6 +55516,32 @@ function IChartDrawPicture()
55448
55516
  this.Canvas.restore();
55449
55517
  }
55450
55518
 
55519
+ this.DrawArrow=function(ptStart,ptEnd)
55520
+ {
55521
+ //计算箭头
55522
+ var theta=35; //三角斜边一直线夹角
55523
+ var headlen=10; //三角斜边长度
55524
+ var angle = Math.atan2(ptStart.Y - ptEnd.Y, ptStart.X - ptEnd.X) * 180 / Math.PI,
55525
+ angle1 = (angle + theta) * Math.PI / 180,
55526
+ angle2 = (angle - theta) * Math.PI / 180,
55527
+ topX = headlen * Math.cos(angle1),
55528
+ topY = headlen * Math.sin(angle1),
55529
+ botX = headlen * Math.cos(angle2),
55530
+ botY = headlen * Math.sin(angle2);
55531
+
55532
+ this.Canvas.beginPath();
55533
+ var arrowX = ptEnd.X + topX;
55534
+ var arrowY = ptEnd.Y + topY;
55535
+ this.Canvas.moveTo(arrowX,arrowY);
55536
+
55537
+ this.Canvas.lineTo(ptEnd.X, ptEnd.Y);
55538
+
55539
+ arrowX = ptEnd.X + botX;
55540
+ arrowY = ptEnd.Y + botY;
55541
+ this.Canvas.lineTo(arrowX,arrowY);
55542
+ this.Canvas.stroke();
55543
+ }
55544
+
55451
55545
  //计算2个点线的,左右的延长线的点
55452
55546
  this.CalculateExtendLinePoint=function(ptStart,ptEnd)
55453
55547
  {
@@ -56162,7 +56256,9 @@ IChartDrawPicture.ArrayDrawPricture=
56162
56256
  { Name:"PriceNote", ClassName:"ChartDrawPriceNote", Create:function() { return new ChartDrawPriceNote();} },
56163
56257
  { Name:"FibWedge", ClassName:"ChartDrawFibWedge", Create:function(){ return new ChartDrawFibWedge(); }},
56164
56258
  { Name:"FibRetracement", ClassName:"ChartFibRetracement", Create:function() { return new ChartFibRetracement(); }}, //斐波那契回测
56165
- { Name:"FibSpeedResistanceFan", ClassName:"ChartFibSpeedResistanceFan", Create:function() { return new ChartFibSpeedResistanceFan(); }} //斐波那契扇形
56259
+ { Name:"FibSpeedResistanceFan", ClassName:"ChartFibSpeedResistanceFan", Create:function() { return new ChartFibSpeedResistanceFan(); }}, //斐波那契扇形
56260
+ { Name:"PriceRange", ClassName:"ChartPriceRange", Create:function() { return new ChartPriceRange(); }},
56261
+ { Name:"DateRange", ClassName:"ChartDateRange", Create:function() { return new ChartDateRange(); }}
56166
56262
  ];
56167
56263
 
56168
56264
  IChartDrawPicture.MapIonFont=new Map(
@@ -64171,6 +64267,239 @@ function ChartFibSpeedResistanceFan()
64171
64267
 
64172
64268
  }
64173
64269
 
64270
+
64271
+ function ChartPriceRange()
64272
+ {
64273
+ this.newMethod=IChartDrawPicture; //派生
64274
+ this.newMethod();
64275
+ delete this.newMethod;
64276
+
64277
+ this.ClassName='ChartPriceRange';
64278
+ this.PointCount=2;
64279
+ this.Font=12*GetDevicePixelRatio() +"px 微软雅黑";
64280
+ this.TextColor=this.LineColor;
64281
+ this.IsPointIn=this.IsPointIn_XYValue_Line;
64282
+ this.GetXYCoordinate=this.GetXYCoordinate_default;
64283
+ this.PointToValue_Default=this.PointToValue;
64284
+ this.OnlyMoveXIndex=true;
64285
+ this.IsSupportMagnet=true;
64286
+ this.LineWidth=1;
64287
+ this.EnableBGColor=true;
64288
+ this.BGColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.15);
64289
+ this.ExtendLine={ Left:false, Right: false }; //延长线
64290
+
64291
+ this.Label={ TextColor:"rgb(0,0,0)", BGColor:"rgb(211,211,211)", EnableBGColor:true, LeftMargin:5, RightMargin:5 };
64292
+
64293
+ this.Draw=function()
64294
+ {
64295
+ this.LinePoint=[];
64296
+ if (this.IsFrameMinSize()) return;
64297
+ var bCheckXY=true;
64298
+ if (this.ExtendLine.Left || this.ExtendLine.Right) bCheckXY=false;
64299
+ var drawPoint=this.CalculateDrawPoint( {IsCheckX:bCheckXY, IsCheckY:bCheckXY} );
64300
+ if (!drawPoint) return;
64301
+ if (drawPoint.length!=2) return;
64302
+
64303
+ this.ClipFrame();
64304
+
64305
+ var ptStart=drawPoint[0];
64306
+ var ptEnd=drawPoint[1];
64307
+
64308
+ this.SetLineWidth();
64309
+ this.DrawRange(ptStart,ptEnd);
64310
+ this.RestoreLineWidth();
64311
+
64312
+ this.DrawPoint(drawPoint); //画点
64313
+ this.Canvas.restore();
64314
+ }
64315
+
64316
+ this.DrawRange=function(ptStart, ptEnd)
64317
+ {
64318
+ var yTop=Math.min(ptStart.Y, ptEnd.Y);
64319
+ var yBottom=Math.max(ptStart.Y, ptEnd.Y);
64320
+ var xLeft=Math.min(ptStart.X, ptEnd.X);
64321
+ var xRight=Math.max(ptStart.X, ptEnd.X);
64322
+ var height=yBottom-yTop;
64323
+ var xCenter=ptStart.X+(ptEnd.X-ptStart.X)/2;
64324
+
64325
+ if (this.ExtendLine.Right) xRight=this.Frame.ChartBorder.GetRight();
64326
+ if (this.ExtendLine.Left) xLeft=this.Frame.ChartBorder.GetLeft();
64327
+
64328
+ if (this.EnableBGColor)
64329
+ {
64330
+ var rtBG={ Left:xLeft, Top:yTop, Right:xRight, Bottom:yBottom };
64331
+ rtBG.Width=rtBG.Right-rtBG.Left;
64332
+ rtBG.Height=rtBG.Bottom-rtBG.Top;
64333
+ this.Canvas.fillStyle=this.BGColor;
64334
+ this.Canvas.fillRect(rtBG.Left, rtBG.Top, rtBG.Width, rtBG.Height);
64335
+ }
64336
+
64337
+
64338
+ this.Canvas.strokeStyle=this.LineColor;
64339
+ this.Canvas.beginPath();
64340
+ this.Canvas.moveTo(xLeft,ToFixedPoint(yTop));
64341
+ this.Canvas.lineTo(xRight,ToFixedPoint(yTop));
64342
+
64343
+ this.Canvas.moveTo(xLeft,ToFixedPoint(yBottom));
64344
+ this.Canvas.lineTo(xRight,ToFixedPoint(yBottom));
64345
+
64346
+ this.Canvas.moveTo(ToFixedPoint(xCenter),ToFixedPoint(yTop));
64347
+ this.Canvas.lineTo(ToFixedPoint(xCenter),ToFixedPoint(yBottom));
64348
+ this.Canvas.stroke();
64349
+
64350
+ this.LinePoint.push({ Start:{X:xLeft, Y:yTop}, End:{X:xRight, Y:yTop} });
64351
+ this.LinePoint.push({ Start:{X:xLeft, Y:yBottom}, End:{X:xRight, Y:yBottom} });
64352
+ this.LinePoint.push({ Start:{X:xCenter, Y:yTop}, End:{X:xCenter, Y:yBottom} });
64353
+
64354
+ this.DrawArrow({X:ToFixedPoint(xCenter), Y:ptStart.Y}, {X:ToFixedPoint(xCenter), Y:ptEnd.Y});
64355
+
64356
+ //文字输出
64357
+ var startValue=this.Frame.GetYData(ptStart.Y,false);
64358
+ var endValue=this.Frame.GetYData(ptEnd.Y,false);
64359
+ var diffValue=endValue-startValue;
64360
+ var rate=(diffValue/startValue)*100;
64361
+ var text=`${diffValue.toFixed(2)} (${rate.toFixed(2)}%)`;
64362
+
64363
+ this.Canvas.font=this.Font;
64364
+ var textHeight=this.GetFontHeight();
64365
+ var textWidth=this.Canvas.measureText(text).width+4+(this.Label.LeftMargin+this.Label.RightMargin);
64366
+ var rtTextBG={ Left:xCenter-textWidth/2, Width:textWidth, Height:textHeight+2 };
64367
+ if (diffValue>0) rtTextBG.Top=ptEnd.Y-rtTextBG.Height-4;
64368
+ else rtTextBG.Top=ptEnd.Y+4;
64369
+ rtTextBG.Bottom=rtTextBG.Top+rtTextBG.Height;
64370
+
64371
+ if (this.Label.EnableBGColor)
64372
+ {
64373
+ var path=new Path2D();
64374
+ path.roundRect(ToFixedPoint(rtTextBG.Left), ToFixedPoint(rtTextBG.Top), ToFixedRect(rtTextBG.Width), ToFixedRect(rtTextBG.Height), [3]);
64375
+ this.Canvas.fillStyle=this.Label.BGColor;
64376
+ this.Canvas.fill(path);
64377
+ }
64378
+
64379
+ this.Canvas.fillStyle=this.Label.TextColor;
64380
+ this.Canvas.textAlign="left";
64381
+ this.Canvas.textBaseline="bottom";
64382
+ this.Canvas.fillText(text,rtTextBG.Left+2+this.Label.LeftMargin,rtTextBG.Bottom-2);
64383
+ }
64384
+
64385
+ }
64386
+
64387
+
64388
+ function ChartDateRange()
64389
+ {
64390
+ this.newMethod=IChartDrawPicture; //派生
64391
+ this.newMethod();
64392
+ delete this.newMethod;
64393
+
64394
+ this.ClassName='ChartDateRange';
64395
+ this.PointCount=2;
64396
+ this.Font=12*GetDevicePixelRatio() +"px 微软雅黑";
64397
+ this.TextColor=this.LineColor;
64398
+ this.IsPointIn=this.IsPointIn_XYValue_Line;
64399
+ this.GetXYCoordinate=this.GetXYCoordinate_default;
64400
+ this.PointToValue_Default=this.PointToValue;
64401
+ this.OnlyMoveXIndex=true;
64402
+ this.IsSupportMagnet=true;
64403
+ this.LineWidth=1;
64404
+ this.EnableBGColor=true;
64405
+ this.BGColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.15);
64406
+ this.ExtendLine={ Top:false, Bottom: false }; //延长线
64407
+
64408
+ this.Label={ TextColor:"rgb(0,0,0)", BGColor:"rgb(211,211,211)", EnableBGColor:true, LeftMargin:5, RightMargin:5 };
64409
+
64410
+ this.Draw=function()
64411
+ {
64412
+ this.LinePoint=[];
64413
+ if (this.IsFrameMinSize()) return;
64414
+ var bCheckXY=true;
64415
+ var drawPoint=this.CalculateDrawPoint( {IsCheckX:bCheckXY, IsCheckY:bCheckXY} );
64416
+ if (!drawPoint) return;
64417
+ if (drawPoint.length!=2) return;
64418
+
64419
+ this.ClipFrame();
64420
+
64421
+ var ptStart=drawPoint[0];
64422
+ var ptEnd=drawPoint[1];
64423
+
64424
+ this.SetLineWidth();
64425
+ this.DrawRange(ptStart,ptEnd);
64426
+ this.RestoreLineWidth();
64427
+
64428
+ this.DrawPoint(drawPoint); //画点
64429
+ this.Canvas.restore();
64430
+ }
64431
+
64432
+ this.DrawRange=function(ptStart, ptEnd)
64433
+ {
64434
+ var yTop=Math.min(ptStart.Y, ptEnd.Y);
64435
+ var yBottom=Math.max(ptStart.Y, ptEnd.Y);
64436
+ var xLeft=Math.min(ptStart.X, ptEnd.X);
64437
+ var xRight=Math.max(ptStart.X, ptEnd.X);
64438
+ var height=yBottom-yTop;
64439
+ var width=xRight-xLeft;
64440
+ var yCenter=ptStart.Y+(ptEnd.Y-ptStart.Y)/2;
64441
+ var xCenter=ptStart.X+(ptEnd.X-ptStart.X)/2;
64442
+
64443
+ if (this.ExtendLine.Top) yTop=this.Frame.ChartBorder.GetTopEx();
64444
+ if (this.ExtendLine.Bottom) yBottom=this.Frame.ChartBorder.GetBottomEx();
64445
+
64446
+ if (this.EnableBGColor)
64447
+ {
64448
+ var rtBG={ Left:xLeft, Top:yTop, Right:xRight, Bottom:yBottom };
64449
+ rtBG.Width=rtBG.Right-rtBG.Left;
64450
+ rtBG.Height=rtBG.Bottom-rtBG.Top;
64451
+ this.Canvas.fillStyle=this.BGColor;
64452
+ this.Canvas.fillRect(rtBG.Left, rtBG.Top, rtBG.Width, rtBG.Height);
64453
+ }
64454
+
64455
+ this.Canvas.strokeStyle=this.LineColor;
64456
+ this.Canvas.beginPath();
64457
+ this.Canvas.moveTo(ToFixedPoint(xLeft),yTop);
64458
+ this.Canvas.lineTo(ToFixedPoint(xLeft),yBottom);
64459
+
64460
+ this.Canvas.moveTo(ToFixedPoint(xRight),yTop);
64461
+ this.Canvas.lineTo(ToFixedPoint(xRight),yBottom);
64462
+
64463
+ this.Canvas.moveTo(ToFixedPoint(xLeft),ToFixedPoint(yCenter));
64464
+ this.Canvas.lineTo(ToFixedPoint(xRight),ToFixedPoint(yCenter));
64465
+ this.Canvas.stroke();
64466
+
64467
+ this.LinePoint.push({ Start:{X:xLeft, Y:yTop}, End:{X:xLeft, Y:yBottom} });
64468
+ this.LinePoint.push({ Start:{X:xRight, Y:yTop}, End:{X:xRight, Y:yBottom} });
64469
+ this.LinePoint.push({ Start:{X:xLeft, Y:yCenter}, End:{X:xRight, Y:yCenter} });
64470
+
64471
+ this.DrawArrow({X:ptStart.X, Y:ToFixedPoint(yCenter)}, {X:ptEnd.X, Y:ToFixedPoint(yCenter)});
64472
+
64473
+
64474
+ //文字输出
64475
+ var startIndex=this.Frame.GetXData(ptStart.X,false);
64476
+ var endIndex=this.Frame.GetXData(ptEnd.X,false);
64477
+ var barCount=endIndex-startIndex+1;
64478
+ var text=`${barCount} bars`;
64479
+
64480
+ this.Canvas.font=this.Font;
64481
+ var textHeight=this.GetFontHeight();
64482
+ var textWidth=this.Canvas.measureText(text).width+4+(this.Label.LeftMargin+this.Label.RightMargin);
64483
+ var rtTextBG={ Left:xCenter-textWidth/2, Top:ptEnd.Y+4, Width:textWidth, Height:textHeight+2 };
64484
+ rtTextBG.Bottom=rtTextBG.Top+rtTextBG.Height;
64485
+
64486
+ if (this.Label.EnableBGColor)
64487
+ {
64488
+ var path=new Path2D();
64489
+ path.roundRect(ToFixedPoint(rtTextBG.Left), ToFixedPoint(rtTextBG.Top), ToFixedRect(rtTextBG.Width), ToFixedRect(rtTextBG.Height), [3]);
64490
+ this.Canvas.fillStyle=this.Label.BGColor;
64491
+ this.Canvas.fill(path);
64492
+ }
64493
+
64494
+ this.Canvas.fillStyle=this.Label.TextColor;
64495
+ this.Canvas.textAlign="left";
64496
+ this.Canvas.textBaseline="bottom";
64497
+ this.Canvas.fillText(text,rtTextBG.Left+2+this.Label.LeftMargin,rtTextBG.Bottom-2);
64498
+
64499
+ }
64500
+ }
64501
+
64502
+
64174
64503
  function ChartDrawStorage()
64175
64504
  {
64176
64505
  this.DrawData=new Map(); //画图工具数据 key=symbol-Period, value=Map() Key:Guid, Value:{Guid, Symbol, Period, ClassName, Value}
@@ -66500,6 +66829,7 @@ function JSChartLocalization()
66500
66829
  ['自定义分钟', {CN:'分', EN:'Min', TC:'分'}],
66501
66830
  ['自定义日线', {CN:'日', EN:'D', TC:'日'}],
66502
66831
  ['自定义秒', {CN:'秒', EN:'S', TC:'秒'}],
66832
+ ['自定义毫秒', {CN:'毫秒', EN:'MS', TC:'毫秒'}],
66503
66833
 
66504
66834
  ["MVol-Vol", {CN:"成交量", EN:"Volume", TC:'成交量'} ],
66505
66835
  ["MVol-Position", {CN:"持仓量", EN:"Position", TC:'持倉量'} ],
@@ -69586,6 +69916,7 @@ function KLineChartContainer(uielement,OffscreenElement)
69586
69916
  if (ChartData.IsDayPeriod(self.Period,true)) self.RecvRealtimeData(data);
69587
69917
  else if (ChartData.IsMinutePeriod(self.Period,true)) self.RecvMinuteRealtimeData(data);
69588
69918
  else if (ChartData.IsSecondPeriod(self.Period)) self.RecvMinuteRealtimeData(data);
69919
+ else if (ChartData.IsMilliSecondPeriod(self.Period)) self.RecvMinuteRealtimeData(data);
69589
69920
  }
69590
69921
  }
69591
69922
  event.Callback(event,data,this);
@@ -71090,10 +71421,12 @@ function KLineChartContainer(uielement,OffscreenElement)
71090
71421
  if (this.SourceData.DataType!=0) isDataTypeChange=true;
71091
71422
  }
71092
71423
  else if ((period>CUSTOM_MINUTE_PERIOD_START && period<=CUSTOM_MINUTE_PERIOD_END) ||
71093
- (period>CUSTOM_SECOND_PERIOD_START && period<=CUSTOM_SECOND_PERIOD_END))
71424
+ (period>CUSTOM_SECOND_PERIOD_START && period<=CUSTOM_SECOND_PERIOD_END) ||
71425
+ (period>CUSTOM_MILLISECOND_PERIOD_START && period<=CUSTOM_MILLISECOND_PERIOD_END) )
71094
71426
  {
71095
71427
  if (this.SourceData.DataType!=1) isDataTypeChange=true;
71096
71428
  else if (ChartData.IsSecondPeriod(period)) isDataTypeChange=true;
71429
+ else if (ChartData.IsMilliSecondPeriod(period)) isDataTypeChange=true;
71097
71430
  }
71098
71431
  else
71099
71432
  {
@@ -71170,7 +71503,7 @@ function KLineChartContainer(uielement,OffscreenElement)
71170
71503
  this.RequestHistoryData(); //请求日线数据
71171
71504
  //this.ReqeustKLineInfoData();
71172
71505
  }
71173
- else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period))
71506
+ else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period) || ChartData.IsMilliSecondPeriod(this.Period))
71174
71507
  {
71175
71508
  this.CancelAutoUpdate(); //先停止定时器
71176
71509
  this.AutoUpdateEvent(false,'KLineChartContainer::ChangePeriod'); //切换周期先停止更新
@@ -71219,7 +71552,7 @@ function KLineChartContainer(uielement,OffscreenElement)
71219
71552
  this.ResetScrollBar();
71220
71553
  this.RequestHistoryData(); //请求日线数据
71221
71554
  }
71222
- else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period))
71555
+ else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period) || ChartData.IsMilliSecondPeriod(this.Period))
71223
71556
  {
71224
71557
  this.CancelAutoUpdate(); //先停止定时器
71225
71558
  this.AutoUpdateEvent(false,'KLineChartContainer::ChangeRight'); //切换复权先停止更新
@@ -71705,7 +72038,7 @@ function KLineChartContainer(uielement,OffscreenElement)
71705
72038
  this.ResetOverlaySymbolStatus();
71706
72039
  this.RequestHistoryData(); //请求日线数据
71707
72040
  }
71708
- else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period))
72041
+ else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period) || ChartData.IsMilliSecondPeriod(this.Period))
71709
72042
  {
71710
72043
  this.ResetOverlaySymbolStatus();
71711
72044
  this.ReqeustHistoryMinuteData(); //请求分钟数据
@@ -72552,7 +72885,7 @@ function KLineChartContainer(uielement,OffscreenElement)
72552
72885
  this.RequestHistoryData(); //请求日线数据
72553
72886
  //this.ReqeustKLineInfoData();
72554
72887
  }
72555
- else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period))
72888
+ else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period) || ChartData.IsMilliSecondPeriod(this.Period))
72556
72889
  {
72557
72890
  this.ReqeustHistoryMinuteData(); //请求分钟数据
72558
72891
  }
@@ -75209,6 +75542,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
75209
75542
 
75210
75543
  this.DayOffset={ Offset:0, ShowDayCount:-1, DataOffset:0, DayCount:1, }; //Offset 日期偏移 , DataOffset数据偏移
75211
75544
  this.PageInfo={ Enable:false, Offset:-8888, ShowDayCount:4 }; //分页配置
75545
+ this.DataStatus={ MultiDay:false, LatestDay:false }; //MultiDay=多日 LatestDay:当天
75212
75546
 
75213
75547
  this.ZoomStepPixel=50;
75214
75548
 
@@ -77576,6 +77910,12 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
77576
77910
  this.DayOffset.PageInfo=null;
77577
77911
  }
77578
77912
 
77913
+ this.ResetDataStatus=function()
77914
+ {
77915
+ this.DataStatus.MultiDay=false;
77916
+ this.DataStatus.LatestDay=false;
77917
+ }
77918
+
77579
77919
  //切换股票代码
77580
77920
  this.ChangeSymbol=function(symbol,option)
77581
77921
  {
@@ -77584,6 +77924,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
77584
77924
  this.AutoUpdateEvent(false, "MinuteChartContainer::ChangeSymbol");
77585
77925
  this.Symbol=symbol;
77586
77926
  this.ResetDayOffset();
77927
+ this.ResetDataStatus();
77587
77928
  this.ClearIndexPaint(); //清空指标
77588
77929
  this.ResetOverlaySymbolStatus();
77589
77930
  this.ReloadChartDrawPicture();
@@ -77685,6 +78026,8 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
77685
78026
  {
77686
78027
  this.ReloadChartDrawPicture();
77687
78028
  }
78029
+
78030
+ this.ResetDataStatus();
77688
78031
  this.ClearIndexPaint(); //清空指标
77689
78032
  this.ResetOverlaySymbolStatus();
77690
78033
  this.RequestData();
@@ -77965,6 +78308,9 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
77965
78308
  this.MultiDayBeforeOpenData=MinuteChartContainer.JosnDataToBeforeOpenDataArray(data);
77966
78309
  this.MultiDayAfterCloseData=MinuteChartContainer.JosnDataToAfterCloseDataArray(data);
77967
78310
  var updateTime=MinuteChartContainer.JsonDataToHistoryMinuteLastUpdateTime(data);
78311
+
78312
+ this.DataStatus.MultiDay=true;
78313
+
77968
78314
  this.CaclutateCallCationYRange();
77969
78315
  this.Symbol=data.symbol;
77970
78316
  this.Name=data.name;
@@ -78542,6 +78888,8 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
78542
78888
 
78543
78889
  if (this.IsBeforeData) this.BeforeOpenData=beforeOpenData;
78544
78890
  if (this.IsAfterData) this.AfterCloseData=afterCloseData;
78891
+
78892
+ this.DataStatus.LatestDay=true;
78545
78893
 
78546
78894
  if (this.DayCount>1) //多日走势图
78547
78895
  {
@@ -3178,7 +3178,7 @@ JSIndexScript.prototype.TEST = function ()
3178
3178
  "DRAWBAND(OPEN,RGB(0,224,224),CLOSE,RGB(255,96,96));"
3179
3179
  //"T2:IF(KDJ.J>-10,KDJ.J#WEEK,0);"
3180
3180
  */
3181
- Script:"VOL:VOL,VOLSTICK, UPCOLOR(RGBA(255,0,0,0.3)), DOWNCOLOR(RGBA(0,255,0,0.3));"
3181
+ Script:"DRAWICON(C>=H,H, 1, 'draw_1');"
3182
3182
 
3183
3183
  //"DRAWGBK_DIV(C>O,RGB(221 ,160 ,221),RGB(100 ,250, 250),1,1);"
3184
3184
  /*
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.12538";
8
+ var HQCHART_VERSION="1.1.12544";
9
9
 
10
10
  function PrintHQChartVersion()
11
11
  {
@@ -8109,6 +8109,8 @@ function MinuteChartContainer(uielement)
8109
8109
  this.MinuteApiUrl = g_JSChartResource.Domain + "/API/Stock";
8110
8110
  this.HistoryMinuteApiUrl = g_JSChartResource.Domain + "/API/StockMinuteData"; //历史分钟数据
8111
8111
 
8112
+ this.DataStatus={ MultiDay:false, LatestDay:false }; //MultiDay=多日 LatestDay:当天
8113
+
8112
8114
  //手机拖拽
8113
8115
  this.ontouchstart = function (e)
8114
8116
  {
@@ -8840,6 +8842,12 @@ function MinuteChartContainer(uielement)
8840
8842
  }
8841
8843
  }
8842
8844
 
8845
+ this.ResetDataStatus=function()
8846
+ {
8847
+ this.DataStatus.MultiDay=false;
8848
+ this.DataStatus.LatestDay=false;
8849
+ }
8850
+
8843
8851
  //切换股票代码
8844
8852
  this.ChangeSymbol = function (symbol)
8845
8853
  {
@@ -8847,6 +8855,7 @@ function MinuteChartContainer(uielement)
8847
8855
  this.CancelAutoUpdate(); //先停止定时器
8848
8856
  this.ChartSplashPaint.SetTitle(this.LoadDataSplashTitle);
8849
8857
  this.ChartSplashPaint.EnableSplash(true);
8858
+ this.ResetDataStatus();
8850
8859
  this.ClearIndexPaint();
8851
8860
  this.RequestData();
8852
8861
  }
@@ -8856,6 +8865,7 @@ function MinuteChartContainer(uielement)
8856
8865
  if (count < 0 || count > 10) return;
8857
8866
  this.DayCount = count;
8858
8867
  this.CancelAutoUpdate(); //先停止定时器
8868
+ this.ResetDataStatus();
8859
8869
  this.ClearIndexPaint();
8860
8870
  this.RequestData();
8861
8871
  }
@@ -8962,6 +8972,7 @@ function MinuteChartContainer(uielement)
8962
8972
  this.DayData = MinuteChartContainer.JsonDataToMinuteDataArray(data);;
8963
8973
  this.Symbol = data.symbol;
8964
8974
  this.Name = data.name;
8975
+ this.DataStatus.MultiDay=true;
8965
8976
 
8966
8977
  if (IFrameSplitOperator.IsNonEmptyArray(this.DayData))
8967
8978
  {
@@ -9141,7 +9152,8 @@ function MinuteChartContainer(uielement)
9141
9152
  }
9142
9153
 
9143
9154
  var aryMinuteData = MinuteChartContainer.JsonDataToMinuteData(data.data);
9144
-
9155
+ this.DataStatus.LatestDay=true;
9156
+
9145
9157
  if (this.DayCount > 1) //多日走势图
9146
9158
  {
9147
9159
  this.UpdateLatestMinuteData(aryMinuteData, data.data.stock[0].date);