hqchart 1.1.12505 → 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}`);
@@ -77008,7 +77058,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
77008
77058
  //叠加股票
77009
77059
  this.OverlaySymbol=function(symbol,option)
77010
77060
  {
77011
- for(var i in this.OverlayChartPaint)
77061
+ for(var i=0; i<this.OverlayChartPaint.length; ++i)
77012
77062
  {
77013
77063
  var item=this.OverlayChartPaint[i];
77014
77064
  if (item.Symbol==symbol)
@@ -77028,11 +77078,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
77028
77078
  if (option && option.Color) paint.Color=option.Color; //外部设置颜色
77029
77079
  else paint.Color=g_JSChartResource.OverlaySymbol.Color[g_JSChartResource.OverlaySymbol.Random%g_JSChartResource.OverlaySymbol.Color.length];
77030
77080
  ++g_JSChartResource.OverlaySymbol.Random;
77031
- if (this.ChartPaint[0].YClose>0 && this.ChartPaint[0].Data) //绑定主图数据
77032
- {
77033
- paint.MainData=this.ChartPaint[0].Data;
77034
- paint.MainYClose=this.ChartPaint[0].YClose;
77035
- }
77081
+ paint.MainData=this.SourceData; //绑定主图数据
77036
77082
 
77037
77083
  if (paint.SetOption) paint.SetOption(option);
77038
77084
 
@@ -78000,7 +78046,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
78000
78046
  for(var i=0; i<this.OverlayChartPaint.length; ++i)
78001
78047
  {
78002
78048
  let item=this.OverlayChartPaint[i];
78003
- if (!item.MainData || !(item.MainYClose>0) ) continue;
78049
+ if (!item.MainData) continue;
78004
78050
  if (item.Status!=OVERLAY_STATUS_ID.STATUS_NONE_ID) continue;
78005
78051
  var symbol=item.Symbol;
78006
78052
  if (!symbol) continue;
@@ -78061,7 +78107,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
78061
78107
  for(var j=0; j<this.OverlayChartPaint.length; ++j)
78062
78108
  {
78063
78109
  var item=this.OverlayChartPaint[j];
78064
- if (!item.MainData || !(item.MainYClose>0) ) continue;
78110
+ if (!item.MainData) continue;
78065
78111
  if (overlayData.symbol==item.Symbol)
78066
78112
  {
78067
78113
  this.RecvOverlayMinuteData(overlayData, item, { Redraw:false });
@@ -78222,6 +78268,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
78222
78268
  {
78223
78269
  var empytData=new ChartData();
78224
78270
  empytData.Date=item.Date;
78271
+ empytData.Data.length=item.Data.length;
78225
78272
  overlayDayData.push(empytData);
78226
78273
  }
78227
78274
  }
@@ -78455,11 +78502,10 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
78455
78502
  this.ExtendChartPaint[0].Name=this.Name;
78456
78503
  }
78457
78504
 
78458
- for(var i in this.OverlayChartPaint)
78505
+ for(var i=0; i<this.OverlayChartPaint.length; ++i)
78459
78506
  {
78460
78507
  var item=this.OverlayChartPaint[i];
78461
- item.MainData=this.ChartPaint[0].Data; //叠加股票
78462
- item.MainYClose=yClose;
78508
+ item.MainData=minuteData; //绑定主图数据
78463
78509
  }
78464
78510
  }
78465
78511
 
@@ -102245,6 +102291,36 @@ function JSDraw(errorHandler,symbolData)
102245
102291
  return result;
102246
102292
  }
102247
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
+
102248
102324
  /*
102249
102325
  DRAWCOLORKLINE 绘制K线
102250
102326
  用法:
@@ -103752,7 +103828,7 @@ JSDraw.prototype.IsDrawFunction=function(name)
103752
103828
  {
103753
103829
  let setFunctionName=new Set(
103754
103830
  [
103755
- "STICKLINE","DRAWTEXT",'SUPERDRAWTEXT','DRAWLINE','DRAWBAND','DRAWKLINE',"DRAWKLINE1",'DRAWKLINE_IF',"DRAWCOLORKLINE",'PLOYLINE',
103831
+ "STICKLINE","DRAWTEXT",'SUPERDRAWTEXT','DRAWLINE','DRAWBAND','DRAWKLINE',"DRAWKLINE1",'DRAWKLINE_IF',"DRAWCOLORKLINE",'PLOYLINE',"DRAWOVERLAYKLINE",
103756
103832
  'POLYLINE','DRAWNUMBER',"DRAWNUMBER_FIX",'DRAWICON','DRAWCHANNEL','PARTLINE','DRAWTEXT_FIX','DRAWGBK','DRAWTEXT_LINE','DRAWRECTREL',"DRAWTEXTABS","DRAWTEXTREL",
103757
103833
  'DRAWOVERLAYLINE',"FILLRGN", "FILLRGN2","FILLTOPRGN", "FILLBOTTOMRGN", "FILLVERTICALRGN","FLOATRGN","DRAWSL", "DRAWGBK2","DRAWGBK_DIV",
103758
103834
  "VERTLINE","HORLINE","TIPICON"
@@ -110036,6 +110112,10 @@ function JSExecute(ast,option)
110036
110112
  node.Draw=this.Draw.DRAWKLINE_IF(args[0],args[1],args[2],args[3],args[4]);
110037
110113
  node.Out=[];
110038
110114
  break;
110115
+ case "DRAWOVERLAYKLINE":
110116
+ node.Draw=this.Draw.DRAWOVERLAYKLINE(args[0],args[1],args[2],args[3]);
110117
+ node.Out=[];
110118
+ break;
110039
110119
  case "DRAWCOLORKLINE":
110040
110120
  node.Draw=this.Draw.DRAWCOLORKLINE(args[0],args[1],args[2]);
110041
110121
  node.Out=[];
@@ -112657,6 +112737,28 @@ function ScriptIndex(name,script,args,option)
112657
112737
  hqChart.ChartPaint.push(chart);
112658
112738
  }
112659
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
+
112660
112762
  this.CreateDrawColorKLine=function(hqChart,windowIndex,varItem,i)
112661
112763
  {
112662
112764
  let chart=new ChartColorKline();
@@ -113497,6 +113599,9 @@ function ScriptIndex(name,script,args,option)
113497
113599
  case "DRAWKLINE1":
113498
113600
  this.CreateKLine(hqChart,windowIndex,item,i);
113499
113601
  break;
113602
+ case "DRAWOVERLAYKLINE":
113603
+ this.CreateOverlayKLine(hqChart,windowIndex,item,i);
113604
+ break;
113500
113605
  case "DRAWCOLORKLINE":
113501
113606
  this.CreateDrawColorKLine(hqChart,windowIndex,item,i);
113502
113607
  break;
@@ -128475,7 +128580,7 @@ function HQChartScriptWorker()
128475
128580
 
128476
128581
 
128477
128582
 
128478
- var HQCHART_VERSION="1.1.12504";
128583
+ var HQCHART_VERSION="1.1.12512";
128479
128584
 
128480
128585
  function PrintHQChartVersion()
128481
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
  {