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.
@@ -19008,6 +19008,9 @@ function ScriptIndex(name,script,args,option)
19008
19008
  this.IsSync=false; //是否是同步计算 (无数据请求)
19009
19009
  this.IsShow=true; //是否显示图形
19010
19010
 
19011
+ this.RunCount=0; //已执行次数
19012
+ this.MaxRunCount=-1; //最大执行次数 -1=无限
19013
+
19011
19014
  if (option)
19012
19015
  {
19013
19016
  if (option.FloatPrecision>=0) this.FloatPrecision=option.FloatPrecision;
@@ -19023,6 +19026,7 @@ function ScriptIndex(name,script,args,option)
19023
19026
  if (option.OutName) this.OutName=option.OutName;
19024
19027
  if (IFrameSplitOperator.IsNumber(option.YSplitType)) this.YSplitType=option.YSplitType;
19025
19028
  if (IFrameSplitOperator.IsBool(option.IsSync)) this.IsSync=option.IsSync;
19029
+ if (IFrameSplitOperator.IsNumber(option.MaxRunCount)) this.MaxRunCount=option.MaxRunCount;
19026
19030
 
19027
19031
  if (option.Debug)
19028
19032
  {
@@ -19092,6 +19096,14 @@ function ScriptIndex(name,script,args,option)
19092
19096
  }
19093
19097
  }
19094
19098
 
19099
+ //是否超出执行的最大次数
19100
+ this.IsExcessRunCount=function()
19101
+ {
19102
+ if (this.MaxRunCount<=0) return false; //没有限制
19103
+
19104
+ return this.RunCount>=this.MaxRunCount;
19105
+ }
19106
+
19095
19107
  this.ExecuteScript=function(hqChart,windowIndex,hisData)
19096
19108
  {
19097
19109
  this.OutVar=[];
@@ -19161,6 +19173,7 @@ function ScriptIndex(name,script,args,option)
19161
19173
  return;
19162
19174
  }
19163
19175
 
19176
+ ++this.RunCount;
19164
19177
  let code=this.Script;
19165
19178
  let run=JSComplier.Execute(code,option,hqChart.ScriptErrorCallback);
19166
19179
  }
@@ -22204,6 +22217,8 @@ function APIScriptIndex(name,script,args,option, isOverlay)
22204
22217
  if (hqDataType==HQ_DATA_TYPE.MULTIDAY_MINUTE_ID || hqDataType==HQ_DATA_TYPE.MINUTE_ID) postData.daycount=hqChart.DayCount;
22205
22218
  this.HQDataType=hqDataType;
22206
22219
 
22220
+ ++this.RunCount;
22221
+
22207
22222
  if (hqChart.NetworkFilter)
22208
22223
  {
22209
22224
  var obj=
@@ -5025,6 +5025,11 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
5025
5025
  {
5026
5026
  this.ChartCorssCursor.LastPoint=this.LastPoint;
5027
5027
  this.ChartCorssCursor.CursorIndex=this.CursorIndex;
5028
+ if (this.EnableNewIndex)
5029
+ {
5030
+ this.ChartCorssCursor.CorssCursorIndex=this.CorssCursorIndex;
5031
+ this.ChartCorssCursor.EnableNewIndex=this.EnableNewIndex;
5032
+ }
5028
5033
 
5029
5034
  var bRestoreCanvas=false;
5030
5035
  if (this.CorssCursorCanvas) //独立的十字光标层
@@ -5387,6 +5392,11 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
5387
5392
  {
5388
5393
  this.ChartCorssCursor.LastPoint=this.LastPoint;
5389
5394
  this.ChartCorssCursor.CursorIndex=this.CursorIndex;
5395
+ if (this.EnableNewIndex)
5396
+ {
5397
+ this.ChartCorssCursor.CorssCursorIndex=this.CorssCursorIndex;
5398
+ this.ChartCorssCursor.EnableNewIndex=this.EnableNewIndex;
5399
+ }
5390
5400
 
5391
5401
  var bRestoreCanvas=false;
5392
5402
  if (this.CorssCursorCanvas) //独立的十字光标层
@@ -8438,6 +8448,30 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8438
8448
 
8439
8449
  return aryData;
8440
8450
  }
8451
+
8452
+ //重置指标计数器
8453
+ this.ClearIndexRunCount=function()
8454
+ {
8455
+ //主图指标
8456
+ for(var i=0;i<this.WindowIndex.length;++i)
8457
+ {
8458
+ var item=this.WindowIndex[i];
8459
+ if (!item) continue;
8460
+
8461
+ item.RunCount=0;
8462
+ }
8463
+
8464
+ //叠加指标
8465
+ for(var i=0;i<this.Frame.SubFrame.length;++i)
8466
+ {
8467
+ var item=this.Frame.SubFrame[i];
8468
+ for(var j=0; j<item.OverlayIndex.length; ++j)
8469
+ {
8470
+ var overlayItem=item.OverlayIndex[j];
8471
+ if (overlayItem.Script) overlayItem.Script.RunCount=0;
8472
+ }
8473
+ }
8474
+ }
8441
8475
  }
8442
8476
 
8443
8477
  function GetDevicePixelRatio()
@@ -38015,10 +38049,13 @@ function MinuteTooltipPaint()
38015
38049
  }
38016
38050
 
38017
38051
  var upperSymbol;
38018
- this.YClose=this.TitlePaint.YClose;
38019
- this.YClose=item.YClose;
38020
38052
  if (this.HQChart.Symbol) upperSymbol=this.HQChart.Symbol.toUpperCase();
38053
+ var isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol); //国内期货, 纽约期货交易所
38021
38054
  var defaultfloatPrecision=GetfloatPrecision(this.HQChart.Symbol);//价格小数位数
38055
+
38056
+ this.YClose=this.TitlePaint.YClose;
38057
+ this.YClose=item.YClose;
38058
+ if (isFutures && IFrameSplitOperator.IsNumber(item.YClearing)) this.YClose=item.YClearing;
38022
38059
 
38023
38060
  var aryText=[];
38024
38061
  var result={ AryText:aryText };
@@ -38353,9 +38390,11 @@ function MinuteLeftTooltipPaint()
38353
38390
  if (!drawData || !drawData.Data) return null;
38354
38391
 
38355
38392
  var aryText=[];
38393
+ var isFutures=false;
38356
38394
  var upperSymbol;
38357
38395
  if (this.HQChart.Symbol) upperSymbol=this.HQChart.Symbol.toUpperCase();
38358
38396
  var defaultfloatPrecision=GetfloatPrecision(upperSymbol);//价格小数位数
38397
+ if (upperSymbol) isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol); //国内期货, 纽约期货交易所
38359
38398
 
38360
38399
  if (drawData.Type==0) //连续交易
38361
38400
  {
@@ -38363,6 +38402,7 @@ function MinuteLeftTooltipPaint()
38363
38402
  if (!item) return;
38364
38403
 
38365
38404
  this.YClose=item.YClose;
38405
+ if (isFutures && IFrameSplitOperator.IsNumber(item.YClearing)) this.YClose=item.YClearing;
38366
38406
  var titleItem=this.FormatDate(item.Date);
38367
38407
  if (titleItem) aryText.push(titleItem);
38368
38408
 
@@ -38400,6 +38440,7 @@ function MinuteLeftTooltipPaint()
38400
38440
  if (!item) return;
38401
38441
 
38402
38442
  this.YClose=item.YClose;
38443
+ if (isFutures && IFrameSplitOperator.IsNumber(item.YClearing)) this.YClose=item.YClearing;
38403
38444
  var titleItem=this.FormatDate(item.Date);
38404
38445
  if (titleItem) aryText.push(titleItem);
38405
38446
 
@@ -45020,6 +45061,9 @@ function ChartCorssCursor()
45020
45061
  this.IsFixXLastTime=false; //是否修正X轴,超出当前时间的,X轴调整到当前最后的时间.
45021
45062
  this.IsDrawXRangeBG=false; //是否绘制十字光标背景
45022
45063
 
45064
+ this.EnableNewIndex=false; //分时图是否使用最新的索引结构 (由外部chart容器传入)
45065
+ this.CorssCursorIndex; //分时图新版本的索引结构 (由外部chart容器传入)
45066
+
45023
45067
  this.PointX;
45024
45068
  this.PointY;
45025
45069
 
@@ -45077,20 +45121,34 @@ function ChartCorssCursor()
45077
45121
 
45078
45122
  this.GetMinuteCloseYPoint=function(index)
45079
45123
  {
45080
- if (!IFrameSplitOperator.IsNumber(index)) return null;
45081
- index=parseInt(index);
45082
- if (!this.StringFormatX.Data) return null;
45083
- var data = this.StringFormatX.Data;
45084
- if (!data.Data || data.Data.length <= 0) return null;
45085
- var dataIndex = data.DataOffset + index;
45086
- if (dataIndex >= data.Data.length) dataIndex = data.Data.length - 1;
45087
- if (dataIndex < 0) return null;
45124
+ if (this.EnableNewIndex && this.CorssCursorIndex)
45125
+ {
45126
+ if (!this.StringFormatX || !this.StringFormatX.GetMinuteCloseYPoint) return null;
45127
+
45128
+ var closeData=this.StringFormatX.GetMinuteCloseYPoint(this.CorssCursorIndex);
45129
+ if (!closeData) return null;
45130
+
45131
+ this.Close=closeData.Price;
45132
+ return closeData.Y;
45133
+ }
45134
+ else
45135
+ {
45088
45136
 
45089
- var close = data.Data[dataIndex];
45090
- if (!IFrameSplitOperator.IsNumber(index)) return null;
45091
- this.Close=close;
45092
- var yPoint = this.Frame.GetYFromData(this.Close);
45093
- return yPoint;
45137
+ if (!IFrameSplitOperator.IsNumber(index)) return null;
45138
+ index=parseInt(index);
45139
+ if (!this.StringFormatX.Data) return null;
45140
+ var data = this.StringFormatX.Data;
45141
+ if (!data.Data || data.Data.length <= 0) return null;
45142
+ var dataIndex = data.DataOffset + index;
45143
+ if (dataIndex >= data.Data.length) dataIndex = data.Data.length - 1;
45144
+ if (dataIndex < 0) return null;
45145
+
45146
+ var close = data.Data[dataIndex];
45147
+ if (!IFrameSplitOperator.IsNumber(index)) return null;
45148
+ this.Close=close;
45149
+ var yPoint = this.Frame.GetYFromData(this.Close);
45150
+ return yPoint;
45151
+ }
45094
45152
  }
45095
45153
 
45096
45154
  this.GetDateTimeRange=function(index, option)
@@ -46757,6 +46815,7 @@ function HQMinuteTimeStringFormat()
46757
46815
  this.newMethod();
46758
46816
  delete this.newMethod;
46759
46817
 
46818
+ this.ClassName="HQMinuteTimeStringFormat";
46760
46819
  this.Frame;
46761
46820
  this.Symbol;
46762
46821
  this.Point;
@@ -46888,6 +46947,88 @@ function HQMinuteTimeStringFormat()
46888
46947
 
46889
46948
  return true;
46890
46949
  }
46950
+
46951
+ this.GetMinuteCloseYPoint=function(cursorIndexData)
46952
+ {
46953
+ var type=cursorIndexData.Type;
46954
+ if (type==1 || type==2 || type==3) //单日 1=主图 2=盘前 3=盘后
46955
+ {
46956
+ if (type==1)
46957
+ {
46958
+ if (!this.Data || this.Data.Data.length <= 0) return null;
46959
+ var index=cursorIndexData.DataIndex;
46960
+ if (index<0 || index>=this.Data.Data.length) index=this.Data.Data.length-1;
46961
+
46962
+ var close = this.Data.Data[index];
46963
+ var yPoint = this.Frame.GetYFromData(close);
46964
+ return { Price:close, Y:yPoint };
46965
+ }
46966
+ else if (type==2)
46967
+ {
46968
+ if (!this.BeforeOpenData || !this.BeforeOpenData.Data) return false;
46969
+ if (cursorIndexData.DataIndex<0 || cursorIndexData.DataIndex>=this.BeforeOpenData.Data.length) return null;
46970
+ var item=this.BeforeOpenData.Data[cursorIndexData.DataIndex];
46971
+
46972
+ var close=item.Price;
46973
+ var yPoint = this.Frame.GetYFromData(close);
46974
+ return { Price:close, Y:yPoint };
46975
+ }
46976
+ else if (type==3)
46977
+ {
46978
+ if (!this.AfterCloseData || !this.AfterCloseData.Data) return false;
46979
+ if (cursorIndexData.DataIndex<0 || cursorIndexData.DataIndex>=this.AfterCloseData.Data.length) return null;
46980
+ var item=this.AfterCloseData.Data[cursorIndexData.DataIndex];
46981
+
46982
+ var close=item.Price;
46983
+ var yPoint = this.Frame.GetYFromData(close);
46984
+ return { Price:close, Y:yPoint };
46985
+ }
46986
+ }
46987
+ else if (type==10 || type==20 || type==30) //多日 10=主图 20=盘前 30=盘后
46988
+ {
46989
+ if (type==10)
46990
+ {
46991
+ if (!this.Data || this.Data.Data.length <= 0) return null;
46992
+ var index=this.Frame.MinuteCount*cursorIndexData.DayIndex+cursorIndexData.DataIndex;
46993
+ if (index<0 || index>=this.Data.Data.length) index=this.Data.Data.length-1;
46994
+
46995
+ var close = this.Data.Data[index];
46996
+ var yPoint = this.Frame.GetYFromData(close);
46997
+ return { Price:close, Y:yPoint };
46998
+ }
46999
+ else if (type==20)
47000
+ {
47001
+ var multiDayBeforeOpenData=this.GetMultiDayBeforeOpenData();
47002
+ if (!multiDayBeforeOpenData) return null;
47003
+ if (cursorIndexData.DayIndex<0 || cursorIndexData.DayIndex>=multiDayBeforeOpenData.length) return null;
47004
+
47005
+ var dayItem=multiDayBeforeOpenData[cursorIndexData.DayIndex];
47006
+ if (cursorIndexData.DataIndex<0 || cursorIndexData.DataIndex>=dayItem.Data.length) return null;
47007
+ var item=dayItem.Data[cursorIndexData.DataIndex];
47008
+
47009
+ var close=item.Price;
47010
+ var yPoint = this.Frame.GetYFromData(close);
47011
+ return { Price:close, Y:yPoint };
47012
+ }
47013
+ else if (type==30)
47014
+ {
47015
+ var multiDayAfterCloseData=this.GetMultiDayAfterCloseData();
47016
+ if (!multiDayAfterCloseData) return null;
47017
+ if (cursorIndexData.DayIndex<0 || cursorIndexData.DayIndex>=multiDayAfterCloseData.length) return null;
47018
+
47019
+ var dayItem=multiDayAfterCloseData[cursorIndexData.DayIndex];
47020
+ if (cursorIndexData.DataIndex<0 || cursorIndexData.DataIndex>=dayItem.Data.length) return null;
47021
+ var item=dayItem.Data[cursorIndexData.DataIndex];
47022
+
47023
+ var close=item.Price;
47024
+ var yPoint = this.Frame.GetYFromData(close);
47025
+ return { Price:close, Y:yPoint };
47026
+ }
47027
+ }
47028
+
47029
+
47030
+ return null;
47031
+ }
46891
47032
  }
46892
47033
 
46893
47034
 
@@ -48091,7 +48232,10 @@ function DynamicMinuteTitlePainting()
48091
48232
  {
48092
48233
  if (!data || !data.Data) return;
48093
48234
 
48094
- var defaultfloatPrecision=GetfloatPrecision(this.Symbol);//价格小数位数
48235
+ var upperSymbol=this.Symbol.toUpperCase();
48236
+ var defaultfloatPrecision=GetfloatPrecision(this.Symbol); //价格小数位数
48237
+ var isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol); //国内期货, 纽约期货交易所
48238
+
48095
48239
  var item=data.Data;
48096
48240
  var isLastOne=data.IsLastOne;
48097
48241
  var aryText=[]; //{Color:, Text: }
@@ -48137,6 +48281,8 @@ function DynamicMinuteTitlePainting()
48137
48281
  var amount=item.Amount;
48138
48282
  var yClose=item.YClose;
48139
48283
  if (!IFrameSplitOperator.IsNumber(yClose)) yClose=this.YClose;
48284
+ if (isFutures && IFrameSplitOperator.IsNumber(item.YClearing)) yClose=item.YClearing; //期货使用昨结算
48285
+
48140
48286
 
48141
48287
  if (IFrameSplitOperator.IsNumber(close))
48142
48288
  {
@@ -64293,22 +64439,27 @@ function KLineChartContainer(uielement,OffscreenElement)
64293
64439
  {
64294
64440
  if (!this.WindowIndex[windowIndex]) return;
64295
64441
 
64296
- if (typeof(this.WindowIndex[windowIndex].RequestData)=="function") //数据需要另外下载的.
64442
+ var item=this.WindowIndex[windowIndex];
64443
+ if (typeof(item.RequestData)=="function") //数据需要另外下载的.
64297
64444
  {
64298
- this.WindowIndex[windowIndex].RequestData(this,windowIndex,hisData, option);
64445
+ item.RequestData(this,windowIndex,hisData, option);
64299
64446
  return;
64300
64447
  }
64301
- if (typeof(this.WindowIndex[windowIndex].ExecuteScript)=='function')
64448
+
64449
+ if (typeof(item.ExecuteScript)=='function')
64302
64450
  {
64303
- this.WindowIndex[windowIndex].ExecuteScript(this,windowIndex,hisData);
64451
+ if (option && option.CheckRunCount)
64452
+ if (item.IsExcessRunCount()) return;
64453
+
64454
+ item.ExecuteScript(this,windowIndex,hisData);
64304
64455
  return;
64305
64456
  }
64306
64457
 
64307
- this.WindowIndex[windowIndex].BindData(this,windowIndex,hisData);
64458
+ item.BindData(this,windowIndex,hisData);
64308
64459
  }
64309
64460
 
64310
64461
  //叠加指标
64311
- this.BindOverlayIndexData=function(overlayItem, windowIndex, hisData)
64462
+ this.BindOverlayIndexData=function(overlayItem, windowIndex, hisData, option)
64312
64463
  {
64313
64464
  if (!overlayItem.Script) return;
64314
64465
 
@@ -64320,6 +64471,9 @@ function KLineChartContainer(uielement,OffscreenElement)
64320
64471
 
64321
64472
  if (typeof(overlayItem.Script.ExecuteScript)=='function')
64322
64473
  {
64474
+ if (option && option.CheckRunCount)
64475
+ if (overlayItem.Script.IsExcessRunCount()) return;
64476
+
64323
64477
  overlayItem.Script.ExecuteScript(this,windowIndex,hisData);
64324
64478
  return;
64325
64479
  }
@@ -64485,7 +64639,7 @@ function KLineChartContainer(uielement,OffscreenElement)
64485
64639
  });
64486
64640
  }
64487
64641
 
64488
- this.BindAllOverlayIndexData=function(hisData)
64642
+ this.BindAllOverlayIndexData=function(hisData, option)
64489
64643
  {
64490
64644
  if (!this.Frame || !this.Frame.SubFrame) return;
64491
64645
 
@@ -64496,7 +64650,7 @@ function KLineChartContainer(uielement,OffscreenElement)
64496
64650
  for(var j in item.OverlayIndex)
64497
64651
  {
64498
64652
  var overlayItem=item.OverlayIndex[j];
64499
- this.BindOverlayIndexData(overlayItem,i,hisData)
64653
+ this.BindOverlayIndexData(overlayItem,i,hisData,option)
64500
64654
  }
64501
64655
  }
64502
64656
  }
@@ -65179,7 +65333,7 @@ function KLineChartContainer(uielement,OffscreenElement)
65179
65333
 
65180
65334
  for(var i=0; i<this.Frame.SubFrame.length; ++i)
65181
65335
  {
65182
- this.BindIndexData(i,bindData);
65336
+ this.BindIndexData(i,bindData, { CheckRunCount:true });
65183
65337
  }
65184
65338
 
65185
65339
  //刷新画图
@@ -65192,7 +65346,7 @@ function KLineChartContainer(uielement,OffscreenElement)
65192
65346
  this.SendKLineUpdateEvent(bindData);
65193
65347
 
65194
65348
  //叠加指标计算
65195
- this.BindAllOverlayIndexData(bindData);
65349
+ this.BindAllOverlayIndexData(bindData,{ CheckRunCount:true });
65196
65350
 
65197
65351
  if (this.mapEvent.has(JSCHART_EVENT_ID.ON_RECV_REALTIME_DATA))
65198
65352
  {
@@ -65917,6 +66071,7 @@ function KLineChartContainer(uielement,OffscreenElement)
65917
66071
  this.ClearRectSelect(true);
65918
66072
  this.Frame.ClearUpDonwFrameYData();
65919
66073
  this.ClearCustomKLine();
66074
+
65920
66075
 
65921
66076
  var kLineDrawType=this.GetKLineDrawType();
65922
66077
  if (kLineDrawType==10 || kLineDrawType==11 || kLineDrawType==12 || kLineDrawType==16) isDataTypeChange=true;
@@ -65938,6 +66093,7 @@ function KLineChartContainer(uielement,OffscreenElement)
65938
66093
 
65939
66094
  if (isDataTypeChange==false && !this.IsApiPeriod)
65940
66095
  {
66096
+ this.ClearIndexRunCount();
65941
66097
  this.Update( {UpdateCursorIndexType:2} ); //更新的时候 取消显示十字光标
65942
66098
  return;
65943
66099
  }
@@ -65950,6 +66106,7 @@ function KLineChartContainer(uielement,OffscreenElement)
65950
66106
  this.AutoUpdateEvent(false,'KLineChartContainer::ChangePeriod'); //切换周期先停止更新
65951
66107
  this.ResetScrollBar();
65952
66108
  this.ResetOverlaySymbolStatus();
66109
+ this.ClearIndexRunCount();
65953
66110
  this.RequestHistoryData(); //请求日线数据
65954
66111
  //this.ReqeustKLineInfoData();
65955
66112
  }
@@ -65959,6 +66116,7 @@ function KLineChartContainer(uielement,OffscreenElement)
65959
66116
  this.AutoUpdateEvent(false,'KLineChartContainer::ChangePeriod'); //切换周期先停止更新
65960
66117
  this.ResetScrollBar();
65961
66118
  this.ResetOverlaySymbolStatus();
66119
+ this.ClearIndexRunCount();
65962
66120
  this.ReqeustHistoryMinuteData(); //请求分钟数据
65963
66121
  }
65964
66122
  else if (ChartData.IsTickPeriod(this.Period))
@@ -65966,6 +66124,7 @@ function KLineChartContainer(uielement,OffscreenElement)
65966
66124
  this.CancelAutoUpdate(); //先停止定时器
65967
66125
  this.AutoUpdateEvent(false,'KLineChartContainer::ChangePeriod');
65968
66126
  this.ResetScrollBar();
66127
+ this.ClearIndexRunCount();
65969
66128
  this.RequestTickData(); //请求分笔数据
65970
66129
  }
65971
66130
  }
@@ -67266,6 +67425,7 @@ function KLineChartContainer(uielement,OffscreenElement)
67266
67425
  this.ClearKLineCaluate();
67267
67426
  this.HideTooltip();
67268
67427
  this.ResetScrollBar();
67428
+ this.ClearIndexRunCount();
67269
67429
 
67270
67430
  this.Symbol=symbol;
67271
67431
  if (!symbol)
@@ -72363,6 +72523,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
72363
72523
  this.ClearIndexPaint(); //清空指标
72364
72524
  this.ResetOverlaySymbolStatus();
72365
72525
  this.ReloadChartDrawPicture();
72526
+ this.ClearIndexRunCount();
72366
72527
 
72367
72528
  if (option)
72368
72529
  {
@@ -73751,7 +73912,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
73751
73912
  }
73752
73913
  }
73753
73914
 
73754
- this.BindIndexData=function(windowIndex,hisData)
73915
+ this.BindIndexData=function(windowIndex, hisData, option)
73755
73916
  {
73756
73917
  if (!this.WindowIndex[windowIndex]) return;
73757
73918
 
@@ -74196,7 +74357,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
74196
74357
  }
74197
74358
 
74198
74359
  //计算叠加指标
74199
- this.BindAllOverlayIndexData=function(hisData)
74360
+ this.BindAllOverlayIndexData=function(hisData, option)
74200
74361
  {
74201
74362
  if (!this.Frame || !this.Frame.SubFrame) return;
74202
74363
 
@@ -74207,13 +74368,13 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
74207
74368
  for(var j in item.OverlayIndex)
74208
74369
  {
74209
74370
  var overlayItem=item.OverlayIndex[j];
74210
- this.BindOverlayIndexData(overlayItem,i,hisData)
74371
+ this.BindOverlayIndexData(overlayItem,i,hisData,option)
74211
74372
  }
74212
74373
  }
74213
74374
  }
74214
74375
 
74215
74376
  //叠加指标
74216
- this.BindOverlayIndexData=function(overlayItem, windowIndex, hisData)
74377
+ this.BindOverlayIndexData=function(overlayItem, windowIndex, hisData, option)
74217
74378
  {
74218
74379
  if (!overlayItem.Script) return;
74219
74380
 
@@ -74944,7 +75105,9 @@ MinuteChartContainer.JsonDataToMinuteData=function(data,isBeforeData)
74944
75105
  var preClose=data.stock[0].yclose; //前一个数据价格
74945
75106
  var preAvPrice=data.stock[0].yclose; //前一个均价
74946
75107
  var yClose=data.stock[0].yclose;
74947
- if (isFutures && data.stock[0].yclearing) yClose=preClose=preAvPrice=data.stock[0].yclearing; //期货使用昨结算价
75108
+ var yClearing=data.stock[0].yclearing;
75109
+
75110
+ if (isFutures && yClearing) preClose=preAvPrice=yClearing; //期货使用昨结算价
74948
75111
 
74949
75112
  if (!IFrameSplitOperator.IsNonEmptyArray(data.stock[0].minute)) return aryMinuteData;
74950
75113
 
@@ -74953,7 +75116,7 @@ MinuteChartContainer.JsonDataToMinuteData=function(data,isBeforeData)
74953
75116
  {
74954
75117
  var jsData=data.stock[0].minute[i];
74955
75118
  var item=new MinuteData();
74956
-
75119
+ item.YClearing=yClearing;
74957
75120
  item.YClose=yClose;
74958
75121
  item.Close=jsData.price;
74959
75122
  item.Open=jsData.open;
@@ -74984,24 +75147,11 @@ MinuteChartContainer.JsonDataToMinuteData=function(data,isBeforeData)
74984
75147
 
74985
75148
  if (!item.AvPrice) item.AvPrice=preAvPrice;
74986
75149
 
74987
- //价格是0的 都用空
74988
- //if (item.Open<=0) item.Open=null;
74989
- //if (item.Close<=0) item.Close=null;
74990
- //if (item.AvPrice<=0) item.AvPrice=null;
74991
- //if (item.High<=0) item.High=null;
74992
- //if (item.Low<=0) item.Low=null;
74993
-
74994
- //if (isFutures) item.AvPrice=null; //期货均价暂时没有
74995
-
74996
75150
  if (yClose && item.Close)
74997
75151
  item.Increase=(item.Close-yClose)/yClose*100; //涨幅 (最新价格-昨收)/昨收*100;
74998
75152
 
74999
-
75000
- //均价太大 可能是后台算错了
75001
- var checkValue=Math.abs(item.AvPrice-item.Close);
75002
- //JSConsole.Chart.Log(`[MinuteChartContainer::JsonDataToMinuteData] checkValue=${checkValue}, ${item.Close*0.13} `)
75003
- if (isSHSZ && checkValue>item.Close*0.13 )
75004
- item.AvPrice=preAvPrice;
75153
+ if (isFutures && yClearing && item.Close)
75154
+ item.Increase=(item.Close-yClearing)/yClearing*100; //涨幅 (最新价格-昨结算价)/昨结算价*100;
75005
75155
 
75006
75156
  //上次价格
75007
75157
  if (IFrameSplitOperator.IsNumber(jsData.price)) preClose=jsData.price;
@@ -75115,7 +75265,7 @@ MinuteChartContainer.JsonDataToMinuteDataArray=function(data)
75115
75265
  var symbol=data.symbol;
75116
75266
  var upperSymbol=symbol.toUpperCase();
75117
75267
  var isSHSZ=MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol);
75118
- var isSHO=MARKET_SUFFIX_NAME.IsSHO(upperSymbol); //上海股票期权
75268
+ var isSHO=MARKET_SUFFIX_NAME.IsSHO(upperSymbol); //上海股票期权
75119
75269
  var isSZO=MARKET_SUFFIX_NAME.IsSZO(upperSymbol); //深证股票期权
75120
75270
  var isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol); //国内期货, 纽约期货交易所
75121
75271
  var result=[];
@@ -75125,22 +75275,25 @@ MinuteChartContainer.JsonDataToMinuteDataArray=function(data)
75125
75275
  var minuteData=[];
75126
75276
  var dayData=data.data[i];
75127
75277
  var date=dayData.date;
75278
+ var yClearing=dayData.yclearing; //昨结算价
75128
75279
  var yClose=dayData.yclose; //前收盘 计算涨幅
75129
75280
  var preClose=yClose; //前一个数据价格
75130
75281
  var preAvPrice=null; //上一个均价
75131
- var yClearing=dayData.yclearing; //昨结算价
75132
75282
 
75133
- //var preAvPrice=data.stock[0].yclose; //前一个均价
75283
+ if (isFutures && yClearing) preClose=preAvPrice=yClearing; //期货使用昨结算价
75284
+
75134
75285
  for(var j in dayData.minute)
75135
75286
  {
75136
75287
  var jsData=dayData.minute[j];
75137
75288
  if (jsData[2]) preClose=jsData[2]; //保存上一个收盘数据
75138
75289
  var item=new MinuteData();
75290
+ item.YClearing=yClearing;
75139
75291
  item.YClose=yClose;
75140
75292
  item.Close=jsData[2];
75141
75293
  item.Open=jsData[1];
75142
75294
  item.High=jsData[3];
75143
75295
  item.Low=jsData[4];
75296
+ item.Increase=null;
75144
75297
  if (isSHSZ) item.Vol=jsData[5]/100; //原始单位股
75145
75298
  else item.Vol=jsData[5];
75146
75299
  item.Amount=jsData[6];
@@ -75163,23 +75316,12 @@ MinuteChartContainer.JsonDataToMinuteDataArray=function(data)
75163
75316
 
75164
75317
  if (!item.AvPrice && preAvPrice) item.AvPrice=preAvPrice;
75165
75318
 
75166
- if (item.Close && yClose) item.Increase = (item.Close - yClose)/yClose*100;
75167
- else item.Increase=null;
75168
-
75169
- //价格是0的 都用空
75170
- //if (item.Open<=0) item.Open=null;
75171
- //if (item.Close<=0) item.Close=null;
75172
- //if (item.AvPrice<=0) item.AvPrice=null;
75173
- //if (item.High<=0) item.High=null;
75174
- //if (item.Low<=0) item.Low=null;
75175
- //if (item.AvPrice<=0) item.AvPrice=null;
75319
+ if (item.Close && yClose)
75320
+ item.Increase = (item.Close - yClose)/yClose*100;
75176
75321
 
75177
- //均价太大 可能是后台算错了
75178
- if (item.AvPrice && isSHSZ)
75179
- {
75180
- var checkValue=Math.abs(item.AvPrice-item.Close);
75181
- if (checkValue>item.Close*0.13 ) item.AvPrice=preAvPrice;
75182
- }
75322
+ if (item.Close && yClearing && isFutures)
75323
+ item.Increase = (item.Close - yClearing)/yClearing*100;
75324
+
75183
75325
 
75184
75326
  if (jsData.length>7 && jsData[7]>0 && item.AvPrice===jsData[7]) preAvPrice=jsData[7];
75185
75327
  if (jsData[extendDataIndex]) item.ExtendData=jsData[extendDataIndex];
@@ -75190,9 +75332,9 @@ MinuteChartContainer.JsonDataToMinuteDataArray=function(data)
75190
75332
  var newData=new ChartData();
75191
75333
  newData.Data=minuteData;
75192
75334
  newData.YClose=yClose;
75335
+ if (IFrameSplitOperator.IsNumber(yClearing)) newData.YClearing=yClearing;
75193
75336
  newData.Close=dayData.close;
75194
75337
  newData.Date=date;
75195
- if (IFrameSplitOperator.IsNumber(yClearing)) newData.YClearing=yClearing;
75196
75338
 
75197
75339
  result.push(newData);
75198
75340
  }
@@ -75241,6 +75383,7 @@ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, i
75241
75383
 
75242
75384
  var date=callAuctionData.Date;
75243
75385
  var yClose=callAuctionData.YClose;
75386
+ var yClearing=callAuctionData.YClearing;
75244
75387
  var extendDataIndex=isBeforeOpen? JSCHART_DATA_FIELD_ID.MINUTE_BEFOREOPEN_EXTENDDATA:JSCHART_DATA_FIELD_ID.MINUTE_AFTERCLOSE_EXTENDDATA; //扩展数据序号
75245
75388
  if (callAuctionData.Ver==1.0)
75246
75389
  {
@@ -75250,6 +75393,7 @@ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, i
75250
75393
  var item=isBeforeOpen? new BeforeOpenData() : new AfterCloseData();
75251
75394
  var jsData=data[i];
75252
75395
  item.YClose=yClose;
75396
+ item.YClearing=yClearing;
75253
75397
  item.Time=jsData[0];
75254
75398
  item.Date=date;
75255
75399
  item.Price=jsData[1];
@@ -75273,6 +75417,7 @@ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, i
75273
75417
  var item=isBeforeOpen? new BeforeOpenData() : new AfterCloseData();
75274
75418
  var jsData=data[i];
75275
75419
  item.YClose=yClose;
75420
+ item.YClearing=yClearing;
75276
75421
  item.Time=jsData[0];
75277
75422
  item.Date=date;
75278
75423
  item.Price=jsData[1];
@@ -75300,6 +75445,7 @@ MinuteChartContainer.JsonDataToCallAuctionItem=function(data, callAuctionData, i
75300
75445
  var item=isBeforeOpen? new BeforeOpenData() : new AfterCloseData();
75301
75446
  var jsData=data[i];
75302
75447
  item.YClose=yClose;
75448
+ item.YClearing=yClearing;
75303
75449
  item.Time=jsData[0];
75304
75450
  item.Date=date;
75305
75451
  item.Price=jsData[1];
@@ -75329,7 +75475,7 @@ MinuteChartContainer.JosnDataToBeforeOpenDataArray=function(data)
75329
75475
  for(var i in data.data)
75330
75476
  {
75331
75477
  var dayItem=data.data[i];
75332
- var beforeOpenData={ Data:[], TotalCount:15, Ver:1.0, Date:dayItem.date, YClose:dayItem.yclose };
75478
+ var beforeOpenData={ Data:[], TotalCount:15, Ver:1.0, Date:dayItem.date, YClose:dayItem.yclose, YClearing:dayItem.YClearing };
75333
75479
  if (dayItem.beforeinfo)
75334
75480
  {
75335
75481
  if (IFrameSplitOperator.IsNumber(dayItem.beforeinfo.totalcount)) beforeOpenData.TotalCount=dayItem.beforeinfo.totalcount;
@@ -75354,7 +75500,7 @@ MinuteChartContainer.JosnDataToAfterCloseDataArray=function(data)
75354
75500
  for(var i in data.data)
75355
75501
  {
75356
75502
  var dayItem=data.data[i];
75357
- var afterCloseData={ Data:[], TotalCount:15, Ver:1.0, Date:dayItem.date, YClose:dayItem.yclose };
75503
+ var afterCloseData={ Data:[], TotalCount:15, Ver:1.0, Date:dayItem.date, YClose:dayItem.yclose, YClearing:dayItem.YClearing };
75358
75504
 
75359
75505
  if (dayItem.afterinfo)
75360
75506
  {
@@ -84473,6 +84619,8 @@ var MARKET_SUFFIX_NAME=
84473
84619
 
84474
84620
  IsFutures:function(upperSymbol) //是否是期货 包含国外的
84475
84621
  {
84622
+ if (!upperSymbol) return false;
84623
+
84476
84624
  return this.IsChinaFutures(upperSymbol) ||
84477
84625
  this.IsNYMEX(upperSymbol) || this.IsCOMEX(upperSymbol) || this.IsNYBOT(upperSymbol) || this.IsCBOT(upperSymbol) ||
84478
84626
  this.IsLME(upperSymbol) || this.IsTOCOM(upperSymbol);