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.
@@ -7544,6 +7544,32 @@ function JSAlgorithm(errorHandler,symbolData)
7544
7544
  return result;
7545
7545
  }
7546
7546
 
7547
+ //VARCAT6(A,B,C,D,E,F):将六个字符串A,B,C,D,E,F相加成一个字符串.
7548
+ //每个数据都进行序列运算,若用于多股选股,建议换用STRCAT6
7549
+ //用法: VARCAT6('多头',VAR2STR(C,2),' ',VAR2STR(O,2),' ',VAR2STR(MA(C,5),2))将六个字符串相加成一个字符串
7550
+ this.VARCAT6=function(data,data2,data3,data4,data5)
7551
+ {
7552
+ var aryData=[];
7553
+ if (Array.isArray(data) || IFrameSplitOperator.IsString(data)) aryData.push(data);
7554
+ if (Array.isArray(data2) || IFrameSplitOperator.IsString(data2)) aryData.push(data2);
7555
+ if (Array.isArray(data3) || IFrameSplitOperator.IsString(data3)) aryData.push(data3);
7556
+ if (Array.isArray(data4) || IFrameSplitOperator.IsString(data4)) aryData.push(data4);
7557
+ if (Array.isArray(data5) || IFrameSplitOperator.IsString(data5)) aryData.push(data5);
7558
+
7559
+ if (!IFrameSplitOperator.IsNonEmptyArray(aryData)) return [];
7560
+ if (aryData.length==1) return data;
7561
+
7562
+ var tempData=this.VARCAT(aryData[0], aryData[1]);
7563
+ var result=tempData;
7564
+ for(var i=2;i<aryData.length;++i)
7565
+ {
7566
+ result=this.VARCAT(tempData,aryData[i]);
7567
+ tempData=result;
7568
+ }
7569
+
7570
+ return result;
7571
+ }
7572
+
7547
7573
  //FINDSTR(A,B):在字符串A中查找字符串B,如果找到返回1,否则返回0.
7548
7574
  //用法: FINDSTR('多头开仓','开仓')在字符串'多头开仓'中查找字符串'开仓',返回1
7549
7575
  this.FINDSTR=function(data, data2)
@@ -7670,6 +7696,8 @@ function JSAlgorithm(errorHandler,symbolData)
7670
7696
  this.VAR2STR=function(data,n)
7671
7697
  {
7672
7698
  var result=[];
7699
+ var dec=0;
7700
+ if (IFrameSplitOperator.IsNumber(n)) dec=n;
7673
7701
  if (Array.isArray(data))
7674
7702
  {
7675
7703
  for(var i=0;i<data.length;++i)
@@ -7677,13 +7705,13 @@ function JSAlgorithm(errorHandler,symbolData)
7677
7705
  result[i]=null;
7678
7706
  var item=data[i];
7679
7707
  if (this.IsNumber(item))
7680
- result[i]=item.toFixed(n);
7708
+ result[i]=item.toFixed(dec);
7681
7709
  }
7682
7710
  }
7683
7711
  else
7684
7712
  {
7685
7713
  if (this.IsNumber(data))
7686
- result=data.toFixed(n);
7714
+ result=data.toFixed(dec);
7687
7715
  }
7688
7716
 
7689
7717
  return result;
@@ -9395,6 +9423,8 @@ function JSAlgorithm(errorHandler,symbolData)
9395
9423
  return this.VAR2STR(args[0], args[1]);
9396
9424
  case "VARCAT":
9397
9425
  return this.VARCAT(args[0], args[1]);
9426
+ case "VARCAT6":
9427
+ return this.VARCAT6(args[0], args[1],args[2], args[3],args[4], args[5]);
9398
9428
  case "STRSPACE":
9399
9429
  return this.STRSPACE(args[0]);
9400
9430
  case "FINDSTR":
@@ -9607,7 +9637,8 @@ function JSDraw(errorHandler,symbolData)
9607
9637
  var drawData=[];
9608
9638
  var result={ DrawData:drawData, DrawType:'DRAWFLAGTEXT' };
9609
9639
  if (!text) return result;
9610
-
9640
+ var bArrayText=Array.isArray(text); //是否是数组字符串
9641
+
9611
9642
  if (Array.isArray(condition))
9612
9643
  {
9613
9644
  if (condition.length<=0) return result;
@@ -9618,14 +9649,18 @@ function JSDraw(errorHandler,symbolData)
9618
9649
  drawData[i]=null;
9619
9650
 
9620
9651
  if (isNaN(condition[i]) || !condition[i]) continue;
9652
+
9653
+ var outText=null;
9654
+ if (!bArrayText) outText=text;
9655
+ else if (bArrayText && text[i]) outText=text[i];
9621
9656
 
9622
9657
  if (bSinglePrice)
9623
9658
  {
9624
- drawData[i]={ YValue:price, Text:text };
9659
+ drawData[i]={ YValue:price, Text:outText };
9625
9660
  }
9626
9661
  else
9627
9662
  {
9628
- if (IFrameSplitOperator.IsNumber(price[i])) drawData[i]={ YValue:price[i], Text:text };
9663
+ if (IFrameSplitOperator.IsNumber(price[i])) drawData[i]={ YValue:price[i], Text:outText };
9629
9664
  }
9630
9665
  }
9631
9666
  }
@@ -9634,13 +9669,17 @@ function JSDraw(errorHandler,symbolData)
9634
9669
  var bSinglePrice=IFrameSplitOperator.IsNumber(price);
9635
9670
  for(var i=0;i<this.SymbolData.Data.Data.length;++i)
9636
9671
  {
9672
+ var outText=null;
9673
+ if (!bArrayText) outText=text;
9674
+ else if (bArrayText && text[i]) outText=text[i];
9675
+
9637
9676
  if (bSinglePrice)
9638
9677
  {
9639
- drawData[i]={ YValue:price, Text:text };
9678
+ drawData[i]={ YValue:price, Text:outText };
9640
9679
  }
9641
9680
  else
9642
9681
  {
9643
- if (IFrameSplitOperator.IsNumber(price[i])) drawData[i]={ YValue:price[i], Text:text };
9682
+ if (IFrameSplitOperator.IsNumber(price[i])) drawData[i]={ YValue:price[i], Text:outText };
9644
9683
  }
9645
9684
  }
9646
9685
  }
@@ -19838,6 +19877,7 @@ function JSExplainer(ast,option)
19838
19877
  ["STRCAT", { Name:"STRCAT", Param:{ Count:2 }, ToString:function(args) { return `字符串相加`; } } ],
19839
19878
  ["STRCAT6",{ Name:"STRCAT6", Param:{ Dynamic:true }, ToString:function(args) { return `字符串相加`; } } ],
19840
19879
  ["VARCAT", { Name:"VARCAT", Param:{ Count:2 }, ToString:function(args) { return `字符串相加`; } } ],
19880
+ ["VARCAT6", { Name:"VARCAT", Param:{ Dynamic:true }, ToString:function(args) { return `字符串相加`; } } ],
19841
19881
  ["STRSPACE", { Name:"STRSPACE", Param:{ Count:1 }, ToString:function(args) { return `字符串${args[0]}加一空格`; } } ],
19842
19882
  ["SUBSTR", { Name:"SUBSTR", Param:{ Count:3 }, ToString:function(args) { return `字符串${args[0]}中取一部分`; } } ],
19843
19883
  ["STRCMP", { Name:"STRCMP", Param:{ Count:2 }, ToString:function(args) { return `字符串${args[0]}和字符串${args[1]}比较`; } } ],
@@ -283,6 +283,49 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
283
283
  if (IFrameSplitOperator.IsNumber(item.Count)) klineChart.PriceGap.Count=item.Count;
284
284
  }
285
285
 
286
+ //设置十字光标
287
+ this.SetCorssCursorConfig=function(chart, option)
288
+ {
289
+ if (!option || !option.CorssCursorInfo) return;
290
+
291
+ var item=option.CorssCursorInfo;
292
+ if (IFrameSplitOperator.IsNumber(item.Left)) chart.ChartCorssCursor.ShowTextMode.Left=item.Left;
293
+ if (IFrameSplitOperator.IsNumber(item.Right)) chart.ChartCorssCursor.ShowTextMode.Right=item.Right;
294
+ if (IFrameSplitOperator.IsNumber(item.Bottom)) chart.ChartCorssCursor.ShowTextMode.Bottom=item.Bottom;
295
+
296
+ if (IFrameSplitOperator.IsBool(item.IsShowCorss)) chart.ChartCorssCursor.IsShowCorss=item.IsShowCorss;
297
+
298
+ if (IFrameSplitOperator.IsNumber(item.HPenType)) chart.ChartCorssCursor.HPenType=item.HPenType;
299
+ if (IFrameSplitOperator.IsNumber(item.VPenType)) chart.ChartCorssCursor.VPenType=item.VPenType;
300
+ if (IFrameSplitOperator.IsNumber(item.VLineType)) chart.ChartCorssCursor.VLineType=item.VLineType;
301
+
302
+ if (item.RightButton)
303
+ {
304
+ if (IFrameSplitOperator.IsBool(item.RightButton.Enable)) chart.ChartCorssCursor.RightButton.Enable=item.RightButton.Enable;
305
+ }
306
+
307
+ if (item.BottomButton)
308
+ {
309
+ var subItem=item.BottomButton;
310
+ if (IFrameSplitOperator.IsBool(subItem.Enable)) chart.ChartCorssCursor.BottomButton.Enable=subItem.Enable;
311
+ }
312
+
313
+ if (IFrameSplitOperator.IsNumber(item.PriceFormatType)) chart.ChartCorssCursor.StringFormatY.PriceFormatType=item.PriceFormatType;
314
+ if (IFrameSplitOperator.IsNumber(item.DataFormatType)) chart.ChartCorssCursor.StringFormatY.DataFormatType=item.DataFormatType;
315
+
316
+ if (IFrameSplitOperator.IsBool(item.EnableKeyboard)) chart.ChartCorssCursor.EnableKeyboard=item.EnableKeyboard;
317
+ if (IFrameSplitOperator.IsBool(item.EnableDBClick)) chart.ChartCorssCursor.EnableDBClick=item.EnableDBClick;
318
+
319
+ if (IFrameSplitOperator.IsBool(item.IsShowCorssPoint)) chart.ChartCorssCursor.CorssPointConfig.Enable=item.IsShowCorssPoint;
320
+
321
+ if (item.YDecimals) //Y轴文字小数位数
322
+ {
323
+ var subItem=item.YDecimals;
324
+ if (IFrameSplitOperator.IsNumber(subItem.Value)) chart.ChartCorssCursor.StringFormatY.DecimalsConfig.Value=subItem.Value;
325
+ if (IFrameSplitOperator.IsNumber(subItem.Type)) chart.ChartCorssCursor.StringFormatY.DecimalsConfig.Type=subItem.Type;
326
+ }
327
+ }
328
+
286
329
  //历史K线图
287
330
  this.CreateKLineChartContainer=function(option)
288
331
  {
@@ -536,48 +579,23 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
536
579
  if (option.IsCorssOnlyDrawKLine===true) chart.ChartCorssCursor.IsOnlyDrawKLine=option.IsCorssOnlyDrawKLine;
537
580
  if (option.CorssCursorTouchEnd===true) chart.CorssCursorTouchEnd = option.CorssCursorTouchEnd;
538
581
  if (option.IsClickShowCorssCursor==true) chart.IsClickShowCorssCursor=option.IsClickShowCorssCursor;
539
- if (option.CorssCursorInfo)
582
+ this.SetCorssCursorConfig(chart, option);
583
+ if (option.CorssCursorInfo) //十字光标K线上的属性设置
540
584
  {
541
585
  var item=option.CorssCursorInfo;
542
- if (!isNaN(option.CorssCursorInfo.Left)) chart.ChartCorssCursor.ShowTextMode.Left=option.CorssCursorInfo.Left;
543
- if (!isNaN(option.CorssCursorInfo.Right)) chart.ChartCorssCursor.ShowTextMode.Right=option.CorssCursorInfo.Right;
544
- if (!isNaN(option.CorssCursorInfo.Bottom)) chart.ChartCorssCursor.ShowTextMode.Bottom=option.CorssCursorInfo.Bottom;
545
- if (option.CorssCursorInfo.IsShowCorss===false) chart.ChartCorssCursor.IsShowCorss=option.CorssCursorInfo.IsShowCorss;
546
586
  if (IFrameSplitOperator.IsBool(item.IsShowClose)) chart.ChartCorssCursor.IsShowClose = item.IsShowClose; //Y轴显示收盘价
547
587
  if (IFrameSplitOperator.IsBool(item.IsOnlyDrawKLine)) chart.ChartCorssCursor.IsOnlyDrawKLine = item.IsOnlyDrawKLine; //Y轴显示收盘价
548
588
  if (option.CorssCursorInfo.PressTime) chart.PressTime=option.CorssCursorInfo.PressTime; //长按显示十字光标的时间
549
- if (IFrameSplitOperator.IsNumber(option.CorssCursorInfo.HPenType)) chart.ChartCorssCursor.HPenType=option.CorssCursorInfo.HPenType;
550
- if (option.CorssCursorInfo.VPenType>0) chart.ChartCorssCursor.VPenType=option.CorssCursorInfo.VPenType;
551
- if (IFrameSplitOperator.IsNumber(item.VLineType)) chart.ChartCorssCursor.VLineType=item.VLineType;
552
589
  if (option.CorssCursorInfo.DateFormatType>0) chart.ChartCorssCursor.StringFormatX.DateFormatType=option.CorssCursorInfo.DateFormatType;
553
590
  if (IFrameSplitOperator.IsBool(item.IsDrawXRangeBG)) chart.ChartCorssCursor.IsDrawXRangeBG=item.IsDrawXRangeBG;
554
591
  if (IFrameSplitOperator.IsBool(option.CorssCursorInfo.IsFixXLastTime)) chart.ChartCorssCursor.IsFixXLastTime=option.CorssCursorInfo.IsFixXLastTime;
555
592
  if (IFrameSplitOperator.IsNumber(item.TextHeight)) chart.ChartCorssCursor.TextHeight=item.TextHeight;
556
-
557
- if (item.RightButton)
558
- {
559
- if (IFrameSplitOperator.IsBool(item.RightButton.Enable)) chart.ChartCorssCursor.RightButton.Enable=item.RightButton.Enable;
560
- }
561
-
562
- if (item.BottomButton)
563
- {
564
- var subItem=item.BottomButton;
565
- if (IFrameSplitOperator.IsBool(subItem.Enable)) chart.ChartCorssCursor.BottomButton.Enable=subItem.Enable;
566
- }
567
-
568
- if (IFrameSplitOperator.IsNumber(item.PriceFormatType)) chart.ChartCorssCursor.StringFormatY.PriceFormatType=item.PriceFormatType;
569
- if (IFrameSplitOperator.IsNumber(item.DataFormatType)) chart.ChartCorssCursor.StringFormatY.DataFormatType=item.DataFormatType;
570
- if (IFrameSplitOperator.IsBool(item.EnableKeyboard)) chart.ChartCorssCursor.EnableKeyboard=item.EnableKeyboard;
571
- if (IFrameSplitOperator.IsBool(item.EnableDBClick)) chart.ChartCorssCursor.EnableDBClick=item.EnableDBClick;
572
-
573
- if (IFrameSplitOperator.IsBool(item.IsShowCorssPoint)) chart.ChartCorssCursor.CorssPointConfig.Enable=item.IsShowCorssPoint;
574
593
 
575
594
  if (item.RangeIncrease)
576
595
  {
577
596
  var subItem=item.RangeIncrease;
578
597
  if (IFrameSplitOperator.IsBool(subItem.IsShow)) chart.ChartCorssCursor.StringFormatX.RangeIncrease.IsShow=subItem.IsShow;
579
598
  if (IFrameSplitOperator.IsNumber(subItem.Formula)) chart.ChartCorssCursor.StringFormatX.RangeIncrease.Formula=subItem.Formula;
580
-
581
599
  }
582
600
  }
583
601
 
@@ -1105,39 +1123,15 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
1105
1123
  if (option.PageInfo) chart.SetPageInfo(option.PageInfo);
1106
1124
 
1107
1125
  chart.Create(windowsCount,option); //创建子窗口
1108
-
1109
- if (option.CorssCursorInfo)
1126
+ this.SetCorssCursorConfig(chart, option);
1127
+ if (option.CorssCursorInfo) //分时图十字光标属性设置
1110
1128
  {
1111
1129
  var item=option.CorssCursorInfo;
1112
- if (!isNaN(option.CorssCursorInfo.Left)) chart.ChartCorssCursor.ShowTextMode.Left=option.CorssCursorInfo.Left;
1113
- if (!isNaN(option.CorssCursorInfo.Right)) chart.ChartCorssCursor.ShowTextMode.Right=option.CorssCursorInfo.Right;
1114
- if (!isNaN(option.CorssCursorInfo.Bottom)) chart.ChartCorssCursor.ShowTextMode.Bottom=option.CorssCursorInfo.Bottom;
1115
- if (option.CorssCursorInfo.IsShowCorss===false) chart.ChartCorssCursor.IsShowCorss=option.CorssCursorInfo.IsShowCorss;
1130
+
1116
1131
  if (option.CorssCursorInfo.RightTextFormat>0) chart.ChartCorssCursor.TextFormat.Right=option.CorssCursorInfo.RightTextFormat;
1117
1132
  if (option.CorssCursorInfo.IsOnlyDrawMinute == true) chart.ChartCorssCursor.IsOnlyDrawMinute = option.CorssCursorInfo.IsOnlyDrawMinute; //Y轴显示收盘价
1118
1133
  if (IFrameSplitOperator.IsBool(option.CorssCursorInfo.IsFixXLastTime)) chart.ChartCorssCursor.IsFixXLastTime=option.CorssCursorInfo.IsFixXLastTime;
1119
1134
 
1120
- if (item.RightButton)
1121
- {
1122
- if (IFrameSplitOperator.IsBool(item.RightButton.Enable)) chart.ChartCorssCursor.RightButton.Enable=item.RightButton.Enable;
1123
- }
1124
-
1125
- if (item.BottomButton)
1126
- {
1127
- var subItem=item.BottomButton;
1128
- if (IFrameSplitOperator.IsBool(subItem.Enable)) chart.ChartCorssCursor.BottomButton.Enable=subItem.Enable;
1129
- }
1130
-
1131
- if (IFrameSplitOperator.IsNumber(item.PriceFormatType)) chart.ChartCorssCursor.StringFormatY.PriceFormatType=item.PriceFormatType;
1132
- if (IFrameSplitOperator.IsNumber(item.DataFormatType)) chart.ChartCorssCursor.StringFormatY.DataFormatType=item.DataFormatType;
1133
-
1134
- if (IFrameSplitOperator.IsNumber(item.HPenType)) chart.ChartCorssCursor.HPenType=item.HPenType;
1135
- if (IFrameSplitOperator.IsNumber(item.VPenType)) chart.ChartCorssCursor.VPenType=item.VPenType;
1136
- if (IFrameSplitOperator.IsBool(item.EnableKeyboard)) chart.ChartCorssCursor.EnableKeyboard=item.EnableKeyboard;
1137
- if (IFrameSplitOperator.IsBool(item.EnableDBClick)) chart.ChartCorssCursor.EnableDBClick=item.EnableDBClick;
1138
- if (IFrameSplitOperator.IsBool(item.IsShowCorssPoint)) chart.ChartCorssCursor.CorssPointConfig.Enable=item.IsShowCorssPoint;
1139
- if (IFrameSplitOperator.IsNumber(item.VLineType)) chart.ChartCorssCursor.VLineType=item.VLineType;
1140
-
1141
1135
  if (item.TextStyle)
1142
1136
  {
1143
1137
  if (item.TextStyle.Right) //右侧输出样式
@@ -3053,6 +3047,7 @@ var JSCHART_DATA_FIELD_ID=
3053
3047
  KLINE_COLOR_DATA:66, //K线自定义颜色数据
3054
3048
  KLINE_DAY_EXTENDDATA:25,
3055
3049
  KLINE_MINUTE_EXTENDDATA:25,
3050
+ KLINE_TICK_EXTENDDATA:25,
3056
3051
 
3057
3052
  //OrderBook Heatmap
3058
3053
  KLINE_HEATMAP:67,
@@ -60796,6 +60791,7 @@ function HQPriceStringFormat()
60796
60791
 
60797
60792
  this.PriceFormatType=0; //主窗口格式 0=默认 1=科学计数
60798
60793
  this.DataFormatType=0; //副图指标格式 0=默认 1=科学计数
60794
+ this.DecimalsConfig={ Value:2, Type:0 }; //小数设置, Value:小数位数 , Type: 0=默认 1=跟指标标题一致
60799
60795
 
60800
60796
  this.GetEventCallback
60801
60797
 
@@ -60894,7 +60890,7 @@ function HQPriceStringFormat()
60894
60890
  if (!this.Value) return false;
60895
60891
 
60896
60892
  this.PercentageText=null;
60897
- var defaultfloatPrecision=2; //价格小数位数
60893
+ var defaultfloatPrecision=this.DecimalsConfig.Value; //价格小数位数
60898
60894
  if (this.FrameID==0) //第1个窗口显示原始价格
60899
60895
  {
60900
60896
  var defaultfloatPrecision=GetfloatPrecision(this.Symbol);
@@ -60943,6 +60939,7 @@ function HQPriceStringFormat()
60943
60939
  }
60944
60940
  else if (this.FrameID==1)
60945
60941
  {
60942
+ defaultfloatPrecision=this.GetIndexTitleFloatPrecision(this.FrameID);
60946
60943
  if (this.DataFormatType==1)
60947
60944
  {
60948
60945
  this.Text=IFrameSplitOperator.FormatValueThousandsString(this.Value,defaultfloatPrecision);
@@ -60975,6 +60972,7 @@ function HQPriceStringFormat()
60975
60972
  }
60976
60973
  else
60977
60974
  {
60975
+ defaultfloatPrecision=this.GetIndexTitleFloatPrecision(this.FrameID);
60978
60976
  if (this.DataFormatType==1) this.Text=IFrameSplitOperator.FormatValueThousandsString(this.Value,defaultfloatPrecision);
60979
60977
  else this.Text=IFrameSplitOperator.FormatValueString(this.Value,defaultfloatPrecision,this.LanguageID);
60980
60978
  if (IFrameSplitOperator.IsNumber(this.RValue)) this.RText=IFrameSplitOperator.FormatValueString(this.RValue,defaultfloatPrecision,this.LanguageID);
@@ -61020,6 +61018,23 @@ function HQPriceStringFormat()
61020
61018
  return true;
61021
61019
  }
61022
61020
 
61021
+ //获取指标标题小数位数
61022
+ this.GetIndexTitleFloatPrecision=function(frameID)
61023
+ {
61024
+ var dec=this.DecimalsConfig.Value;
61025
+ if (this.DecimalsConfig.Type===0) return dec;
61026
+
61027
+ if (frameID<0) return dec;
61028
+ if (!this.HQChart) return dec;
61029
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.HQChart.WindowIndex)) return dec;
61030
+ var item=this.HQChart.WindowIndex[frameID];
61031
+ if (!item) return dec;
61032
+
61033
+ if (IFrameSplitOperator.IsNumber(item.FloatPrecision)) dec=item.FloatPrecision;
61034
+
61035
+ return dec;
61036
+ }
61037
+
61023
61038
  //深度图刻度
61024
61039
  this.GetExtendPaintData=function(floatPrecision)
61025
61040
  {
@@ -86176,14 +86191,26 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
86176
86191
  {
86177
86192
  var self=this;
86178
86193
  var start=0;
86179
- if (this.SourceData && this.SourceData.Data) start=this.SourceData.Data.length;
86194
+ var hisData=this.GetKData();
86195
+ var dateRange=hisData.GetDateRange();
86196
+
86180
86197
  if (this.NetworkFilter)
86181
86198
  {
86199
+ var kLineDrawType=this.GetKLineDrawType();
86182
86200
  var obj=
86183
86201
  {
86184
86202
  Name:'KLineChartContainer::RequestTickRealtimeData', //类名::
86185
86203
  Explain:'当天最新分笔数据',
86186
- Request:{ Url:self.TickApiUrl, Data:{ symbol: self.Symbol, start:start, end:start+1000 }, Type:'POST' },
86204
+ Request:
86205
+ {
86206
+ Url:self.TickApiUrl,
86207
+ Data:
86208
+ {
86209
+ symbol:self.Symbol, period:this.Period, right:this.Right,
86210
+ dateRange:dateRange, klineDrawType:kLineDrawType
86211
+ },
86212
+ Type:'POST'
86213
+ },
86187
86214
  Self:this,
86188
86215
  PreventDefault:false
86189
86216
  };
@@ -86196,29 +86223,14 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
86196
86223
 
86197
86224
  if (obj.PreventDefault==true) return; //已被上层替换,不调用默认的网络请求
86198
86225
  }
86199
-
86200
- JSNetwork.HttpRequest({
86201
- url: self.TickApiUrl,
86202
- data:{"symbol":self.Symbol, start:start-10, end:start+1000 },
86203
- type:"post",
86204
- dataType: "json",
86205
- async:true,
86206
- success: function (data)
86207
- {
86208
- self.ChartSplashPaint.EnableSplash(false);
86209
- self.RecvTickRealtimeData(data);
86210
- self.AutoUpdate();
86211
- }
86212
- });
86213
86226
  }
86214
86227
 
86215
86228
  this.RecvTickRealtimeData=function(data)
86216
86229
  {
86217
- if (data.ver==2.0)
86218
- var aryDayData=KLineChartContainer.JsonDataToTickDataV2(data); //增量数据
86219
- else
86220
- var aryDayData=KLineChartContainer.JsonDataToTickData(data); //增量数据
86221
- if (!aryDayData || aryDayData.length<=0) return;
86230
+ var aryDayData=null;
86231
+ if (data.ver==2.0) aryDayData=KLineChartContainer.JsonDataToTickDataV2(data); //增量数据
86232
+ else aryDayData=KLineChartContainer.JsonDataToTickData(data); //增量数据
86233
+ if (!IFrameSplitOperator.IsNonEmptyArray(aryDayData)) return;
86222
86234
 
86223
86235
  var redraw=false; //强制重绘
86224
86236
  if (data.redraw==true) redraw=true;
@@ -86228,7 +86240,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
86228
86240
  var lastTime=0;
86229
86241
  if (source.length>0) lastTime=source[source.length-1].Time;
86230
86242
  var newCount=0;
86231
- for(var i in aryDayData)
86243
+ for(var i=0; i<aryDayData.length; ++i)
86232
86244
  {
86233
86245
  var item=aryDayData[i];
86234
86246
  if (item.Time<=lastTime) continue;
@@ -91213,20 +91225,24 @@ KLineChartContainer.JsonDataToTickDataV2=function(data)
91213
91225
  {
91214
91226
  var aryDayData=[];
91215
91227
  if (!IFrameSplitOperator.IsNonEmptyArray(data.data)) return aryDayData;
91216
-
91228
+ var extendDataIndex=JSCHART_DATA_FIELD_ID.KLINE_TICK_EXTENDDATA;
91217
91229
  for(var i=0;i<data.data.length;++i)
91218
91230
  {
91219
91231
  var item = new HistoryData();
91220
- var tick=data.data[i]; //[ date, time, yClose, price, extendData]
91232
+ var tick=data.data[i]; //[ date, time, yClose, price, vol, amount, flag,]
91221
91233
  if (!tick) continue;
91222
91234
 
91223
91235
  item.Date = tick[0];
91224
91236
  item.Time=tick[1];
91225
91237
  item.YClose = tick[2];
91226
91238
  item.Low=item.High=item.Close=item.Open = tick[3];
91239
+ item.Vol = tick[4]; //原始单位股
91240
+ item.Amount = tick[5];
91241
+ item.Flag=tick[6];
91242
+
91227
91243
  aryDayData.push(item);
91228
91244
 
91229
- if (tick[4]) item.ExtendData=tick[4];
91245
+ if (tick[extendDataIndex]) item.ExtendData=tick[extendDataIndex];
91230
91246
  }
91231
91247
 
91232
91248
  return aryDayData;
@@ -8036,7 +8036,7 @@ function ChartReport()
8036
8036
 
8037
8037
  this.FormaTimeDrawInfo=function(column, stock, drawInfo, data)
8038
8038
  {
8039
- if (!IFrameSplitOperator.IsNumber(stock.Time)) return;
8039
+ if (!stock || !IFrameSplitOperator.IsNumber(stock.Time)) return;
8040
8040
 
8041
8041
  if (column.ValueType==0) //0=hhmm 1=hhmmss 2=hhmmss.fff
8042
8042
  {
@@ -8054,7 +8054,7 @@ function ChartReport()
8054
8054
 
8055
8055
  this.FormaDateDrawInfo=function(column, stock, drawInfo, data)
8056
8056
  {
8057
- if (!IFrameSplitOperator.IsNumber(stock.Date)) return;
8057
+ if (!stock || !IFrameSplitOperator.IsNumber(stock.Date)) return;
8058
8058
 
8059
8059
  if (column.FormatType==0)
8060
8060
  drawInfo.Text=IFrameSplitOperator.FormatDateString(stock.Date,"YYYY-MM-DD");
@@ -62,6 +62,15 @@ HQData.NetworkFilter=function(data, callback)
62
62
  HQData.RequestMinuteRealtimeData(data,callback);
63
63
  break;
64
64
 
65
+ case "KLineChartContainer::RequestTickData":
66
+ //HQChart使用教程30-K线图如何对接第3方数据5-逐笔数据
67
+ HQData.RequestKLineTickData(data,callback);
68
+ break;
69
+ case "KLineChartContainer::RequestTickRealtimeData":
70
+ //HQChart使用教程30-K线图如何对接第3方数据16-轮询增量更新逐笔数据
71
+ HQData.RequestTickRealtimeData(data,callback);
72
+ break;
73
+
65
74
  case "JSSymbolData::GetVariantData": //额外的变量数据
66
75
  //HQChart使用教程30-K线图如何对接第3方数据29-板块字符串函数数据[GNBLOCK,GNBLOCKNUM......]
67
76
  HQData.RequestIndexVariantData(data,callback);
@@ -1230,6 +1239,50 @@ HQData.RequestMinuteRealtimeData=function(data,callback)
1230
1239
  }
1231
1240
 
1232
1241
 
1242
+ HQData.RequestKLineTickData=function(data,callback)
1243
+ {
1244
+ data.PreventDefault=true;
1245
+ var symbol=data.Request.Data.symbol;
1246
+ console.log(`[HQData::RequestKLineTickData] Symbol=${symbol}`);
1247
+
1248
+ var hqchartData={ code:0, symbol:symbol, name:symbol, data:[], ver:2.0 };
1249
+ for(var i=0;i<MSECOND_TEST_DATA.data.length-100;++i)
1250
+ {
1251
+ var item=MSECOND_TEST_DATA.data[i];
1252
+ var flag=HQData.GetRandomTestData(1,10)%3;
1253
+ var kItem=[item[0], parseInt(item[8]/1000), item[1], item[5], item[6]*1000, item[7], flag ];
1254
+ hqchartData.data.push(kItem);
1255
+ }
1256
+
1257
+ callback(hqchartData);
1258
+ }
1259
+
1260
+ HQData.RequestTickRealtimeData=function(data,callback)
1261
+ {
1262
+ data.PreventDefault=true;
1263
+ var symbol=data.Request.Data.symbol; //请求的股票代码
1264
+ var dateRange=data.Request.Data.dateRange;
1265
+ var endTime=dateRange.End.Time;
1266
+ var endDate=dateRange.End.Date;
1267
+
1268
+ var hqchartData={ code:0, symbol:symbol, name:symbol, data:[], ver:2.0 };
1269
+ for(var i=0;i<MSECOND_TEST_DATA.data.length;++i)
1270
+ {
1271
+ var item=MSECOND_TEST_DATA.data[i];
1272
+ var time=parseInt(item[8]/1000);
1273
+ if (time>endTime)
1274
+ {
1275
+ var flag=HQData.GetRandomTestData(1,10)%3;
1276
+ var kItem=[item[0], time, item[1], item[5], item[6]*1000, item[7], flag ];
1277
+ hqchartData.data.push(kItem);
1278
+ break;
1279
+ }
1280
+ }
1281
+
1282
+ callback(hqchartData);
1283
+ }
1284
+
1285
+
1233
1286
  HQData.RequestIndexVariantData=function(data,callback)
1234
1287
  {
1235
1288
  data.PreventDefault=true;
@@ -3897,7 +3950,13 @@ HQData.APIIndex_KLINE_TABLE=function(data, callback)
3897
3950
  DrawType:'KLINE_TABLE',
3898
3951
  DrawData:[ ] , //数据 [ [ { Text, Color: BGColor }, ...... ], [],]
3899
3952
  RowCount:4,
3900
- 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"}],
3953
+ RowName:
3954
+ [
3955
+ {Name:"账户[*9993]",TextAlign:"center", Color:"rgb(124, 252, 0)"},
3956
+ {Name:"账户[*8881]",TextAlign:"center", Color:"rgb(238, 99, 9)", BGColor:"rgb(100,0,200)" },
3957
+ {Name:"账户3",TextAlign:"center"},
3958
+ {Name:"账户4", TextAlign:"center"}
3959
+ ],
3901
3960
 
3902
3961
  Config:
3903
3962
  {
@@ -3908,7 +3967,9 @@ HQData.APIIndex_KLINE_TABLE=function(data, callback)
3908
3967
  RowNamePosition:3,
3909
3968
  TextFont:{ Family:'微软雅黑' , FontMaxSize:14*GetDevicePixelRatio(), },
3910
3969
  RowHeightType:0,
3911
- Style:1
3970
+ Style:1,
3971
+
3972
+ AryBorderColor:[null, "rgb(100,20,200)", "rgb(200,0,100)"]
3912
3973
  }
3913
3974
  },
3914
3975