hqchart 1.1.12459 → 1.1.12470

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.
@@ -9149,6 +9149,11 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9149
9149
  {
9150
9150
  this.ChartCorssCursor.LastPoint=this.LastPoint;
9151
9151
  this.ChartCorssCursor.CursorIndex=this.CursorIndex;
9152
+ if (this.EnableNewIndex)
9153
+ {
9154
+ this.ChartCorssCursor.CorssCursorIndex=this.CorssCursorIndex;
9155
+ this.ChartCorssCursor.EnableNewIndex=this.EnableNewIndex;
9156
+ }
9152
9157
 
9153
9158
  var bRestoreCanvas=false;
9154
9159
  if (this.CorssCursorCanvas) //独立的十字光标层
@@ -9511,6 +9516,11 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9511
9516
  {
9512
9517
  this.ChartCorssCursor.LastPoint=this.LastPoint;
9513
9518
  this.ChartCorssCursor.CursorIndex=this.CursorIndex;
9519
+ if (this.EnableNewIndex)
9520
+ {
9521
+ this.ChartCorssCursor.CorssCursorIndex=this.CorssCursorIndex;
9522
+ this.ChartCorssCursor.EnableNewIndex=this.EnableNewIndex;
9523
+ }
9514
9524
 
9515
9525
  var bRestoreCanvas=false;
9516
9526
  if (this.CorssCursorCanvas) //独立的十字光标层
@@ -12562,6 +12572,30 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
12562
12572
 
12563
12573
  return aryData;
12564
12574
  }
12575
+
12576
+ //重置指标计数器
12577
+ this.ClearIndexRunCount=function()
12578
+ {
12579
+ //主图指标
12580
+ for(var i=0;i<this.WindowIndex.length;++i)
12581
+ {
12582
+ var item=this.WindowIndex[i];
12583
+ if (!item) continue;
12584
+
12585
+ item.RunCount=0;
12586
+ }
12587
+
12588
+ //叠加指标
12589
+ for(var i=0;i<this.Frame.SubFrame.length;++i)
12590
+ {
12591
+ var item=this.Frame.SubFrame[i];
12592
+ for(var j=0; j<item.OverlayIndex.length; ++j)
12593
+ {
12594
+ var overlayItem=item.OverlayIndex[j];
12595
+ if (overlayItem.Script) overlayItem.Script.RunCount=0;
12596
+ }
12597
+ }
12598
+ }
12565
12599
  }
12566
12600
 
12567
12601
  function GetDevicePixelRatio()
@@ -42139,10 +42173,13 @@ function MinuteTooltipPaint()
42139
42173
  }
42140
42174
 
42141
42175
  var upperSymbol;
42142
- this.YClose=this.TitlePaint.YClose;
42143
- this.YClose=item.YClose;
42144
42176
  if (this.HQChart.Symbol) upperSymbol=this.HQChart.Symbol.toUpperCase();
42177
+ var isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol); //国内期货, 纽约期货交易所
42145
42178
  var defaultfloatPrecision=GetfloatPrecision(this.HQChart.Symbol);//价格小数位数
42179
+
42180
+ this.YClose=this.TitlePaint.YClose;
42181
+ this.YClose=item.YClose;
42182
+ if (isFutures && IFrameSplitOperator.IsNumber(item.YClearing)) this.YClose=item.YClearing;
42146
42183
 
42147
42184
  var aryText=[];
42148
42185
  var result={ AryText:aryText };
@@ -42477,9 +42514,11 @@ function MinuteLeftTooltipPaint()
42477
42514
  if (!drawData || !drawData.Data) return null;
42478
42515
 
42479
42516
  var aryText=[];
42517
+ var isFutures=false;
42480
42518
  var upperSymbol;
42481
42519
  if (this.HQChart.Symbol) upperSymbol=this.HQChart.Symbol.toUpperCase();
42482
42520
  var defaultfloatPrecision=GetfloatPrecision(upperSymbol);//价格小数位数
42521
+ if (upperSymbol) isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol); //国内期货, 纽约期货交易所
42483
42522
 
42484
42523
  if (drawData.Type==0) //连续交易
42485
42524
  {
@@ -42487,6 +42526,7 @@ function MinuteLeftTooltipPaint()
42487
42526
  if (!item) return;
42488
42527
 
42489
42528
  this.YClose=item.YClose;
42529
+ if (isFutures && IFrameSplitOperator.IsNumber(item.YClearing)) this.YClose=item.YClearing;
42490
42530
  var titleItem=this.FormatDate(item.Date);
42491
42531
  if (titleItem) aryText.push(titleItem);
42492
42532
 
@@ -42524,6 +42564,7 @@ function MinuteLeftTooltipPaint()
42524
42564
  if (!item) return;
42525
42565
 
42526
42566
  this.YClose=item.YClose;
42567
+ if (isFutures && IFrameSplitOperator.IsNumber(item.YClearing)) this.YClose=item.YClearing;
42527
42568
  var titleItem=this.FormatDate(item.Date);
42528
42569
  if (titleItem) aryText.push(titleItem);
42529
42570
 
@@ -49144,6 +49185,9 @@ function ChartCorssCursor()
49144
49185
  this.IsFixXLastTime=false; //是否修正X轴,超出当前时间的,X轴调整到当前最后的时间.
49145
49186
  this.IsDrawXRangeBG=false; //是否绘制十字光标背景
49146
49187
 
49188
+ this.EnableNewIndex=false; //分时图是否使用最新的索引结构 (由外部chart容器传入)
49189
+ this.CorssCursorIndex; //分时图新版本的索引结构 (由外部chart容器传入)
49190
+
49147
49191
  this.PointX;
49148
49192
  this.PointY;
49149
49193
 
@@ -49201,20 +49245,34 @@ function ChartCorssCursor()
49201
49245
 
49202
49246
  this.GetMinuteCloseYPoint=function(index)
49203
49247
  {
49204
- if (!IFrameSplitOperator.IsNumber(index)) return null;
49205
- index=parseInt(index);
49206
- if (!this.StringFormatX.Data) return null;
49207
- var data = this.StringFormatX.Data;
49208
- if (!data.Data || data.Data.length <= 0) return null;
49209
- var dataIndex = data.DataOffset + index;
49210
- if (dataIndex >= data.Data.length) dataIndex = data.Data.length - 1;
49211
- if (dataIndex < 0) return null;
49248
+ if (this.EnableNewIndex && this.CorssCursorIndex)
49249
+ {
49250
+ if (!this.StringFormatX || !this.StringFormatX.GetMinuteCloseYPoint) return null;
49251
+
49252
+ var closeData=this.StringFormatX.GetMinuteCloseYPoint(this.CorssCursorIndex);
49253
+ if (!closeData) return null;
49254
+
49255
+ this.Close=closeData.Price;
49256
+ return closeData.Y;
49257
+ }
49258
+ else
49259
+ {
49212
49260
 
49213
- var close = data.Data[dataIndex];
49214
- if (!IFrameSplitOperator.IsNumber(index)) return null;
49215
- this.Close=close;
49216
- var yPoint = this.Frame.GetYFromData(this.Close);
49217
- return yPoint;
49261
+ if (!IFrameSplitOperator.IsNumber(index)) return null;
49262
+ index=parseInt(index);
49263
+ if (!this.StringFormatX.Data) return null;
49264
+ var data = this.StringFormatX.Data;
49265
+ if (!data.Data || data.Data.length <= 0) return null;
49266
+ var dataIndex = data.DataOffset + index;
49267
+ if (dataIndex >= data.Data.length) dataIndex = data.Data.length - 1;
49268
+ if (dataIndex < 0) return null;
49269
+
49270
+ var close = data.Data[dataIndex];
49271
+ if (!IFrameSplitOperator.IsNumber(index)) return null;
49272
+ this.Close=close;
49273
+ var yPoint = this.Frame.GetYFromData(this.Close);
49274
+ return yPoint;
49275
+ }
49218
49276
  }
49219
49277
 
49220
49278
  this.GetDateTimeRange=function(index, option)
@@ -50881,6 +50939,7 @@ function HQMinuteTimeStringFormat()
50881
50939
  this.newMethod();
50882
50940
  delete this.newMethod;
50883
50941
 
50942
+ this.ClassName="HQMinuteTimeStringFormat";
50884
50943
  this.Frame;
50885
50944
  this.Symbol;
50886
50945
  this.Point;
@@ -51012,6 +51071,88 @@ function HQMinuteTimeStringFormat()
51012
51071
 
51013
51072
  return true;
51014
51073
  }
51074
+
51075
+ this.GetMinuteCloseYPoint=function(cursorIndexData)
51076
+ {
51077
+ var type=cursorIndexData.Type;
51078
+ if (type==1 || type==2 || type==3) //单日 1=主图 2=盘前 3=盘后
51079
+ {
51080
+ if (type==1)
51081
+ {
51082
+ if (!this.Data || this.Data.Data.length <= 0) return null;
51083
+ var index=cursorIndexData.DataIndex;
51084
+ if (index<0 || index>=this.Data.Data.length) index=this.Data.Data.length-1;
51085
+
51086
+ var close = this.Data.Data[index];
51087
+ var yPoint = this.Frame.GetYFromData(close);
51088
+ return { Price:close, Y:yPoint };
51089
+ }
51090
+ else if (type==2)
51091
+ {
51092
+ if (!this.BeforeOpenData || !this.BeforeOpenData.Data) return false;
51093
+ if (cursorIndexData.DataIndex<0 || cursorIndexData.DataIndex>=this.BeforeOpenData.Data.length) return null;
51094
+ var item=this.BeforeOpenData.Data[cursorIndexData.DataIndex];
51095
+
51096
+ var close=item.Price;
51097
+ var yPoint = this.Frame.GetYFromData(close);
51098
+ return { Price:close, Y:yPoint };
51099
+ }
51100
+ else if (type==3)
51101
+ {
51102
+ if (!this.AfterCloseData || !this.AfterCloseData.Data) return false;
51103
+ if (cursorIndexData.DataIndex<0 || cursorIndexData.DataIndex>=this.AfterCloseData.Data.length) return null;
51104
+ var item=this.AfterCloseData.Data[cursorIndexData.DataIndex];
51105
+
51106
+ var close=item.Price;
51107
+ var yPoint = this.Frame.GetYFromData(close);
51108
+ return { Price:close, Y:yPoint };
51109
+ }
51110
+ }
51111
+ else if (type==10 || type==20 || type==30) //多日 10=主图 20=盘前 30=盘后
51112
+ {
51113
+ if (type==10)
51114
+ {
51115
+ if (!this.Data || this.Data.Data.length <= 0) return null;
51116
+ var index=this.Frame.MinuteCount*cursorIndexData.DayIndex+cursorIndexData.DataIndex;
51117
+ if (index<0 || index>=this.Data.Data.length) index=this.Data.Data.length-1;
51118
+
51119
+ var close = this.Data.Data[index];
51120
+ var yPoint = this.Frame.GetYFromData(close);
51121
+ return { Price:close, Y:yPoint };
51122
+ }
51123
+ else if (type==20)
51124
+ {
51125
+ var multiDayBeforeOpenData=this.GetMultiDayBeforeOpenData();
51126
+ if (!multiDayBeforeOpenData) return null;
51127
+ if (cursorIndexData.DayIndex<0 || cursorIndexData.DayIndex>=multiDayBeforeOpenData.length) return null;
51128
+
51129
+ var dayItem=multiDayBeforeOpenData[cursorIndexData.DayIndex];
51130
+ if (cursorIndexData.DataIndex<0 || cursorIndexData.DataIndex>=dayItem.Data.length) return null;
51131
+ var item=dayItem.Data[cursorIndexData.DataIndex];
51132
+
51133
+ var close=item.Price;
51134
+ var yPoint = this.Frame.GetYFromData(close);
51135
+ return { Price:close, Y:yPoint };
51136
+ }
51137
+ else if (type==30)
51138
+ {
51139
+ var multiDayAfterCloseData=this.GetMultiDayAfterCloseData();
51140
+ if (!multiDayAfterCloseData) return null;
51141
+ if (cursorIndexData.DayIndex<0 || cursorIndexData.DayIndex>=multiDayAfterCloseData.length) return null;
51142
+
51143
+ var dayItem=multiDayAfterCloseData[cursorIndexData.DayIndex];
51144
+ if (cursorIndexData.DataIndex<0 || cursorIndexData.DataIndex>=dayItem.Data.length) return null;
51145
+ var item=dayItem.Data[cursorIndexData.DataIndex];
51146
+
51147
+ var close=item.Price;
51148
+ var yPoint = this.Frame.GetYFromData(close);
51149
+ return { Price:close, Y:yPoint };
51150
+ }
51151
+ }
51152
+
51153
+
51154
+ return null;
51155
+ }
51015
51156
  }
51016
51157
 
51017
51158
 
@@ -52215,7 +52356,10 @@ function DynamicMinuteTitlePainting()
52215
52356
  {
52216
52357
  if (!data || !data.Data) return;
52217
52358
 
52218
- var defaultfloatPrecision=GetfloatPrecision(this.Symbol);//价格小数位数
52359
+ var upperSymbol=this.Symbol.toUpperCase();
52360
+ var defaultfloatPrecision=GetfloatPrecision(this.Symbol); //价格小数位数
52361
+ var isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol); //国内期货, 纽约期货交易所
52362
+
52219
52363
  var item=data.Data;
52220
52364
  var isLastOne=data.IsLastOne;
52221
52365
  var aryText=[]; //{Color:, Text: }
@@ -52261,6 +52405,8 @@ function DynamicMinuteTitlePainting()
52261
52405
  var amount=item.Amount;
52262
52406
  var yClose=item.YClose;
52263
52407
  if (!IFrameSplitOperator.IsNumber(yClose)) yClose=this.YClose;
52408
+ if (isFutures && IFrameSplitOperator.IsNumber(item.YClearing)) yClose=item.YClearing; //期货使用昨结算
52409
+
52264
52410
 
52265
52411
  if (IFrameSplitOperator.IsNumber(close))
52266
52412
  {
@@ -68417,22 +68563,27 @@ function KLineChartContainer(uielement,OffscreenElement)
68417
68563
  {
68418
68564
  if (!this.WindowIndex[windowIndex]) return;
68419
68565
 
68420
- if (typeof(this.WindowIndex[windowIndex].RequestData)=="function") //数据需要另外下载的.
68566
+ var item=this.WindowIndex[windowIndex];
68567
+ if (typeof(item.RequestData)=="function") //数据需要另外下载的.
68421
68568
  {
68422
- this.WindowIndex[windowIndex].RequestData(this,windowIndex,hisData, option);
68569
+ item.RequestData(this,windowIndex,hisData, option);
68423
68570
  return;
68424
68571
  }
68425
- if (typeof(this.WindowIndex[windowIndex].ExecuteScript)=='function')
68572
+
68573
+ if (typeof(item.ExecuteScript)=='function')
68426
68574
  {
68427
- this.WindowIndex[windowIndex].ExecuteScript(this,windowIndex,hisData);
68575
+ if (option && option.CheckRunCount)
68576
+ if (item.IsExcessRunCount()) return;
68577
+
68578
+ item.ExecuteScript(this,windowIndex,hisData);
68428
68579
  return;
68429
68580
  }
68430
68581
 
68431
- this.WindowIndex[windowIndex].BindData(this,windowIndex,hisData);
68582
+ item.BindData(this,windowIndex,hisData);
68432
68583
  }
68433
68584
 
68434
68585
  //叠加指标
68435
- this.BindOverlayIndexData=function(overlayItem, windowIndex, hisData)
68586
+ this.BindOverlayIndexData=function(overlayItem, windowIndex, hisData, option)
68436
68587
  {
68437
68588
  if (!overlayItem.Script) return;
68438
68589
 
@@ -68444,6 +68595,9 @@ function KLineChartContainer(uielement,OffscreenElement)
68444
68595
 
68445
68596
  if (typeof(overlayItem.Script.ExecuteScript)=='function')
68446
68597
  {
68598
+ if (option && option.CheckRunCount)
68599
+ if (overlayItem.Script.IsExcessRunCount()) return;
68600
+
68447
68601
  overlayItem.Script.ExecuteScript(this,windowIndex,hisData);
68448
68602
  return;
68449
68603
  }
@@ -68609,7 +68763,7 @@ function KLineChartContainer(uielement,OffscreenElement)
68609
68763
  });
68610
68764
  }
68611
68765
 
68612
- this.BindAllOverlayIndexData=function(hisData)
68766
+ this.BindAllOverlayIndexData=function(hisData, option)
68613
68767
  {
68614
68768
  if (!this.Frame || !this.Frame.SubFrame) return;
68615
68769
 
@@ -68620,7 +68774,7 @@ function KLineChartContainer(uielement,OffscreenElement)
68620
68774
  for(var j in item.OverlayIndex)
68621
68775
  {
68622
68776
  var overlayItem=item.OverlayIndex[j];
68623
- this.BindOverlayIndexData(overlayItem,i,hisData)
68777
+ this.BindOverlayIndexData(overlayItem,i,hisData,option)
68624
68778
  }
68625
68779
  }
68626
68780
  }
@@ -69303,7 +69457,7 @@ function KLineChartContainer(uielement,OffscreenElement)
69303
69457
 
69304
69458
  for(var i=0; i<this.Frame.SubFrame.length; ++i)
69305
69459
  {
69306
- this.BindIndexData(i,bindData);
69460
+ this.BindIndexData(i,bindData, { CheckRunCount:true });
69307
69461
  }
69308
69462
 
69309
69463
  //刷新画图
@@ -69316,7 +69470,7 @@ function KLineChartContainer(uielement,OffscreenElement)
69316
69470
  this.SendKLineUpdateEvent(bindData);
69317
69471
 
69318
69472
  //叠加指标计算
69319
- this.BindAllOverlayIndexData(bindData);
69473
+ this.BindAllOverlayIndexData(bindData,{ CheckRunCount:true });
69320
69474
 
69321
69475
  if (this.mapEvent.has(JSCHART_EVENT_ID.ON_RECV_REALTIME_DATA))
69322
69476
  {
@@ -70041,6 +70195,7 @@ function KLineChartContainer(uielement,OffscreenElement)
70041
70195
  this.ClearRectSelect(true);
70042
70196
  this.Frame.ClearUpDonwFrameYData();
70043
70197
  this.ClearCustomKLine();
70198
+
70044
70199
 
70045
70200
  var kLineDrawType=this.GetKLineDrawType();
70046
70201
  if (kLineDrawType==10 || kLineDrawType==11 || kLineDrawType==12 || kLineDrawType==16) isDataTypeChange=true;
@@ -70062,6 +70217,7 @@ function KLineChartContainer(uielement,OffscreenElement)
70062
70217
 
70063
70218
  if (isDataTypeChange==false && !this.IsApiPeriod)
70064
70219
  {
70220
+ this.ClearIndexRunCount();
70065
70221
  this.Update( {UpdateCursorIndexType:2} ); //更新的时候 取消显示十字光标
70066
70222
  return;
70067
70223
  }
@@ -70074,6 +70230,7 @@ function KLineChartContainer(uielement,OffscreenElement)
70074
70230
  this.AutoUpdateEvent(false,'KLineChartContainer::ChangePeriod'); //切换周期先停止更新
70075
70231
  this.ResetScrollBar();
70076
70232
  this.ResetOverlaySymbolStatus();
70233
+ this.ClearIndexRunCount();
70077
70234
  this.RequestHistoryData(); //请求日线数据
70078
70235
  //this.ReqeustKLineInfoData();
70079
70236
  }
@@ -70083,6 +70240,7 @@ function KLineChartContainer(uielement,OffscreenElement)
70083
70240
  this.AutoUpdateEvent(false,'KLineChartContainer::ChangePeriod'); //切换周期先停止更新
70084
70241
  this.ResetScrollBar();
70085
70242
  this.ResetOverlaySymbolStatus();
70243
+ this.ClearIndexRunCount();
70086
70244
  this.ReqeustHistoryMinuteData(); //请求分钟数据
70087
70245
  }
70088
70246
  else if (ChartData.IsTickPeriod(this.Period))
@@ -70090,6 +70248,7 @@ function KLineChartContainer(uielement,OffscreenElement)
70090
70248
  this.CancelAutoUpdate(); //先停止定时器
70091
70249
  this.AutoUpdateEvent(false,'KLineChartContainer::ChangePeriod');
70092
70250
  this.ResetScrollBar();
70251
+ this.ClearIndexRunCount();
70093
70252
  this.RequestTickData(); //请求分笔数据
70094
70253
  }
70095
70254
  }
@@ -71390,6 +71549,7 @@ function KLineChartContainer(uielement,OffscreenElement)
71390
71549
  this.ClearKLineCaluate();
71391
71550
  this.HideTooltip();
71392
71551
  this.ResetScrollBar();
71552
+ this.ClearIndexRunCount();
71393
71553
 
71394
71554
  this.Symbol=symbol;
71395
71555
  if (!symbol)
@@ -76487,6 +76647,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
76487
76647
  this.ClearIndexPaint(); //清空指标
76488
76648
  this.ResetOverlaySymbolStatus();
76489
76649
  this.ReloadChartDrawPicture();
76650
+ this.ClearIndexRunCount();
76490
76651
 
76491
76652
  if (option)
76492
76653
  {
@@ -77875,7 +78036,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
77875
78036
  }
77876
78037
  }
77877
78038
 
77878
- this.BindIndexData=function(windowIndex,hisData)
78039
+ this.BindIndexData=function(windowIndex, hisData, option)
77879
78040
  {
77880
78041
  if (!this.WindowIndex[windowIndex]) return;
77881
78042
 
@@ -78320,7 +78481,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
78320
78481
  }
78321
78482
 
78322
78483
  //计算叠加指标
78323
- this.BindAllOverlayIndexData=function(hisData)
78484
+ this.BindAllOverlayIndexData=function(hisData, option)
78324
78485
  {
78325
78486
  if (!this.Frame || !this.Frame.SubFrame) return;
78326
78487
 
@@ -78331,13 +78492,13 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
78331
78492
  for(var j in item.OverlayIndex)
78332
78493
  {
78333
78494
  var overlayItem=item.OverlayIndex[j];
78334
- this.BindOverlayIndexData(overlayItem,i,hisData)
78495
+ this.BindOverlayIndexData(overlayItem,i,hisData,option)
78335
78496
  }
78336
78497
  }
78337
78498
  }
78338
78499
 
78339
78500
  //叠加指标
78340
- this.BindOverlayIndexData=function(overlayItem, windowIndex, hisData)
78501
+ this.BindOverlayIndexData=function(overlayItem, windowIndex, hisData, option)
78341
78502
  {
78342
78503
  if (!overlayItem.Script) return;
78343
78504
 
@@ -79068,7 +79229,9 @@ MinuteChartContainer.JsonDataToMinuteData=function(data,isBeforeData)
79068
79229
  var preClose=data.stock[0].yclose; //前一个数据价格
79069
79230
  var preAvPrice=data.stock[0].yclose; //前一个均价
79070
79231
  var yClose=data.stock[0].yclose;
79071
- if (isFutures && data.stock[0].yclearing) yClose=preClose=preAvPrice=data.stock[0].yclearing; //期货使用昨结算价
79232
+ var yClearing=data.stock[0].yclearing;
79233
+
79234
+ if (isFutures && yClearing) preClose=preAvPrice=yClearing; //期货使用昨结算价
79072
79235
 
79073
79236
  if (!IFrameSplitOperator.IsNonEmptyArray(data.stock[0].minute)) return aryMinuteData;
79074
79237
 
@@ -79077,7 +79240,7 @@ MinuteChartContainer.JsonDataToMinuteData=function(data,isBeforeData)
79077
79240
  {
79078
79241
  var jsData=data.stock[0].minute[i];
79079
79242
  var item=new MinuteData();
79080
-
79243
+ item.YClearing=yClearing;
79081
79244
  item.YClose=yClose;
79082
79245
  item.Close=jsData.price;
79083
79246
  item.Open=jsData.open;
@@ -79108,24 +79271,11 @@ MinuteChartContainer.JsonDataToMinuteData=function(data,isBeforeData)
79108
79271
 
79109
79272
  if (!item.AvPrice) item.AvPrice=preAvPrice;
79110
79273
 
79111
- //价格是0的 都用空
79112
- //if (item.Open<=0) item.Open=null;
79113
- //if (item.Close<=0) item.Close=null;
79114
- //if (item.AvPrice<=0) item.AvPrice=null;
79115
- //if (item.High<=0) item.High=null;
79116
- //if (item.Low<=0) item.Low=null;
79117
-
79118
- //if (isFutures) item.AvPrice=null; //期货均价暂时没有
79119
-
79120
79274
  if (yClose && item.Close)
79121
79275
  item.Increase=(item.Close-yClose)/yClose*100; //涨幅 (最新价格-昨收)/昨收*100;
79122
79276
 
79123
-
79124
- //均价太大 可能是后台算错了
79125
- var checkValue=Math.abs(item.AvPrice-item.Close);
79126
- //JSConsole.Chart.Log(`[MinuteChartContainer::JsonDataToMinuteData] checkValue=${checkValue}, ${item.Close*0.13} `)
79127
- if (isSHSZ && checkValue>item.Close*0.13 )
79128
- item.AvPrice=preAvPrice;
79277
+ if (isFutures && yClearing && item.Close)
79278
+ item.Increase=(item.Close-yClearing)/yClearing*100; //涨幅 (最新价格-昨结算价)/昨结算价*100;
79129
79279
 
79130
79280
  //上次价格
79131
79281
  if (IFrameSplitOperator.IsNumber(jsData.price)) preClose=jsData.price;
@@ -79239,7 +79389,7 @@ MinuteChartContainer.JsonDataToMinuteDataArray=function(data)
79239
79389
  var symbol=data.symbol;
79240
79390
  var upperSymbol=symbol.toUpperCase();
79241
79391
  var isSHSZ=MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol);
79242
- var isSHO=MARKET_SUFFIX_NAME.IsSHO(upperSymbol); //上海股票期权
79392
+ var isSHO=MARKET_SUFFIX_NAME.IsSHO(upperSymbol); //上海股票期权
79243
79393
  var isSZO=MARKET_SUFFIX_NAME.IsSZO(upperSymbol); //深证股票期权
79244
79394
  var isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol); //国内期货, 纽约期货交易所
79245
79395
  var result=[];
@@ -79249,22 +79399,25 @@ MinuteChartContainer.JsonDataToMinuteDataArray=function(data)
79249
79399
  var minuteData=[];
79250
79400
  var dayData=data.data[i];
79251
79401
  var date=dayData.date;
79402
+ var yClearing=dayData.yclearing; //昨结算价
79252
79403
  var yClose=dayData.yclose; //前收盘 计算涨幅
79253
79404
  var preClose=yClose; //前一个数据价格
79254
79405
  var preAvPrice=null; //上一个均价
79255
- var yClearing=dayData.yclearing; //昨结算价
79256
79406
 
79257
- //var preAvPrice=data.stock[0].yclose; //前一个均价
79407
+ if (isFutures && yClearing) preClose=preAvPrice=yClearing; //期货使用昨结算价
79408
+
79258
79409
  for(var j in dayData.minute)
79259
79410
  {
79260
79411
  var jsData=dayData.minute[j];
79261
79412
  if (jsData[2]) preClose=jsData[2]; //保存上一个收盘数据
79262
79413
  var item=new MinuteData();
79414
+ item.YClearing=yClearing;
79263
79415
  item.YClose=yClose;
79264
79416
  item.Close=jsData[2];
79265
79417
  item.Open=jsData[1];
79266
79418
  item.High=jsData[3];
79267
79419
  item.Low=jsData[4];
79420
+ item.Increase=null;
79268
79421
  if (isSHSZ) item.Vol=jsData[5]/100; //原始单位股
79269
79422
  else item.Vol=jsData[5];
79270
79423
  item.Amount=jsData[6];
@@ -79287,23 +79440,12 @@ MinuteChartContainer.JsonDataToMinuteDataArray=function(data)
79287
79440
 
79288
79441
  if (!item.AvPrice && preAvPrice) item.AvPrice=preAvPrice;
79289
79442
 
79290
- if (item.Close && yClose) item.Increase = (item.Close - yClose)/yClose*100;
79291
- else item.Increase=null;
79443
+ if (item.Close && yClose)
79444
+ item.Increase = (item.Close - yClose)/yClose*100;
79292
79445
 
79293
- //价格是0的 都用空
79294
- //if (item.Open<=0) item.Open=null;
79295
- //if (item.Close<=0) item.Close=null;
79296
- //if (item.AvPrice<=0) item.AvPrice=null;
79297
- //if (item.High<=0) item.High=null;
79298
- //if (item.Low<=0) item.Low=null;
79299
- //if (item.AvPrice<=0) item.AvPrice=null;
79300
-
79301
- //均价太大 可能是后台算错了
79302
- if (item.AvPrice && isSHSZ)
79303
- {
79304
- var checkValue=Math.abs(item.AvPrice-item.Close);
79305
- if (checkValue>item.Close*0.13 ) item.AvPrice=preAvPrice;
79306
- }
79446
+ if (item.Close && yClearing && isFutures)
79447
+ item.Increase = (item.Close - yClearing)/yClearing*100;
79448
+
79307
79449
 
79308
79450
  if (jsData.length>7 && jsData[7]>0 && item.AvPrice===jsData[7]) preAvPrice=jsData[7];
79309
79451
  if (jsData[extendDataIndex]) item.ExtendData=jsData[extendDataIndex];
@@ -79314,9 +79456,9 @@ MinuteChartContainer.JsonDataToMinuteDataArray=function(data)
79314
79456
  var newData=new ChartData();
79315
79457
  newData.Data=minuteData;
79316
79458
  newData.YClose=yClose;
79459
+ if (IFrameSplitOperator.IsNumber(yClearing)) newData.YClearing=yClearing;
79317
79460
  newData.Close=dayData.close;
79318
79461
  newData.Date=date;
79319
- if (IFrameSplitOperator.IsNumber(yClearing)) newData.YClearing=yClearing;
79320
79462
 
79321
79463
  result.push(newData);
79322
79464
  }
@@ -79365,6 +79507,7 @@ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, i
79365
79507
 
79366
79508
  var date=callAuctionData.Date;
79367
79509
  var yClose=callAuctionData.YClose;
79510
+ var yClearing=callAuctionData.YClearing;
79368
79511
  var extendDataIndex=isBeforeOpen? JSCHART_DATA_FIELD_ID.MINUTE_BEFOREOPEN_EXTENDDATA:JSCHART_DATA_FIELD_ID.MINUTE_AFTERCLOSE_EXTENDDATA; //扩展数据序号
79369
79512
  if (callAuctionData.Ver==1.0)
79370
79513
  {
@@ -79374,6 +79517,7 @@ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, i
79374
79517
  var item=isBeforeOpen? new BeforeOpenData() : new AfterCloseData();
79375
79518
  var jsData=data[i];
79376
79519
  item.YClose=yClose;
79520
+ item.YClearing=yClearing;
79377
79521
  item.Time=jsData[0];
79378
79522
  item.Date=date;
79379
79523
  item.Price=jsData[1];
@@ -79397,6 +79541,7 @@ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, i
79397
79541
  var item=isBeforeOpen? new BeforeOpenData() : new AfterCloseData();
79398
79542
  var jsData=data[i];
79399
79543
  item.YClose=yClose;
79544
+ item.YClearing=yClearing;
79400
79545
  item.Time=jsData[0];
79401
79546
  item.Date=date;
79402
79547
  item.Price=jsData[1];
@@ -79424,6 +79569,7 @@ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, i
79424
79569
  var item=isBeforeOpen? new BeforeOpenData() : new AfterCloseData();
79425
79570
  var jsData=data[i];
79426
79571
  item.YClose=yClose;
79572
+ item.YClearing=yClearing;
79427
79573
  item.Time=jsData[0];
79428
79574
  item.Date=date;
79429
79575
  item.Price=jsData[1];
@@ -79453,7 +79599,7 @@ MinuteChartContainer.JosnDataToBeforeOpenDataArray=function(data)
79453
79599
  for(var i in data.data)
79454
79600
  {
79455
79601
  var dayItem=data.data[i];
79456
- var beforeOpenData={ Data:[], TotalCount:15, Ver:1.0, Date:dayItem.date, YClose:dayItem.yclose };
79602
+ var beforeOpenData={ Data:[], TotalCount:15, Ver:1.0, Date:dayItem.date, YClose:dayItem.yclose, YClearing:dayItem.YClearing };
79457
79603
  if (dayItem.beforeinfo)
79458
79604
  {
79459
79605
  if (IFrameSplitOperator.IsNumber(dayItem.beforeinfo.totalcount)) beforeOpenData.TotalCount=dayItem.beforeinfo.totalcount;
@@ -79478,7 +79624,7 @@ MinuteChartContainer.JosnDataToAfterCloseDataArray=function(data)
79478
79624
  for(var i in data.data)
79479
79625
  {
79480
79626
  var dayItem=data.data[i];
79481
- var afterCloseData={ Data:[], TotalCount:15, Ver:1.0, Date:dayItem.date, YClose:dayItem.yclose };
79627
+ var afterCloseData={ Data:[], TotalCount:15, Ver:1.0, Date:dayItem.date, YClose:dayItem.yclose, YClearing:dayItem.YClearing };
79482
79628
 
79483
79629
  if (dayItem.afterinfo)
79484
79630
  {
@@ -88597,6 +88743,8 @@ var MARKET_SUFFIX_NAME=
88597
88743
 
88598
88744
  IsFutures:function(upperSymbol) //是否是期货 包含国外的
88599
88745
  {
88746
+ if (!upperSymbol) return false;
88747
+
88600
88748
  return this.IsChinaFutures(upperSymbol) ||
88601
88749
  this.IsNYMEX(upperSymbol) || this.IsCOMEX(upperSymbol) || this.IsNYBOT(upperSymbol) || this.IsCBOT(upperSymbol) ||
88602
88750
  this.IsLME(upperSymbol) || this.IsTOCOM(upperSymbol);
@@ -111268,6 +111416,9 @@ function ScriptIndex(name,script,args,option)
111268
111416
  this.IsSync=false; //是否是同步计算 (无数据请求)
111269
111417
  this.IsShow=true; //是否显示图形
111270
111418
 
111419
+ this.RunCount=0; //已执行次数
111420
+ this.MaxRunCount=-1; //最大执行次数 -1=无限
111421
+
111271
111422
  if (option)
111272
111423
  {
111273
111424
  if (option.FloatPrecision>=0) this.FloatPrecision=option.FloatPrecision;
@@ -111283,6 +111434,7 @@ function ScriptIndex(name,script,args,option)
111283
111434
  if (option.OutName) this.OutName=option.OutName;
111284
111435
  if (IFrameSplitOperator.IsNumber(option.YSplitType)) this.YSplitType=option.YSplitType;
111285
111436
  if (IFrameSplitOperator.IsBool(option.IsSync)) this.IsSync=option.IsSync;
111437
+ if (IFrameSplitOperator.IsNumber(option.MaxRunCount)) this.MaxRunCount=option.MaxRunCount;
111286
111438
 
111287
111439
  if (option.Debug)
111288
111440
  {
@@ -111352,6 +111504,14 @@ function ScriptIndex(name,script,args,option)
111352
111504
  }
111353
111505
  }
111354
111506
 
111507
+ //是否超出执行的最大次数
111508
+ this.IsExcessRunCount=function()
111509
+ {
111510
+ if (this.MaxRunCount<=0) return false; //没有限制
111511
+
111512
+ return this.RunCount>=this.MaxRunCount;
111513
+ }
111514
+
111355
111515
  this.ExecuteScript=function(hqChart,windowIndex,hisData)
111356
111516
  {
111357
111517
  this.OutVar=[];
@@ -111421,6 +111581,7 @@ function ScriptIndex(name,script,args,option)
111421
111581
  return;
111422
111582
  }
111423
111583
 
111584
+ ++this.RunCount;
111424
111585
  let code=this.Script;
111425
111586
  let run=JSComplier.Execute(code,option,hqChart.ScriptErrorCallback);
111426
111587
  }
@@ -114464,6 +114625,8 @@ function APIScriptIndex(name,script,args,option, isOverlay)
114464
114625
  if (hqDataType==HQ_DATA_TYPE.MULTIDAY_MINUTE_ID || hqDataType==HQ_DATA_TYPE.MINUTE_ID) postData.daycount=hqChart.DayCount;
114465
114626
  this.HQDataType=hqDataType;
114466
114627
 
114628
+ ++this.RunCount;
114629
+
114467
114630
  if (hqChart.NetworkFilter)
114468
114631
  {
114469
114632
  var obj=
@@ -127847,7 +128010,7 @@ function ScrollBarBGChart()
127847
128010
 
127848
128011
 
127849
128012
 
127850
- var HQCHART_VERSION="1.1.12458";
128013
+ var HQCHART_VERSION="1.1.12469";
127851
128014
 
127852
128015
  function PrintHQChartVersion()
127853
128016
  {
@@ -999,8 +999,11 @@ function DynamicMinuteTitlePainting()
999
999
 
1000
1000
  var item=data.Data;
1001
1001
  var defaultfloatPrecision = this.GetDecimal(this.Symbol); //价格小数位数
1002
+ var upperSymbol=this.Symbol.toUpperCase();
1003
+ var isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol); //期货
1002
1004
  var aryText=[];
1003
1005
  var yClose=item.YClose;
1006
+ if (isFutures && IFrameSplitOperator.IsNumber(item.YClearing)) yClose=item.YClearing;
1004
1007
  if (this.IsShowName) aryText.push({ Text:this.Name, Color:this.NameColor });
1005
1008
 
1006
1009
  var text = IFrameSplitOperator.FormatDateTimeString(item.DateTime, this.IsShowDate ? 'YYYY-MM-DD HH-MM' : 'HH-MM');