hqchart 1.1.14617 → 1.1.14626

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.
@@ -57527,6 +57527,8 @@ HQData.Report_APIIndex=function(data, callback)
57527
57527
  HQData.APIIndex_DRAWKLINE(data, callback);
57528
57528
  else if (request.Data.indexname=="API_TITLE")
57529
57529
  HQData.APIIndex_TITLE(data, callback);
57530
+ else if (request.Data.indexname=="API_SCATTER_PLOT_V2")
57531
+ HQData.APIIndex_SCATTER_PLOT_V2(data, callback);
57530
57532
  }
57531
57533
 
57532
57534
 
@@ -58527,6 +58529,67 @@ HQData.APIIndex_TITLE=function(data, callback)
58527
58529
  callback(apiData);
58528
58530
  }
58529
58531
 
58532
+ HQData.APIIndex_SCATTER_PLOT_V2=function(data, callback)
58533
+ {
58534
+ data.PreventDefault=true;
58535
+ var hqchart=data.HQChart;
58536
+ var kData=hqchart.GetKData();
58537
+
58538
+ var pointData=
58539
+ {
58540
+ name:"SCATTER_PLOT_V2", type:1,
58541
+ Draw:
58542
+ {
58543
+ Name:"SCATTER_PLOT_V2",
58544
+ DrawType:"SCATTER_PLOT_V2",
58545
+ DrawData:[],
58546
+ Config:{ Color:"rgb(100,100,0)", Radius:5 },
58547
+ },
58548
+ };
58549
+
58550
+ for(var i=0;i<kData.Data.length;++i)
58551
+ {
58552
+ var kItem=kData.Data[i];
58553
+
58554
+ var item={ Date:kItem.Date, Time:kItem.Time, Value:kItem.High, Color:"rgb(0,0,0)", IsEmpty:true };
58555
+ if (kItem.Close>kItem.Open)
58556
+ {
58557
+ item.ColorBorder="rgb(0,250,0)";
58558
+ item.Text={ Text:`${kItem.High.toFixed(2)}`, Color:"rgb(250,250,250)", BaseLine:1, YOffset:8, Align:2, BG:{ Color:"rgb(255,140,0)", MarginLeft:5, MarginRight:5, YOffset:5, MarginTop:8, MarginBottom:1 }};
58559
+ }
58560
+ else
58561
+ {
58562
+ item.ColorBorder="rgb(250,0,0)";
58563
+ item.Text=
58564
+ {
58565
+ Text:`${kItem.High.toFixed(2)}`, Color:"rgb(178,34,34)", BaseLine:2, YOffset:10, Align:2,
58566
+ //BG:{ Color:"rgb(255,255,0)" }
58567
+ };
58568
+ }
58569
+
58570
+
58571
+ item.Tooltip=
58572
+ [
58573
+ {Title:"日期", Text:`${kItem.Date}`},
58574
+ {Title:"最高", Text:`${kItem.High.toFixed(2)}`, TextColor:"rgb(250,0,0)"},
58575
+ {Title:"最低", Text:`${kItem.Low.toFixed(2)}`,TextColor:"rgb(0,255,0)" },
58576
+ ]
58577
+ pointData.Draw.DrawData.push(item);
58578
+ }
58579
+
58580
+ var apiData=
58581
+ {
58582
+ code:0,
58583
+ stock:{ name:hqchart.Name, symbol:hqchart.Symbol },
58584
+ outdata: { date:kData.GetDate(), time:kData.GetTime(), outvar:[ pointData] },
58585
+
58586
+ //error: { message:"无权限查看指标“测试指标1”" }
58587
+ };
58588
+
58589
+ console.log('[HQData.APIIndex_SCATTER_PLOT_V2] apiData ', apiData);
58590
+ callback(apiData);
58591
+ }
58592
+
58530
58593
 
58531
58594
  HQData.RequestVolumeProfileData=function(data, callback)
58532
58595
  {
@@ -13593,9 +13593,7 @@ function JSSymbolData(ast,option,jsExecute)
13593
13593
  return result.GetAmount();
13594
13594
  case 'V':
13595
13595
  case "VOL":
13596
- if (MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol))
13597
- return result.GetVol(100);
13598
- return result.GetVol();
13596
+ return result.GetVol(MARKET_SUFFIX_NAME.GetVolUnit(upperSymbol));
13599
13597
  case "VOLINSTK":
13600
13598
  return result.GetPosition();
13601
13599
  default:
@@ -20256,7 +20254,9 @@ var SCRIPT_CHART_NAME=
20256
20254
  {
20257
20255
  OVERLAY_BARS:"OVERLAY_BARS", //叠加柱子图
20258
20256
  KLINE_TABLE:"KLINE_TABLE",
20259
- SCATTER_PLOT:"SCATTER_PLOT", //散点图
20257
+ SCATTER_PLOT:"SCATTER_PLOT", //散点图
20258
+ SCATTER_PLOT_V2:"SCATTER_PLOT_V2", //散点图V2
20259
+
20260
20260
 
20261
20261
  CLIP_COLOR_STICK:"CLIP_COLOR_STICK", //上下柱子 裁剪
20262
20262
 
@@ -22263,6 +22263,34 @@ function ScriptIndex(name,script,args,option)
22263
22263
  hqChart.ChartPaint.push(chart);
22264
22264
  }
22265
22265
 
22266
+ this.CreateScatterPlotV2=function(hqChart,windowIndex,varItem,i)
22267
+ {
22268
+ var chart=new ChartScatterPlotV2();
22269
+ chart.Canvas=hqChart.Canvas;
22270
+ chart.Name=varItem.Name;
22271
+ chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;
22272
+ chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;
22273
+ chart.HQChart=hqChart;
22274
+ chart.Identify=this.Guid;
22275
+
22276
+ chart.Data=hqChart.GetKData(); //绑定K线
22277
+ chart.AryPoint=varItem.Draw.DrawData;
22278
+
22279
+ var config=varItem.Draw.Config;
22280
+ if (config)
22281
+ {
22282
+ if (config.Color) chart.Color=config.Color;
22283
+ if (IFrameSplitOperator.IsNumber(config.Radius)) chart.Radius=config.Radius;
22284
+ if (config.TextColor) chart.TextColor=config.TextColor;
22285
+ if (config.Font) chart.Font=config.Font;
22286
+ }
22287
+
22288
+ chart.BuildCacheData();
22289
+
22290
+ hqChart.ChartPaint.push(chart);
22291
+ }
22292
+
22293
+
22266
22294
  this.CreateClipColorStick=function(hqChart,windowIndex,varItem,id)
22267
22295
  {
22268
22296
  var chart=new ChartClipColorStick();
@@ -22625,6 +22653,9 @@ function ScriptIndex(name,script,args,option)
22625
22653
  case SCRIPT_CHART_NAME.SCATTER_PLOT:
22626
22654
  this.CreateScatterPlot(hqChart,windowIndex,item,i);
22627
22655
  break;
22656
+ case SCRIPT_CHART_NAME.SCATTER_PLOT_V2:
22657
+ this.CreateScatterPlotV2(hqChart,windowIndex,item,i);
22658
+ break;
22628
22659
  case SCRIPT_CHART_NAME.CLIP_COLOR_STICK:
22629
22660
  this.CreateClipColorStick(hqChart,windowIndex,item,i);
22630
22661
  break;
@@ -25186,6 +25217,16 @@ function APIScriptIndex(name,script,args,option, isOverlay)
25186
25217
 
25187
25218
  result.push(outVarItem);
25188
25219
  }
25220
+ else if (draw.DrawType==SCRIPT_CHART_NAME.SCATTER_PLOT_V2)
25221
+ {
25222
+ drawItem.Name=draw.Name;
25223
+ drawItem.Type=draw.Type;
25224
+ drawItem.DrawType=draw.DrawType;
25225
+ drawItem.DrawData=draw.DrawData;
25226
+ drawItem.Config=draw.Config;
25227
+ outVarItem.Draw=drawItem;
25228
+ result.push(outVarItem);
25229
+ }
25189
25230
  else if (draw.DrawType==SCRIPT_CHART_NAME.KLINE_TABLE)
25190
25231
  {
25191
25232
  drawItem.Name=draw.Name;
@@ -11515,6 +11515,14 @@ function ToFixed(number, precision)
11515
11515
  return s;
11516
11516
  }
11517
11517
 
11518
+ function IsRectOverlap(rt, rt2)
11519
+ {
11520
+ if (Math.max(rt.Left,rt2.Left)<Math.min(rt.Right,rt2.Right) && Math.max(rt.Top,rt2.Top)<Math.min(rt.Bottom, rt2.Bottom))
11521
+ return true;
11522
+
11523
+ return false;
11524
+ }
11525
+
11518
11526
  Number.prototype.toFixed2=Number.prototype.toFixed; //备份下老的
11519
11527
  Number.prototype.toFixed = function( precision )
11520
11528
  {
@@ -34808,6 +34816,326 @@ function ChartScatterPlot()
34808
34816
 
34809
34817
  }
34810
34818
 
34819
+ //散点图
34820
+ function ChartScatterPlotV2()
34821
+ {
34822
+ this.newMethod=IChartPainting; //派生
34823
+ this.newMethod();
34824
+ delete this.newMethod;
34825
+
34826
+ this.ClassName='ChartScatterPlotV2'; //类名
34827
+
34828
+ //默认点配置
34829
+ this.Color=g_JSChartResource.ChartScatterPlotV2.Color; //点颜色
34830
+ this.TextColor=g_JSChartResource.ChartScatterPlotV2.TextColor;
34831
+ this.Radius=g_JSChartResource.ChartScatterPlotV2.Radius;
34832
+ this.Font=g_JSChartResource.ChartScatterPlotV2.Font; //半径
34833
+
34834
+ this.TooltipData=[];
34835
+ this.MapCache=null; //key=date/date-time value={ Data:[] }
34836
+ this.AryPoint=[ ]; //[{ Value:, Radius:半径(可选), Color:颜色(可选),ColorBorder:边框颜色(可选),
34837
+ // Text:{ Text:显示文字, Color:"rgb(0,30,100)", BaseLine:1, YOffset:5, Align:2 }; }]
34838
+ // BaseLine: 0=圆点上面 1=圆点下面 Align: 2=居中 1=左 3=右
34839
+
34840
+ this.GetKValue=ChartData.GetKValue;
34841
+ this.TextHeight=10;
34842
+ this.AryDrawRect=[];
34843
+
34844
+ this.ReloadResource=function(resource)
34845
+ {
34846
+ this.Color=g_JSChartResource.ChartScatterPlotV2.Color; //点颜色
34847
+ this.TextColor=g_JSChartResource.ChartScatterPlotV2.TextColor;
34848
+ this.Radius=g_JSChartResource.ChartScatterPlotV2.Radius;
34849
+ this.Font=g_JSChartResource.ChartScatterPlotV2.Font;
34850
+ }
34851
+
34852
+ this.BuildCacheData=function()
34853
+ {
34854
+ var mapData=new Map();
34855
+ this.MapCache=mapData;
34856
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.AryPoint)) return;
34857
+
34858
+ for(var i=0;i<this.AryPoint.length;++i)
34859
+ {
34860
+ var item=this.AryPoint[i];
34861
+ var key=this.BuildKey(item);
34862
+ if (mapData.has(key))
34863
+ {
34864
+ var mapItem=mapData.get(key);
34865
+ mapItem.Data.push(item);
34866
+ }
34867
+ else
34868
+ {
34869
+ mapData.set(key,{ Data:[item] });
34870
+ }
34871
+ }
34872
+ }
34873
+
34874
+ this.Draw=function()
34875
+ {
34876
+ this.TooltipData=[];
34877
+ this.AryDrawRect=[];
34878
+ if (!this.IsShow || this.ChartFrame.IsMinSize || !this.IsVisible) return;
34879
+ if (this.IsShowIndexTitleOnly()) return;
34880
+ if (this.IsHideScriptIndex()) return;
34881
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.AryPoint)) return;
34882
+ if (!this.MapCache || this.MapCache.size<=0) return;
34883
+ if(!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return;
34884
+
34885
+ this.DrawScatterPlot();
34886
+ this.AryDrawRect=[];
34887
+ }
34888
+
34889
+ this.DrawScatterPlot=function()
34890
+ {
34891
+ var bHScreen=(this.ChartFrame.IsHScreen===true);
34892
+ var isMinute=this.IsMinuteFrame();
34893
+ var dataWidth=this.ChartFrame.DataWidth;
34894
+ var distanceWidth=this.ChartFrame.DistanceWidth;
34895
+ var xPointCount=this.ChartFrame.XPointCount;
34896
+
34897
+ if (bHScreen)
34898
+ {
34899
+ var border=this.ChartBorder.GetHScreenBorder();
34900
+ var chartright=border.BottomEx;
34901
+ var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
34902
+ }
34903
+ else
34904
+ {
34905
+ var border=this.ChartBorder.GetBorder();
34906
+ var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
34907
+ var chartright=border.RightEx;
34908
+ }
34909
+
34910
+ var lockRect=this.GetLockRect();
34911
+ if (lockRect)
34912
+ {
34913
+ if (bHScreen) chartright=lockRect.Top;
34914
+ else chartright=lockRect.Left;
34915
+ }
34916
+
34917
+ this.Canvas.save();
34918
+ this.ClipClient(bHScreen);
34919
+
34920
+ this.Canvas.font=this.Font;
34921
+ this.Canvas.textAlign = "left";
34922
+ this.Canvas.textBaseline = "bottom";
34923
+ this.TextHeight=this.GetFontHeight();
34924
+ for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth))
34925
+ {
34926
+ var kItem=this.Data.Data[i];
34927
+ if (!kItem) continue;
34928
+
34929
+ var key=this.BuildKey(kItem);
34930
+ if (!this.MapCache.has(key)) continue;
34931
+ var mapItem=this.MapCache.get(key);
34932
+ if (!IFrameSplitOperator.IsNonEmptyArray(mapItem.Data)) continue;
34933
+
34934
+ if (isMinute)
34935
+ {
34936
+ var x=this.ChartFrame.GetXFromIndex(j);
34937
+ }
34938
+ else
34939
+ {
34940
+ var left=xOffset;
34941
+ var right=xOffset+dataWidth;
34942
+ if (right>chartright) break;
34943
+ var x=left+(right-left)/2;
34944
+ }
34945
+
34946
+ if (x>chartright) break;
34947
+
34948
+ for(var k=0;k<mapItem.Data.length;++k)
34949
+ {
34950
+ var item=mapItem.Data[k];
34951
+ this.DrawItem(kItem, item, x);
34952
+ }
34953
+ }
34954
+
34955
+ this.Canvas.restore();
34956
+ }
34957
+
34958
+ this.DrawItem=function(kItem, item, x)
34959
+ {
34960
+ var dataWidth=this.ChartFrame.DataWidth;
34961
+ var maxRadius=dataWidth/2;
34962
+ if (!item) return;
34963
+ var price=item.Value;
34964
+ if (IFrameSplitOperator.IsString(item.Value)) price=this.GetKValue(kItem,item.Value);
34965
+ if (!IFrameSplitOperator.IsNumber(price)) return;
34966
+
34967
+ var y=this.GetYFromData(price,false);
34968
+
34969
+ var radius=this.Radius;
34970
+ if (item.Radius) radius=item.Radius;
34971
+ if (!IFrameSplitOperator.IsNumber(radius)) return;
34972
+ if (radius>maxRadius) radius=maxRadius;
34973
+
34974
+ this.Canvas.beginPath();
34975
+ this.Canvas.arc(x, y, radius, 0, 2 * Math.PI);
34976
+
34977
+ var color=this.Color;
34978
+ if (item.Color) color=item.Color;
34979
+ if (color)
34980
+ {
34981
+ this.Canvas.fillStyle=color;
34982
+ this.Canvas.fill();
34983
+ }
34984
+
34985
+ if (item.ColorBorder)
34986
+ {
34987
+ this.Canvas.strokeStyle=item.ColorBorder;
34988
+ this.Canvas.stroke()
34989
+ }
34990
+
34991
+ if (dataWidth>this.TextHeight)
34992
+ {
34993
+ this.DrawText(item.Text,x,y,radius);
34994
+ }
34995
+
34996
+ var itemTooltip={ X:x, Y:y, Radius:radius, Data:item };
34997
+ this.TooltipData.push(itemTooltip);
34998
+ }
34999
+
35000
+ this.DrawText=function(item, x, y, radius)
35001
+ {
35002
+ if (!item || !item.Text) return;
35003
+
35004
+ var bHScreen=(this.ChartFrame.IsHScreen===true);
35005
+ if (bHScreen) return;
35006
+
35007
+ var text=item.Text;
35008
+ var textWidth=this.Canvas.measureText(text).width;
35009
+
35010
+ var baseLine=1; //1=上 2=下
35011
+ var align=2;
35012
+ var yOffset=2;
35013
+ var xText=x;
35014
+ if (IFrameSplitOperator.IsNumber(item.YOffset)) yOffset=item.YOffset; //Y偏移
35015
+ if (IFrameSplitOperator.IsNumber(item.BaseLine)) baseLine=item.BaseLine;
35016
+ var yText=y-radius-yOffset;
35017
+ if (baseLine==2) yText=y+radius+this.TextHeight+yOffset; //下
35018
+
35019
+ if (IFrameSplitOperator.IsNumber(item.Align)) align=item.Align; //左中右
35020
+ if (align==1) xText=x-textWidth;
35021
+ else if (align==2) xText=x-textWidth/2;
35022
+
35023
+ var rtText=null;
35024
+ if (item.BG && item.BG.Color)
35025
+ {
35026
+ var bgItem=item.BG;
35027
+ var marginLeft=2, marginRight=2, yBGOffset=1, marginBottom=0, marginTop=0;
35028
+ if (IFrameSplitOperator.IsNumber(bgItem.MarginLeft)) marginLeft=bgItem.MarginLeft;
35029
+ if (IFrameSplitOperator.IsNumber(bgItem.MarginRight)) marginRight=bgItem.MarginRight;
35030
+ if (IFrameSplitOperator.IsNumber(bgItem.MarginBottom)) marginBottom=bgItem.MarginBottom;
35031
+ if (IFrameSplitOperator.IsNumber(bgItem.MarginTop)) marginTop=bgItem.MarginTop;
35032
+ if (IFrameSplitOperator.IsNumber(bgItem.YOffset)) yBGOffset=bgItem.YOffset;
35033
+
35034
+ var rtBG={ Left:xText-marginLeft, Bottom:yText+yBGOffset+marginBottom, Width:textWidth+marginLeft+marginRight, Height:this.TextHeight+marginBottom+marginTop };
35035
+ rtBG.Right=rtBG.Left+rtBG.Width;
35036
+ rtBG.Top=rtBG.Bottom-rtBG.Height;
35037
+
35038
+ if (this.IsTextOverlap(rtBG)) return;
35039
+
35040
+ this.Canvas.fillStyle=bgItem.Color;
35041
+ this.Canvas.fillRect(rtBG.Left,rtBG.Top,rtBG.Width,rtBG.Height);
35042
+
35043
+ rtText=rtBG;
35044
+ }
35045
+ else
35046
+ {
35047
+ rtText={ Left:xText, Bottom:yText, Width:textWidth, Height:this.TextHeight };
35048
+ rtText.Right=rtText.Left+rtText.Width;
35049
+ rtText.Top=rtText.Bottom-rtText.Height;
35050
+
35051
+ if (this.IsTextOverlap(rtText)) return;
35052
+ }
35053
+
35054
+ if (item.Color) this.Canvas.fillStyle=item.Color;
35055
+ else this.Canvas.fillStyle=this.TextColor;
35056
+ this.Canvas.fillText(text, xText, yText);
35057
+
35058
+ this.AryDrawRect.push(rtText);
35059
+ }
35060
+
35061
+ this.IsTextOverlap=function(rtText)
35062
+ {
35063
+ for(var i=0; i<this.AryDrawRect.length; ++i)
35064
+ {
35065
+ var item=this.AryDrawRect[i];
35066
+ if (IsRectOverlap(rtText,item)) return true;
35067
+ }
35068
+
35069
+ return false;
35070
+ }
35071
+
35072
+ this.GetMaxMin=function()
35073
+ {
35074
+ var range={Min:null, Max:null };
35075
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.AryPoint)) return range;
35076
+ if (!this.MapCache || this.MapCache.size<=0) return range;
35077
+ if(!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return range;
35078
+
35079
+ var xPointCount=this.ChartFrame.XPointCount;
35080
+ var start=this.Data.DataOffset;
35081
+ if (this.ChartFrame.GlobalOption && this.ChartFrame.GlobalOption.IsValueFullRange)
35082
+ {
35083
+ start=0;
35084
+ xPointCount=this.Data.Data.length;
35085
+ }
35086
+
35087
+ for(var i=start,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j)
35088
+ {
35089
+ var kItem=this.Data.Data[i];
35090
+ if (!kItem) continue;
35091
+
35092
+ var key=this.BuildKey(kItem);
35093
+ if (!this.MapCache.has(key)) continue;
35094
+ var mapItem=this.MapCache.get(key);
35095
+ if (!IFrameSplitOperator.IsNonEmptyArray(mapItem.Data)) continue;
35096
+
35097
+ for(k=0;k<mapItem.Data.length;++k)
35098
+ {
35099
+ var item=mapItem.Data[k];
35100
+ var value=item.Value;
35101
+ if (IFrameSplitOperator.IsString(item.Value)) value=this.GetKValue(kItem,item.Value);
35102
+ if (!IFrameSplitOperator.IsNumber(value)) continue;
35103
+
35104
+ if (range.Max==null) range.Max=value;
35105
+ else if (range.Max<value) range.Max=value;
35106
+ if (range.Min==null) range.Min=value;
35107
+ else if (range.Min>value) range.Min=value;
35108
+ }
35109
+ }
35110
+
35111
+ return range;
35112
+ }
35113
+
35114
+ this.GetTooltipData=function(x,y,tooltip)
35115
+ {
35116
+ if (!this.IsShow) return false;
35117
+
35118
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.TooltipData)) return false;
35119
+
35120
+ for(var i=this.TooltipData.length-1; i>=0; --i)
35121
+ {
35122
+ var item=this.TooltipData[i];
35123
+
35124
+ this.Canvas.beginPath();
35125
+ this.Canvas.arc(item.X, item.Y, item.Radius, 0, 2 * Math.PI);
35126
+ if (this.Canvas.isPointInPath(x,y))
35127
+ {
35128
+ JSConsole.Chart.Log('[ChartScatterPlotV2::GetTooltipData] point', item);
35129
+ tooltip.Data=item;
35130
+ tooltip.ChartPaint=this;
35131
+ tooltip.Type=6; //散点图
35132
+ return true;
35133
+ }
35134
+ }
35135
+ }
35136
+
35137
+ }
35138
+
34811
35139
  //子线段
34812
35140
  function ChartSubLine()
34813
35141
  {
@@ -73548,6 +73876,14 @@ function JSChartResource()
73548
73876
  DiffValueBGColor:"rgb(251,140,1)"
73549
73877
  }
73550
73878
 
73879
+ this.ChartScatterPlotV2=
73880
+ {
73881
+ Color:"rgb(0,0,255)",
73882
+ TextColor:"rgb(0,0,0)",
73883
+ Radius:3,
73884
+ Font:`${10*GetDevicePixelRatio()}px 微软雅黑`
73885
+ }
73886
+
73551
73887
  //筹码分布图
73552
73888
  this.StockChip=
73553
73889
  {
@@ -74948,6 +75284,7 @@ function JSChartResource()
74948
75284
  if (style.KLineToolbar) this.SetKLineToolbar(style.KLineToolbar);
74949
75285
 
74950
75286
  if (style.IndexLock) this.SetIndexLock(style.IndexLock);
75287
+ if (style.ChartScatterPlotV2) this.SetChartScatterPlotV2(style.ChartScatterPlotV2);
74951
75288
  }
74952
75289
 
74953
75290
 
@@ -75646,6 +75983,17 @@ function JSChartResource()
75646
75983
  if (item.Title) dest.Title=item.Title;
75647
75984
  }
75648
75985
 
75986
+ this.SetChartScatterPlotV2=function(style)
75987
+ {
75988
+ var item=style;
75989
+ var dest=this.ChartScatterPlotV2;
75990
+
75991
+ if (item.Color) dest.Color=item.Color;
75992
+ if (item.TextColor) dest.TextColor=item.TextColor;
75993
+ if (item.Font) dest.Font=item.Font;
75994
+ if (IFrameSplitOperator.IsNumber(item.Radius)) dest.Radius=item.Radius
75995
+ }
75996
+
75649
75997
  }
75650
75998
 
75651
75999
  var g_JSChartResource=new JSChartResource();
@@ -96101,6 +96449,22 @@ var MARKET_SUFFIX_NAME=
96101
96449
  return this.IsSZ(upperSymbol)|| this.IsSH(upperSymbol) || this.IsSHSZCustomIndex(upperSymbol);
96102
96450
  },
96103
96451
 
96452
+ IsSHSZETFOption:function(upperSymbol) //沪深ETF期权
96453
+ {
96454
+ if (!upperSymbol) return false;
96455
+
96456
+ if (this.IsSH(upperSymbol))
96457
+ {
96458
+ if (upperSymbol.charAt(0)=="1" && upperSymbol.length==8) return true;
96459
+ }
96460
+ else if (this.IsSZ(upperSymbol))
96461
+ {
96462
+ if (upperSymbol.charAt(0)=="9" && upperSymbol.length==8) return true;
96463
+ }
96464
+
96465
+ return false;
96466
+ },
96467
+
96104
96468
  IsSHSZFund:function(upperSymbol) //是否是交易所基金
96105
96469
  {
96106
96470
  if (!upperSymbol) return false;
@@ -96530,6 +96894,7 @@ var MARKET_SUFFIX_NAME=
96530
96894
  GetVolUnit:function(upperSymbol)
96531
96895
  {
96532
96896
  if (!upperSymbol) return 1;
96897
+ if (MARKET_SUFFIX_NAME.IsSHSZETFOption(upperSymbol)) return 1; //沪深ETF期权
96533
96898
  if (MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol)) return 100; //单位手=100股
96534
96899
  if (MARKET_SUFFIX_NAME.IsBJ(upperSymbol)) return 100; //单位手=100股
96535
96900
 
@@ -192,6 +192,14 @@ function JSReportChart(divElement)
192
192
  if (IFrameSplitOperator.IsBool(option.EnableDragHeader)) chart.EnableDragHeader=option.EnableDragHeader;
193
193
  if (IFrameSplitOperator.IsNumber(option.WheelPageType)) chart.WheelPageType=option.WheelPageType;
194
194
  if (IFrameSplitOperator.IsBool(option.PageUpDownCycle)) chart.PageUpDownCycle=option.PageUpDownCycle;
195
+
196
+ //数据下载提示信息
197
+ if (IFrameSplitOperator.IsObject(option.SplashTitle))
198
+ {
199
+ var item=option.SplashTitle;
200
+ if (item) chart.SplashTitle.StockList=item.StockList;
201
+ if (item) chart.SplashTitle.MemberList=item.MemberList;
202
+ }
195
203
 
196
204
 
197
205
  if (option.VScrollbar) chart.SetVScrollbar(option.VScrollbar);
@@ -2013,6 +2013,8 @@ HQData.Report_APIIndex=function(data, callback)
2013
2013
  HQData.APIIndex_DRAWKLINE(data, callback);
2014
2014
  else if (request.Data.indexname=="API_TITLE")
2015
2015
  HQData.APIIndex_TITLE(data, callback);
2016
+ else if (request.Data.indexname=="API_SCATTER_PLOT_V2")
2017
+ HQData.APIIndex_SCATTER_PLOT_V2(data, callback);
2016
2018
  }
2017
2019
 
2018
2020
 
@@ -3013,6 +3015,67 @@ HQData.APIIndex_TITLE=function(data, callback)
3013
3015
  callback(apiData);
3014
3016
  }
3015
3017
 
3018
+ HQData.APIIndex_SCATTER_PLOT_V2=function(data, callback)
3019
+ {
3020
+ data.PreventDefault=true;
3021
+ var hqchart=data.HQChart;
3022
+ var kData=hqchart.GetKData();
3023
+
3024
+ var pointData=
3025
+ {
3026
+ name:"SCATTER_PLOT_V2", type:1,
3027
+ Draw:
3028
+ {
3029
+ Name:"SCATTER_PLOT_V2",
3030
+ DrawType:"SCATTER_PLOT_V2",
3031
+ DrawData:[],
3032
+ Config:{ Color:"rgb(100,100,0)", Radius:5 },
3033
+ },
3034
+ };
3035
+
3036
+ for(var i=0;i<kData.Data.length;++i)
3037
+ {
3038
+ var kItem=kData.Data[i];
3039
+
3040
+ var item={ Date:kItem.Date, Time:kItem.Time, Value:kItem.High, Color:"rgb(0,0,0)", IsEmpty:true };
3041
+ if (kItem.Close>kItem.Open)
3042
+ {
3043
+ item.ColorBorder="rgb(0,250,0)";
3044
+ item.Text={ Text:`${kItem.High.toFixed(2)}`, Color:"rgb(250,250,250)", BaseLine:1, YOffset:8, Align:2, BG:{ Color:"rgb(255,140,0)", MarginLeft:5, MarginRight:5, YOffset:5, MarginTop:8, MarginBottom:1 }};
3045
+ }
3046
+ else
3047
+ {
3048
+ item.ColorBorder="rgb(250,0,0)";
3049
+ item.Text=
3050
+ {
3051
+ Text:`${kItem.High.toFixed(2)}`, Color:"rgb(178,34,34)", BaseLine:2, YOffset:10, Align:2,
3052
+ //BG:{ Color:"rgb(255,255,0)" }
3053
+ };
3054
+ }
3055
+
3056
+
3057
+ item.Tooltip=
3058
+ [
3059
+ {Title:"日期", Text:`${kItem.Date}`},
3060
+ {Title:"最高", Text:`${kItem.High.toFixed(2)}`, TextColor:"rgb(250,0,0)"},
3061
+ {Title:"最低", Text:`${kItem.Low.toFixed(2)}`,TextColor:"rgb(0,255,0)" },
3062
+ ]
3063
+ pointData.Draw.DrawData.push(item);
3064
+ }
3065
+
3066
+ var apiData=
3067
+ {
3068
+ code:0,
3069
+ stock:{ name:hqchart.Name, symbol:hqchart.Symbol },
3070
+ outdata: { date:kData.GetDate(), time:kData.GetTime(), outvar:[ pointData] },
3071
+
3072
+ //error: { message:"无权限查看指标“测试指标1”" }
3073
+ };
3074
+
3075
+ console.log('[HQData.APIIndex_SCATTER_PLOT_V2] apiData ', apiData);
3076
+ callback(apiData);
3077
+ }
3078
+
3016
3079
 
3017
3080
  HQData.RequestVolumeProfileData=function(data, callback)
3018
3081
  {