hqchart 1.1.13468 → 1.1.13485

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.
@@ -21,8 +21,11 @@ console.log("[HQData::RequestMinuteDaysData] Symbol="+symbol);var hqchartData={c
21
21
  [915,item.yclose,0,0],[916,item.yclose+0.01,0,0],[917,item.yclose+0.03,0,0],[918,item.yclose+0.02,0,0],[919,item.yclose+0.02,0,0],[920,item.yclose+0.01,0,0],[921,item.yclose,0,0],[922,item.yclose-0.02,0,0],[923,item.yclose-0.03,0,0],[924,item.yclose,0,0],[925,item.yclose,0,0]];var beforeinfo={totalcount:11,ver:1.0};dayItem.before=before;dayItem.beforeinfo=beforeinfo;}hqchartData.data.push(dayItem);}callback(hqchartData);};HQData.RequestHistoryData=function(data,callback){data.PreventDefault=true;var symbol=data.Request.Data.symbol;//请求的股票代码
22
22
  console.log("[HQData::RequestMinuteDaysData] Symbol="+symbol);var hqchartData=KLINE_DAY_DATA;hqchartData.symbol=symbol;hqchartData.name=symbol;callback(hqchartData);};HQData.RequestFlowCapitalData=function(data,callback){data.PreventDefault=true;var symbol=data.Request.Data.symbol;//请求的股票代码
23
23
  console.log("[HQData::RequestFlowCapitalData] Symbol="+symbol);var hqchartData=KLINE_CAPITAL_DATA;callback(hqchartData);};HQData.RequestRealtimeData=function(data,callback){data.PreventDefault=true;var symbol=data.Request.Data.symbol[0];//请求的股票代码
24
- console.log("[HQData::RequestRealtimeData] Symbol="+symbol);var hqchartData=KLINE_1DAY_DATA;hqchartData.stock[0].name=symbol;hqchartData.stock[0].symbol=symbol;callback(hqchartData);};HQData.RequestHistoryMinuteData=function(data,callback){data.PreventDefault=true;var symbol=data.Request.Data.symbol;//请求的股票代码
24
+ if(data.Request.Data.symbol.length>1)//叠加股票
25
+ {var hqchartData={stock:[],code:0};var arySymbol=data.Request.Data.symbol;for(var i=0;i<arySymbol.length;++i){var symbol=arySymbol[i];if(i==0){var stock=KLINE_1DAY_DATA.stock[0];stock.name=symbol;stock.symbol=symbol;hqchartData.stock.push(stock);}else{if(symbol=="399001.sz"){var stock=KLINE_1DAY_OVERLAY_DATA2.stock[0];stock.name=symbol;stock.symbol=symbol;hqchartData.stock.push(stock);}else{var stock=KLINE_1DAY_OVERLAY_DATA.stock[0];stock.name=symbol;stock.symbol=symbol;hqchartData.stock.push(stock);}}}callback(hqchartData);}else{console.log("[HQData::RequestRealtimeData] Symbol="+symbol);var hqchartData=KLINE_1DAY_DATA;hqchartData.stock[0].name=symbol;hqchartData.stock[0].symbol=symbol;callback(hqchartData);}};HQData.RequestHistoryMinuteData=function(data,callback){data.PreventDefault=true;var symbol=data.Request.Data.symbol;//请求的股票代码
25
26
  console.log("[HQData::RequestHistoryMinuteData] Symbol="+symbol);var hqchartData=KLINE_MINUTE_DATA;hqchartData.name=symbol;hqchartData.symbol=symbol;callback(hqchartData);};HQData.RequestMinuteRealtimeData=function(data,callback){data.PreventDefault=true;var symbol=data.Request.Data.symbol[0];//请求的股票代码
26
- console.log("[HQData::RequestMinuteRealtimeData] Symbol="+symbol);var hqchartData=JSON.parse((0,_stringify2.default)(KLINE_1MINUTE_DATA));var kItem=hqchartData.data[0];var price=kItem[5];var value=Math.ceil(Math.random()*10)/1000*price;var bUp=Math.ceil(Math.random()*10)>=5;if(bUp)price+=value;else price-=value;kItem[5]=price;kItem[3]=Math.max(price,kItem[3]);kItem[4]=Math.min(price,kItem[4]);hqchartData.name=symbol;hqchartData.symbol=symbol;callback(hqchartData);};HQData.RequestIndexVariantData=function(data,callback){var varName=data.Request.Data.VariantName;//变量名称
27
+ if(data.Request.Data.symbol.length>1)//叠加股票
28
+ {var hqchartData=JSON.parse((0,_stringify2.default)(KLINE_1MINUTE_DATA));hqchartData.overlay=[];//叠加数据
29
+ var arySymbol=data.Request.Data.symbol;for(var i=0;i<arySymbol.length;++i){var symbol=arySymbol[i];if(i==0){var kItem=hqchartData.data[0];var price=kItem[5];var value=Math.ceil(Math.random()*10)/1000*price;var bUp=Math.ceil(Math.random()*10)>=5;if(bUp)price+=value;else price-=value;kItem[5]=price;kItem[3]=Math.max(price,kItem[3]);kItem[4]=Math.min(price,kItem[4]);hqchartData.name=symbol;hqchartData.symbol=symbol;}else{var testData=JSON.parse((0,_stringify2.default)(KLINE_1MINUTE_DATA2));var kItem=testData.data[0];var price=kItem[5];var value=Math.ceil(Math.random()*10)/1000*price;var bUp=Math.ceil(Math.random()*10)>=5;if(bUp)price+=value;else price-=value;kItem[5]=price;kItem[3]=Math.max(price,kItem[3]);kItem[4]=Math.min(price,kItem[4]);var stock={data:testData.data,symbol:symbol,name:symbol};hqchartData.overlay.push(stock);}}callback(hqchartData);}else{console.log("[HQData::RequestMinuteRealtimeData] Symbol="+symbol);var hqchartData=JSON.parse((0,_stringify2.default)(KLINE_1MINUTE_DATA));var kItem=hqchartData.data[0];var price=kItem[5];var value=Math.ceil(Math.random()*10)/1000*price;var bUp=Math.ceil(Math.random()*10)>=5;if(bUp)price+=value;else price-=value;kItem[5]=price;kItem[3]=Math.max(price,kItem[3]);kItem[4]=Math.min(price,kItem[4]);hqchartData.name=symbol;hqchartData.symbol=symbol;callback(hqchartData);}};HQData.RequestIndexVariantData=function(data,callback){var varName=data.Request.Data.VariantName;//变量名称
27
30
  if(varName=="FROMOPEN"){var hqchartData={};//单数据
28
31
  hqchartData.Data={Date:20230707,Value:240};hqchartData.DataType=1;callback(hqchartData);}};HQData.RequestOtherSymbolData=function(data,callback){data.PreventDefault=true;var symbol=data.Request.Data.symbol;var period=data.Request.Data.period;var right=data.Request.Data.right;var hqchartData=null;if(ChartData.IsDayPeriod(period,true))hqchartData=KLINE_DAY_DATA2;else if(ChartData.IsMinutePeriod(period,true))hqchartData=KLINE_MINUTE_DATA2;hqchartData.name=symbol;hqchartData.symbol=symbol;callback(hqchartData);};HQData.AnnouncementInfo_RequestData=function(data,callback){data.PreventDefault=true;var symbol=data.Request.Symbol;var hqchartData={symbol:symbol,report:[]};var kData=data.HQChart.ChartPaint[0].Data;for(var i=0,j=1;i<kData.Data.length;++i){var kItem=kData.Data[i];if(i%10!=4)continue;var itemReport={releasedate:kItem.Date,time:kItem.Time,title:"\u516C\u544A("+j+") xxxx"};hqchartData.report.push(itemReport);++j;}callback(hqchartData);};HQData.PforecastInfo_RequestData=function(data,callback){data.PreventDefault=true;var symbol=data.Request.Symbol;var hqchartData={symbol:symbol,report:[]};var kData=data.HQChart.ChartPaint[0].Data;for(var i=0,j=1;i<kData.Data.length;++i){var kItem=kData.Data[i];if(i%10!=4)continue;var itemReport={date:kItem.Date,time:kItem.Time,title:"\u516C\u544A("+j+") xxxx"};hqchartData.report.push(itemReport);++j;}callback(hqchartData);};HQData.InvestorInfo_RequestData=function(data,callback){data.PreventDefault=true;var symbol=data.Request.Symbol;callback(TEST_NEWSINTERACT_DATA);};HQData.BlockTrading_RequestData=function(data,callback){data.PreventDefault=true;var symbol=data.Request.Symbol;callback(TEST_BLOCK_TRADING_DATA);};HQData.TradeDetail_RequestData=function(data,callback){data.PreventDefault=true;var symbol=data.Request.Symbol;callback(TEST_TRADE_DETAL_DATA);};HQData.RequestLatestData=function(data,callback){data.PreventDefault=true;var symbol=data.Request.Data.symbol[0];var id=data.Args[0];var value=1;switch(id){case 3:value=KLINE_1DAY_DATA.stock[0].yclose;break;case 4:value=KLINE_1DAY_DATA.stock[0].open;break;case 5:value=KLINE_1DAY_DATA.stock[0].high;break;case 6:value=KLINE_1DAY_DATA.stock[0].low;break;case 7:value=KLINE_1DAY_DATA.stock[0].price;break;case 8:value=KLINE_1DAY_DATA.stock[0].vol;break;}var hqchartData={symbol:symbol,ver:2.0,data:[{id:id,value:value}]};callback(hqchartData);};HQData.RequestOverlayHistoryData=function(data,callback){data.PreventDefault=true;var symbol=data.Request.Data.symbol;var hqchartData={symbol:symbol,name:symbol};if(symbol=="399001.sz")hqchartData.data=KLINE_DAY_OVERLAY_DATA2.data;else hqchartData.data=KLINE_DAY_OVERLAY_DATA.data;callback(hqchartData);};HQData.RequestOverlayHistoryMinuteData=function(data,callback){data.PreventDefault=true;var symbol=data.Request.Data.symbol;var hqchartData={symbol:symbol,name:symbol};hqchartData.data=KLINE_MINUTE_DATA2.data;callback(hqchartData);};/*暴露外部用的方法*/exports.default={HQData:HQData};
@@ -1215,7 +1215,7 @@ if(option.CorssCursorInfo){var item=option.CorssCursorInfo;if(!isNaN(option.Cors
1215
1215
  if(IFrameSplitOperator.IsBool(option.CorssCursorInfo.IsFixXLastTime))chart.ChartCorssCursor.IsFixXLastTime=option.CorssCursorInfo.IsFixXLastTime;if(item.RightButton){if(IFrameSplitOperator.IsBool(item.RightButton.Enable))chart.ChartCorssCursor.RightButton.Enable=item.RightButton.Enable;}if(IFrameSplitOperator.IsNumber(item.PriceFormatType))chart.ChartCorssCursor.StringFormatY.PriceFormatType=item.PriceFormatType;if(IFrameSplitOperator.IsNumber(item.DataFormatType))chart.ChartCorssCursor.StringFormatY.DataFormatType=item.DataFormatType;if(IFrameSplitOperator.IsNumber(item.HPenType))chart.ChartCorssCursor.HPenType=item.HPenType;if(IFrameSplitOperator.IsNumber(item.VPenType))chart.ChartCorssCursor.VPenType=item.VPenType;}if(option.MinuteInfo)chart.CreateMinuteInfo(option.MinuteInfo);if(IFrameSplitOperator.IsBool(option.IsShowRightMenu))chart.IsShowRightMenu=option.IsShowRightMenu;if(IFrameSplitOperator.IsNumber(option.DayCount))chart.DayCount=option.DayCount;this.SetChartBorder(chart,option);if(option.SplashTitle)chart.ChartSplashPaint.SplashTitle=option.SplashTitle;if(IFrameSplitOperator.IsBool(option.EnableBorderDrag)){chart.EnableBorderDrag=option.EnableBorderDrag;}this.AdjustChartBorder(chart);if(option.Frame){for(var i=0;i<option.Frame.length;++i){var item=option.Frame[i];if(!chart.Frame.SubFrame[i])continue;var subFrame=chart.Frame.SubFrame[i].Frame;if(IFrameSplitOperator.IsNumber(item.SplitCount))chart.Frame.SubFrame[i].Frame.YSplitOperator.SplitCount=item.SplitCount;if(item.StringFormat)chart.Frame.SubFrame[i].Frame.YSplitOperator.StringFormat=item.StringFormat;if(IFrameSplitOperator.IsNumber(item.SplitType)){chart.Frame.SubFrame[i].Frame.YSplitOperator.SplitType=item.SplitType;chart.Frame.SubFrame[i].Frame.YSplitOperator.DefaultSplitType=item.SplitType;}if(IFrameSplitOperator.IsNumber(item.FilterType))subFrame.YSplitOperator.FilterType=item.FilterType;if(item.IsShowLeftText==false){chart.Frame.SubFrame[i].Frame.IsShowYText[0]=item.IsShowLeftText;chart.Frame.SubFrame[i].Frame.YSplitOperator.IsShowLeftText=item.IsShowLeftText;//显示左边刻度
1216
1216
  }if(item.IsShowRightText==false){chart.Frame.SubFrame[i].Frame.IsShowYText[1]=item.IsShowRightText;chart.Frame.SubFrame[i].Frame.YSplitOperator.IsShowRightText=item.IsShowRightText;//显示右边刻度
1217
1217
  }if(item.Height>=0)chart.Frame.SubFrame[i].Height=item.Height;if(item.Custom)chart.Frame.SubFrame[i].Frame.YSplitOperator.Custom=item.Custom;if(item.RightTextFormat>0)chart.Frame.SubFrame[i].Frame.YSplitOperator.RightTextFormat=item.RightTextFormat;if(IFrameSplitOperator.IsNumber(item.TitleHeight))chart.Frame.SubFrame[i].Frame.ChartBorder.TitleHeight=item.TitleHeight;if(IFrameSplitOperator.IsNumber(item.BorderLine))chart.Frame.SubFrame[i].Frame.BorderLine=item.BorderLine;if(IFrameSplitOperator.IsBool(item.EnableRemoveZero))chart.Frame.SubFrame[i].Frame.YSplitOperator.EnableRemoveZero=item.EnableRemoveZero;if(IFrameSplitOperator.IsNumber(item.FloatPrecision))chart.Frame.SubFrame[i].Frame.YSplitOperator.FloatPrecision=item.FloatPrecision;if(IFrameSplitOperator.IsBool(item.IsShowXLine))chart.Frame.SubFrame[i].Frame.IsShowXLine=item.IsShowXLine;if(IFrameSplitOperator.IsBool(item.IsShowYLine))chart.Frame.SubFrame[i].Frame.IsShowYLine=item.IsShowYLine;if(IFrameSplitOperator.IsNumber(item.YTextBaseline))chart.Frame.SubFrame[i].Frame.YTextBaseline=item.YTextBaseline;if(IFrameSplitOperator.IsBool(item.IsShowIndexTitle))chart.Frame.SubFrame[i].Frame.IsShowIndexTitle=item.IsShowIndexTitle;if(item.TopSpace>=0)chart.Frame.SubFrame[i].Frame.ChartBorder.TopSpace=item.TopSpace*pixelRatio;if(item.BottomSpace>=0)chart.Frame.SubFrame[i].Frame.ChartBorder.BottomSpace=item.BottomSpace*pixelRatio;//是否显示关闭集合竞价按钮
1218
- if(IFrameSplitOperator.IsNumber(item.CloseBeforeButton))chart.Frame.SubFrame[i].Frame.IsShowCloseButton=item.CloseBeforeButton;if(item.ClientBGColor)subFrame.ClientBGColor=item.ClientBGColor;}chart.UpdateXShowText();}if(option.ExtendChart){for(var i=0;i<option.ExtendChart.length;++i){var item=option.ExtendChart[i];chart.CreateExtendChart(item.Name,item);}}//叠加股票
1218
+ if(IFrameSplitOperator.IsNumber(item.CloseBeforeButton))chart.Frame.SubFrame[i].Frame.IsShowCloseButton=item.CloseBeforeButton;if(item.ClientBGColor)subFrame.ClientBGColor=item.ClientBGColor;if(!IFrameSplitOperator.IsUndefined(item.HorizontalReserved))subFrame.HorizontalReserved=item.HorizontalReserved;}chart.UpdateXShowText();}if(option.ExtendChart){for(var i=0;i<option.ExtendChart.length;++i){var item=option.ExtendChart[i];chart.CreateExtendChart(item.Name,item);}}//叠加股票
1219
1219
  if(option.Overlay){for(var i=0;i<option.Overlay.length;++i){var item=option.Overlay[i];chart.OverlaySymbol(item.Symbol,item);}}if(option.MinuteLine){if(option.MinuteLine.IsDrawAreaPrice==false)chart.ChartPaint[0].IsDrawArea=false;if(option.MinuteLine.IsShowLead==false)chart.IsShowLead=false;if(option.MinuteLine.IsShowAveragePrice==false){chart.ChartPaint[1].IsShow=false;chart.TitlePaint[0].IsShowAveragePrice=false;//标题栏均线也不显示
1220
1220
  for(var i=0;i<chart.ExtendChartPaint.length;++i){var item=chart.ExtendChartPaint[i];if(item.ClassName=="MinuteTooltipPaint")item.IsShowAveragePrice=false;}}if(option.MinuteLine.SplitType>0)chart.Frame.SubFrame[0].Frame.YSplitOperator.SplitType=option.MinuteLine.SplitType;}if(option.MinuteVol){var item=option.MinuteVol;if(IFrameSplitOperator.IsNumber(item.BarColorType))chart.ChartPaint[2].BarColorType=item.BarColorType;}if(option.MinuteTitle){var item=option.MinuteTitle;if(IFrameSplitOperator.IsBool(item.IsShowName))chart.TitlePaint[0].IsShowName=item.IsShowName;if(IFrameSplitOperator.IsBool(item.IsShowDate))chart.TitlePaint[0].IsShowDate=item.IsShowDate;if(IFrameSplitOperator.IsBool(item.IsShowTime))chart.TitlePaint[0].IsShowTime=item.IsShowTime;if(IFrameSplitOperator.IsBool(item.IsTitleShowLatestData))chart.IsTitleShowLatestData=item.IsTitleShowLatestData;if(IFrameSplitOperator.IsBool(item.IsAlwaysShowLastData))chart.TitlePaint[0].IsAlwaysShowLastData=item.IsAlwaysShowLastData;if(IFrameSplitOperator.IsNumber(item.ShowLastDataFormat))chart.TitlePaint[0].ShowLastDataFormat=item.ShowLastDataFormat;if(IFrameSplitOperator.IsNumber(item.TitleBaseLine))chart.TitlePaint[0].TitleBaseLine=item.TitleBaseLine;if(item.TimeFormat)chart.TitlePaint[0].TimeFormat=item.TimeFormat;}if(IFrameSplitOperator.IsBool(option.CorssCursorTouchEnd))chart.CorssCursorTouchEnd=option.CorssCursorTouchEnd;if(IFrameSplitOperator.IsBool(option.IsClickShowCorssCursor))chart.IsClickShowCorssCursor=option.IsClickShowCorssCursor;if(option.IsShowBeforeData===true)chart.IsShowBeforeData=option.IsShowBeforeData;//分钟数据指标从第3个指标窗口设置
1221
1221
  if(IFrameSplitOperator.IsNonEmptyArray(option.Windows)){var scriptData=new JSIndexScript();for(var i=0;i<option.Windows.length;++i){var index=2+i;var item=option.Windows[i];if(item.Script){chart.WindowIndex[index]=new ScriptIndex(item.Name,item.Script,item.Args,item);//脚本执行
@@ -2216,7 +2216,7 @@ var leftExtendText=null;//左侧文字设置
2216
2216
  if(IFrameSplitOperator.IsNonEmptyArray(this.YTextExtend)){leftExtendText=this.YTextExtend[0];rightExtendText=this.YTextExtend[1];}var yPrev=null;//上一个坐标y的值
2217
2217
  var pixelRatio=GetDevicePixelRatio();var itemHeight=(border.BottomEx-border.TopEx)/this.HorizontalInfo.length;var aryMultiText=[];var rtPreRight,rtRight,rtLeft,rtPreLeft;var textBaseline=0;//0=上 1=中 2=下
2218
2218
  for(var i=this.HorizontalInfo.length-1;i>=0;--i)//从上往下画分割线
2219
- {var item=this.HorizontalInfo[i];var y=this.GetYFromData(item.Value);if(y!=null&&yPrev!=null&&Math.abs(y-yPrev)<this.MinYDistance)continue;//两个坐标在近了 就不画了
2219
+ {var item=this.HorizontalInfo[i];if(!IFrameSplitOperator.IsNumber(item.Value))continue;if(item.Value>this.HorizontalMax||item.Value<this.HorizontalMin)continue;var y=this.GetYFromData(item.Value);if(y!=null&&yPrev!=null&&Math.abs(y-yPrev)<this.MinYDistance)continue;//两个坐标在近了 就不画了
2220
2220
  var yFixed=ToFixedPoint(y);//绘制刻度线
2221
2221
  if(y!=bottom&&this.IsShowYLine){var bChangeLineWidth=false;if(IFrameSplitOperator.IsPlusNumber(item.LineWidth))//刻度线宽度
2222
2222
  {this.Canvas.lineWidth=item.LineWidth*pixelRatio;bChangeLineWidth=true;}this.Canvas.strokeStyle=item.LineColor;if(item.LineType==2){this.Canvas.save();if(item.LineDash)this.Canvas.setLineDash(item.LineDash);else this.Canvas.setLineDash([5*pixelRatio,5*pixelRatio]);//虚线
@@ -2249,7 +2249,7 @@ if(this.IsMinSize)return;if(this.ChartBorder.IsShowTitleOnly)return;if(this.IsSh
2249
2249
  var yInsideText=null;for(var i=this.HorizontalInfo.length-1;i>=0;--i)//从上往下画分割线
2250
2250
  {var item=this.HorizontalInfo[i];var y=this.GetYFromData(item.Value);if(y!=null&&yPrev!=null&&Math.abs(y-yPrev)<this.MinYDistance)continue;//两个坐标在近了 就不画了
2251
2251
  //坐标信息 左边 间距小于10 画在内部
2252
- if(item.Message[0]!=null&&isDrawLeft){if(item.Font!=null)this.Canvas.font=item.Font;this.Canvas.fillStyle=item.TextColor;this.Canvas.textAlign="left";var yText=y;if(y>=bottom-2){this.Canvas.textBaseline='bottom';}else if(y<=top+2){this.Canvas.textBaseline='top';yText+=this.YTextTopOffset;}else{if(this.YTextBaseline==1)this.Canvas.textBaseline="bottom";else this.Canvas.textBaseline="middle";}var textObj={X:left,Y:yText,Text:{BaseLine:this.Canvas.textBaseline,TextAlign:this.Canvas.textAlign,Font:this.Canvas.font,Value:item.Message[0]}};if(!this.IsOverlayMaxMin||!this.IsOverlayMaxMin(textObj)){this.Canvas.fillText(item.Message[0],left+1*pixelTatio,yText);if(yInsideText==null||yInsideText>yText){this.YInsideOffset=this.Canvas.measureText(item.Message[0]).width+4*GetDevicePixelRatio();yInsideText=yText;}}}if(item.Message[1]!=null&&isDrawRight){if(item.Font!=null)this.Canvas.font=item.Font;this.Canvas.fillStyle=item.TextColor;this.Canvas.textAlign="right";var yText=y;if(y>=bottom-2){this.Canvas.textBaseline='bottom';}else if(y<=top+2){this.Canvas.textBaseline='top';yText+=this.YTextTopOffset;}else{if(this.YTextBaseline==1)this.Canvas.textBaseline="bottom";else this.Canvas.textBaseline="middle";}if(Array.isArray(item.Message[1]))var text=item.Message[1][0];else var text=item.Message[1];var textWidth=this.Canvas.measureText(text).width;var textObj={X:right-textWidth,Y:yText,Text:{BaseLine:this.Canvas.textBaseline,TextAlign:this.Canvas.textAlign,Font:this.Canvas.font,Value:item.Message[1]}};if(!this.IsOverlayMaxMin||!this.IsOverlayMaxMin(textObj))this.Canvas.fillText(text,right-1*pixelTatio,yText);}yPrev=y;}}};this.GetXFromIndex=function(index){var count=this.XPointCount;if(count==1){if(index==0)return this.ChartBorder.GetLeft();else return this.ChartBorder.GetRight();}else if(count<=0){return this.ChartBorder.GetLeft();}else if(index>=count){return this.ChartBorder.GetRight();}else{var offset=this.ChartBorder.GetLeft()+this.ChartBorder.GetWidth()*index/count;return offset;}};//画X轴
2252
+ if(item.Message[0]!=null&&isDrawLeft){if(item.Font!=null)this.Canvas.font=item.Font;this.Canvas.fillStyle=item.TextColor;this.Canvas.textAlign="left";var textHeight=this.Canvas.measureText("擎").width;var yText=y;if(y>=bottom-2){this.Canvas.textBaseline='bottom';}else if(y-textHeight/2<=top){this.Canvas.textBaseline='top';yText+=this.YTextTopOffset;}else{if(this.YTextBaseline==1)this.Canvas.textBaseline="bottom";else this.Canvas.textBaseline="middle";}var textObj={X:left,Y:yText,Text:{BaseLine:this.Canvas.textBaseline,TextAlign:this.Canvas.textAlign,Font:this.Canvas.font,Value:item.Message[0]}};if(!this.IsOverlayMaxMin||!this.IsOverlayMaxMin(textObj)){this.Canvas.fillText(item.Message[0],left+1*pixelTatio,yText);if(yInsideText==null||yInsideText>yText){this.YInsideOffset=this.Canvas.measureText(item.Message[0]).width+4*GetDevicePixelRatio();yInsideText=yText;}}}if(item.Message[1]!=null&&isDrawRight){if(item.Font!=null)this.Canvas.font=item.Font;this.Canvas.fillStyle=item.TextColor;this.Canvas.textAlign="right";var textHeight=this.Canvas.measureText("擎").width;var yText=y;if(y>=bottom-2){this.Canvas.textBaseline='bottom';}else if(y-textHeight/2<=top){this.Canvas.textBaseline='top';yText+=this.YTextTopOffset;}else{if(this.YTextBaseline==1)this.Canvas.textBaseline="bottom";else this.Canvas.textBaseline="middle";}if(Array.isArray(item.Message[1]))var text=item.Message[1][0];else var text=item.Message[1];var textWidth=this.Canvas.measureText(text).width;var textObj={X:right-textWidth,Y:yText,Text:{BaseLine:this.Canvas.textBaseline,TextAlign:this.Canvas.textAlign,Font:this.Canvas.font,Value:item.Message[1]}};if(!this.IsOverlayMaxMin||!this.IsOverlayMaxMin(textObj))this.Canvas.fillText(text,right-1*pixelTatio,yText);}yPrev=y;}}};this.GetXFromIndex=function(index){var count=this.XPointCount;if(count==1){if(index==0)return this.ChartBorder.GetLeft();else return this.ChartBorder.GetRight();}else if(count<=0){return this.ChartBorder.GetLeft();}else if(index>=count){return this.ChartBorder.GetRight();}else{var offset=this.ChartBorder.GetLeft()+this.ChartBorder.GetWidth()*index/count;return offset;}};//画X轴
2253
2253
  this.DrawVertical=function(){var border=this.GetBorder();var top=border.TopTitle;var bottom=border.Bottom;var right=border.RightEx;var pixelRatio=GetDevicePixelRatio();//获取设备的分辨率
2254
2254
  //JSConsole.Chart.Log('[AverageWidthFrame.DrawVertical] bottom',bottom);
2255
2255
  //if (this.ChartBorder.Bottom<=5*GetDevicePixelRatio()) return; //高度不够 不显示
@@ -5084,7 +5084,8 @@ this.OverlayChartPaint;this.SplitCount=7;this.Symbol;this.SplitType=0;//0=默认
5084
5084
  this.DefaultSplitType=0;this.LimitPrice;//{Max: Min:} 涨跌停价
5085
5085
  this.Custom;this.RightTextFormat=0;//右边刻度显示模式 0=百分比 1=价格
5086
5086
  this.BeforeOpenData;this.IsBeforeData=false;this.AfterCloseData;this.IsAfterData=false;this.MultiDayBeforeOpenData;this.MultiDayAfterCloseData;this.DayOffset;this.AverageData;//均线
5087
- this.DayCount=1;this.GlobalOption;this.HQChart;this.IsEnableDragY=function(){return false;};this.Operator=function(){this.Frame.HorizontalInfo=[];this.Frame.CustomHorizontalInfo=[];if(!this.Data)return;var range=this.GetMaxMin();if(this.Symbol&&MARKET_SUFFIX_NAME.IsUSA(this.Symbol.toUpperCase())){this.USASplit(range);}else if(this.SplitType==2){this.USASplit(range);}else{this.DefaultSplit(range);}this.CustomCoordinate();if(this.GetEventCallback){var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_SPLIT_YCOORDINATE);if(event&&event.Callback){var data={ID:this.Frame.Identify,Frame:this.Frame};event.Callback(event,data,this);}}};this.CustomCoordinate=function()//自定义刻度
5087
+ this.DayCount=1;this.GlobalOption;this.HQChart;this.IsEnableDragY=function(){return false;};this.Operator=function(){this.Frame.HorizontalInfo=[];this.Frame.CustomHorizontalInfo=[];if(!this.Data)return;var range=this.GetMaxMin();if(this.Symbol&&MARKET_SUFFIX_NAME.IsUSA(this.Symbol.toUpperCase())){this.USASplit(range);}else if(this.SplitType==2){this.USASplit(range);}else{this.DefaultSplit(range);}this.CustomCoordinate();this.ReservedHeight({Max:this.Frame.HorizontalMax,Min:this.Frame.HorizontalMin});//预留高度
5088
+ if(this.GetEventCallback){var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_SPLIT_YCOORDINATE);if(event&&event.Callback){var data={ID:this.Frame.Identify,Frame:this.Frame};event.Callback(event,data,this);}}};this.CustomCoordinate=function()//自定义刻度
5088
5089
  {var data=this.InvokeCustomYCoordinateCallback();if(data&&data.PreventDefault==true)return;if(!this.Custom)return;var defaultfloatPrecision=GetfloatPrecision(this.Symbol);for(var i in this.Custom){var item=this.Custom[i];if(item.Type==1)this.CustomFixedCoordinate(item);else if(item.Type==0){var latestItem=this.GetLatestPrice(defaultfloatPrecision,item);if(latestItem)this.Frame.CustomHorizontalInfo.push(latestItem);}}};this.GetLatestPrice=function(floatPrecision,option){if(!this.Data||!this.Data.Data)return null;if(this.Data.Data.length<=0)return null;var price=this.Data.Data[this.Data.Data.length-1];if(!IFrameSplitOperator.IsNumber(price)||!IFrameSplitOperator.IsNumber(this.YClose))return null;var info=new CoordinateInfo();info.Type=0;info.Value=price;info.TextColor=g_JSChartResource.FrameLatestPrice.TextColor;info.LineType=2;//虚线
5089
5090
  var strPrice=price.toFixed(floatPrecision);if(option.DateTime=='HH:MM'){var latestItem=this.Frame.Data.Data[this.Frame.Data.Data.length-1];var strTime=IFrameSplitOperator.FormatTimeString(latestItem.Time,option.DateTime);var aryText=[{Text:strPrice},{Text:strTime}];if(option.Position=='left')info.Message[0]=aryText;else info.Message[1]=aryText;}else{if(option.Position=='left')info.Message[0]=strPrice;else info.Message[1]=strPrice;}if(price>this.YClose)info.LineColor=g_JSChartResource.FrameLatestPrice.UpBarColor;else if(price<this.YClose)info.LineColor=g_JSChartResource.FrameLatestPrice.DownBarColor;else info.LineColor=g_JSChartResource.FrameLatestPrice.UnchagneBarColor;if(IFrameSplitOperator.IsNumber(option.LineType))info.LineType=option.LineType;if(IFrameSplitOperator.IsPlusNumber(option.LineWidth))info.LineWidth=option.LineWidth;if(option.LineDash)info.LineDash=option.LineDash;if(option.IsShowLine==false)info.LineType=-1;if(option.PositionEx===1)info.ExtendData={Custom:{Position:1}};//强制画在内部
5090
5091
  return info;};this.CustomFixedCoordinate=function(option)//固定坐标刻度
@@ -7107,7 +7108,8 @@ var bindData=new ChartData();bindData.Data=this.SourceData.Data;bindData.Period=
7107
7108
  {var rightData=bindData.GetRightData(bindData.Right,{AlgorithmType:this.RightFormula});bindData.Data=rightData;}if((ChartData.IsDayPeriod(bindData.Period,false)||ChartData.IsMinutePeriod(bindData.Period,false))&&!this.IsApiPeriod)//周期数据 (0= 日线,4=1分钟线 不需要处理)
7108
7109
  {var periodData=bindData.GetPeriodData(bindData.Period);bindData.Data=periodData;}var kLineCalculate=this.GetKLineCalulate();if(kLineCalculate)//额外的K线图形计算
7109
7110
  {var newBindData=kLineCalculate.RecvHistoryData(bindData,{Symbol:this.Symbol,Function:"RecvMinuteRealtimeDataV2"});bindData=newBindData;this.FlowCapitalReady=true;}//绑定数据
7110
- this.UpdateMainData(bindData,lastDataCount);this.BindInstructionIndexData(bindData);//执行指示脚本
7111
+ this.UpdateMainData(bindData,lastDataCount);this.UpdateOverlayMinuteRealtimeData(data);//更新叠加股票数据
7112
+ this.BindInstructionIndexData(bindData);//执行指示脚本
7111
7113
  for(var i=0;i<this.Frame.SubFrame.length;++i){this.BindIndexData(i,bindData);}this.BindAllOverlayIndexData(bindData,{CheckRunCount:true,SyncExecute:true});//同步模式叠加指标
7112
7114
  //刷新画图
7113
7115
  this.UpdataDataoffset();//更新数据偏移
@@ -7637,7 +7639,7 @@ if(!IFrameSplitOperator.IsNumber(item.Open))item.Open=null;if(!IFrameSplitOperat
7637
7639
  if(IFrameSplitOperator.IsNumber(jsData.price))preClose=jsData.price;aryMinuteData[i]=item;}return aryMinuteData;};//分钟K线叠加数据增量更新v2版本
7638
7640
  KLineChartContainer.JsonDataToMinuteRealtimeDataV2=function(data,symbol){if(!data||!data.overlay||!symbol)return null;var overlayData=null;for(var i=0;i<data.overlay.length;++i)//overlay={ symbol:, name:, data:[] }
7639
7641
  {var item=data.overlay[i];if(item.symbol==symbol){overlayData=item;break;}}if(!overlayData)return null;var upperSymbol=symbol.toUpperCase();var isSHSZ=MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol);var isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol);//是否是期货
7640
- var date=0,yclose=1,open=2,high=3,low=4,close=5,vol=6,amount=7,time=8,position=9;var orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;var yClose=null;for(var i=0;i<overlayData.data.length;++i){var item=new HistoryData();var jsData=overlayData.data[i];item.Date=jsData[date];item.Open=jsData[open];item.YClose=jsData[yclose];item.Close=jsData[close];item.High=jsData[high];item.Low=jsData[low];item.Vol=jsData[vol];//股
7642
+ var date=0,yclose=1,open=2,high=3,low=4,close=5,vol=6,amount=7,time=8,position=9;var orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;var yClose=null;var aryMinuteData=[];for(var i=0;i<overlayData.data.length;++i){var item=new HistoryData();var jsData=overlayData.data[i];item.Date=jsData[date];item.Open=jsData[open];item.YClose=jsData[yclose];item.Close=jsData[close];item.High=jsData[high];item.Low=jsData[low];item.Vol=jsData[vol];//股
7641
7643
  item.Amount=jsData[amount];item.Time=jsData[time];if(IFrameSplitOperator.IsNumber(jsData[position]))item.Position=jsData[position];//期货持仓
7642
7644
  if(!IFrameSplitOperator.IsNumber(item.YClose)){if(IFrameSplitOperator.IsNumber(yClose))item.YClose=yClose;}if(IFrameSplitOperator.IsNumber(item.Close))yClose=item.Close;if(jsData[orderFlow])item.OrderFlow=jsData[orderFlow];aryMinuteData.push(item);}return aryMinuteData;};//API 返回数据 转化为array[]
7643
7645
  KLineChartContainer.JsonDataToMinuteHistoryData=function(data){var upperSymbol=null;if(data.symbol)upperSymbol=data.symbol.toUpperCase();var isSHSZ=false;if(upperSymbol)isSHSZ=MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol);var isFutures=false;//是否是期货
@@ -8858,6 +8860,7 @@ FHK:'.FHK',//港股期货
8858
8860
  SHFE:'.SHF',//上期所 (Shanghai Futures Exchange) | 上期所-能源
8859
8861
  SHFE2:'.SHFE',//上期所 (Shanghai Futures Exchange) | 上期所-能源
8860
8862
  CFFEX:'.CFE',//中期所 (China Financial Futures Exchange)
8863
+ CFFEX2:'.CFFEX',//中期所 (China Financial Futures Exchange)
8861
8864
  DCE:'.DCE',//大连商品交易所(Dalian Commodity Exchange)
8862
8865
  CZCE:'.CZC',//郑州期货交易所
8863
8866
  GZFE:".GZFE",//广州期货交易所
@@ -8884,7 +8887,7 @@ IsET:function IsET(upperSymbol){if(!upperSymbol)return false;return upperSymbol.
8884
8887
  {return false;},IsHSX:function IsHSX(upperSymbol){if(!upperSymbol)return false;return upperSymbol.indexOf(this.HSX)>0;},IsHNX:function IsHNX(upperSymbol){if(!upperSymbol)return false;return upperSymbol.indexOf(this.HNX)>0;},IsUPCOM:function IsUPCOM(upperSymbol){if(!upperSymbol)return false;return upperSymbol.indexOf(this.UPCOM)>0;},IsNYMEX:function IsNYMEX(upperSymbol){if(!upperSymbol)return false;return upperSymbol.indexOf(this.NYMEX)>0;},IsCOMEX:function IsCOMEX(upperSymbol){if(!upperSymbol)return false;return upperSymbol.indexOf(this.COMEX)>0;},IsNYBOT:function IsNYBOT(upperSymbol){if(!upperSymbol)return false;return upperSymbol.indexOf(this.NYBOT)>0;},IsCBOT:function IsCBOT(upperSymbol){if(!upperSymbol)return false;return upperSymbol.indexOf(this.CBOT)>0;},IsLME:function IsLME(upperSymbol){if(!upperSymbol)return false;return upperSymbol.indexOf(this.LME)>0;},IsTOCOM:function IsTOCOM(upperSymbol){if(!upperSymbol)return false;return upperSymbol.indexOf(this.TOCOM)>0;},IsIPE:function IsIPE(upperSymbol){if(!upperSymbol)return false;return upperSymbol.indexOf(this.IPE)>0;},IsForeignExchange:function IsForeignExchange(upperSymbol){if(!upperSymbol)return false;return upperSymbol.indexOf(this.FOREX)>0;},IsFTSE:function IsFTSE(upperSymbol){if(!upperSymbol)return false;return upperSymbol.indexOf(this.FTSE)>0;},IsFHK:function IsFHK(upperSymbol){if(!upperSymbol)return false;return upperSymbol.indexOf(this.FHK)>0;},IsBIT:function IsBIT(upperSymbol){if(!upperSymbol)return false;if(upperSymbol.indexOf(this.BIT)>0)return true;if(upperSymbol.indexOf(this.BIZ)>0)return true;return false;},IsUSA:function IsUSA(upperSymbol)//是否是美股
8885
8888
  {if(!upperSymbol)return false;return upperSymbol.indexOf(this.USA)>0;},IsSH:function IsSH(upperSymbol){//需要精确匹配最后3位
8886
8889
  var pos=upperSymbol.length-this.SH.length;var find=upperSymbol.indexOf(this.SH);return find==pos;},IsSZ:function IsSZ(upperSymbol){var pos=upperSymbol.length-this.SZ.length;var find=upperSymbol.indexOf(this.SZ);return find==pos;},IsBJ:function IsBJ(upperSymbol){var pos=upperSymbol.length-this.BJ.length;var find=upperSymbol.indexOf(this.BJ);return find==pos;},//自定义指数
8887
- IsSHSZCustomIndex:function IsSHSZCustomIndex(upperSymbol){var pos=upperSymbol.length-this.SHSZ_C_Index.length;var find=upperSymbol.indexOf(this.SHSZ_C_Index);return find==pos;},IsSHO:function IsSHO(upperSymbol){var pos=upperSymbol.length-this.SHO.length;var find=upperSymbol.indexOf(this.SHO);return find==pos;},IsSZO:function IsSZO(upperSymbol){var pos=upperSymbol.length-this.SZO.length;var find=upperSymbol.indexOf(this.SZO);return find==pos;},IsHK:function IsHK(upperSymbol){var pos=upperSymbol.length-this.HK.length;var find=upperSymbol.indexOf(this.HK);return find==pos;},IsTW:function IsTW(upperSymbol){var pos=upperSymbol.length-this.TW.length;var find=upperSymbol.indexOf(this.TW);return find==pos;},IsJP:function IsJP(upperSymbol){var pos=upperSymbol.length-this.JP.length;var find=upperSymbol.indexOf(this.JP);return find==pos;},IsSHFE:function IsSHFE(upperSymbol){if(!upperSymbol)return false;if(upperSymbol.indexOf(this.SHFE)>0)return true;if(upperSymbol.indexOf(this.SHFE2)>0)return true;return false;},IsCFFEX:function IsCFFEX(upperSymbol){if(!upperSymbol)return false;if(upperSymbol.indexOf(this.CFFEX)>0)return true;return false;},IsDCE:function IsDCE(upperSymbol){if(!upperSymbol)return false;return upperSymbol.indexOf(this.DCE)>0;},IsCZCE:function IsCZCE(upperSymbol){if(!upperSymbol)return false;return upperSymbol.indexOf(this.CZCE)>0;},IsGZFE:function IsGZFE(upperSymbol){if(!upperSymbol)return false;return upperSymbol.indexOf(this.GZFE)>0;},IsChinaFutures:function IsChinaFutures(upperSymbol)//是否是国内期货 /期权
8890
+ IsSHSZCustomIndex:function IsSHSZCustomIndex(upperSymbol){var pos=upperSymbol.length-this.SHSZ_C_Index.length;var find=upperSymbol.indexOf(this.SHSZ_C_Index);return find==pos;},IsSHO:function IsSHO(upperSymbol){var pos=upperSymbol.length-this.SHO.length;var find=upperSymbol.indexOf(this.SHO);return find==pos;},IsSZO:function IsSZO(upperSymbol){var pos=upperSymbol.length-this.SZO.length;var find=upperSymbol.indexOf(this.SZO);return find==pos;},IsHK:function IsHK(upperSymbol){var pos=upperSymbol.length-this.HK.length;var find=upperSymbol.indexOf(this.HK);return find==pos;},IsTW:function IsTW(upperSymbol){var pos=upperSymbol.length-this.TW.length;var find=upperSymbol.indexOf(this.TW);return find==pos;},IsJP:function IsJP(upperSymbol){var pos=upperSymbol.length-this.JP.length;var find=upperSymbol.indexOf(this.JP);return find==pos;},IsSHFE:function IsSHFE(upperSymbol){if(!upperSymbol)return false;if(upperSymbol.indexOf(this.SHFE)>0)return true;if(upperSymbol.indexOf(this.SHFE2)>0)return true;return false;},IsCFFEX:function IsCFFEX(upperSymbol){if(!upperSymbol)return false;if(upperSymbol.indexOf(this.CFFEX)>0)return true;if(upperSymbol.indexOf(this.CFFEX2)>0)return true;return false;},IsDCE:function IsDCE(upperSymbol){if(!upperSymbol)return false;return upperSymbol.indexOf(this.DCE)>0;},IsCZCE:function IsCZCE(upperSymbol){if(!upperSymbol)return false;return upperSymbol.indexOf(this.CZCE)>0;},IsGZFE:function IsGZFE(upperSymbol){if(!upperSymbol)return false;return upperSymbol.indexOf(this.GZFE)>0;},IsChinaFutures:function IsChinaFutures(upperSymbol)//是否是国内期货 /期权
8888
8891
  {return this.IsSHO(upperSymbol)||this.IsSZO(upperSymbol)||this.IsGZFE(upperSymbol)||this.IsCFFEX(upperSymbol)||this.IsCZCE(upperSymbol)||this.IsDCE(upperSymbol)||this.IsSHFE(upperSymbol);},IsFutures:function IsFutures(upperSymbol)//是否是期货 包含国外的
8889
8892
  {if(!upperSymbol)return false;return this.IsChinaFutures(upperSymbol)||this.IsNYMEX(upperSymbol)||this.IsCOMEX(upperSymbol)||this.IsNYBOT(upperSymbol)||this.IsCBOT(upperSymbol)||this.IsLME(upperSymbol)||this.IsTOCOM(upperSymbol);},IsSHSZ:function IsSHSZ(upperSymbol)//是否是沪深的股票
8890
8893
  {return this.IsSZ(upperSymbol)||this.IsSH(upperSymbol)||this.IsSHSZCustomIndex(upperSymbol);},IsSHSZFund:function IsSHSZFund(upperSymbol)//是否是交易所基金
@@ -9074,7 +9077,7 @@ function FuturesTimeData(){this.TIME_SPLIT=[//ID=0 9:00-10:15,10:31-11:30,13:31-
9074
9077
  {Name:'9:00-10:15,10:31-11:30,13:31-15:00',Data:[//9:00-10:15,10:30-11:30,13:30-15:00
9075
9078
  {Start:900,End:1015},{Start:1031,End:1130},{Start:1331,End:1500}],Coordinate:{Full://完整模式
9076
9079
  [{Value:900,Text:'9:00'},{Value:930,Text:'9:30'},{Value:1000,Text:'10:00'},{Value:1030,Text:'10:30'},{Value:1100,Text:'11:00'},{Value:1330,Text:'13:30'},{Value:1400,Text:'14:00'},{Value:1430,Text:'14:30'},{Value:1500,Text:'15:00'}],Simple://简洁模式
9077
- [{Value:900,Text:'9:00'},{Value:1000,Text:'10:00'},{Value:1330,Text:'13:30'},{Value:1430,Text:'14:30'},{Value:1500,Text:'15:00'}],Min://最小模式
9080
+ [{Value:900,Text:'9:00'},{Value:1000,Text:'10:00'},{Value:1100,Text:'11:00'},{Value:1400,Text:'14:00'},{Value:1500,Text:'15:00'}],Min://最小模式
9078
9081
  [{Value:900,Text:'9:00'},{Value:1330,Text:'13:30'},{Value:1500,Text:'15:00'}]}},//ID=1 9:30-11:30,13:01-15:15
9079
9082
  {Name:'9:30-11:30,13:01-15:15',Data:[{Start:930,End:1130},{Start:1301,End:1515}],Coordinate:{Full://完整模式
9080
9083
  [{Value:930,Text:'9:30'},{Value:1000,Text:'10:00'},{Value:1030,Text:'10:30'},{Value:1100,Text:'11:00'},{Value:1300,Text:'13:00'},{Value:1330,Text:'13:30'},{Value:1400,Text:'14:00'},{Value:1430,Text:'14:30'},{Value:1515,Text:'15:15'}],Simple://简洁模式
@@ -9706,7 +9709,7 @@ for(;offset<data.length;++offset){if(data[offset]!=null&&!isNaN(data[offset]))br
9706
9709
  SMA 移动平均
9707
9710
  返回移动平均。
9708
9711
  用法: SMA(X,N,M) X的N日移动平均,M为权重,如Y=(X*M+Y'*(N-M))/N
9709
- */this.SMA=function(data,n,m){var result=[];if(Array.isArray(n)){for(var i=0;i<n.length;++i){var period=n[i];if(!this.IsNumber(period))continue;period=parseInt(period);if(period<=0)continue;if(period>i+1)period=i+1;var lastSMA=null;var sma=null;for(var j=0;j<period;++j){var index=i-(period-j-1);var item=data[index];if(!this.IsNumber(item))continue;if(lastSMA==null){lastSMA=item;sma=item;}else{sma=(m*item+(period-m)*lastSMA)/period;lastSMA=sma;}}result[i]=sma;}}else{var i=0;var lastData=null;for(;i<data.length;++i){if(data[i]==null||isNaN(data[i]))continue;lastData=data[i];result[i]=lastData;//第一天的数据
9712
+ */this.SMA=function(data,n,m){var result=[];if(Array.isArray(n)){for(var i=0;i<n.length;++i){var period=n[i];if(!this.IsNumber(period))continue;period=parseInt(period);if(period<=0)continue;if(period>i+1)period=i+1;var lastSMA=null;var sma=null;for(var j=0;j<period;++j){var index=i-(period-j-1);var item=data[index];if(!this.IsNumber(item))continue;if(lastSMA==null){lastSMA=item;sma=item;}else{sma=(m*item+(period-m)*lastSMA)/period;lastSMA=sma;}}result[i]=sma;}}else{var i=n;var lastData=null;for(;i<data.length;++i){if(data[i]==null||isNaN(data[i]))continue;lastData=data[i];result[i]=lastData;//第一天的数据
9710
9713
  break;}for(++i;i<data.length;++i){result[i]=(m*data[i]+(n-m)*lastData)/n;lastData=result[i];}}return result;};/*
9711
9714
  求动态移动平均.
9712
9715
  用法: DMA(X,A),求X的动态移动平均.
@@ -13206,7 +13209,7 @@ hisData.Symbol=message.symbol;}var stockObj={HQDataType:HQ_DATA_TYPE.KLINE_ID,St
13206
13209
  this.ExecuteScript(item,data);}this.Status=0;}};this.OnExecuteFinish=function(data,indexInfo,jsExectute,jobInfo){var message={Data:data,IndexInfo:indexInfo,ID:JSCHART_WORKER_MESSAGE_ID.FINISH_EXECUTE_SCRIPT,JobInfo:jobInfo};postMessage(message);};this.OnExecuteError=function(error,indexInfo,jobData){var message={IndexInfo:indexInfo,ID:JSCHART_WORKER_MESSAGE_ID.ERROR_EXECUTE_SCRIPT,Error:error};postMessage(message);};}/********************************************************************************
13207
13210
  * 版本信息输出
13208
13211
  *
13209
- */var HQCHART_VERSION="1.1.13467";function PrintHQChartVersion(){var logo='\n\n*************************************************************************************************************************************************************************** \n* \n* :%@@- \n* :@@@@- \n* =@@@@ :#@@@ .:+#@@@#=: :=*@@@@@@#+-. *@@@@. \n* :@@@@@ .@@@@@ .#@@@@@@@@@@@- +@@@@@@@@@@@@@+ @@@@@ -%@@* \n* +@@@@% #@@@@# *@@@@@@@@@@@@@@%. =@@@@@@@@@@@@@@@- @@@@@ -@@@@+ \n* %@@@@* @@@@@+ .%@@@@@@@@@@@@@@@@%: #@@@@@@@@@@@@@@@% @@@@# *@@@@= \n* @@@@@= @@@@@- .%@@@@@@@*++*%@@@@@@% .%@@@@@@@%*+==+**= -@@@@+ #@@@@- \n* @@@@@. @@@@@. #@@@@@%= =@@@@@@* %@@@@@@#: *@@@@- :::. .-+*###+: ::: .+##+: -%%@@@@@%%%% \n* .@@@@@ .@@@@@. +@@@@@% .@@@@@@ *@@@@@@: %@@@@: +@@@@@%. :%@@@@@@@@@@: *@@@ :@@@@@* @@@@@@@@@@@@ \n* :@@@@@ :@@@@@ @@@@@% :@@@@@+ @@@@@@: %@@@@-@@@@@@@@@. @@@@@@@@@@@@@. :@@@%-@@@@@@.:@@@@@@@@@@@# \n* -@@@@% -@@@@@ =@@@@@. %@@@@% %@@@@@- %@@@@@@@@@@@@@@* %@@@@@@@@@@@@+ -@@@@@@@@@@# -@@@@@@@@@@@. \n* +@@@@%=========#@@@@% @@@@@# :@@@@@ .@@@@@% @@@@@@@@%@@@@@@@ -%+:. .#@@@@* +@@@@@@@%%@. .::+@@@@#:: \n* #@@@@@@@@@@@@@@@@@@@# .@@@@@ .@@@@@ :@@@@@. @@@@@@#. #@@@@@. -@@@@* #@@@@@@: *@@@@+ \n* %@@@@@@@@@@@@@@@@@@@+ :@@@@@ .@@@@@ -@@@@@ @@@@@+ @@@@@. :@@@@* @@@@@% #@@@@- \n* @@@@@@@@@@@@@@@@@@@@: :@@@@% :@@@@@ +@@@@% -@@@@+ @@@@@ -@@@@+ @@@@@. @@@@@. \n* .@@@@@@@@@@@@@@@@@@@@ :@@@@% -@@@@% *@@@@% #@@@@. @@@@@ .=*#%%%@@@@@= :@@@@# @@@@@. \n* -@@@@@:::::::::=@@@@@ :@@@@@ @@@@@* +@@@@% @@@@@ @@@@% -#@@@@@@@@@@@@: -@@@@* @@@@@ \n* =@@@@% =@@@@% .@@@@@ :@@@@@. -@@@@% @@@@@ .@@@@* +@@@@@@@@@@@@@@. =@@@@+ .@@@@@ \n* +@@@@# +@@@@# @@@@@# %@@@@% :@@@@@ .@@@@% =@@@@= -@@@@@*-:..%@@@@ +@@@@= :@@@@# \n* *@@@@* *@@@@* +@@@@@: #@@@@@+ .@@@@@@ :@@@@% *@@@@- @@@@@. @@@@% #@@@@: =@@@@+ \n* %@@@@= %@@@@+ @@@@@@- .%@@@@@# #@@@@@# :@@@@% #@@@@: @@@@% @@@@* %@@@@. #@@@@- \n* @@@@@- @@@@@= =@@@@@@#=...-*@@@@@@@: @@@@@@%=. :+**. :@@@@* %@@@@. .@@@@* *@@@@= @@@@@ %@@@@+ \n* .@@@@@: .@@@@@: *@@@@@@@@@@@@@@@@@@@# =@@@@@@@@%%%@@@@@@ +@@@@- @@@@@ .@@@@@: :%@@@@@- .@@@@% %@@@@@*+- \n* :@@@@@ :@@@@@ +@@@@@@@@@@@@@@@@@@@# =@@@@@@@@@@@@@@@@% %@@@@ @@@@@ @@@@@@@@@@@@@@@: -@@@@* *@@@@@@@@- \n* =@@@@@ -@@@@@ :@@@@@@@@@@@@@@@@@@@# :@@@@@@@@@@@@@@@% @@@@@ %@@@% #@@@@@@@@@#@@@@. +@@@@- .@@@@@@@@# \n* *@@@@# =@@@@% :#@@@@@@@#: :@@@@@= =@@@@@@@@@@@+. @@@@@ :@@@+ *@@@@@@@- %@@@ *@@@= =@@@@@@@* \n* =++++- -++++= .:::. .=*+: :-=+++=:. ****= .=+. .-++=: :+++ -+=: .-=+=:. \n* \n* \n* HQChart \n* Ver: '+HQCHART_VERSION+' \n* License: Apache License 2.0 \n* Source: https://github.com/jones2000/HQChart\n*\n************************************************************************************************************************************************************************** \n ';console.log(logo);}PrintHQChartVersion();//把给外界调用的方法暴露出来
13212
+ */var HQCHART_VERSION="1.1.13484";function PrintHQChartVersion(){var logo='\n\n*************************************************************************************************************************************************************************** \n* \n* :%@@- \n* :@@@@- \n* =@@@@ :#@@@ .:+#@@@#=: :=*@@@@@@#+-. *@@@@. \n* :@@@@@ .@@@@@ .#@@@@@@@@@@@- +@@@@@@@@@@@@@+ @@@@@ -%@@* \n* +@@@@% #@@@@# *@@@@@@@@@@@@@@%. =@@@@@@@@@@@@@@@- @@@@@ -@@@@+ \n* %@@@@* @@@@@+ .%@@@@@@@@@@@@@@@@%: #@@@@@@@@@@@@@@@% @@@@# *@@@@= \n* @@@@@= @@@@@- .%@@@@@@@*++*%@@@@@@% .%@@@@@@@%*+==+**= -@@@@+ #@@@@- \n* @@@@@. @@@@@. #@@@@@%= =@@@@@@* %@@@@@@#: *@@@@- :::. .-+*###+: ::: .+##+: -%%@@@@@%%%% \n* .@@@@@ .@@@@@. +@@@@@% .@@@@@@ *@@@@@@: %@@@@: +@@@@@%. :%@@@@@@@@@@: *@@@ :@@@@@* @@@@@@@@@@@@ \n* :@@@@@ :@@@@@ @@@@@% :@@@@@+ @@@@@@: %@@@@-@@@@@@@@@. @@@@@@@@@@@@@. :@@@%-@@@@@@.:@@@@@@@@@@@# \n* -@@@@% -@@@@@ =@@@@@. %@@@@% %@@@@@- %@@@@@@@@@@@@@@* %@@@@@@@@@@@@+ -@@@@@@@@@@# -@@@@@@@@@@@. \n* +@@@@%=========#@@@@% @@@@@# :@@@@@ .@@@@@% @@@@@@@@%@@@@@@@ -%+:. .#@@@@* +@@@@@@@%%@. .::+@@@@#:: \n* #@@@@@@@@@@@@@@@@@@@# .@@@@@ .@@@@@ :@@@@@. @@@@@@#. #@@@@@. -@@@@* #@@@@@@: *@@@@+ \n* %@@@@@@@@@@@@@@@@@@@+ :@@@@@ .@@@@@ -@@@@@ @@@@@+ @@@@@. :@@@@* @@@@@% #@@@@- \n* @@@@@@@@@@@@@@@@@@@@: :@@@@% :@@@@@ +@@@@% -@@@@+ @@@@@ -@@@@+ @@@@@. @@@@@. \n* .@@@@@@@@@@@@@@@@@@@@ :@@@@% -@@@@% *@@@@% #@@@@. @@@@@ .=*#%%%@@@@@= :@@@@# @@@@@. \n* -@@@@@:::::::::=@@@@@ :@@@@@ @@@@@* +@@@@% @@@@@ @@@@% -#@@@@@@@@@@@@: -@@@@* @@@@@ \n* =@@@@% =@@@@% .@@@@@ :@@@@@. -@@@@% @@@@@ .@@@@* +@@@@@@@@@@@@@@. =@@@@+ .@@@@@ \n* +@@@@# +@@@@# @@@@@# %@@@@% :@@@@@ .@@@@% =@@@@= -@@@@@*-:..%@@@@ +@@@@= :@@@@# \n* *@@@@* *@@@@* +@@@@@: #@@@@@+ .@@@@@@ :@@@@% *@@@@- @@@@@. @@@@% #@@@@: =@@@@+ \n* %@@@@= %@@@@+ @@@@@@- .%@@@@@# #@@@@@# :@@@@% #@@@@: @@@@% @@@@* %@@@@. #@@@@- \n* @@@@@- @@@@@= =@@@@@@#=...-*@@@@@@@: @@@@@@%=. :+**. :@@@@* %@@@@. .@@@@* *@@@@= @@@@@ %@@@@+ \n* .@@@@@: .@@@@@: *@@@@@@@@@@@@@@@@@@@# =@@@@@@@@%%%@@@@@@ +@@@@- @@@@@ .@@@@@: :%@@@@@- .@@@@% %@@@@@*+- \n* :@@@@@ :@@@@@ +@@@@@@@@@@@@@@@@@@@# =@@@@@@@@@@@@@@@@% %@@@@ @@@@@ @@@@@@@@@@@@@@@: -@@@@* *@@@@@@@@- \n* =@@@@@ -@@@@@ :@@@@@@@@@@@@@@@@@@@# :@@@@@@@@@@@@@@@% @@@@@ %@@@% #@@@@@@@@@#@@@@. +@@@@- .@@@@@@@@# \n* *@@@@# =@@@@% :#@@@@@@@#: :@@@@@= =@@@@@@@@@@@+. @@@@@ :@@@+ *@@@@@@@- %@@@ *@@@= =@@@@@@@* \n* =++++- -++++= .:::. .=*+: :-=+++=:. ****= .=+. .-++=: :+++ -+=: .-=+=:. \n* \n* \n* HQChart \n* Ver: '+HQCHART_VERSION+' \n* License: Apache License 2.0 \n* Source: https://github.com/jones2000/HQChart\n*\n************************************************************************************************************************************************************************** \n ';console.log(logo);}PrintHQChartVersion();//把给外界调用的方法暴露出来
13210
13213
  exports.default=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
13211
13214
  // BaseIndex:BaseIndex,
13212
13215
  // ChartLine:ChartLine,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hqchart",
3
- "version": "1.1.13468",
3
+ "version": "1.1.13485",
4
4
  "description": "HQChart - H5, 微信小程序 沪深/港股/数字货币/期货/美股 K线图(kline),走势图,缩放,拖拽,十字光标,画图工具,截图,筹码图. 分析家语法,通达信语法,(麦语法),第3方数据对接",
5
5
  "main": "lib/main.js",
6
6
  "scripts": {
@@ -48874,17 +48874,55 @@ HQData.RequestFlowCapitalData=function(data,callback)
48874
48874
  callback(hqchartData);
48875
48875
  }
48876
48876
 
48877
- HQData.RequestRealtimeData=function(data,callback)
48877
+ HQData.RequestRealtimeData=function(data, callback)
48878
48878
  {
48879
48879
  data.PreventDefault=true;
48880
48880
  var symbol=data.Request.Data.symbol[0]; //请求的股票代码
48881
48881
 
48882
- console.log(`[HQData::RequestRealtimeData] Symbol=${symbol}`);
48882
+ if (data.Request.Data.symbol.length>1) //叠加股票
48883
+ {
48884
+ var hqchartData={ stock:[], code:0 };
48885
+ var arySymbol=data.Request.Data.symbol;
48886
+ for(var i=0;i<arySymbol.length;++i)
48887
+ {
48888
+ var symbol=arySymbol[i];
48889
+ if (i==0)
48890
+ {
48891
+ var stock=KLINE_1DAY_DATA.stock[0];
48892
+ stock.name=symbol;
48893
+ stock.symbol=symbol;
48894
+ hqchartData.stock.push(stock);
48895
+ }
48896
+ else
48897
+ {
48898
+ if (symbol=="399001.sz")
48899
+ {
48900
+ var stock=KLINE_1DAY_OVERLAY_DATA2.stock[0];
48901
+ stock.name=symbol;
48902
+ stock.symbol=symbol;
48903
+ hqchartData.stock.push(stock);
48904
+ }
48905
+ else
48906
+ {
48907
+ var stock=KLINE_1DAY_OVERLAY_DATA.stock[0];
48908
+ stock.name=symbol;
48909
+ stock.symbol=symbol;
48910
+ hqchartData.stock.push(stock);
48911
+ }
48912
+
48913
+ }
48914
+ }
48883
48915
 
48884
- var hqchartData=KLINE_1DAY_DATA;
48885
- hqchartData.stock[0].name=symbol;
48886
- hqchartData.stock[0].symbol=symbol;
48887
- callback(hqchartData);
48916
+ callback(hqchartData);
48917
+ }
48918
+ else
48919
+ {
48920
+ console.log(`[HQData::RequestRealtimeData] Symbol=${symbol}`);
48921
+ var hqchartData=KLINE_1DAY_DATA;
48922
+ hqchartData.stock[0].name=symbol;
48923
+ hqchartData.stock[0].symbol=symbol;
48924
+ callback(hqchartData);
48925
+ }
48888
48926
  }
48889
48927
 
48890
48928
 
@@ -48908,24 +48946,71 @@ HQData.RequestMinuteRealtimeData=function(data,callback)
48908
48946
  data.PreventDefault=true;
48909
48947
  var symbol=data.Request.Data.symbol[0]; //请求的股票代码
48910
48948
 
48911
- console.log(`[HQData::RequestMinuteRealtimeData] Symbol=${symbol}`);
48949
+ if (data.Request.Data.symbol.length>1) //叠加股票
48950
+ {
48951
+ var hqchartData=JSON.parse(JSON.stringify(KLINE_1MINUTE_DATA));
48952
+ hqchartData.overlay=[]; //叠加数据
48953
+ var arySymbol=data.Request.Data.symbol;
48954
+ for(var i=0;i<arySymbol.length;++i)
48955
+ {
48956
+ var symbol=arySymbol[i];
48957
+ if (i==0)
48958
+ {
48959
+ var kItem=hqchartData.data[0];
48960
+ var price=kItem[5];
48961
+ var value=Math.ceil(Math.random()*10)/1000*price;
48962
+ var bUp=Math.ceil(Math.random()*10)>=5;
48963
+
48964
+ if (bUp) price+=value;
48965
+ else price-=value;
48966
+ kItem[5]=price;
48967
+ kItem[3]=Math.max(price, kItem[3]);
48968
+ kItem[4]=Math.min(price, kItem[4]);
48912
48969
 
48913
- var hqchartData=JSON.parse(JSON.stringify(KLINE_1MINUTE_DATA));
48970
+ hqchartData.name=symbol;
48971
+ hqchartData.symbol=symbol;
48972
+ }
48973
+ else
48974
+ {
48975
+ var testData=JSON.parse(JSON.stringify(KLINE_1MINUTE_DATA2));
48976
+ var kItem=testData.data[0];
48977
+ var price=kItem[5];
48978
+ var value=Math.ceil(Math.random()*10)/1000*price;
48979
+ var bUp=Math.ceil(Math.random()*10)>=5;
48980
+
48981
+ if (bUp) price+=value;
48982
+ else price-=value;
48983
+ kItem[5]=price;
48984
+ kItem[3]=Math.max(price, kItem[3]);
48985
+ kItem[4]=Math.min(price, kItem[4]);
48986
+ var stock={ data:testData.data, symbol:symbol, name:symbol };
48987
+ hqchartData.overlay.push(stock);
48988
+ }
48989
+ }
48914
48990
 
48915
- var kItem=hqchartData.data[0];
48916
- var price=kItem[5];
48917
- var value=Math.ceil(Math.random()*10)/1000*price;
48918
- var bUp=Math.ceil(Math.random()*10)>=5;
48919
-
48920
- if (bUp) price+=value;
48921
- else price-=value;
48922
- kItem[5]=price;
48923
- kItem[3]=Math.max(price, kItem[3]);
48924
- kItem[4]=Math.min(price, kItem[4]);
48991
+ callback(hqchartData);
48992
+ }
48993
+ else
48994
+ {
48995
+ console.log(`[HQData::RequestMinuteRealtimeData] Symbol=${symbol}`);
48996
+
48997
+ var hqchartData=JSON.parse(JSON.stringify(KLINE_1MINUTE_DATA));
48925
48998
 
48926
- hqchartData.name=symbol;
48927
- hqchartData.symbol=symbol;
48928
- callback(hqchartData);
48999
+ var kItem=hqchartData.data[0];
49000
+ var price=kItem[5];
49001
+ var value=Math.ceil(Math.random()*10)/1000*price;
49002
+ var bUp=Math.ceil(Math.random()*10)>=5;
49003
+
49004
+ if (bUp) price+=value;
49005
+ else price-=value;
49006
+ kItem[5]=price;
49007
+ kItem[3]=Math.max(price, kItem[3]);
49008
+ kItem[4]=Math.min(price, kItem[4]);
49009
+
49010
+ hqchartData.name=symbol;
49011
+ hqchartData.symbol=symbol;
49012
+ callback(hqchartData);
49013
+ }
48929
49014
  }
48930
49015
 
48931
49016
 
@@ -3386,7 +3386,7 @@ function JSAlgorithm(errorHandler,symbolData)
3386
3386
  }
3387
3387
  else
3388
3388
  {
3389
- var i=0;
3389
+ var i=n;
3390
3390
  var lastData=null;
3391
3391
  for(;i<data.length; ++i)
3392
3392
  {
@@ -1039,6 +1039,7 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
1039
1039
  if (IFrameSplitOperator.IsNumber(item.CloseBeforeButton)) chart.Frame.SubFrame[i].Frame.IsShowCloseButton=item.CloseBeforeButton;
1040
1040
 
1041
1041
  if (item.ClientBGColor) subFrame.ClientBGColor=item.ClientBGColor;
1042
+ if (!IFrameSplitOperator.IsUndefined(item.HorizontalReserved)) subFrame.HorizontalReserved=item.HorizontalReserved;
1042
1043
  }
1043
1044
 
1044
1045
  chart.UpdateXShowText();
@@ -11026,6 +11027,9 @@ function AverageWidthFrame()
11026
11027
  for(var i=this.HorizontalInfo.length-1; i>=0; --i) //从上往下画分割线
11027
11028
  {
11028
11029
  var item=this.HorizontalInfo[i];
11030
+ if (!IFrameSplitOperator.IsNumber(item.Value)) continue;
11031
+ if (item.Value>this.HorizontalMax || item.Value<this.HorizontalMin) continue;
11032
+
11029
11033
  var y=this.GetYFromData(item.Value);
11030
11034
  if (y!=null && yPrev!=null && Math.abs(y-yPrev)<this.MinYDistance) continue; //两个坐标在近了 就不画了
11031
11035
 
@@ -11568,12 +11572,13 @@ function AverageWidthFrame()
11568
11572
  if (item.Font != null) this.Canvas.font = item.Font;
11569
11573
  this.Canvas.fillStyle = item.TextColor;
11570
11574
  this.Canvas.textAlign = "left";
11575
+ var textHeight=this.Canvas.measureText("擎").width;
11571
11576
  var yText=y;
11572
11577
  if (y >= bottom - 2)
11573
11578
  {
11574
11579
  this.Canvas.textBaseline = 'bottom';
11575
11580
  }
11576
- else if (y <= top + 2)
11581
+ else if ((y-textHeight/2)<=top)
11577
11582
  {
11578
11583
  this.Canvas.textBaseline = 'top';
11579
11584
  yText+=this.YTextTopOffset;
@@ -11602,12 +11607,13 @@ function AverageWidthFrame()
11602
11607
  if (item.Font != null) this.Canvas.font = item.Font;
11603
11608
  this.Canvas.fillStyle = item.TextColor;
11604
11609
  this.Canvas.textAlign = "right";
11610
+ var textHeight=this.Canvas.measureText("擎").width;
11605
11611
  var yText=y;
11606
11612
  if (y >= bottom - 2)
11607
11613
  {
11608
11614
  this.Canvas.textBaseline = 'bottom';
11609
11615
  }
11610
- else if (y <= top + 2)
11616
+ else if (y-textHeight/2 <= top)
11611
11617
  {
11612
11618
  this.Canvas.textBaseline = 'top';
11613
11619
  yText+=this.YTextTopOffset;
@@ -48067,6 +48073,8 @@ function FrameSplitMinutePriceY()
48067
48073
 
48068
48074
  this.CustomCoordinate();
48069
48075
 
48076
+ this.ReservedHeight({ Max:this.Frame.HorizontalMax, Min:this.Frame.HorizontalMin }); //预留高度
48077
+
48070
48078
  if (this.GetEventCallback)
48071
48079
  {
48072
48080
  var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_SPLIT_YCOORDINATE);
@@ -71928,7 +71936,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
71928
71936
 
71929
71937
  //绑定数据
71930
71938
  this.UpdateMainData(bindData,lastDataCount);
71931
- this.BindInstructionIndexData(bindData); //执行指示脚本
71939
+ this.UpdateOverlayMinuteRealtimeData(data); //更新叠加股票数据
71940
+ this.BindInstructionIndexData(bindData); //执行指示脚本
71932
71941
 
71933
71942
  for(var i=0; i<this.Frame.SubFrame.length; ++i)
71934
71943
  {
@@ -76699,7 +76708,7 @@ KLineChartContainer.JsonDataToMinuteRealtimeDataV2=function(data,symbol)
76699
76708
  var date = 0, yclose = 1, open = 2, high = 3, low = 4, close = 5, vol = 6, amount = 7, time = 8, position=9;
76700
76709
  var orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;
76701
76710
  var yClose=null;
76702
-
76711
+ var aryMinuteData=[];
76703
76712
  for (var i = 0; i < overlayData.data.length; ++i)
76704
76713
  {
76705
76714
  var item = new HistoryData();
@@ -88947,6 +88956,7 @@ var MARKET_SUFFIX_NAME=
88947
88956
  SHFE: '.SHF', //上期所 (Shanghai Futures Exchange) | 上期所-能源
88948
88957
  SHFE2:'.SHFE', //上期所 (Shanghai Futures Exchange) | 上期所-能源
88949
88958
  CFFEX: '.CFE', //中期所 (China Financial Futures Exchange)
88959
+ CFFEX2:'.CFFEX', //中期所 (China Financial Futures Exchange)
88950
88960
  DCE: '.DCE', //大连商品交易所(Dalian Commodity Exchange)
88951
88961
  CZCE: '.CZC', //郑州期货交易所
88952
88962
  GZFE:".GZFE", //广州期货交易所
@@ -89158,6 +89168,7 @@ var MARKET_SUFFIX_NAME=
89158
89168
  {
89159
89169
  if (!upperSymbol) return false;
89160
89170
  if (upperSymbol.indexOf(this.CFFEX) > 0) return true;
89171
+ if (upperSymbol.indexOf(this.CFFEX2) > 0) return true;
89161
89172
 
89162
89173
  return false;
89163
89174
  },
@@ -90674,8 +90685,8 @@ function FuturesTimeData()
90674
90685
  [
90675
90686
  { Value: 900, Text: '9:00' },
90676
90687
  { Value: 1000, Text: '10:00' },
90677
- { Value: 1330, Text: '13:30' },
90678
- { Value: 1430, Text: '14:30' },
90688
+ { Value: 1100, Text: '11:00' },
90689
+ { Value: 1400, Text: '14:00' },
90679
90690
  { Value: 1500, Text: '15:00' },
90680
90691
  ],
90681
90692
  Min: //最小模式
@@ -79863,4 +79863,25 @@ var KLINE_DAY_OVERLAY_DATA={
79863
79863
  317757173399.7
79864
79864
  ]
79865
79865
  ]
79866
+ }
79867
+
79868
+
79869
+ var KLINE_1DAY_OVERLAY_DATA=
79870
+ {
79871
+ "stock":
79872
+ [
79873
+ {
79874
+ "time": 150002,
79875
+ "date": 20230825,
79876
+ "price": 3074.0747,
79877
+ "open": 3068.615,
79878
+ "yclose": 3082.2439,
79879
+ "high": 3095.047,
79880
+ "low": 3053.0373,
79881
+ "vol": 293357686,
79882
+ "amount": 317757373399.7,
79883
+ "symbol": "000001.sh",
79884
+ "name": "000001.sh"
79885
+ }
79886
+ ],
79866
79887
  }
@@ -2678,4 +2678,26 @@ var KLINE_MINUTE_DATA2 = {
2678
2678
  "name": "平安银行",
2679
2679
  "count": 7646,
2680
2680
  "code": 0
2681
- }
2681
+ }
2682
+
2683
+
2684
+ var KLINE_1MINUTE_DATA2=
2685
+ {
2686
+ code:0,
2687
+ data:
2688
+ [
2689
+ [
2690
+ 20230829,
2691
+ 12.65,
2692
+ 12.65,
2693
+ 12.65,
2694
+ 12.65,
2695
+ 12.65,
2696
+ 1246339,
2697
+ 15766208,
2698
+ 1500
2699
+ ]
2700
+ ],
2701
+ symbol:"xxx",
2702
+ name:"xxxx",
2703
+ }
@@ -78512,4 +78512,25 @@ var KLINE_DAY_OVERLAY_DATA2 =
78512
78512
  171136489266.51
78513
78513
  ]
78514
78514
  ]
78515
+ }
78516
+
78517
+
78518
+ var KLINE_1DAY_OVERLAY_DATA2=
78519
+ {
78520
+ "stock":
78521
+ [
78522
+ {
78523
+ "time": 150002,
78524
+ "date": 20230825,
78525
+ "price": 10180.4711,
78526
+ "open": 10197.9573,
78527
+ "yclose": 10256.1896,
78528
+ "high": 10212.6467,
78529
+ "low": 10091.8625,
78530
+ "vol": 10428916190,
78531
+ "amount": 171138489266.7,
78532
+ "symbol": "",
78533
+ "name": ""
78534
+ }
78535
+ ],
78515
78536
  }
@@ -199,17 +199,55 @@ HQData.RequestFlowCapitalData=function(data,callback)
199
199
  callback(hqchartData);
200
200
  }
201
201
 
202
- HQData.RequestRealtimeData=function(data,callback)
202
+ HQData.RequestRealtimeData=function(data, callback)
203
203
  {
204
204
  data.PreventDefault=true;
205
205
  var symbol=data.Request.Data.symbol[0]; //请求的股票代码
206
206
 
207
- console.log(`[HQData::RequestRealtimeData] Symbol=${symbol}`);
207
+ if (data.Request.Data.symbol.length>1) //叠加股票
208
+ {
209
+ var hqchartData={ stock:[], code:0 };
210
+ var arySymbol=data.Request.Data.symbol;
211
+ for(var i=0;i<arySymbol.length;++i)
212
+ {
213
+ var symbol=arySymbol[i];
214
+ if (i==0)
215
+ {
216
+ var stock=KLINE_1DAY_DATA.stock[0];
217
+ stock.name=symbol;
218
+ stock.symbol=symbol;
219
+ hqchartData.stock.push(stock);
220
+ }
221
+ else
222
+ {
223
+ if (symbol=="399001.sz")
224
+ {
225
+ var stock=KLINE_1DAY_OVERLAY_DATA2.stock[0];
226
+ stock.name=symbol;
227
+ stock.symbol=symbol;
228
+ hqchartData.stock.push(stock);
229
+ }
230
+ else
231
+ {
232
+ var stock=KLINE_1DAY_OVERLAY_DATA.stock[0];
233
+ stock.name=symbol;
234
+ stock.symbol=symbol;
235
+ hqchartData.stock.push(stock);
236
+ }
237
+
238
+ }
239
+ }
208
240
 
209
- var hqchartData=KLINE_1DAY_DATA;
210
- hqchartData.stock[0].name=symbol;
211
- hqchartData.stock[0].symbol=symbol;
212
- callback(hqchartData);
241
+ callback(hqchartData);
242
+ }
243
+ else
244
+ {
245
+ console.log(`[HQData::RequestRealtimeData] Symbol=${symbol}`);
246
+ var hqchartData=KLINE_1DAY_DATA;
247
+ hqchartData.stock[0].name=symbol;
248
+ hqchartData.stock[0].symbol=symbol;
249
+ callback(hqchartData);
250
+ }
213
251
  }
214
252
 
215
253
 
@@ -233,24 +271,71 @@ HQData.RequestMinuteRealtimeData=function(data,callback)
233
271
  data.PreventDefault=true;
234
272
  var symbol=data.Request.Data.symbol[0]; //请求的股票代码
235
273
 
236
- console.log(`[HQData::RequestMinuteRealtimeData] Symbol=${symbol}`);
274
+ if (data.Request.Data.symbol.length>1) //叠加股票
275
+ {
276
+ var hqchartData=JSON.parse(JSON.stringify(KLINE_1MINUTE_DATA));
277
+ hqchartData.overlay=[]; //叠加数据
278
+ var arySymbol=data.Request.Data.symbol;
279
+ for(var i=0;i<arySymbol.length;++i)
280
+ {
281
+ var symbol=arySymbol[i];
282
+ if (i==0)
283
+ {
284
+ var kItem=hqchartData.data[0];
285
+ var price=kItem[5];
286
+ var value=Math.ceil(Math.random()*10)/1000*price;
287
+ var bUp=Math.ceil(Math.random()*10)>=5;
288
+
289
+ if (bUp) price+=value;
290
+ else price-=value;
291
+ kItem[5]=price;
292
+ kItem[3]=Math.max(price, kItem[3]);
293
+ kItem[4]=Math.min(price, kItem[4]);
294
+
295
+ hqchartData.name=symbol;
296
+ hqchartData.symbol=symbol;
297
+ }
298
+ else
299
+ {
300
+ var testData=JSON.parse(JSON.stringify(KLINE_1MINUTE_DATA2));
301
+ var kItem=testData.data[0];
302
+ var price=kItem[5];
303
+ var value=Math.ceil(Math.random()*10)/1000*price;
304
+ var bUp=Math.ceil(Math.random()*10)>=5;
305
+
306
+ if (bUp) price+=value;
307
+ else price-=value;
308
+ kItem[5]=price;
309
+ kItem[3]=Math.max(price, kItem[3]);
310
+ kItem[4]=Math.min(price, kItem[4]);
311
+ var stock={ data:testData.data, symbol:symbol, name:symbol };
312
+ hqchartData.overlay.push(stock);
313
+ }
314
+ }
237
315
 
238
- var hqchartData=JSON.parse(JSON.stringify(KLINE_1MINUTE_DATA));
316
+ callback(hqchartData);
317
+ }
318
+ else
319
+ {
320
+ console.log(`[HQData::RequestMinuteRealtimeData] Symbol=${symbol}`);
239
321
 
240
- var kItem=hqchartData.data[0];
241
- var price=kItem[5];
242
- var value=Math.ceil(Math.random()*10)/1000*price;
243
- var bUp=Math.ceil(Math.random()*10)>=5;
322
+ var hqchartData=JSON.parse(JSON.stringify(KLINE_1MINUTE_DATA));
244
323
 
245
- if (bUp) price+=value;
246
- else price-=value;
247
- kItem[5]=price;
248
- kItem[3]=Math.max(price, kItem[3]);
249
- kItem[4]=Math.min(price, kItem[4]);
250
-
251
- hqchartData.name=symbol;
252
- hqchartData.symbol=symbol;
253
- callback(hqchartData);
324
+ var kItem=hqchartData.data[0];
325
+ var price=kItem[5];
326
+ var value=Math.ceil(Math.random()*10)/1000*price;
327
+ var bUp=Math.ceil(Math.random()*10)>=5;
328
+
329
+ if (bUp) price+=value;
330
+ else price-=value;
331
+ kItem[5]=price;
332
+ kItem[3]=Math.max(price, kItem[3]);
333
+ kItem[4]=Math.min(price, kItem[4]);
334
+
335
+ hqchartData.name=symbol;
336
+ hqchartData.symbol=symbol;
337
+ callback(hqchartData);
338
+ }
254
339
  }
255
340
 
256
341
 
@@ -4964,6 +4964,7 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4964
4964
  if (IFrameSplitOperator.IsNumber(item.CloseBeforeButton)) chart.Frame.SubFrame[i].Frame.IsShowCloseButton=item.CloseBeforeButton;
4965
4965
 
4966
4966
  if (item.ClientBGColor) subFrame.ClientBGColor=item.ClientBGColor;
4967
+ if (!IFrameSplitOperator.IsUndefined(item.HorizontalReserved)) subFrame.HorizontalReserved=item.HorizontalReserved;
4967
4968
  }
4968
4969
 
4969
4970
  chart.UpdateXShowText();
@@ -14951,6 +14952,9 @@ function AverageWidthFrame()
14951
14952
  for(var i=this.HorizontalInfo.length-1; i>=0; --i) //从上往下画分割线
14952
14953
  {
14953
14954
  var item=this.HorizontalInfo[i];
14955
+ if (!IFrameSplitOperator.IsNumber(item.Value)) continue;
14956
+ if (item.Value>this.HorizontalMax || item.Value<this.HorizontalMin) continue;
14957
+
14954
14958
  var y=this.GetYFromData(item.Value);
14955
14959
  if (y!=null && yPrev!=null && Math.abs(y-yPrev)<this.MinYDistance) continue; //两个坐标在近了 就不画了
14956
14960
 
@@ -15493,12 +15497,13 @@ function AverageWidthFrame()
15493
15497
  if (item.Font != null) this.Canvas.font = item.Font;
15494
15498
  this.Canvas.fillStyle = item.TextColor;
15495
15499
  this.Canvas.textAlign = "left";
15500
+ var textHeight=this.Canvas.measureText("擎").width;
15496
15501
  var yText=y;
15497
15502
  if (y >= bottom - 2)
15498
15503
  {
15499
15504
  this.Canvas.textBaseline = 'bottom';
15500
15505
  }
15501
- else if (y <= top + 2)
15506
+ else if ((y-textHeight/2)<=top)
15502
15507
  {
15503
15508
  this.Canvas.textBaseline = 'top';
15504
15509
  yText+=this.YTextTopOffset;
@@ -15527,12 +15532,13 @@ function AverageWidthFrame()
15527
15532
  if (item.Font != null) this.Canvas.font = item.Font;
15528
15533
  this.Canvas.fillStyle = item.TextColor;
15529
15534
  this.Canvas.textAlign = "right";
15535
+ var textHeight=this.Canvas.measureText("擎").width;
15530
15536
  var yText=y;
15531
15537
  if (y >= bottom - 2)
15532
15538
  {
15533
15539
  this.Canvas.textBaseline = 'bottom';
15534
15540
  }
15535
- else if (y <= top + 2)
15541
+ else if (y-textHeight/2 <= top)
15536
15542
  {
15537
15543
  this.Canvas.textBaseline = 'top';
15538
15544
  yText+=this.YTextTopOffset;
@@ -51992,6 +51998,8 @@ function FrameSplitMinutePriceY()
51992
51998
 
51993
51999
  this.CustomCoordinate();
51994
52000
 
52001
+ this.ReservedHeight({ Max:this.Frame.HorizontalMax, Min:this.Frame.HorizontalMin }); //预留高度
52002
+
51995
52003
  if (this.GetEventCallback)
51996
52004
  {
51997
52005
  var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_SPLIT_YCOORDINATE);
@@ -75853,7 +75861,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
75853
75861
 
75854
75862
  //绑定数据
75855
75863
  this.UpdateMainData(bindData,lastDataCount);
75856
- this.BindInstructionIndexData(bindData); //执行指示脚本
75864
+ this.UpdateOverlayMinuteRealtimeData(data); //更新叠加股票数据
75865
+ this.BindInstructionIndexData(bindData); //执行指示脚本
75857
75866
 
75858
75867
  for(var i=0; i<this.Frame.SubFrame.length; ++i)
75859
75868
  {
@@ -80624,7 +80633,7 @@ KLineChartContainer.JsonDataToMinuteRealtimeDataV2=function(data,symbol)
80624
80633
  var date = 0, yclose = 1, open = 2, high = 3, low = 4, close = 5, vol = 6, amount = 7, time = 8, position=9;
80625
80634
  var orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;
80626
80635
  var yClose=null;
80627
-
80636
+ var aryMinuteData=[];
80628
80637
  for (var i = 0; i < overlayData.data.length; ++i)
80629
80638
  {
80630
80639
  var item = new HistoryData();
@@ -92872,6 +92881,7 @@ var MARKET_SUFFIX_NAME=
92872
92881
  SHFE: '.SHF', //上期所 (Shanghai Futures Exchange) | 上期所-能源
92873
92882
  SHFE2:'.SHFE', //上期所 (Shanghai Futures Exchange) | 上期所-能源
92874
92883
  CFFEX: '.CFE', //中期所 (China Financial Futures Exchange)
92884
+ CFFEX2:'.CFFEX', //中期所 (China Financial Futures Exchange)
92875
92885
  DCE: '.DCE', //大连商品交易所(Dalian Commodity Exchange)
92876
92886
  CZCE: '.CZC', //郑州期货交易所
92877
92887
  GZFE:".GZFE", //广州期货交易所
@@ -93083,6 +93093,7 @@ var MARKET_SUFFIX_NAME=
93083
93093
  {
93084
93094
  if (!upperSymbol) return false;
93085
93095
  if (upperSymbol.indexOf(this.CFFEX) > 0) return true;
93096
+ if (upperSymbol.indexOf(this.CFFEX2) > 0) return true;
93086
93097
 
93087
93098
  return false;
93088
93099
  },
@@ -94599,8 +94610,8 @@ function FuturesTimeData()
94599
94610
  [
94600
94611
  { Value: 900, Text: '9:00' },
94601
94612
  { Value: 1000, Text: '10:00' },
94602
- { Value: 1330, Text: '13:30' },
94603
- { Value: 1430, Text: '14:30' },
94613
+ { Value: 1100, Text: '11:00' },
94614
+ { Value: 1400, Text: '14:00' },
94604
94615
  { Value: 1500, Text: '15:00' },
94605
94616
  ],
94606
94617
  Min: //最小模式
@@ -100195,7 +100206,7 @@ function JSAlgorithm(errorHandler,symbolData)
100195
100206
  }
100196
100207
  else
100197
100208
  {
100198
- var i=0;
100209
+ var i=n;
100199
100210
  var lastData=null;
100200
100211
  for(;i<data.length; ++i)
100201
100212
  {
@@ -134341,7 +134352,7 @@ function ScrollBarBGChart()
134341
134352
 
134342
134353
 
134343
134354
 
134344
- var HQCHART_VERSION="1.1.13467";
134355
+ var HQCHART_VERSION="1.1.13484";
134345
134356
 
134346
134357
  function PrintHQChartVersion()
134347
134358
  {
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.13467";
8
+ var HQCHART_VERSION="1.1.13484";
9
9
 
10
10
  function PrintHQChartVersion()
11
11
  {
@@ -48874,17 +48874,55 @@ HQData.RequestFlowCapitalData=function(data,callback)
48874
48874
  callback(hqchartData);
48875
48875
  }
48876
48876
 
48877
- HQData.RequestRealtimeData=function(data,callback)
48877
+ HQData.RequestRealtimeData=function(data, callback)
48878
48878
  {
48879
48879
  data.PreventDefault=true;
48880
48880
  var symbol=data.Request.Data.symbol[0]; //请求的股票代码
48881
48881
 
48882
- console.log(`[HQData::RequestRealtimeData] Symbol=${symbol}`);
48882
+ if (data.Request.Data.symbol.length>1) //叠加股票
48883
+ {
48884
+ var hqchartData={ stock:[], code:0 };
48885
+ var arySymbol=data.Request.Data.symbol;
48886
+ for(var i=0;i<arySymbol.length;++i)
48887
+ {
48888
+ var symbol=arySymbol[i];
48889
+ if (i==0)
48890
+ {
48891
+ var stock=KLINE_1DAY_DATA.stock[0];
48892
+ stock.name=symbol;
48893
+ stock.symbol=symbol;
48894
+ hqchartData.stock.push(stock);
48895
+ }
48896
+ else
48897
+ {
48898
+ if (symbol=="399001.sz")
48899
+ {
48900
+ var stock=KLINE_1DAY_OVERLAY_DATA2.stock[0];
48901
+ stock.name=symbol;
48902
+ stock.symbol=symbol;
48903
+ hqchartData.stock.push(stock);
48904
+ }
48905
+ else
48906
+ {
48907
+ var stock=KLINE_1DAY_OVERLAY_DATA.stock[0];
48908
+ stock.name=symbol;
48909
+ stock.symbol=symbol;
48910
+ hqchartData.stock.push(stock);
48911
+ }
48912
+
48913
+ }
48914
+ }
48883
48915
 
48884
- var hqchartData=KLINE_1DAY_DATA;
48885
- hqchartData.stock[0].name=symbol;
48886
- hqchartData.stock[0].symbol=symbol;
48887
- callback(hqchartData);
48916
+ callback(hqchartData);
48917
+ }
48918
+ else
48919
+ {
48920
+ console.log(`[HQData::RequestRealtimeData] Symbol=${symbol}`);
48921
+ var hqchartData=KLINE_1DAY_DATA;
48922
+ hqchartData.stock[0].name=symbol;
48923
+ hqchartData.stock[0].symbol=symbol;
48924
+ callback(hqchartData);
48925
+ }
48888
48926
  }
48889
48927
 
48890
48928
 
@@ -48908,24 +48946,71 @@ HQData.RequestMinuteRealtimeData=function(data,callback)
48908
48946
  data.PreventDefault=true;
48909
48947
  var symbol=data.Request.Data.symbol[0]; //请求的股票代码
48910
48948
 
48911
- console.log(`[HQData::RequestMinuteRealtimeData] Symbol=${symbol}`);
48949
+ if (data.Request.Data.symbol.length>1) //叠加股票
48950
+ {
48951
+ var hqchartData=JSON.parse(JSON.stringify(KLINE_1MINUTE_DATA));
48952
+ hqchartData.overlay=[]; //叠加数据
48953
+ var arySymbol=data.Request.Data.symbol;
48954
+ for(var i=0;i<arySymbol.length;++i)
48955
+ {
48956
+ var symbol=arySymbol[i];
48957
+ if (i==0)
48958
+ {
48959
+ var kItem=hqchartData.data[0];
48960
+ var price=kItem[5];
48961
+ var value=Math.ceil(Math.random()*10)/1000*price;
48962
+ var bUp=Math.ceil(Math.random()*10)>=5;
48963
+
48964
+ if (bUp) price+=value;
48965
+ else price-=value;
48966
+ kItem[5]=price;
48967
+ kItem[3]=Math.max(price, kItem[3]);
48968
+ kItem[4]=Math.min(price, kItem[4]);
48912
48969
 
48913
- var hqchartData=JSON.parse(JSON.stringify(KLINE_1MINUTE_DATA));
48970
+ hqchartData.name=symbol;
48971
+ hqchartData.symbol=symbol;
48972
+ }
48973
+ else
48974
+ {
48975
+ var testData=JSON.parse(JSON.stringify(KLINE_1MINUTE_DATA2));
48976
+ var kItem=testData.data[0];
48977
+ var price=kItem[5];
48978
+ var value=Math.ceil(Math.random()*10)/1000*price;
48979
+ var bUp=Math.ceil(Math.random()*10)>=5;
48980
+
48981
+ if (bUp) price+=value;
48982
+ else price-=value;
48983
+ kItem[5]=price;
48984
+ kItem[3]=Math.max(price, kItem[3]);
48985
+ kItem[4]=Math.min(price, kItem[4]);
48986
+ var stock={ data:testData.data, symbol:symbol, name:symbol };
48987
+ hqchartData.overlay.push(stock);
48988
+ }
48989
+ }
48914
48990
 
48915
- var kItem=hqchartData.data[0];
48916
- var price=kItem[5];
48917
- var value=Math.ceil(Math.random()*10)/1000*price;
48918
- var bUp=Math.ceil(Math.random()*10)>=5;
48919
-
48920
- if (bUp) price+=value;
48921
- else price-=value;
48922
- kItem[5]=price;
48923
- kItem[3]=Math.max(price, kItem[3]);
48924
- kItem[4]=Math.min(price, kItem[4]);
48991
+ callback(hqchartData);
48992
+ }
48993
+ else
48994
+ {
48995
+ console.log(`[HQData::RequestMinuteRealtimeData] Symbol=${symbol}`);
48996
+
48997
+ var hqchartData=JSON.parse(JSON.stringify(KLINE_1MINUTE_DATA));
48925
48998
 
48926
- hqchartData.name=symbol;
48927
- hqchartData.symbol=symbol;
48928
- callback(hqchartData);
48999
+ var kItem=hqchartData.data[0];
49000
+ var price=kItem[5];
49001
+ var value=Math.ceil(Math.random()*10)/1000*price;
49002
+ var bUp=Math.ceil(Math.random()*10)>=5;
49003
+
49004
+ if (bUp) price+=value;
49005
+ else price-=value;
49006
+ kItem[5]=price;
49007
+ kItem[3]=Math.max(price, kItem[3]);
49008
+ kItem[4]=Math.min(price, kItem[4]);
49009
+
49010
+ hqchartData.name=symbol;
49011
+ hqchartData.symbol=symbol;
49012
+ callback(hqchartData);
49013
+ }
48929
49014
  }
48930
49015
 
48931
49016
 
@@ -5008,6 +5008,7 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
5008
5008
  if (IFrameSplitOperator.IsNumber(item.CloseBeforeButton)) chart.Frame.SubFrame[i].Frame.IsShowCloseButton=item.CloseBeforeButton;
5009
5009
 
5010
5010
  if (item.ClientBGColor) subFrame.ClientBGColor=item.ClientBGColor;
5011
+ if (!IFrameSplitOperator.IsUndefined(item.HorizontalReserved)) subFrame.HorizontalReserved=item.HorizontalReserved;
5011
5012
  }
5012
5013
 
5013
5014
  chart.UpdateXShowText();
@@ -14995,6 +14996,9 @@ function AverageWidthFrame()
14995
14996
  for(var i=this.HorizontalInfo.length-1; i>=0; --i) //从上往下画分割线
14996
14997
  {
14997
14998
  var item=this.HorizontalInfo[i];
14999
+ if (!IFrameSplitOperator.IsNumber(item.Value)) continue;
15000
+ if (item.Value>this.HorizontalMax || item.Value<this.HorizontalMin) continue;
15001
+
14998
15002
  var y=this.GetYFromData(item.Value);
14999
15003
  if (y!=null && yPrev!=null && Math.abs(y-yPrev)<this.MinYDistance) continue; //两个坐标在近了 就不画了
15000
15004
 
@@ -15537,12 +15541,13 @@ function AverageWidthFrame()
15537
15541
  if (item.Font != null) this.Canvas.font = item.Font;
15538
15542
  this.Canvas.fillStyle = item.TextColor;
15539
15543
  this.Canvas.textAlign = "left";
15544
+ var textHeight=this.Canvas.measureText("擎").width;
15540
15545
  var yText=y;
15541
15546
  if (y >= bottom - 2)
15542
15547
  {
15543
15548
  this.Canvas.textBaseline = 'bottom';
15544
15549
  }
15545
- else if (y <= top + 2)
15550
+ else if ((y-textHeight/2)<=top)
15546
15551
  {
15547
15552
  this.Canvas.textBaseline = 'top';
15548
15553
  yText+=this.YTextTopOffset;
@@ -15571,12 +15576,13 @@ function AverageWidthFrame()
15571
15576
  if (item.Font != null) this.Canvas.font = item.Font;
15572
15577
  this.Canvas.fillStyle = item.TextColor;
15573
15578
  this.Canvas.textAlign = "right";
15579
+ var textHeight=this.Canvas.measureText("擎").width;
15574
15580
  var yText=y;
15575
15581
  if (y >= bottom - 2)
15576
15582
  {
15577
15583
  this.Canvas.textBaseline = 'bottom';
15578
15584
  }
15579
- else if (y <= top + 2)
15585
+ else if (y-textHeight/2 <= top)
15580
15586
  {
15581
15587
  this.Canvas.textBaseline = 'top';
15582
15588
  yText+=this.YTextTopOffset;
@@ -52036,6 +52042,8 @@ function FrameSplitMinutePriceY()
52036
52042
 
52037
52043
  this.CustomCoordinate();
52038
52044
 
52045
+ this.ReservedHeight({ Max:this.Frame.HorizontalMax, Min:this.Frame.HorizontalMin }); //预留高度
52046
+
52039
52047
  if (this.GetEventCallback)
52040
52048
  {
52041
52049
  var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_SPLIT_YCOORDINATE);
@@ -75897,7 +75905,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
75897
75905
 
75898
75906
  //绑定数据
75899
75907
  this.UpdateMainData(bindData,lastDataCount);
75900
- this.BindInstructionIndexData(bindData); //执行指示脚本
75908
+ this.UpdateOverlayMinuteRealtimeData(data); //更新叠加股票数据
75909
+ this.BindInstructionIndexData(bindData); //执行指示脚本
75901
75910
 
75902
75911
  for(var i=0; i<this.Frame.SubFrame.length; ++i)
75903
75912
  {
@@ -80668,7 +80677,7 @@ KLineChartContainer.JsonDataToMinuteRealtimeDataV2=function(data,symbol)
80668
80677
  var date = 0, yclose = 1, open = 2, high = 3, low = 4, close = 5, vol = 6, amount = 7, time = 8, position=9;
80669
80678
  var orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;
80670
80679
  var yClose=null;
80671
-
80680
+ var aryMinuteData=[];
80672
80681
  for (var i = 0; i < overlayData.data.length; ++i)
80673
80682
  {
80674
80683
  var item = new HistoryData();
@@ -92916,6 +92925,7 @@ var MARKET_SUFFIX_NAME=
92916
92925
  SHFE: '.SHF', //上期所 (Shanghai Futures Exchange) | 上期所-能源
92917
92926
  SHFE2:'.SHFE', //上期所 (Shanghai Futures Exchange) | 上期所-能源
92918
92927
  CFFEX: '.CFE', //中期所 (China Financial Futures Exchange)
92928
+ CFFEX2:'.CFFEX', //中期所 (China Financial Futures Exchange)
92919
92929
  DCE: '.DCE', //大连商品交易所(Dalian Commodity Exchange)
92920
92930
  CZCE: '.CZC', //郑州期货交易所
92921
92931
  GZFE:".GZFE", //广州期货交易所
@@ -93127,6 +93137,7 @@ var MARKET_SUFFIX_NAME=
93127
93137
  {
93128
93138
  if (!upperSymbol) return false;
93129
93139
  if (upperSymbol.indexOf(this.CFFEX) > 0) return true;
93140
+ if (upperSymbol.indexOf(this.CFFEX2) > 0) return true;
93130
93141
 
93131
93142
  return false;
93132
93143
  },
@@ -94643,8 +94654,8 @@ function FuturesTimeData()
94643
94654
  [
94644
94655
  { Value: 900, Text: '9:00' },
94645
94656
  { Value: 1000, Text: '10:00' },
94646
- { Value: 1330, Text: '13:30' },
94647
- { Value: 1430, Text: '14:30' },
94657
+ { Value: 1100, Text: '11:00' },
94658
+ { Value: 1400, Text: '14:00' },
94648
94659
  { Value: 1500, Text: '15:00' },
94649
94660
  ],
94650
94661
  Min: //最小模式
@@ -100239,7 +100250,7 @@ function JSAlgorithm(errorHandler,symbolData)
100239
100250
  }
100240
100251
  else
100241
100252
  {
100242
- var i=0;
100253
+ var i=n;
100243
100254
  var lastData=null;
100244
100255
  for(;i<data.length; ++i)
100245
100256
  {
@@ -138282,7 +138293,7 @@ function HQChartScriptWorker()
138282
138293
 
138283
138294
 
138284
138295
 
138285
- var HQCHART_VERSION="1.1.13467";
138296
+ var HQCHART_VERSION="1.1.13484";
138286
138297
 
138287
138298
  function PrintHQChartVersion()
138288
138299
  {