hqchart 1.1.12881 → 1.1.12886
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.
package/lib/umychart.vue.js
CHANGED
|
@@ -2335,9 +2335,9 @@ if(item.Message[0]!=null&&isDrawLeft){if(item.Font!=null)this.Canvas.font=item.F
|
|
|
2335
2335
|
this.DrawVertical=function(){var border=this.GetBorder();var top=border.TopTitle;var bottom=border.Bottom;var right=border.RightEx;var pixelRatio=GetDevicePixelRatio();//获取设备的分辨率
|
|
2336
2336
|
//JSConsole.Chart.Log('[AverageWidthFrame.DrawVertical] bottom',bottom);
|
|
2337
2337
|
if(this.ChartBorder.Bottom<=5*GetDevicePixelRatio())return;//高度不够 不显示
|
|
2338
|
-
var bottomTextExtend=null;if(this.XTextExtend){bottomTextExtend=this.XTextExtend[0];}var bottomLineExtend=null;if(this.XLineExtend){bottomLineExtend=this.XLineExtend[0];}var xPrev=null;//上一个坐标x的值
|
|
2338
|
+
var mapX=null;if(this.GetVerticalXCache)mapX=this.GetVerticalXCache();var bottomTextExtend=null;if(this.XTextExtend){bottomTextExtend=this.XTextExtend[0];}var bottomLineExtend=null;if(this.XLineExtend){bottomLineExtend=this.XLineExtend[0];}var xPrev=null;//上一个坐标x的值
|
|
2339
2339
|
var textRightPrev=null;//上一次刻度输出右边x坐标
|
|
2340
|
-
for(var i=0;i<this.VerticalInfo.length;++i){var
|
|
2340
|
+
for(var i=0;i<this.VerticalInfo.length;++i){var item=this.VerticalInfo[i];var x=null;if(mapX&&mapX.has(item.Value))x=mapX.get(item.Value);else x=this.GetXFromIndex(item.Value);if(x>right)break;if(xPrev!=null&&Math.abs(x-xPrev)<this.MinXDistance)continue;var item=this.VerticalInfo[i];var xFixed=ToFixedPoint(x);if(this.IsShowXLine){if(item.LineType==2)//虚线
|
|
2341
2341
|
{this.Canvas.strokeStyle=this.VerticalInfo[i].LineColor;if(item.LineDash)this.Canvas.setLineDash(item.LineDash);else this.Canvas.setLineDash([5*pixelRatio,5*pixelRatio]);this.Canvas.beginPath();this.Canvas.moveTo(xFixed,top);this.Canvas.lineTo(xFixed,bottom);this.Canvas.stroke();this.Canvas.setLineDash([]);}else if(item.LineType==3){}else if(item.LineType>0)//实线
|
|
2342
2342
|
{if(g_JSChartResource.FrameXLineDash){this.Canvas.strokeStyle=this.VerticalInfo[i].LineColor;this.Canvas.setLineDash(g_JSChartResource.FrameXLineDash);//虚线
|
|
2343
2343
|
this.Canvas.beginPath();this.Canvas.moveTo(xFixed,top);this.Canvas.lineTo(xFixed,bottom);this.Canvas.stroke();this.Canvas.setLineDash([]);}else{this.Canvas.strokeStyle=this.VerticalInfo[i].LineColor;this.Canvas.beginPath();this.Canvas.moveTo(xFixed,top);this.Canvas.lineTo(xFixed,bottom);this.Canvas.stroke();}}}if(item.BG&&item.BG.Color){var bgItem=item.BG;this.Canvas.fillStyle=bgItem.Color;var xStart=this.GetXFromIndex(bgItem.Index.Start);var xEnd=this.GetXFromIndex(bgItem.Index.End);var bgHeight=this.ChartBorder.Bottom;if(IFrameSplitOperator.IsNumber(bgItem.Height))bgHeight=bgItem.Height;var rtBG={Left:xStart,Width:xEnd-xStart,Top:border.Bottom,Height:bgHeight};this.Canvas.fillRect(rtBG.Left,rtBG.Top,rtBG.Width,rtBG.Height);}if(this.VerticalInfo[i].Message[0]!=null){if(this.VerticalInfo[i].Font)this.Canvas.font=this.VerticalInfo[i].Font;var textLeft=0;this.Canvas.strokeStyle=item.TextColor;var testWidth=this.Canvas.measureText(this.VerticalInfo[i].Message[0]).width;var textHeight=this.Canvas.measureText("擎").width;if(bottomTextExtend&&bottomTextExtend.Align==1){this.Canvas.textAlign="left";this.Canvas.textBaseline="top";textLeft=x;}else{if(x<testWidth/2){this.Canvas.textAlign="left";this.Canvas.textBaseline="top";textLeft=x;}else if(x+testWidth/2>=this.ChartBorder.GetChartWidth()){this.Canvas.textAlign="right";this.Canvas.textBaseline="top";textLeft=x-testWidth;}else{this.Canvas.textAlign="center";this.Canvas.textBaseline="top";textLeft=x-testWidth/2;}}if(textRightPrev==null||textLeft>textRightPrev){var yText=bottom;if(item.LineType==3){var lineLength=this.ShortXLineLength*pixelRatio;this.Canvas.beginPath();this.Canvas.moveTo(xFixed,yText);this.Canvas.lineTo(xFixed,yText+lineLength);this.Canvas.stroke();yText+=lineLength+2*pixelRatio;}if(bottomLineExtend){if(bottomLineExtend.Mode===1){if(item.Value>1){if(bottomLineExtend.Color)this.Canvas.strokeStyle=bottomLineExtend.Color;this.Canvas.beginPath();this.Canvas.moveTo(xFixed,bottom);this.Canvas.lineTo(xFixed,border.ChartHeight);this.Canvas.stroke();x+=1;}}else if(bottomLineExtend.Mode===2){if(bottomLineExtend.Width>=1){var lineLength=bottomLineExtend.Width;if(bottomLineExtend.Color)this.Canvas.strokeStyle=bottomLineExtend.Color;this.Canvas.beginPath();this.Canvas.moveTo(xFixed,yText);this.Canvas.lineTo(xFixed,yText+lineLength);this.Canvas.stroke();yText+=lineLength+2;}}}//item.TextBGColor="rgb(0,255,0)";
|
|
@@ -2572,7 +2572,8 @@ this.Canvas.strokeStyle=item.Data.Line.Color;this.Canvas.beginPath();if(item.IsH
|
|
|
2572
2572
|
}else{this.Canvas.strokeRect(left,top,right-left-1,height);//少一个像素让边框显示出来
|
|
2573
2573
|
}};//是否在X轴坐标上
|
|
2574
2574
|
//this.PtInVertical=function(x,y) { return false; }
|
|
2575
|
-
|
|
2575
|
+
//缓存X轴坐标刻度
|
|
2576
|
+
this.GetVerticalXCache=function(){if(!IFrameSplitOperator.IsNonEmptyArray(this.VerticalInfo))return null;var dataWidth=this.DataWidth;var distanceWidth=this.DistanceWidth;var xPointCount=this.XPointCount;var setIndex=new _set2.default();for(var i=0;i<this.VerticalInfo.length;++i){var item=this.VerticalInfo[i];setIndex.add(item.Value);}if(this.IsHScreen){var border=this.ChartBorder.GetHScreenBorder();var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;}else{var border=this.ChartBorder.GetBorder();var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;}var mapX=new _map2.default();for(var i=0;i<xPointCount;++i,xOffset+=dataWidth+distanceWidth){var left=xOffset;var right=xOffset+dataWidth;var x=left+(right-left)/2;if(setIndex.has(i)){mapX.set(i,x);}}return mapX;};}function OverlayKLineFrame(){this.newMethod=KLineFrame;//派生
|
|
2576
2577
|
this.newMethod();delete this.newMethod;this.ClassName='OverlayKLineFrame';this.MainFrame=null;//主框架
|
|
2577
2578
|
this.IsShareY=false;//使用和主框架公用Y轴
|
|
2578
2579
|
this.IsCalculateYMaxMin=true;//是否计算Y最大最小值
|
|
@@ -2628,9 +2629,9 @@ for(var i=this.HorizontalInfo.length-1;i>=0;--i)//从上往下画分割线
|
|
|
2628
2629
|
{var item=this.HorizontalInfo[i];var y=this.GetYFromData(item.Value);if(y!=null&&yPrev!=null&&Math.abs(y-yPrev)<this.MinYDistance)continue;//两个坐标在近了 就不画了
|
|
2629
2630
|
//坐标信息 左边 间距小于10 画在内部
|
|
2630
2631
|
if(item.Message[0]!=null&&isDrawLeft){if(item.Font!=null)this.Canvas.font=item.Font;this.Canvas.fillStyle=item.TextColor;this.Canvas.textAlign="left";if(y>=right-2)this.Canvas.textBaseline='top';else if(y<=left+2)this.Canvas.textBaseline='bottom';else this.Canvas.textBaseline="middle";var textObj={X:left,Y:y,Text:{BaseLine:this.Canvas.textBaseline,TextAlign:this.Canvas.textAlign,Font:this.Canvas.font,Value:item.Message[0]}};var xText=y,yText=top;this.Canvas.save();this.Canvas.translate(xText,yText);this.Canvas.rotate(90*Math.PI/180);this.Canvas.fillText(item.Message[0],-2,0);this.Canvas.restore();}if(item.Message[1]!=null&&isDrawRight){if(item.Font!=null)this.Canvas.font=item.Font;this.Canvas.fillStyle=item.TextColor;this.Canvas.textAlign="right";if(y>=right-2)this.Canvas.textBaseline='top';else if(y<=left+2)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:y,Text:{BaseLine:this.Canvas.textBaseline,TextAlign:this.Canvas.textAlign,Font:this.Canvas.font,Value:text}};var xText=y,yText=bottom;this.Canvas.save();this.Canvas.translate(xText,yText);this.Canvas.rotate(90*Math.PI/180);this.Canvas.fillText(text,-2,0);this.Canvas.restore();}yPrev=y;}}};this.GetXFromIndex=function(index,isLimit){if(isLimit===false){var border=this.ChartBorder.GetHScreenBorder();if(index>=0){var offset=border.TopEx+g_JSChartResource.FrameLeftMargin+this.DistanceWidth/2+this.DataWidth/2;for(var i=1;i<=index;++i){offset+=this.DistanceWidth+this.DataWidth;}}else{var offset=border.TopEx-(this.DistanceWidth/2+this.DataWidth+this.DistanceWidth);var absIndex=Math.abs(index);for(var i=1;i<absIndex;++i){offset-=this.DistanceWidth+this.DataWidth;}}}else{if(index<0)index=0;if(index>this.xPointCount-1)index=this.xPointCount-1;var border=this.ChartBorder.GetHScreenBorder();var offset=border.TopEx+g_JSChartResource.FrameLeftMargin+this.DistanceWidth/2+this.DataWidth/2;for(var i=1;i<=index;++i){offset+=this.DistanceWidth+this.DataWidth;}}return offset;};//画X轴
|
|
2631
|
-
this.DrawVertical=function(){var border=this.ChartBorder.GetHScreenBorder();var left=border.Left;var right=border.RightTitle;var bottom=border.Bottom;var pixelRatio=GetDevicePixelRatio();//获取设备的分辨率
|
|
2632
|
+
this.DrawVertical=function(){var mapX=null;if(this.GetVerticalXCache)mapX=this.GetVerticalXCache();var border=this.ChartBorder.GetHScreenBorder();var left=border.Left;var right=border.RightTitle;var bottom=border.Bottom;var pixelRatio=GetDevicePixelRatio();//获取设备的分辨率
|
|
2632
2633
|
var xPrev=null;//上一个坐标x的值
|
|
2633
|
-
for(var i
|
|
2634
|
+
for(var i=0;i<this.VerticalInfo.length;++i){var item=this.VerticalInfo[i];var x=null;if(mapX&&mapX.has(item.Value))x=mapX.get(item.Value);else x=this.GetXFromIndex(item.Value);if(x>=bottom)break;if(xPrev!=null&&Math.abs(x-xPrev)<80)continue;if(item.LineType==2){this.Canvas.strokeStyle=this.VerticalInfo[i].LineColor;this.Canvas.setLineDash([5*pixelRatio,5*pixelRatio]);//虚线
|
|
2634
2635
|
this.Canvas.beginPath();this.Canvas.moveTo(left,ToFixedPoint(x));this.Canvas.lineTo(right,ToFixedPoint(x));this.Canvas.stroke();this.Canvas.setLineDash([]);}else if(item.LineType>0){this.Canvas.strokeStyle=this.VerticalInfo[i].LineColor;if(g_JSChartResource.FrameXLineDash){this.Canvas.setLineDash(g_JSChartResource.FrameXLineDash);//虚线
|
|
2635
2636
|
this.Canvas.beginPath();this.Canvas.moveTo(left,ToFixedPoint(x));this.Canvas.lineTo(right,ToFixedPoint(x));this.Canvas.stroke();this.Canvas.setLineDash([]);}else//实线
|
|
2636
2637
|
{this.Canvas.beginPath();this.Canvas.moveTo(left,ToFixedPoint(x));this.Canvas.lineTo(right,ToFixedPoint(x));this.Canvas.stroke();}}if(this.VerticalInfo[i].Message[0]!=null){if(this.VerticalInfo[i].Font!=null)this.Canvas.font=this.VerticalInfo[i].Font;this.Canvas.fillStyle=this.VerticalInfo[i].TextColor;var testWidth=this.Canvas.measureText(this.VerticalInfo[i].Message[0]).width;if(x<testWidth/2){this.Canvas.textAlign="left";this.Canvas.textBaseline="top";}else{this.Canvas.textAlign="center";this.Canvas.textBaseline="top";}var xText=left,yText=x;this.Canvas.save();this.Canvas.translate(xText,yText);this.Canvas.rotate(90*Math.PI/180);this.Canvas.fillText(this.VerticalInfo[i].Message[0],0,this.XBottomOffset);this.Canvas.restore();}xPrev=x;}};//Y坐标转y轴数值
|
|
@@ -4164,9 +4165,9 @@ tooltip.Data=item;tooltip.ChartPaint=this;tooltip.Type=3;//异动信息
|
|
|
4164
4165
|
return true;}}return false;};}//MACD森林线 支持横屏
|
|
4165
4166
|
function ChartMACD(){this.newMethod=IChartPainting;//派生
|
|
4166
4167
|
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.DrawBars=function(lineWidth,bUpBar){var isMinute=this.IsMinuteFrame();var
|
|
4168
|
-
this.Canvas.moveTo(xFix,yBottom);this.Canvas.lineTo(xFix,y)
|
|
4169
|
-
this.DrawBars(lineWidth,true);this.DrawBars(lineWidth,false);this.Canvas.lineWidth=backupLineWidth;};this.
|
|
4168
|
+
return this.PtInBar(x,y,{BarWidth:barWidth});};this.DrawBars=function(lineWidth,bUpBar){var isMinute=this.IsMinuteFrame();var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var xPointCount=this.ChartFrame.XPointCount;var isHSCreen=this.ChartFrame.IsHScreen===true;if(isHSCreen){var border=this.ChartBorder.GetHScreenBorder();var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.BottomEx;var lockRect=this.GetLockRect();if(lockRect)chartright=lockRect.Top;}else{var border=this.ChartBorder.GetBorder();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);//毛边修正
|
|
4169
|
+
if(isHSCreen){this.Canvas.moveTo(yBottom,ToFixedPoint(x));this.Canvas.lineTo(y,ToFixedPoint(x));}else{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;}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;//上下分开画
|
|
4170
|
+
this.DrawBars(lineWidth,true);this.DrawBars(lineWidth,false);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
4171
|
function ChartBar(){this.newMethod=IChartPainting;//派生
|
|
4171
4172
|
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
4173
|
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;//高度调整为整数
|
|
@@ -7598,13 +7599,13 @@ if(this.ZoomDownload.Tick.Status!=0)return;this.RequestZoomTickData(requestData)
|
|
|
7598
7599
|
this.RequestDragTickData=function(){JSConsole.Chart.Log('[KLineChartContainer.RequestDragTickData] not finished.');};//请求拖动或缩放的分钟历史数据
|
|
7599
7600
|
this.RequestPreviousMinuteData=function(option){var funcName=option.FuncName;var funcExplain=option.FuncExplain;var download=option.Download;var url=option.Url;var count=option.Count;//请求数据个数
|
|
7600
7601
|
var self=this;this.AutoUpdateEvent(false,funcName);//停止自动更新
|
|
7601
|
-
this.CancelAutoUpdate();download.Status=1;var firstItem=this.SourceData.Data[0];//最新的一条数据
|
|
7602
|
-
var postData={"field":["name","symbol","yclose","open","price","high","low","vol"],"symbol":self.Symbol,"enddate":firstItem.Date,"endtime":firstItem.Time,"count":count,"first":{date:firstItem.Date,time:firstItem.Time}};if(IFrameSplitOperator.IsNonEmptyArray(this.OverlayChartPaint)){postData.overlay=[];for(var i=0;i<this.OverlayChartPaint.length;++i){var item=this.OverlayChartPaint[i];postData.overlay.push({symbol:item.Symbol});}}if(this.NetworkFilter){var obj={Name:funcName,//类名::函数
|
|
7602
|
+
this.CancelAutoUpdate();download.Status=1;var firstItem=null;if(IFrameSplitOperator.IsNonEmptyArray(this.SourceData.Data))firstItem=this.SourceData.Data[0];//最新的一条数据
|
|
7603
|
+
else firstItem={Date:null,Time:null};var postData={"field":["name","symbol","yclose","open","price","high","low","vol"],"symbol":self.Symbol,"enddate":firstItem.Date,"endtime":firstItem.Time,"count":count,"first":{date:firstItem.Date,time:firstItem.Time}};if(IFrameSplitOperator.IsNonEmptyArray(this.OverlayChartPaint)){postData.overlay=[];for(var i=0;i<this.OverlayChartPaint.length;++i){var item=this.OverlayChartPaint[i];postData.overlay.push({symbol:item.Symbol});}}if(this.NetworkFilter){var obj={Name:funcName,//类名::函数
|
|
7603
7604
|
Explain:funcExplain,Request:{Url:url,Type:'POST',Data:postData,Period:this.Period,Right:this.Right},DragDownload:download,Option:option,Self:this,PreventDefault:false,ZoomData:option.ZoomData};this.NetworkFilter(obj,function(data){self.RecvPreviousMinuteData(data,option);download.Status=0;self.AutoUpdateEvent(true,funcName);//自动更新
|
|
7604
7605
|
self.AutoUpdate();});if(obj.PreventDefault==true)return;//已被上层替换,不调用默认的网络请求
|
|
7605
7606
|
}JSNetwork.HttpRequest({url:url,data:postData,type:"post",dataType:"json",async:true,success:function success(data){self.RecvPreviousMinuteData(data,option);download.Status=0;self.AutoUpdateEvent(true,funcName);//自动更新
|
|
7606
7607
|
self.AutoUpdate();}});};this.RecvPreviousMinuteData=function(data,option){var download=option.Download;var aryDayData=KLineChartContainer.JsonDataToMinuteHistoryData(data);if(!aryDayData||aryDayData.length<=0){download.IsEnd=true;JSConsole.Chart.Log('[KLineChartContainer.RecvPreviousMinuteData] '+this.Symbol+' data end. FuncName='+option.FuncName);this.Draw();return;}var lastDataCount=this.GetHistoryDataCount();//保存下上一次的数据个数
|
|
7607
|
-
var firstData=this.SourceData.Data[0];
|
|
7608
|
+
var endIndex=null;if(IFrameSplitOperator.IsNonEmptyArray(this.SourceData.Data)){var firstData=this.SourceData.Data[0];for(var i=aryDayData.length-1;i>=0;--i){var item=aryDayData[i];if(firstData.Date>item.Date||firstData.Date==item.Date&&firstData.Time>item.Time){endIndex=i;break;}else if(firstData.Date==item.Date&&firstData.Time==item.Time){firstData.YClose=item.YClose;endIndex=i-1;break;}}}else{endIndex=aryDayData.length-1;}if(endIndex==null&&endIndex<0)return;for(var i=0;i<aryDayData.length&&i<=endIndex;++i)//数据往前插
|
|
7608
7609
|
{var item=aryDayData[i];this.SourceData.Data.splice(i,0,item);}var bindData=new ChartData();bindData.Data=this.SourceData.Data;bindData.Period=this.Period;bindData.Right=this.Right;bindData.DataType=this.SourceData.DataType;bindData.Symbol=this.Symbol;if(!this.IsApiPeriod){if(bindData.Right>0&&this.RightFormula>=1)//复权
|
|
7609
7610
|
{var rightData=bindData.GetRightData(bindData.Right,{AlgorithmType:this.RightFormula});bindData.Data=rightData;}if(ChartData.IsDayPeriod(bindData.Period,false)||ChartData.IsMinutePeriod(bindData.Period,false))//周期数据 (0= 日线,4=1分钟线 不需要处理)
|
|
7610
7611
|
{var periodData=bindData.GetPeriodData(bindData.Period);bindData.Data=periodData;}}var kLineCalculate=this.GetKLineCalulate();if(kLineCalculate)//额外的K线图形计算
|
|
@@ -7629,14 +7630,13 @@ bindData.Data=aryOverlayData;if(ChartData.IsMinutePeriod(bindData.Period,false)&
|
|
|
7629
7630
|
{var periodData=bindData.GetPeriodData(bindData.Period);bindData.Data=periodData;}item.Data=bindData;}};//请求拖动或缩放的日线历史数据
|
|
7630
7631
|
this.RequestPreviousDayData=function(option){var funcName=option.FuncName;var funcExplain=option.FuncExplain;var download=option.Download;var url=option.Url;var count=option.Count;//请求数据个数
|
|
7631
7632
|
var self=this;this.AutoUpdateEvent(false,funcName);//停止自动更新
|
|
7632
|
-
this.CancelAutoUpdate();download.Status=1;var firstItem=this.SourceData.Data[0]
|
|
7633
|
-
var postData={"field":["name","symbol","yclose","open","price","high","low","vol"],"symbol":self.Symbol,"enddate":firstItem.Date,"count":count,"first":{date:firstItem.Date}};if(IFrameSplitOperator.IsNonEmptyArray(this.OverlayChartPaint)){postData.overlay=[];for(var i=0;i<this.OverlayChartPaint.length;++i){var item=this.OverlayChartPaint[i];postData.overlay.push({symbol:item.Symbol});}}if(this.NetworkFilter){var obj={Name:funcName,//类名::函数
|
|
7633
|
+
this.CancelAutoUpdate();download.Status=1;var firstItem=null;if(IFrameSplitOperator.IsNonEmptyArray(this.SourceData.Data))firstItem=this.SourceData.Data[0];else firstItem={Date:null};var postData={"field":["name","symbol","yclose","open","price","high","low","vol"],"symbol":self.Symbol,"enddate":firstItem.Date,"count":count,"first":{date:firstItem.Date}};if(IFrameSplitOperator.IsNonEmptyArray(this.OverlayChartPaint)){postData.overlay=[];for(var i=0;i<this.OverlayChartPaint.length;++i){var item=this.OverlayChartPaint[i];postData.overlay.push({symbol:item.Symbol});}}if(this.NetworkFilter){var obj={Name:funcName,//类名::函数
|
|
7634
7634
|
Explain:funcExplain,Request:{Url:url,Type:'POST',Data:postData,Period:this.Period,Right:this.Right},DragDownload:download,Option:option,Self:this,PreventDefault:false,ZoomData:option.ZoomData};this.NetworkFilter(obj,function(data){self.RecvPreviousDayData(data,option);download.Status=0;self.AutoUpdateEvent(true,funcName);//自动更新
|
|
7635
7635
|
self.AutoUpdate();});if(obj.PreventDefault==true)return;//已被上层替换,不调用默认的网络请求
|
|
7636
7636
|
}JSNetwork.HttpRequest({url:url,data:postData,type:"post",dataType:"json",async:true,success:function success(data){self.RecvPreviousDayData(data,option);download.Status=0;self.AutoUpdateEvent(true,funcName);//自动更新
|
|
7637
7637
|
self.AutoUpdate();}});};this.RecvPreviousDayData=function(data,option){var download=option.Download;var aryDayData=KLineChartContainer.JsonDataToHistoryData(data);if(!aryDayData||aryDayData.length<=0){download.IsEnd=true;//下完了
|
|
7638
7638
|
JSConsole.Chart.Log('[KLineChartContainer.RecvPreviousDayData] '+this.Symbol+' data end. FuncName='+option.FuncName);return;}var lastDataCount=this.GetHistoryDataCount();//保存下上一次的数据个数
|
|
7639
|
-
var firstData=this.SourceData.Data[0];
|
|
7639
|
+
var endIndex=null;if(IFrameSplitOperator.IsNonEmptyArray(this.SourceData.Data)){var firstData=this.SourceData.Data[0];for(var i=aryDayData.length-1;i>=0;--i){var item=aryDayData[i];if(firstData.Date>item.Date){endIndex=i;break;}else if(firstData.Date==item.Date){firstData.YClose=item.YClose;endIndex=i-1;break;}}}else{var firstData={Date:null};endIndex=aryDayData.length-1;}if(endIndex==null&&endIndex<0)return;for(var i=0;i<aryDayData.length&&i<=endIndex;++i)//数据往前插
|
|
7640
7640
|
{var item=aryDayData[i];this.SourceData.Data.splice(i,0,item);}var bindData=new ChartData();bindData.Data=this.SourceData.Data;bindData.Period=this.Period;bindData.Right=this.Right;bindData.DataType=this.SourceData.DataType;bindData.Symbol=this.Symbol;if(!this.IsApiPeriod){if(bindData.Right>0)//复权
|
|
7641
7641
|
{var rightData=bindData.GetRightData(bindData.Right,{AlgorithmType:this.RightFormula});bindData.Data=rightData;}if(ChartData.IsDayPeriod(bindData.Period,false)||ChartData.IsMinutePeriod(bindData.Period,false))//周期数据 (0= 日线,4=1分钟线 不需要处理)
|
|
7642
7642
|
{var periodData=bindData.GetPeriodData(bindData.Period);bindData.Data=periodData;}}var kLineCalculate=this.GetKLineCalulate();if(kLineCalculate)//额外的K线图形计算
|
|
@@ -13035,7 +13035,7 @@ hisData.Symbol=message.symbol;}var stockObj={HQDataType:HQ_DATA_TYPE.KLINE_ID,St
|
|
|
13035
13035
|
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);};}/********************************************************************************
|
|
13036
13036
|
* 版本信息输出
|
|
13037
13037
|
*
|
|
13038
|
-
*/var HQCHART_VERSION="1.1.
|
|
13038
|
+
*/var HQCHART_VERSION="1.1.12885";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();//把给外界调用的方法暴露出来
|
|
13039
13039
|
exports.default=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
|
|
13040
13040
|
// BaseIndex:BaseIndex,
|
|
13041
13041
|
// ChartLine:ChartLine,
|
package/package.json
CHANGED
package/src/jscommon/umychart.js
CHANGED
|
@@ -10643,6 +10643,9 @@ function AverageWidthFrame()
|
|
|
10643
10643
|
//JSConsole.Chart.Log('[AverageWidthFrame.DrawVertical] bottom',bottom);
|
|
10644
10644
|
if (this.ChartBorder.Bottom<=5*GetDevicePixelRatio()) return; //高度不够 不显示
|
|
10645
10645
|
|
|
10646
|
+
var mapX=null;
|
|
10647
|
+
if (this.GetVerticalXCache) mapX=this.GetVerticalXCache();
|
|
10648
|
+
|
|
10646
10649
|
var bottomTextExtend=null;
|
|
10647
10650
|
if (this.XTextExtend)
|
|
10648
10651
|
{
|
|
@@ -10659,7 +10662,10 @@ function AverageWidthFrame()
|
|
|
10659
10662
|
var textRightPrev=null; //上一次刻度输出右边x坐标
|
|
10660
10663
|
for(var i=0; i<this.VerticalInfo.length; ++i)
|
|
10661
10664
|
{
|
|
10662
|
-
var
|
|
10665
|
+
var item=this.VerticalInfo[i];
|
|
10666
|
+
var x=null;
|
|
10667
|
+
if (mapX && mapX.has(item.Value)) x=mapX.get(item.Value);
|
|
10668
|
+
else x=this.GetXFromIndex(item.Value);
|
|
10663
10669
|
if (x>right) break;
|
|
10664
10670
|
if (xPrev!=null && Math.abs(x-xPrev)<this.MinXDistance) continue;
|
|
10665
10671
|
|
|
@@ -14995,6 +15001,49 @@ function KLineFrame()
|
|
|
14995
15001
|
|
|
14996
15002
|
//是否在X轴坐标上
|
|
14997
15003
|
//this.PtInVertical=function(x,y) { return false; }
|
|
15004
|
+
|
|
15005
|
+
//缓存X轴坐标刻度
|
|
15006
|
+
this.GetVerticalXCache=function()
|
|
15007
|
+
{
|
|
15008
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(this.VerticalInfo)) return null;
|
|
15009
|
+
|
|
15010
|
+
var dataWidth=this.DataWidth;
|
|
15011
|
+
var distanceWidth=this.DistanceWidth;
|
|
15012
|
+
var xPointCount=this.XPointCount;
|
|
15013
|
+
|
|
15014
|
+
var setIndex=new Set();
|
|
15015
|
+
for(var i=0; i<this.VerticalInfo.length; ++i)
|
|
15016
|
+
{
|
|
15017
|
+
var item=this.VerticalInfo[i];
|
|
15018
|
+
setIndex.add(item.Value);
|
|
15019
|
+
}
|
|
15020
|
+
|
|
15021
|
+
if (this.IsHScreen)
|
|
15022
|
+
{
|
|
15023
|
+
var border=this.ChartBorder.GetHScreenBorder();
|
|
15024
|
+
var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
15025
|
+
}
|
|
15026
|
+
else
|
|
15027
|
+
{
|
|
15028
|
+
var border=this.ChartBorder.GetBorder();
|
|
15029
|
+
var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
15030
|
+
}
|
|
15031
|
+
|
|
15032
|
+
var mapX=new Map();
|
|
15033
|
+
for(var i=0;i<xPointCount;++i, xOffset+=(dataWidth+distanceWidth))
|
|
15034
|
+
{
|
|
15035
|
+
var left=xOffset;
|
|
15036
|
+
var right=xOffset+dataWidth;
|
|
15037
|
+
var x=left+(right-left)/2;
|
|
15038
|
+
|
|
15039
|
+
if (setIndex.has(i))
|
|
15040
|
+
{
|
|
15041
|
+
mapX.set(i, x);
|
|
15042
|
+
}
|
|
15043
|
+
}
|
|
15044
|
+
|
|
15045
|
+
return mapX;
|
|
15046
|
+
}
|
|
14998
15047
|
}
|
|
14999
15048
|
|
|
15000
15049
|
function OverlayKLineFrame()
|
|
@@ -16034,19 +16083,25 @@ function KLineHScreenFrame()
|
|
|
16034
16083
|
//画X轴
|
|
16035
16084
|
this.DrawVertical=function()
|
|
16036
16085
|
{
|
|
16086
|
+
var mapX=null;
|
|
16087
|
+
if (this.GetVerticalXCache) mapX=this.GetVerticalXCache();
|
|
16088
|
+
|
|
16037
16089
|
var border=this.ChartBorder.GetHScreenBorder();
|
|
16038
16090
|
var left=border.Left;
|
|
16039
16091
|
var right=border.RightTitle;
|
|
16040
16092
|
var bottom=border.Bottom;
|
|
16041
16093
|
var pixelRatio = GetDevicePixelRatio(); //获取设备的分辨率
|
|
16042
16094
|
var xPrev=null; //上一个坐标x的值
|
|
16043
|
-
for(var i
|
|
16095
|
+
for(var i=0; i<this.VerticalInfo.length; ++i)
|
|
16044
16096
|
{
|
|
16045
|
-
var
|
|
16097
|
+
var item=this.VerticalInfo[i];
|
|
16098
|
+
var x=null;
|
|
16099
|
+
if (mapX && mapX.has(item.Value)) x=mapX.get(item.Value);
|
|
16100
|
+
else x=this.GetXFromIndex(item.Value);
|
|
16101
|
+
|
|
16046
16102
|
if (x>=bottom) break;
|
|
16047
16103
|
if (xPrev!=null && Math.abs(x-xPrev)<80) continue;
|
|
16048
16104
|
|
|
16049
|
-
var item=this.VerticalInfo[i];
|
|
16050
16105
|
if (item.LineType==2)
|
|
16051
16106
|
{
|
|
16052
16107
|
this.Canvas.strokeStyle=this.VerticalInfo[i].LineColor;
|
|
@@ -33559,15 +33614,30 @@ function ChartMACD()
|
|
|
33559
33614
|
this.DrawBars=function(lineWidth, bUpBar)
|
|
33560
33615
|
{
|
|
33561
33616
|
var isMinute=this.IsMinuteFrame();
|
|
33562
|
-
|
|
33617
|
+
|
|
33563
33618
|
var dataWidth=this.ChartFrame.DataWidth;
|
|
33564
33619
|
var distanceWidth=this.ChartFrame.DistanceWidth;
|
|
33565
33620
|
var xPointCount=this.ChartFrame.XPointCount;
|
|
33566
|
-
var
|
|
33621
|
+
var isHSCreen=this.ChartFrame.IsHScreen===true;
|
|
33622
|
+
|
|
33623
|
+
if (isHSCreen)
|
|
33624
|
+
{
|
|
33625
|
+
var border=this.ChartBorder.GetHScreenBorder();
|
|
33626
|
+
var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
33627
|
+
var chartright=border.BottomEx;
|
|
33628
|
+
var lockRect=this.GetLockRect();
|
|
33629
|
+
if (lockRect) chartright=lockRect.Top;
|
|
33630
|
+
}
|
|
33631
|
+
else
|
|
33632
|
+
{
|
|
33633
|
+
var border=this.ChartBorder.GetBorder();
|
|
33634
|
+
var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
33635
|
+
|
|
33636
|
+
var chartright=border.RightEx;
|
|
33637
|
+
var lockRect=this.GetLockRect();
|
|
33638
|
+
if (lockRect) chartright=lockRect.Left;
|
|
33639
|
+
}
|
|
33567
33640
|
|
|
33568
|
-
var chartright=border.RightEx;
|
|
33569
|
-
var lockRect=this.GetLockRect();
|
|
33570
|
-
if (lockRect) chartright=lockRect.Left;
|
|
33571
33641
|
|
|
33572
33642
|
if (bUpBar) this.Canvas.strokeStyle=this.UpColor;
|
|
33573
33643
|
else this.Canvas.strokeStyle=this.DownColor;
|
|
@@ -33604,8 +33674,18 @@ function ChartMACD()
|
|
|
33604
33674
|
|
|
33605
33675
|
var y=this.ChartFrame.GetYFromData(value);
|
|
33606
33676
|
var xFix=ToFixedPoint2(lineWidth, x); //毛边修正
|
|
33607
|
-
|
|
33608
|
-
|
|
33677
|
+
|
|
33678
|
+
if (isHSCreen)
|
|
33679
|
+
{
|
|
33680
|
+
this.Canvas.moveTo(yBottom,ToFixedPoint(x));
|
|
33681
|
+
this.Canvas.lineTo(y,ToFixedPoint(x));
|
|
33682
|
+
}
|
|
33683
|
+
else
|
|
33684
|
+
{
|
|
33685
|
+
this.Canvas.moveTo(xFix,yBottom);
|
|
33686
|
+
this.Canvas.lineTo(xFix,y);
|
|
33687
|
+
}
|
|
33688
|
+
|
|
33609
33689
|
++drawCount;
|
|
33610
33690
|
}
|
|
33611
33691
|
|
|
@@ -33624,12 +33704,6 @@ function ChartMACD()
|
|
|
33624
33704
|
return;
|
|
33625
33705
|
}
|
|
33626
33706
|
|
|
33627
|
-
if (this.ChartFrame.IsHScreen===true)
|
|
33628
|
-
{
|
|
33629
|
-
this.HScreenDraw();
|
|
33630
|
-
return;
|
|
33631
|
-
}
|
|
33632
|
-
|
|
33633
33707
|
var dataWidth=this.ChartFrame.DataWidth;
|
|
33634
33708
|
var lineWidth=this.LineWidth*GetDevicePixelRatio();
|
|
33635
33709
|
if (this.LineWidth==50) lineWidth=dataWidth;
|
|
@@ -33645,48 +33719,6 @@ function ChartMACD()
|
|
|
33645
33719
|
this.Canvas.lineWidth=backupLineWidth;
|
|
33646
33720
|
}
|
|
33647
33721
|
|
|
33648
|
-
this.HScreenDraw=function()
|
|
33649
|
-
{
|
|
33650
|
-
var dataWidth=this.ChartFrame.DataWidth;
|
|
33651
|
-
var distanceWidth=this.ChartFrame.DistanceWidth;
|
|
33652
|
-
var border=this.ChartBorder.GetHScreenBorder();
|
|
33653
|
-
var chartright=border.BottomEx;
|
|
33654
|
-
var xPointCount=this.ChartFrame.XPointCount;
|
|
33655
|
-
var lockRect=this.GetLockRect();
|
|
33656
|
-
if (lockRect) chartright=lockRect.Top;
|
|
33657
|
-
|
|
33658
|
-
var yBottom=this.ChartFrame.GetYFromData(0);
|
|
33659
|
-
|
|
33660
|
-
var lineWidth=this.LineWidth*GetDevicePixelRatio();
|
|
33661
|
-
if (this.LineWidth==50) lineWidth=dataWidth;
|
|
33662
|
-
else if (lineWidth>dataWidth) lineWidth=dataWidth;
|
|
33663
|
-
|
|
33664
|
-
var backupLineWidth=this.Canvas.lineWidth;
|
|
33665
|
-
this.Canvas.lineWidth=lineWidth;
|
|
33666
|
-
|
|
33667
|
-
for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j)
|
|
33668
|
-
{
|
|
33669
|
-
var value=this.Data.Data[i];
|
|
33670
|
-
if (value==null) continue;
|
|
33671
|
-
|
|
33672
|
-
var x=this.ChartFrame.GetXFromIndex(j);
|
|
33673
|
-
var y=this.ChartFrame.GetYFromData(value);
|
|
33674
|
-
|
|
33675
|
-
if (x>chartright) break;
|
|
33676
|
-
|
|
33677
|
-
this.Canvas.beginPath();
|
|
33678
|
-
this.Canvas.moveTo(yBottom,ToFixedPoint(x));
|
|
33679
|
-
this.Canvas.lineTo(y,ToFixedPoint(x));
|
|
33680
|
-
|
|
33681
|
-
if (value>=0) this.Canvas.strokeStyle=this.UpColor;
|
|
33682
|
-
else this.Canvas.strokeStyle=this.DownColor;
|
|
33683
|
-
this.Canvas.stroke();
|
|
33684
|
-
this.Canvas.closePath();
|
|
33685
|
-
}
|
|
33686
|
-
|
|
33687
|
-
this.Canvas.lineWidth=backupLineWidth;
|
|
33688
|
-
}
|
|
33689
|
-
|
|
33690
33722
|
this.GetItemData=function(indexData)
|
|
33691
33723
|
{
|
|
33692
33724
|
if (!indexData) return null;
|
|
@@ -71775,7 +71807,12 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
71775
71807
|
this.AutoUpdateEvent(false,funcName); //停止自动更新
|
|
71776
71808
|
this.CancelAutoUpdate();
|
|
71777
71809
|
download.Status=1;
|
|
71778
|
-
var firstItem=
|
|
71810
|
+
var firstItem=null;
|
|
71811
|
+
if (IFrameSplitOperator.IsNonEmptyArray(this.SourceData.Data))
|
|
71812
|
+
firstItem=this.SourceData.Data[0]; //最新的一条数据
|
|
71813
|
+
else
|
|
71814
|
+
firstItem={Date:null, Time:null};
|
|
71815
|
+
|
|
71779
71816
|
var postData=
|
|
71780
71817
|
{
|
|
71781
71818
|
"field": ["name","symbol", "yclose","open","price","high","low","vol"],
|
|
@@ -71849,25 +71886,31 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
71849
71886
|
}
|
|
71850
71887
|
|
|
71851
71888
|
var lastDataCount=this.GetHistoryDataCount(); //保存下上一次的数据个数
|
|
71852
|
-
|
|
71853
|
-
var firstData=this.SourceData.Data[0];
|
|
71854
71889
|
var endIndex=null;
|
|
71855
|
-
|
|
71890
|
+
if (IFrameSplitOperator.IsNonEmptyArray(this.SourceData.Data))
|
|
71856
71891
|
{
|
|
71857
|
-
var
|
|
71858
|
-
|
|
71859
|
-
{
|
|
71860
|
-
endIndex=i;
|
|
71861
|
-
break;
|
|
71862
|
-
}
|
|
71863
|
-
else if (firstData.Date==item.Date && firstData.Time==item.Time)
|
|
71892
|
+
var firstData=this.SourceData.Data[0];
|
|
71893
|
+
for(var i=aryDayData.length-1;i>=0;--i)
|
|
71864
71894
|
{
|
|
71865
|
-
|
|
71866
|
-
|
|
71867
|
-
|
|
71895
|
+
var item=aryDayData[i];
|
|
71896
|
+
if (firstData.Date>item.Date || (firstData.Date==item.Date && firstData.Time>item.Time))
|
|
71897
|
+
{
|
|
71898
|
+
endIndex=i;
|
|
71899
|
+
break;
|
|
71900
|
+
}
|
|
71901
|
+
else if (firstData.Date==item.Date && firstData.Time==item.Time)
|
|
71902
|
+
{
|
|
71903
|
+
firstData.YClose=item.YClose;
|
|
71904
|
+
endIndex=i-1;
|
|
71905
|
+
break;
|
|
71906
|
+
}
|
|
71868
71907
|
}
|
|
71869
71908
|
}
|
|
71870
|
-
|
|
71909
|
+
else
|
|
71910
|
+
{
|
|
71911
|
+
endIndex=aryDayData.length-1;
|
|
71912
|
+
}
|
|
71913
|
+
|
|
71871
71914
|
if (endIndex==null && endIndex<0) return;
|
|
71872
71915
|
|
|
71873
71916
|
for(var i=0;i<aryDayData.length && i<=endIndex;++i) //数据往前插
|
|
@@ -72074,7 +72117,12 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
72074
72117
|
this.AutoUpdateEvent(false,funcName); //停止自动更新
|
|
72075
72118
|
this.CancelAutoUpdate();
|
|
72076
72119
|
download.Status=1;
|
|
72077
|
-
var firstItem=
|
|
72120
|
+
var firstItem=null;
|
|
72121
|
+
if (IFrameSplitOperator.IsNonEmptyArray(this.SourceData.Data))
|
|
72122
|
+
firstItem=this.SourceData.Data[0];
|
|
72123
|
+
else
|
|
72124
|
+
firstItem={Date:null};
|
|
72125
|
+
|
|
72078
72126
|
var postData=
|
|
72079
72127
|
{
|
|
72080
72128
|
"field": ["name","symbol", "yclose","open","price","high","low","vol"],
|
|
@@ -72145,24 +72193,34 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
72145
72193
|
return;
|
|
72146
72194
|
}
|
|
72147
72195
|
var lastDataCount=this.GetHistoryDataCount(); //保存下上一次的数据个数
|
|
72148
|
-
|
|
72149
|
-
var firstData=this.SourceData.Data[0];
|
|
72150
72196
|
var endIndex=null;
|
|
72151
|
-
|
|
72152
|
-
{
|
|
72153
|
-
var
|
|
72154
|
-
|
|
72155
|
-
|
|
72156
|
-
endIndex=i;
|
|
72157
|
-
break;
|
|
72158
|
-
}
|
|
72159
|
-
else if (firstData.Date==item.Date)
|
|
72197
|
+
if (IFrameSplitOperator.IsNonEmptyArray(this.SourceData.Data))
|
|
72198
|
+
{
|
|
72199
|
+
var firstData=this.SourceData.Data[0];
|
|
72200
|
+
|
|
72201
|
+
for(var i=aryDayData.length-1;i>=0;--i)
|
|
72160
72202
|
{
|
|
72161
|
-
|
|
72162
|
-
|
|
72163
|
-
|
|
72203
|
+
var item=aryDayData[i];
|
|
72204
|
+
if (firstData.Date>item.Date)
|
|
72205
|
+
{
|
|
72206
|
+
endIndex=i;
|
|
72207
|
+
break;
|
|
72208
|
+
}
|
|
72209
|
+
else if (firstData.Date==item.Date)
|
|
72210
|
+
{
|
|
72211
|
+
firstData.YClose=item.YClose;
|
|
72212
|
+
endIndex=i-1;
|
|
72213
|
+
break;
|
|
72214
|
+
}
|
|
72164
72215
|
}
|
|
72165
72216
|
}
|
|
72217
|
+
else
|
|
72218
|
+
{
|
|
72219
|
+
var firstData={ Date:null };
|
|
72220
|
+
endIndex=aryDayData.length-1;
|
|
72221
|
+
}
|
|
72222
|
+
|
|
72223
|
+
|
|
72166
72224
|
if (endIndex==null && endIndex<0) return;
|
|
72167
72225
|
|
|
72168
72226
|
for(var i=0; i<aryDayData.length && i<=endIndex;++i) //数据往前插
|
|
@@ -14810,6 +14810,9 @@ function AverageWidthFrame()
|
|
|
14810
14810
|
//JSConsole.Chart.Log('[AverageWidthFrame.DrawVertical] bottom',bottom);
|
|
14811
14811
|
if (this.ChartBorder.Bottom<=5*GetDevicePixelRatio()) return; //高度不够 不显示
|
|
14812
14812
|
|
|
14813
|
+
var mapX=null;
|
|
14814
|
+
if (this.GetVerticalXCache) mapX=this.GetVerticalXCache();
|
|
14815
|
+
|
|
14813
14816
|
var bottomTextExtend=null;
|
|
14814
14817
|
if (this.XTextExtend)
|
|
14815
14818
|
{
|
|
@@ -14826,7 +14829,10 @@ function AverageWidthFrame()
|
|
|
14826
14829
|
var textRightPrev=null; //上一次刻度输出右边x坐标
|
|
14827
14830
|
for(var i=0; i<this.VerticalInfo.length; ++i)
|
|
14828
14831
|
{
|
|
14829
|
-
var
|
|
14832
|
+
var item=this.VerticalInfo[i];
|
|
14833
|
+
var x=null;
|
|
14834
|
+
if (mapX && mapX.has(item.Value)) x=mapX.get(item.Value);
|
|
14835
|
+
else x=this.GetXFromIndex(item.Value);
|
|
14830
14836
|
if (x>right) break;
|
|
14831
14837
|
if (xPrev!=null && Math.abs(x-xPrev)<this.MinXDistance) continue;
|
|
14832
14838
|
|
|
@@ -19162,6 +19168,49 @@ function KLineFrame()
|
|
|
19162
19168
|
|
|
19163
19169
|
//是否在X轴坐标上
|
|
19164
19170
|
//this.PtInVertical=function(x,y) { return false; }
|
|
19171
|
+
|
|
19172
|
+
//缓存X轴坐标刻度
|
|
19173
|
+
this.GetVerticalXCache=function()
|
|
19174
|
+
{
|
|
19175
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(this.VerticalInfo)) return null;
|
|
19176
|
+
|
|
19177
|
+
var dataWidth=this.DataWidth;
|
|
19178
|
+
var distanceWidth=this.DistanceWidth;
|
|
19179
|
+
var xPointCount=this.XPointCount;
|
|
19180
|
+
|
|
19181
|
+
var setIndex=new Set();
|
|
19182
|
+
for(var i=0; i<this.VerticalInfo.length; ++i)
|
|
19183
|
+
{
|
|
19184
|
+
var item=this.VerticalInfo[i];
|
|
19185
|
+
setIndex.add(item.Value);
|
|
19186
|
+
}
|
|
19187
|
+
|
|
19188
|
+
if (this.IsHScreen)
|
|
19189
|
+
{
|
|
19190
|
+
var border=this.ChartBorder.GetHScreenBorder();
|
|
19191
|
+
var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
19192
|
+
}
|
|
19193
|
+
else
|
|
19194
|
+
{
|
|
19195
|
+
var border=this.ChartBorder.GetBorder();
|
|
19196
|
+
var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
19197
|
+
}
|
|
19198
|
+
|
|
19199
|
+
var mapX=new Map();
|
|
19200
|
+
for(var i=0;i<xPointCount;++i, xOffset+=(dataWidth+distanceWidth))
|
|
19201
|
+
{
|
|
19202
|
+
var left=xOffset;
|
|
19203
|
+
var right=xOffset+dataWidth;
|
|
19204
|
+
var x=left+(right-left)/2;
|
|
19205
|
+
|
|
19206
|
+
if (setIndex.has(i))
|
|
19207
|
+
{
|
|
19208
|
+
mapX.set(i, x);
|
|
19209
|
+
}
|
|
19210
|
+
}
|
|
19211
|
+
|
|
19212
|
+
return mapX;
|
|
19213
|
+
}
|
|
19165
19214
|
}
|
|
19166
19215
|
|
|
19167
19216
|
function OverlayKLineFrame()
|
|
@@ -20201,19 +20250,25 @@ function KLineHScreenFrame()
|
|
|
20201
20250
|
//画X轴
|
|
20202
20251
|
this.DrawVertical=function()
|
|
20203
20252
|
{
|
|
20253
|
+
var mapX=null;
|
|
20254
|
+
if (this.GetVerticalXCache) mapX=this.GetVerticalXCache();
|
|
20255
|
+
|
|
20204
20256
|
var border=this.ChartBorder.GetHScreenBorder();
|
|
20205
20257
|
var left=border.Left;
|
|
20206
20258
|
var right=border.RightTitle;
|
|
20207
20259
|
var bottom=border.Bottom;
|
|
20208
20260
|
var pixelRatio = GetDevicePixelRatio(); //获取设备的分辨率
|
|
20209
20261
|
var xPrev=null; //上一个坐标x的值
|
|
20210
|
-
for(var i
|
|
20262
|
+
for(var i=0; i<this.VerticalInfo.length; ++i)
|
|
20211
20263
|
{
|
|
20212
|
-
var
|
|
20264
|
+
var item=this.VerticalInfo[i];
|
|
20265
|
+
var x=null;
|
|
20266
|
+
if (mapX && mapX.has(item.Value)) x=mapX.get(item.Value);
|
|
20267
|
+
else x=this.GetXFromIndex(item.Value);
|
|
20268
|
+
|
|
20213
20269
|
if (x>=bottom) break;
|
|
20214
20270
|
if (xPrev!=null && Math.abs(x-xPrev)<80) continue;
|
|
20215
20271
|
|
|
20216
|
-
var item=this.VerticalInfo[i];
|
|
20217
20272
|
if (item.LineType==2)
|
|
20218
20273
|
{
|
|
20219
20274
|
this.Canvas.strokeStyle=this.VerticalInfo[i].LineColor;
|
|
@@ -37726,15 +37781,30 @@ function ChartMACD()
|
|
|
37726
37781
|
this.DrawBars=function(lineWidth, bUpBar)
|
|
37727
37782
|
{
|
|
37728
37783
|
var isMinute=this.IsMinuteFrame();
|
|
37729
|
-
|
|
37784
|
+
|
|
37730
37785
|
var dataWidth=this.ChartFrame.DataWidth;
|
|
37731
37786
|
var distanceWidth=this.ChartFrame.DistanceWidth;
|
|
37732
37787
|
var xPointCount=this.ChartFrame.XPointCount;
|
|
37733
|
-
var
|
|
37788
|
+
var isHSCreen=this.ChartFrame.IsHScreen===true;
|
|
37789
|
+
|
|
37790
|
+
if (isHSCreen)
|
|
37791
|
+
{
|
|
37792
|
+
var border=this.ChartBorder.GetHScreenBorder();
|
|
37793
|
+
var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
37794
|
+
var chartright=border.BottomEx;
|
|
37795
|
+
var lockRect=this.GetLockRect();
|
|
37796
|
+
if (lockRect) chartright=lockRect.Top;
|
|
37797
|
+
}
|
|
37798
|
+
else
|
|
37799
|
+
{
|
|
37800
|
+
var border=this.ChartBorder.GetBorder();
|
|
37801
|
+
var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
37802
|
+
|
|
37803
|
+
var chartright=border.RightEx;
|
|
37804
|
+
var lockRect=this.GetLockRect();
|
|
37805
|
+
if (lockRect) chartright=lockRect.Left;
|
|
37806
|
+
}
|
|
37734
37807
|
|
|
37735
|
-
var chartright=border.RightEx;
|
|
37736
|
-
var lockRect=this.GetLockRect();
|
|
37737
|
-
if (lockRect) chartright=lockRect.Left;
|
|
37738
37808
|
|
|
37739
37809
|
if (bUpBar) this.Canvas.strokeStyle=this.UpColor;
|
|
37740
37810
|
else this.Canvas.strokeStyle=this.DownColor;
|
|
@@ -37771,8 +37841,18 @@ function ChartMACD()
|
|
|
37771
37841
|
|
|
37772
37842
|
var y=this.ChartFrame.GetYFromData(value);
|
|
37773
37843
|
var xFix=ToFixedPoint2(lineWidth, x); //毛边修正
|
|
37774
|
-
|
|
37775
|
-
|
|
37844
|
+
|
|
37845
|
+
if (isHSCreen)
|
|
37846
|
+
{
|
|
37847
|
+
this.Canvas.moveTo(yBottom,ToFixedPoint(x));
|
|
37848
|
+
this.Canvas.lineTo(y,ToFixedPoint(x));
|
|
37849
|
+
}
|
|
37850
|
+
else
|
|
37851
|
+
{
|
|
37852
|
+
this.Canvas.moveTo(xFix,yBottom);
|
|
37853
|
+
this.Canvas.lineTo(xFix,y);
|
|
37854
|
+
}
|
|
37855
|
+
|
|
37776
37856
|
++drawCount;
|
|
37777
37857
|
}
|
|
37778
37858
|
|
|
@@ -37791,12 +37871,6 @@ function ChartMACD()
|
|
|
37791
37871
|
return;
|
|
37792
37872
|
}
|
|
37793
37873
|
|
|
37794
|
-
if (this.ChartFrame.IsHScreen===true)
|
|
37795
|
-
{
|
|
37796
|
-
this.HScreenDraw();
|
|
37797
|
-
return;
|
|
37798
|
-
}
|
|
37799
|
-
|
|
37800
37874
|
var dataWidth=this.ChartFrame.DataWidth;
|
|
37801
37875
|
var lineWidth=this.LineWidth*GetDevicePixelRatio();
|
|
37802
37876
|
if (this.LineWidth==50) lineWidth=dataWidth;
|
|
@@ -37812,48 +37886,6 @@ function ChartMACD()
|
|
|
37812
37886
|
this.Canvas.lineWidth=backupLineWidth;
|
|
37813
37887
|
}
|
|
37814
37888
|
|
|
37815
|
-
this.HScreenDraw=function()
|
|
37816
|
-
{
|
|
37817
|
-
var dataWidth=this.ChartFrame.DataWidth;
|
|
37818
|
-
var distanceWidth=this.ChartFrame.DistanceWidth;
|
|
37819
|
-
var border=this.ChartBorder.GetHScreenBorder();
|
|
37820
|
-
var chartright=border.BottomEx;
|
|
37821
|
-
var xPointCount=this.ChartFrame.XPointCount;
|
|
37822
|
-
var lockRect=this.GetLockRect();
|
|
37823
|
-
if (lockRect) chartright=lockRect.Top;
|
|
37824
|
-
|
|
37825
|
-
var yBottom=this.ChartFrame.GetYFromData(0);
|
|
37826
|
-
|
|
37827
|
-
var lineWidth=this.LineWidth*GetDevicePixelRatio();
|
|
37828
|
-
if (this.LineWidth==50) lineWidth=dataWidth;
|
|
37829
|
-
else if (lineWidth>dataWidth) lineWidth=dataWidth;
|
|
37830
|
-
|
|
37831
|
-
var backupLineWidth=this.Canvas.lineWidth;
|
|
37832
|
-
this.Canvas.lineWidth=lineWidth;
|
|
37833
|
-
|
|
37834
|
-
for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j)
|
|
37835
|
-
{
|
|
37836
|
-
var value=this.Data.Data[i];
|
|
37837
|
-
if (value==null) continue;
|
|
37838
|
-
|
|
37839
|
-
var x=this.ChartFrame.GetXFromIndex(j);
|
|
37840
|
-
var y=this.ChartFrame.GetYFromData(value);
|
|
37841
|
-
|
|
37842
|
-
if (x>chartright) break;
|
|
37843
|
-
|
|
37844
|
-
this.Canvas.beginPath();
|
|
37845
|
-
this.Canvas.moveTo(yBottom,ToFixedPoint(x));
|
|
37846
|
-
this.Canvas.lineTo(y,ToFixedPoint(x));
|
|
37847
|
-
|
|
37848
|
-
if (value>=0) this.Canvas.strokeStyle=this.UpColor;
|
|
37849
|
-
else this.Canvas.strokeStyle=this.DownColor;
|
|
37850
|
-
this.Canvas.stroke();
|
|
37851
|
-
this.Canvas.closePath();
|
|
37852
|
-
}
|
|
37853
|
-
|
|
37854
|
-
this.Canvas.lineWidth=backupLineWidth;
|
|
37855
|
-
}
|
|
37856
|
-
|
|
37857
37889
|
this.GetItemData=function(indexData)
|
|
37858
37890
|
{
|
|
37859
37891
|
if (!indexData) return null;
|
|
@@ -75942,7 +75974,12 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
75942
75974
|
this.AutoUpdateEvent(false,funcName); //停止自动更新
|
|
75943
75975
|
this.CancelAutoUpdate();
|
|
75944
75976
|
download.Status=1;
|
|
75945
|
-
var firstItem=
|
|
75977
|
+
var firstItem=null;
|
|
75978
|
+
if (IFrameSplitOperator.IsNonEmptyArray(this.SourceData.Data))
|
|
75979
|
+
firstItem=this.SourceData.Data[0]; //最新的一条数据
|
|
75980
|
+
else
|
|
75981
|
+
firstItem={Date:null, Time:null};
|
|
75982
|
+
|
|
75946
75983
|
var postData=
|
|
75947
75984
|
{
|
|
75948
75985
|
"field": ["name","symbol", "yclose","open","price","high","low","vol"],
|
|
@@ -76016,25 +76053,31 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
76016
76053
|
}
|
|
76017
76054
|
|
|
76018
76055
|
var lastDataCount=this.GetHistoryDataCount(); //保存下上一次的数据个数
|
|
76019
|
-
|
|
76020
|
-
var firstData=this.SourceData.Data[0];
|
|
76021
76056
|
var endIndex=null;
|
|
76022
|
-
|
|
76057
|
+
if (IFrameSplitOperator.IsNonEmptyArray(this.SourceData.Data))
|
|
76023
76058
|
{
|
|
76024
|
-
var
|
|
76025
|
-
|
|
76026
|
-
{
|
|
76027
|
-
endIndex=i;
|
|
76028
|
-
break;
|
|
76029
|
-
}
|
|
76030
|
-
else if (firstData.Date==item.Date && firstData.Time==item.Time)
|
|
76059
|
+
var firstData=this.SourceData.Data[0];
|
|
76060
|
+
for(var i=aryDayData.length-1;i>=0;--i)
|
|
76031
76061
|
{
|
|
76032
|
-
|
|
76033
|
-
|
|
76034
|
-
|
|
76062
|
+
var item=aryDayData[i];
|
|
76063
|
+
if (firstData.Date>item.Date || (firstData.Date==item.Date && firstData.Time>item.Time))
|
|
76064
|
+
{
|
|
76065
|
+
endIndex=i;
|
|
76066
|
+
break;
|
|
76067
|
+
}
|
|
76068
|
+
else if (firstData.Date==item.Date && firstData.Time==item.Time)
|
|
76069
|
+
{
|
|
76070
|
+
firstData.YClose=item.YClose;
|
|
76071
|
+
endIndex=i-1;
|
|
76072
|
+
break;
|
|
76073
|
+
}
|
|
76035
76074
|
}
|
|
76036
76075
|
}
|
|
76037
|
-
|
|
76076
|
+
else
|
|
76077
|
+
{
|
|
76078
|
+
endIndex=aryDayData.length-1;
|
|
76079
|
+
}
|
|
76080
|
+
|
|
76038
76081
|
if (endIndex==null && endIndex<0) return;
|
|
76039
76082
|
|
|
76040
76083
|
for(var i=0;i<aryDayData.length && i<=endIndex;++i) //数据往前插
|
|
@@ -76241,7 +76284,12 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
76241
76284
|
this.AutoUpdateEvent(false,funcName); //停止自动更新
|
|
76242
76285
|
this.CancelAutoUpdate();
|
|
76243
76286
|
download.Status=1;
|
|
76244
|
-
var firstItem=
|
|
76287
|
+
var firstItem=null;
|
|
76288
|
+
if (IFrameSplitOperator.IsNonEmptyArray(this.SourceData.Data))
|
|
76289
|
+
firstItem=this.SourceData.Data[0];
|
|
76290
|
+
else
|
|
76291
|
+
firstItem={Date:null};
|
|
76292
|
+
|
|
76245
76293
|
var postData=
|
|
76246
76294
|
{
|
|
76247
76295
|
"field": ["name","symbol", "yclose","open","price","high","low","vol"],
|
|
@@ -76312,24 +76360,34 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
76312
76360
|
return;
|
|
76313
76361
|
}
|
|
76314
76362
|
var lastDataCount=this.GetHistoryDataCount(); //保存下上一次的数据个数
|
|
76315
|
-
|
|
76316
|
-
var firstData=this.SourceData.Data[0];
|
|
76317
76363
|
var endIndex=null;
|
|
76318
|
-
|
|
76319
|
-
{
|
|
76320
|
-
var
|
|
76321
|
-
|
|
76322
|
-
|
|
76323
|
-
endIndex=i;
|
|
76324
|
-
break;
|
|
76325
|
-
}
|
|
76326
|
-
else if (firstData.Date==item.Date)
|
|
76364
|
+
if (IFrameSplitOperator.IsNonEmptyArray(this.SourceData.Data))
|
|
76365
|
+
{
|
|
76366
|
+
var firstData=this.SourceData.Data[0];
|
|
76367
|
+
|
|
76368
|
+
for(var i=aryDayData.length-1;i>=0;--i)
|
|
76327
76369
|
{
|
|
76328
|
-
|
|
76329
|
-
|
|
76330
|
-
|
|
76370
|
+
var item=aryDayData[i];
|
|
76371
|
+
if (firstData.Date>item.Date)
|
|
76372
|
+
{
|
|
76373
|
+
endIndex=i;
|
|
76374
|
+
break;
|
|
76375
|
+
}
|
|
76376
|
+
else if (firstData.Date==item.Date)
|
|
76377
|
+
{
|
|
76378
|
+
firstData.YClose=item.YClose;
|
|
76379
|
+
endIndex=i-1;
|
|
76380
|
+
break;
|
|
76381
|
+
}
|
|
76331
76382
|
}
|
|
76332
76383
|
}
|
|
76384
|
+
else
|
|
76385
|
+
{
|
|
76386
|
+
var firstData={ Date:null };
|
|
76387
|
+
endIndex=aryDayData.length-1;
|
|
76388
|
+
}
|
|
76389
|
+
|
|
76390
|
+
|
|
76333
76391
|
if (endIndex==null && endIndex<0) return;
|
|
76334
76392
|
|
|
76335
76393
|
for(var i=0; i<aryDayData.length && i<=endIndex;++i) //数据往前插
|
|
@@ -132047,7 +132105,7 @@ function ScrollBarBGChart()
|
|
|
132047
132105
|
|
|
132048
132106
|
|
|
132049
132107
|
|
|
132050
|
-
var HQCHART_VERSION="1.1.
|
|
132108
|
+
var HQCHART_VERSION="1.1.12885";
|
|
132051
132109
|
|
|
132052
132110
|
function PrintHQChartVersion()
|
|
132053
132111
|
{
|
|
@@ -14854,6 +14854,9 @@ function AverageWidthFrame()
|
|
|
14854
14854
|
//JSConsole.Chart.Log('[AverageWidthFrame.DrawVertical] bottom',bottom);
|
|
14855
14855
|
if (this.ChartBorder.Bottom<=5*GetDevicePixelRatio()) return; //高度不够 不显示
|
|
14856
14856
|
|
|
14857
|
+
var mapX=null;
|
|
14858
|
+
if (this.GetVerticalXCache) mapX=this.GetVerticalXCache();
|
|
14859
|
+
|
|
14857
14860
|
var bottomTextExtend=null;
|
|
14858
14861
|
if (this.XTextExtend)
|
|
14859
14862
|
{
|
|
@@ -14870,7 +14873,10 @@ function AverageWidthFrame()
|
|
|
14870
14873
|
var textRightPrev=null; //上一次刻度输出右边x坐标
|
|
14871
14874
|
for(var i=0; i<this.VerticalInfo.length; ++i)
|
|
14872
14875
|
{
|
|
14873
|
-
var
|
|
14876
|
+
var item=this.VerticalInfo[i];
|
|
14877
|
+
var x=null;
|
|
14878
|
+
if (mapX && mapX.has(item.Value)) x=mapX.get(item.Value);
|
|
14879
|
+
else x=this.GetXFromIndex(item.Value);
|
|
14874
14880
|
if (x>right) break;
|
|
14875
14881
|
if (xPrev!=null && Math.abs(x-xPrev)<this.MinXDistance) continue;
|
|
14876
14882
|
|
|
@@ -19206,6 +19212,49 @@ function KLineFrame()
|
|
|
19206
19212
|
|
|
19207
19213
|
//是否在X轴坐标上
|
|
19208
19214
|
//this.PtInVertical=function(x,y) { return false; }
|
|
19215
|
+
|
|
19216
|
+
//缓存X轴坐标刻度
|
|
19217
|
+
this.GetVerticalXCache=function()
|
|
19218
|
+
{
|
|
19219
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(this.VerticalInfo)) return null;
|
|
19220
|
+
|
|
19221
|
+
var dataWidth=this.DataWidth;
|
|
19222
|
+
var distanceWidth=this.DistanceWidth;
|
|
19223
|
+
var xPointCount=this.XPointCount;
|
|
19224
|
+
|
|
19225
|
+
var setIndex=new Set();
|
|
19226
|
+
for(var i=0; i<this.VerticalInfo.length; ++i)
|
|
19227
|
+
{
|
|
19228
|
+
var item=this.VerticalInfo[i];
|
|
19229
|
+
setIndex.add(item.Value);
|
|
19230
|
+
}
|
|
19231
|
+
|
|
19232
|
+
if (this.IsHScreen)
|
|
19233
|
+
{
|
|
19234
|
+
var border=this.ChartBorder.GetHScreenBorder();
|
|
19235
|
+
var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
19236
|
+
}
|
|
19237
|
+
else
|
|
19238
|
+
{
|
|
19239
|
+
var border=this.ChartBorder.GetBorder();
|
|
19240
|
+
var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
19241
|
+
}
|
|
19242
|
+
|
|
19243
|
+
var mapX=new Map();
|
|
19244
|
+
for(var i=0;i<xPointCount;++i, xOffset+=(dataWidth+distanceWidth))
|
|
19245
|
+
{
|
|
19246
|
+
var left=xOffset;
|
|
19247
|
+
var right=xOffset+dataWidth;
|
|
19248
|
+
var x=left+(right-left)/2;
|
|
19249
|
+
|
|
19250
|
+
if (setIndex.has(i))
|
|
19251
|
+
{
|
|
19252
|
+
mapX.set(i, x);
|
|
19253
|
+
}
|
|
19254
|
+
}
|
|
19255
|
+
|
|
19256
|
+
return mapX;
|
|
19257
|
+
}
|
|
19209
19258
|
}
|
|
19210
19259
|
|
|
19211
19260
|
function OverlayKLineFrame()
|
|
@@ -20245,19 +20294,25 @@ function KLineHScreenFrame()
|
|
|
20245
20294
|
//画X轴
|
|
20246
20295
|
this.DrawVertical=function()
|
|
20247
20296
|
{
|
|
20297
|
+
var mapX=null;
|
|
20298
|
+
if (this.GetVerticalXCache) mapX=this.GetVerticalXCache();
|
|
20299
|
+
|
|
20248
20300
|
var border=this.ChartBorder.GetHScreenBorder();
|
|
20249
20301
|
var left=border.Left;
|
|
20250
20302
|
var right=border.RightTitle;
|
|
20251
20303
|
var bottom=border.Bottom;
|
|
20252
20304
|
var pixelRatio = GetDevicePixelRatio(); //获取设备的分辨率
|
|
20253
20305
|
var xPrev=null; //上一个坐标x的值
|
|
20254
|
-
for(var i
|
|
20306
|
+
for(var i=0; i<this.VerticalInfo.length; ++i)
|
|
20255
20307
|
{
|
|
20256
|
-
var
|
|
20308
|
+
var item=this.VerticalInfo[i];
|
|
20309
|
+
var x=null;
|
|
20310
|
+
if (mapX && mapX.has(item.Value)) x=mapX.get(item.Value);
|
|
20311
|
+
else x=this.GetXFromIndex(item.Value);
|
|
20312
|
+
|
|
20257
20313
|
if (x>=bottom) break;
|
|
20258
20314
|
if (xPrev!=null && Math.abs(x-xPrev)<80) continue;
|
|
20259
20315
|
|
|
20260
|
-
var item=this.VerticalInfo[i];
|
|
20261
20316
|
if (item.LineType==2)
|
|
20262
20317
|
{
|
|
20263
20318
|
this.Canvas.strokeStyle=this.VerticalInfo[i].LineColor;
|
|
@@ -37770,15 +37825,30 @@ function ChartMACD()
|
|
|
37770
37825
|
this.DrawBars=function(lineWidth, bUpBar)
|
|
37771
37826
|
{
|
|
37772
37827
|
var isMinute=this.IsMinuteFrame();
|
|
37773
|
-
|
|
37828
|
+
|
|
37774
37829
|
var dataWidth=this.ChartFrame.DataWidth;
|
|
37775
37830
|
var distanceWidth=this.ChartFrame.DistanceWidth;
|
|
37776
37831
|
var xPointCount=this.ChartFrame.XPointCount;
|
|
37777
|
-
var
|
|
37832
|
+
var isHSCreen=this.ChartFrame.IsHScreen===true;
|
|
37833
|
+
|
|
37834
|
+
if (isHSCreen)
|
|
37835
|
+
{
|
|
37836
|
+
var border=this.ChartBorder.GetHScreenBorder();
|
|
37837
|
+
var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
37838
|
+
var chartright=border.BottomEx;
|
|
37839
|
+
var lockRect=this.GetLockRect();
|
|
37840
|
+
if (lockRect) chartright=lockRect.Top;
|
|
37841
|
+
}
|
|
37842
|
+
else
|
|
37843
|
+
{
|
|
37844
|
+
var border=this.ChartBorder.GetBorder();
|
|
37845
|
+
var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
37846
|
+
|
|
37847
|
+
var chartright=border.RightEx;
|
|
37848
|
+
var lockRect=this.GetLockRect();
|
|
37849
|
+
if (lockRect) chartright=lockRect.Left;
|
|
37850
|
+
}
|
|
37778
37851
|
|
|
37779
|
-
var chartright=border.RightEx;
|
|
37780
|
-
var lockRect=this.GetLockRect();
|
|
37781
|
-
if (lockRect) chartright=lockRect.Left;
|
|
37782
37852
|
|
|
37783
37853
|
if (bUpBar) this.Canvas.strokeStyle=this.UpColor;
|
|
37784
37854
|
else this.Canvas.strokeStyle=this.DownColor;
|
|
@@ -37815,8 +37885,18 @@ function ChartMACD()
|
|
|
37815
37885
|
|
|
37816
37886
|
var y=this.ChartFrame.GetYFromData(value);
|
|
37817
37887
|
var xFix=ToFixedPoint2(lineWidth, x); //毛边修正
|
|
37818
|
-
|
|
37819
|
-
|
|
37888
|
+
|
|
37889
|
+
if (isHSCreen)
|
|
37890
|
+
{
|
|
37891
|
+
this.Canvas.moveTo(yBottom,ToFixedPoint(x));
|
|
37892
|
+
this.Canvas.lineTo(y,ToFixedPoint(x));
|
|
37893
|
+
}
|
|
37894
|
+
else
|
|
37895
|
+
{
|
|
37896
|
+
this.Canvas.moveTo(xFix,yBottom);
|
|
37897
|
+
this.Canvas.lineTo(xFix,y);
|
|
37898
|
+
}
|
|
37899
|
+
|
|
37820
37900
|
++drawCount;
|
|
37821
37901
|
}
|
|
37822
37902
|
|
|
@@ -37835,12 +37915,6 @@ function ChartMACD()
|
|
|
37835
37915
|
return;
|
|
37836
37916
|
}
|
|
37837
37917
|
|
|
37838
|
-
if (this.ChartFrame.IsHScreen===true)
|
|
37839
|
-
{
|
|
37840
|
-
this.HScreenDraw();
|
|
37841
|
-
return;
|
|
37842
|
-
}
|
|
37843
|
-
|
|
37844
37918
|
var dataWidth=this.ChartFrame.DataWidth;
|
|
37845
37919
|
var lineWidth=this.LineWidth*GetDevicePixelRatio();
|
|
37846
37920
|
if (this.LineWidth==50) lineWidth=dataWidth;
|
|
@@ -37856,48 +37930,6 @@ function ChartMACD()
|
|
|
37856
37930
|
this.Canvas.lineWidth=backupLineWidth;
|
|
37857
37931
|
}
|
|
37858
37932
|
|
|
37859
|
-
this.HScreenDraw=function()
|
|
37860
|
-
{
|
|
37861
|
-
var dataWidth=this.ChartFrame.DataWidth;
|
|
37862
|
-
var distanceWidth=this.ChartFrame.DistanceWidth;
|
|
37863
|
-
var border=this.ChartBorder.GetHScreenBorder();
|
|
37864
|
-
var chartright=border.BottomEx;
|
|
37865
|
-
var xPointCount=this.ChartFrame.XPointCount;
|
|
37866
|
-
var lockRect=this.GetLockRect();
|
|
37867
|
-
if (lockRect) chartright=lockRect.Top;
|
|
37868
|
-
|
|
37869
|
-
var yBottom=this.ChartFrame.GetYFromData(0);
|
|
37870
|
-
|
|
37871
|
-
var lineWidth=this.LineWidth*GetDevicePixelRatio();
|
|
37872
|
-
if (this.LineWidth==50) lineWidth=dataWidth;
|
|
37873
|
-
else if (lineWidth>dataWidth) lineWidth=dataWidth;
|
|
37874
|
-
|
|
37875
|
-
var backupLineWidth=this.Canvas.lineWidth;
|
|
37876
|
-
this.Canvas.lineWidth=lineWidth;
|
|
37877
|
-
|
|
37878
|
-
for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j)
|
|
37879
|
-
{
|
|
37880
|
-
var value=this.Data.Data[i];
|
|
37881
|
-
if (value==null) continue;
|
|
37882
|
-
|
|
37883
|
-
var x=this.ChartFrame.GetXFromIndex(j);
|
|
37884
|
-
var y=this.ChartFrame.GetYFromData(value);
|
|
37885
|
-
|
|
37886
|
-
if (x>chartright) break;
|
|
37887
|
-
|
|
37888
|
-
this.Canvas.beginPath();
|
|
37889
|
-
this.Canvas.moveTo(yBottom,ToFixedPoint(x));
|
|
37890
|
-
this.Canvas.lineTo(y,ToFixedPoint(x));
|
|
37891
|
-
|
|
37892
|
-
if (value>=0) this.Canvas.strokeStyle=this.UpColor;
|
|
37893
|
-
else this.Canvas.strokeStyle=this.DownColor;
|
|
37894
|
-
this.Canvas.stroke();
|
|
37895
|
-
this.Canvas.closePath();
|
|
37896
|
-
}
|
|
37897
|
-
|
|
37898
|
-
this.Canvas.lineWidth=backupLineWidth;
|
|
37899
|
-
}
|
|
37900
|
-
|
|
37901
37933
|
this.GetItemData=function(indexData)
|
|
37902
37934
|
{
|
|
37903
37935
|
if (!indexData) return null;
|
|
@@ -75986,7 +76018,12 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
75986
76018
|
this.AutoUpdateEvent(false,funcName); //停止自动更新
|
|
75987
76019
|
this.CancelAutoUpdate();
|
|
75988
76020
|
download.Status=1;
|
|
75989
|
-
var firstItem=
|
|
76021
|
+
var firstItem=null;
|
|
76022
|
+
if (IFrameSplitOperator.IsNonEmptyArray(this.SourceData.Data))
|
|
76023
|
+
firstItem=this.SourceData.Data[0]; //最新的一条数据
|
|
76024
|
+
else
|
|
76025
|
+
firstItem={Date:null, Time:null};
|
|
76026
|
+
|
|
75990
76027
|
var postData=
|
|
75991
76028
|
{
|
|
75992
76029
|
"field": ["name","symbol", "yclose","open","price","high","low","vol"],
|
|
@@ -76060,25 +76097,31 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
76060
76097
|
}
|
|
76061
76098
|
|
|
76062
76099
|
var lastDataCount=this.GetHistoryDataCount(); //保存下上一次的数据个数
|
|
76063
|
-
|
|
76064
|
-
var firstData=this.SourceData.Data[0];
|
|
76065
76100
|
var endIndex=null;
|
|
76066
|
-
|
|
76101
|
+
if (IFrameSplitOperator.IsNonEmptyArray(this.SourceData.Data))
|
|
76067
76102
|
{
|
|
76068
|
-
var
|
|
76069
|
-
|
|
76070
|
-
{
|
|
76071
|
-
endIndex=i;
|
|
76072
|
-
break;
|
|
76073
|
-
}
|
|
76074
|
-
else if (firstData.Date==item.Date && firstData.Time==item.Time)
|
|
76103
|
+
var firstData=this.SourceData.Data[0];
|
|
76104
|
+
for(var i=aryDayData.length-1;i>=0;--i)
|
|
76075
76105
|
{
|
|
76076
|
-
|
|
76077
|
-
|
|
76078
|
-
|
|
76106
|
+
var item=aryDayData[i];
|
|
76107
|
+
if (firstData.Date>item.Date || (firstData.Date==item.Date && firstData.Time>item.Time))
|
|
76108
|
+
{
|
|
76109
|
+
endIndex=i;
|
|
76110
|
+
break;
|
|
76111
|
+
}
|
|
76112
|
+
else if (firstData.Date==item.Date && firstData.Time==item.Time)
|
|
76113
|
+
{
|
|
76114
|
+
firstData.YClose=item.YClose;
|
|
76115
|
+
endIndex=i-1;
|
|
76116
|
+
break;
|
|
76117
|
+
}
|
|
76079
76118
|
}
|
|
76080
76119
|
}
|
|
76081
|
-
|
|
76120
|
+
else
|
|
76121
|
+
{
|
|
76122
|
+
endIndex=aryDayData.length-1;
|
|
76123
|
+
}
|
|
76124
|
+
|
|
76082
76125
|
if (endIndex==null && endIndex<0) return;
|
|
76083
76126
|
|
|
76084
76127
|
for(var i=0;i<aryDayData.length && i<=endIndex;++i) //数据往前插
|
|
@@ -76285,7 +76328,12 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
76285
76328
|
this.AutoUpdateEvent(false,funcName); //停止自动更新
|
|
76286
76329
|
this.CancelAutoUpdate();
|
|
76287
76330
|
download.Status=1;
|
|
76288
|
-
var firstItem=
|
|
76331
|
+
var firstItem=null;
|
|
76332
|
+
if (IFrameSplitOperator.IsNonEmptyArray(this.SourceData.Data))
|
|
76333
|
+
firstItem=this.SourceData.Data[0];
|
|
76334
|
+
else
|
|
76335
|
+
firstItem={Date:null};
|
|
76336
|
+
|
|
76289
76337
|
var postData=
|
|
76290
76338
|
{
|
|
76291
76339
|
"field": ["name","symbol", "yclose","open","price","high","low","vol"],
|
|
@@ -76356,24 +76404,34 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
76356
76404
|
return;
|
|
76357
76405
|
}
|
|
76358
76406
|
var lastDataCount=this.GetHistoryDataCount(); //保存下上一次的数据个数
|
|
76359
|
-
|
|
76360
|
-
var firstData=this.SourceData.Data[0];
|
|
76361
76407
|
var endIndex=null;
|
|
76362
|
-
|
|
76363
|
-
{
|
|
76364
|
-
var
|
|
76365
|
-
|
|
76366
|
-
|
|
76367
|
-
endIndex=i;
|
|
76368
|
-
break;
|
|
76369
|
-
}
|
|
76370
|
-
else if (firstData.Date==item.Date)
|
|
76408
|
+
if (IFrameSplitOperator.IsNonEmptyArray(this.SourceData.Data))
|
|
76409
|
+
{
|
|
76410
|
+
var firstData=this.SourceData.Data[0];
|
|
76411
|
+
|
|
76412
|
+
for(var i=aryDayData.length-1;i>=0;--i)
|
|
76371
76413
|
{
|
|
76372
|
-
|
|
76373
|
-
|
|
76374
|
-
|
|
76414
|
+
var item=aryDayData[i];
|
|
76415
|
+
if (firstData.Date>item.Date)
|
|
76416
|
+
{
|
|
76417
|
+
endIndex=i;
|
|
76418
|
+
break;
|
|
76419
|
+
}
|
|
76420
|
+
else if (firstData.Date==item.Date)
|
|
76421
|
+
{
|
|
76422
|
+
firstData.YClose=item.YClose;
|
|
76423
|
+
endIndex=i-1;
|
|
76424
|
+
break;
|
|
76425
|
+
}
|
|
76375
76426
|
}
|
|
76376
76427
|
}
|
|
76428
|
+
else
|
|
76429
|
+
{
|
|
76430
|
+
var firstData={ Date:null };
|
|
76431
|
+
endIndex=aryDayData.length-1;
|
|
76432
|
+
}
|
|
76433
|
+
|
|
76434
|
+
|
|
76377
76435
|
if (endIndex==null && endIndex<0) return;
|
|
76378
76436
|
|
|
76379
76437
|
for(var i=0; i<aryDayData.length && i<=endIndex;++i) //数据往前插
|
|
@@ -132205,7 +132263,7 @@ function HQChartScriptWorker()
|
|
|
132205
132263
|
|
|
132206
132264
|
|
|
132207
132265
|
|
|
132208
|
-
var HQCHART_VERSION="1.1.
|
|
132266
|
+
var HQCHART_VERSION="1.1.12885";
|
|
132209
132267
|
|
|
132210
132268
|
function PrintHQChartVersion()
|
|
132211
132269
|
{
|