hqchart 1.1.15360 → 1.1.15368

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.
@@ -3053,6 +3053,7 @@ var JSCHART_DATA_FIELD_ID=
3053
3053
  KLINE_COLOR_DATA:66, //K线自定义颜色数据
3054
3054
  KLINE_DAY_EXTENDDATA:25,
3055
3055
  KLINE_MINUTE_EXTENDDATA:25,
3056
+ KLINE_TICK_EXTENDDATA:25,
3056
3057
 
3057
3058
  //OrderBook Heatmap
3058
3059
  KLINE_HEATMAP:67,
@@ -7671,6 +7672,23 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7671
7672
  this.LastPoint.FrameID=frameID;
7672
7673
  if (IFrameSplitOperator.IsNumber(frameID) && frameID>=0) //在K线内部移动,调整K线索引
7673
7674
  this.CursorIndex=this.Frame.GetXData(x);
7675
+
7676
+ if (this.TryMouseMoveChartTooltipData)
7677
+ {
7678
+ //DrawDynamic:{ Enable, Option: }
7679
+ var data={ e:e, X:x, Y:y, Draw:false, DrawDynamic:null, PreventDefault:false, MouseStatus:null };
7680
+ this.TryMouseMoveChartTooltipData(data, this);
7681
+
7682
+ if (data.MouseStatus) mouseStatus=data.MouseStatus;
7683
+
7684
+ if (data.PreventDefault)
7685
+ {
7686
+ if (data.Draw) this.Draw();
7687
+ if (data.DrawDynamic && data.DrawDynamic.Enable) this.DrawDynamicInfo(data.DrawDynamic.Option);
7688
+ this.SetCursor(mouseStatus);
7689
+ return;
7690
+ }
7691
+ }
7674
7692
 
7675
7693
 
7676
7694
  if (this.EnableBorderDrag && this.Frame && !this.CurrentChartDrawPicture)
@@ -34879,7 +34897,7 @@ function ChartKLineTable()
34879
34897
  }
34880
34898
  }
34881
34899
 
34882
- if (rtBG.Width>5)
34900
+ //if (rtBG.Width>5)
34883
34901
  {
34884
34902
  this.AryCellRect.push({ Item:{ Cell:item, Colunm:data, RowIndex:i, SubCell:subItem, SubIndex:j, Tooltip:subItem.Tooltip, Type:2 }, Rect:rtSubBG });
34885
34903
  }
@@ -34920,7 +34938,7 @@ function ChartKLineTable()
34920
34938
  }
34921
34939
  }
34922
34940
 
34923
- if (rtBG.Width>5)
34941
+ //if (rtBG.Width>5)
34924
34942
  {
34925
34943
  this.AryCellRect.push({ Item:{ Cell:item, Colunm:data, RowIndex:i, Tooltip:item.Tooltip, Type:1 }, Rect:rtBG });
34926
34944
  }
@@ -86159,14 +86177,26 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
86159
86177
  {
86160
86178
  var self=this;
86161
86179
  var start=0;
86162
- if (this.SourceData && this.SourceData.Data) start=this.SourceData.Data.length;
86180
+ var hisData=this.GetKData();
86181
+ var dateRange=hisData.GetDateRange();
86182
+
86163
86183
  if (this.NetworkFilter)
86164
86184
  {
86185
+ var kLineDrawType=this.GetKLineDrawType();
86165
86186
  var obj=
86166
86187
  {
86167
86188
  Name:'KLineChartContainer::RequestTickRealtimeData', //类名::
86168
86189
  Explain:'当天最新分笔数据',
86169
- Request:{ Url:self.TickApiUrl, Data:{ symbol: self.Symbol, start:start, end:start+1000 }, Type:'POST' },
86190
+ Request:
86191
+ {
86192
+ Url:self.TickApiUrl,
86193
+ Data:
86194
+ {
86195
+ symbol:self.Symbol, period:this.Period, right:this.Right,
86196
+ dateRange:dateRange, klineDrawType:kLineDrawType
86197
+ },
86198
+ Type:'POST'
86199
+ },
86170
86200
  Self:this,
86171
86201
  PreventDefault:false
86172
86202
  };
@@ -86179,29 +86209,14 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
86179
86209
 
86180
86210
  if (obj.PreventDefault==true) return; //已被上层替换,不调用默认的网络请求
86181
86211
  }
86182
-
86183
- JSNetwork.HttpRequest({
86184
- url: self.TickApiUrl,
86185
- data:{"symbol":self.Symbol, start:start-10, end:start+1000 },
86186
- type:"post",
86187
- dataType: "json",
86188
- async:true,
86189
- success: function (data)
86190
- {
86191
- self.ChartSplashPaint.EnableSplash(false);
86192
- self.RecvTickRealtimeData(data);
86193
- self.AutoUpdate();
86194
- }
86195
- });
86196
86212
  }
86197
86213
 
86198
86214
  this.RecvTickRealtimeData=function(data)
86199
86215
  {
86200
- if (data.ver==2.0)
86201
- var aryDayData=KLineChartContainer.JsonDataToTickDataV2(data); //增量数据
86202
- else
86203
- var aryDayData=KLineChartContainer.JsonDataToTickData(data); //增量数据
86204
- if (!aryDayData || aryDayData.length<=0) return;
86216
+ var aryDayData=null;
86217
+ if (data.ver==2.0) aryDayData=KLineChartContainer.JsonDataToTickDataV2(data); //增量数据
86218
+ else aryDayData=KLineChartContainer.JsonDataToTickData(data); //增量数据
86219
+ if (!IFrameSplitOperator.IsNonEmptyArray(aryDayData)) return;
86205
86220
 
86206
86221
  var redraw=false; //强制重绘
86207
86222
  if (data.redraw==true) redraw=true;
@@ -86211,7 +86226,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
86211
86226
  var lastTime=0;
86212
86227
  if (source.length>0) lastTime=source[source.length-1].Time;
86213
86228
  var newCount=0;
86214
- for(var i in aryDayData)
86229
+ for(var i=0; i<aryDayData.length; ++i)
86215
86230
  {
86216
86231
  var item=aryDayData[i];
86217
86232
  if (item.Time<=lastTime) continue;
@@ -91196,20 +91211,24 @@ KLineChartContainer.JsonDataToTickDataV2=function(data)
91196
91211
  {
91197
91212
  var aryDayData=[];
91198
91213
  if (!IFrameSplitOperator.IsNonEmptyArray(data.data)) return aryDayData;
91199
-
91214
+ var extendDataIndex=JSCHART_DATA_FIELD_ID.KLINE_TICK_EXTENDDATA;
91200
91215
  for(var i=0;i<data.data.length;++i)
91201
91216
  {
91202
91217
  var item = new HistoryData();
91203
- var tick=data.data[i]; //[ date, time, yClose, price, extendData]
91218
+ var tick=data.data[i]; //[ date, time, yClose, price, vol, amount, flag,]
91204
91219
  if (!tick) continue;
91205
91220
 
91206
91221
  item.Date = tick[0];
91207
91222
  item.Time=tick[1];
91208
91223
  item.YClose = tick[2];
91209
91224
  item.Low=item.High=item.Close=item.Open = tick[3];
91225
+ item.Vol = tick[4]; //原始单位股
91226
+ item.Amount = tick[5];
91227
+ item.Flag=tick[6];
91228
+
91210
91229
  aryDayData.push(item);
91211
91230
 
91212
- if (tick[4]) item.ExtendData=tick[4];
91231
+ if (tick[extendDataIndex]) item.ExtendData=tick[extendDataIndex];
91213
91232
  }
91214
91233
 
91215
91234
  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
 
@@ -7149,6 +7149,7 @@ var JSCHART_DATA_FIELD_ID=
7149
7149
  KLINE_COLOR_DATA:66, //K线自定义颜色数据
7150
7150
  KLINE_DAY_EXTENDDATA:25,
7151
7151
  KLINE_MINUTE_EXTENDDATA:25,
7152
+ KLINE_TICK_EXTENDDATA:25,
7152
7153
 
7153
7154
  //OrderBook Heatmap
7154
7155
  KLINE_HEATMAP:67,
@@ -11767,6 +11768,23 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11767
11768
  this.LastPoint.FrameID=frameID;
11768
11769
  if (IFrameSplitOperator.IsNumber(frameID) && frameID>=0) //在K线内部移动,调整K线索引
11769
11770
  this.CursorIndex=this.Frame.GetXData(x);
11771
+
11772
+ if (this.TryMouseMoveChartTooltipData)
11773
+ {
11774
+ //DrawDynamic:{ Enable, Option: }
11775
+ var data={ e:e, X:x, Y:y, Draw:false, DrawDynamic:null, PreventDefault:false, MouseStatus:null };
11776
+ this.TryMouseMoveChartTooltipData(data, this);
11777
+
11778
+ if (data.MouseStatus) mouseStatus=data.MouseStatus;
11779
+
11780
+ if (data.PreventDefault)
11781
+ {
11782
+ if (data.Draw) this.Draw();
11783
+ if (data.DrawDynamic && data.DrawDynamic.Enable) this.DrawDynamicInfo(data.DrawDynamic.Option);
11784
+ this.SetCursor(mouseStatus);
11785
+ return;
11786
+ }
11787
+ }
11770
11788
 
11771
11789
 
11772
11790
  if (this.EnableBorderDrag && this.Frame && !this.CurrentChartDrawPicture)
@@ -38975,7 +38993,7 @@ function ChartKLineTable()
38975
38993
  }
38976
38994
  }
38977
38995
 
38978
- if (rtBG.Width>5)
38996
+ //if (rtBG.Width>5)
38979
38997
  {
38980
38998
  this.AryCellRect.push({ Item:{ Cell:item, Colunm:data, RowIndex:i, SubCell:subItem, SubIndex:j, Tooltip:subItem.Tooltip, Type:2 }, Rect:rtSubBG });
38981
38999
  }
@@ -39016,7 +39034,7 @@ function ChartKLineTable()
39016
39034
  }
39017
39035
  }
39018
39036
 
39019
- if (rtBG.Width>5)
39037
+ //if (rtBG.Width>5)
39020
39038
  {
39021
39039
  this.AryCellRect.push({ Item:{ Cell:item, Colunm:data, RowIndex:i, Tooltip:item.Tooltip, Type:1 }, Rect:rtBG });
39022
39040
  }
@@ -90255,14 +90273,26 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
90255
90273
  {
90256
90274
  var self=this;
90257
90275
  var start=0;
90258
- if (this.SourceData && this.SourceData.Data) start=this.SourceData.Data.length;
90276
+ var hisData=this.GetKData();
90277
+ var dateRange=hisData.GetDateRange();
90278
+
90259
90279
  if (this.NetworkFilter)
90260
90280
  {
90281
+ var kLineDrawType=this.GetKLineDrawType();
90261
90282
  var obj=
90262
90283
  {
90263
90284
  Name:'KLineChartContainer::RequestTickRealtimeData', //类名::
90264
90285
  Explain:'当天最新分笔数据',
90265
- Request:{ Url:self.TickApiUrl, Data:{ symbol: self.Symbol, start:start, end:start+1000 }, Type:'POST' },
90286
+ Request:
90287
+ {
90288
+ Url:self.TickApiUrl,
90289
+ Data:
90290
+ {
90291
+ symbol:self.Symbol, period:this.Period, right:this.Right,
90292
+ dateRange:dateRange, klineDrawType:kLineDrawType
90293
+ },
90294
+ Type:'POST'
90295
+ },
90266
90296
  Self:this,
90267
90297
  PreventDefault:false
90268
90298
  };
@@ -90275,29 +90305,14 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
90275
90305
 
90276
90306
  if (obj.PreventDefault==true) return; //已被上层替换,不调用默认的网络请求
90277
90307
  }
90278
-
90279
- JSNetwork.HttpRequest({
90280
- url: self.TickApiUrl,
90281
- data:{"symbol":self.Symbol, start:start-10, end:start+1000 },
90282
- type:"post",
90283
- dataType: "json",
90284
- async:true,
90285
- success: function (data)
90286
- {
90287
- self.ChartSplashPaint.EnableSplash(false);
90288
- self.RecvTickRealtimeData(data);
90289
- self.AutoUpdate();
90290
- }
90291
- });
90292
90308
  }
90293
90309
 
90294
90310
  this.RecvTickRealtimeData=function(data)
90295
90311
  {
90296
- if (data.ver==2.0)
90297
- var aryDayData=KLineChartContainer.JsonDataToTickDataV2(data); //增量数据
90298
- else
90299
- var aryDayData=KLineChartContainer.JsonDataToTickData(data); //增量数据
90300
- if (!aryDayData || aryDayData.length<=0) return;
90312
+ var aryDayData=null;
90313
+ if (data.ver==2.0) aryDayData=KLineChartContainer.JsonDataToTickDataV2(data); //增量数据
90314
+ else aryDayData=KLineChartContainer.JsonDataToTickData(data); //增量数据
90315
+ if (!IFrameSplitOperator.IsNonEmptyArray(aryDayData)) return;
90301
90316
 
90302
90317
  var redraw=false; //强制重绘
90303
90318
  if (data.redraw==true) redraw=true;
@@ -90307,7 +90322,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
90307
90322
  var lastTime=0;
90308
90323
  if (source.length>0) lastTime=source[source.length-1].Time;
90309
90324
  var newCount=0;
90310
- for(var i in aryDayData)
90325
+ for(var i=0; i<aryDayData.length; ++i)
90311
90326
  {
90312
90327
  var item=aryDayData[i];
90313
90328
  if (item.Time<=lastTime) continue;
@@ -95292,20 +95307,24 @@ KLineChartContainer.JsonDataToTickDataV2=function(data)
95292
95307
  {
95293
95308
  var aryDayData=[];
95294
95309
  if (!IFrameSplitOperator.IsNonEmptyArray(data.data)) return aryDayData;
95295
-
95310
+ var extendDataIndex=JSCHART_DATA_FIELD_ID.KLINE_TICK_EXTENDDATA;
95296
95311
  for(var i=0;i<data.data.length;++i)
95297
95312
  {
95298
95313
  var item = new HistoryData();
95299
- var tick=data.data[i]; //[ date, time, yClose, price, extendData]
95314
+ var tick=data.data[i]; //[ date, time, yClose, price, vol, amount, flag,]
95300
95315
  if (!tick) continue;
95301
95316
 
95302
95317
  item.Date = tick[0];
95303
95318
  item.Time=tick[1];
95304
95319
  item.YClose = tick[2];
95305
95320
  item.Low=item.High=item.Close=item.Open = tick[3];
95321
+ item.Vol = tick[4]; //原始单位股
95322
+ item.Amount = tick[5];
95323
+ item.Flag=tick[6];
95324
+
95306
95325
  aryDayData.push(item);
95307
95326
 
95308
- if (tick[4]) item.ExtendData=tick[4];
95327
+ if (tick[extendDataIndex]) item.ExtendData=tick[extendDataIndex];
95309
95328
  }
95310
95329
 
95311
95330
  return aryDayData;
@@ -118376,6 +118395,32 @@ function JSAlgorithm(errorHandler,symbolData)
118376
118395
  return result;
118377
118396
  }
118378
118397
 
118398
+ //VARCAT6(A,B,C,D,E,F):将六个字符串A,B,C,D,E,F相加成一个字符串.
118399
+ //每个数据都进行序列运算,若用于多股选股,建议换用STRCAT6
118400
+ //用法: VARCAT6('多头',VAR2STR(C,2),' ',VAR2STR(O,2),' ',VAR2STR(MA(C,5),2))将六个字符串相加成一个字符串
118401
+ this.VARCAT6=function(data,data2,data3,data4,data5)
118402
+ {
118403
+ var aryData=[];
118404
+ if (Array.isArray(data) || IFrameSplitOperator.IsString(data)) aryData.push(data);
118405
+ if (Array.isArray(data2) || IFrameSplitOperator.IsString(data2)) aryData.push(data2);
118406
+ if (Array.isArray(data3) || IFrameSplitOperator.IsString(data3)) aryData.push(data3);
118407
+ if (Array.isArray(data4) || IFrameSplitOperator.IsString(data4)) aryData.push(data4);
118408
+ if (Array.isArray(data5) || IFrameSplitOperator.IsString(data5)) aryData.push(data5);
118409
+
118410
+ if (!IFrameSplitOperator.IsNonEmptyArray(aryData)) return [];
118411
+ if (aryData.length==1) return data;
118412
+
118413
+ var tempData=this.VARCAT(aryData[0], aryData[1]);
118414
+ var result=tempData;
118415
+ for(var i=2;i<aryData.length;++i)
118416
+ {
118417
+ result=this.VARCAT(tempData,aryData[i]);
118418
+ tempData=result;
118419
+ }
118420
+
118421
+ return result;
118422
+ }
118423
+
118379
118424
  //FINDSTR(A,B):在字符串A中查找字符串B,如果找到返回1,否则返回0.
118380
118425
  //用法: FINDSTR('多头开仓','开仓')在字符串'多头开仓'中查找字符串'开仓',返回1
118381
118426
  this.FINDSTR=function(data, data2)
@@ -118502,6 +118547,8 @@ function JSAlgorithm(errorHandler,symbolData)
118502
118547
  this.VAR2STR=function(data,n)
118503
118548
  {
118504
118549
  var result=[];
118550
+ var dec=0;
118551
+ if (IFrameSplitOperator.IsNumber(n)) dec=n;
118505
118552
  if (Array.isArray(data))
118506
118553
  {
118507
118554
  for(var i=0;i<data.length;++i)
@@ -118509,13 +118556,13 @@ function JSAlgorithm(errorHandler,symbolData)
118509
118556
  result[i]=null;
118510
118557
  var item=data[i];
118511
118558
  if (this.IsNumber(item))
118512
- result[i]=item.toFixed(n);
118559
+ result[i]=item.toFixed(dec);
118513
118560
  }
118514
118561
  }
118515
118562
  else
118516
118563
  {
118517
118564
  if (this.IsNumber(data))
118518
- result=data.toFixed(n);
118565
+ result=data.toFixed(dec);
118519
118566
  }
118520
118567
 
118521
118568
  return result;
@@ -120227,6 +120274,8 @@ function JSAlgorithm(errorHandler,symbolData)
120227
120274
  return this.VAR2STR(args[0], args[1]);
120228
120275
  case "VARCAT":
120229
120276
  return this.VARCAT(args[0], args[1]);
120277
+ case "VARCAT6":
120278
+ return this.VARCAT6(args[0], args[1],args[2], args[3],args[4], args[5]);
120230
120279
  case "STRSPACE":
120231
120280
  return this.STRSPACE(args[0]);
120232
120281
  case "FINDSTR":
@@ -120439,7 +120488,8 @@ function JSDraw(errorHandler,symbolData)
120439
120488
  var drawData=[];
120440
120489
  var result={ DrawData:drawData, DrawType:'DRAWFLAGTEXT' };
120441
120490
  if (!text) return result;
120442
-
120491
+ var bArrayText=Array.isArray(text); //是否是数组字符串
120492
+
120443
120493
  if (Array.isArray(condition))
120444
120494
  {
120445
120495
  if (condition.length<=0) return result;
@@ -120450,14 +120500,18 @@ function JSDraw(errorHandler,symbolData)
120450
120500
  drawData[i]=null;
120451
120501
 
120452
120502
  if (isNaN(condition[i]) || !condition[i]) continue;
120503
+
120504
+ var outText=null;
120505
+ if (!bArrayText) outText=text;
120506
+ else if (bArrayText && text[i]) outText=text[i];
120453
120507
 
120454
120508
  if (bSinglePrice)
120455
120509
  {
120456
- drawData[i]={ YValue:price, Text:text };
120510
+ drawData[i]={ YValue:price, Text:outText };
120457
120511
  }
120458
120512
  else
120459
120513
  {
120460
- if (IFrameSplitOperator.IsNumber(price[i])) drawData[i]={ YValue:price[i], Text:text };
120514
+ if (IFrameSplitOperator.IsNumber(price[i])) drawData[i]={ YValue:price[i], Text:outText };
120461
120515
  }
120462
120516
  }
120463
120517
  }
@@ -120466,13 +120520,17 @@ function JSDraw(errorHandler,symbolData)
120466
120520
  var bSinglePrice=IFrameSplitOperator.IsNumber(price);
120467
120521
  for(var i=0;i<this.SymbolData.Data.Data.length;++i)
120468
120522
  {
120523
+ var outText=null;
120524
+ if (!bArrayText) outText=text;
120525
+ else if (bArrayText && text[i]) outText=text[i];
120526
+
120469
120527
  if (bSinglePrice)
120470
120528
  {
120471
- drawData[i]={ YValue:price, Text:text };
120529
+ drawData[i]={ YValue:price, Text:outText };
120472
120530
  }
120473
120531
  else
120474
120532
  {
120475
- if (IFrameSplitOperator.IsNumber(price[i])) drawData[i]={ YValue:price[i], Text:text };
120533
+ if (IFrameSplitOperator.IsNumber(price[i])) drawData[i]={ YValue:price[i], Text:outText };
120476
120534
  }
120477
120535
  }
120478
120536
  }
@@ -130670,6 +130728,7 @@ function JSExplainer(ast,option)
130670
130728
  ["STRCAT", { Name:"STRCAT", Param:{ Count:2 }, ToString:function(args) { return `字符串相加`; } } ],
130671
130729
  ["STRCAT6",{ Name:"STRCAT6", Param:{ Dynamic:true }, ToString:function(args) { return `字符串相加`; } } ],
130672
130730
  ["VARCAT", { Name:"VARCAT", Param:{ Count:2 }, ToString:function(args) { return `字符串相加`; } } ],
130731
+ ["VARCAT6", { Name:"VARCAT", Param:{ Dynamic:true }, ToString:function(args) { return `字符串相加`; } } ],
130673
130732
  ["STRSPACE", { Name:"STRSPACE", Param:{ Count:1 }, ToString:function(args) { return `字符串${args[0]}加一空格`; } } ],
130674
130733
  ["SUBSTR", { Name:"SUBSTR", Param:{ Count:3 }, ToString:function(args) { return `字符串${args[0]}中取一部分`; } } ],
130675
130734
  ["STRCMP", { Name:"STRCMP", Param:{ Count:2 }, ToString:function(args) { return `字符串${args[0]}和字符串${args[1]}比较`; } } ],
@@ -149610,7 +149669,7 @@ function ChartReport()
149610
149669
 
149611
149670
  this.FormaTimeDrawInfo=function(column, stock, drawInfo, data)
149612
149671
  {
149613
- if (!IFrameSplitOperator.IsNumber(stock.Time)) return;
149672
+ if (!stock || !IFrameSplitOperator.IsNumber(stock.Time)) return;
149614
149673
 
149615
149674
  if (column.ValueType==0) //0=hhmm 1=hhmmss 2=hhmmss.fff
149616
149675
  {
@@ -149628,7 +149687,7 @@ function ChartReport()
149628
149687
 
149629
149688
  this.FormaDateDrawInfo=function(column, stock, drawInfo, data)
149630
149689
  {
149631
- if (!IFrameSplitOperator.IsNumber(stock.Date)) return;
149690
+ if (!stock || !IFrameSplitOperator.IsNumber(stock.Date)) return;
149632
149691
 
149633
149692
  if (column.FormatType==0)
149634
149693
  drawInfo.Text=IFrameSplitOperator.FormatDateString(stock.Date,"YYYY-MM-DD");
@@ -155442,7 +155501,7 @@ function ScrollBarBGChart()
155442
155501
 
155443
155502
 
155444
155503
 
155445
- var HQCHART_VERSION="1.1.15359";
155504
+ var HQCHART_VERSION="1.1.15367";
155446
155505
 
155447
155506
  function PrintHQChartVersion()
155448
155507
  {
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.15359";
8
+ var HQCHART_VERSION="1.1.15367";
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