hqchart 1.1.12503 → 1.1.12513

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.
@@ -10414,6 +10414,13 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10414
10414
  return false;
10415
10415
  }
10416
10416
 
10417
+ this.IsMinuteContainer=function()
10418
+ {
10419
+ if (this.ClassName=="MinuteChartContainer" || this.ClassName=="MinuteChartHScreenContainer") return true;
10420
+
10421
+ return false;
10422
+ }
10423
+
10417
10424
  this.UpdatePointByCursorIndex=function(type) //type 1=根据十字光标更新 2=强制取消十字光标
10418
10425
  {
10419
10426
  var pt={X:null, Y:null};
@@ -24989,9 +24996,12 @@ function IChartPainting()
24989
24996
  }
24990
24997
  else if (valueType==3)
24991
24998
  {
24992
- var price=this.Data.Data[i].Close;
24993
- if (price==null) continue;
24994
- value=price/this.YClose*this.MainYClose;
24999
+ var minItem=this.Data.Data[i];
25000
+ var mainItem=this.MainData.Data[i];
25001
+ if (!minItem || !IFrameSplitOperator.IsNumber(minItem.Close) || !IFrameSplitOperator.IsNumber(minItem.YClose)) continue;
25002
+ if (!mainItem || !IFrameSplitOperator.IsNumber(mainItem.Close) || !IFrameSplitOperator.IsNumber(mainItem.YClose)) continue;
25003
+ var price=minItem.Close;
25004
+ var value=price/minItem.YClose*mainItem.YClose;
24995
25005
  }
24996
25006
  else if (valueType==4)
24997
25007
  {
@@ -25111,9 +25121,12 @@ function IChartPainting()
25111
25121
  }
25112
25122
  else if (valueType==3)
25113
25123
  {
25114
- var price=this.Data.Data[i].Close;
25115
- if (price==null) continue;
25116
- var value=price/this.YClose*this.MainYClose;
25124
+ var minItem=this.Data.Data[i];
25125
+ var mainItem=this.MainData.Data[i];
25126
+ if (!minItem || !IFrameSplitOperator.IsNumber(minItem.Close) || !IFrameSplitOperator.IsNumber(minItem.YClose)) continue;
25127
+ if (!mainItem || !IFrameSplitOperator.IsNumber(mainItem.Close) || !IFrameSplitOperator.IsNumber(mainItem.YClose)) continue;
25128
+ var price=minItem.Close;
25129
+ var value=price/minItem.YClose*mainItem.YClose;
25117
25130
  }
25118
25131
  else
25119
25132
  {
@@ -35763,19 +35776,16 @@ function ChartOverlayMinutePriceLine()
35763
35776
 
35764
35777
  this.Color="rgb(65,105,225)";
35765
35778
  this.MainData; //主图数据
35766
- this.MainYClose; //主图股票的前收盘价
35767
35779
  this.SourceData; //原始数据
35768
35780
 
35769
35781
  this.ClassName="ChartOverlayMinutePriceLine";
35770
35782
  this.Title;
35771
35783
  this.Symbol; //叠加的股票代码
35772
- this.YClose; //叠加的股票前收盘
35773
35784
  this.Status=OVERLAY_STATUS_ID.STATUS_NONE_ID;
35774
35785
 
35775
35786
  this.OverlayType=0; //叠加方式 0=百分比叠加 1=绝对叠加
35776
35787
  this.IsCalcuateMaxMin=true; //是否参与计算Y轴的最大最小值
35777
35788
 
35778
-
35779
35789
  this.SetOption=function(option)
35780
35790
  {
35781
35791
  if (option)
@@ -35787,19 +35797,21 @@ function ChartOverlayMinutePriceLine()
35787
35797
 
35788
35798
  this.PtInChart=function(x,y)
35789
35799
  {
35790
- var option={ MinuteOverlayPrice:true, YClose:this.YClose, MainYClose:this.MainYClose, OverlayType:this.OverlayType };
35800
+ var option={ MinuteOverlayPrice:true, OverlayType:this.OverlayType };
35791
35801
  return this.PtInLine(x, y, option);
35792
35802
  }
35793
35803
 
35794
35804
  this.DrawSelectedStatus=function()
35795
35805
  {
35796
- var option={ MinuteOverlayPrice:true, YClose:this.YClose, MainYClose:this.MainYClose, OverlayType:this.OverlayType };
35806
+ var option={ MinuteOverlayPrice:true, OverlayType:this.OverlayType };
35797
35807
  this.DrawLinePoint(option);
35798
35808
  }
35799
35809
 
35800
35810
  this.Draw=function()
35801
35811
  {
35802
35812
  if (!this.Data) return;
35813
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return;
35814
+
35803
35815
  if (this.NotSupportMessage)
35804
35816
  {
35805
35817
  this.DrawNotSupportmessage();
@@ -35820,37 +35832,53 @@ function ChartOverlayMinutePriceLine()
35820
35832
  var bFirstPoint=true;
35821
35833
  var drawCount=0;
35822
35834
  var xOffset=0, showValue=0;
35835
+ var yClose=null, mainYClose=null;
35836
+ var pointCount=0;
35823
35837
  for(var i=this.Data.DataOffset+xOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j)
35824
35838
  {
35825
- var value=this.Data.Data[i].Close;
35826
- if (value==null) continue;
35839
+ var item=this.Data.Data[i];
35840
+ if (item && IFrameSplitOperator.IsNumber(item.Close))
35841
+ {
35842
+ if (bFirstPoint) //百分比使用每天的昨收计算
35843
+ {
35844
+ yClose=item.YClose;
35845
+ var minItem=this.MainData.Data[i];
35846
+ mainYClose=minItem.YClose;
35847
+ }
35827
35848
 
35828
- showValue=value; //绝对叠加
35829
- if (this.OverlayType==0) showValue=value/this.YClose*this.MainYClose; //百分比
35849
+ var value=item.Close;
35850
+ showValue=value; //绝对叠加
35830
35851
 
35831
- var x=this.ChartFrame.GetXFromIndex(j);
35832
- var y=this.ChartFrame.GetYFromData(showValue, false);
35852
+ if (this.OverlayType==0)
35853
+ showValue=value/yClose*mainYClose; //百分比
35833
35854
 
35834
- if (bFirstPoint)
35835
- {
35836
- this.Canvas.strokeStyle=this.Color;
35837
- this.Canvas.beginPath();
35838
- if (isHScreen) this.Canvas.moveTo(y,x);
35839
- else this.Canvas.moveTo(x,y);
35840
- bFirstPoint=false;
35841
- }
35842
- else
35843
- {
35844
- if (isHScreen) this.Canvas.lineTo(y,x);
35845
- else this.Canvas.lineTo(x,y);
35855
+ var x=this.ChartFrame.GetXFromIndex(j);
35856
+ var y=this.ChartFrame.GetYFromData(showValue, false);
35857
+
35858
+ if (bFirstPoint)
35859
+ {
35860
+ this.Canvas.strokeStyle=this.Color;
35861
+ this.Canvas.beginPath();
35862
+ if (isHScreen) this.Canvas.moveTo(y,x);
35863
+ else this.Canvas.moveTo(x,y);
35864
+ bFirstPoint=false;
35865
+ }
35866
+ else
35867
+ {
35868
+ if (isHScreen) this.Canvas.lineTo(y,x);
35869
+ else this.Canvas.lineTo(x,y);
35870
+ }
35871
+
35872
+ ++drawCount;
35846
35873
  }
35847
35874
 
35848
- ++drawCount;
35875
+ ++pointCount;
35849
35876
 
35850
- if (drawCount>=minuteCount) //上一天的数据和这天地数据线段要断开
35877
+ if (pointCount>=minuteCount) //上一天的数据和这天地数据线段要断开
35851
35878
  {
35852
35879
  bFirstPoint=true;
35853
- this.Canvas.stroke();
35880
+ pointCount=0;
35881
+ if (drawCount>0) this.Canvas.stroke();
35854
35882
  drawCount=0;
35855
35883
  }
35856
35884
  }
@@ -35863,24 +35891,46 @@ function ChartOverlayMinutePriceLine()
35863
35891
  this.GetMaxMin=function()
35864
35892
  {
35865
35893
  var xPointCount=this.ChartFrame.XPointCount;
35866
- var range={};
35894
+ var range={ Min:null, Max:null };
35867
35895
  if (!this.IsCalcuateMaxMin) return range;
35868
- if (this.YClose==null) return range;
35869
35896
 
35870
- range.Min=this.MainYClose;
35871
- range.Max=this.MainYClose;
35897
+ var minuteCount=this.ChartFrame.MinuteCount;
35898
+ var yClose=null, mainYClose=null;
35899
+ var bFirstPoint=true;
35900
+ var pointCount=0;
35872
35901
  for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j)
35873
35902
  {
35874
- var value=this.Data.Data[i].Close;
35875
- if (value==null) continue;
35903
+ var item=this.Data.Data[i];
35904
+ if (!item || !IFrameSplitOperator.IsNumber(item.Close))
35905
+ {
35906
+ ++pointCount;
35907
+ continue;
35908
+ }
35876
35909
 
35877
- if (this.OverlayType==0) value=value/this.YClose*this.MainYClose;
35910
+ if (bFirstPoint)
35911
+ {
35912
+ yClose=item.YClose;
35913
+ var minItem=this.MainData.Data[i];
35914
+ mainYClose=minItem.YClose;
35915
+ bFirstPoint=false;
35916
+ }
35917
+
35918
+ var value=item.Close;
35919
+ if (this.OverlayType==0) value=value/yClose*mainYClose;
35878
35920
 
35879
35921
  if (range.Max==null) range.Max=value;
35880
35922
  if (range.Min==null) range.Min=value;
35881
35923
 
35882
35924
  if (range.Max<value) range.Max=value;
35883
35925
  if (range.Min>value) range.Min=value;
35926
+
35927
+ ++pointCount;
35928
+
35929
+ if (pointCount>=minuteCount)
35930
+ {
35931
+ bFirstPoint=true;
35932
+ pointCount=0;
35933
+ }
35884
35934
  }
35885
35935
 
35886
35936
  //JSConsole.Chart.Log(`[ChartOverlayMinutePriceLine::GetMaxMin] max=${range.Max} min=${range.Min}`);
@@ -51259,7 +51309,16 @@ function HistoryDataStringFormat()
51259
51309
 
51260
51310
  this.Width=157;
51261
51311
  if (this.LanguageID==JSCHART_LANGUAGE_ID.LANGUAGE_ENGLISH_ID) this.Width=180;
51312
+ var titleData=this.GetFormatTitle(data);
51313
+ if (!titleData) return false;
51314
+ var outData=this.GenerateTitleHtml(titleData);
51315
+ if (!outData) return false;
51316
+
51317
+ this.Text=outData.Html;
51318
+ this.Height=outData.LineCount*this.LineHeight;
51319
+ return true;
51262
51320
 
51321
+ /*
51263
51322
  var date=new Date(parseInt(data.Date/10000),(data.Date/100%100-1),data.Date%100);
51264
51323
  var strDate=IFrameSplitOperator.FormatDateString(data.Date);
51265
51324
  var title2=g_JSChartLocalization.GetText(WEEK_NAME[date.getDay()],this.LanguageID);
@@ -51349,6 +51408,178 @@ function HistoryDataStringFormat()
51349
51408
 
51350
51409
  this.Height=this.LineCount*this.LineHeight;
51351
51410
  return true;
51411
+ */
51412
+ }
51413
+
51414
+ this.GenerateTitleHtml=function(data)
51415
+ {
51416
+ var lineCount=0;
51417
+ var strHtml="", text;
51418
+ if (data.Name)
51419
+ {
51420
+ text=`<span style='color:rgb(0,0,0);font:微软雅黑;font-size:12px;text-align:center;display: block;'>${data.Name}</span>`;
51421
+ strHtml+=text;
51422
+ ++lineCount;
51423
+ }
51424
+
51425
+ if (data.Title)
51426
+ {
51427
+ text=`<span class='tooltip-title'>${data.Title}</span>`;
51428
+ strHtml+=text;
51429
+ ++lineCount;
51430
+ }
51431
+
51432
+ if (IFrameSplitOperator.IsNonEmptyArray(data.AryText))
51433
+ {
51434
+ for(var i=0;i<data.AryText.length;++i)
51435
+ {
51436
+ var item=data.AryText[i];
51437
+ if (i>0) strHtml+='<br/>';
51438
+ var text=`<span class='tooltip-con'>${item.Title}</span><span class='tooltip-num' style='color:${item.Color};'>${item.Text}</span>`;
51439
+ strHtml+=text;
51440
+ ++lineCount;
51441
+ }
51442
+ }
51443
+
51444
+ return { Html:strHtml, LineCount:lineCount };
51445
+ }
51446
+
51447
+ this.GetFormatTitle=function(data)
51448
+ {
51449
+ if (!data) return null;
51450
+
51451
+ var upperSymbol=this.Symbol.toUpperCase();
51452
+ var defaultfloatPrecision=GetfloatPrecision(this.Symbol);//价格小数位数
51453
+ var date=new Date(parseInt(data.Date/10000),(data.Date/100%100-1),data.Date%100);
51454
+ var strDate=IFrameSplitOperator.FormatDateString(data.Date);
51455
+
51456
+ var title2=g_JSChartLocalization.GetText(WEEK_NAME[date.getDay()],this.LanguageID);
51457
+ var isTickPeriod=ChartData.IsTickPeriod(this.Value.ChartPaint.Data.Period);
51458
+ if (ChartData.IsMinutePeriod(this.Value.ChartPaint.Data.Period,true)) // 分钟周期
51459
+ {
51460
+ title2=IFrameSplitOperator.FormatTimeString(data.Time);
51461
+ }
51462
+ else if (ChartData.IsSecondPeriod(this.Value.ChartPaint.Data.Period) || isTickPeriod)
51463
+ {
51464
+ title2=IFrameSplitOperator.FormatTimeString(data.Time,'HH:MM:SS');
51465
+ }
51466
+
51467
+ var result={ AryText:null, Title:`${strDate}&nbsp&nbsp${title2}`, Name:null };
51468
+ if (isTickPeriod)
51469
+ {
51470
+ var aryText=
51471
+ [
51472
+ {
51473
+ Title:g_JSChartLocalization.GetText('DivTooltip-Price',this.LanguageID),
51474
+ Text:IFrameSplitOperator.IsNumber(data.Open)? data.Open.toFixed(defaultfloatPrecision):'--',
51475
+ Color:this.GetColor(data.Open,data.YClose)
51476
+ },
51477
+ ];
51478
+
51479
+ if (IFrameSplitOperator.IsNumber(data.YClose))
51480
+ {
51481
+ var increase=(data.Close-data.YClose)/data.YClose*100;
51482
+ var item=
51483
+ {
51484
+ Title:g_JSChartLocalization.GetText('DivTooltip-Increase',this.LanguageID),
51485
+ Text:`${increase.toFixed(2)}%`,
51486
+ Color:this.GetColor(increase,0)
51487
+ }
51488
+ aryText.push(item);
51489
+ }
51490
+
51491
+ result.AryText=aryText;
51492
+ }
51493
+ else if (data.IsNonTrade)
51494
+ {
51495
+
51496
+ }
51497
+ else
51498
+ {
51499
+ var vol=data.Vol;
51500
+ if (upperSymbol && MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol)) vol/=100; //A股统一转成手
51501
+ var eventUnchangeKLine=null; //定制平盘K线颜色事件
51502
+ if (this.GetEventCallback) eventUnchangeKLine=this.GetEventCallback(JSCHART_EVENT_ID.ON_CUSTOM_UNCHANGE_KLINE_TITLE_COLOR);
51503
+
51504
+ var aryText=
51505
+ [
51506
+ {
51507
+ Title:g_JSChartLocalization.GetText('DivTooltip-Open',this.LanguageID),
51508
+ Text:IFrameSplitOperator.IsNumber(data.Open)? data.Open.toFixed(defaultfloatPrecision):'--',
51509
+ Color:this.GetPriceColor("DivTooltip-Open",data.Open,data.YClose,data,eventUnchangeKLine),
51510
+ },
51511
+ {
51512
+ Title:g_JSChartLocalization.GetText('DivTooltip-High',this.LanguageID),
51513
+ Text:IFrameSplitOperator.IsNumber(data.High)? data.High.toFixed(defaultfloatPrecision):'--',
51514
+ Color:this.GetPriceColor("DivTooltip-High",data.High,data.YClose,data,eventUnchangeKLine)
51515
+ },
51516
+ {
51517
+ Title:g_JSChartLocalization.GetText('DivTooltip-Low',this.LanguageID),
51518
+ Text:IFrameSplitOperator.IsNumber(data.Low)? data.Low.toFixed(defaultfloatPrecision):'--',
51519
+ Color:this.GetPriceColor('DivTooltip-Low',data.Low,data.YClose,data,eventUnchangeKLine)
51520
+ },
51521
+ {
51522
+ Title:g_JSChartLocalization.GetText('DivTooltip-Close',this.LanguageID),
51523
+ Text:IFrameSplitOperator.IsNumber(data.Close)? data.Close.toFixed(defaultfloatPrecision):'--',
51524
+ Color:this.GetPriceColor('DivTooltip-Close',data.Close,data.YClose,data,eventUnchangeKLine)
51525
+ },
51526
+ {
51527
+ Title:g_JSChartLocalization.GetText('DivTooltip-Vol',this.LanguageID),
51528
+ Text:IFrameSplitOperator.IsNumber(vol)? IFrameSplitOperator.FormatValueString(vol,2,this.LanguageID):'--',
51529
+ Color:this.VolColor
51530
+ },
51531
+ {
51532
+ Title:g_JSChartLocalization.GetText('DivTooltip-Amount',this.LanguageID),
51533
+ Text:IFrameSplitOperator.IsNumber(data.Amount)? IFrameSplitOperator.FormatValueString(data.Amount,2,this.LanguageID):'--',
51534
+ Color:this.AmountColor
51535
+ }
51536
+ ];
51537
+
51538
+ if (IFrameSplitOperator.IsNumber(data.YClose))
51539
+ {
51540
+ var increase=(data.Close-data.YClose)/data.YClose*100;
51541
+ var item=
51542
+ {
51543
+ Title:g_JSChartLocalization.GetText('DivTooltip-Increase',this.LanguageID),
51544
+ Text:`${increase.toFixed(2)}%`,
51545
+ Color:this.GetColor(increase,0)
51546
+ }
51547
+ aryText.push(item);
51548
+ }
51549
+
51550
+ if(MARKET_SUFFIX_NAME.IsSHSZStockA(this.Symbol) && data.FlowCapital>0) //换手率
51551
+ {
51552
+ var value=data.Vol/data.FlowCapital*100;
51553
+ var item=
51554
+ {
51555
+ Title:g_JSChartLocalization.GetText('DivTooltip-Exchange',this.LanguageID),
51556
+ Text:`${value.toFixed(2)}%`,
51557
+ Color:this.TurnoverRateColor
51558
+ }
51559
+ aryText.push(item);
51560
+ }
51561
+
51562
+ if (MARKET_SUFFIX_NAME.IsFutures(upperSymbol) && IFrameSplitOperator.IsNumber(data.Position))
51563
+ {
51564
+ var item=
51565
+ {
51566
+ Title:g_JSChartLocalization.GetText('DivTooltip-Position',this.LanguageID),
51567
+ Text:`${data.Position}`,
51568
+ Color:this.PositionColor
51569
+ }
51570
+ }
51571
+
51572
+ //叠加股票
51573
+ if (this.Value.ChartPaint.Name=="Overlay-KLine")
51574
+ {
51575
+ result.Name=this.Value.ChartPaint.Title;
51576
+ }
51577
+
51578
+ result.AryText=aryText;
51579
+ }
51580
+
51581
+
51582
+ return result;
51352
51583
  }
51353
51584
 
51354
51585
  this.GetColor=function(price,yclse)
@@ -76827,7 +77058,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
76827
77058
  //叠加股票
76828
77059
  this.OverlaySymbol=function(symbol,option)
76829
77060
  {
76830
- for(var i in this.OverlayChartPaint)
77061
+ for(var i=0; i<this.OverlayChartPaint.length; ++i)
76831
77062
  {
76832
77063
  var item=this.OverlayChartPaint[i];
76833
77064
  if (item.Symbol==symbol)
@@ -76847,11 +77078,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
76847
77078
  if (option && option.Color) paint.Color=option.Color; //外部设置颜色
76848
77079
  else paint.Color=g_JSChartResource.OverlaySymbol.Color[g_JSChartResource.OverlaySymbol.Random%g_JSChartResource.OverlaySymbol.Color.length];
76849
77080
  ++g_JSChartResource.OverlaySymbol.Random;
76850
- if (this.ChartPaint[0].YClose>0 && this.ChartPaint[0].Data) //绑定主图数据
76851
- {
76852
- paint.MainData=this.ChartPaint[0].Data;
76853
- paint.MainYClose=this.ChartPaint[0].YClose;
76854
- }
77081
+ paint.MainData=this.SourceData; //绑定主图数据
76855
77082
 
76856
77083
  if (paint.SetOption) paint.SetOption(option);
76857
77084
 
@@ -77819,7 +78046,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
77819
78046
  for(var i=0; i<this.OverlayChartPaint.length; ++i)
77820
78047
  {
77821
78048
  let item=this.OverlayChartPaint[i];
77822
- if (!item.MainData || !(item.MainYClose>0) ) continue;
78049
+ if (!item.MainData) continue;
77823
78050
  if (item.Status!=OVERLAY_STATUS_ID.STATUS_NONE_ID) continue;
77824
78051
  var symbol=item.Symbol;
77825
78052
  if (!symbol) continue;
@@ -77880,7 +78107,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
77880
78107
  for(var j=0; j<this.OverlayChartPaint.length; ++j)
77881
78108
  {
77882
78109
  var item=this.OverlayChartPaint[j];
77883
- if (!item.MainData || !(item.MainYClose>0) ) continue;
78110
+ if (!item.MainData) continue;
77884
78111
  if (overlayData.symbol==item.Symbol)
77885
78112
  {
77886
78113
  this.RecvOverlayMinuteData(overlayData, item, { Redraw:false });
@@ -78041,6 +78268,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
78041
78268
  {
78042
78269
  var empytData=new ChartData();
78043
78270
  empytData.Date=item.Date;
78271
+ empytData.Data.length=item.Data.length;
78044
78272
  overlayDayData.push(empytData);
78045
78273
  }
78046
78274
  }
@@ -78274,11 +78502,10 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
78274
78502
  this.ExtendChartPaint[0].Name=this.Name;
78275
78503
  }
78276
78504
 
78277
- for(var i in this.OverlayChartPaint)
78505
+ for(var i=0; i<this.OverlayChartPaint.length; ++i)
78278
78506
  {
78279
78507
  var item=this.OverlayChartPaint[i];
78280
- item.MainData=this.ChartPaint[0].Data; //叠加股票
78281
- item.MainYClose=yClose;
78508
+ item.MainData=minuteData; //绑定主图数据
78282
78509
  }
78283
78510
  }
78284
78511
 
@@ -102064,6 +102291,36 @@ function JSDraw(errorHandler,symbolData)
102064
102291
  return result;
102065
102292
  }
102066
102293
 
102294
+ //叠加一个K线
102295
+ this.DRAWOVERLAYKLINE=function(open, high, low, close)
102296
+ {
102297
+ var drawData=[];
102298
+ var result={DrawData:drawData, DrawType:'DRAWOVERLAYKLINE'};
102299
+ var count=Math.max(high.length, open.length,low.length,close.length);
102300
+
102301
+ var kData=this.SymbolData.Data.Data;
102302
+ for(var i=0;i<count;++i)
102303
+ {
102304
+ var item={Open:null,High:null, Low:null, Close:null};
102305
+ var kItem=kData[i];
102306
+ if (i<high.length && i<open.length && i<low.length && i<close.length &&
102307
+ IFrameSplitOperator.IsNumber(open[i]) && IFrameSplitOperator.IsNumber(high[i]) && IFrameSplitOperator.IsNumber(low[i]) && IFrameSplitOperator.IsNumber(low[i]))
102308
+ {
102309
+
102310
+ item.Open=open[i];
102311
+ item.High=high[i];
102312
+ item.Low=low[i];
102313
+ item.Close=close[i];
102314
+ item.Date=kItem.Date;
102315
+ if (IFrameSplitOperator.IsNumber(kItem.Time)) item.Time=kItem.Time;
102316
+ }
102317
+
102318
+ drawData[i]=item;
102319
+ }
102320
+
102321
+ return result;
102322
+ }
102323
+
102067
102324
  /*
102068
102325
  DRAWCOLORKLINE 绘制K线
102069
102326
  用法:
@@ -103571,7 +103828,7 @@ JSDraw.prototype.IsDrawFunction=function(name)
103571
103828
  {
103572
103829
  let setFunctionName=new Set(
103573
103830
  [
103574
- "STICKLINE","DRAWTEXT",'SUPERDRAWTEXT','DRAWLINE','DRAWBAND','DRAWKLINE',"DRAWKLINE1",'DRAWKLINE_IF',"DRAWCOLORKLINE",'PLOYLINE',
103831
+ "STICKLINE","DRAWTEXT",'SUPERDRAWTEXT','DRAWLINE','DRAWBAND','DRAWKLINE',"DRAWKLINE1",'DRAWKLINE_IF',"DRAWCOLORKLINE",'PLOYLINE',"DRAWOVERLAYKLINE",
103575
103832
  'POLYLINE','DRAWNUMBER',"DRAWNUMBER_FIX",'DRAWICON','DRAWCHANNEL','PARTLINE','DRAWTEXT_FIX','DRAWGBK','DRAWTEXT_LINE','DRAWRECTREL',"DRAWTEXTABS","DRAWTEXTREL",
103576
103833
  'DRAWOVERLAYLINE',"FILLRGN", "FILLRGN2","FILLTOPRGN", "FILLBOTTOMRGN", "FILLVERTICALRGN","FLOATRGN","DRAWSL", "DRAWGBK2","DRAWGBK_DIV",
103577
103834
  "VERTLINE","HORLINE","TIPICON"
@@ -109855,6 +110112,10 @@ function JSExecute(ast,option)
109855
110112
  node.Draw=this.Draw.DRAWKLINE_IF(args[0],args[1],args[2],args[3],args[4]);
109856
110113
  node.Out=[];
109857
110114
  break;
110115
+ case "DRAWOVERLAYKLINE":
110116
+ node.Draw=this.Draw.DRAWOVERLAYKLINE(args[0],args[1],args[2],args[3]);
110117
+ node.Out=[];
110118
+ break;
109858
110119
  case "DRAWCOLORKLINE":
109859
110120
  node.Draw=this.Draw.DRAWCOLORKLINE(args[0],args[1],args[2]);
109860
110121
  node.Out=[];
@@ -112476,6 +112737,28 @@ function ScriptIndex(name,script,args,option)
112476
112737
  hqChart.ChartPaint.push(chart);
112477
112738
  }
112478
112739
 
112740
+ this.CreateOverlayKLine=function(hqChart,windowIndex,varItem,id)
112741
+ {
112742
+ var chart=null;
112743
+ if (hqChart.IsKLineContainer()) chart=new ChartOverlayKLine();
112744
+ else if (hqChart.IsMinuteContainer()) chart=new ChartOverlayMinutePriceLine();
112745
+ else return;
112746
+
112747
+ chart.Canvas=hqChart.Canvas;
112748
+ chart.Name=varItem.Name;
112749
+ chart.Identify=this.Guid;
112750
+ chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;
112751
+ chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;
112752
+
112753
+ if (varItem.Color) chart.Color=this.GetColor(varItem.Color); //如果设置了颜色,使用外面设置的颜色
112754
+ else chart.Color=this.GetDefaultColor(id);
112755
+
112756
+ chart.Data.Data=varItem.Draw.DrawData;
112757
+ chart.MainData=hqChart.ChartPaint[0].Data;//绑定K线
112758
+
112759
+ hqChart.ChartPaint.push(chart);
112760
+ }
112761
+
112479
112762
  this.CreateDrawColorKLine=function(hqChart,windowIndex,varItem,i)
112480
112763
  {
112481
112764
  let chart=new ChartColorKline();
@@ -113316,6 +113599,9 @@ function ScriptIndex(name,script,args,option)
113316
113599
  case "DRAWKLINE1":
113317
113600
  this.CreateKLine(hqChart,windowIndex,item,i);
113318
113601
  break;
113602
+ case "DRAWOVERLAYKLINE":
113603
+ this.CreateOverlayKLine(hqChart,windowIndex,item,i);
113604
+ break;
113319
113605
  case "DRAWCOLORKLINE":
113320
113606
  this.CreateDrawColorKLine(hqChart,windowIndex,item,i);
113321
113607
  break;
@@ -128294,7 +128580,7 @@ function HQChartScriptWorker()
128294
128580
 
128295
128581
 
128296
128582
 
128297
- var HQCHART_VERSION="1.1.12502";
128583
+ var HQCHART_VERSION="1.1.12512";
128298
128584
 
128299
128585
  function PrintHQChartVersion()
128300
128586
  {
@@ -8574,7 +8574,7 @@ function JSDraw(errorHandler, symbolData)
8574
8574
  例如:
8575
8575
  DRAWICON(CLOSE>OPEN,LOW,1)表示当收阳时在最低价位置画1号图标.
8576
8576
  */
8577
- this.DRAWICON = function (condition, data, type)
8577
+ this.DRAWICON = function (condition, data, type, markID)
8578
8578
  {
8579
8579
  if (IFrameSplitOperator.IsString(type)) //把ICO1=>1
8580
8580
  {
@@ -8586,6 +8586,7 @@ function JSDraw(errorHandler, symbolData)
8586
8586
  if (!icon) icon = { Symbol: '●', Color: 'rgb(0,139,69)'};
8587
8587
  let drawData = [];
8588
8588
  let result = { DrawData: drawData, DrawType: 'DRAWICON', Icon: icon , IconID:type};
8589
+ if (markID) result.MarkID=markID;
8589
8590
  if (condition.length <= 0) return result;
8590
8591
 
8591
8592
  var IsNumber = typeof (data) == "number";
@@ -13254,7 +13255,7 @@ function JSExecute(ast,option)
13254
13255
  node.Out=[];
13255
13256
  break;
13256
13257
  case 'DRAWICON':
13257
- node.Draw = this.Draw.DRAWICON(args[0], args[1], args[2]);
13258
+ node.Draw = this.Draw.DRAWICON(args[0], args[1], args[2], args[3]);
13258
13259
  node.Out = [];
13259
13260
  break;
13260
13261
  case "ICON":
@@ -2191,6 +2191,7 @@ export
2191
2191
  CUSTOM_SECOND_PERIOD_END,
2192
2192
  Rect,
2193
2193
  DataPlus,
2194
+ g_DataPlus,
2194
2195
  Guid,
2195
2196
  ToFixedPoint,
2196
2197
  ToFixedRect,
@@ -935,6 +935,8 @@ function ScriptIndex(name, script, args, option)
935
935
  if (varItem.Color) chart.Color = this.GetColor(varItem.Color);
936
936
  else chart.Color = 'rgb(0,0,0)';
937
937
 
938
+ if (varItem.Draw.MarkID) chart.MarkID=varItem.Draw.MarkID; //外部指定ID
939
+
938
940
  if (varItem.DrawVAlign>=0)
939
941
  {
940
942
  if (varItem.DrawVAlign==0) chart.TextBaseline="top";
@@ -961,6 +963,7 @@ function ScriptIndex(name, script, args, option)
961
963
  if (event && event.Callback)
962
964
  {
963
965
  var sendData={ FrameID:windowIndex, ID:id, Data:varItem, Callback:null };
966
+ if (varItem.Draw.MarkID) sendData.MarkID=varItem.Draw.MarkID; //外部指定ID
964
967
  event.Callback(event, sendData,this);
965
968
  if (sendData.Callback)
966
969
  {
@@ -972,6 +975,7 @@ function ScriptIndex(name, script, args, option)
972
975
  let chartText = new ChartSingleText();
973
976
  chartText.Canvas = hqChart.Canvas;
974
977
  chartText.TextAlign = 'center';
978
+
975
979
 
976
980
  chartText.Name = varItem.Name;
977
981
  chartText.ChartBorder = hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;
@@ -984,6 +988,8 @@ function ScriptIndex(name, script, args, option)
984
988
  else if (varItem.Draw.Icon.Color) chartText.Color = varItem.Draw.Icon.Color;
985
989
  else chartText.Color = 'rgb(0,0,0)';
986
990
 
991
+
992
+
987
993
  if (varItem.DrawVAlign>=0)
988
994
  {
989
995
  if (varItem.DrawVAlign==0) chartText.Direction=1;
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.12500";
8
+ var HQCHART_VERSION="1.1.12508";
9
9
 
10
10
  function PrintHQChartVersion()
11
11
  {