hqchart 1.1.12831 → 1.1.12840

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.
@@ -11,7 +11,7 @@ HQData.RequestRealtimeData(data,callback);break;case'KLineChartContainer::Reques
11
11
  HQData.RequestFlowCapitalData(data,callback);break;case'KLineChartContainer::ReqeustHistoryMinuteData'://分钟全量数据下载
12
12
  HQData.RequestHistoryMinuteData(data,callback);break;case'KLineChartContainer::RequestMinuteRealtimeData'://分钟增量数据更新
13
13
  HQData.RequestMinuteRealtimeData(data,callback);break;case"JSSymbolData::GetVariantData"://额外的变量数据
14
- HQData.RequestIndexVariantData(data,callback);break;}};HQData.RequestMinuteData=function(data,callback){data.PreventDefault=true;var symbol=data.Request.Data.symbol[0];//请求的股票代码
14
+ HQData.RequestIndexVariantData(data,callback);break;case"AnnouncementInfo::RequestData":HQData.AnnouncementInfo_RequestData(data,callback);break;case"PforecastInfo::RequestData":HQData.PforecastInfo_RequestData(data,callback);break;case"InvestorInfo::RequestData":HQData.InvestorInfo_RequestData(data,callback);break;case"ResearchInfo::RequestData":break;case"BlockTrading::RequestData":HQData.BlockTrading_RequestData(data,callback);break;case"TradeDetail::RequestData":HQData.TradeDetail_RequestData(data,callback);break;}};HQData.RequestMinuteData=function(data,callback){data.PreventDefault=true;var symbol=data.Request.Data.symbol[0];//请求的股票代码
15
15
  var dayCount=data.Request.Data.daycount;console.log("[HQData::RequestMinuteData] Symbol="+symbol);var hqchartData=MINUTE_1DAY_DATA;hqchartData.stock[0].symbol=symbol;hqchartData.stock[0].name=symbol;callback(hqchartData);};HQData.RequestMinuteDaysData=function(data,callback){data.PreventDefault=true;var symbol=data.Request.Data.symbol;//请求的股票代码
16
16
  var dayCount=data.Request.Data.daycount;console.log("[HQData::RequestMinuteDaysData] Symbol="+symbol);var hqchartData=MINUTE_5DAY_DATA;hqchartData.symbol=symbol;hqchartData.name=symbol;callback(hqchartData);};HQData.RequestHistoryData=function(data,callback){data.PreventDefault=true;var symbol=data.Request.Data.symbol;//请求的股票代码
17
17
  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;//请求的股票代码
@@ -20,4 +20,4 @@ console.log("[HQData::RequestRealtimeData] Symbol="+symbol);var hqchartData=KLIN
20
20
  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];//请求的股票代码
21
21
  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;//变量名称
22
22
  if(varName=="FROMOPEN"){var hqchartData={};//单数据
23
- hqchartData.Data={Date:20230707,Value:240};hqchartData.DataType=1;callback(hqchartData);}};/*暴露外部用的方法*/exports.default={HQData:HQData};
23
+ hqchartData.Data={Date:20230707,Value:240};hqchartData.DataType=1;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);};/*暴露外部用的方法*/exports.default={HQData:HQData};
@@ -4164,9 +4164,9 @@ tooltip.Data=item;tooltip.ChartPaint=this;tooltip.Type=3;//异动信息
4164
4164
  return true;}}return false;};}//MACD森林线 支持横屏
4165
4165
  function ChartMACD(){this.newMethod=IChartPainting;//派生
4166
4166
  this.newMethod();delete this.newMethod;this.ClassName="ChartMACD";this.UpColor=g_JSChartResource.UpBarColor;this.DownColor=g_JSChartResource.DownBarColor;this.LineWidth=1;this.DrawSelectedStatus=this.DrawLinePoint;this.ExportData=this.ExportArrayData;this.PtInChart=function(x,y){var dataWidth=this.ChartFrame.DataWidth;var barWidth=this.LineWidth*GetDevicePixelRatio();if(this.barWidth==50)barWidth=null;else if(barWidth>dataWidth)barWidth=dataWidth;if(barWidth<4)barWidth=4;//宽度太小了点不到
4167
- return this.PtInBar(x,y,{BarWidth:barWidth});};this.Draw=function(){if(!this.IsShow||this.ChartFrame.IsMinSize||!this.IsVisible)return;if(this.IsShowIndexTitleOnly())return;if(this.IsHideScriptIndex())return;if(this.NotSupportMessage){this.DrawNotSupportmessage();return;}if(this.ChartFrame.IsHScreen===true){this.HScreenDraw();return;}var isMinute=this.IsMinuteFrame();var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var border=this.ChartBorder.GetBorder();var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.RightEx;var xPointCount=this.ChartFrame.XPointCount;var lockRect=this.GetLockRect();if(lockRect)chartright=lockRect.Left;var bFirstPoint=true;var drawCount=0;var yBottom=this.ChartFrame.GetYFromData(0);var lineWidth=this.LineWidth*GetDevicePixelRatio();if(this.LineWidth==50)lineWidth=dataWidth;else if(lineWidth>dataWidth)lineWidth=dataWidth;var backupLineWidth=this.Canvas.lineWidth;this.Canvas.lineWidth=lineWidth;for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j,xOffset+=dataWidth+distanceWidth)//for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j)
4168
- {var value=this.Data.Data[i];if(value==null)continue;if(isMinute){var x=this.ChartFrame.GetXFromIndex(j);}else{var left=xOffset;var right=xOffset+dataWidth;if(right>chartright)break;var x=left+(right-left)/2;}var y=this.ChartFrame.GetYFromData(value);if(x>chartright)break;var xFix=ToFixedPoint2(lineWidth,x);//毛边修正
4169
- this.Canvas.beginPath();this.Canvas.moveTo(xFix,yBottom);this.Canvas.lineTo(xFix,y);if(value>=0)this.Canvas.strokeStyle=this.UpColor;else this.Canvas.strokeStyle=this.DownColor;this.Canvas.stroke();this.Canvas.closePath();}this.Canvas.lineWidth=backupLineWidth;};this.HScreenDraw=function(){var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var border=this.ChartBorder.GetHScreenBorder();var chartright=border.BottomEx;var xPointCount=this.ChartFrame.XPointCount;var lockRect=this.GetLockRect();if(lockRect)chartright=lockRect.Top;var yBottom=this.ChartFrame.GetYFromData(0);var lineWidth=this.LineWidth*GetDevicePixelRatio();if(this.LineWidth==50)lineWidth=dataWidth;else if(lineWidth>dataWidth)lineWidth=dataWidth;var backupLineWidth=this.Canvas.lineWidth;this.Canvas.lineWidth=lineWidth;for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j){var value=this.Data.Data[i];if(value==null)continue;var x=this.ChartFrame.GetXFromIndex(j);var y=this.ChartFrame.GetYFromData(value);if(x>chartright)break;this.Canvas.beginPath();this.Canvas.moveTo(yBottom,ToFixedPoint(x));this.Canvas.lineTo(y,ToFixedPoint(x));if(value>=0)this.Canvas.strokeStyle=this.UpColor;else this.Canvas.strokeStyle=this.DownColor;this.Canvas.stroke();this.Canvas.closePath();}this.Canvas.lineWidth=backupLineWidth;};this.GetItemData=function(indexData){if(!indexData)return null;if(!IFrameSplitOperator.IsNumber(indexData.Index))return null;if(!this.Data||!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data))return null;var index=indexData.Index;if(index<0||index>=this.Data.Data.length)return null;var item=this.Data.Data[index];return[{Value:item,Color:item>0?this.UpColor:this.DownColor,Name:this.Name}];};}//柱子
4167
+ return this.PtInBar(x,y,{BarWidth:barWidth});};this.DrawBars=function(lineWidth,bUpBar){var isMinute=this.IsMinuteFrame();var border=this.ChartBorder.GetBorder();var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var xPointCount=this.ChartFrame.XPointCount;var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.RightEx;var lockRect=this.GetLockRect();if(lockRect)chartright=lockRect.Left;if(bUpBar)this.Canvas.strokeStyle=this.UpColor;else this.Canvas.strokeStyle=this.DownColor;var yBottom=this.ChartFrame.GetYFromData(0);this.Canvas.beginPath();var drawCount=0;for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j,xOffset+=dataWidth+distanceWidth){var value=this.Data.Data[i];if(value==null)continue;if(bUpBar){if(value<0)continue;}else{if(value>=0)continue;}if(isMinute){var x=this.ChartFrame.GetXFromIndex(j);}else{var left=xOffset;var right=xOffset+dataWidth;if(right>chartright)break;var x=left+(right-left)/2;}if(x>chartright)break;var y=this.ChartFrame.GetYFromData(value);var xFix=ToFixedPoint2(lineWidth,x);//毛边修正
4168
+ this.Canvas.moveTo(xFix,yBottom);this.Canvas.lineTo(xFix,y);++drawCount;}if(drawCount>0)this.Canvas.stroke();};this.Draw=function(){if(!this.IsShow||this.ChartFrame.IsMinSize||!this.IsVisible)return;if(this.IsShowIndexTitleOnly())return;if(this.IsHideScriptIndex())return;if(this.NotSupportMessage){this.DrawNotSupportmessage();return;}if(this.ChartFrame.IsHScreen===true){this.HScreenDraw();return;}var dataWidth=this.ChartFrame.DataWidth;var lineWidth=this.LineWidth*GetDevicePixelRatio();if(this.LineWidth==50)lineWidth=dataWidth;else if(lineWidth>dataWidth)lineWidth=dataWidth;var backupLineWidth=this.Canvas.lineWidth;this.Canvas.lineWidth=lineWidth;//上下分开画
4169
+ this.DrawBars(lineWidth,true);this.DrawBars(lineWidth,false);this.Canvas.lineWidth=backupLineWidth;};this.HScreenDraw=function(){var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var border=this.ChartBorder.GetHScreenBorder();var chartright=border.BottomEx;var xPointCount=this.ChartFrame.XPointCount;var lockRect=this.GetLockRect();if(lockRect)chartright=lockRect.Top;var yBottom=this.ChartFrame.GetYFromData(0);var lineWidth=this.LineWidth*GetDevicePixelRatio();if(this.LineWidth==50)lineWidth=dataWidth;else if(lineWidth>dataWidth)lineWidth=dataWidth;var backupLineWidth=this.Canvas.lineWidth;this.Canvas.lineWidth=lineWidth;for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j){var value=this.Data.Data[i];if(value==null)continue;var x=this.ChartFrame.GetXFromIndex(j);var y=this.ChartFrame.GetYFromData(value);if(x>chartright)break;this.Canvas.beginPath();this.Canvas.moveTo(yBottom,ToFixedPoint(x));this.Canvas.lineTo(y,ToFixedPoint(x));if(value>=0)this.Canvas.strokeStyle=this.UpColor;else this.Canvas.strokeStyle=this.DownColor;this.Canvas.stroke();this.Canvas.closePath();}this.Canvas.lineWidth=backupLineWidth;};this.GetItemData=function(indexData){if(!indexData)return null;if(!IFrameSplitOperator.IsNumber(indexData.Index))return null;if(!this.Data||!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data))return null;var index=indexData.Index;if(index<0||index>=this.Data.Data.length)return null;var item=this.Data.Data[index];return[{Value:item,Color:item>0?this.UpColor:this.DownColor,Name:this.Name}];};}//柱子
4170
4170
  function ChartBar(){this.newMethod=IChartPainting;//派生
4171
4171
  this.newMethod();delete this.newMethod;this.ClassName="ChartBar";this.UpBarColor=g_JSChartResource.UpBarColor;this.DownBarColor=g_JSChartResource.DownBarColor;this.Draw=function(){if(this.ChartFrame.IsMinSize)return;if(this.NotSupportMessage){this.DrawNotSupportmessage();return;}var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var chartright=this.ChartBorder.GetRight();var xPointCount=this.ChartFrame.XPointCount;var xOffset=this.ChartBorder.GetLeft()+distanceWidth/2.0+2.0;var bFirstPoint=true;var drawCount=0;var yBottom=this.ChartFrame.GetYFromData(0);if(dataWidth>=4){yBottom=ToFixedRect(yBottom);//调整为整数
4172
4172
  for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j,xOffset+=dataWidth+distanceWidth){var value=this.Data.Data[i];if(value==null||value==0)continue;var left=xOffset;var right=xOffset+dataWidth;if(right>chartright)break;var x=this.ChartFrame.GetXFromIndex(j);var y=this.ChartFrame.GetYFromData(value);if(value>0)this.Canvas.fillStyle=this.UpBarColor;else this.Canvas.fillStyle=this.DownBarColor;//高度调整为整数
@@ -4270,10 +4270,11 @@ this.Canvas.strokeStyle=color;if(bgColor)this.Canvas.fill(path);if(color)this.Ca
4270
4270
  function ChartMultiText(){this.newMethod=IChartPainting;//派生
4271
4271
  this.newMethod();delete this.newMethod;this.ClassName="ChartMultiText";this.Texts=[];//[ {Index:, Value:, Text:, Color:, Font: , Baseline:, Line:{ Color:, Dash:[虚线点], KData:"H/L", Offset:[5,10], Width:线粗细 }} ]
4272
4272
  this.Font=g_JSChartResource.DefaultTextFont;this.Color=g_JSChartResource.DefaultTextColor;this.IsHScreen=false;//是否横屏
4273
- this.Draw=function(){if(!this.IsShow||this.ChartFrame.IsMinSize)return;if(!this.Data||this.Data.length<=0)return;if(!this.Texts)return;this.IsHScreen=this.ChartFrame.IsHScreen===true;var xPointCount=this.ChartFrame.XPointCount;var offset=this.Data.DataOffset;var left=this.ChartBorder.GetLeft();var right=this.ChartBorder.GetRight();var top=this.ChartBorder.GetTopEx();var bottom=this.ChartBorder.GetBottomEx();if(this.IsHScreen){left=this.ChartBorder.GetTop();right=this.ChartBorder.GetBottom();}var y=0;for(var i=0;i<this.Texts.length;++i){var item=this.Texts[i];if(!item.Text)continue;if(!IFrameSplitOperator.IsNumber(item.Index))continue;var index=item.Index-offset;if(index>=0&&index<xPointCount){var x=this.ChartFrame.GetXFromIndex(index);if(item.Value=="TOP")y=top;else if(item.Value=="BOTTOM")y=bottom;else y=this.ChartFrame.GetYFromData(item.Value);if(item.Color)this.Canvas.fillStyle=item.Color;else this.Canvas.fillStyle=this.Color;if(item.Font)this.Canvas.font=item.Font;else this.Canvas.font=this.Font;var textWidth=this.Canvas.measureText(item.Text).width;this.Canvas.textAlign='center';if(x+textWidth/2>=right){this.Canvas.textAlign='right';x=right;}else if(x-textWidth/2<left){this.Canvas.textAlign='left';x=left;}if(item.Baseline==1)this.Canvas.textBaseline='top';else if(item.Baseline==2)this.Canvas.textBaseline='bottom';else this.Canvas.textBaseline='middle';if(this.IsHScreen){this.Canvas.save();this.Canvas.translate(y,x);this.Canvas.rotate(90*Math.PI/180);this.Canvas.fillText(item.Text,0,0);this.Canvas.restore();}else{if(IFrameSplitOperator.IsNumber(item.YMove))y+=item.YMove;this.Canvas.fillText(item.Text,x,y);}if(item.Line){var kItem=this.Data.Data[item.Index];var price=item.Line.KData=="H"?kItem.High:kItem.Low;var yPrice=this.ChartFrame.GetYFromData(price);var yText=y;if(Array.isArray(item.Line.Offset)&&item.Line.Offset.length==2){if(yText>yPrice)//文字在下方
4273
+ this.BuildKey=function(item){if(IFrameSplitOperator.IsNumber(item.Time)){var key=kItem.Date+'-'+item.Time;}else{var key=''+item.Date;}return key;};this.GetShowTextData=function(){var xPointCount=this.ChartFrame.XPointCount;var offset=this.Data.DataOffset;var mapText=new _map2.default();//key='date-time' value={ Data:[] }
4274
+ for(var i=0;i<this.Texts.length;++i){var item=this.Texts[i];if(!item.Text)continue;if(!IFrameSplitOperator.IsNumber(item.Index))continue;var index=item.Index-offset;if(index>=0&&index<xPointCount){var key=this.BuildKey(item);if(mapText.has(key)){var textItem=mapText.get(key);textItem.Data.push(item);}else{var textItem={Data:[item]};mapText.set(key,textItem);}}}return mapText;};this.DrawAllText=function(mapText){var bHScreen=this.ChartFrame.IsHScreen===true;var isMinute=this.IsMinuteFrame();var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var xPointCount=this.ChartFrame.XPointCount;if(bHScreen){var border=this.ChartBorder.GetHScreenBorder();var chartright=border.BottomEx;var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var left=this.ChartBorder.GetTop();var right=this.ChartBorder.GetBottom();}else{var border=this.ChartBorder.GetBorder();var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.RightEx;var left=this.ChartBorder.GetLeft();var right=this.ChartBorder.GetRight();}for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j,xOffset+=dataWidth+distanceWidth){var kItem=this.Data.Data[i];if(!kItem)continue;var key=this.BuildKey(kItem);if(!mapText.has(key))continue;var left=xOffset;var right=xOffset+dataWidth;if(right>chartright)break;var x=left+(right-left)/2;var textItem=mapText.get(key);for(var k=0;k<textItem.Data.length;++k){var item=textItem.Data[k];if(item.Value=="TOP")y=top;else if(item.Value=="BOTTOM")y=bottom;else y=this.ChartFrame.GetYFromData(item.Value);if(item.Color)this.Canvas.fillStyle=item.Color;else this.Canvas.fillStyle=this.Color;if(item.Font)this.Canvas.font=item.Font;else this.Canvas.font=this.Font;var textWidth=this.Canvas.measureText(item.Text).width;this.Canvas.textAlign='center';if(x+textWidth/2>=right){this.Canvas.textAlign='right';x=right;}else if(x-textWidth/2<left){this.Canvas.textAlign='left';x=left;}if(item.Baseline==1)this.Canvas.textBaseline='top';else if(item.Baseline==2)this.Canvas.textBaseline='bottom';else this.Canvas.textBaseline='middle';if(this.IsHScreen){this.Canvas.save();this.Canvas.translate(y,x);this.Canvas.rotate(90*Math.PI/180);this.Canvas.fillText(item.Text,0,0);this.Canvas.restore();}else{if(IFrameSplitOperator.IsNumber(item.YMove))y+=item.YMove;this.Canvas.fillText(item.Text,x,y);}if(item.Line){var kItem=this.Data.Data[item.Index];var price=item.Line.KData=="H"?kItem.High:kItem.Low;var yPrice=this.ChartFrame.GetYFromData(price);var yText=y;if(Array.isArray(item.Line.Offset)&&item.Line.Offset.length==2){if(yText>yPrice)//文字在下方
4274
4275
  {yText-=item.Line.Offset[1];yPrice+=item.Line.Offset[0];}else if(yText<yPrice){yText+=item.Line.Offset[1];yPrice-=item.Line.Offset[0];}}this.Canvas.save();if(item.Line.Dash)this.Canvas.setLineDash(item.Line.Dash);//虚线
4275
4276
  if(item.Line.Width>0)this.Canvas.lineWidth=item.Line.Width;//线宽
4276
- this.Canvas.strokeStyle=item.Line.Color;this.Canvas.beginPath();if(this.IsHScreen){this.Canvas.moveTo(yText,ToFixedPoint(x));this.Canvas.lineTo(yPrice,ToFixedPoint(x));}else{this.Canvas.moveTo(ToFixedPoint(x),yText);this.Canvas.lineTo(ToFixedPoint(x),yPrice);}this.Canvas.stroke();this.Canvas.restore();}}}};this.GetMaxMin=function(){var range={Min:null,Max:null};if(!this.Texts)return range;var xPointCount=this.ChartFrame.XPointCount;var start=this.Data.DataOffset;var end=start+xPointCount;for(var i in this.Texts){var item=this.Texts[i];if(item.Index>=start&&item.Index<end){if(range.Max==null)range.Max=item.Value;else if(range.Max<item.Value)range.Max=item.Value;if(range.Min==null)range.Min=item.Value;else if(range.Min>item.Value)range.Min=item.Value;}}return range;};}// 图标集合 支持横屏
4277
+ this.Canvas.strokeStyle=item.Line.Color;this.Canvas.beginPath();if(this.IsHScreen){this.Canvas.moveTo(yText,ToFixedPoint(x));this.Canvas.lineTo(yPrice,ToFixedPoint(x));}else{this.Canvas.moveTo(ToFixedPoint(x),yText);this.Canvas.lineTo(ToFixedPoint(x),yPrice);}this.Canvas.stroke();this.Canvas.restore();}}}};this.Draw=function(){if(!this.IsShow||this.ChartFrame.IsMinSize)return;if(!this.Data||this.Data.length<=0)return;if(!this.Texts)return;this.IsHScreen=this.ChartFrame.IsHScreen===true;var mapText=this.GetShowTextData();if(mapText.size<=0)return;this.DrawAllText(mapText);};this.GetMaxMin=function(){var range={Min:null,Max:null};if(!this.Texts)return range;var xPointCount=this.ChartFrame.XPointCount;var start=this.Data.DataOffset;var end=start+xPointCount;for(var i in this.Texts){var item=this.Texts[i];if(item.Index>=start&&item.Index<end){if(range.Max==null)range.Max=item.Value;else if(range.Max<item.Value)range.Max=item.Value;if(range.Min==null)range.Min=item.Value;else if(range.Min>item.Value)range.Min=item.Value;}}return range;};}// 图标集合 支持横屏
4277
4278
  function ChartMultiSVGIcon(){this.newMethod=IChartPainting;//派生
4278
4279
  this.newMethod();delete this.newMethod;this.ClassName="ChartMultiSVGIcon";this.Icon;//[ {Index:, Value:, Symbol:, Color:, Baseline:, Line:{ Color:, Dash:[虚线点], KData:"H/L", Offset:[5,10], Width:线粗细 } } ]
4279
4280
  this.IconSize={Max:g_JSChartResource.DRAWICON.Icon.MaxSize,Min:g_JSChartResource.DRAWICON.Icon.MinSize,//图标的最大最小值
@@ -9255,7 +9256,7 @@ if(MARKET_SUFFIX_NAME.IsHSX(upperSymbol))return this.GetHSX(upperSymbol);if(MARK
9255
9256
  {var splitData=g_IPETimeData.GetSplitData(upperSymbol);if(!splitData)return null;return this.GetFutures(splitData);}};}//走势图刻度分钟线
9256
9257
  function MinuteCoordinateData(){//沪深走势图时间刻度
9257
9258
  var SHZE_MINUTE_X_COORDINATE={Full://完整模式
9258
- [[0,0,"rgb(200,200,200)","09:30"],//[0]=索引 [1]=线段类型 [2]=文字颜色(弃用) [3]=刻度文字 [4]=线段颜色 [5]=背景色
9259
+ [[0,0,"rgb(200,200,200)","09:30"],//[0]=索引 [1]=线段类型(预留) [2]=文字颜色(弃用) [3]=刻度文字 [4]=线段颜色 [5]=背景色
9259
9260
  [31,0,"RGB(200,200,200)","10:00"],[61,0,"RGB(200,200,200)","10:30"],[91,0,"RGB(200,200,200)","11:00"],[122,1,"RGB(200,200,200)","13:00"],[152,0,"RGB(200,200,200)","13:30"],[182,0,"RGB(200,200,200)","14:00"],[212,0,"RGB(200,200,200)","14:30"],[242,1,"RGB(200,200,200)","15:00"]],Simple://简洁模式
9260
9261
  [[0,0,"rgb(200,200,200)","09:30"],[61,0,"RGB(200,200,200)","10:30"],[122,1,"RGB(200,200,200)","13:00"],[182,0,"RGB(200,200,200)","14:00"],[242,1,"RGB(200,200,200)","15:00"]],Min://最小模式
9261
9262
  [[0,0,"rgb(200,200,200)","09:30"],[122,1,"RGB(200,200,200)","13:00"],[242,1,"RGB(200,200,200)","15:00"]],Count:243,MiddleCount:122,GetData:function GetData(width){if(width<200)return this.Min;else if(width<400)return this.Simple;return this.Full;}};//上海股票期权时间刻度
@@ -13028,7 +13029,7 @@ hisData.Symbol=message.symbol;}var stockObj={HQDataType:HQ_DATA_TYPE.KLINE_ID,St
13028
13029
  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);};}/********************************************************************************
13029
13030
  * 版本信息输出
13030
13031
  *
13031
- */var HQCHART_VERSION="1.1.12830";function PrintHQChartVersion(){var log='*************************************************************************************************************\n*\n* HQChart Ver: '+HQCHART_VERSION+' \n* \n* License: Apache License 2.0 \n* Source: https://github.com/jones2000/HQChart\n*\n*************************************************************************************************************\n';console.log(log);}PrintHQChartVersion();//把给外界调用的方法暴露出来
13032
+ */var HQCHART_VERSION="1.1.12839";function PrintHQChartVersion(){var log='*************************************************************************************************************\n*\n* HQChart Ver: '+HQCHART_VERSION+' \n* \n* License: Apache License 2.0 \n* Source: https://github.com/jones2000/HQChart\n*\n*************************************************************************************************************\n';console.log(log);}PrintHQChartVersion();//把给外界调用的方法暴露出来
13032
13033
  exports.default=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
13033
13034
  // BaseIndex:BaseIndex,
13034
13035
  // ChartLine:ChartLine,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hqchart",
3
- "version": "1.1.12831",
3
+ "version": "1.1.12840",
4
4
  "description": "stock chart",
5
5
  "main": "lib/main.js",
6
6
  "scripts": {
@@ -48717,6 +48717,29 @@ HQData.NetworkFilter=function(data, callback)
48717
48717
  case "JSSymbolData::GetVariantData": //额外的变量数据
48718
48718
  HQData.RequestIndexVariantData(data,callback);
48719
48719
  break;
48720
+
48721
+ case "AnnouncementInfo::RequestData":
48722
+ HQData.AnnouncementInfo_RequestData(data,callback);
48723
+ break;
48724
+
48725
+ case "PforecastInfo::RequestData":
48726
+ HQData.PforecastInfo_RequestData(data,callback);
48727
+ break;
48728
+
48729
+ case "InvestorInfo::RequestData":
48730
+ HQData.InvestorInfo_RequestData(data,callback);
48731
+ break;
48732
+
48733
+ case "ResearchInfo::RequestData":
48734
+ break;
48735
+
48736
+ case "BlockTrading::RequestData":
48737
+ HQData.BlockTrading_RequestData(data,callback);
48738
+ break;
48739
+
48740
+ case "TradeDetail::RequestData":
48741
+ HQData.TradeDetail_RequestData(data,callback);
48742
+ break;
48720
48743
  }
48721
48744
  }
48722
48745
 
@@ -48842,3 +48865,74 @@ HQData.RequestIndexVariantData=function(data,callback)
48842
48865
  }
48843
48866
 
48844
48867
  }
48868
+
48869
+ HQData.AnnouncementInfo_RequestData=function(data,callback)
48870
+ {
48871
+ data.PreventDefault=true;
48872
+ var symbol=data.Request.Symbol;
48873
+
48874
+ var hqchartData={ symbol:symbol, report:[] };
48875
+
48876
+ var kData=data.HQChart.ChartPaint[0].Data;
48877
+ for(var i=0, j=1;i<kData.Data.length;++i)
48878
+ {
48879
+ var kItem=kData.Data[i];
48880
+ if (i%10!=4) continue;
48881
+
48882
+ var itemReport={ releasedate:kItem.Date, time:kItem.Time, title:`公告(${j}) xxxx`, }
48883
+
48884
+ hqchartData.report.push(itemReport);
48885
+
48886
+ ++j;
48887
+ }
48888
+
48889
+ callback(hqchartData);
48890
+ }
48891
+
48892
+
48893
+ HQData.PforecastInfo_RequestData=function(data,callback)
48894
+ {
48895
+ data.PreventDefault=true;
48896
+ var symbol=data.Request.Symbol;
48897
+
48898
+ var hqchartData={ symbol:symbol, report:[] };
48899
+
48900
+ var kData=data.HQChart.ChartPaint[0].Data;
48901
+ for(var i=0, j=1;i<kData.Data.length;++i)
48902
+ {
48903
+ var kItem=kData.Data[i];
48904
+ if (i%10!=4) continue;
48905
+
48906
+ var itemReport={ date:kItem.Date, time:kItem.Time, title:`公告(${j}) xxxx`, }
48907
+
48908
+ hqchartData.report.push(itemReport);
48909
+
48910
+ ++j;
48911
+ }
48912
+
48913
+ callback(hqchartData);
48914
+ }
48915
+
48916
+ HQData.InvestorInfo_RequestData=function(data,callback)
48917
+ {
48918
+ data.PreventDefault=true;
48919
+ var symbol=data.Request.Symbol;
48920
+
48921
+ callback(TEST_NEWSINTERACT_DATA);
48922
+ }
48923
+
48924
+ HQData.BlockTrading_RequestData=function(data,callback)
48925
+ {
48926
+ data.PreventDefault=true;
48927
+ var symbol=data.Request.Symbol;
48928
+
48929
+ callback(TEST_BLOCK_TRADING_DATA);
48930
+ }
48931
+
48932
+ HQData.TradeDetail_RequestData=function(data,callback)
48933
+ {
48934
+ data.PreventDefault=true;
48935
+ var symbol=data.Request.Symbol;
48936
+
48937
+ callback(TEST_TRADE_DETAL_DATA);
48938
+ }
@@ -33555,49 +33555,37 @@ function ChartMACD()
33555
33555
  return this.PtInBar(x, y, { BarWidth:barWidth })
33556
33556
  }
33557
33557
 
33558
- this.Draw=function()
33558
+ this.DrawBars=function(lineWidth, bUpBar)
33559
33559
  {
33560
- if (!this.IsShow || this.ChartFrame.IsMinSize || !this.IsVisible) return;
33561
- if (this.IsShowIndexTitleOnly()) return;
33562
- if (this.IsHideScriptIndex()) return;
33563
-
33564
- if (this.NotSupportMessage)
33565
- {
33566
- this.DrawNotSupportmessage();
33567
- return;
33568
- }
33569
-
33570
- if (this.ChartFrame.IsHScreen===true)
33571
- {
33572
- this.HScreenDraw();
33573
- return;
33574
- }
33575
-
33576
33560
  var isMinute=this.IsMinuteFrame();
33561
+ var border=this.ChartBorder.GetBorder();
33577
33562
  var dataWidth=this.ChartFrame.DataWidth;
33578
33563
  var distanceWidth=this.ChartFrame.DistanceWidth;
33579
- var border=this.ChartBorder.GetBorder();
33564
+ var xPointCount=this.ChartFrame.XPointCount;
33580
33565
  var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
33566
+
33581
33567
  var chartright=border.RightEx;
33582
- var xPointCount=this.ChartFrame.XPointCount;
33583
33568
  var lockRect=this.GetLockRect();
33584
33569
  if (lockRect) chartright=lockRect.Left;
33585
33570
 
33586
- var bFirstPoint=true;
33587
- var drawCount=0;
33571
+ if (bUpBar) this.Canvas.strokeStyle=this.UpColor;
33572
+ else this.Canvas.strokeStyle=this.DownColor;
33573
+
33588
33574
  var yBottom=this.ChartFrame.GetYFromData(0);
33589
-
33590
- var lineWidth=this.LineWidth*GetDevicePixelRatio();
33591
- if (this.LineWidth==50) lineWidth=dataWidth;
33592
- else if (lineWidth>dataWidth) lineWidth=dataWidth;
33593
-
33594
- var backupLineWidth=this.Canvas.lineWidth;
33595
- this.Canvas.lineWidth=lineWidth;
33575
+ this.Canvas.beginPath();
33576
+ var drawCount=0;
33596
33577
  for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth))
33597
- //for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j)
33598
33578
  {
33599
33579
  var value=this.Data.Data[i];
33600
33580
  if (value==null) continue;
33581
+ if (bUpBar)
33582
+ {
33583
+ if (value<0) continue;
33584
+ }
33585
+ else
33586
+ {
33587
+ if (value>=0) continue;
33588
+ }
33601
33589
 
33602
33590
  if (isMinute)
33603
33591
  {
@@ -33610,21 +33598,49 @@ function ChartMACD()
33610
33598
  if (right>chartright) break;
33611
33599
  var x=left+(right-left)/2;
33612
33600
  }
33613
- var y=this.ChartFrame.GetYFromData(value);
33614
33601
 
33615
33602
  if (x>chartright) break;
33616
33603
 
33604
+ var y=this.ChartFrame.GetYFromData(value);
33617
33605
  var xFix=ToFixedPoint2(lineWidth, x); //毛边修正
33618
- this.Canvas.beginPath();
33619
33606
  this.Canvas.moveTo(xFix,yBottom);
33620
33607
  this.Canvas.lineTo(xFix,y);
33608
+ ++drawCount;
33609
+ }
33621
33610
 
33622
- if (value>=0) this.Canvas.strokeStyle=this.UpColor;
33623
- else this.Canvas.strokeStyle=this.DownColor;
33624
- this.Canvas.stroke();
33625
- this.Canvas.closePath();
33611
+ if (drawCount>0) this.Canvas.stroke();
33612
+ }
33613
+
33614
+ this.Draw=function()
33615
+ {
33616
+ if (!this.IsShow || this.ChartFrame.IsMinSize || !this.IsVisible) return;
33617
+ if (this.IsShowIndexTitleOnly()) return;
33618
+ if (this.IsHideScriptIndex()) return;
33619
+
33620
+ if (this.NotSupportMessage)
33621
+ {
33622
+ this.DrawNotSupportmessage();
33623
+ return;
33624
+ }
33625
+
33626
+ if (this.ChartFrame.IsHScreen===true)
33627
+ {
33628
+ this.HScreenDraw();
33629
+ return;
33626
33630
  }
33627
33631
 
33632
+ var dataWidth=this.ChartFrame.DataWidth;
33633
+ var lineWidth=this.LineWidth*GetDevicePixelRatio();
33634
+ if (this.LineWidth==50) lineWidth=dataWidth;
33635
+ else if (lineWidth>dataWidth) lineWidth=dataWidth;
33636
+
33637
+ var backupLineWidth=this.Canvas.lineWidth;
33638
+ this.Canvas.lineWidth=lineWidth;
33639
+
33640
+ //上下分开画
33641
+ this.DrawBars(lineWidth, true);
33642
+ this.DrawBars(lineWidth, false);
33643
+
33628
33644
  this.Canvas.lineWidth=backupLineWidth;
33629
33645
  }
33630
33646
 
@@ -35950,38 +35966,95 @@ function ChartMultiText()
35950
35966
  this.Color=g_JSChartResource.DefaultTextColor;
35951
35967
  this.IsHScreen=false; //是否横屏
35952
35968
 
35953
- this.Draw=function()
35969
+ this.BuildKey=function(item)
35954
35970
  {
35955
- if (!this.IsShow || this.ChartFrame.IsMinSize) return;
35956
- if (!this.Data || this.Data.length<=0) return;
35957
- if (!this.Texts) return;
35971
+ if (IFrameSplitOperator.IsNumber(item.Time))
35972
+ {
35973
+ var key=`${kItem.Date}-${item.Time}`;
35974
+ }
35975
+ else
35976
+ {
35977
+ var key=`${item.Date}`;
35978
+ }
35979
+
35980
+ return key;
35981
+ }
35958
35982
 
35959
- this.IsHScreen=(this.ChartFrame.IsHScreen===true);
35983
+ this.GetShowTextData=function()
35984
+ {
35960
35985
  var xPointCount=this.ChartFrame.XPointCount;
35961
35986
  var offset=this.Data.DataOffset;
35962
- var left=this.ChartBorder.GetLeft();
35963
- var right=this.ChartBorder.GetRight();
35964
- var top=this.ChartBorder.GetTopEx();
35965
- var bottom=this.ChartBorder.GetBottomEx();
35966
-
35967
- if (this.IsHScreen)
35968
- {
35969
- left=this.ChartBorder.GetTop();
35970
- right=this.ChartBorder.GetBottom();
35971
- }
35972
35987
 
35973
- var y=0;
35988
+ var mapText=new Map(); //key='date-time' value={ Data:[] }
35974
35989
  for(var i=0; i<this.Texts.length; ++i)
35975
35990
  {
35976
35991
  var item=this.Texts[i];
35977
-
35978
35992
  if (!item.Text) continue;
35979
35993
  if (!IFrameSplitOperator.IsNumber(item.Index)) continue;
35980
35994
 
35981
35995
  var index=item.Index-offset;
35982
35996
  if (index>=0 && index<xPointCount)
35983
35997
  {
35984
- var x=this.ChartFrame.GetXFromIndex(index);
35998
+ var key=this.BuildKey(item);
35999
+ if (mapText.has(key))
36000
+ {
36001
+ var textItem=mapText.get(key);
36002
+ textItem.Data.push(item);
36003
+ }
36004
+ else
36005
+ {
36006
+ var textItem={ Data:[item] };
36007
+ mapText.set(key, textItem);
36008
+ }
36009
+ }
36010
+ }
36011
+
36012
+ return mapText;
36013
+ }
36014
+
36015
+ this.DrawAllText=function(mapText)
36016
+ {
36017
+ var bHScreen=(this.ChartFrame.IsHScreen===true);
36018
+ var isMinute=this.IsMinuteFrame();
36019
+ var dataWidth=this.ChartFrame.DataWidth;
36020
+ var distanceWidth=this.ChartFrame.DistanceWidth;
36021
+ var xPointCount=this.ChartFrame.XPointCount;
36022
+
36023
+ if (bHScreen)
36024
+ {
36025
+ var border=this.ChartBorder.GetHScreenBorder();
36026
+ var chartright=border.BottomEx;
36027
+ var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
36028
+ var left=this.ChartBorder.GetTop();
36029
+ var right=this.ChartBorder.GetBottom();
36030
+ }
36031
+ else
36032
+ {
36033
+ var border=this.ChartBorder.GetBorder();
36034
+ var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
36035
+ var chartright=border.RightEx;
36036
+ var left=this.ChartBorder.GetLeft();
36037
+ var right=this.ChartBorder.GetRight();
36038
+ }
36039
+
36040
+ for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth))
36041
+ {
36042
+ var kItem=this.Data.Data[i];
36043
+ if (!kItem) continue;
36044
+
36045
+ var key=this.BuildKey(kItem);
36046
+ if (!mapText.has(key)) continue;
36047
+
36048
+ var left=xOffset;
36049
+ var right=xOffset+dataWidth;
36050
+ if (right>chartright) break;
36051
+ var x=left+(right-left)/2;
36052
+
36053
+ var textItem=mapText.get(key);
36054
+ for(var k=0;k<textItem.Data.length;++k)
36055
+ {
36056
+ var item=textItem.Data[k];
36057
+
35985
36058
  if (item.Value=="TOP") y=top;
35986
36059
  else if (item.Value=="BOTTOM") y=bottom;
35987
36060
  else y=this.ChartFrame.GetYFromData(item.Value);
@@ -36063,6 +36136,20 @@ function ChartMultiText()
36063
36136
  }
36064
36137
  }
36065
36138
 
36139
+ this.Draw=function()
36140
+ {
36141
+ if (!this.IsShow || this.ChartFrame.IsMinSize) return;
36142
+ if (!this.Data || this.Data.length<=0) return;
36143
+ if (!this.Texts) return;
36144
+
36145
+ this.IsHScreen=(this.ChartFrame.IsHScreen===true);
36146
+
36147
+ var mapText=this.GetShowTextData();
36148
+ if (mapText.size<=0) return;
36149
+
36150
+ this.DrawAllText(mapText);
36151
+ }
36152
+
36066
36153
  this.GetMaxMin=function()
36067
36154
  {
36068
36155
  var range={ Min:null, Max:null };
@@ -88491,7 +88578,7 @@ function MinuteCoordinateData()
88491
88578
  {
88492
88579
  Full: //完整模式
88493
88580
  [
88494
- [0, 0, "rgb(200,200,200)", "09:30"], //[0]=索引 [1]=线段类型 [2]=文字颜色(弃用) [3]=刻度文字 [4]=线段颜色 [5]=背景色
88581
+ [0, 0, "rgb(200,200,200)", "09:30"], //[0]=索引 [1]=线段类型(预留) [2]=文字颜色(弃用) [3]=刻度文字 [4]=线段颜色 [5]=背景色
88495
88582
  [31, 0, "RGB(200,200,200)", "10:00"],
88496
88583
  [61, 0, "RGB(200,200,200)", "10:30"],
88497
88584
  [91, 0, "RGB(200,200,200)", "11:00"],