hqchart 1.1.15364 → 1.1.15375

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.
@@ -4423,6 +4423,49 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4423
4423
  if (IFrameSplitOperator.IsNumber(item.Count)) klineChart.PriceGap.Count=item.Count;
4424
4424
  }
4425
4425
 
4426
+ //设置十字光标
4427
+ this.SetCorssCursorConfig=function(chart, option)
4428
+ {
4429
+ if (!option || !option.CorssCursorInfo) return;
4430
+
4431
+ var item=option.CorssCursorInfo;
4432
+ if (IFrameSplitOperator.IsNumber(item.Left)) chart.ChartCorssCursor.ShowTextMode.Left=item.Left;
4433
+ if (IFrameSplitOperator.IsNumber(item.Right)) chart.ChartCorssCursor.ShowTextMode.Right=item.Right;
4434
+ if (IFrameSplitOperator.IsNumber(item.Bottom)) chart.ChartCorssCursor.ShowTextMode.Bottom=item.Bottom;
4435
+
4436
+ if (IFrameSplitOperator.IsBool(item.IsShowCorss)) chart.ChartCorssCursor.IsShowCorss=item.IsShowCorss;
4437
+
4438
+ if (IFrameSplitOperator.IsNumber(item.HPenType)) chart.ChartCorssCursor.HPenType=item.HPenType;
4439
+ if (IFrameSplitOperator.IsNumber(item.VPenType)) chart.ChartCorssCursor.VPenType=item.VPenType;
4440
+ if (IFrameSplitOperator.IsNumber(item.VLineType)) chart.ChartCorssCursor.VLineType=item.VLineType;
4441
+
4442
+ if (item.RightButton)
4443
+ {
4444
+ if (IFrameSplitOperator.IsBool(item.RightButton.Enable)) chart.ChartCorssCursor.RightButton.Enable=item.RightButton.Enable;
4445
+ }
4446
+
4447
+ if (item.BottomButton)
4448
+ {
4449
+ var subItem=item.BottomButton;
4450
+ if (IFrameSplitOperator.IsBool(subItem.Enable)) chart.ChartCorssCursor.BottomButton.Enable=subItem.Enable;
4451
+ }
4452
+
4453
+ if (IFrameSplitOperator.IsNumber(item.PriceFormatType)) chart.ChartCorssCursor.StringFormatY.PriceFormatType=item.PriceFormatType;
4454
+ if (IFrameSplitOperator.IsNumber(item.DataFormatType)) chart.ChartCorssCursor.StringFormatY.DataFormatType=item.DataFormatType;
4455
+
4456
+ if (IFrameSplitOperator.IsBool(item.EnableKeyboard)) chart.ChartCorssCursor.EnableKeyboard=item.EnableKeyboard;
4457
+ if (IFrameSplitOperator.IsBool(item.EnableDBClick)) chart.ChartCorssCursor.EnableDBClick=item.EnableDBClick;
4458
+
4459
+ if (IFrameSplitOperator.IsBool(item.IsShowCorssPoint)) chart.ChartCorssCursor.CorssPointConfig.Enable=item.IsShowCorssPoint;
4460
+
4461
+ if (item.YDecimals) //Y轴文字小数位数
4462
+ {
4463
+ var subItem=item.YDecimals;
4464
+ if (IFrameSplitOperator.IsNumber(subItem.Value)) chart.ChartCorssCursor.StringFormatY.DecimalsConfig.Value=subItem.Value;
4465
+ if (IFrameSplitOperator.IsNumber(subItem.Type)) chart.ChartCorssCursor.StringFormatY.DecimalsConfig.Type=subItem.Type;
4466
+ }
4467
+ }
4468
+
4426
4469
  //历史K线图
4427
4470
  this.CreateKLineChartContainer=function(option)
4428
4471
  {
@@ -4676,48 +4719,23 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4676
4719
  if (option.IsCorssOnlyDrawKLine===true) chart.ChartCorssCursor.IsOnlyDrawKLine=option.IsCorssOnlyDrawKLine;
4677
4720
  if (option.CorssCursorTouchEnd===true) chart.CorssCursorTouchEnd = option.CorssCursorTouchEnd;
4678
4721
  if (option.IsClickShowCorssCursor==true) chart.IsClickShowCorssCursor=option.IsClickShowCorssCursor;
4679
- if (option.CorssCursorInfo)
4722
+ this.SetCorssCursorConfig(chart, option);
4723
+ if (option.CorssCursorInfo) //十字光标K线上的属性设置
4680
4724
  {
4681
4725
  var item=option.CorssCursorInfo;
4682
- if (!isNaN(option.CorssCursorInfo.Left)) chart.ChartCorssCursor.ShowTextMode.Left=option.CorssCursorInfo.Left;
4683
- if (!isNaN(option.CorssCursorInfo.Right)) chart.ChartCorssCursor.ShowTextMode.Right=option.CorssCursorInfo.Right;
4684
- if (!isNaN(option.CorssCursorInfo.Bottom)) chart.ChartCorssCursor.ShowTextMode.Bottom=option.CorssCursorInfo.Bottom;
4685
- if (option.CorssCursorInfo.IsShowCorss===false) chart.ChartCorssCursor.IsShowCorss=option.CorssCursorInfo.IsShowCorss;
4686
4726
  if (IFrameSplitOperator.IsBool(item.IsShowClose)) chart.ChartCorssCursor.IsShowClose = item.IsShowClose; //Y轴显示收盘价
4687
4727
  if (IFrameSplitOperator.IsBool(item.IsOnlyDrawKLine)) chart.ChartCorssCursor.IsOnlyDrawKLine = item.IsOnlyDrawKLine; //Y轴显示收盘价
4688
4728
  if (option.CorssCursorInfo.PressTime) chart.PressTime=option.CorssCursorInfo.PressTime; //长按显示十字光标的时间
4689
- if (IFrameSplitOperator.IsNumber(option.CorssCursorInfo.HPenType)) chart.ChartCorssCursor.HPenType=option.CorssCursorInfo.HPenType;
4690
- if (option.CorssCursorInfo.VPenType>0) chart.ChartCorssCursor.VPenType=option.CorssCursorInfo.VPenType;
4691
- if (IFrameSplitOperator.IsNumber(item.VLineType)) chart.ChartCorssCursor.VLineType=item.VLineType;
4692
4729
  if (option.CorssCursorInfo.DateFormatType>0) chart.ChartCorssCursor.StringFormatX.DateFormatType=option.CorssCursorInfo.DateFormatType;
4693
4730
  if (IFrameSplitOperator.IsBool(item.IsDrawXRangeBG)) chart.ChartCorssCursor.IsDrawXRangeBG=item.IsDrawXRangeBG;
4694
4731
  if (IFrameSplitOperator.IsBool(option.CorssCursorInfo.IsFixXLastTime)) chart.ChartCorssCursor.IsFixXLastTime=option.CorssCursorInfo.IsFixXLastTime;
4695
4732
  if (IFrameSplitOperator.IsNumber(item.TextHeight)) chart.ChartCorssCursor.TextHeight=item.TextHeight;
4696
-
4697
- if (item.RightButton)
4698
- {
4699
- if (IFrameSplitOperator.IsBool(item.RightButton.Enable)) chart.ChartCorssCursor.RightButton.Enable=item.RightButton.Enable;
4700
- }
4701
-
4702
- if (item.BottomButton)
4703
- {
4704
- var subItem=item.BottomButton;
4705
- if (IFrameSplitOperator.IsBool(subItem.Enable)) chart.ChartCorssCursor.BottomButton.Enable=subItem.Enable;
4706
- }
4707
-
4708
- if (IFrameSplitOperator.IsNumber(item.PriceFormatType)) chart.ChartCorssCursor.StringFormatY.PriceFormatType=item.PriceFormatType;
4709
- if (IFrameSplitOperator.IsNumber(item.DataFormatType)) chart.ChartCorssCursor.StringFormatY.DataFormatType=item.DataFormatType;
4710
- if (IFrameSplitOperator.IsBool(item.EnableKeyboard)) chart.ChartCorssCursor.EnableKeyboard=item.EnableKeyboard;
4711
- if (IFrameSplitOperator.IsBool(item.EnableDBClick)) chart.ChartCorssCursor.EnableDBClick=item.EnableDBClick;
4712
-
4713
- if (IFrameSplitOperator.IsBool(item.IsShowCorssPoint)) chart.ChartCorssCursor.CorssPointConfig.Enable=item.IsShowCorssPoint;
4714
4733
 
4715
4734
  if (item.RangeIncrease)
4716
4735
  {
4717
4736
  var subItem=item.RangeIncrease;
4718
4737
  if (IFrameSplitOperator.IsBool(subItem.IsShow)) chart.ChartCorssCursor.StringFormatX.RangeIncrease.IsShow=subItem.IsShow;
4719
4738
  if (IFrameSplitOperator.IsNumber(subItem.Formula)) chart.ChartCorssCursor.StringFormatX.RangeIncrease.Formula=subItem.Formula;
4720
-
4721
4739
  }
4722
4740
  }
4723
4741
 
@@ -5245,39 +5263,15 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
5245
5263
  if (option.PageInfo) chart.SetPageInfo(option.PageInfo);
5246
5264
 
5247
5265
  chart.Create(windowsCount,option); //创建子窗口
5248
-
5249
- if (option.CorssCursorInfo)
5266
+ this.SetCorssCursorConfig(chart, option);
5267
+ if (option.CorssCursorInfo) //分时图十字光标属性设置
5250
5268
  {
5251
5269
  var item=option.CorssCursorInfo;
5252
- if (!isNaN(option.CorssCursorInfo.Left)) chart.ChartCorssCursor.ShowTextMode.Left=option.CorssCursorInfo.Left;
5253
- if (!isNaN(option.CorssCursorInfo.Right)) chart.ChartCorssCursor.ShowTextMode.Right=option.CorssCursorInfo.Right;
5254
- if (!isNaN(option.CorssCursorInfo.Bottom)) chart.ChartCorssCursor.ShowTextMode.Bottom=option.CorssCursorInfo.Bottom;
5255
- if (option.CorssCursorInfo.IsShowCorss===false) chart.ChartCorssCursor.IsShowCorss=option.CorssCursorInfo.IsShowCorss;
5270
+
5256
5271
  if (option.CorssCursorInfo.RightTextFormat>0) chart.ChartCorssCursor.TextFormat.Right=option.CorssCursorInfo.RightTextFormat;
5257
5272
  if (option.CorssCursorInfo.IsOnlyDrawMinute == true) chart.ChartCorssCursor.IsOnlyDrawMinute = option.CorssCursorInfo.IsOnlyDrawMinute; //Y轴显示收盘价
5258
5273
  if (IFrameSplitOperator.IsBool(option.CorssCursorInfo.IsFixXLastTime)) chart.ChartCorssCursor.IsFixXLastTime=option.CorssCursorInfo.IsFixXLastTime;
5259
5274
 
5260
- if (item.RightButton)
5261
- {
5262
- if (IFrameSplitOperator.IsBool(item.RightButton.Enable)) chart.ChartCorssCursor.RightButton.Enable=item.RightButton.Enable;
5263
- }
5264
-
5265
- if (item.BottomButton)
5266
- {
5267
- var subItem=item.BottomButton;
5268
- if (IFrameSplitOperator.IsBool(subItem.Enable)) chart.ChartCorssCursor.BottomButton.Enable=subItem.Enable;
5269
- }
5270
-
5271
- if (IFrameSplitOperator.IsNumber(item.PriceFormatType)) chart.ChartCorssCursor.StringFormatY.PriceFormatType=item.PriceFormatType;
5272
- if (IFrameSplitOperator.IsNumber(item.DataFormatType)) chart.ChartCorssCursor.StringFormatY.DataFormatType=item.DataFormatType;
5273
-
5274
- if (IFrameSplitOperator.IsNumber(item.HPenType)) chart.ChartCorssCursor.HPenType=item.HPenType;
5275
- if (IFrameSplitOperator.IsNumber(item.VPenType)) chart.ChartCorssCursor.VPenType=item.VPenType;
5276
- if (IFrameSplitOperator.IsBool(item.EnableKeyboard)) chart.ChartCorssCursor.EnableKeyboard=item.EnableKeyboard;
5277
- if (IFrameSplitOperator.IsBool(item.EnableDBClick)) chart.ChartCorssCursor.EnableDBClick=item.EnableDBClick;
5278
- if (IFrameSplitOperator.IsBool(item.IsShowCorssPoint)) chart.ChartCorssCursor.CorssPointConfig.Enable=item.IsShowCorssPoint;
5279
- if (IFrameSplitOperator.IsNumber(item.VLineType)) chart.ChartCorssCursor.VLineType=item.VLineType;
5280
-
5281
5275
  if (item.TextStyle)
5282
5276
  {
5283
5277
  if (item.TextStyle.Right) //右侧输出样式
@@ -7193,6 +7187,7 @@ var JSCHART_DATA_FIELD_ID=
7193
7187
  KLINE_COLOR_DATA:66, //K线自定义颜色数据
7194
7188
  KLINE_DAY_EXTENDDATA:25,
7195
7189
  KLINE_MINUTE_EXTENDDATA:25,
7190
+ KLINE_TICK_EXTENDDATA:25,
7196
7191
 
7197
7192
  //OrderBook Heatmap
7198
7193
  KLINE_HEATMAP:67,
@@ -64936,6 +64931,7 @@ function HQPriceStringFormat()
64936
64931
 
64937
64932
  this.PriceFormatType=0; //主窗口格式 0=默认 1=科学计数
64938
64933
  this.DataFormatType=0; //副图指标格式 0=默认 1=科学计数
64934
+ this.DecimalsConfig={ Value:2, Type:0 }; //小数设置, Value:小数位数 , Type: 0=默认 1=跟指标标题一致
64939
64935
 
64940
64936
  this.GetEventCallback
64941
64937
 
@@ -65034,7 +65030,7 @@ function HQPriceStringFormat()
65034
65030
  if (!this.Value) return false;
65035
65031
 
65036
65032
  this.PercentageText=null;
65037
- var defaultfloatPrecision=2; //价格小数位数
65033
+ var defaultfloatPrecision=this.DecimalsConfig.Value; //价格小数位数
65038
65034
  if (this.FrameID==0) //第1个窗口显示原始价格
65039
65035
  {
65040
65036
  var defaultfloatPrecision=GetfloatPrecision(this.Symbol);
@@ -65083,6 +65079,7 @@ function HQPriceStringFormat()
65083
65079
  }
65084
65080
  else if (this.FrameID==1)
65085
65081
  {
65082
+ defaultfloatPrecision=this.GetIndexTitleFloatPrecision(this.FrameID);
65086
65083
  if (this.DataFormatType==1)
65087
65084
  {
65088
65085
  this.Text=IFrameSplitOperator.FormatValueThousandsString(this.Value,defaultfloatPrecision);
@@ -65115,6 +65112,7 @@ function HQPriceStringFormat()
65115
65112
  }
65116
65113
  else
65117
65114
  {
65115
+ defaultfloatPrecision=this.GetIndexTitleFloatPrecision(this.FrameID);
65118
65116
  if (this.DataFormatType==1) this.Text=IFrameSplitOperator.FormatValueThousandsString(this.Value,defaultfloatPrecision);
65119
65117
  else this.Text=IFrameSplitOperator.FormatValueString(this.Value,defaultfloatPrecision,this.LanguageID);
65120
65118
  if (IFrameSplitOperator.IsNumber(this.RValue)) this.RText=IFrameSplitOperator.FormatValueString(this.RValue,defaultfloatPrecision,this.LanguageID);
@@ -65160,6 +65158,23 @@ function HQPriceStringFormat()
65160
65158
  return true;
65161
65159
  }
65162
65160
 
65161
+ //获取指标标题小数位数
65162
+ this.GetIndexTitleFloatPrecision=function(frameID)
65163
+ {
65164
+ var dec=this.DecimalsConfig.Value;
65165
+ if (this.DecimalsConfig.Type===0) return dec;
65166
+
65167
+ if (frameID<0) return dec;
65168
+ if (!this.HQChart) return dec;
65169
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.HQChart.WindowIndex)) return dec;
65170
+ var item=this.HQChart.WindowIndex[frameID];
65171
+ if (!item) return dec;
65172
+
65173
+ if (IFrameSplitOperator.IsNumber(item.FloatPrecision)) dec=item.FloatPrecision;
65174
+
65175
+ return dec;
65176
+ }
65177
+
65163
65178
  //深度图刻度
65164
65179
  this.GetExtendPaintData=function(floatPrecision)
65165
65180
  {
@@ -90316,14 +90331,26 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
90316
90331
  {
90317
90332
  var self=this;
90318
90333
  var start=0;
90319
- if (this.SourceData && this.SourceData.Data) start=this.SourceData.Data.length;
90334
+ var hisData=this.GetKData();
90335
+ var dateRange=hisData.GetDateRange();
90336
+
90320
90337
  if (this.NetworkFilter)
90321
90338
  {
90339
+ var kLineDrawType=this.GetKLineDrawType();
90322
90340
  var obj=
90323
90341
  {
90324
90342
  Name:'KLineChartContainer::RequestTickRealtimeData', //类名::
90325
90343
  Explain:'当天最新分笔数据',
90326
- Request:{ Url:self.TickApiUrl, Data:{ symbol: self.Symbol, start:start, end:start+1000 }, Type:'POST' },
90344
+ Request:
90345
+ {
90346
+ Url:self.TickApiUrl,
90347
+ Data:
90348
+ {
90349
+ symbol:self.Symbol, period:this.Period, right:this.Right,
90350
+ dateRange:dateRange, klineDrawType:kLineDrawType
90351
+ },
90352
+ Type:'POST'
90353
+ },
90327
90354
  Self:this,
90328
90355
  PreventDefault:false
90329
90356
  };
@@ -90336,29 +90363,14 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
90336
90363
 
90337
90364
  if (obj.PreventDefault==true) return; //已被上层替换,不调用默认的网络请求
90338
90365
  }
90339
-
90340
- JSNetwork.HttpRequest({
90341
- url: self.TickApiUrl,
90342
- data:{"symbol":self.Symbol, start:start-10, end:start+1000 },
90343
- type:"post",
90344
- dataType: "json",
90345
- async:true,
90346
- success: function (data)
90347
- {
90348
- self.ChartSplashPaint.EnableSplash(false);
90349
- self.RecvTickRealtimeData(data);
90350
- self.AutoUpdate();
90351
- }
90352
- });
90353
90366
  }
90354
90367
 
90355
90368
  this.RecvTickRealtimeData=function(data)
90356
90369
  {
90357
- if (data.ver==2.0)
90358
- var aryDayData=KLineChartContainer.JsonDataToTickDataV2(data); //增量数据
90359
- else
90360
- var aryDayData=KLineChartContainer.JsonDataToTickData(data); //增量数据
90361
- if (!aryDayData || aryDayData.length<=0) return;
90370
+ var aryDayData=null;
90371
+ if (data.ver==2.0) aryDayData=KLineChartContainer.JsonDataToTickDataV2(data); //增量数据
90372
+ else aryDayData=KLineChartContainer.JsonDataToTickData(data); //增量数据
90373
+ if (!IFrameSplitOperator.IsNonEmptyArray(aryDayData)) return;
90362
90374
 
90363
90375
  var redraw=false; //强制重绘
90364
90376
  if (data.redraw==true) redraw=true;
@@ -90368,7 +90380,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
90368
90380
  var lastTime=0;
90369
90381
  if (source.length>0) lastTime=source[source.length-1].Time;
90370
90382
  var newCount=0;
90371
- for(var i in aryDayData)
90383
+ for(var i=0; i<aryDayData.length; ++i)
90372
90384
  {
90373
90385
  var item=aryDayData[i];
90374
90386
  if (item.Time<=lastTime) continue;
@@ -95353,20 +95365,24 @@ KLineChartContainer.JsonDataToTickDataV2=function(data)
95353
95365
  {
95354
95366
  var aryDayData=[];
95355
95367
  if (!IFrameSplitOperator.IsNonEmptyArray(data.data)) return aryDayData;
95356
-
95368
+ var extendDataIndex=JSCHART_DATA_FIELD_ID.KLINE_TICK_EXTENDDATA;
95357
95369
  for(var i=0;i<data.data.length;++i)
95358
95370
  {
95359
95371
  var item = new HistoryData();
95360
- var tick=data.data[i]; //[ date, time, yClose, price, extendData]
95372
+ var tick=data.data[i]; //[ date, time, yClose, price, vol, amount, flag,]
95361
95373
  if (!tick) continue;
95362
95374
 
95363
95375
  item.Date = tick[0];
95364
95376
  item.Time=tick[1];
95365
95377
  item.YClose = tick[2];
95366
95378
  item.Low=item.High=item.Close=item.Open = tick[3];
95379
+ item.Vol = tick[4]; //原始单位股
95380
+ item.Amount = tick[5];
95381
+ item.Flag=tick[6];
95382
+
95367
95383
  aryDayData.push(item);
95368
95384
 
95369
- if (tick[4]) item.ExtendData=tick[4];
95385
+ if (tick[extendDataIndex]) item.ExtendData=tick[extendDataIndex];
95370
95386
  }
95371
95387
 
95372
95388
  return aryDayData;
@@ -118437,6 +118453,32 @@ function JSAlgorithm(errorHandler,symbolData)
118437
118453
  return result;
118438
118454
  }
118439
118455
 
118456
+ //VARCAT6(A,B,C,D,E,F):将六个字符串A,B,C,D,E,F相加成一个字符串.
118457
+ //每个数据都进行序列运算,若用于多股选股,建议换用STRCAT6
118458
+ //用法: VARCAT6('多头',VAR2STR(C,2),' ',VAR2STR(O,2),' ',VAR2STR(MA(C,5),2))将六个字符串相加成一个字符串
118459
+ this.VARCAT6=function(data,data2,data3,data4,data5)
118460
+ {
118461
+ var aryData=[];
118462
+ if (Array.isArray(data) || IFrameSplitOperator.IsString(data)) aryData.push(data);
118463
+ if (Array.isArray(data2) || IFrameSplitOperator.IsString(data2)) aryData.push(data2);
118464
+ if (Array.isArray(data3) || IFrameSplitOperator.IsString(data3)) aryData.push(data3);
118465
+ if (Array.isArray(data4) || IFrameSplitOperator.IsString(data4)) aryData.push(data4);
118466
+ if (Array.isArray(data5) || IFrameSplitOperator.IsString(data5)) aryData.push(data5);
118467
+
118468
+ if (!IFrameSplitOperator.IsNonEmptyArray(aryData)) return [];
118469
+ if (aryData.length==1) return data;
118470
+
118471
+ var tempData=this.VARCAT(aryData[0], aryData[1]);
118472
+ var result=tempData;
118473
+ for(var i=2;i<aryData.length;++i)
118474
+ {
118475
+ result=this.VARCAT(tempData,aryData[i]);
118476
+ tempData=result;
118477
+ }
118478
+
118479
+ return result;
118480
+ }
118481
+
118440
118482
  //FINDSTR(A,B):在字符串A中查找字符串B,如果找到返回1,否则返回0.
118441
118483
  //用法: FINDSTR('多头开仓','开仓')在字符串'多头开仓'中查找字符串'开仓',返回1
118442
118484
  this.FINDSTR=function(data, data2)
@@ -118563,6 +118605,8 @@ function JSAlgorithm(errorHandler,symbolData)
118563
118605
  this.VAR2STR=function(data,n)
118564
118606
  {
118565
118607
  var result=[];
118608
+ var dec=0;
118609
+ if (IFrameSplitOperator.IsNumber(n)) dec=n;
118566
118610
  if (Array.isArray(data))
118567
118611
  {
118568
118612
  for(var i=0;i<data.length;++i)
@@ -118570,13 +118614,13 @@ function JSAlgorithm(errorHandler,symbolData)
118570
118614
  result[i]=null;
118571
118615
  var item=data[i];
118572
118616
  if (this.IsNumber(item))
118573
- result[i]=item.toFixed(n);
118617
+ result[i]=item.toFixed(dec);
118574
118618
  }
118575
118619
  }
118576
118620
  else
118577
118621
  {
118578
118622
  if (this.IsNumber(data))
118579
- result=data.toFixed(n);
118623
+ result=data.toFixed(dec);
118580
118624
  }
118581
118625
 
118582
118626
  return result;
@@ -120288,6 +120332,8 @@ function JSAlgorithm(errorHandler,symbolData)
120288
120332
  return this.VAR2STR(args[0], args[1]);
120289
120333
  case "VARCAT":
120290
120334
  return this.VARCAT(args[0], args[1]);
120335
+ case "VARCAT6":
120336
+ return this.VARCAT6(args[0], args[1],args[2], args[3],args[4], args[5]);
120291
120337
  case "STRSPACE":
120292
120338
  return this.STRSPACE(args[0]);
120293
120339
  case "FINDSTR":
@@ -120500,7 +120546,8 @@ function JSDraw(errorHandler,symbolData)
120500
120546
  var drawData=[];
120501
120547
  var result={ DrawData:drawData, DrawType:'DRAWFLAGTEXT' };
120502
120548
  if (!text) return result;
120503
-
120549
+ var bArrayText=Array.isArray(text); //是否是数组字符串
120550
+
120504
120551
  if (Array.isArray(condition))
120505
120552
  {
120506
120553
  if (condition.length<=0) return result;
@@ -120511,14 +120558,18 @@ function JSDraw(errorHandler,symbolData)
120511
120558
  drawData[i]=null;
120512
120559
 
120513
120560
  if (isNaN(condition[i]) || !condition[i]) continue;
120561
+
120562
+ var outText=null;
120563
+ if (!bArrayText) outText=text;
120564
+ else if (bArrayText && text[i]) outText=text[i];
120514
120565
 
120515
120566
  if (bSinglePrice)
120516
120567
  {
120517
- drawData[i]={ YValue:price, Text:text };
120568
+ drawData[i]={ YValue:price, Text:outText };
120518
120569
  }
120519
120570
  else
120520
120571
  {
120521
- if (IFrameSplitOperator.IsNumber(price[i])) drawData[i]={ YValue:price[i], Text:text };
120572
+ if (IFrameSplitOperator.IsNumber(price[i])) drawData[i]={ YValue:price[i], Text:outText };
120522
120573
  }
120523
120574
  }
120524
120575
  }
@@ -120527,13 +120578,17 @@ function JSDraw(errorHandler,symbolData)
120527
120578
  var bSinglePrice=IFrameSplitOperator.IsNumber(price);
120528
120579
  for(var i=0;i<this.SymbolData.Data.Data.length;++i)
120529
120580
  {
120581
+ var outText=null;
120582
+ if (!bArrayText) outText=text;
120583
+ else if (bArrayText && text[i]) outText=text[i];
120584
+
120530
120585
  if (bSinglePrice)
120531
120586
  {
120532
- drawData[i]={ YValue:price, Text:text };
120587
+ drawData[i]={ YValue:price, Text:outText };
120533
120588
  }
120534
120589
  else
120535
120590
  {
120536
- if (IFrameSplitOperator.IsNumber(price[i])) drawData[i]={ YValue:price[i], Text:text };
120591
+ if (IFrameSplitOperator.IsNumber(price[i])) drawData[i]={ YValue:price[i], Text:outText };
120537
120592
  }
120538
120593
  }
120539
120594
  }
@@ -130731,6 +130786,7 @@ function JSExplainer(ast,option)
130731
130786
  ["STRCAT", { Name:"STRCAT", Param:{ Count:2 }, ToString:function(args) { return `字符串相加`; } } ],
130732
130787
  ["STRCAT6",{ Name:"STRCAT6", Param:{ Dynamic:true }, ToString:function(args) { return `字符串相加`; } } ],
130733
130788
  ["VARCAT", { Name:"VARCAT", Param:{ Count:2 }, ToString:function(args) { return `字符串相加`; } } ],
130789
+ ["VARCAT6", { Name:"VARCAT", Param:{ Dynamic:true }, ToString:function(args) { return `字符串相加`; } } ],
130734
130790
  ["STRSPACE", { Name:"STRSPACE", Param:{ Count:1 }, ToString:function(args) { return `字符串${args[0]}加一空格`; } } ],
130735
130791
  ["SUBSTR", { Name:"SUBSTR", Param:{ Count:3 }, ToString:function(args) { return `字符串${args[0]}中取一部分`; } } ],
130736
130792
  ["STRCMP", { Name:"STRCMP", Param:{ Count:2 }, ToString:function(args) { return `字符串${args[0]}和字符串${args[1]}比较`; } } ],
@@ -149671,7 +149727,7 @@ function ChartReport()
149671
149727
 
149672
149728
  this.FormaTimeDrawInfo=function(column, stock, drawInfo, data)
149673
149729
  {
149674
- if (!IFrameSplitOperator.IsNumber(stock.Time)) return;
149730
+ if (!stock || !IFrameSplitOperator.IsNumber(stock.Time)) return;
149675
149731
 
149676
149732
  if (column.ValueType==0) //0=hhmm 1=hhmmss 2=hhmmss.fff
149677
149733
  {
@@ -149689,7 +149745,7 @@ function ChartReport()
149689
149745
 
149690
149746
  this.FormaDateDrawInfo=function(column, stock, drawInfo, data)
149691
149747
  {
149692
- if (!IFrameSplitOperator.IsNumber(stock.Date)) return;
149748
+ if (!stock || !IFrameSplitOperator.IsNumber(stock.Date)) return;
149693
149749
 
149694
149750
  if (column.FormatType==0)
149695
149751
  drawInfo.Text=IFrameSplitOperator.FormatDateString(stock.Date,"YYYY-MM-DD");
@@ -167518,7 +167574,7 @@ function HQChartScriptWorker()
167518
167574
 
167519
167575
 
167520
167576
 
167521
- var HQCHART_VERSION="1.1.15363";
167577
+ var HQCHART_VERSION="1.1.15374";
167522
167578
 
167523
167579
  function PrintHQChartVersion()
167524
167580
  {