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.
@@ -9105,6 +9105,11 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9105
9105
  {
9106
9106
  this.ChartCorssCursor.LastPoint=this.LastPoint;
9107
9107
  this.ChartCorssCursor.CursorIndex=this.CursorIndex;
9108
+ if (this.EnableNewIndex)
9109
+ {
9110
+ this.ChartCorssCursor.CorssCursorIndex=this.CorssCursorIndex;
9111
+ this.ChartCorssCursor.EnableNewIndex=this.EnableNewIndex;
9112
+ }
9108
9113
 
9109
9114
  var bRestoreCanvas=false;
9110
9115
  if (this.CorssCursorCanvas) //独立的十字光标层
@@ -9467,6 +9472,11 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9467
9472
  {
9468
9473
  this.ChartCorssCursor.LastPoint=this.LastPoint;
9469
9474
  this.ChartCorssCursor.CursorIndex=this.CursorIndex;
9475
+ if (this.EnableNewIndex)
9476
+ {
9477
+ this.ChartCorssCursor.CorssCursorIndex=this.CorssCursorIndex;
9478
+ this.ChartCorssCursor.EnableNewIndex=this.EnableNewIndex;
9479
+ }
9470
9480
 
9471
9481
  var bRestoreCanvas=false;
9472
9482
  if (this.CorssCursorCanvas) //独立的十字光标层
@@ -12518,6 +12528,30 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
12518
12528
 
12519
12529
  return aryData;
12520
12530
  }
12531
+
12532
+ //重置指标计数器
12533
+ this.ClearIndexRunCount=function()
12534
+ {
12535
+ //主图指标
12536
+ for(var i=0;i<this.WindowIndex.length;++i)
12537
+ {
12538
+ var item=this.WindowIndex[i];
12539
+ if (!item) continue;
12540
+
12541
+ item.RunCount=0;
12542
+ }
12543
+
12544
+ //叠加指标
12545
+ for(var i=0;i<this.Frame.SubFrame.length;++i)
12546
+ {
12547
+ var item=this.Frame.SubFrame[i];
12548
+ for(var j=0; j<item.OverlayIndex.length; ++j)
12549
+ {
12550
+ var overlayItem=item.OverlayIndex[j];
12551
+ if (overlayItem.Script) overlayItem.Script.RunCount=0;
12552
+ }
12553
+ }
12554
+ }
12521
12555
  }
12522
12556
 
12523
12557
  function GetDevicePixelRatio()
@@ -42095,10 +42129,13 @@ function MinuteTooltipPaint()
42095
42129
  }
42096
42130
 
42097
42131
  var upperSymbol;
42098
- this.YClose=this.TitlePaint.YClose;
42099
- this.YClose=item.YClose;
42100
42132
  if (this.HQChart.Symbol) upperSymbol=this.HQChart.Symbol.toUpperCase();
42133
+ var isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol); //国内期货, 纽约期货交易所
42101
42134
  var defaultfloatPrecision=GetfloatPrecision(this.HQChart.Symbol);//价格小数位数
42135
+
42136
+ this.YClose=this.TitlePaint.YClose;
42137
+ this.YClose=item.YClose;
42138
+ if (isFutures && IFrameSplitOperator.IsNumber(item.YClearing)) this.YClose=item.YClearing;
42102
42139
 
42103
42140
  var aryText=[];
42104
42141
  var result={ AryText:aryText };
@@ -42433,9 +42470,11 @@ function MinuteLeftTooltipPaint()
42433
42470
  if (!drawData || !drawData.Data) return null;
42434
42471
 
42435
42472
  var aryText=[];
42473
+ var isFutures=false;
42436
42474
  var upperSymbol;
42437
42475
  if (this.HQChart.Symbol) upperSymbol=this.HQChart.Symbol.toUpperCase();
42438
42476
  var defaultfloatPrecision=GetfloatPrecision(upperSymbol);//价格小数位数
42477
+ if (upperSymbol) isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol); //国内期货, 纽约期货交易所
42439
42478
 
42440
42479
  if (drawData.Type==0) //连续交易
42441
42480
  {
@@ -42443,6 +42482,7 @@ function MinuteLeftTooltipPaint()
42443
42482
  if (!item) return;
42444
42483
 
42445
42484
  this.YClose=item.YClose;
42485
+ if (isFutures && IFrameSplitOperator.IsNumber(item.YClearing)) this.YClose=item.YClearing;
42446
42486
  var titleItem=this.FormatDate(item.Date);
42447
42487
  if (titleItem) aryText.push(titleItem);
42448
42488
 
@@ -42480,6 +42520,7 @@ function MinuteLeftTooltipPaint()
42480
42520
  if (!item) return;
42481
42521
 
42482
42522
  this.YClose=item.YClose;
42523
+ if (isFutures && IFrameSplitOperator.IsNumber(item.YClearing)) this.YClose=item.YClearing;
42483
42524
  var titleItem=this.FormatDate(item.Date);
42484
42525
  if (titleItem) aryText.push(titleItem);
42485
42526
 
@@ -49100,6 +49141,9 @@ function ChartCorssCursor()
49100
49141
  this.IsFixXLastTime=false; //是否修正X轴,超出当前时间的,X轴调整到当前最后的时间.
49101
49142
  this.IsDrawXRangeBG=false; //是否绘制十字光标背景
49102
49143
 
49144
+ this.EnableNewIndex=false; //分时图是否使用最新的索引结构 (由外部chart容器传入)
49145
+ this.CorssCursorIndex; //分时图新版本的索引结构 (由外部chart容器传入)
49146
+
49103
49147
  this.PointX;
49104
49148
  this.PointY;
49105
49149
 
@@ -49157,20 +49201,34 @@ function ChartCorssCursor()
49157
49201
 
49158
49202
  this.GetMinuteCloseYPoint=function(index)
49159
49203
  {
49160
- if (!IFrameSplitOperator.IsNumber(index)) return null;
49161
- index=parseInt(index);
49162
- if (!this.StringFormatX.Data) return null;
49163
- var data = this.StringFormatX.Data;
49164
- if (!data.Data || data.Data.length <= 0) return null;
49165
- var dataIndex = data.DataOffset + index;
49166
- if (dataIndex >= data.Data.length) dataIndex = data.Data.length - 1;
49167
- if (dataIndex < 0) return null;
49204
+ if (this.EnableNewIndex && this.CorssCursorIndex)
49205
+ {
49206
+ if (!this.StringFormatX || !this.StringFormatX.GetMinuteCloseYPoint) return null;
49207
+
49208
+ var closeData=this.StringFormatX.GetMinuteCloseYPoint(this.CorssCursorIndex);
49209
+ if (!closeData) return null;
49210
+
49211
+ this.Close=closeData.Price;
49212
+ return closeData.Y;
49213
+ }
49214
+ else
49215
+ {
49168
49216
 
49169
- var close = data.Data[dataIndex];
49170
- if (!IFrameSplitOperator.IsNumber(index)) return null;
49171
- this.Close=close;
49172
- var yPoint = this.Frame.GetYFromData(this.Close);
49173
- return yPoint;
49217
+ if (!IFrameSplitOperator.IsNumber(index)) return null;
49218
+ index=parseInt(index);
49219
+ if (!this.StringFormatX.Data) return null;
49220
+ var data = this.StringFormatX.Data;
49221
+ if (!data.Data || data.Data.length <= 0) return null;
49222
+ var dataIndex = data.DataOffset + index;
49223
+ if (dataIndex >= data.Data.length) dataIndex = data.Data.length - 1;
49224
+ if (dataIndex < 0) return null;
49225
+
49226
+ var close = data.Data[dataIndex];
49227
+ if (!IFrameSplitOperator.IsNumber(index)) return null;
49228
+ this.Close=close;
49229
+ var yPoint = this.Frame.GetYFromData(this.Close);
49230
+ return yPoint;
49231
+ }
49174
49232
  }
49175
49233
 
49176
49234
  this.GetDateTimeRange=function(index, option)
@@ -50837,6 +50895,7 @@ function HQMinuteTimeStringFormat()
50837
50895
  this.newMethod();
50838
50896
  delete this.newMethod;
50839
50897
 
50898
+ this.ClassName="HQMinuteTimeStringFormat";
50840
50899
  this.Frame;
50841
50900
  this.Symbol;
50842
50901
  this.Point;
@@ -50968,6 +51027,88 @@ function HQMinuteTimeStringFormat()
50968
51027
 
50969
51028
  return true;
50970
51029
  }
51030
+
51031
+ this.GetMinuteCloseYPoint=function(cursorIndexData)
51032
+ {
51033
+ var type=cursorIndexData.Type;
51034
+ if (type==1 || type==2 || type==3) //单日 1=主图 2=盘前 3=盘后
51035
+ {
51036
+ if (type==1)
51037
+ {
51038
+ if (!this.Data || this.Data.Data.length <= 0) return null;
51039
+ var index=cursorIndexData.DataIndex;
51040
+ if (index<0 || index>=this.Data.Data.length) index=this.Data.Data.length-1;
51041
+
51042
+ var close = this.Data.Data[index];
51043
+ var yPoint = this.Frame.GetYFromData(close);
51044
+ return { Price:close, Y:yPoint };
51045
+ }
51046
+ else if (type==2)
51047
+ {
51048
+ if (!this.BeforeOpenData || !this.BeforeOpenData.Data) return false;
51049
+ if (cursorIndexData.DataIndex<0 || cursorIndexData.DataIndex>=this.BeforeOpenData.Data.length) return null;
51050
+ var item=this.BeforeOpenData.Data[cursorIndexData.DataIndex];
51051
+
51052
+ var close=item.Price;
51053
+ var yPoint = this.Frame.GetYFromData(close);
51054
+ return { Price:close, Y:yPoint };
51055
+ }
51056
+ else if (type==3)
51057
+ {
51058
+ if (!this.AfterCloseData || !this.AfterCloseData.Data) return false;
51059
+ if (cursorIndexData.DataIndex<0 || cursorIndexData.DataIndex>=this.AfterCloseData.Data.length) return null;
51060
+ var item=this.AfterCloseData.Data[cursorIndexData.DataIndex];
51061
+
51062
+ var close=item.Price;
51063
+ var yPoint = this.Frame.GetYFromData(close);
51064
+ return { Price:close, Y:yPoint };
51065
+ }
51066
+ }
51067
+ else if (type==10 || type==20 || type==30) //多日 10=主图 20=盘前 30=盘后
51068
+ {
51069
+ if (type==10)
51070
+ {
51071
+ if (!this.Data || this.Data.Data.length <= 0) return null;
51072
+ var index=this.Frame.MinuteCount*cursorIndexData.DayIndex+cursorIndexData.DataIndex;
51073
+ if (index<0 || index>=this.Data.Data.length) index=this.Data.Data.length-1;
51074
+
51075
+ var close = this.Data.Data[index];
51076
+ var yPoint = this.Frame.GetYFromData(close);
51077
+ return { Price:close, Y:yPoint };
51078
+ }
51079
+ else if (type==20)
51080
+ {
51081
+ var multiDayBeforeOpenData=this.GetMultiDayBeforeOpenData();
51082
+ if (!multiDayBeforeOpenData) return null;
51083
+ if (cursorIndexData.DayIndex<0 || cursorIndexData.DayIndex>=multiDayBeforeOpenData.length) return null;
51084
+
51085
+ var dayItem=multiDayBeforeOpenData[cursorIndexData.DayIndex];
51086
+ if (cursorIndexData.DataIndex<0 || cursorIndexData.DataIndex>=dayItem.Data.length) return null;
51087
+ var item=dayItem.Data[cursorIndexData.DataIndex];
51088
+
51089
+ var close=item.Price;
51090
+ var yPoint = this.Frame.GetYFromData(close);
51091
+ return { Price:close, Y:yPoint };
51092
+ }
51093
+ else if (type==30)
51094
+ {
51095
+ var multiDayAfterCloseData=this.GetMultiDayAfterCloseData();
51096
+ if (!multiDayAfterCloseData) return null;
51097
+ if (cursorIndexData.DayIndex<0 || cursorIndexData.DayIndex>=multiDayAfterCloseData.length) return null;
51098
+
51099
+ var dayItem=multiDayAfterCloseData[cursorIndexData.DayIndex];
51100
+ if (cursorIndexData.DataIndex<0 || cursorIndexData.DataIndex>=dayItem.Data.length) return null;
51101
+ var item=dayItem.Data[cursorIndexData.DataIndex];
51102
+
51103
+ var close=item.Price;
51104
+ var yPoint = this.Frame.GetYFromData(close);
51105
+ return { Price:close, Y:yPoint };
51106
+ }
51107
+ }
51108
+
51109
+
51110
+ return null;
51111
+ }
50971
51112
  }
50972
51113
 
50973
51114
 
@@ -52171,7 +52312,10 @@ function DynamicMinuteTitlePainting()
52171
52312
  {
52172
52313
  if (!data || !data.Data) return;
52173
52314
 
52174
- var defaultfloatPrecision=GetfloatPrecision(this.Symbol);//价格小数位数
52315
+ var upperSymbol=this.Symbol.toUpperCase();
52316
+ var defaultfloatPrecision=GetfloatPrecision(this.Symbol); //价格小数位数
52317
+ var isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol); //国内期货, 纽约期货交易所
52318
+
52175
52319
  var item=data.Data;
52176
52320
  var isLastOne=data.IsLastOne;
52177
52321
  var aryText=[]; //{Color:, Text: }
@@ -52217,6 +52361,8 @@ function DynamicMinuteTitlePainting()
52217
52361
  var amount=item.Amount;
52218
52362
  var yClose=item.YClose;
52219
52363
  if (!IFrameSplitOperator.IsNumber(yClose)) yClose=this.YClose;
52364
+ if (isFutures && IFrameSplitOperator.IsNumber(item.YClearing)) yClose=item.YClearing; //期货使用昨结算
52365
+
52220
52366
 
52221
52367
  if (IFrameSplitOperator.IsNumber(close))
52222
52368
  {
@@ -68373,22 +68519,27 @@ function KLineChartContainer(uielement,OffscreenElement)
68373
68519
  {
68374
68520
  if (!this.WindowIndex[windowIndex]) return;
68375
68521
 
68376
- if (typeof(this.WindowIndex[windowIndex].RequestData)=="function") //数据需要另外下载的.
68522
+ var item=this.WindowIndex[windowIndex];
68523
+ if (typeof(item.RequestData)=="function") //数据需要另外下载的.
68377
68524
  {
68378
- this.WindowIndex[windowIndex].RequestData(this,windowIndex,hisData, option);
68525
+ item.RequestData(this,windowIndex,hisData, option);
68379
68526
  return;
68380
68527
  }
68381
- if (typeof(this.WindowIndex[windowIndex].ExecuteScript)=='function')
68528
+
68529
+ if (typeof(item.ExecuteScript)=='function')
68382
68530
  {
68383
- this.WindowIndex[windowIndex].ExecuteScript(this,windowIndex,hisData);
68531
+ if (option && option.CheckRunCount)
68532
+ if (item.IsExcessRunCount()) return;
68533
+
68534
+ item.ExecuteScript(this,windowIndex,hisData);
68384
68535
  return;
68385
68536
  }
68386
68537
 
68387
- this.WindowIndex[windowIndex].BindData(this,windowIndex,hisData);
68538
+ item.BindData(this,windowIndex,hisData);
68388
68539
  }
68389
68540
 
68390
68541
  //叠加指标
68391
- this.BindOverlayIndexData=function(overlayItem, windowIndex, hisData)
68542
+ this.BindOverlayIndexData=function(overlayItem, windowIndex, hisData, option)
68392
68543
  {
68393
68544
  if (!overlayItem.Script) return;
68394
68545
 
@@ -68400,6 +68551,9 @@ function KLineChartContainer(uielement,OffscreenElement)
68400
68551
 
68401
68552
  if (typeof(overlayItem.Script.ExecuteScript)=='function')
68402
68553
  {
68554
+ if (option && option.CheckRunCount)
68555
+ if (overlayItem.Script.IsExcessRunCount()) return;
68556
+
68403
68557
  overlayItem.Script.ExecuteScript(this,windowIndex,hisData);
68404
68558
  return;
68405
68559
  }
@@ -68565,7 +68719,7 @@ function KLineChartContainer(uielement,OffscreenElement)
68565
68719
  });
68566
68720
  }
68567
68721
 
68568
- this.BindAllOverlayIndexData=function(hisData)
68722
+ this.BindAllOverlayIndexData=function(hisData, option)
68569
68723
  {
68570
68724
  if (!this.Frame || !this.Frame.SubFrame) return;
68571
68725
 
@@ -68576,7 +68730,7 @@ function KLineChartContainer(uielement,OffscreenElement)
68576
68730
  for(var j in item.OverlayIndex)
68577
68731
  {
68578
68732
  var overlayItem=item.OverlayIndex[j];
68579
- this.BindOverlayIndexData(overlayItem,i,hisData)
68733
+ this.BindOverlayIndexData(overlayItem,i,hisData,option)
68580
68734
  }
68581
68735
  }
68582
68736
  }
@@ -69259,7 +69413,7 @@ function KLineChartContainer(uielement,OffscreenElement)
69259
69413
 
69260
69414
  for(var i=0; i<this.Frame.SubFrame.length; ++i)
69261
69415
  {
69262
- this.BindIndexData(i,bindData);
69416
+ this.BindIndexData(i,bindData, { CheckRunCount:true });
69263
69417
  }
69264
69418
 
69265
69419
  //刷新画图
@@ -69272,7 +69426,7 @@ function KLineChartContainer(uielement,OffscreenElement)
69272
69426
  this.SendKLineUpdateEvent(bindData);
69273
69427
 
69274
69428
  //叠加指标计算
69275
- this.BindAllOverlayIndexData(bindData);
69429
+ this.BindAllOverlayIndexData(bindData,{ CheckRunCount:true });
69276
69430
 
69277
69431
  if (this.mapEvent.has(JSCHART_EVENT_ID.ON_RECV_REALTIME_DATA))
69278
69432
  {
@@ -69997,6 +70151,7 @@ function KLineChartContainer(uielement,OffscreenElement)
69997
70151
  this.ClearRectSelect(true);
69998
70152
  this.Frame.ClearUpDonwFrameYData();
69999
70153
  this.ClearCustomKLine();
70154
+
70000
70155
 
70001
70156
  var kLineDrawType=this.GetKLineDrawType();
70002
70157
  if (kLineDrawType==10 || kLineDrawType==11 || kLineDrawType==12 || kLineDrawType==16) isDataTypeChange=true;
@@ -70018,6 +70173,7 @@ function KLineChartContainer(uielement,OffscreenElement)
70018
70173
 
70019
70174
  if (isDataTypeChange==false && !this.IsApiPeriod)
70020
70175
  {
70176
+ this.ClearIndexRunCount();
70021
70177
  this.Update( {UpdateCursorIndexType:2} ); //更新的时候 取消显示十字光标
70022
70178
  return;
70023
70179
  }
@@ -70030,6 +70186,7 @@ function KLineChartContainer(uielement,OffscreenElement)
70030
70186
  this.AutoUpdateEvent(false,'KLineChartContainer::ChangePeriod'); //切换周期先停止更新
70031
70187
  this.ResetScrollBar();
70032
70188
  this.ResetOverlaySymbolStatus();
70189
+ this.ClearIndexRunCount();
70033
70190
  this.RequestHistoryData(); //请求日线数据
70034
70191
  //this.ReqeustKLineInfoData();
70035
70192
  }
@@ -70039,6 +70196,7 @@ function KLineChartContainer(uielement,OffscreenElement)
70039
70196
  this.AutoUpdateEvent(false,'KLineChartContainer::ChangePeriod'); //切换周期先停止更新
70040
70197
  this.ResetScrollBar();
70041
70198
  this.ResetOverlaySymbolStatus();
70199
+ this.ClearIndexRunCount();
70042
70200
  this.ReqeustHistoryMinuteData(); //请求分钟数据
70043
70201
  }
70044
70202
  else if (ChartData.IsTickPeriod(this.Period))
@@ -70046,6 +70204,7 @@ function KLineChartContainer(uielement,OffscreenElement)
70046
70204
  this.CancelAutoUpdate(); //先停止定时器
70047
70205
  this.AutoUpdateEvent(false,'KLineChartContainer::ChangePeriod');
70048
70206
  this.ResetScrollBar();
70207
+ this.ClearIndexRunCount();
70049
70208
  this.RequestTickData(); //请求分笔数据
70050
70209
  }
70051
70210
  }
@@ -71346,6 +71505,7 @@ function KLineChartContainer(uielement,OffscreenElement)
71346
71505
  this.ClearKLineCaluate();
71347
71506
  this.HideTooltip();
71348
71507
  this.ResetScrollBar();
71508
+ this.ClearIndexRunCount();
71349
71509
 
71350
71510
  this.Symbol=symbol;
71351
71511
  if (!symbol)
@@ -76443,6 +76603,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
76443
76603
  this.ClearIndexPaint(); //清空指标
76444
76604
  this.ResetOverlaySymbolStatus();
76445
76605
  this.ReloadChartDrawPicture();
76606
+ this.ClearIndexRunCount();
76446
76607
 
76447
76608
  if (option)
76448
76609
  {
@@ -77831,7 +77992,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
77831
77992
  }
77832
77993
  }
77833
77994
 
77834
- this.BindIndexData=function(windowIndex,hisData)
77995
+ this.BindIndexData=function(windowIndex, hisData, option)
77835
77996
  {
77836
77997
  if (!this.WindowIndex[windowIndex]) return;
77837
77998
 
@@ -78276,7 +78437,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
78276
78437
  }
78277
78438
 
78278
78439
  //计算叠加指标
78279
- this.BindAllOverlayIndexData=function(hisData)
78440
+ this.BindAllOverlayIndexData=function(hisData, option)
78280
78441
  {
78281
78442
  if (!this.Frame || !this.Frame.SubFrame) return;
78282
78443
 
@@ -78287,13 +78448,13 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
78287
78448
  for(var j in item.OverlayIndex)
78288
78449
  {
78289
78450
  var overlayItem=item.OverlayIndex[j];
78290
- this.BindOverlayIndexData(overlayItem,i,hisData)
78451
+ this.BindOverlayIndexData(overlayItem,i,hisData,option)
78291
78452
  }
78292
78453
  }
78293
78454
  }
78294
78455
 
78295
78456
  //叠加指标
78296
- this.BindOverlayIndexData=function(overlayItem, windowIndex, hisData)
78457
+ this.BindOverlayIndexData=function(overlayItem, windowIndex, hisData, option)
78297
78458
  {
78298
78459
  if (!overlayItem.Script) return;
78299
78460
 
@@ -79024,7 +79185,9 @@ MinuteChartContainer.JsonDataToMinuteData=function(data,isBeforeData)
79024
79185
  var preClose=data.stock[0].yclose; //前一个数据价格
79025
79186
  var preAvPrice=data.stock[0].yclose; //前一个均价
79026
79187
  var yClose=data.stock[0].yclose;
79027
- if (isFutures && data.stock[0].yclearing) yClose=preClose=preAvPrice=data.stock[0].yclearing; //期货使用昨结算价
79188
+ var yClearing=data.stock[0].yclearing;
79189
+
79190
+ if (isFutures && yClearing) preClose=preAvPrice=yClearing; //期货使用昨结算价
79028
79191
 
79029
79192
  if (!IFrameSplitOperator.IsNonEmptyArray(data.stock[0].minute)) return aryMinuteData;
79030
79193
 
@@ -79033,7 +79196,7 @@ MinuteChartContainer.JsonDataToMinuteData=function(data,isBeforeData)
79033
79196
  {
79034
79197
  var jsData=data.stock[0].minute[i];
79035
79198
  var item=new MinuteData();
79036
-
79199
+ item.YClearing=yClearing;
79037
79200
  item.YClose=yClose;
79038
79201
  item.Close=jsData.price;
79039
79202
  item.Open=jsData.open;
@@ -79064,24 +79227,11 @@ MinuteChartContainer.JsonDataToMinuteData=function(data,isBeforeData)
79064
79227
 
79065
79228
  if (!item.AvPrice) item.AvPrice=preAvPrice;
79066
79229
 
79067
- //价格是0的 都用空
79068
- //if (item.Open<=0) item.Open=null;
79069
- //if (item.Close<=0) item.Close=null;
79070
- //if (item.AvPrice<=0) item.AvPrice=null;
79071
- //if (item.High<=0) item.High=null;
79072
- //if (item.Low<=0) item.Low=null;
79073
-
79074
- //if (isFutures) item.AvPrice=null; //期货均价暂时没有
79075
-
79076
79230
  if (yClose && item.Close)
79077
79231
  item.Increase=(item.Close-yClose)/yClose*100; //涨幅 (最新价格-昨收)/昨收*100;
79078
79232
 
79079
-
79080
- //均价太大 可能是后台算错了
79081
- var checkValue=Math.abs(item.AvPrice-item.Close);
79082
- //JSConsole.Chart.Log(`[MinuteChartContainer::JsonDataToMinuteData] checkValue=${checkValue}, ${item.Close*0.13} `)
79083
- if (isSHSZ && checkValue>item.Close*0.13 )
79084
- item.AvPrice=preAvPrice;
79233
+ if (isFutures && yClearing && item.Close)
79234
+ item.Increase=(item.Close-yClearing)/yClearing*100; //涨幅 (最新价格-昨结算价)/昨结算价*100;
79085
79235
 
79086
79236
  //上次价格
79087
79237
  if (IFrameSplitOperator.IsNumber(jsData.price)) preClose=jsData.price;
@@ -79195,7 +79345,7 @@ MinuteChartContainer.JsonDataToMinuteDataArray=function(data)
79195
79345
  var symbol=data.symbol;
79196
79346
  var upperSymbol=symbol.toUpperCase();
79197
79347
  var isSHSZ=MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol);
79198
- var isSHO=MARKET_SUFFIX_NAME.IsSHO(upperSymbol); //上海股票期权
79348
+ var isSHO=MARKET_SUFFIX_NAME.IsSHO(upperSymbol); //上海股票期权
79199
79349
  var isSZO=MARKET_SUFFIX_NAME.IsSZO(upperSymbol); //深证股票期权
79200
79350
  var isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol); //国内期货, 纽约期货交易所
79201
79351
  var result=[];
@@ -79205,22 +79355,25 @@ MinuteChartContainer.JsonDataToMinuteDataArray=function(data)
79205
79355
  var minuteData=[];
79206
79356
  var dayData=data.data[i];
79207
79357
  var date=dayData.date;
79358
+ var yClearing=dayData.yclearing; //昨结算价
79208
79359
  var yClose=dayData.yclose; //前收盘 计算涨幅
79209
79360
  var preClose=yClose; //前一个数据价格
79210
79361
  var preAvPrice=null; //上一个均价
79211
- var yClearing=dayData.yclearing; //昨结算价
79212
79362
 
79213
- //var preAvPrice=data.stock[0].yclose; //前一个均价
79363
+ if (isFutures && yClearing) preClose=preAvPrice=yClearing; //期货使用昨结算价
79364
+
79214
79365
  for(var j in dayData.minute)
79215
79366
  {
79216
79367
  var jsData=dayData.minute[j];
79217
79368
  if (jsData[2]) preClose=jsData[2]; //保存上一个收盘数据
79218
79369
  var item=new MinuteData();
79370
+ item.YClearing=yClearing;
79219
79371
  item.YClose=yClose;
79220
79372
  item.Close=jsData[2];
79221
79373
  item.Open=jsData[1];
79222
79374
  item.High=jsData[3];
79223
79375
  item.Low=jsData[4];
79376
+ item.Increase=null;
79224
79377
  if (isSHSZ) item.Vol=jsData[5]/100; //原始单位股
79225
79378
  else item.Vol=jsData[5];
79226
79379
  item.Amount=jsData[6];
@@ -79243,23 +79396,12 @@ MinuteChartContainer.JsonDataToMinuteDataArray=function(data)
79243
79396
 
79244
79397
  if (!item.AvPrice && preAvPrice) item.AvPrice=preAvPrice;
79245
79398
 
79246
- if (item.Close && yClose) item.Increase = (item.Close - yClose)/yClose*100;
79247
- else item.Increase=null;
79399
+ if (item.Close && yClose)
79400
+ item.Increase = (item.Close - yClose)/yClose*100;
79248
79401
 
79249
- //价格是0的 都用空
79250
- //if (item.Open<=0) item.Open=null;
79251
- //if (item.Close<=0) item.Close=null;
79252
- //if (item.AvPrice<=0) item.AvPrice=null;
79253
- //if (item.High<=0) item.High=null;
79254
- //if (item.Low<=0) item.Low=null;
79255
- //if (item.AvPrice<=0) item.AvPrice=null;
79256
-
79257
- //均价太大 可能是后台算错了
79258
- if (item.AvPrice && isSHSZ)
79259
- {
79260
- var checkValue=Math.abs(item.AvPrice-item.Close);
79261
- if (checkValue>item.Close*0.13 ) item.AvPrice=preAvPrice;
79262
- }
79402
+ if (item.Close && yClearing && isFutures)
79403
+ item.Increase = (item.Close - yClearing)/yClearing*100;
79404
+
79263
79405
 
79264
79406
  if (jsData.length>7 && jsData[7]>0 && item.AvPrice===jsData[7]) preAvPrice=jsData[7];
79265
79407
  if (jsData[extendDataIndex]) item.ExtendData=jsData[extendDataIndex];
@@ -79270,9 +79412,9 @@ MinuteChartContainer.JsonDataToMinuteDataArray=function(data)
79270
79412
  var newData=new ChartData();
79271
79413
  newData.Data=minuteData;
79272
79414
  newData.YClose=yClose;
79415
+ if (IFrameSplitOperator.IsNumber(yClearing)) newData.YClearing=yClearing;
79273
79416
  newData.Close=dayData.close;
79274
79417
  newData.Date=date;
79275
- if (IFrameSplitOperator.IsNumber(yClearing)) newData.YClearing=yClearing;
79276
79418
 
79277
79419
  result.push(newData);
79278
79420
  }
@@ -79321,6 +79463,7 @@ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, i
79321
79463
 
79322
79464
  var date=callAuctionData.Date;
79323
79465
  var yClose=callAuctionData.YClose;
79466
+ var yClearing=callAuctionData.YClearing;
79324
79467
  var extendDataIndex=isBeforeOpen? JSCHART_DATA_FIELD_ID.MINUTE_BEFOREOPEN_EXTENDDATA:JSCHART_DATA_FIELD_ID.MINUTE_AFTERCLOSE_EXTENDDATA; //扩展数据序号
79325
79468
  if (callAuctionData.Ver==1.0)
79326
79469
  {
@@ -79330,6 +79473,7 @@ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, i
79330
79473
  var item=isBeforeOpen? new BeforeOpenData() : new AfterCloseData();
79331
79474
  var jsData=data[i];
79332
79475
  item.YClose=yClose;
79476
+ item.YClearing=yClearing;
79333
79477
  item.Time=jsData[0];
79334
79478
  item.Date=date;
79335
79479
  item.Price=jsData[1];
@@ -79353,6 +79497,7 @@ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, i
79353
79497
  var item=isBeforeOpen? new BeforeOpenData() : new AfterCloseData();
79354
79498
  var jsData=data[i];
79355
79499
  item.YClose=yClose;
79500
+ item.YClearing=yClearing;
79356
79501
  item.Time=jsData[0];
79357
79502
  item.Date=date;
79358
79503
  item.Price=jsData[1];
@@ -79380,6 +79525,7 @@ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, i
79380
79525
  var item=isBeforeOpen? new BeforeOpenData() : new AfterCloseData();
79381
79526
  var jsData=data[i];
79382
79527
  item.YClose=yClose;
79528
+ item.YClearing=yClearing;
79383
79529
  item.Time=jsData[0];
79384
79530
  item.Date=date;
79385
79531
  item.Price=jsData[1];
@@ -79409,7 +79555,7 @@ MinuteChartContainer.JosnDataToBeforeOpenDataArray=function(data)
79409
79555
  for(var i in data.data)
79410
79556
  {
79411
79557
  var dayItem=data.data[i];
79412
- var beforeOpenData={ Data:[], TotalCount:15, Ver:1.0, Date:dayItem.date, YClose:dayItem.yclose };
79558
+ var beforeOpenData={ Data:[], TotalCount:15, Ver:1.0, Date:dayItem.date, YClose:dayItem.yclose, YClearing:dayItem.YClearing };
79413
79559
  if (dayItem.beforeinfo)
79414
79560
  {
79415
79561
  if (IFrameSplitOperator.IsNumber(dayItem.beforeinfo.totalcount)) beforeOpenData.TotalCount=dayItem.beforeinfo.totalcount;
@@ -79434,7 +79580,7 @@ MinuteChartContainer.JosnDataToAfterCloseDataArray=function(data)
79434
79580
  for(var i in data.data)
79435
79581
  {
79436
79582
  var dayItem=data.data[i];
79437
- var afterCloseData={ Data:[], TotalCount:15, Ver:1.0, Date:dayItem.date, YClose:dayItem.yclose };
79583
+ var afterCloseData={ Data:[], TotalCount:15, Ver:1.0, Date:dayItem.date, YClose:dayItem.yclose, YClearing:dayItem.YClearing };
79438
79584
 
79439
79585
  if (dayItem.afterinfo)
79440
79586
  {
@@ -88553,6 +88699,8 @@ var MARKET_SUFFIX_NAME=
88553
88699
 
88554
88700
  IsFutures:function(upperSymbol) //是否是期货 包含国外的
88555
88701
  {
88702
+ if (!upperSymbol) return false;
88703
+
88556
88704
  return this.IsChinaFutures(upperSymbol) ||
88557
88705
  this.IsNYMEX(upperSymbol) || this.IsCOMEX(upperSymbol) || this.IsNYBOT(upperSymbol) || this.IsCBOT(upperSymbol) ||
88558
88706
  this.IsLME(upperSymbol) || this.IsTOCOM(upperSymbol);
@@ -111224,6 +111372,9 @@ function ScriptIndex(name,script,args,option)
111224
111372
  this.IsSync=false; //是否是同步计算 (无数据请求)
111225
111373
  this.IsShow=true; //是否显示图形
111226
111374
 
111375
+ this.RunCount=0; //已执行次数
111376
+ this.MaxRunCount=-1; //最大执行次数 -1=无限
111377
+
111227
111378
  if (option)
111228
111379
  {
111229
111380
  if (option.FloatPrecision>=0) this.FloatPrecision=option.FloatPrecision;
@@ -111239,6 +111390,7 @@ function ScriptIndex(name,script,args,option)
111239
111390
  if (option.OutName) this.OutName=option.OutName;
111240
111391
  if (IFrameSplitOperator.IsNumber(option.YSplitType)) this.YSplitType=option.YSplitType;
111241
111392
  if (IFrameSplitOperator.IsBool(option.IsSync)) this.IsSync=option.IsSync;
111393
+ if (IFrameSplitOperator.IsNumber(option.MaxRunCount)) this.MaxRunCount=option.MaxRunCount;
111242
111394
 
111243
111395
  if (option.Debug)
111244
111396
  {
@@ -111308,6 +111460,14 @@ function ScriptIndex(name,script,args,option)
111308
111460
  }
111309
111461
  }
111310
111462
 
111463
+ //是否超出执行的最大次数
111464
+ this.IsExcessRunCount=function()
111465
+ {
111466
+ if (this.MaxRunCount<=0) return false; //没有限制
111467
+
111468
+ return this.RunCount>=this.MaxRunCount;
111469
+ }
111470
+
111311
111471
  this.ExecuteScript=function(hqChart,windowIndex,hisData)
111312
111472
  {
111313
111473
  this.OutVar=[];
@@ -111377,6 +111537,7 @@ function ScriptIndex(name,script,args,option)
111377
111537
  return;
111378
111538
  }
111379
111539
 
111540
+ ++this.RunCount;
111380
111541
  let code=this.Script;
111381
111542
  let run=JSComplier.Execute(code,option,hqChart.ScriptErrorCallback);
111382
111543
  }
@@ -114420,6 +114581,8 @@ function APIScriptIndex(name,script,args,option, isOverlay)
114420
114581
  if (hqDataType==HQ_DATA_TYPE.MULTIDAY_MINUTE_ID || hqDataType==HQ_DATA_TYPE.MINUTE_ID) postData.daycount=hqChart.DayCount;
114421
114582
  this.HQDataType=hqDataType;
114422
114583
 
114584
+ ++this.RunCount;
114585
+
114423
114586
  if (hqChart.NetworkFilter)
114424
114587
  {
114425
114588
  var obj=
@@ -127803,7 +127966,7 @@ function ScrollBarBGChart()
127803
127966
 
127804
127967
 
127805
127968
 
127806
- var HQCHART_VERSION="1.1.12458";
127969
+ var HQCHART_VERSION="1.1.12469";
127807
127970
 
127808
127971
  function PrintHQChartVersion()
127809
127972
  {
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.12458";
8
+ var HQCHART_VERSION="1.1.12469";
9
9
 
10
10
  function PrintHQChartVersion()
11
11
  {