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.
@@ -4379,6 +4379,49 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4379
4379
  if (IFrameSplitOperator.IsNumber(item.Count)) klineChart.PriceGap.Count=item.Count;
4380
4380
  }
4381
4381
 
4382
+ //设置十字光标
4383
+ this.SetCorssCursorConfig=function(chart, option)
4384
+ {
4385
+ if (!option || !option.CorssCursorInfo) return;
4386
+
4387
+ var item=option.CorssCursorInfo;
4388
+ if (IFrameSplitOperator.IsNumber(item.Left)) chart.ChartCorssCursor.ShowTextMode.Left=item.Left;
4389
+ if (IFrameSplitOperator.IsNumber(item.Right)) chart.ChartCorssCursor.ShowTextMode.Right=item.Right;
4390
+ if (IFrameSplitOperator.IsNumber(item.Bottom)) chart.ChartCorssCursor.ShowTextMode.Bottom=item.Bottom;
4391
+
4392
+ if (IFrameSplitOperator.IsBool(item.IsShowCorss)) chart.ChartCorssCursor.IsShowCorss=item.IsShowCorss;
4393
+
4394
+ if (IFrameSplitOperator.IsNumber(item.HPenType)) chart.ChartCorssCursor.HPenType=item.HPenType;
4395
+ if (IFrameSplitOperator.IsNumber(item.VPenType)) chart.ChartCorssCursor.VPenType=item.VPenType;
4396
+ if (IFrameSplitOperator.IsNumber(item.VLineType)) chart.ChartCorssCursor.VLineType=item.VLineType;
4397
+
4398
+ if (item.RightButton)
4399
+ {
4400
+ if (IFrameSplitOperator.IsBool(item.RightButton.Enable)) chart.ChartCorssCursor.RightButton.Enable=item.RightButton.Enable;
4401
+ }
4402
+
4403
+ if (item.BottomButton)
4404
+ {
4405
+ var subItem=item.BottomButton;
4406
+ if (IFrameSplitOperator.IsBool(subItem.Enable)) chart.ChartCorssCursor.BottomButton.Enable=subItem.Enable;
4407
+ }
4408
+
4409
+ if (IFrameSplitOperator.IsNumber(item.PriceFormatType)) chart.ChartCorssCursor.StringFormatY.PriceFormatType=item.PriceFormatType;
4410
+ if (IFrameSplitOperator.IsNumber(item.DataFormatType)) chart.ChartCorssCursor.StringFormatY.DataFormatType=item.DataFormatType;
4411
+
4412
+ if (IFrameSplitOperator.IsBool(item.EnableKeyboard)) chart.ChartCorssCursor.EnableKeyboard=item.EnableKeyboard;
4413
+ if (IFrameSplitOperator.IsBool(item.EnableDBClick)) chart.ChartCorssCursor.EnableDBClick=item.EnableDBClick;
4414
+
4415
+ if (IFrameSplitOperator.IsBool(item.IsShowCorssPoint)) chart.ChartCorssCursor.CorssPointConfig.Enable=item.IsShowCorssPoint;
4416
+
4417
+ if (item.YDecimals) //Y轴文字小数位数
4418
+ {
4419
+ var subItem=item.YDecimals;
4420
+ if (IFrameSplitOperator.IsNumber(subItem.Value)) chart.ChartCorssCursor.StringFormatY.DecimalsConfig.Value=subItem.Value;
4421
+ if (IFrameSplitOperator.IsNumber(subItem.Type)) chart.ChartCorssCursor.StringFormatY.DecimalsConfig.Type=subItem.Type;
4422
+ }
4423
+ }
4424
+
4382
4425
  //历史K线图
4383
4426
  this.CreateKLineChartContainer=function(option)
4384
4427
  {
@@ -4632,48 +4675,23 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4632
4675
  if (option.IsCorssOnlyDrawKLine===true) chart.ChartCorssCursor.IsOnlyDrawKLine=option.IsCorssOnlyDrawKLine;
4633
4676
  if (option.CorssCursorTouchEnd===true) chart.CorssCursorTouchEnd = option.CorssCursorTouchEnd;
4634
4677
  if (option.IsClickShowCorssCursor==true) chart.IsClickShowCorssCursor=option.IsClickShowCorssCursor;
4635
- if (option.CorssCursorInfo)
4678
+ this.SetCorssCursorConfig(chart, option);
4679
+ if (option.CorssCursorInfo) //十字光标K线上的属性设置
4636
4680
  {
4637
4681
  var item=option.CorssCursorInfo;
4638
- if (!isNaN(option.CorssCursorInfo.Left)) chart.ChartCorssCursor.ShowTextMode.Left=option.CorssCursorInfo.Left;
4639
- if (!isNaN(option.CorssCursorInfo.Right)) chart.ChartCorssCursor.ShowTextMode.Right=option.CorssCursorInfo.Right;
4640
- if (!isNaN(option.CorssCursorInfo.Bottom)) chart.ChartCorssCursor.ShowTextMode.Bottom=option.CorssCursorInfo.Bottom;
4641
- if (option.CorssCursorInfo.IsShowCorss===false) chart.ChartCorssCursor.IsShowCorss=option.CorssCursorInfo.IsShowCorss;
4642
4682
  if (IFrameSplitOperator.IsBool(item.IsShowClose)) chart.ChartCorssCursor.IsShowClose = item.IsShowClose; //Y轴显示收盘价
4643
4683
  if (IFrameSplitOperator.IsBool(item.IsOnlyDrawKLine)) chart.ChartCorssCursor.IsOnlyDrawKLine = item.IsOnlyDrawKLine; //Y轴显示收盘价
4644
4684
  if (option.CorssCursorInfo.PressTime) chart.PressTime=option.CorssCursorInfo.PressTime; //长按显示十字光标的时间
4645
- if (IFrameSplitOperator.IsNumber(option.CorssCursorInfo.HPenType)) chart.ChartCorssCursor.HPenType=option.CorssCursorInfo.HPenType;
4646
- if (option.CorssCursorInfo.VPenType>0) chart.ChartCorssCursor.VPenType=option.CorssCursorInfo.VPenType;
4647
- if (IFrameSplitOperator.IsNumber(item.VLineType)) chart.ChartCorssCursor.VLineType=item.VLineType;
4648
4685
  if (option.CorssCursorInfo.DateFormatType>0) chart.ChartCorssCursor.StringFormatX.DateFormatType=option.CorssCursorInfo.DateFormatType;
4649
4686
  if (IFrameSplitOperator.IsBool(item.IsDrawXRangeBG)) chart.ChartCorssCursor.IsDrawXRangeBG=item.IsDrawXRangeBG;
4650
4687
  if (IFrameSplitOperator.IsBool(option.CorssCursorInfo.IsFixXLastTime)) chart.ChartCorssCursor.IsFixXLastTime=option.CorssCursorInfo.IsFixXLastTime;
4651
4688
  if (IFrameSplitOperator.IsNumber(item.TextHeight)) chart.ChartCorssCursor.TextHeight=item.TextHeight;
4652
-
4653
- if (item.RightButton)
4654
- {
4655
- if (IFrameSplitOperator.IsBool(item.RightButton.Enable)) chart.ChartCorssCursor.RightButton.Enable=item.RightButton.Enable;
4656
- }
4657
-
4658
- if (item.BottomButton)
4659
- {
4660
- var subItem=item.BottomButton;
4661
- if (IFrameSplitOperator.IsBool(subItem.Enable)) chart.ChartCorssCursor.BottomButton.Enable=subItem.Enable;
4662
- }
4663
-
4664
- if (IFrameSplitOperator.IsNumber(item.PriceFormatType)) chart.ChartCorssCursor.StringFormatY.PriceFormatType=item.PriceFormatType;
4665
- if (IFrameSplitOperator.IsNumber(item.DataFormatType)) chart.ChartCorssCursor.StringFormatY.DataFormatType=item.DataFormatType;
4666
- if (IFrameSplitOperator.IsBool(item.EnableKeyboard)) chart.ChartCorssCursor.EnableKeyboard=item.EnableKeyboard;
4667
- if (IFrameSplitOperator.IsBool(item.EnableDBClick)) chart.ChartCorssCursor.EnableDBClick=item.EnableDBClick;
4668
-
4669
- if (IFrameSplitOperator.IsBool(item.IsShowCorssPoint)) chart.ChartCorssCursor.CorssPointConfig.Enable=item.IsShowCorssPoint;
4670
4689
 
4671
4690
  if (item.RangeIncrease)
4672
4691
  {
4673
4692
  var subItem=item.RangeIncrease;
4674
4693
  if (IFrameSplitOperator.IsBool(subItem.IsShow)) chart.ChartCorssCursor.StringFormatX.RangeIncrease.IsShow=subItem.IsShow;
4675
4694
  if (IFrameSplitOperator.IsNumber(subItem.Formula)) chart.ChartCorssCursor.StringFormatX.RangeIncrease.Formula=subItem.Formula;
4676
-
4677
4695
  }
4678
4696
  }
4679
4697
 
@@ -5201,39 +5219,15 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
5201
5219
  if (option.PageInfo) chart.SetPageInfo(option.PageInfo);
5202
5220
 
5203
5221
  chart.Create(windowsCount,option); //创建子窗口
5204
-
5205
- if (option.CorssCursorInfo)
5222
+ this.SetCorssCursorConfig(chart, option);
5223
+ if (option.CorssCursorInfo) //分时图十字光标属性设置
5206
5224
  {
5207
5225
  var item=option.CorssCursorInfo;
5208
- if (!isNaN(option.CorssCursorInfo.Left)) chart.ChartCorssCursor.ShowTextMode.Left=option.CorssCursorInfo.Left;
5209
- if (!isNaN(option.CorssCursorInfo.Right)) chart.ChartCorssCursor.ShowTextMode.Right=option.CorssCursorInfo.Right;
5210
- if (!isNaN(option.CorssCursorInfo.Bottom)) chart.ChartCorssCursor.ShowTextMode.Bottom=option.CorssCursorInfo.Bottom;
5211
- if (option.CorssCursorInfo.IsShowCorss===false) chart.ChartCorssCursor.IsShowCorss=option.CorssCursorInfo.IsShowCorss;
5226
+
5212
5227
  if (option.CorssCursorInfo.RightTextFormat>0) chart.ChartCorssCursor.TextFormat.Right=option.CorssCursorInfo.RightTextFormat;
5213
5228
  if (option.CorssCursorInfo.IsOnlyDrawMinute == true) chart.ChartCorssCursor.IsOnlyDrawMinute = option.CorssCursorInfo.IsOnlyDrawMinute; //Y轴显示收盘价
5214
5229
  if (IFrameSplitOperator.IsBool(option.CorssCursorInfo.IsFixXLastTime)) chart.ChartCorssCursor.IsFixXLastTime=option.CorssCursorInfo.IsFixXLastTime;
5215
5230
 
5216
- if (item.RightButton)
5217
- {
5218
- if (IFrameSplitOperator.IsBool(item.RightButton.Enable)) chart.ChartCorssCursor.RightButton.Enable=item.RightButton.Enable;
5219
- }
5220
-
5221
- if (item.BottomButton)
5222
- {
5223
- var subItem=item.BottomButton;
5224
- if (IFrameSplitOperator.IsBool(subItem.Enable)) chart.ChartCorssCursor.BottomButton.Enable=subItem.Enable;
5225
- }
5226
-
5227
- if (IFrameSplitOperator.IsNumber(item.PriceFormatType)) chart.ChartCorssCursor.StringFormatY.PriceFormatType=item.PriceFormatType;
5228
- if (IFrameSplitOperator.IsNumber(item.DataFormatType)) chart.ChartCorssCursor.StringFormatY.DataFormatType=item.DataFormatType;
5229
-
5230
- if (IFrameSplitOperator.IsNumber(item.HPenType)) chart.ChartCorssCursor.HPenType=item.HPenType;
5231
- if (IFrameSplitOperator.IsNumber(item.VPenType)) chart.ChartCorssCursor.VPenType=item.VPenType;
5232
- if (IFrameSplitOperator.IsBool(item.EnableKeyboard)) chart.ChartCorssCursor.EnableKeyboard=item.EnableKeyboard;
5233
- if (IFrameSplitOperator.IsBool(item.EnableDBClick)) chart.ChartCorssCursor.EnableDBClick=item.EnableDBClick;
5234
- if (IFrameSplitOperator.IsBool(item.IsShowCorssPoint)) chart.ChartCorssCursor.CorssPointConfig.Enable=item.IsShowCorssPoint;
5235
- if (IFrameSplitOperator.IsNumber(item.VLineType)) chart.ChartCorssCursor.VLineType=item.VLineType;
5236
-
5237
5231
  if (item.TextStyle)
5238
5232
  {
5239
5233
  if (item.TextStyle.Right) //右侧输出样式
@@ -7149,6 +7143,7 @@ var JSCHART_DATA_FIELD_ID=
7149
7143
  KLINE_COLOR_DATA:66, //K线自定义颜色数据
7150
7144
  KLINE_DAY_EXTENDDATA:25,
7151
7145
  KLINE_MINUTE_EXTENDDATA:25,
7146
+ KLINE_TICK_EXTENDDATA:25,
7152
7147
 
7153
7148
  //OrderBook Heatmap
7154
7149
  KLINE_HEATMAP:67,
@@ -64892,6 +64887,7 @@ function HQPriceStringFormat()
64892
64887
 
64893
64888
  this.PriceFormatType=0; //主窗口格式 0=默认 1=科学计数
64894
64889
  this.DataFormatType=0; //副图指标格式 0=默认 1=科学计数
64890
+ this.DecimalsConfig={ Value:2, Type:0 }; //小数设置, Value:小数位数 , Type: 0=默认 1=跟指标标题一致
64895
64891
 
64896
64892
  this.GetEventCallback
64897
64893
 
@@ -64990,7 +64986,7 @@ function HQPriceStringFormat()
64990
64986
  if (!this.Value) return false;
64991
64987
 
64992
64988
  this.PercentageText=null;
64993
- var defaultfloatPrecision=2; //价格小数位数
64989
+ var defaultfloatPrecision=this.DecimalsConfig.Value; //价格小数位数
64994
64990
  if (this.FrameID==0) //第1个窗口显示原始价格
64995
64991
  {
64996
64992
  var defaultfloatPrecision=GetfloatPrecision(this.Symbol);
@@ -65039,6 +65035,7 @@ function HQPriceStringFormat()
65039
65035
  }
65040
65036
  else if (this.FrameID==1)
65041
65037
  {
65038
+ defaultfloatPrecision=this.GetIndexTitleFloatPrecision(this.FrameID);
65042
65039
  if (this.DataFormatType==1)
65043
65040
  {
65044
65041
  this.Text=IFrameSplitOperator.FormatValueThousandsString(this.Value,defaultfloatPrecision);
@@ -65071,6 +65068,7 @@ function HQPriceStringFormat()
65071
65068
  }
65072
65069
  else
65073
65070
  {
65071
+ defaultfloatPrecision=this.GetIndexTitleFloatPrecision(this.FrameID);
65074
65072
  if (this.DataFormatType==1) this.Text=IFrameSplitOperator.FormatValueThousandsString(this.Value,defaultfloatPrecision);
65075
65073
  else this.Text=IFrameSplitOperator.FormatValueString(this.Value,defaultfloatPrecision,this.LanguageID);
65076
65074
  if (IFrameSplitOperator.IsNumber(this.RValue)) this.RText=IFrameSplitOperator.FormatValueString(this.RValue,defaultfloatPrecision,this.LanguageID);
@@ -65116,6 +65114,23 @@ function HQPriceStringFormat()
65116
65114
  return true;
65117
65115
  }
65118
65116
 
65117
+ //获取指标标题小数位数
65118
+ this.GetIndexTitleFloatPrecision=function(frameID)
65119
+ {
65120
+ var dec=this.DecimalsConfig.Value;
65121
+ if (this.DecimalsConfig.Type===0) return dec;
65122
+
65123
+ if (frameID<0) return dec;
65124
+ if (!this.HQChart) return dec;
65125
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.HQChart.WindowIndex)) return dec;
65126
+ var item=this.HQChart.WindowIndex[frameID];
65127
+ if (!item) return dec;
65128
+
65129
+ if (IFrameSplitOperator.IsNumber(item.FloatPrecision)) dec=item.FloatPrecision;
65130
+
65131
+ return dec;
65132
+ }
65133
+
65119
65134
  //深度图刻度
65120
65135
  this.GetExtendPaintData=function(floatPrecision)
65121
65136
  {
@@ -90272,14 +90287,26 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
90272
90287
  {
90273
90288
  var self=this;
90274
90289
  var start=0;
90275
- if (this.SourceData && this.SourceData.Data) start=this.SourceData.Data.length;
90290
+ var hisData=this.GetKData();
90291
+ var dateRange=hisData.GetDateRange();
90292
+
90276
90293
  if (this.NetworkFilter)
90277
90294
  {
90295
+ var kLineDrawType=this.GetKLineDrawType();
90278
90296
  var obj=
90279
90297
  {
90280
90298
  Name:'KLineChartContainer::RequestTickRealtimeData', //类名::
90281
90299
  Explain:'当天最新分笔数据',
90282
- Request:{ Url:self.TickApiUrl, Data:{ symbol: self.Symbol, start:start, end:start+1000 }, Type:'POST' },
90300
+ Request:
90301
+ {
90302
+ Url:self.TickApiUrl,
90303
+ Data:
90304
+ {
90305
+ symbol:self.Symbol, period:this.Period, right:this.Right,
90306
+ dateRange:dateRange, klineDrawType:kLineDrawType
90307
+ },
90308
+ Type:'POST'
90309
+ },
90283
90310
  Self:this,
90284
90311
  PreventDefault:false
90285
90312
  };
@@ -90292,29 +90319,14 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
90292
90319
 
90293
90320
  if (obj.PreventDefault==true) return; //已被上层替换,不调用默认的网络请求
90294
90321
  }
90295
-
90296
- JSNetwork.HttpRequest({
90297
- url: self.TickApiUrl,
90298
- data:{"symbol":self.Symbol, start:start-10, end:start+1000 },
90299
- type:"post",
90300
- dataType: "json",
90301
- async:true,
90302
- success: function (data)
90303
- {
90304
- self.ChartSplashPaint.EnableSplash(false);
90305
- self.RecvTickRealtimeData(data);
90306
- self.AutoUpdate();
90307
- }
90308
- });
90309
90322
  }
90310
90323
 
90311
90324
  this.RecvTickRealtimeData=function(data)
90312
90325
  {
90313
- if (data.ver==2.0)
90314
- var aryDayData=KLineChartContainer.JsonDataToTickDataV2(data); //增量数据
90315
- else
90316
- var aryDayData=KLineChartContainer.JsonDataToTickData(data); //增量数据
90317
- if (!aryDayData || aryDayData.length<=0) return;
90326
+ var aryDayData=null;
90327
+ if (data.ver==2.0) aryDayData=KLineChartContainer.JsonDataToTickDataV2(data); //增量数据
90328
+ else aryDayData=KLineChartContainer.JsonDataToTickData(data); //增量数据
90329
+ if (!IFrameSplitOperator.IsNonEmptyArray(aryDayData)) return;
90318
90330
 
90319
90331
  var redraw=false; //强制重绘
90320
90332
  if (data.redraw==true) redraw=true;
@@ -90324,7 +90336,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
90324
90336
  var lastTime=0;
90325
90337
  if (source.length>0) lastTime=source[source.length-1].Time;
90326
90338
  var newCount=0;
90327
- for(var i in aryDayData)
90339
+ for(var i=0; i<aryDayData.length; ++i)
90328
90340
  {
90329
90341
  var item=aryDayData[i];
90330
90342
  if (item.Time<=lastTime) continue;
@@ -95309,20 +95321,24 @@ KLineChartContainer.JsonDataToTickDataV2=function(data)
95309
95321
  {
95310
95322
  var aryDayData=[];
95311
95323
  if (!IFrameSplitOperator.IsNonEmptyArray(data.data)) return aryDayData;
95312
-
95324
+ var extendDataIndex=JSCHART_DATA_FIELD_ID.KLINE_TICK_EXTENDDATA;
95313
95325
  for(var i=0;i<data.data.length;++i)
95314
95326
  {
95315
95327
  var item = new HistoryData();
95316
- var tick=data.data[i]; //[ date, time, yClose, price, extendData]
95328
+ var tick=data.data[i]; //[ date, time, yClose, price, vol, amount, flag,]
95317
95329
  if (!tick) continue;
95318
95330
 
95319
95331
  item.Date = tick[0];
95320
95332
  item.Time=tick[1];
95321
95333
  item.YClose = tick[2];
95322
95334
  item.Low=item.High=item.Close=item.Open = tick[3];
95335
+ item.Vol = tick[4]; //原始单位股
95336
+ item.Amount = tick[5];
95337
+ item.Flag=tick[6];
95338
+
95323
95339
  aryDayData.push(item);
95324
95340
 
95325
- if (tick[4]) item.ExtendData=tick[4];
95341
+ if (tick[extendDataIndex]) item.ExtendData=tick[extendDataIndex];
95326
95342
  }
95327
95343
 
95328
95344
  return aryDayData;
@@ -118393,6 +118409,32 @@ function JSAlgorithm(errorHandler,symbolData)
118393
118409
  return result;
118394
118410
  }
118395
118411
 
118412
+ //VARCAT6(A,B,C,D,E,F):将六个字符串A,B,C,D,E,F相加成一个字符串.
118413
+ //每个数据都进行序列运算,若用于多股选股,建议换用STRCAT6
118414
+ //用法: VARCAT6('多头',VAR2STR(C,2),' ',VAR2STR(O,2),' ',VAR2STR(MA(C,5),2))将六个字符串相加成一个字符串
118415
+ this.VARCAT6=function(data,data2,data3,data4,data5)
118416
+ {
118417
+ var aryData=[];
118418
+ if (Array.isArray(data) || IFrameSplitOperator.IsString(data)) aryData.push(data);
118419
+ if (Array.isArray(data2) || IFrameSplitOperator.IsString(data2)) aryData.push(data2);
118420
+ if (Array.isArray(data3) || IFrameSplitOperator.IsString(data3)) aryData.push(data3);
118421
+ if (Array.isArray(data4) || IFrameSplitOperator.IsString(data4)) aryData.push(data4);
118422
+ if (Array.isArray(data5) || IFrameSplitOperator.IsString(data5)) aryData.push(data5);
118423
+
118424
+ if (!IFrameSplitOperator.IsNonEmptyArray(aryData)) return [];
118425
+ if (aryData.length==1) return data;
118426
+
118427
+ var tempData=this.VARCAT(aryData[0], aryData[1]);
118428
+ var result=tempData;
118429
+ for(var i=2;i<aryData.length;++i)
118430
+ {
118431
+ result=this.VARCAT(tempData,aryData[i]);
118432
+ tempData=result;
118433
+ }
118434
+
118435
+ return result;
118436
+ }
118437
+
118396
118438
  //FINDSTR(A,B):在字符串A中查找字符串B,如果找到返回1,否则返回0.
118397
118439
  //用法: FINDSTR('多头开仓','开仓')在字符串'多头开仓'中查找字符串'开仓',返回1
118398
118440
  this.FINDSTR=function(data, data2)
@@ -118519,6 +118561,8 @@ function JSAlgorithm(errorHandler,symbolData)
118519
118561
  this.VAR2STR=function(data,n)
118520
118562
  {
118521
118563
  var result=[];
118564
+ var dec=0;
118565
+ if (IFrameSplitOperator.IsNumber(n)) dec=n;
118522
118566
  if (Array.isArray(data))
118523
118567
  {
118524
118568
  for(var i=0;i<data.length;++i)
@@ -118526,13 +118570,13 @@ function JSAlgorithm(errorHandler,symbolData)
118526
118570
  result[i]=null;
118527
118571
  var item=data[i];
118528
118572
  if (this.IsNumber(item))
118529
- result[i]=item.toFixed(n);
118573
+ result[i]=item.toFixed(dec);
118530
118574
  }
118531
118575
  }
118532
118576
  else
118533
118577
  {
118534
118578
  if (this.IsNumber(data))
118535
- result=data.toFixed(n);
118579
+ result=data.toFixed(dec);
118536
118580
  }
118537
118581
 
118538
118582
  return result;
@@ -120244,6 +120288,8 @@ function JSAlgorithm(errorHandler,symbolData)
120244
120288
  return this.VAR2STR(args[0], args[1]);
120245
120289
  case "VARCAT":
120246
120290
  return this.VARCAT(args[0], args[1]);
120291
+ case "VARCAT6":
120292
+ return this.VARCAT6(args[0], args[1],args[2], args[3],args[4], args[5]);
120247
120293
  case "STRSPACE":
120248
120294
  return this.STRSPACE(args[0]);
120249
120295
  case "FINDSTR":
@@ -120456,7 +120502,8 @@ function JSDraw(errorHandler,symbolData)
120456
120502
  var drawData=[];
120457
120503
  var result={ DrawData:drawData, DrawType:'DRAWFLAGTEXT' };
120458
120504
  if (!text) return result;
120459
-
120505
+ var bArrayText=Array.isArray(text); //是否是数组字符串
120506
+
120460
120507
  if (Array.isArray(condition))
120461
120508
  {
120462
120509
  if (condition.length<=0) return result;
@@ -120467,14 +120514,18 @@ function JSDraw(errorHandler,symbolData)
120467
120514
  drawData[i]=null;
120468
120515
 
120469
120516
  if (isNaN(condition[i]) || !condition[i]) continue;
120517
+
120518
+ var outText=null;
120519
+ if (!bArrayText) outText=text;
120520
+ else if (bArrayText && text[i]) outText=text[i];
120470
120521
 
120471
120522
  if (bSinglePrice)
120472
120523
  {
120473
- drawData[i]={ YValue:price, Text:text };
120524
+ drawData[i]={ YValue:price, Text:outText };
120474
120525
  }
120475
120526
  else
120476
120527
  {
120477
- if (IFrameSplitOperator.IsNumber(price[i])) drawData[i]={ YValue:price[i], Text:text };
120528
+ if (IFrameSplitOperator.IsNumber(price[i])) drawData[i]={ YValue:price[i], Text:outText };
120478
120529
  }
120479
120530
  }
120480
120531
  }
@@ -120483,13 +120534,17 @@ function JSDraw(errorHandler,symbolData)
120483
120534
  var bSinglePrice=IFrameSplitOperator.IsNumber(price);
120484
120535
  for(var i=0;i<this.SymbolData.Data.Data.length;++i)
120485
120536
  {
120537
+ var outText=null;
120538
+ if (!bArrayText) outText=text;
120539
+ else if (bArrayText && text[i]) outText=text[i];
120540
+
120486
120541
  if (bSinglePrice)
120487
120542
  {
120488
- drawData[i]={ YValue:price, Text:text };
120543
+ drawData[i]={ YValue:price, Text:outText };
120489
120544
  }
120490
120545
  else
120491
120546
  {
120492
- if (IFrameSplitOperator.IsNumber(price[i])) drawData[i]={ YValue:price[i], Text:text };
120547
+ if (IFrameSplitOperator.IsNumber(price[i])) drawData[i]={ YValue:price[i], Text:outText };
120493
120548
  }
120494
120549
  }
120495
120550
  }
@@ -130687,6 +130742,7 @@ function JSExplainer(ast,option)
130687
130742
  ["STRCAT", { Name:"STRCAT", Param:{ Count:2 }, ToString:function(args) { return `字符串相加`; } } ],
130688
130743
  ["STRCAT6",{ Name:"STRCAT6", Param:{ Dynamic:true }, ToString:function(args) { return `字符串相加`; } } ],
130689
130744
  ["VARCAT", { Name:"VARCAT", Param:{ Count:2 }, ToString:function(args) { return `字符串相加`; } } ],
130745
+ ["VARCAT6", { Name:"VARCAT", Param:{ Dynamic:true }, ToString:function(args) { return `字符串相加`; } } ],
130690
130746
  ["STRSPACE", { Name:"STRSPACE", Param:{ Count:1 }, ToString:function(args) { return `字符串${args[0]}加一空格`; } } ],
130691
130747
  ["SUBSTR", { Name:"SUBSTR", Param:{ Count:3 }, ToString:function(args) { return `字符串${args[0]}中取一部分`; } } ],
130692
130748
  ["STRCMP", { Name:"STRCMP", Param:{ Count:2 }, ToString:function(args) { return `字符串${args[0]}和字符串${args[1]}比较`; } } ],
@@ -149627,7 +149683,7 @@ function ChartReport()
149627
149683
 
149628
149684
  this.FormaTimeDrawInfo=function(column, stock, drawInfo, data)
149629
149685
  {
149630
- if (!IFrameSplitOperator.IsNumber(stock.Time)) return;
149686
+ if (!stock || !IFrameSplitOperator.IsNumber(stock.Time)) return;
149631
149687
 
149632
149688
  if (column.ValueType==0) //0=hhmm 1=hhmmss 2=hhmmss.fff
149633
149689
  {
@@ -149645,7 +149701,7 @@ function ChartReport()
149645
149701
 
149646
149702
  this.FormaDateDrawInfo=function(column, stock, drawInfo, data)
149647
149703
  {
149648
- if (!IFrameSplitOperator.IsNumber(stock.Date)) return;
149704
+ if (!stock || !IFrameSplitOperator.IsNumber(stock.Date)) return;
149649
149705
 
149650
149706
  if (column.FormatType==0)
149651
149707
  drawInfo.Text=IFrameSplitOperator.FormatDateString(stock.Date,"YYYY-MM-DD");
@@ -155459,7 +155515,7 @@ function ScrollBarBGChart()
155459
155515
 
155460
155516
 
155461
155517
 
155462
- var HQCHART_VERSION="1.1.15363";
155518
+ var HQCHART_VERSION="1.1.15374";
155463
155519
 
155464
155520
  function PrintHQChartVersion()
155465
155521
  {
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.15363";
8
+ var HQCHART_VERSION="1.1.15374";
9
9
 
10
10
  function PrintHQChartVersion()
11
11
  {
@@ -55594,6 +55594,15 @@ HQData.NetworkFilter=function(data, callback)
55594
55594
  HQData.RequestMinuteRealtimeData(data,callback);
55595
55595
  break;
55596
55596
 
55597
+ case "KLineChartContainer::RequestTickData":
55598
+ //HQChart使用教程30-K线图如何对接第3方数据5-逐笔数据
55599
+ HQData.RequestKLineTickData(data,callback);
55600
+ break;
55601
+ case "KLineChartContainer::RequestTickRealtimeData":
55602
+ //HQChart使用教程30-K线图如何对接第3方数据16-轮询增量更新逐笔数据
55603
+ HQData.RequestTickRealtimeData(data,callback);
55604
+ break;
55605
+
55597
55606
  case "JSSymbolData::GetVariantData": //额外的变量数据
55598
55607
  //HQChart使用教程30-K线图如何对接第3方数据29-板块字符串函数数据[GNBLOCK,GNBLOCKNUM......]
55599
55608
  HQData.RequestIndexVariantData(data,callback);
@@ -56762,6 +56771,50 @@ HQData.RequestMinuteRealtimeData=function(data,callback)
56762
56771
  }
56763
56772
 
56764
56773
 
56774
+ HQData.RequestKLineTickData=function(data,callback)
56775
+ {
56776
+ data.PreventDefault=true;
56777
+ var symbol=data.Request.Data.symbol;
56778
+ console.log(`[HQData::RequestKLineTickData] Symbol=${symbol}`);
56779
+
56780
+ var hqchartData={ code:0, symbol:symbol, name:symbol, data:[], ver:2.0 };
56781
+ for(var i=0;i<MSECOND_TEST_DATA.data.length-100;++i)
56782
+ {
56783
+ var item=MSECOND_TEST_DATA.data[i];
56784
+ var flag=HQData.GetRandomTestData(1,10)%3;
56785
+ var kItem=[item[0], parseInt(item[8]/1000), item[1], item[5], item[6]*1000, item[7], flag ];
56786
+ hqchartData.data.push(kItem);
56787
+ }
56788
+
56789
+ callback(hqchartData);
56790
+ }
56791
+
56792
+ HQData.RequestTickRealtimeData=function(data,callback)
56793
+ {
56794
+ data.PreventDefault=true;
56795
+ var symbol=data.Request.Data.symbol; //请求的股票代码
56796
+ var dateRange=data.Request.Data.dateRange;
56797
+ var endTime=dateRange.End.Time;
56798
+ var endDate=dateRange.End.Date;
56799
+
56800
+ var hqchartData={ code:0, symbol:symbol, name:symbol, data:[], ver:2.0 };
56801
+ for(var i=0;i<MSECOND_TEST_DATA.data.length;++i)
56802
+ {
56803
+ var item=MSECOND_TEST_DATA.data[i];
56804
+ var time=parseInt(item[8]/1000);
56805
+ if (time>endTime)
56806
+ {
56807
+ var flag=HQData.GetRandomTestData(1,10)%3;
56808
+ var kItem=[item[0], time, item[1], item[5], item[6]*1000, item[7], flag ];
56809
+ hqchartData.data.push(kItem);
56810
+ break;
56811
+ }
56812
+ }
56813
+
56814
+ callback(hqchartData);
56815
+ }
56816
+
56817
+
56765
56818
  HQData.RequestIndexVariantData=function(data,callback)
56766
56819
  {
56767
56820
  data.PreventDefault=true;
@@ -59429,7 +59482,13 @@ HQData.APIIndex_KLINE_TABLE=function(data, callback)
59429
59482
  DrawType:'KLINE_TABLE',
59430
59483
  DrawData:[ ] , //数据 [ [ { Text, Color: BGColor }, ...... ], [],]
59431
59484
  RowCount:4,
59432
- RowName:[ {Name:"账户[*9993]",TextAlign:"center", Color:"rgb(124, 252, 0)"}, {Name:"账户[*8881]",TextAlign:"center", Color:"rgb(238, 99, 9)"}, {Name:"账户3",TextAlign:"center"},{Name:"账户4", TextAlign:"center"}],
59485
+ RowName:
59486
+ [
59487
+ {Name:"账户[*9993]",TextAlign:"center", Color:"rgb(124, 252, 0)"},
59488
+ {Name:"账户[*8881]",TextAlign:"center", Color:"rgb(238, 99, 9)", BGColor:"rgb(100,0,200)" },
59489
+ {Name:"账户3",TextAlign:"center"},
59490
+ {Name:"账户4", TextAlign:"center"}
59491
+ ],
59433
59492
 
59434
59493
  Config:
59435
59494
  {
@@ -59440,7 +59499,9 @@ HQData.APIIndex_KLINE_TABLE=function(data, callback)
59440
59499
  RowNamePosition:3,
59441
59500
  TextFont:{ Family:'微软雅黑' , FontMaxSize:14*GetDevicePixelRatio(), },
59442
59501
  RowHeightType:0,
59443
- Style:1
59502
+ Style:1,
59503
+
59504
+ AryBorderColor:[null, "rgb(100,20,200)", "rgb(200,0,100)"]
59444
59505
  }
59445
59506
  },
59446
59507