hqchart 1.1.12674 → 1.1.12680
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 +35 -23
- package/package.json +1 -1
- package/src/jscommon/umychart.js +151 -0
- package/src/jscommon/umychart.uniapp.h5/umychart.uniapp.h5.js +152 -1
- package/src/jscommon/umychart.version.js +1 -1
- package/src/jscommon/umychart.vue/umychart.vue.js +152 -1
- package/src/jscommon/umychart.wechat/umychart.chartframe.wechat.js +2 -1
- package/src/jscommon/umychart.wechat/umychart.version.wechat.js +1 -1
- package/src/jscommon/umychart.wechat/umychart.wechat.3.0.js +127 -0
package/lib/umychart.vue.js
CHANGED
|
@@ -1972,7 +1972,16 @@ this.Tooltip.style.position="absolute";this.Tooltip.style.left=left+"px";this.To
|
|
|
1972
1972
|
{var left=x;var top=y;var format=g_DivTooltipDataForamt.Create('ScatterPlotDataStringFormat');format.Value=toolTip;format.Symbol=this.Symbol;format.Period=this.Period;format.LanguageID=this.LanguageID;if(!format.Operator())return;var width=format.Width;this.Tooltip.className='jchart-charscatterplot-tooltip';//OX指标数据
|
|
1973
1973
|
this.Tooltip.style.position="absolute";this.Tooltip.style.left=left+"px";this.Tooltip.style.top=top+xMove+"px";this.Tooltip.style.width=width+"px";this.Tooltip.style.height=null;this.Tooltip.innerHTML=format.Text;;this.Tooltip.style.display="block";}else if(toolTip.Type==7)//ChartDrawSVG
|
|
1974
1974
|
{var left=x;var top=y;var format=g_DivTooltipDataForamt.Create('ChartDrawSVGDataStringFormat');format.Value=toolTip;format.Symbol=this.Symbol;format.Period=this.Period;format.LanguageID=this.LanguageID;if(!format.Operator())return;var width=format.Width;this.Tooltip.className='jchart-chartdrawsvg-tooltip';//ChartDrawSVG指标数据
|
|
1975
|
-
this.Tooltip.style.position="absolute";this.Tooltip.style.left=left+"px";this.Tooltip.style.top=top+xMove+"px";this.Tooltip.style.width=width+"px";this.Tooltip.style.height=null;this.Tooltip.innerHTML=format.Text;;this.Tooltip.style.display="block";}};this.HideTooltip=function(){if(this.Tooltip.style.display!="none")this.Tooltip.style.display="none";};this.ShowSelectRect=function(x,y,x2,y2){var left=x;var top=y;var border=this.Frame.ChartBorder.GetBorder();var borderRight=border.Right;var borderLeft=border.Left;if(x>borderRight)x=borderRight;if(x2>borderRight)x2=borderRight;if(x<borderLeft)x=borderLeft;if(x2<borderLeft)x2=borderLeft;if(x>x2)left=x2;if(y>y2)top=y2;var width=Math.abs(x-x2);var height=Math.abs(y-y2);this.SelectRect.style.width=width+"px";this.SelectRect.style.height=height+"px";this.SelectRect.style.position="absolute";this.SelectRect.style.left=left+"px";this.SelectRect.style.top=top+"px";this.SelectRect.style.display="block";};this.UpdateSelectRect=function(start,end){if(!this.ChartPaint[0].Data)return;var paint=this.GetRectSelectPaint();if(!paint)return;var data=this.ChartPaint[0].Data;var startItem=data.Data[start];var endItem=data.Data[end];JSConsole.Chart.Log('[JSChartContainer::UpdateSelectRect]',startItem,endItem);paint.SetPoint(startItem,{Index:0,DataIndex:start});paint.SetPoint(endItem,{Index:1,DataIndex:end});this.Draw();};this.HideSelectRect=function(){this.SelectRect.style.display="none";};this.ResetFrameXYSplit=function(){if(typeof this.Frame.ResetXYSplit=='function')this.Frame.ResetXYSplit();};this.
|
|
1975
|
+
this.Tooltip.style.position="absolute";this.Tooltip.style.left=left+"px";this.Tooltip.style.top=top+xMove+"px";this.Tooltip.style.width=width+"px";this.Tooltip.style.height=null;this.Tooltip.innerHTML=format.Text;;this.Tooltip.style.display="block";}};this.HideTooltip=function(){if(this.Tooltip.style.display!="none")this.Tooltip.style.display="none";};this.ShowSelectRect=function(x,y,x2,y2){var left=x;var top=y;var border=this.Frame.ChartBorder.GetBorder();var borderRight=border.Right;var borderLeft=border.Left;if(x>borderRight)x=borderRight;if(x2>borderRight)x2=borderRight;if(x<borderLeft)x=borderLeft;if(x2<borderLeft)x2=borderLeft;if(x>x2)left=x2;if(y>y2)top=y2;var width=Math.abs(x-x2);var height=Math.abs(y-y2);this.SelectRect.style.width=width+"px";this.SelectRect.style.height=height+"px";this.SelectRect.style.position="absolute";this.SelectRect.style.left=left+"px";this.SelectRect.style.top=top+"px";this.SelectRect.style.display="block";};this.UpdateSelectRect=function(start,end){if(!this.ChartPaint[0].Data)return;var paint=this.GetRectSelectPaint();if(!paint)return;var data=this.ChartPaint[0].Data;var startItem=data.Data[start];var endItem=data.Data[end];JSConsole.Chart.Log('[JSChartContainer::UpdateSelectRect]',startItem,endItem);paint.SetPoint(startItem,{Index:0,DataIndex:start});paint.SetPoint(endItem,{Index:1,DataIndex:end});this.Draw();};this.HideSelectRect=function(){this.SelectRect.style.display="none";};this.ResetFrameXYSplit=function(){if(typeof this.Frame.ResetXYSplit=='function')this.Frame.ResetXYSplit();};this.UpdateFrameMaxMinV2=function(){var mapFrame=new _map2.default();//key=frameid, value:{ ChartPaint:[] }
|
|
1976
|
+
for(var i=0;i<this.Frame.SubFrame.length;++i){var subItem=this.Frame.SubFrame[i];if(!subItem||!subItem.Frame)continue;var frame=subItem.Frame;var key=frame.Identify;var item={ID:key,Frame:frame,ChartPaint:[],Max:null,Min:null,OverlayFrame:[],//共享坐标
|
|
1977
|
+
SingleOverlay:[]//独立坐标
|
|
1978
|
+
};for(var j=0;j<subItem.OverlayIndex.length;++j){var overlayItem=subItem.OverlayIndex[j];var overlayFrame=overlayItem.Frame;if(overlayFrame.IsShareY){if(!overlayFrame.MainFrame)continue;if(overlayFrame.IsCalculateYMaxMin===false)continue;//叠加坐标Y轴不调整
|
|
1979
|
+
item.OverlayFrame.push(overlayFrame);for(var k=0;k<overlayItem.ChartPaint.length;++k){var chart=overlayItem.ChartPaint[k];item.ChartPaint.push(chart);}}else{item.SingleOverlay.push(overlayItem);}}mapFrame.set(key,item);}for(var i=0;i<this.ChartPaint.length;++i){var chart=this.ChartPaint[i];var key=chart.ChartFrame.Identify;if(!mapFrame.has(key))continue;var finder=mapFrame.get(key);finder.ChartPaint.push(chart);}for(var i=0;i<this.OverlayChartPaint.length;++i){var chart=this.OverlayChartPaint[i];if(!chart.ChartFrame)continue;var key=chart.ChartFrame.Identify;if(!mapFrame.has(key))continue;var finder=mapFrame.get(key);finder.ChartPaint.push(chart);}var _iteratorNormalCompletion3=true;var _didIteratorError3=false;var _iteratorError3=undefined;try{for(var _iterator3=(0,_getIterator3.default)(mapFrame),_step3;!(_iteratorNormalCompletion3=(_step3=_iterator3.next()).done);_iteratorNormalCompletion3=true){var mapItem=_step3.value;var item=mapItem[1];var frame=item.Frame;//计算主框架最大最小
|
|
1980
|
+
for(var i=0;i<item.ChartPaint.length;++i){var chart=item.ChartPaint[i];if(chart.IsShow==false)continue;//隐藏的图形不计算
|
|
1981
|
+
if(chart.NotSupportMessage)continue;if(!chart.ChartFrame)continue;var range=chart.GetMaxMin();if(range==null||range.Max==null||range.Min==null)continue;if(item.Max==null||item.Max<range.Max)item.Max=range.Max;if(item.Min==null||item.Min>range.Min)item.Min=range.Min;}if(item.Frame.YSpecificMaxMin)//固定坐标
|
|
1982
|
+
{item.Min=item.Frame.YSpecificMaxMin.Max;item.Max=item.Frame.YSpecificMaxMin.Min;}if(!IFrameSplitOperator.IsNumber(frame.YMaxMin.Max)||frame.YMaxMin.Max!=item.Max){frame.YMaxMin.Max=item.Max;frame.XYSplit=true;}if(!IFrameSplitOperator.IsNumber(frame.YMaxMin.Min)||frame.YMaxMin.Min!=item.Min){frame.YMaxMin.Min=item.Min;frame.XYSplit=true;}if(frame.XYSplit){var max=10,min=0;if(item.Max!=null)max=item.Max;if(item.Min!=null)min=item.Min;frame.HorizontalMax=max;frame.HorizontalMin=min;}//共享Y轴叠加指标同步下坐标
|
|
1983
|
+
for(var j=0;j<item.OverlayFrame.length;++j){item.OverlayFrame[j].XYSplit=true;}//独立坐标叠加指标
|
|
1984
|
+
for(var i=0;i<item.SingleOverlay.length;++i){var overlayItem=item.SingleOverlay[i];overlayItem.UpdateFrameMaxMin();}}}catch(err){_didIteratorError3=true;_iteratorError3=err;}finally{try{if(!_iteratorNormalCompletion3&&_iterator3.return){_iterator3.return();}}finally{if(_didIteratorError3){throw _iteratorError3;}}}};this.UpdateFrameMaxMin=function(){this.UpdateFrameMaxMinV2();return;var frameMaxMinData=new Array();var chartPaint=new Array();for(var i=0;i<this.ChartPaint.length;++i){var item=this.ChartPaint[i];if(item.IsShow==false)continue;//隐藏的图形不计算
|
|
1976
1985
|
chartPaint.push(this.ChartPaint[i]);}for(var i=0;i<this.OverlayChartPaint.length;++i){chartPaint.push(this.OverlayChartPaint[i]);}var aryNotSupport=[];for(var i=0;i<chartPaint.length;++i){var paint=chartPaint[i];if(paint.NotSupportMessage){aryNotSupport.push(paint);continue;}var range=paint.GetMaxMin();if(range==null||range.Max==null||range.Min==null)continue;var frameItem=null;for(var j=0;j<frameMaxMinData.length;++j){if(frameMaxMinData[j].Frame==paint.ChartFrame){frameItem=frameMaxMinData[j];break;}}if(frameItem){if(frameItem.Range.Max<range.Max)frameItem.Range.Max=range.Max;if(frameItem.Range.Min>range.Min)frameItem.Range.Min=range.Min;}else{frameItem={OverlayFrame:[]};frameItem.Frame=paint.ChartFrame;frameItem.Range=range;frameMaxMinData.push(frameItem);}}//当前计算
|
|
1977
1986
|
for(var i=0;i<aryNotSupport.length;++i){var paint=aryNotSupport[i];var range={Max:10,Min:1};var frameItem=null;for(var j=0;j<frameMaxMinData.length;++j){if(frameMaxMinData[j].Frame==paint.ChartFrame){frameItem=frameMaxMinData[j];break;}}if(frameItem)continue;frameItem={OverlayFrame:[]};frameItem.Frame=paint.ChartFrame;frameItem.Range=range;frameMaxMinData.push(frameItem);}var mapFrame=new _map2.default();for(var i=0;i<frameMaxMinData.length;++i){var item=frameMaxMinData[i];mapFrame.set(item.Frame.Identify,item);}//叠加坐标Y轴使用主图指标, 最大最小值
|
|
1978
1987
|
for(var i=0;i<this.Frame.SubFrame.length;++i){var subFrame=this.Frame.SubFrame[i];for(var j=0;j<subFrame.OverlayIndex.length;++j){var overlayItem=subFrame.OverlayIndex[j];var overlayFrame=overlayItem.Frame;if(overlayFrame.IsShareY!=true)continue;if(!overlayFrame.MainFrame)continue;if(!mapFrame.has(overlayFrame.MainFrame.Identify))continue;var frameItem=mapFrame.get(overlayFrame.MainFrame.Identify);if(!frameItem)continue;frameItem.OverlayFrame.push(overlayFrame);if(overlayFrame.IsCalculateYMaxMin===false)continue;//叠加坐标Y轴不调整
|
|
@@ -2183,7 +2192,8 @@ this.XYSplit=true;//XY轴坐标信息改变
|
|
|
2183
2192
|
this.HorizontalMax;//Y轴最大值
|
|
2184
2193
|
this.HorizontalMin;//Y轴最小值
|
|
2185
2194
|
this.XPointCount=10;//X轴数据个数
|
|
2186
|
-
|
|
2195
|
+
//Y轴原始的最大值 最小值
|
|
2196
|
+
this.YMaxMin={Max:null,Min:null};this.YSplitOperator;//Y轴分割
|
|
2187
2197
|
this.XSplitOperator;//X轴分割
|
|
2188
2198
|
this.Data;//主数据
|
|
2189
2199
|
this.IsLocked=false;//是否上锁
|
|
@@ -3588,9 +3598,9 @@ this.DrawHeatMap();if(!this.IsShow)return;if(this.ChartFrame.IsMinSize&&this.Nam
|
|
|
3588
3598
|
{if(ptMax.X==null||ptMax.Y==null||ptMax.Value==null)return;if(ptMin.X==null||ptMin.Y==null||ptMin.Value==null)return;var leftArrow=g_JSChartResource.KLine.MaxMin.LeftArrow;var rightArrow=g_JSChartResource.KLine.MaxMin.RightArrow;var highYOffset=g_JSChartResource.KLine.MaxMin.HighYOffset;var lowYOffset=g_JSChartResource.KLine.MaxMin.LowYOffset;var defaultfloatPrecision=GetfloatPrecision(this.Symbol);var xText=ptMax.Y;var yText=ptMax.X;if(IFrameSplitOperator.IsNumber(highYOffset))xText+=highYOffset;this.Canvas.save();this.Canvas.translate(xText,yText);this.Canvas.rotate(90*Math.PI/180);this.Canvas.font=this.TextFont;this.Canvas.fillStyle=this.TextColor;this.Canvas.textAlign=ptMax.Align;this.Canvas.textBaseline='bottom';var text=ptMax.Value.toFixed(defaultfloatPrecision);if(ptMax.Align=='left')text=leftArrow+text;else text=text+rightArrow;this.Canvas.fillText(text,0,0);this.Canvas.restore();var xText=ptMin.Y;var yText=ptMin.X;if(IFrameSplitOperator.IsNumber(lowYOffset))xText+=lowYOffset;this.Canvas.save();this.Canvas.translate(xText,yText);this.Canvas.rotate(90*Math.PI/180);this.Canvas.font=this.TextFont;this.Canvas.fillStyle=this.TextColor;this.Canvas.textAlign=ptMin.Align;this.Canvas.textBaseline='top';var text=ptMin.Value.toFixed(defaultfloatPrecision);if(ptMin.Align=='left')text=leftArrow+text;else text=text+rightArrow;this.Canvas.fillText(text,0,0);this.Canvas.restore();};//画某一天的信息地雷
|
|
3589
3599
|
this.DrawInfo=function(item){if(!this.InfoData||this.InfoData.size<=0)return;var isHScreen=this.ChartFrame.IsHScreen===true;var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var bottom=this.ChartBorder.GetBottom();var top=this.ChartBorder.GetTop();var key=''+item.DayData.Date;if(this.Data.DataType==1)key=item.DayData.Date+'-'+item.DayData.Time;if(!this.InfoData.has(key))return;var infoData=this.InfoData.get(key);if(!infoData||infoData.Data.length<=0)return;this.Canvas.restore();this.Canvas.save();this.ClipWindow(isHScreen);var pixelTatio=GetDevicePixelRatio();//获取设备的分辨率
|
|
3590
3600
|
var iconSize=dataWidth+distanceWidth;var minIconSize=18*pixelTatio;var bShowNum=true;if(iconSize<=15)bShowNum=false;if(iconSize<minIconSize)iconSize=minIconSize;var text='',title='';var mapImage=new _map2.default();var iconTop=item.YMax+1*pixelTatio;var iconBottom=item.YMin+1*pixelTatio+iconSize;var drawTop=true;var yOffset=0;for(var i in infoData.Data){var infoItem=infoData.Data[i];var imageInfo=mapImage.get(infoItem.InfoType);if(!imageInfo){var icon=JSKLineInfoMap.GetIconFont(infoItem.InfoType);this.Canvas.fillStyle=icon.Color;this.Canvas.font=iconSize+'px '+icon.Family;if(isHScreen){this.Canvas.textBaseline="middle";this.Canvas.textAlign="left";this.Canvas.fillText(icon.HScreenText,iconTop,item.XCenter,iconSize);var iconRect=new Rect(item.XCenter-iconSize/2,iconTop-iconSize,iconSize,iconSize);var infoCache={Data:new Array(infoItem),Rect:iconRect,Type:infoItem.InfoType,TextRect:{X:iconTop,Y:item.XCenter}};mapImage.set(infoItem.InfoType,infoCache);iconTop+=iconSize;}else{this.Canvas.textBaseline="bottom";this.Canvas.textAlign="center";if(this.InfoPosition===1){var yBottom=bottom+yOffset;this.Canvas.fillText(icon.Text,item.XCenter,yBottom,iconSize);var iconRect=new Rect(item.XCenter-iconSize/2,yBottom-iconSize,iconSize,iconSize);var infoCache={Data:new Array(infoItem),Rect:iconRect,Type:infoItem.InfoType,TextRect:{X:item.XCenter,Y:yBottom}};mapImage.set(infoItem.InfoType,infoCache);yOffset-=iconSize;}else{if(drawTop){this.Canvas.fillText(icon.Text,item.XCenter,iconTop,iconSize);var iconRect=new Rect(item.XCenter-iconSize/2,iconTop-iconSize,iconSize,iconSize);var infoCache={Data:new Array(infoItem),Rect:iconRect,Type:infoItem.InfoType,TextRect:{X:item.XCenter,Y:iconTop}};mapImage.set(infoItem.InfoType,infoCache);iconTop-=iconSize;if(iconTop-iconSize<top)drawTop=false;}else//上面显示不下,就显示在下面
|
|
3591
|
-
{this.Canvas.fillText(icon.Text,item.XCenter,iconBottom,iconSize);var iconRect=new Rect(item.XCenter-iconSize/2,iconBottom-iconSize,iconSize,iconSize);var infoCache={Data:new Array(infoItem),Rect:iconRect,Type:infoItem.InfoType,TextRect:{X:item.XCenter,Y:iconBottom}};mapImage.set(infoItem.InfoType,infoCache);iconBottom+=iconSize;}}}}else{imageInfo.Data.push(infoItem);}}var numText;if(g_JSChartResource.KLine.NumIcon){if(isHScreen)numText=g_JSChartResource.KLine.NumIcon.HScreenText;else numText=g_JSChartResource.KLine.NumIcon.Text;}var
|
|
3601
|
+
{this.Canvas.fillText(icon.Text,item.XCenter,iconBottom,iconSize);var iconRect=new Rect(item.XCenter-iconSize/2,iconBottom-iconSize,iconSize,iconSize);var infoCache={Data:new Array(infoItem),Rect:iconRect,Type:infoItem.InfoType,TextRect:{X:item.XCenter,Y:iconBottom}};mapImage.set(infoItem.InfoType,infoCache);iconBottom+=iconSize;}}}}else{imageInfo.Data.push(infoItem);}}var numText;if(g_JSChartResource.KLine.NumIcon){if(isHScreen)numText=g_JSChartResource.KLine.NumIcon.HScreenText;else numText=g_JSChartResource.KLine.NumIcon.Text;}var _iteratorNormalCompletion4=true;var _didIteratorError4=false;var _iteratorError4=undefined;try{for(var _iterator4=(0,_getIterator3.default)(mapImage),_step4;!(_iteratorNormalCompletion4=(_step4=_iterator4.next()).done);_iteratorNormalCompletion4=true){var item=_step4.value;var value=item[1];if(value.Data.length>=2&&numText&&bShowNum)//太小了 就不显示了
|
|
3592
3602
|
{var iconID=value.Data.length;if(iconID>=numText.length)iconID=0;this.Canvas.fillStyle=g_JSChartResource.KLine.NumIcon.Color;var text=numText[iconID];this.Canvas.fillText(text,value.TextRect.X,value.TextRect.Y,iconSize);}if(!isHScreen)this.InfoTooltipRect.push(value);//横屏没有tooltip
|
|
3593
|
-
}}catch(err){
|
|
3603
|
+
}}catch(err){_didIteratorError4=true;_iteratorError4=err;}finally{try{if(!_iteratorNormalCompletion4&&_iterator4.return){_iterator4.return();}}finally{if(_didIteratorError4){throw _iteratorError4;}}}this.Canvas.restore();this.Canvas.save();this.ClipClient(isHScreen);};//画交易图标
|
|
3594
3604
|
this.DrawTradeIcon=function(){if(!this.TradeData)return;var isHScreen=this.ChartFrame.IsHScreen===true;var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var xOffset=this.ChartBorder.GetLeft()+distanceWidth/2.0+2.0;var chartright=this.ChartBorder.GetRight();var xPointCount=this.ChartFrame.XPointCount;if(isHScreen){xOffset=this.ChartBorder.GetTop()+distanceWidth/2.0+2.0;chartright=this.ChartBorder.GetBottom();}var sellData=this.TradeData.Sell;var buyData=this.TradeData.Buy;var iconSize=dataWidth+distanceWidth;var pixelTatio=GetDevicePixelRatio();//获取设备的分辨率
|
|
3595
3605
|
var iconSizeMax=24*pixelTatio,iconSizeMin=12*pixelTatio;if(iconSize<iconSizeMin)iconSize=iconSizeMin;else if(iconSize>iconSizeMax)iconSize=iconSizeMax;this.Canvas.font=iconSize+'px '+this.TradeIcon.Family;for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j,xOffset+=dataWidth+distanceWidth){var data=this.Data.Data[i];if(data.Open==null||data.High==null||data.Low==null||data.Close==null)continue;var buy=false,sell=false;if(sellData&&i<sellData.length)sell=sellData[i]>0;if(buyData&&i<buyData.length)buy=buyData[i]>0;if(!sell&&!buy)continue;var left=xOffset;var right=xOffset+dataWidth;if(right>chartright)break;var x=left+(right-left)/2;var yLow=this.GetYFromData(data.Low,false);var yHigh=this.GetYFromData(data.High,false);var yOpen=this.GetYFromData(data.Open,false);var yClose=this.GetYFromData(data.Close,false);var y=yHigh;if(buy){this.Canvas.fillStyle=this.TradeIcon.Buy.Color;if(isHScreen){this.Canvas.textAlign='right';this.Canvas.textBaseline='middle';this.Canvas.fillText(this.TradeIcon.Buy.HScreenText,yLow,x);}else{this.Canvas.textAlign='center';this.Canvas.textBaseline='top';this.Canvas.fillText(this.TradeIcon.Buy.Text,x,yLow);var iconRect=new Rect(x-iconSize/2,yLow,iconSize,iconSize);var iconData={Data:{Type:1,KData:data,Name:this.TradeData.Name,Param:this.TradeData.Param},Rect:iconRect,TextRect:{X:x,Y:yLow}};this.TradeIconTooltipRect.push(iconData);}}if(sell){this.Canvas.fillStyle=this.TradeIcon.Sell.Color;if(isHScreen){this.Canvas.textAlign='left';this.Canvas.textBaseline='middle';this.Canvas.fillText(this.TradeIcon.Sell.HScreenText,yHigh,x);}else{this.Canvas.textAlign='center';this.Canvas.textBaseline='bottom';this.Canvas.fillText(this.TradeIcon.Sell.Text,x,yHigh);var iconRect=new Rect(x-iconSize/2,yHigh-iconSize,iconSize,iconSize);var iconData={Data:{Type:2,KData:data,Name:this.TradeData.Name,Param:this.TradeData.Param},Rect:iconRect,TextRect:{X:x,Y:yHigh}};this.TradeIconTooltipRect.push(iconData);}}}};this.GetTooltipData=function(x,y,tooltip){if(!this.IsShow)return false;for(var i in this.TradeIconTooltipRect){var item=this.TradeIconTooltipRect[i];if(!item.Rect)continue;var rect=item.Rect;this.Canvas.beginPath();this.Canvas.rect(rect.X,rect.Y,rect.Width,rect.Height);if(this.Canvas.isPointInPath(x,y)){JSConsole.Chart.Log('[ChartKLine::GetTooltipData] trade icon ',item);tooltip.Data=item;tooltip.ChartPaint=this;tooltip.Type=2;//指标
|
|
3596
3606
|
return true;}}for(var i in this.InfoTooltipRect){var item=this.InfoTooltipRect[i];if(!item.Rect)continue;var rect=item.Rect;this.Canvas.beginPath();this.Canvas.rect(rect.X,rect.Y,rect.Width,rect.Height);if(this.Canvas.isPointInPath(x,y)){//JSConsole.Chart.Log('[ChartKLine::GetTooltipData] info ', item);
|
|
@@ -3599,7 +3609,7 @@ return true;}}for(var i in this.TooltipRect){var rect=this.TooltipRect[i][1];thi
|
|
|
3599
3609
|
return true;}}return false;};//计算当天显示数据的最大最小值
|
|
3600
3610
|
this.GetMaxMin=function(){if(this.DrawType==14){if(this.FFKChart&&this.FFKChart.GetMaxMin){return this.FFKChart.GetMaxMin(this);}}var xPointCount=this.ChartFrame.XPointCount;var start=this.Data.DataOffset;if(this.ChartFrame.GlobalOption&&this.ChartFrame.GlobalOption.IsValueFullRange){start=0;xPointCount=this.Data.Data.length;}var range={Max:null,Min:null};if(this.DrawType==1||this.DrawType==4)// 1=收盘价线 4=收盘价面积图
|
|
3601
3611
|
{for(var i=start,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j){var data=this.Data.Data[i];if(!IFrameSplitOperator.IsNumber(data.Close))continue;if(range.Max==null)range.Max=data.Close;if(range.Min==null)range.Min=data.Close;if(range.Max<data.Close)range.Max=data.Close;if(range.Min>data.Close)range.Min=data.Close;}}else{for(var i=start,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j){var data=this.Data.Data[i];if(data.Open==null||data.High==null||data.Low==null||data.Close==null)continue;if(this.DrawType==5&&data.OrderFlow&&IFrameSplitOperator.IsNumber(data.OrderFlow.PriceOffset)){var high=data.High;var low=data.Low;if(IFrameSplitOperator.IsNonEmptyArray(data.OrderFlow.High)){for(var k=0;k<data.OrderFlow.High.length;++k){var item=data.OrderFlow.High[k];if(high<item.Price)high=item.Price;}}if(IFrameSplitOperator.IsNonEmptyArray(data.OrderFlow.Low)){for(var k=0;k<data.OrderFlow.Low.length;++k){var item=data.OrderFlow.Low[k];if(low>item.Price)low=item.Price;}}high+=data.OrderFlow.PriceOffset;low-=data.OrderFlow.PriceOffset;if(range.Max==null)range.Max=high;if(range.Min==null)range.Min=low;if(range.Max<high)range.Max=high;if(range.Min>low)range.Min=low;}else{if(range.Max==null)range.Max=data.High;if(range.Min==null)range.Min=data.Low;if(range.Max<data.High)range.Max=data.High;if(range.Min>data.Low)range.Min=data.Low;}}}return range;};//获取所有的价格
|
|
3602
|
-
this.GetAllPrice=function(){var xPointCount=this.ChartFrame.XPointCount;var setPrice=new _set2.default();for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j){var data=this.Data.Data[i];if(data.Open==null||data.High==null||data.Low==null||data.Close==null)continue;var value=data.Close;setPrice.add(value);}var aryPrice=[];var
|
|
3612
|
+
this.GetAllPrice=function(){var xPointCount=this.ChartFrame.XPointCount;var setPrice=new _set2.default();for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j){var data=this.Data.Data[i];if(data.Open==null||data.High==null||data.Low==null||data.Close==null)continue;var value=data.Close;setPrice.add(value);}var aryPrice=[];var _iteratorNormalCompletion5=true;var _didIteratorError5=false;var _iteratorError5=undefined;try{for(var _iterator5=(0,_getIterator3.default)(setPrice),_step5;!(_iteratorNormalCompletion5=(_step5=_iterator5.next()).done);_iteratorNormalCompletion5=true){var item=_step5.value;aryPrice.push(item);}}catch(err){_didIteratorError5=true;_iteratorError5=err;}finally{try{if(!_iteratorNormalCompletion5&&_iterator5.return){_iterator5.return();}}finally{if(_didIteratorError5){throw _iteratorError5;}}}aryPrice.sort(function(a,b){return a-b;});//排序 升序
|
|
3603
3613
|
return aryPrice;};this.DrawLastPointEvent=function(ptLast){if(!this.GetEventCallback)return;//通知外部绘制最后一个点
|
|
3604
3614
|
var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_DRAW_KLINE_LAST_POINT);if(event){var kWidth={Data:this.ChartFrame.DataWidth,Distance:this.ChartFrame.DistanceWidth};if(ptLast)var data={LastPoint:{X:ptLast.X,Y:ptLast.Y,XLeft:ptLast.XLeft,XRight:ptLast.XRight},KItem:ptLast.KItem,DrawType:this.DrawType,KWidth:kWidth,ChartRight:ptLast.ChartRight};else var data={LastPoint:null,KItem:null,KWidth:kWidth};event.Callback(event,data,this);}};this.DrawOrderFlow=function(){var isHScreen=this.ChartFrame.IsHScreen===true;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;if(isHScreen){var border=this.ChartBorder.GetHScreenBorder();xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;chartright=border.BottomEx;}var upColor=this.UpColor;var downColor=this.DownColor;var unchagneColor=this.UnchagneColor;this.ShowRange.Start=this.Data.DataOffset;this.ShowRange.End=this.ShowRange.Start;this.ShowRange.DataCount=0;this.ShowRange.ShowCount=xPointCount;this.DrawKRange.Start=this.Data.DataOffset;var ptLast=null;this.DrawOrderFlowHBar();//横向柱子
|
|
3605
3615
|
for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j,xOffset+=dataWidth+distanceWidth,++this.ShowRange.DataCount){var data=this.Data.Data[i];this.ShowRange.End=i;if(data.Open==null||data.High==null||data.Low==null||data.Close==null)continue;var left=xOffset;var right=xOffset+dataWidth;if(right>chartright)break;var x=left+(right-left)/2;var yLow=this.GetYFromData(data.Low,false);var yHigh=this.GetYFromData(data.High,false);var yOpen=this.GetYFromData(data.Open,false);var yClose=this.GetYFromData(data.Close,false);var y=yHigh;this.DrawKRange.End=i;var yKline={Low:yLow,High:yHigh,Open:yOpen,Close:yClose};var xKLine={Left:left,Center:x,Right:right,DataWidth:dataWidth};this.DrawOrderFlowBar(data.OrderFlow,data,xKLine,yKline,isHScreen);if(this.IsShowKTooltip&&!isHScreen)//添加tooltip区域
|
|
@@ -4881,7 +4891,7 @@ this.ID=Guid();//唯一的ID
|
|
|
4881
4891
|
return aryData;};this.BuildKLineMap=function(){var isHScreen=this.ChartSubFrame.IsHScreen===true;var dataWidth=this.ChartSubFrame.DataWidth;var distanceWidth=this.ChartSubFrame.DistanceWidth;var xOffset=this.ChartBorder.GetLeft()+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;if(isHScreen)xOffset=this.ChartBorder.GetTop()+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=this.ChartBorder.GetRight();if(isHScreen)chartright=this.ChartBorder.GetBottom();var mapKLine={Data:new _map2.default(),Start:null,End:null};//Key: date / date time, Value:索引
|
|
4882
4892
|
for(var i=this.KData.DataOffset,j=0;i<this.KData.Data.length&&j<this.XPointCount;++i,++j,xOffset+=dataWidth+distanceWidth){var kItem=this.KData.Data[i];var left=xOffset;var right=xOffset+dataWidth;if(right>chartright)break;var x=left+(right-left)/2;if(j==0)mapKLine.XLeft=left;mapKLine.XRight=right;var value={Index:i,ShowIndex:j,X:x,Right:right,Left:left,Date:kItem.Date};if(ChartData.IsMinutePeriod(this.Period,true)){var key='Date:'+kItem.Date+' Time:'+kItem.Time;value.Time=kItem.Time;}else{var key='Date:'+kItem.Date;}mapKLine.Data.set(key,value);//保存下起始和结束位置
|
|
4883
4893
|
if(j==0)mapKLine.Start=value;mapKLine.End=value;}return mapKLine;};this.GetBGCoordinate=function(item,kLineMap){var xLeft=null,xRight=null;var isMinutePeriod=ChartData.IsMinutePeriod(this.Period,true);var bSingleDate=false;//JSConsole.Chart.Log('[BackgroundPaint::GetBGCoordinate] item ', item);
|
|
4884
|
-
if(isMinutePeriod){if(item.Start&&item.End&&item.Start.Date==item.End.Date&&item.Start.Time==item.End.Time)bSingleDate=true;}else{if(item.Start&&item.End&&item.Start.Date==item.End.Date)bSingleDate=true;}if(bSingleDate){if(isMinutePeriod)var key='Date:'+item.Start.Date+' Time:'+item.Start.Time;else var key='Date:'+item.Start.Date;if(!kLineMap.Data.has(key))return null;var findItem=kLineMap.Data.get(key);xLeft=findItem.Left;xRight=findItem.Right;return{Left:xLeft,Right:xRight,Width:xRight-xLeft};}if(item.Start){if(isMinutePeriod)var key='Date:'+item.Start.Date+' Time:'+item.Start.Time;else var key='Date:'+item.Start.Date;if(kLineMap.Data.has(key)){var findItem=kLineMap.Data.get(key);xLeft=findItem.Left;}else{if(isMinutePeriod){if(item.Start.Date<kLineMap.Start.Date||item.Start.Date==kLineMap.Start.Date&&item.Start.Time<=kLineMap.Start.Time){xLeft=kLineMap.Start.Left;}else{var
|
|
4894
|
+
if(isMinutePeriod){if(item.Start&&item.End&&item.Start.Date==item.End.Date&&item.Start.Time==item.End.Time)bSingleDate=true;}else{if(item.Start&&item.End&&item.Start.Date==item.End.Date)bSingleDate=true;}if(bSingleDate){if(isMinutePeriod)var key='Date:'+item.Start.Date+' Time:'+item.Start.Time;else var key='Date:'+item.Start.Date;if(!kLineMap.Data.has(key))return null;var findItem=kLineMap.Data.get(key);xLeft=findItem.Left;xRight=findItem.Right;return{Left:xLeft,Right:xRight,Width:xRight-xLeft};}if(item.Start){if(isMinutePeriod)var key='Date:'+item.Start.Date+' Time:'+item.Start.Time;else var key='Date:'+item.Start.Date;if(kLineMap.Data.has(key)){var findItem=kLineMap.Data.get(key);xLeft=findItem.Left;}else{if(isMinutePeriod){if(item.Start.Date<kLineMap.Start.Date||item.Start.Date==kLineMap.Start.Date&&item.Start.Time<=kLineMap.Start.Time){xLeft=kLineMap.Start.Left;}else{var _iteratorNormalCompletion6=true;var _didIteratorError6=false;var _iteratorError6=undefined;try{for(var _iterator6=(0,_getIterator3.default)(kLineMap.Data),_step6;!(_iteratorNormalCompletion6=(_step6=_iterator6.next()).done);_iteratorNormalCompletion6=true){var kItem=_step6.value;var value=kItem[1];if(value.Date>item.Start.Date||value.Date==item.Start.Date&&value.Time>item.Start.Time){xLeft=value.Left;break;}}}catch(err){_didIteratorError6=true;_iteratorError6=err;}finally{try{if(!_iteratorNormalCompletion6&&_iterator6.return){_iterator6.return();}}finally{if(_didIteratorError6){throw _iteratorError6;}}}}}else{if(item.Start.Date<=kLineMap.Start.Date){xLeft=kLineMap.Start.Left;}else{var _iteratorNormalCompletion7=true;var _didIteratorError7=false;var _iteratorError7=undefined;try{for(var _iterator7=(0,_getIterator3.default)(kLineMap.Data),_step7;!(_iteratorNormalCompletion7=(_step7=_iterator7.next()).done);_iteratorNormalCompletion7=true){var kItem=_step7.value;var value=kItem[1];if(value.Date>item.Start.Date){xLeft=value.Left;break;}}}catch(err){_didIteratorError7=true;_iteratorError7=err;}finally{try{if(!_iteratorNormalCompletion7&&_iterator7.return){_iterator7.return();}}finally{if(_didIteratorError7){throw _iteratorError7;}}}}}}}else{xLeft=kLineMap.XLeft;}if(item.End){if(isMinutePeriod)var key='Date:'+item.End.Date+' Time:'+item.End.Time;else var key='Date:'+item.End.Date;if(kLineMap.Data.has(key)){var findItem=kLineMap.Data.get(key);xRight=findItem.Right;}else{if(isMinutePeriod){if(item.End.Date<kLineMap.Start.Date||item.End.Date==kLineMap.Start.Date&&item.End.Time<kLineMap.Start.Time)return null;if(item.End.Date<kLineMap.End.Date||item.End.Date==kLineMap.End.Date&&item.End.Time>=kLineMap.End.Time){xRight=kLineMap.End.Right;}else{var previousX=null;var _iteratorNormalCompletion8=true;var _didIteratorError8=false;var _iteratorError8=undefined;try{for(var _iterator8=(0,_getIterator3.default)(kLineMap.Data),_step8;!(_iteratorNormalCompletion8=(_step8=_iterator8.next()).done);_iteratorNormalCompletion8=true){var kItem=_step8.value;var value=kItem[1];if(value.Date>item.End.Date||value.Date==item.End.Date&&value.Time>item.End.Time){xRight=previousX;break;}previousX=value.Right;}}catch(err){_didIteratorError8=true;_iteratorError8=err;}finally{try{if(!_iteratorNormalCompletion8&&_iterator8.return){_iterator8.return();}}finally{if(_didIteratorError8){throw _iteratorError8;}}}}}else{if(item.End.Date<kLineMap.Start.Date)return null;if(item.End.Date<=kLineMap.End.Date){xRight=kLineMap.End.Right;}else{var previousX=null;var _iteratorNormalCompletion9=true;var _didIteratorError9=false;var _iteratorError9=undefined;try{for(var _iterator9=(0,_getIterator3.default)(kLineMap.Data),_step9;!(_iteratorNormalCompletion9=(_step9=_iterator9.next()).done);_iteratorNormalCompletion9=true){var kItem=_step9.value;var value=kItem[1];if(value.Date>item.End.Date){xRight=previousX;break;}previousX=value.Right;}}catch(err){_didIteratorError9=true;_iteratorError9=err;}finally{try{if(!_iteratorNormalCompletion9&&_iterator9.return){_iterator9.return();}}finally{if(_didIteratorError9){throw _iteratorError9;}}}}}}}else{xRight=kLineMap.XRight;}if(xLeft==null||xRight==null)return null;return{Left:xLeft,Right:xRight,Width:xRight-xLeft};};}function MinuteBackgroundPaint(){this.newMethod=IExtendChartPainting;//派生
|
|
4885
4895
|
this.newMethod();delete this.newMethod;this.ClassName='MinuteBackgroundPaint';this.IsDynamic=true;this.IsCallbackDraw=false;//在回调函数里绘制, 不在Draw()中绘制
|
|
4886
4896
|
this.HQChart;this.Data;//背景数据 { [Date:, Text:, TextColor:, Font: }
|
|
4887
4897
|
//this.Data=[ {Date:20210421, Text:"测试测试测试!!!!!"}];
|
|
@@ -5046,7 +5056,8 @@ this.FixedYMaxMin;//{ Max, Min} 固定Y轴最大最小值
|
|
|
5046
5056
|
this.EnableZoomUpDown=false;//上下左右拖拽
|
|
5047
5057
|
this.LastMaxMin;//当前显示的最高最低范围
|
|
5048
5058
|
this.PercentageTextFormat=0;//0=显示第1行 1=显示2行 2=单行格式: 价格/百分比
|
|
5049
|
-
this.IsEnableDragY=function(){return this.CoordinateType==0||this.CoordinateType==1;};this.Operator=function(){var splitData={};splitData.Max=this.Frame.HorizontalMax;splitData.Min=this.Frame.HorizontalMin;splitData.Count=this.SplitCount;if(
|
|
5059
|
+
this.IsEnableDragY=function(){return this.CoordinateType==0||this.CoordinateType==1;};this.Operator=function(){var splitData={};splitData.Max=this.Frame.HorizontalMax;splitData.Min=this.Frame.HorizontalMin;splitData.Count=this.SplitCount;if(this.Frame.YMaxMin)//原始的数据范围
|
|
5060
|
+
{var item=this.Frame.YMaxMin;if(IFrameSplitOperator.IsNumber(item.Max)&&IFrameSplitOperator.IsNumber(item.Min)){splitData.Max=item.Max;splitData.Min=item.Min;}}if(splitData.Max==splitData.Min)//如果一样上下扩大下
|
|
5050
5061
|
{splitData.Max+=splitData.Max*0.01;splitData.Min-=splitData.Min*0.01;}var isFixedMaxMin=this.FixedYMaxMin&&IFrameSplitOperator.IsNumber(this.FixedYMaxMin.Max)&&IFrameSplitOperator.IsNumber(this.FixedYMaxMin.Min);if(isFixedMaxMin){splitData.Max=this.FixedYMaxMin.Max;splitData.Min=this.FixedYMaxMin.Min;//JSConsole.Chart.Log(`[FrameSplitKLinePriceY::Operator] FixedYMaxMin.Max=${this.FixedYMaxMin.Max} FixedYMaxMin.Min=${this.FixedYMaxMin.Min} `);
|
|
5051
5062
|
}else if(this.DefaultYMaxMin)//指定最小的Y轴范围
|
|
5052
5063
|
{var range=this.DefaultYMaxMin;if(IFrameSplitOperator.IsNumber(range.Max)){if(splitData.Min>range.Max)splitData.Min=range.Max;else if(splitData.Max<range.Max)splitData.Max=range.Max;}if(IFrameSplitOperator.IsNumber(range.Min)){if(splitData.Max<range.Min)splitData.Max=range.Min;else if(splitData.Min>range.Min)splitData.Min=range.Min;}}splitData.Interval=(splitData.Max-splitData.Min)/(splitData.Count-1);var pixelTatio=GetDevicePixelRatio();//获取设备的分辨率
|
|
@@ -5120,7 +5131,8 @@ this.EnableRemoveZero=true;this.LineType=null;//线段样式
|
|
|
5120
5131
|
this.IgnoreYValue=null;//在这个数组里的数字不显示在刻度上
|
|
5121
5132
|
this.FixedYMaxMin;//{ Max, Min} 固定Y轴最大最小值
|
|
5122
5133
|
this.EnableZoomUpDown=false;this.IsBeforeData=false;this.BeforeOpenData;this.IsAfterData=false;this.AfterCloseData;this.ShareAfterVol=0;this.MultiDayBeforeOpenData;this.MultiDayAfterCloseData;this.OverlayIdentify;this.HQChart;this.OverlayIndex;//叠加指标信息
|
|
5123
|
-
this.IsEnableDragY=function(){return true;};this.GetFloatPrecision=function(value,floatPrecision){if(value>this.FLOATPRECISION_RANGE[0])return floatPrecision;if(floatPrecision<0)return 2;for(;floatPrecision<this.FLOATPRECISION_RANGE.length;++floatPrecision){if(value>this.FLOATPRECISION_RANGE[floatPrecision])break;}return floatPrecision;};this.Operator=function(){var splitData={};splitData.Max=this.Frame.HorizontalMax;splitData.Min=this.Frame.HorizontalMin;if(
|
|
5134
|
+
this.IsEnableDragY=function(){return true;};this.GetFloatPrecision=function(value,floatPrecision){if(value>this.FLOATPRECISION_RANGE[0])return floatPrecision;if(floatPrecision<0)return 2;for(;floatPrecision<this.FLOATPRECISION_RANGE.length;++floatPrecision){if(value>this.FLOATPRECISION_RANGE[floatPrecision])break;}return floatPrecision;};this.Operator=function(){var splitData={};splitData.Max=this.Frame.HorizontalMax;splitData.Min=this.Frame.HorizontalMin;if(this.Frame.YMaxMin)//原始的数据范围
|
|
5135
|
+
{var item=this.Frame.YMaxMin;if(IFrameSplitOperator.IsNumber(item.Max)&&IFrameSplitOperator.IsNumber(item.Min)){splitData.Max=item.Max;splitData.Min=item.Min;}}if(splitData.Max==splitData.Min)//如果一样上下扩大下
|
|
5124
5136
|
{if(splitData.Max==0){splitData.Max=1;splitData.Min=-1;}else{splitData.Max+=splitData.Max*0.01;splitData.Min-=splitData.Min*0.01;}}var isFixedMaxMin=false;if(this.FixedYMaxMin&&IFrameSplitOperator.IsNumber(this.FixedYMaxMin.Max)&&IFrameSplitOperator.IsNumber(this.FixedYMaxMin.Min))isFixedMaxMin=true;if(isFixedMaxMin){splitData.Max=this.FixedYMaxMin.Max;splitData.Min=this.FixedYMaxMin.Min;}else if(this.DefaultYMaxMin)//指定最小的Y轴范围
|
|
5125
5137
|
{var range=this.DefaultYMaxMin;if(IFrameSplitOperator.IsNumber(range.Max)){if(splitData.Min>range.Max)splitData.Min=range.Max;else if(splitData.Max<range.Max)splitData.Max=range.Max;}if(IFrameSplitOperator.IsNumber(range.Min)){if(splitData.Max<range.Min)splitData.Max=range.Min;else if(splitData.Min>range.Min)splitData.Min=range.Min;}}if(this.Frame.YSpecificMaxMin){splitData.Count=this.Frame.YSpecificMaxMin.Count;splitData.Interval=(splitData.Max-splitData.Min)/(splitData.Count-1);}else if(this.SplitType==1||isFixedMaxMin){splitData.Count=this.SplitCount;splitData.Interval=(splitData.Max-splitData.Min)/(splitData.Count-1);}else if(this.SplitType==2){splitData.Max=100;splitData.Min=0;splitData.Count=this.SplitCount;splitData.Interval=(splitData.Max-splitData.Min)/(splitData.Count-1);}else{splitData.Count=this.SplitCount;splitData.Interval=(splitData.Max-splitData.Min)/(splitData.Count-1);this.IntegerCoordinateSplit(splitData);}this.Frame.HorizontalMax=splitData.Max;this.Frame.HorizontalMin=splitData.Min;this.Frame.HorizontalInfo=[];if(this.Frame.YSplitScale)//固定坐标
|
|
5126
5138
|
{for(var i in this.Frame.YSplitScale){var value=this.Frame.YSplitScale[i];var coordinate=new CoordinateInfo();coordinate.Value=value;if(IFrameSplitOperator.IsNumber(this.LineType))coordinate.LineType=this.LineType;var absValue=Math.abs(value);if(absValue<0.0000000001){coordinate.Message[1]=0;}else if(absValue<this.FLOATPRECISION_RANGE[this.FLOATPRECISION_RANGE.length-1]){coordinate.Message[1]=value.toExponential(2).toString();}else{var floatPrecision=this.GetFloatPrecision(absValue,this.FloatPrecision);//数据比小数位数还小, 调整小数位数
|
|
@@ -5745,17 +5757,17 @@ var value=null;var preVaildItem=null;if(item.DataType=="StraightLine")//直线
|
|
|
5745
5757
|
{preVaildItem=this.GetPreVaildItem(item.Data.Data,dataIndex);if(!preVaildItem)return null;preText=this.FormatValue(preVaildItem.Item,item);if(item.Name){var dyValue=this.GetDynamicOutValue(item.Name,preText);if(dyValue)preText=dyValue;}valueText='--('+preText+')';return{Text:valueText,ArrayText:aryText};}if(value==null)return null;if(item.DataType=="HistoryData-Vol"){value=value.Vol;valueText=this.FormatValue(value,item);}else if(item.DataType=="MultiReport"){valueText=this.FormatMultiReport(value,item);}else if(item.DataType=="MULTI_POINT_LINE"){valueText=this.FromatMultiDataLine(value,item);if(!valueText)return null;}else if(item.DataType=="ChartStackedBar"){aryText=this.FromatStackedBarTitle(value,item);if(!aryText)return null;return{Text:null,ArrayText:aryText};}else if(g_ScriptIndexChartFactory.Has(item.DataType))//外部挂接
|
|
5746
5758
|
{var find=g_ScriptIndexChartFactory.Get(item.DataType);if(find&&find.FormatTitleCallback)return find.FormatTitleCallback(value,item,dataIndex);}else{if(this.GetEventCallback){var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_FORMAT_INDEX_OUT_TEXT);if(event){var data={Item:item,Index:titleIndex,Data:this.Data,FrameID:this.Frame.Identify,DataIndex:dataIndex,Value:value,Out:null};event.Callback(event,data,this);if(data.Out)return data.Out;}}var arrow=null;if(this.IsShowUpDownArrow){var preValue=null;if(dataIndex-1>=0)preValue=item.Data.Data[dataIndex-1];if(IFrameSplitOperator.IsNumber(preValue)){if(preValue>value)arrow='↓';else if(preValue<value)arrow='↑';else arrow='→';}}valueText=this.FormatValue(value,item);if(item.Name){var dyValue=this.GetDynamicOutValue(item.Name,valueText);if(dyValue)valueText=dyValue;}if(arrow)valueText+=arrow;}}return{Text:valueText,ArrayText:aryText};};//获取上一个有效数据
|
|
5747
5759
|
this.GetPreVaildItem=function(data,start){for(var i=start;i>=0;--i){var item=data[i];if(item)return{Item:item,Index:i};}return null;};this.DrawSelectedLine=function(left,bottom,textWidth){this.Canvas.save();var fontHeight=this.GetFontHeight();this.Canvas.strokeStyle=this.SelectedColor;var lineWidth=4;var lineBottom=ToFixedPoint2(lineWidth,bottom+fontHeight/2);this.Canvas.lineWidth=lineWidth;this.Canvas.beginPath();this.Canvas.moveTo(left,lineBottom);this.Canvas.lineTo(left+textWidth,lineBottom);this.Canvas.stroke();this.Canvas.restore();};this.DrawOverlayIndexSingleLine=function(moveonPoint,mouseStatus)//叠加指标1个指标一行
|
|
5748
|
-
{var pixelRatio=GetDevicePixelRatio();var border=this.Frame.GetBorder();if(this.Frame.IsHScreen===true){var left=1;var top=2*pixelRatio;var right=this.Frame.ChartBorder.GetHeight();var bottom=this.Frame.ChartBorder.GetWidthEx();}else{var top=border.TopTitle+2*pixelRatio;var left=this.Frame.ChartBorder.GetLeft()+this.MerginLeft;var right=border.Right;var bottom=border.Bottom;}var lineSpace=this.OverlayIndexType.LineSpace*pixelRatio;var x=left,y=top;var fontHeight=GetFontHeight(this.Canvas,this.Font,"擎");y=top+fontHeight/2;var
|
|
5760
|
+
{var pixelRatio=GetDevicePixelRatio();var border=this.Frame.GetBorder();if(this.Frame.IsHScreen===true){var left=1;var top=2*pixelRatio;var right=this.Frame.ChartBorder.GetHeight();var bottom=this.Frame.ChartBorder.GetWidthEx();}else{var top=border.TopTitle+2*pixelRatio;var left=this.Frame.ChartBorder.GetLeft()+this.MerginLeft;var right=border.Right;var bottom=border.Bottom;}var lineSpace=this.OverlayIndexType.LineSpace*pixelRatio;var x=left,y=top;var fontHeight=GetFontHeight(this.Canvas,this.Font,"擎");y=top+fontHeight/2;var _iteratorNormalCompletion10=true;var _didIteratorError10=false;var _iteratorError10=undefined;try{for(var _iterator10=(0,_getIterator3.default)(this.OverlayIndex),_step10;!(_iteratorNormalCompletion10=(_step10=_iterator10.next()).done);_iteratorNormalCompletion10=true){item=_step10.value;var overlayItem=item[1];var overlayID=item[0];var toolbarInfo={Width:0,YCenter:y,ID:overlayID};this.DrawOverlayToolbar(overlayItem,toolbarInfo,moveonPoint,mouseStatus);if(!overlayItem.Frame.IsShowIndexTitle)continue;x=left+toolbarInfo.Width;this.Canvas.font=this.Font;this.Canvas.textAlign="left";this.Canvas.textBaseline="middle";if(overlayItem.Title&&this.IsShowOverlayIndexName){var textWidth=this.Canvas.measureText(overlayItem.Title).width+2;if(x+textWidth<right){if(this.OverlayIndexType.BGColor){this.Canvas.fillStyle=this.OverlayIndexType.BGColor;var rtBG={Left:x,Top:y-fontHeight/2,Width:textWidth,Height:fontHeight+lineSpace};//保存下标题的坐标
|
|
5749
5761
|
this.Canvas.fillRect(rtBG.Left,rtBG.Top,rtBG.Width,rtBG.Height);}if(this.IsSelectedChart(overlayID))this.DrawSelectedLine(x,y,textWidth,overlayItem.Title);this.Canvas.fillStyle=this.TitleColor;this.Canvas.fillText(overlayItem.Title,x,y,textWidth);}x+=textWidth;}for(var i=0;i<overlayItem.Data.length;++i){var item=overlayItem.Data[i];if(!item||!item.Data||!item.Data.Data||!item.Name)continue;if(item.IsVisible===false)continue;if(item.Data.Data.length<=0)continue;var value=null;var valueText=null;var aryText=null;if(item.DataType=="StraightLine")//直线只有1个数据
|
|
5750
5762
|
{value=item.Data.Data[0];valueText=this.FormatValue(value,item);}else{var index=Math.abs(this.CursorIndex-0.5);index=parseInt(index.toFixed(0));if(this.IsKLineFrame)index=this.CursorIndex;var dataIndex=item.Data.DataOffset+index;if(dataIndex>=item.Data.Data.length)dataIndex=item.Data.Data.length-1;if(dataIndex<0)continue;value=item.Data.Data[dataIndex];if(value==null)continue;if(item.DataType=="HistoryData-Vol"){value=value.Vol;valueText=this.FormatValue(value,item);}else if(item.DataType=="MultiReport"){valueText=this.FormatMultiReport(value,item);}else if(item.DataType=="ChartStackedBar"){aryText=this.FromatStackedBarTitle(value,item);if(!aryText)continue;}else{valueText=this.FormatValue(value,item);}}if(aryText){var text;for(var k=0;k<aryText.length;++k){var titleItem=aryText[k];if(titleItem.Name)text=titleItem.Name+":"+titleItem.Text;else text=titleItem.Text;var textWidth=this.Canvas.measureText(text).width+2;//后空2个像素
|
|
5751
5763
|
if(x+textWidth>right)break;if(this.OverlayIndexType.BGColor){this.Canvas.fillStyle=this.OverlayIndexType.BGColor;var rtBG={Left:x,Top:y-fontHeight/2,Width:textWidth,Height:fontHeight+lineSpace};//保存下标题的坐标
|
|
5752
5764
|
this.Canvas.fillRect(rtBG.Left,rtBG.Top,rtBG.Width,rtBG.Height);}this.Canvas.fillStyle=titleItem.Color;this.Canvas.fillText(text,x,y,textWidth);x+=textWidth;}}else{var text=valueText;if(item.Name){var dyTitle=this.GetDynamicOutName(item.Name,overlayID);if(dyTitle)text=dyTitle+":"+valueText;else text=item.Name+":"+valueText;}var textWidth=this.Canvas.measureText(text).width+2;//后空2个像素
|
|
5753
5765
|
if(x+textWidth>right)break;if(this.OverlayIndexType.BGColor){this.Canvas.fillStyle=this.OverlayIndexType.BGColor;var rtBG={Left:x,Top:y-fontHeight/2,Width:textWidth,Height:fontHeight+lineSpace};//保存下标题的坐标
|
|
5754
|
-
this.Canvas.fillRect(rtBG.Left,rtBG.Top,rtBG.Width,rtBG.Height);}this.Canvas.fillStyle=item.Color;this.Canvas.fillText(text,x,y,textWidth);x+=textWidth;}}y+=fontHeight+lineSpace;if(y+fontHeight+lineSpace>=bottom)break;}}catch(err){
|
|
5766
|
+
this.Canvas.fillRect(rtBG.Left,rtBG.Top,rtBG.Width,rtBG.Height);}this.Canvas.fillStyle=item.Color;this.Canvas.fillText(text,x,y,textWidth);x+=textWidth;}}y+=fontHeight+lineSpace;if(y+fontHeight+lineSpace>=bottom)break;}}catch(err){_didIteratorError10=true;_iteratorError10=err;}finally{try{if(!_iteratorNormalCompletion10&&_iterator10.return){_iterator10.return();}}finally{if(_didIteratorError10){throw _iteratorError10;}}}};this.DrawOverlayIndex=function(left)//叠加指标标题
|
|
5755
5767
|
{var bottom=this.Frame.ChartBorder.GetTop()+this.Frame.ChartBorder.TitleHeight/2;//上下居中显示
|
|
5756
|
-
var right=this.Frame.ChartBorder.GetRight();if(this.Frame.IsHScreen===true){bottom=-this.Frame.ChartBorder.TitleHeight/2;right=this.Frame.ChartBorder.GetHeight();}if(left>right)return;var spaceWidth=5*GetDevicePixelRatio();var drawLeft=left;var
|
|
5768
|
+
var right=this.Frame.ChartBorder.GetRight();if(this.Frame.IsHScreen===true){bottom=-this.Frame.ChartBorder.TitleHeight/2;right=this.Frame.ChartBorder.GetHeight();}if(left>right)return;var spaceWidth=5*GetDevicePixelRatio();var drawLeft=left;var _iteratorNormalCompletion11=true;var _didIteratorError11=false;var _iteratorError11=undefined;try{for(var _iterator11=(0,_getIterator3.default)(this.OverlayIndex),_step11;!(_iteratorNormalCompletion11=(_step11=_iterator11.next()).done);_iteratorNormalCompletion11=true){item=_step11.value;left+=spaceWidth;var overlayItem=item[1];var overlayID=item[0];if(overlayItem.Title&&this.IsShowOverlayIndexName){this.Canvas.fillStyle=this.TitleColor;var textWidth=this.Canvas.measureText(overlayItem.Title).width+2;drawLeft=left;left+=textWidth;if(left>right)break;this.Canvas.fillText(overlayItem.Title,drawLeft,bottom,textWidth);if(this.IsSelectedChart(overlayID))this.DrawSelectedLine(drawLeft,bottom,textWidth);}for(var i in overlayItem.Data){var item=overlayItem.Data[i];if(!item||!item.Data||!item.Data.Data||!item.Name)continue;if(item.Data.Data.length<=0)continue;var value=null;var valueText=null;if(item.DataType=="StraightLine")//直线只有1个数据
|
|
5757
5769
|
{value=item.Data.Data[0];valueText=this.FormatValue(value,item);}else{var index=Math.abs(this.CursorIndex-0.5);index=parseInt(index.toFixed(0));if(this.IsKLineFrame)index=this.CursorIndex;var dataIndex=item.Data.DataOffset+index;if(dataIndex>=item.Data.Data.length)dataIndex=item.Data.Data.length-1;if(dataIndex<0)continue;value=item.Data.Data[dataIndex];if(value==null)continue;if(item.DataType=="HistoryData-Vol"){value=value.Vol;valueText=this.FormatValue(value,item);}else if(item.DataType=="MultiReport"){valueText=this.FormatMultiReport(value,item);}else{valueText=this.FormatValue(value,item);}}this.Canvas.fillStyle=item.Color;var text=item.Name+":"+valueText;var textWidth=this.Canvas.measureText(text).width+2;//后空2个像素
|
|
5758
|
-
drawLeft=left;left+=textWidth;if(left>right)break;this.Canvas.fillText(text,drawLeft,bottom,textWidth);}if(left>right)break;}}catch(err){
|
|
5770
|
+
drawLeft=left;left+=textWidth;if(left>right)break;this.Canvas.fillText(text,drawLeft,bottom,textWidth);}if(left>right)break;}}catch(err){_didIteratorError11=true;_iteratorError11=err;}finally{try{if(!_iteratorNormalCompletion11&&_iterator11.return){_iterator11.return();}}finally{if(_didIteratorError11){throw _iteratorError11;}}}};this.HScreenDraw=function(){var border=this.Frame.ChartBorder.GetHScreenBorder();var xText=this.Frame.ChartBorder.GetRightTitle();var yText=border.TopEx;this.Canvas.translate(xText,yText);this.Canvas.rotate(90*Math.PI/180);var left=1;var bottom=-this.Frame.ChartBorder.TitleHeight/2;//上下居中显示
|
|
5759
5771
|
var right=this.Frame.ChartBorder.GetHeight();this.Canvas.textAlign="left";this.Canvas.textBaseline="middle";this.Canvas.font=this.Font;var pixelRatio=GetDevicePixelRatio();if(this.Title&&this.IsShowIndexName){var textWidth=this.Canvas.measureText(this.Title).width+2;if(this.IsDrawTitleBG){var title=this.Title;if(this.IsShowNameArrow)title+='▼';var textWidth=this.Canvas.measureText(title).width;var bgHeight=this.Canvas.measureText("擎").width+4*pixelRatio;var bgWidth=textWidth+4*pixelRatio;this.TitleRect={Top:border.Top,Left:this.Frame.ChartBorder.GetRightTitle()+this.Frame.ChartBorder.TitleHeight/2-bgHeight/2,Width:bgHeight,Height:bgWidth};//保存下标题的坐标
|
|
5760
5772
|
this.Canvas.fillStyle=this.BGColor;var drawRect={Left:left,Top:bottom-bgHeight/2,Width:bgWidth,Height:bgHeight};this.Canvas.fillRect(drawRect.Left,drawRect.Top,drawRect.Width,drawRect.Height);if(this.BGBorderColor){this.Canvas.strokeStyle=this.BGBorderColor;this.Canvas.strokeRect(ToFixedPoint(drawRect.Left),ToFixedPoint(drawRect.Top),ToFixedRect(drawRect.Width),ToFixedRect(drawRect.Height));}this.Canvas.fillStyle=this.TitleColor;this.Canvas.fillText(title,left+2*pixelRatio,bottom,textWidth);left+=bgWidth+2*pixelRatio;left+=this.TitleSpace;}else{this.Canvas.fillStyle=this.TitleColor;this.Canvas.fillText(this.Title,left,bottom,textWidth);left+=textWidth;left+=this.TitleSpace;}}if(this.ArgumentsText&&this.IsShowIndexName){var textWidth=this.Canvas.measureText(this.ArgumentsText).width+2;this.Canvas.fillStyle=this.TitleColor;this.Canvas.fillText(this.ArgumentsText,left,bottom,textWidth);left+=textWidth;left+=this.TitleSpace;}var isShowLastData=this.IsShowLastData();var lockRect=this.Frame.GetLockRect();if(lockRect)//指标上锁区域不显示动态标题
|
|
5761
5773
|
{var index=Math.abs(this.CursorIndex-0.5);if(this.IsKLineFrame)index=this.CursorIndex;var x=this.Frame.GetXFromIndex(index.toFixed(0));if(x>=lockRect.Top)return;if(isShowLastData)return;}for(var i in this.Data){var item=this.Data[i];var outText=this.GetTitleItem(item,isShowLastData);if(!outText)continue;var valueText=outText.Text;var aryText=outText.ArrayText;if(aryText){var text;for(var k=0;k<aryText.length;++k){var titleItem=aryText[k];if(titleItem.Name)text=titleItem.Name+":"+titleItem.Text;else text=titleItem.Text;var space=this.ParamSpace*GetDevicePixelRatio();var textWidth=this.Canvas.measureText(text).width+space;if(left+textWidth>right)break;this.Canvas.fillStyle=titleItem.Color;this.Canvas.fillText(text,left,bottom,textWidth);left+=textWidth;}}else{this.Canvas.fillStyle=item.Color;var text=valueText;if(item.Name){var dyTitle=this.GetDynamicOutName(item.Name);if(dyTitle)text=dyTitle+":"+valueText;else text=item.Name+":"+valueText;}var space=this.ParamSpace*GetDevicePixelRatio();var textWidth=this.Canvas.measureText(text).width+space;//后空2个像素
|
|
@@ -6373,13 +6385,13 @@ var startIndex=this.Frame.GetXData(ptStart.X,false);var endIndex=this.Frame.GetX
|
|
|
6373
6385
|
this.StorageKey;this.GetEventCallback;//事件回调
|
|
6374
6386
|
this.Load=function(key)//从本地读取画图工具
|
|
6375
6387
|
{if(!key)return;this.StorageKey=key;var cacheValue=localStorage[this.StorageKey];JSConsole.Chart.Log('[ChartDrawStorage::Load] Load to localStorage, key='+this.StorageKey+', cache='+cacheValue);if(!cacheValue)return;if(typeof cacheValue!="string")return;var saveData=JSON.parse(cacheValue);for(var i in saveData){var item=saveData[i];var drawMap=new _map2.default();for(var j in item.Value){var drawItem=item.Value[j];drawMap.set(drawItem.Key,drawItem.Value);}this.DrawData.set(item.Key,drawMap);}};this.Save=function()//把数据保存到本地
|
|
6376
|
-
{if(!this.StorageKey)return;var saveData=[];var
|
|
6388
|
+
{if(!this.StorageKey)return;var saveData=[];var _iteratorNormalCompletion12=true;var _didIteratorError12=false;var _iteratorError12=undefined;try{for(var _iterator12=(0,_getIterator3.default)(this.DrawData),_step12;!(_iteratorNormalCompletion12=(_step12=_iterator12.next()).done);_iteratorNormalCompletion12=true){var stock=_step12.value;var key=stock[0];var value=stock[1];var itemData={Key:key,Value:[]};var _iteratorNormalCompletion13=true;var _didIteratorError13=false;var _iteratorError13=undefined;try{for(var _iterator13=(0,_getIterator3.default)(value),_step13;!(_iteratorNormalCompletion13=(_step13=_iterator13.next()).done);_iteratorNormalCompletion13=true){var drawItem=_step13.value;if(drawItem[1]&&drawItem[1].EnableSave===false)continue;itemData.Value.push({Key:drawItem[0],Value:drawItem[1]});}}catch(err){_didIteratorError13=true;_iteratorError13=err;}finally{try{if(!_iteratorNormalCompletion13&&_iterator13.return){_iterator13.return();}}finally{if(_didIteratorError13){throw _iteratorError13;}}}if(IFrameSplitOperator.IsNonEmptyArray(itemData.Value))saveData.push(itemData);}}catch(err){_didIteratorError12=true;_iteratorError12=err;}finally{try{if(!_iteratorNormalCompletion12&&_iterator12.return){_iterator12.return();}}finally{if(_didIteratorError12){throw _iteratorError12;}}}JSConsole.Chart.Log('[ChartDrawStorage::Save] save to localStorage, key='+this.StorageKey);var strData=(0,_stringify2.default)(saveData);localStorage[this.StorageKey]=strData;};this.GetItemKey=function(obj)//生成每个画图工具的key
|
|
6377
6389
|
{var strKey=obj.Symbol+'-'+obj.Period;return strKey;};this.SaveDrawData=function(drawPicture)//保存一个画图工具
|
|
6378
6390
|
{var strKey=this.GetItemKey(drawPicture);var data=drawPicture.ExportStorageData();if(!data)return;if(this.DrawData.has(strKey))//更新
|
|
6379
6391
|
{JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] Upate: key, drawPicture, data',strKey,drawPicture,data);this.DrawData.get(strKey).set(data.Guid,data);}else//新增
|
|
6380
6392
|
{JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] Insert: key, drawPicture, data',strKey,drawPicture,data);var newData=new _map2.default();newData.set(data.Guid,data);this.DrawData.set(strKey,newData);}JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] All draw data: ',this.DrawData);this.Save();};this.DeleteDrawData=function(drawPicture)//删除一个画图工具
|
|
6381
6393
|
{var strKey=this.GetItemKey(drawPicture);if(!this.DrawData.has(strKey))return;var mapDraw=this.DrawData.get(strKey);if(!mapDraw.has(drawPicture.Guid))return;mapDraw.delete(drawPicture.Guid);this.Save();};this.Clear=function(){this.DrawData=new _map2.default();this.Save();};this.GetDrawData=function(obj)//获取已有的画图工具数据{Symbol: , Period:, }
|
|
6382
|
-
{var data=[];var strKey=this.GetItemKey(obj);if(!this.DrawData.has(strKey))return data;var stockData=this.DrawData.get(strKey);var
|
|
6394
|
+
{var data=[];var strKey=this.GetItemKey(obj);if(!this.DrawData.has(strKey))return data;var stockData=this.DrawData.get(strKey);var _iteratorNormalCompletion14=true;var _didIteratorError14=false;var _iteratorError14=undefined;try{for(var _iterator14=(0,_getIterator3.default)(stockData),_step14;!(_iteratorNormalCompletion14=(_step14=_iterator14.next()).done);_iteratorNormalCompletion14=true){var item=_step14.value;data.push(item[1]);}}catch(err){_didIteratorError14=true;_iteratorError14=err;}finally{try{if(!_iteratorNormalCompletion14&&_iterator14.return){_iterator14.return();}}finally{if(_didIteratorError14){throw _iteratorError14;}}}return data;};}/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
6383
6395
|
// 数据分割
|
|
6384
6396
|
// [0]=Start起始 [1]=End结束 [2]=FixInterval修正的间隔 [3]=Increase
|
|
6385
6397
|
//
|
|
@@ -8487,7 +8499,7 @@ this.newMethod('财务粉饰');delete this.newMethod;this.Index=new Array(new In
|
|
|
8487
8499
|
this.ApiUrl=g_JSChartResource.Index.StockHistoryDayApiUrl;this.Index[0].LineColor=g_JSChartResource.Index.LineColor[0];this.Index[1].LineColor='rgb(105,105,105)';this.CreateChart=function(id){if(id==0)return new ChartStraightArea();return new ChartLineMultiData();};this.GetOutData=function(){return{Data:this.Data};};//请求数据
|
|
8488
8500
|
this.RequestData=function(hqChart,windowIndex,hisData){var self=this;var param={HQChart:hqChart,WindowIndex:windowIndex,HistoryData:hisData};this.Data=[];if(param.HQChart.Period!=2)//周期数据
|
|
8489
8501
|
{this.NotSupport(param.HQChart,param.WindowIndex,"只支持月线");param.HQChart.Draw();this.SendEvent(hqChart,windowIndex,hisData,"只支持月线");return false;}var aryField=["finance.benford","announcement2.quarter","announcement1.quarter","announcement3.quarter","announcement4.quarter"];var aryCondition=[{item:["date","int32","gte","20130101"]},{item:["announcement1.year","int32","gte",0,"announcement2.year","int32","gte",0,"announcement3.year","int32","gte",0,"announcement4.year","int32","gte",0,"or"]}];//请求数据
|
|
8490
|
-
JSNetwork.HttpRequest({url:this.ApiUrl,data:{"symbol":[param.HQChart.Symbol],"field":aryField,"condition":aryCondition},type:"post",dataType:"json",async:true,success:function success(recvData){self.RecvData(recvData,param);self.SendEvent(hqChart,windowIndex,hisData);}});return true;};this.JsonDataToMapSingleData=function(recvData){var stockData=recvData.stock[0].stockday;var mapData=new _map2.default();for(var i in stockData){var item=stockData[i];var indexData=new SingleData();indexData.Date=item.date;indexData.Value=new Array();if(item.finance1!=null&&item.announcement1!=null){var year=item.announcement1.year;var quarter=item.announcement1.quarter;var value=item.finance1.benford;indexData.Value.push({Year:year,Quarter:quarter,Value:value});}if(item.finance2!=null&&item.announcement2!=null){var _year=item.announcement2.year;var _quarter=item.announcement2.quarter;var _value=item.finance2.benford;indexData.Value.push({Year:_year,Quarter:_quarter,Value:_value});}if(item.finance3!=null&&item.announcement3!=null){var _year2=item.announcement3.year;var _quarter2=item.announcement3.quarter;var _value2=item.finance3.benford;indexData.Value.push({Year:_year2,Quarter:_quarter2,Value:_value2});}if(item.finance4!=null&&item.announcement4!=null){var _year3=item.announcement4.year;var _quarter3=item.announcement4.quarter;var _value3=item.finance4.benford;indexData.Value.push({Year:_year3,Quarter:_quarter3,Value:_value3});}mapData.set(indexData.Date,indexData);}var aryData=new Array();var
|
|
8502
|
+
JSNetwork.HttpRequest({url:this.ApiUrl,data:{"symbol":[param.HQChart.Symbol],"field":aryField,"condition":aryCondition},type:"post",dataType:"json",async:true,success:function success(recvData){self.RecvData(recvData,param);self.SendEvent(hqChart,windowIndex,hisData);}});return true;};this.JsonDataToMapSingleData=function(recvData){var stockData=recvData.stock[0].stockday;var mapData=new _map2.default();for(var i in stockData){var item=stockData[i];var indexData=new SingleData();indexData.Date=item.date;indexData.Value=new Array();if(item.finance1!=null&&item.announcement1!=null){var year=item.announcement1.year;var quarter=item.announcement1.quarter;var value=item.finance1.benford;indexData.Value.push({Year:year,Quarter:quarter,Value:value});}if(item.finance2!=null&&item.announcement2!=null){var _year=item.announcement2.year;var _quarter=item.announcement2.quarter;var _value=item.finance2.benford;indexData.Value.push({Year:_year,Quarter:_quarter,Value:_value});}if(item.finance3!=null&&item.announcement3!=null){var _year2=item.announcement3.year;var _quarter2=item.announcement3.quarter;var _value2=item.finance3.benford;indexData.Value.push({Year:_year2,Quarter:_quarter2,Value:_value2});}if(item.finance4!=null&&item.announcement4!=null){var _year3=item.announcement4.year;var _quarter3=item.announcement4.quarter;var _value3=item.finance4.benford;indexData.Value.push({Year:_year3,Quarter:_quarter3,Value:_value3});}mapData.set(indexData.Date,indexData);}var aryData=new Array();var _iteratorNormalCompletion15=true;var _didIteratorError15=false;var _iteratorError15=undefined;try{for(var _iterator15=(0,_getIterator3.default)(mapData),_step15;!(_iteratorNormalCompletion15=(_step15=_iterator15.next()).done);_iteratorNormalCompletion15=true){var item=_step15.value;aryData.push(item[1]);}}catch(err){_didIteratorError15=true;_iteratorError15=err;}finally{try{if(!_iteratorNormalCompletion15&&_iterator15.return){_iterator15.return();}}finally{if(_didIteratorError15){throw _iteratorError15;}}}return aryData;};this.RecvData=function(recvData,param){JSConsole.Chart.Log(recvData);if(recvData.stock==null||recvData.stock.length<=0)return;var aryData=this.JsonDataToMapSingleData(recvData);var aryFittingData=param.HistoryData.GetFittingMonthData(aryData);var bindData=new ChartData();bindData.Data=aryFittingData;bindData.Period=param.HQChart.Period;//周期
|
|
8491
8503
|
bindData.Right=param.HQChart.Right;//复权
|
|
8492
8504
|
this.Data=bindData.GetValue();this.BindData(param.HQChart,param.WindowIndex,param.HistoryData);param.HQChart.UpdataDataoffset();//更新数据偏移
|
|
8493
8505
|
param.HQChart.UpdateFrameMaxMin();//调整坐标最大 最小值
|
|
@@ -9605,11 +9617,11 @@ this.ErrorHandler=ErrorHandler;this.GetDataJobList=function()//下载数据任
|
|
|
9605
9617
|
{var jobs=[];if(this.IsNeedSymbolData)jobs.push({ID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_SYMBOL_DATA});if(this.IsNeedIndexData)jobs.push({ID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_INDEX_DATA});if(this.IsNeedLatestIndexData)jobs.push({ID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_LATEST_INDEX_DATA});//最新的个股行情数据
|
|
9606
9618
|
for(var i=0;i<this.Dynainfo.length;++i){var item=this.Dynainfo[i];jobs.push(item);}//涨跌停家数统计
|
|
9607
9619
|
for(var i in this.NeedBlockIncreaseData){jobs.push(this.NeedBlockIncreaseData[i]);}//加载融资融券
|
|
9608
|
-
var
|
|
9609
|
-
}catch(err){
|
|
9610
|
-
var
|
|
9611
|
-
}catch(err){
|
|
9612
|
-
}catch(err){
|
|
9620
|
+
var _iteratorNormalCompletion16=true;var _didIteratorError16=false;var _iteratorError16=undefined;try{for(var _iterator16=(0,_getIterator3.default)(this.IsNeedMarginData),_step16;!(_iteratorNormalCompletion16=(_step16=_iterator16.next()).done);_iteratorNormalCompletion16=true){var jobID=_step16.value;jobs.push({ID:jobID});}//加载北上资金
|
|
9621
|
+
}catch(err){_didIteratorError16=true;_iteratorError16=err;}finally{try{if(!_iteratorNormalCompletion16&&_iterator16.return){_iterator16.return();}}finally{if(_didIteratorError16){throw _iteratorError16;}}}for(var i in this.NeedHK2SHSZData){jobs.push(this.NeedHK2SHSZData[i]);}//加载新闻统计
|
|
9622
|
+
var _iteratorNormalCompletion17=true;var _didIteratorError17=false;var _iteratorError17=undefined;try{for(var _iterator17=(0,_getIterator3.default)(this.IsNeedNewsAnalysisData),_step17;!(_iteratorNormalCompletion17=(_step17=_iterator17.next()).done);_iteratorNormalCompletion17=true){var jobID=_step17.value;jobs.push({ID:jobID});}//行情其他数据
|
|
9623
|
+
}catch(err){_didIteratorError17=true;_iteratorError17=err;}finally{try{if(!_iteratorNormalCompletion17&&_iterator17.return){_iterator17.return();}}finally{if(_didIteratorError17){throw _iteratorError17;}}}var _iteratorNormalCompletion18=true;var _didIteratorError18=false;var _iteratorError18=undefined;try{for(var _iterator18=(0,_getIterator3.default)(this.IsNeedSymbolExData),_step18;!(_iteratorNormalCompletion18=(_step18=_iterator18.next()).done);_iteratorNormalCompletion18=true){var jobID=_step18.value;jobs.push({ID:jobID});}//获取截面数据下载任务
|
|
9624
|
+
}catch(err){_didIteratorError18=true;_iteratorError18=err;}finally{try{if(!_iteratorNormalCompletion18&&_iterator18.return){_iterator18.return();}}finally{if(_didIteratorError18){throw _iteratorError18;}}}var _iteratorNormalCompletion19=true;var _didIteratorError19=false;var _iteratorError19=undefined;try{for(var _iterator19=(0,_getIterator3.default)(this.IsNeedSectionFinance),_step19;!(_iteratorNormalCompletion19=(_step19=_iterator19.next()).done);_iteratorNormalCompletion19=true){var item=_step19.value;jobs.push({ID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_SECTION_SF,SF:item});}}catch(err){_didIteratorError19=true;_iteratorError19=err;}finally{try{if(!_iteratorNormalCompletion19&&_iterator19.return){_iterator19.return();}}finally{if(_didIteratorError19){throw _iteratorError19;}}}for(var i in this.IsAPIData){var item=this.IsAPIData[i];jobs.push(item);}for(var i in this.ExecuteIndex){var item=this.ExecuteIndex[i];jobs.push(item);}for(var i in this.OtherSymbolData){var item=this.OtherSymbolData[i];jobs.push(item);}for(var i in this.PeriodSymbolData){var item=this.PeriodSymbolData[i];jobs.push(item);}for(var i in this.FunctionData){var item=this.FunctionData[i];jobs.push(item);}return jobs;};this.VerifySymbolVariable=function(varName,token){var setIndexName=new _set2.default(['INDEXA','INDEXC','INDEXH','INDEXL',"INDEXO","INDEXV",'INDEXDEC','INDEXADV']);if(setIndexName.has(varName)){this.IsNeedIndexData=true;return;}var setSymbolDataName=new _set2.default(['CLOSE','C','VOL','V','OPEN','O','HIGH','H','LOW','L','AMOUNT','AMO','VOLINSTK']);if(setSymbolDataName.has(varName)){this.IsNeedSymbolData=true;return;}if(varName==='VOLR'){if(!this.IsNeedSymbolExData.has(JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_VOLR_DATA))this.IsNeedSymbolExData.add(JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_VOLR_DATA);}//CAPITAL流通股本(手), EXCHANGE 换手率, TOTALCAPITAL 总股本(手)
|
|
9613
9625
|
var setVariantName=new _set2.default(["CAPITAL","TOTALCAPITAL","EXCHANGE","HYBLOCK","DYBLOCK","GNBLOCK","FGBLOCK","ZSBLOCK","ZHBLOCK","ZDBLOCK","HYZSCODE","GNBLOCKNUM","FGBLOCKNUM","ZSBLOCKNUM","ZHBLOCKNUM","ZDBLOCKNUM","HYSYL","HYSJL"]);if(setVariantName.has(varName)){var item={ID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_VARIANT,VariantName:varName};if(token)item.Token={Index:token.Start,Line:token.LineNumber};this.FunctionData.push(item);return;}if(varName=='FROMOPEN'){this.IsNeedLatestIndexData=true;return;}if(varName=='ADVANCE'||varName=="DECLINE"){var item={ID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_INDEX_INCREASE_DATA,IsSelfSymbol:true,FunctionName:varName};if(token)item.Token={Index:token.Start,Line:token.LineNumber};this.NeedBlockIncreaseData.push(item);return;}if(varName.indexOf('#')>0){var aryWrods=varName.split('#');if(aryWrods.length!=2){var errorMessage=varName+', \u8DE8\u5468\u671F\u8BED\u6CD5\u9519\u8BEF, \u53D8\u91CF\u540D#\u5468\u671F';this.ThrowUnexpectedToken(token,errorMessage);}else{var VAR_NAME=["C","CLOSE","O","OPEN","H","HIGH","L","LOW","AMOUNT","AMO","VOL","V","VOLINSTK"];if(VAR_NAME.indexOf(aryWrods[0])<0){var errorMessage=varName+', \u8DE8\u5468\u671F\u8BED\u6CD5\u9519\u8BEF, \u6570\u636E\u53EA\u652F\u6301\'OPEN,HIGH,LOW,CLOSE,VOL,AMOUNT,VOLINSTK\'';this.ThrowUnexpectedToken(token,errorMessage);}var VAR_PERIOD_NAME=["MIN1","MIN5","MIN15","MIN30","MIN60","MIN120","MIN240","DAY","WEEK","MONTH","SEASON","YEAR","HALFYEAR","WEEK2","MULTIDAY","DAY2","DAY3","DAY4","DAY5","DAY6","DAY7","DAY8","DAY9","DAY10","DAY11","DAY12","DAY13","DAY14","DAY15"];if(VAR_PERIOD_NAME.indexOf(aryWrods[1])<0){var errorMessage=varName+', \u8DE8\u5468\u671F\u8BED\u6CD5\u9519\u8BEF\uFF0C \u5468\u671F\u53EA\u652F\u6301\'MIN1,MIN5,MIN15,MIN30,MIN60,DAY,WEEK,MONTH,SEASON,YEAR\'';this.ThrowUnexpectedToken(token,errorMessage);}var item={ID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_SYMBOL_PERIOD_DATA,VarName:varName,ValueName:aryWrods[0],PeriodName:aryWrods[1]};if(token)item.Token={Index:token.Start,Line:token.LineNumber};this.PeriodSymbolData.push(item);}return;}if(g_JSComplierResource.IsCustomVariant(varName))//自定义函数
|
|
9614
9626
|
{var item={VariantName:varName,ID:JS_EXECUTE_JOB_ID.JOB_CUSTOM_VARIANT_DATA};if(token)item.Token={Index:token.Start,Line:token.LineNumber};this.FunctionData.push(item);return;}};this.VerifySymbolLiteral=function(value,token){if(IFrameSplitOperator.IsString(value)){if(value.indexOf('$')>0){var aryValue=value.split('$');if(aryValue.length!=2)return;var item={Literal:value,ID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_OTHER_SYMBOL_DATA};if(token)item.Token={Index:token.Start,Line:token.LineNumber};this.OtherSymbolData.push(item);}}};this.VerifySymbolFunction=function(callee,args,token){//自定义函数 可以覆盖系统内置函数
|
|
9615
9627
|
if(g_JSComplierResource.IsCustomFunction(callee.Name)){var item={FunctionName:callee.Name,ID:JS_EXECUTE_JOB_ID.JOB_CUSTOM_FUNCTION_DATA,Args:args};if(token)item.Token={Index:token.Start,Line:token.LineNumber};this.FunctionData.push(item);return;}if(callee.Name=='DYNAINFO'){var item={ID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_SYMBOL_LATEST_DATA,Args:args,FunctionName:callee.Name};this.Dynainfo.push(item);return;}//财务函数
|
|
@@ -10437,7 +10449,7 @@ this.ALL=function(data,n){if(n<=0)n=1;var result=[];if(Array.isArray(data)){if(n
|
|
|
10437
10449
|
}return result;};//格式化字符串 "{0}-{1}", C, O; 小数位数 {0:0.00}
|
|
10438
10450
|
this.STRFORMAT=function(strFormat,args,node){var aryParam=strFormat.match(/{[0-9.:]+}/g);if(!IFrameSplitOperator.IsNonEmptyArray(aryParam))return null;var mapParam=new _map2.default();//key=index, value={Text}
|
|
10439
10451
|
var maxIndex=-1;for(var i=0;i<aryParam.length;++i){var item=aryParam[i];if(item.length<3)continue;var value=item.slice(1,item.length-1);var index=-1,decimal=-1;if(value.indexOf(":")>0){var aryTemp=value.split(":");if(aryTemp){if(aryTemp[0])index=parseInt(aryTemp[0]);if(aryTemp[1]){if(aryTemp[1].indexOf(".")>=0){var zeroCount=0;var strTemp=aryTemp[1];for(var j=strTemp.length-1;j>=0;--j){if(strTemp[j]=="0")++zeroCount;else break;}if(zeroCount>0)decimal=zeroCount;}else if(aryTemp[1]=="0"){decimal=0;}}}}else{index=parseInt(value);}if(index<0)continue;var paramItem={Src:item,Index:index,Text:null,Decimal:null};if(decimal>=0)paramItem.Decimal=decimal;if(maxIndex<index)maxIndex=index;mapParam.set(index,paramItem);}var isArray=false;//是否输出数组字符串
|
|
10440
|
-
var maxCount=0;for(var i=1;i<args.length;++i){var item=args[i];if(Array.isArray(item)){isArray=true;if(maxCount<item.length)maxCount=item.length;}}if(isArray){var result=[];for(var i=0;i<maxCount;++i){var strItem=strFormat;var
|
|
10452
|
+
var maxCount=0;for(var i=1;i<args.length;++i){var item=args[i];if(Array.isArray(item)){isArray=true;if(maxCount<item.length)maxCount=item.length;}}if(isArray){var result=[];for(var i=0;i<maxCount;++i){var strItem=strFormat;var _iteratorNormalCompletion20=true;var _didIteratorError20=false;var _iteratorError20=undefined;try{for(var _iterator20=(0,_getIterator3.default)(mapParam),_step20;!(_iteratorNormalCompletion20=(_step20=_iterator20.next()).done);_iteratorNormalCompletion20=true){var item=_step20.value;var paramInfo=item[1];var paramItem=args[paramInfo.Index+1];var text="null";if(paramItem){if(Array.isArray(paramItem)){var value=paramItem[i];if(value){if(IFrameSplitOperator.IsNumber(paramInfo.Decimal))text=''+value.toFixed(paramInfo.Decimal);else text=''+value;}}else{text=''+paramItem;}}strItem=strItem.replace(paramInfo.Src,text);}}catch(err){_didIteratorError20=true;_iteratorError20=err;}finally{try{if(!_iteratorNormalCompletion20&&_iterator20.return){_iterator20.return();}}finally{if(_didIteratorError20){throw _iteratorError20;}}}result[i]=strItem;}return result;}else{var result=strFormat;var _iteratorNormalCompletion21=true;var _didIteratorError21=false;var _iteratorError21=undefined;try{for(var _iterator21=(0,_getIterator3.default)(mapParam),_step21;!(_iteratorNormalCompletion21=(_step21=_iterator21.next()).done);_iteratorNormalCompletion21=true){var item=_step21.value;var paramInfo=item[1];var paramItem=args[paramInfo.Index+1];var text="null";if(paramItem){text=''+paramItem;}result=result.replace(paramInfo.Src,text);}}catch(err){_didIteratorError21=true;_iteratorError21=err;}finally{try{if(!_iteratorNormalCompletion21&&_iterator21.return){_iterator21.return();}}finally{if(_didIteratorError21){throw _iteratorError21;}}}return result;}};//函数调用
|
|
10441
10453
|
this.CallFunction=function(name,args,node,symbolData){switch(name){case'MAX':case"MAX6":return this.MAX(args,node);case'MIN':case"MIN6":return this.MIN(args,node);case'REF':return this.REF(args[0],args[1]);case"REFV":return this.REFV(args[0],args[1]);case'REFX':return this.REFX(args[0],args[1]);case"REFXV":return this.REFXV(args[0],args[1]);case"REFX1"://文华函数
|
|
10442
10454
|
return this.REFX(args[0],args[1]);case'ABS':return this.ABS(args[0]);case'MA':return this.MA(args[0],args[1]);case"EMA":return this.EMA(args[0],args[1]);case"SMA":return this.SMA(args[0],args[1],args[2]);case"DMA":return this.DMA(args[0],args[1]);case"XMA":return this.XMA(args[0],args[1]);case'EXPMA':return this.EXPMA(args[0],args[1]);case'EXPMEMA':return this.EXPMEMA(args[0],args[1]);case'COUNT':return this.COUNT(args[0],args[1]);case'LLV':return this.LLV(args[0],args[1]);case"LV":return this.LV(args[0],args[1]);case'LLVBARS':return this.LLVBARS(args[0],args[1]);case'HHV':return this.HHV(args[0],args[1]);case'HV':return this.HV(args[0],args[1]);case'HHVBARS':return this.HHVBARS(args[0],args[1]);case'MULAR':return this.MULAR(args[0],args[1]);case'CROSS':return this.CROSS(args[0],args[1]);case'LONGCROSS':return this.LONGCROSS(args[0],args[1],args[2]);case"ISVALID":return this.ISVALID(args[0]);case"CROSSDOWN":return this.CROSSDOWN(args[0],args[1]);case"CROSSUP":return this.CROSSUP(args[0],args[1]);case'AVEDEV':return this.AVEDEV(args[0],args[1]);case'STD':return this.STD(args[0],args[1]);case"STDDEV":return this.STDDEV(args[0],args[1]);case'IF':case'IFF':case"IFELSE":return this.IF(args[0],args[1],args[2]);case'IFN':return this.IFN(args[0],args[1],args[2]);case'NOT':return this.NOT(args[0]);case'SUM':return this.SUM(args[0],args[1]);case'RANGE':return this.RANGE(args[0],args[1],args[2]);case'EXIST':return this.EXIST(args[0],args[1]);case'EXISTR':return this.EXISTR(args[0],args[1],args[2]);case'FILTER':return this.FILTER(args[0],args[1]);case'TFILTER':return this.TFILTER(args[0],args[1],args[2]);case'SLOPE':return this.SLOPE(args[0],args[1]);case'BARSLAST':return this.BARSLAST(args[0]);case'BARSCOUNT':return this.BARSCOUNT(args[0]);case'BARSSINCEN':return this.BARSSINCEN(args[0],args[1]);case'BARSSINCE':return this.BARSSINCE(args[0]);case'LAST':return this.LAST(args[0],args[1],args[2]);case'EVERY':return this.EVERY(args[0],args[1]);case'DEVSQ':return this.DEVSQ(args[0],args[1]);case'ZIG':return this.ZIG(args[0],args[1]);case'TROUGHBARS':return this.TROUGHBARS(args[0],args[1],args[2]);case"TROUGH":return this.TROUGH(args[0],args[1],args[2]);case'PEAKBARS':return this.PEAKBARS(args[0],args[1],args[2]);case'PEAK':return this.PEAK(args[0],args[1],args[2]);case'COST':return this.COST(args[0]);case'WINNER':return this.WINNER(args[0],node);case'PPART':return this.PPART(args[0],node);case"COSTEX":return this.COSTEX(args[0],args[1],node);case"LWINNER":return this.LWINNER(args[0],args[1],node);case"PWINNER":return this.PWINNER(args[0],args[1],node);case'FORCAST':return this.FORCAST(args[0],args[1]);case"TSMA":return this.TSMA(args[0],args[1]);case'STDP':return this.STDP(args[0],args[1]);case'VAR':return this.VAR(args[0],args[1]);case'VARP':return this.VARP(args[0],args[1]);case'UPNDAY':return this.UPNDAY(args[0],args[1]);case'DOWNNDAY':return this.DOWNNDAY(args[0],args[1]);case'NDAY':return this.NDAY(args[0],args[1],args[2]);case'RELATE':return this.RELATE(args[0],args[1],args[2]);case'COVAR':return this.COVAR(args[0],args[1],args[2]);case'BETA':return this.BETA(args[0]);case'BETA2':return this.BETA2(args[0],args[1],args[2]);case'WMA':return this.WMA(args[0],args[1]);case'MEMA':return this.MEMA(args[0],args[1]);case'SUMBARS':return this.SUMBARS(args[0],args[1]);case'REVERSE':return this.REVERSE(args[0]);case'SAR':return this.SAR(args[0],args[1],args[2]);case'SARTURN':return this.SARTURN(args[0],args[1],args[2]);case'BACKSET':return this.BACKSET(args[0],args[1]);case'BETWEEN':return this.BETWEEN(args[0],args[1],args[2]);case'STRCAT':return this.STRCAT(args[0],args[1]);case'CON2STR':return this.CON2STR(args[0],args[1]);case"VAR2STR":return this.VAR2STR(args[0],args[1]);case"VARCAT":return this.VARCAT(args[0],args[1]);case"STRSPACE":return this.STRSPACE(args[0]);case"FINDSTR":return this.FINDSTR(args[0],args[1]);case"STRCMP":return this.STRCMP(args[0],args[1]);case"STRLEN":return this.STRLEN(args[0]);case"STRFORMAT":return this.STRFORMAT(args[0],args,node);case'DTPRICE':return this.DTPRICE(args[0],args[1]);case'ZTPRICE':return this.ZTPRICE(args[0],args[1]);case'MOD':return this.MOD(args[0],args[1]);case'POW':return this.POW(args[0],args[1]);case'CEILING':return this.CEILING(args[0]);case'FLOOR':return this.FLOOR(args[0]);case'FRACPART':return this.FRACPART(args[0]);case"SIGN":return this.SIGN(args[0]);case'BARSLASTCOUNT':return this.BARSLASTCOUNT(args[0]);case'INTPART':return this.INTPART(args[0]);case"CONST":return this.CONST(args[0]);case"TOPRANGE":return this.TOPRANGE(args[0]);case"LOWRANGE":return this.LOWRANGE(args[0]);case"FINDLOW":return this.FINDLOW(args[0],args[1],args[2],args[3]);case"FINDLOWBARS":return this.FINDLOWBARS(args[0],args[1],args[2],args[3]);case"FINDHIGH":return this.FINDHIGH(args[0],args[1],args[2],args[3]);case"FINDHIGHBARS":return this.FINDHIGHBARS(args[0],args[1],args[2],args[3]);case"BARSNEXT":return this.BARSNEXT(args[0]);case"HOD":return this.HOD(args[0],args[1]);case"LOD":return this.LOD(args[0],args[1]);case"AMA":return this.AMA(args[0],args[1]);case"TMA":return this.TMA(args[0],args[1],args[2]);case"ROUND":return this.ROUND(args[0]);case"ROUND2":return this.ROUND2(args[0],args[1]);case"TRMA":return this.TRMA(args[0],args[1]);case"VALUEWHEN":return this.VALUEWHEN(args[0],args[1]);case"HARMEAN":return this.HARMEAN(args[0],args[1]);case"DATETODAY":return this.DATETODAY(args[0]);case"DAYTODATE":return this.DAYTODATE(args[0]);case"TIMETOSEC":return this.TIMETOSEC(args[0]);case"SECTOTIME":return this.SECTOTIME(args[0]);case"ANY":return this.ANY(args[0],args[1]);case"ALL":return this.ALL(args[0],args[1]);case"TESTSKIP":return this.TESTSKIP(args[0],node);case"SUMBARS":return this.SUMBARS(args[0],args[1]);case"ALIGNRIGHT":return this.ALIGNRIGHT(args[0]);//三角函数
|
|
10443
10455
|
case'ATAN':return this.Trigonometric(args[0],Math.atan);case'ACOS':return this.ACOS(args[0]);case'ASIN':return this.ASIN(args[0]);case'COS':return this.Trigonometric(args[0],Math.cos);case'SIN':return this.Trigonometric(args[0],Math.sin);case'TAN':return this.Trigonometric(args[0],Math.tan);case'LN':return this.Trigonometric(args[0],Math.log);case'LOG':return this.Trigonometric(args[0],_log2.default);case'EXP':return this.Trigonometric(args[0],Math.exp);case'SQRT':return this.Trigonometric(args[0],Math.sqrt);case"RAND":return this.RAND(args[0]);default:this.ThrowUnexpectedNode(node,'函数'+name+'不存在',name);}};//调用自定义函数 返回数据格式{Out:输出数据, Draw:绘图数据(可选)}
|
|
@@ -12258,7 +12270,7 @@ for(var i=0;i<data.data.length;++i){var item=data.data[i];var symbol=item[0];var
|
|
|
12258
12270
|
this.GetStockData=function(symbol){if(!this.MapStockData)return null;if(!this.MapStockData.has(symbol))return null;return this.MapStockData.get(symbol);};this.GetBlockData=function(symbol){if(!this.BlockData)return null;if(!this.BlockData.has(symbol))return null;return this.BlockData.get(symbol);};//obj={ ID:, Color: , Time:, Count: }
|
|
12259
12271
|
this.SetFlashBGItem=function(symbol,obj){var item={ID:obj.ID,Color:obj.Color,Count:1};if(IFrameSplitOperator.IsNumber(obj.Count))item.Count=obj.Count;if(IFrameSplitOperator.IsNumber(obj.Time))item.Time=obj.Time;else item.Time=Date.now();if(this.FlashBG.has(symbol)){var stockItem=this.FlashBG.get(symbol);stockItem.LastTime=item.Time;stockItem.Data.set(item.ID,item);}else{var stockItem={LastTime:item.Time,Data:new _map2.default([[item.ID,item]])};this.FlashBG.set(symbol,stockItem);}};this.GetFlashBGData=function(symbol,time){if(!this.FlashBG)return null;if(!this.FlashBG.has(symbol))return null;var timeDiff=3*1000;var stockItem=this.FlashBG.get(symbol);if(time-stockItem.LastTime>=timeDiff)//超时的删除
|
|
12260
12272
|
{this.FlashBG.delete(symbol);return null;}if(!stockItem.Data||stockItem.Data.size<=0){this.FlashBG.delete(symbol);return null;}var aryDelID=[];//超时需要参数的
|
|
12261
|
-
var
|
|
12273
|
+
var _iteratorNormalCompletion22=true;var _didIteratorError22=false;var _iteratorError22=undefined;try{for(var _iterator22=(0,_getIterator3.default)(stockItem.Data),_step22;!(_iteratorNormalCompletion22=(_step22=_iterator22.next()).done);_iteratorNormalCompletion22=true){var mapItem=_step22.value;var item=mapItem[1];if(time-item.Time>=timeDiff||item.Count<=0)aryDelID.push(item.ID);}}catch(err){_didIteratorError22=true;_iteratorError22=err;}finally{try{if(!_iteratorNormalCompletion22&&_iterator22.return){_iterator22.return();}}finally{if(_didIteratorError22){throw _iteratorError22;}}}if(IFrameSplitOperator.IsNonEmptyArray(aryDelID)){for(var i=0;i<aryDelID.length;++i){stockItem.Data.delete(aryDelID[i]);}if(stockItem.Data.size<=0){this.FlashBG.delete(symbol);return null;}}return stockItem;};//delay=是否延迟
|
|
12262
12274
|
this.DelayUpdateStockData=function(){var _this52=this;if(this.DelayUpdateTimer!=null){clearTimeout(this.DelayUpdateTimer);this.DelayUpdateTimer=null;}var frequency=this.DelayUpdateFrequency;this.DelayUpdateTimer=setTimeout(function(){_this52.UpdateStockData();},frequency);};this.UpdateStockData=function(){if(!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data))return;var chart=this.ChartPaint[0];if(!chart)return;if(this.SortInfo&&this.SortInfo.Field>=0&&this.SortInfo.Sort>0){var column=chart.Column[this.SortInfo.Field];if(column.Sort==2){this.RequestStockSortData(column,this.SortInfo.Field,this.SortInfo.Sort);//远程排序
|
|
12263
12275
|
return;}}var arySymbol=chart.ShowSymbol;if(!IFrameSplitOperator.IsNonEmptyArray(arySymbol))return;this.RequestStockData(arySymbol);};//下载股票数据
|
|
12264
12276
|
this.RequestStockData=function(arySymbol){var self=this;if(this.NetworkFilter){var obj={Name:'JSDealChartContainer::RequestStockData',//类名::函数名
|
|
@@ -12830,7 +12842,7 @@ hisData.Symbol=message.symbol;}var stockObj={HQDataType:HQ_DATA_TYPE.KLINE_ID,St
|
|
|
12830
12842
|
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);};}/********************************************************************************
|
|
12831
12843
|
* 版本信息输出
|
|
12832
12844
|
*
|
|
12833
|
-
*/var HQCHART_VERSION="1.1.
|
|
12845
|
+
*/var HQCHART_VERSION="1.1.12679";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();//把给外界调用的方法暴露出来
|
|
12834
12846
|
exports.default=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
|
|
12835
12847
|
// BaseIndex:BaseIndex,
|
|
12836
12848
|
// ChartLine:ChartLine,
|
package/package.json
CHANGED
package/src/jscommon/umychart.js
CHANGED
|
@@ -6671,8 +6671,137 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
|
|
|
6671
6671
|
this.Frame.ResetXYSplit();
|
|
6672
6672
|
}
|
|
6673
6673
|
|
|
6674
|
+
this.UpdateFrameMaxMinV2=function()
|
|
6675
|
+
{
|
|
6676
|
+
var mapFrame=new Map(); //key=frameid, value:{ ChartPaint:[] }
|
|
6677
|
+
for(var i=0;i<this.Frame.SubFrame.length;++i)
|
|
6678
|
+
{
|
|
6679
|
+
var subItem=this.Frame.SubFrame[i];
|
|
6680
|
+
if (!subItem || !subItem.Frame) continue;
|
|
6681
|
+
|
|
6682
|
+
var frame=subItem.Frame;
|
|
6683
|
+
var key=frame.Identify;
|
|
6684
|
+
var item=
|
|
6685
|
+
{
|
|
6686
|
+
ID:key, Frame:frame, ChartPaint:[] , Max:null, Min:null,
|
|
6687
|
+
OverlayFrame:[], //共享坐标
|
|
6688
|
+
SingleOverlay:[] //独立坐标
|
|
6689
|
+
};
|
|
6690
|
+
|
|
6691
|
+
for(var j=0;j<subItem.OverlayIndex.length;++j)
|
|
6692
|
+
{
|
|
6693
|
+
var overlayItem=subItem.OverlayIndex[j];
|
|
6694
|
+
var overlayFrame=overlayItem.Frame;
|
|
6695
|
+
if (overlayFrame.IsShareY)
|
|
6696
|
+
{
|
|
6697
|
+
if (!overlayFrame.MainFrame) continue;
|
|
6698
|
+
if (overlayFrame.IsCalculateYMaxMin===false) continue; //叠加坐标Y轴不调整
|
|
6699
|
+
item.OverlayFrame.push(overlayFrame);
|
|
6700
|
+
for(var k=0; k<overlayItem.ChartPaint.length; ++k)
|
|
6701
|
+
{
|
|
6702
|
+
var chart=overlayItem.ChartPaint[k];
|
|
6703
|
+
item.ChartPaint.push(chart);
|
|
6704
|
+
}
|
|
6705
|
+
}
|
|
6706
|
+
else
|
|
6707
|
+
{
|
|
6708
|
+
item.SingleOverlay.push(overlayItem);
|
|
6709
|
+
}
|
|
6710
|
+
|
|
6711
|
+
}
|
|
6712
|
+
|
|
6713
|
+
mapFrame.set(key, item);
|
|
6714
|
+
}
|
|
6715
|
+
|
|
6716
|
+
for(var i=0;i<this.ChartPaint.length;++i)
|
|
6717
|
+
{
|
|
6718
|
+
var chart=this.ChartPaint[i];
|
|
6719
|
+
var key=chart.ChartFrame.Identify;
|
|
6720
|
+
if (!mapFrame.has(key)) continue;
|
|
6721
|
+
|
|
6722
|
+
var finder=mapFrame.get(key);
|
|
6723
|
+
finder.ChartPaint.push(chart);
|
|
6724
|
+
}
|
|
6725
|
+
|
|
6726
|
+
for(var i=0;i<this.OverlayChartPaint.length;++i)
|
|
6727
|
+
{
|
|
6728
|
+
var chart=this.OverlayChartPaint[i];
|
|
6729
|
+
if (!chart.ChartFrame) continue;
|
|
6730
|
+
var key=chart.ChartFrame.Identify;
|
|
6731
|
+
if (!mapFrame.has(key)) continue;
|
|
6732
|
+
|
|
6733
|
+
var finder=mapFrame.get(key);
|
|
6734
|
+
finder.ChartPaint.push(chart);
|
|
6735
|
+
}
|
|
6736
|
+
|
|
6737
|
+
for(var mapItem of mapFrame)
|
|
6738
|
+
{
|
|
6739
|
+
var item=mapItem[1];
|
|
6740
|
+
var frame=item.Frame;
|
|
6741
|
+
//计算主框架最大最小
|
|
6742
|
+
for(var i=0;i<item.ChartPaint.length;++i)
|
|
6743
|
+
{
|
|
6744
|
+
var chart=item.ChartPaint[i];
|
|
6745
|
+
if (chart.IsShow==false) continue; //隐藏的图形不计算
|
|
6746
|
+
if (chart.NotSupportMessage) continue;
|
|
6747
|
+
if (!chart.ChartFrame) continue;
|
|
6748
|
+
|
|
6749
|
+
var range=chart.GetMaxMin();
|
|
6750
|
+
if (range==null || range.Max==null || range.Min==null) continue;
|
|
6751
|
+
|
|
6752
|
+
if (item.Max==null || item.Max<range.Max) item.Max=range.Max;
|
|
6753
|
+
if (item.Min==null || item.Min>range.Min) item.Min=range.Min;
|
|
6754
|
+
}
|
|
6755
|
+
|
|
6756
|
+
if (item.Frame.YSpecificMaxMin) //固定坐标
|
|
6757
|
+
{
|
|
6758
|
+
item.Min=item.Frame.YSpecificMaxMin.Max;
|
|
6759
|
+
item.Max=item.Frame.YSpecificMaxMin.Min;
|
|
6760
|
+
}
|
|
6761
|
+
|
|
6762
|
+
if (!IFrameSplitOperator.IsNumber(frame.YMaxMin.Max) || frame.YMaxMin.Max!=item.Max)
|
|
6763
|
+
{
|
|
6764
|
+
frame.YMaxMin.Max=item.Max;
|
|
6765
|
+
frame.XYSplit=true;
|
|
6766
|
+
}
|
|
6767
|
+
|
|
6768
|
+
if (!IFrameSplitOperator.IsNumber(frame.YMaxMin.Min) || frame.YMaxMin.Min!=item.Min)
|
|
6769
|
+
{
|
|
6770
|
+
frame.YMaxMin.Min=item.Min
|
|
6771
|
+
frame.XYSplit=true;
|
|
6772
|
+
}
|
|
6773
|
+
|
|
6774
|
+
if (frame.XYSplit)
|
|
6775
|
+
{
|
|
6776
|
+
var max=10, min=0;
|
|
6777
|
+
if (item.Max!=null) max=item.Max;
|
|
6778
|
+
if (item.Min!=null) min=item.Min;
|
|
6779
|
+
|
|
6780
|
+
frame.HorizontalMax=max;
|
|
6781
|
+
frame.HorizontalMin=min;
|
|
6782
|
+
}
|
|
6783
|
+
|
|
6784
|
+
//共享Y轴叠加指标同步下坐标
|
|
6785
|
+
for(var j=0;j<item.OverlayFrame.length;++j)
|
|
6786
|
+
{
|
|
6787
|
+
item.OverlayFrame[j].XYSplit=true;
|
|
6788
|
+
}
|
|
6789
|
+
|
|
6790
|
+
//独立坐标叠加指标
|
|
6791
|
+
for(var i=0;i<item.SingleOverlay.length;++i)
|
|
6792
|
+
{
|
|
6793
|
+
var overlayItem=item.SingleOverlay[i];
|
|
6794
|
+
overlayItem.UpdateFrameMaxMin();
|
|
6795
|
+
}
|
|
6796
|
+
}
|
|
6797
|
+
}
|
|
6798
|
+
|
|
6674
6799
|
this.UpdateFrameMaxMin=function()
|
|
6675
6800
|
{
|
|
6801
|
+
this.UpdateFrameMaxMinV2();
|
|
6802
|
+
|
|
6803
|
+
return;
|
|
6804
|
+
|
|
6676
6805
|
var frameMaxMinData=new Array();
|
|
6677
6806
|
|
|
6678
6807
|
var chartPaint=new Array();
|
|
@@ -9046,6 +9175,9 @@ function IChartFramePainting()
|
|
|
9046
9175
|
this.HorizontalMin; //Y轴最小值
|
|
9047
9176
|
this.XPointCount=10; //X轴数据个数
|
|
9048
9177
|
|
|
9178
|
+
//Y轴原始的最大值 最小值
|
|
9179
|
+
this.YMaxMin={ Max:null, Min:null };
|
|
9180
|
+
|
|
9049
9181
|
this.YSplitOperator; //Y轴分割
|
|
9050
9182
|
this.XSplitOperator; //X轴分割
|
|
9051
9183
|
this.Data; //主数据
|
|
@@ -43089,6 +43221,15 @@ function FrameSplitKLinePriceY()
|
|
|
43089
43221
|
splitData.Max=this.Frame.HorizontalMax;
|
|
43090
43222
|
splitData.Min=this.Frame.HorizontalMin;
|
|
43091
43223
|
splitData.Count=this.SplitCount;
|
|
43224
|
+
if (this.Frame.YMaxMin) //原始的数据范围
|
|
43225
|
+
{
|
|
43226
|
+
var item=this.Frame.YMaxMin;
|
|
43227
|
+
if (IFrameSplitOperator.IsNumber(item.Max) && IFrameSplitOperator.IsNumber(item.Min))
|
|
43228
|
+
{
|
|
43229
|
+
splitData.Max=item.Max;
|
|
43230
|
+
splitData.Min=item.Min;
|
|
43231
|
+
}
|
|
43232
|
+
}
|
|
43092
43233
|
|
|
43093
43234
|
if (splitData.Max==splitData.Min) //如果一样上下扩大下
|
|
43094
43235
|
{
|
|
@@ -43863,6 +44004,16 @@ function FrameSplitY()
|
|
|
43863
44004
|
var splitData={};
|
|
43864
44005
|
splitData.Max=this.Frame.HorizontalMax;
|
|
43865
44006
|
splitData.Min=this.Frame.HorizontalMin;
|
|
44007
|
+
|
|
44008
|
+
if (this.Frame.YMaxMin) //原始的数据范围
|
|
44009
|
+
{
|
|
44010
|
+
var item=this.Frame.YMaxMin;
|
|
44011
|
+
if (IFrameSplitOperator.IsNumber(item.Max) && IFrameSplitOperator.IsNumber(item.Min))
|
|
44012
|
+
{
|
|
44013
|
+
splitData.Max=item.Max;
|
|
44014
|
+
splitData.Min=item.Min;
|
|
44015
|
+
}
|
|
44016
|
+
}
|
|
43866
44017
|
|
|
43867
44018
|
if (splitData.Max==splitData.Min) //如果一样上下扩大下
|
|
43868
44019
|
{
|
|
@@ -10815,8 +10815,137 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
|
|
|
10815
10815
|
this.Frame.ResetXYSplit();
|
|
10816
10816
|
}
|
|
10817
10817
|
|
|
10818
|
+
this.UpdateFrameMaxMinV2=function()
|
|
10819
|
+
{
|
|
10820
|
+
var mapFrame=new Map(); //key=frameid, value:{ ChartPaint:[] }
|
|
10821
|
+
for(var i=0;i<this.Frame.SubFrame.length;++i)
|
|
10822
|
+
{
|
|
10823
|
+
var subItem=this.Frame.SubFrame[i];
|
|
10824
|
+
if (!subItem || !subItem.Frame) continue;
|
|
10825
|
+
|
|
10826
|
+
var frame=subItem.Frame;
|
|
10827
|
+
var key=frame.Identify;
|
|
10828
|
+
var item=
|
|
10829
|
+
{
|
|
10830
|
+
ID:key, Frame:frame, ChartPaint:[] , Max:null, Min:null,
|
|
10831
|
+
OverlayFrame:[], //共享坐标
|
|
10832
|
+
SingleOverlay:[] //独立坐标
|
|
10833
|
+
};
|
|
10834
|
+
|
|
10835
|
+
for(var j=0;j<subItem.OverlayIndex.length;++j)
|
|
10836
|
+
{
|
|
10837
|
+
var overlayItem=subItem.OverlayIndex[j];
|
|
10838
|
+
var overlayFrame=overlayItem.Frame;
|
|
10839
|
+
if (overlayFrame.IsShareY)
|
|
10840
|
+
{
|
|
10841
|
+
if (!overlayFrame.MainFrame) continue;
|
|
10842
|
+
if (overlayFrame.IsCalculateYMaxMin===false) continue; //叠加坐标Y轴不调整
|
|
10843
|
+
item.OverlayFrame.push(overlayFrame);
|
|
10844
|
+
for(var k=0; k<overlayItem.ChartPaint.length; ++k)
|
|
10845
|
+
{
|
|
10846
|
+
var chart=overlayItem.ChartPaint[k];
|
|
10847
|
+
item.ChartPaint.push(chart);
|
|
10848
|
+
}
|
|
10849
|
+
}
|
|
10850
|
+
else
|
|
10851
|
+
{
|
|
10852
|
+
item.SingleOverlay.push(overlayItem);
|
|
10853
|
+
}
|
|
10854
|
+
|
|
10855
|
+
}
|
|
10856
|
+
|
|
10857
|
+
mapFrame.set(key, item);
|
|
10858
|
+
}
|
|
10859
|
+
|
|
10860
|
+
for(var i=0;i<this.ChartPaint.length;++i)
|
|
10861
|
+
{
|
|
10862
|
+
var chart=this.ChartPaint[i];
|
|
10863
|
+
var key=chart.ChartFrame.Identify;
|
|
10864
|
+
if (!mapFrame.has(key)) continue;
|
|
10865
|
+
|
|
10866
|
+
var finder=mapFrame.get(key);
|
|
10867
|
+
finder.ChartPaint.push(chart);
|
|
10868
|
+
}
|
|
10869
|
+
|
|
10870
|
+
for(var i=0;i<this.OverlayChartPaint.length;++i)
|
|
10871
|
+
{
|
|
10872
|
+
var chart=this.OverlayChartPaint[i];
|
|
10873
|
+
if (!chart.ChartFrame) continue;
|
|
10874
|
+
var key=chart.ChartFrame.Identify;
|
|
10875
|
+
if (!mapFrame.has(key)) continue;
|
|
10876
|
+
|
|
10877
|
+
var finder=mapFrame.get(key);
|
|
10878
|
+
finder.ChartPaint.push(chart);
|
|
10879
|
+
}
|
|
10880
|
+
|
|
10881
|
+
for(var mapItem of mapFrame)
|
|
10882
|
+
{
|
|
10883
|
+
var item=mapItem[1];
|
|
10884
|
+
var frame=item.Frame;
|
|
10885
|
+
//计算主框架最大最小
|
|
10886
|
+
for(var i=0;i<item.ChartPaint.length;++i)
|
|
10887
|
+
{
|
|
10888
|
+
var chart=item.ChartPaint[i];
|
|
10889
|
+
if (chart.IsShow==false) continue; //隐藏的图形不计算
|
|
10890
|
+
if (chart.NotSupportMessage) continue;
|
|
10891
|
+
if (!chart.ChartFrame) continue;
|
|
10892
|
+
|
|
10893
|
+
var range=chart.GetMaxMin();
|
|
10894
|
+
if (range==null || range.Max==null || range.Min==null) continue;
|
|
10895
|
+
|
|
10896
|
+
if (item.Max==null || item.Max<range.Max) item.Max=range.Max;
|
|
10897
|
+
if (item.Min==null || item.Min>range.Min) item.Min=range.Min;
|
|
10898
|
+
}
|
|
10899
|
+
|
|
10900
|
+
if (item.Frame.YSpecificMaxMin) //固定坐标
|
|
10901
|
+
{
|
|
10902
|
+
item.Min=item.Frame.YSpecificMaxMin.Max;
|
|
10903
|
+
item.Max=item.Frame.YSpecificMaxMin.Min;
|
|
10904
|
+
}
|
|
10905
|
+
|
|
10906
|
+
if (!IFrameSplitOperator.IsNumber(frame.YMaxMin.Max) || frame.YMaxMin.Max!=item.Max)
|
|
10907
|
+
{
|
|
10908
|
+
frame.YMaxMin.Max=item.Max;
|
|
10909
|
+
frame.XYSplit=true;
|
|
10910
|
+
}
|
|
10911
|
+
|
|
10912
|
+
if (!IFrameSplitOperator.IsNumber(frame.YMaxMin.Min) || frame.YMaxMin.Min!=item.Min)
|
|
10913
|
+
{
|
|
10914
|
+
frame.YMaxMin.Min=item.Min
|
|
10915
|
+
frame.XYSplit=true;
|
|
10916
|
+
}
|
|
10917
|
+
|
|
10918
|
+
if (frame.XYSplit)
|
|
10919
|
+
{
|
|
10920
|
+
var max=10, min=0;
|
|
10921
|
+
if (item.Max!=null) max=item.Max;
|
|
10922
|
+
if (item.Min!=null) min=item.Min;
|
|
10923
|
+
|
|
10924
|
+
frame.HorizontalMax=max;
|
|
10925
|
+
frame.HorizontalMin=min;
|
|
10926
|
+
}
|
|
10927
|
+
|
|
10928
|
+
//共享Y轴叠加指标同步下坐标
|
|
10929
|
+
for(var j=0;j<item.OverlayFrame.length;++j)
|
|
10930
|
+
{
|
|
10931
|
+
item.OverlayFrame[j].XYSplit=true;
|
|
10932
|
+
}
|
|
10933
|
+
|
|
10934
|
+
//独立坐标叠加指标
|
|
10935
|
+
for(var i=0;i<item.SingleOverlay.length;++i)
|
|
10936
|
+
{
|
|
10937
|
+
var overlayItem=item.SingleOverlay[i];
|
|
10938
|
+
overlayItem.UpdateFrameMaxMin();
|
|
10939
|
+
}
|
|
10940
|
+
}
|
|
10941
|
+
}
|
|
10942
|
+
|
|
10818
10943
|
this.UpdateFrameMaxMin=function()
|
|
10819
10944
|
{
|
|
10945
|
+
this.UpdateFrameMaxMinV2();
|
|
10946
|
+
|
|
10947
|
+
return;
|
|
10948
|
+
|
|
10820
10949
|
var frameMaxMinData=new Array();
|
|
10821
10950
|
|
|
10822
10951
|
var chartPaint=new Array();
|
|
@@ -13190,6 +13319,9 @@ function IChartFramePainting()
|
|
|
13190
13319
|
this.HorizontalMin; //Y轴最小值
|
|
13191
13320
|
this.XPointCount=10; //X轴数据个数
|
|
13192
13321
|
|
|
13322
|
+
//Y轴原始的最大值 最小值
|
|
13323
|
+
this.YMaxMin={ Max:null, Min:null };
|
|
13324
|
+
|
|
13193
13325
|
this.YSplitOperator; //Y轴分割
|
|
13194
13326
|
this.XSplitOperator; //X轴分割
|
|
13195
13327
|
this.Data; //主数据
|
|
@@ -47233,6 +47365,15 @@ function FrameSplitKLinePriceY()
|
|
|
47233
47365
|
splitData.Max=this.Frame.HorizontalMax;
|
|
47234
47366
|
splitData.Min=this.Frame.HorizontalMin;
|
|
47235
47367
|
splitData.Count=this.SplitCount;
|
|
47368
|
+
if (this.Frame.YMaxMin) //原始的数据范围
|
|
47369
|
+
{
|
|
47370
|
+
var item=this.Frame.YMaxMin;
|
|
47371
|
+
if (IFrameSplitOperator.IsNumber(item.Max) && IFrameSplitOperator.IsNumber(item.Min))
|
|
47372
|
+
{
|
|
47373
|
+
splitData.Max=item.Max;
|
|
47374
|
+
splitData.Min=item.Min;
|
|
47375
|
+
}
|
|
47376
|
+
}
|
|
47236
47377
|
|
|
47237
47378
|
if (splitData.Max==splitData.Min) //如果一样上下扩大下
|
|
47238
47379
|
{
|
|
@@ -48007,6 +48148,16 @@ function FrameSplitY()
|
|
|
48007
48148
|
var splitData={};
|
|
48008
48149
|
splitData.Max=this.Frame.HorizontalMax;
|
|
48009
48150
|
splitData.Min=this.Frame.HorizontalMin;
|
|
48151
|
+
|
|
48152
|
+
if (this.Frame.YMaxMin) //原始的数据范围
|
|
48153
|
+
{
|
|
48154
|
+
var item=this.Frame.YMaxMin;
|
|
48155
|
+
if (IFrameSplitOperator.IsNumber(item.Max) && IFrameSplitOperator.IsNumber(item.Min))
|
|
48156
|
+
{
|
|
48157
|
+
splitData.Max=item.Max;
|
|
48158
|
+
splitData.Min=item.Min;
|
|
48159
|
+
}
|
|
48160
|
+
}
|
|
48010
48161
|
|
|
48011
48162
|
if (splitData.Max==splitData.Min) //如果一样上下扩大下
|
|
48012
48163
|
{
|
|
@@ -130383,7 +130534,7 @@ function ScrollBarBGChart()
|
|
|
130383
130534
|
|
|
130384
130535
|
|
|
130385
130536
|
|
|
130386
|
-
var HQCHART_VERSION="1.1.
|
|
130537
|
+
var HQCHART_VERSION="1.1.12679";
|
|
130387
130538
|
|
|
130388
130539
|
function PrintHQChartVersion()
|
|
130389
130540
|
{
|
|
@@ -10859,8 +10859,137 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
|
|
|
10859
10859
|
this.Frame.ResetXYSplit();
|
|
10860
10860
|
}
|
|
10861
10861
|
|
|
10862
|
+
this.UpdateFrameMaxMinV2=function()
|
|
10863
|
+
{
|
|
10864
|
+
var mapFrame=new Map(); //key=frameid, value:{ ChartPaint:[] }
|
|
10865
|
+
for(var i=0;i<this.Frame.SubFrame.length;++i)
|
|
10866
|
+
{
|
|
10867
|
+
var subItem=this.Frame.SubFrame[i];
|
|
10868
|
+
if (!subItem || !subItem.Frame) continue;
|
|
10869
|
+
|
|
10870
|
+
var frame=subItem.Frame;
|
|
10871
|
+
var key=frame.Identify;
|
|
10872
|
+
var item=
|
|
10873
|
+
{
|
|
10874
|
+
ID:key, Frame:frame, ChartPaint:[] , Max:null, Min:null,
|
|
10875
|
+
OverlayFrame:[], //共享坐标
|
|
10876
|
+
SingleOverlay:[] //独立坐标
|
|
10877
|
+
};
|
|
10878
|
+
|
|
10879
|
+
for(var j=0;j<subItem.OverlayIndex.length;++j)
|
|
10880
|
+
{
|
|
10881
|
+
var overlayItem=subItem.OverlayIndex[j];
|
|
10882
|
+
var overlayFrame=overlayItem.Frame;
|
|
10883
|
+
if (overlayFrame.IsShareY)
|
|
10884
|
+
{
|
|
10885
|
+
if (!overlayFrame.MainFrame) continue;
|
|
10886
|
+
if (overlayFrame.IsCalculateYMaxMin===false) continue; //叠加坐标Y轴不调整
|
|
10887
|
+
item.OverlayFrame.push(overlayFrame);
|
|
10888
|
+
for(var k=0; k<overlayItem.ChartPaint.length; ++k)
|
|
10889
|
+
{
|
|
10890
|
+
var chart=overlayItem.ChartPaint[k];
|
|
10891
|
+
item.ChartPaint.push(chart);
|
|
10892
|
+
}
|
|
10893
|
+
}
|
|
10894
|
+
else
|
|
10895
|
+
{
|
|
10896
|
+
item.SingleOverlay.push(overlayItem);
|
|
10897
|
+
}
|
|
10898
|
+
|
|
10899
|
+
}
|
|
10900
|
+
|
|
10901
|
+
mapFrame.set(key, item);
|
|
10902
|
+
}
|
|
10903
|
+
|
|
10904
|
+
for(var i=0;i<this.ChartPaint.length;++i)
|
|
10905
|
+
{
|
|
10906
|
+
var chart=this.ChartPaint[i];
|
|
10907
|
+
var key=chart.ChartFrame.Identify;
|
|
10908
|
+
if (!mapFrame.has(key)) continue;
|
|
10909
|
+
|
|
10910
|
+
var finder=mapFrame.get(key);
|
|
10911
|
+
finder.ChartPaint.push(chart);
|
|
10912
|
+
}
|
|
10913
|
+
|
|
10914
|
+
for(var i=0;i<this.OverlayChartPaint.length;++i)
|
|
10915
|
+
{
|
|
10916
|
+
var chart=this.OverlayChartPaint[i];
|
|
10917
|
+
if (!chart.ChartFrame) continue;
|
|
10918
|
+
var key=chart.ChartFrame.Identify;
|
|
10919
|
+
if (!mapFrame.has(key)) continue;
|
|
10920
|
+
|
|
10921
|
+
var finder=mapFrame.get(key);
|
|
10922
|
+
finder.ChartPaint.push(chart);
|
|
10923
|
+
}
|
|
10924
|
+
|
|
10925
|
+
for(var mapItem of mapFrame)
|
|
10926
|
+
{
|
|
10927
|
+
var item=mapItem[1];
|
|
10928
|
+
var frame=item.Frame;
|
|
10929
|
+
//计算主框架最大最小
|
|
10930
|
+
for(var i=0;i<item.ChartPaint.length;++i)
|
|
10931
|
+
{
|
|
10932
|
+
var chart=item.ChartPaint[i];
|
|
10933
|
+
if (chart.IsShow==false) continue; //隐藏的图形不计算
|
|
10934
|
+
if (chart.NotSupportMessage) continue;
|
|
10935
|
+
if (!chart.ChartFrame) continue;
|
|
10936
|
+
|
|
10937
|
+
var range=chart.GetMaxMin();
|
|
10938
|
+
if (range==null || range.Max==null || range.Min==null) continue;
|
|
10939
|
+
|
|
10940
|
+
if (item.Max==null || item.Max<range.Max) item.Max=range.Max;
|
|
10941
|
+
if (item.Min==null || item.Min>range.Min) item.Min=range.Min;
|
|
10942
|
+
}
|
|
10943
|
+
|
|
10944
|
+
if (item.Frame.YSpecificMaxMin) //固定坐标
|
|
10945
|
+
{
|
|
10946
|
+
item.Min=item.Frame.YSpecificMaxMin.Max;
|
|
10947
|
+
item.Max=item.Frame.YSpecificMaxMin.Min;
|
|
10948
|
+
}
|
|
10949
|
+
|
|
10950
|
+
if (!IFrameSplitOperator.IsNumber(frame.YMaxMin.Max) || frame.YMaxMin.Max!=item.Max)
|
|
10951
|
+
{
|
|
10952
|
+
frame.YMaxMin.Max=item.Max;
|
|
10953
|
+
frame.XYSplit=true;
|
|
10954
|
+
}
|
|
10955
|
+
|
|
10956
|
+
if (!IFrameSplitOperator.IsNumber(frame.YMaxMin.Min) || frame.YMaxMin.Min!=item.Min)
|
|
10957
|
+
{
|
|
10958
|
+
frame.YMaxMin.Min=item.Min
|
|
10959
|
+
frame.XYSplit=true;
|
|
10960
|
+
}
|
|
10961
|
+
|
|
10962
|
+
if (frame.XYSplit)
|
|
10963
|
+
{
|
|
10964
|
+
var max=10, min=0;
|
|
10965
|
+
if (item.Max!=null) max=item.Max;
|
|
10966
|
+
if (item.Min!=null) min=item.Min;
|
|
10967
|
+
|
|
10968
|
+
frame.HorizontalMax=max;
|
|
10969
|
+
frame.HorizontalMin=min;
|
|
10970
|
+
}
|
|
10971
|
+
|
|
10972
|
+
//共享Y轴叠加指标同步下坐标
|
|
10973
|
+
for(var j=0;j<item.OverlayFrame.length;++j)
|
|
10974
|
+
{
|
|
10975
|
+
item.OverlayFrame[j].XYSplit=true;
|
|
10976
|
+
}
|
|
10977
|
+
|
|
10978
|
+
//独立坐标叠加指标
|
|
10979
|
+
for(var i=0;i<item.SingleOverlay.length;++i)
|
|
10980
|
+
{
|
|
10981
|
+
var overlayItem=item.SingleOverlay[i];
|
|
10982
|
+
overlayItem.UpdateFrameMaxMin();
|
|
10983
|
+
}
|
|
10984
|
+
}
|
|
10985
|
+
}
|
|
10986
|
+
|
|
10862
10987
|
this.UpdateFrameMaxMin=function()
|
|
10863
10988
|
{
|
|
10989
|
+
this.UpdateFrameMaxMinV2();
|
|
10990
|
+
|
|
10991
|
+
return;
|
|
10992
|
+
|
|
10864
10993
|
var frameMaxMinData=new Array();
|
|
10865
10994
|
|
|
10866
10995
|
var chartPaint=new Array();
|
|
@@ -13234,6 +13363,9 @@ function IChartFramePainting()
|
|
|
13234
13363
|
this.HorizontalMin; //Y轴最小值
|
|
13235
13364
|
this.XPointCount=10; //X轴数据个数
|
|
13236
13365
|
|
|
13366
|
+
//Y轴原始的最大值 最小值
|
|
13367
|
+
this.YMaxMin={ Max:null, Min:null };
|
|
13368
|
+
|
|
13237
13369
|
this.YSplitOperator; //Y轴分割
|
|
13238
13370
|
this.XSplitOperator; //X轴分割
|
|
13239
13371
|
this.Data; //主数据
|
|
@@ -47277,6 +47409,15 @@ function FrameSplitKLinePriceY()
|
|
|
47277
47409
|
splitData.Max=this.Frame.HorizontalMax;
|
|
47278
47410
|
splitData.Min=this.Frame.HorizontalMin;
|
|
47279
47411
|
splitData.Count=this.SplitCount;
|
|
47412
|
+
if (this.Frame.YMaxMin) //原始的数据范围
|
|
47413
|
+
{
|
|
47414
|
+
var item=this.Frame.YMaxMin;
|
|
47415
|
+
if (IFrameSplitOperator.IsNumber(item.Max) && IFrameSplitOperator.IsNumber(item.Min))
|
|
47416
|
+
{
|
|
47417
|
+
splitData.Max=item.Max;
|
|
47418
|
+
splitData.Min=item.Min;
|
|
47419
|
+
}
|
|
47420
|
+
}
|
|
47280
47421
|
|
|
47281
47422
|
if (splitData.Max==splitData.Min) //如果一样上下扩大下
|
|
47282
47423
|
{
|
|
@@ -48051,6 +48192,16 @@ function FrameSplitY()
|
|
|
48051
48192
|
var splitData={};
|
|
48052
48193
|
splitData.Max=this.Frame.HorizontalMax;
|
|
48053
48194
|
splitData.Min=this.Frame.HorizontalMin;
|
|
48195
|
+
|
|
48196
|
+
if (this.Frame.YMaxMin) //原始的数据范围
|
|
48197
|
+
{
|
|
48198
|
+
var item=this.Frame.YMaxMin;
|
|
48199
|
+
if (IFrameSplitOperator.IsNumber(item.Max) && IFrameSplitOperator.IsNumber(item.Min))
|
|
48200
|
+
{
|
|
48201
|
+
splitData.Max=item.Max;
|
|
48202
|
+
splitData.Min=item.Min;
|
|
48203
|
+
}
|
|
48204
|
+
}
|
|
48054
48205
|
|
|
48055
48206
|
if (splitData.Max==splitData.Min) //如果一样上下扩大下
|
|
48056
48207
|
{
|
|
@@ -130541,7 +130692,7 @@ function HQChartScriptWorker()
|
|
|
130541
130692
|
|
|
130542
130693
|
|
|
130543
130694
|
|
|
130544
|
-
var HQCHART_VERSION="1.1.
|
|
130695
|
+
var HQCHART_VERSION="1.1.12679";
|
|
130545
130696
|
|
|
130546
130697
|
function PrintHQChartVersion()
|
|
130547
130698
|
{
|
|
@@ -68,7 +68,8 @@ function IChartFramePainting()
|
|
|
68
68
|
|
|
69
69
|
this.HorizontalMax; //Y轴最大值
|
|
70
70
|
this.HorizontalMin; //Y轴最小值
|
|
71
|
-
this.XPointCount = 10;
|
|
71
|
+
this.XPointCount = 10; //X轴数据个数
|
|
72
|
+
this.YMaxMin={ Max:null, Min:null }; //Y轴原始的最大值 最小值
|
|
72
73
|
|
|
73
74
|
this.YSplitOperator; //Y轴分割
|
|
74
75
|
this.XSplitOperator; //X轴分割
|
|
@@ -2630,8 +2630,135 @@ function JSChartContainer(uielement)
|
|
|
2630
2630
|
if (typeof (this.Frame.ResetXYSplit) == 'function') this.Frame.ResetXYSplit();
|
|
2631
2631
|
}
|
|
2632
2632
|
|
|
2633
|
+
this.UpdateFrameMaxMinV2=function()
|
|
2634
|
+
{
|
|
2635
|
+
var mapFrame=new Map(); //key=frameid, value:{ ChartPaint:[] }
|
|
2636
|
+
for(var i=0;i<this.Frame.SubFrame.length;++i)
|
|
2637
|
+
{
|
|
2638
|
+
var subItem=this.Frame.SubFrame[i];
|
|
2639
|
+
if (!subItem || !subItem.Frame) continue;
|
|
2640
|
+
|
|
2641
|
+
var frame=subItem.Frame;
|
|
2642
|
+
var key=frame.Identify;
|
|
2643
|
+
var item=
|
|
2644
|
+
{
|
|
2645
|
+
ID:key, Frame:frame, ChartPaint:[] , Max:null, Min:null,
|
|
2646
|
+
OverlayFrame:[], //共享坐标
|
|
2647
|
+
SingleOverlay:[] //独立坐标
|
|
2648
|
+
};
|
|
2649
|
+
|
|
2650
|
+
for(var j=0;j<subItem.OverlayIndex.length;++j)
|
|
2651
|
+
{
|
|
2652
|
+
var overlayItem=subItem.OverlayIndex[j];
|
|
2653
|
+
var overlayFrame=overlayItem.Frame;
|
|
2654
|
+
if (overlayFrame.IsShareY)
|
|
2655
|
+
{
|
|
2656
|
+
if (!overlayFrame.MainFrame) continue;
|
|
2657
|
+
if (overlayFrame.IsCalculateYMaxMin===false) continue; //叠加坐标Y轴不调整
|
|
2658
|
+
item.OverlayFrame.push(overlayFrame);
|
|
2659
|
+
for(var k=0; k<overlayItem.ChartPaint.length; ++k)
|
|
2660
|
+
{
|
|
2661
|
+
var chart=overlayItem.ChartPaint[k];
|
|
2662
|
+
item.ChartPaint.push(chart);
|
|
2663
|
+
}
|
|
2664
|
+
}
|
|
2665
|
+
else
|
|
2666
|
+
{
|
|
2667
|
+
item.SingleOverlay.push(overlayItem);
|
|
2668
|
+
}
|
|
2669
|
+
|
|
2670
|
+
}
|
|
2671
|
+
|
|
2672
|
+
mapFrame.set(key, item);
|
|
2673
|
+
}
|
|
2674
|
+
|
|
2675
|
+
for(var i=0;i<this.ChartPaint.length;++i)
|
|
2676
|
+
{
|
|
2677
|
+
var chart=this.ChartPaint[i];
|
|
2678
|
+
var key=chart.ChartFrame.Identify;
|
|
2679
|
+
if (!mapFrame.has(key)) continue;
|
|
2680
|
+
|
|
2681
|
+
var finder=mapFrame.get(key);
|
|
2682
|
+
finder.ChartPaint.push(chart);
|
|
2683
|
+
}
|
|
2684
|
+
|
|
2685
|
+
for(var i=0;i<this.OverlayChartPaint.length;++i)
|
|
2686
|
+
{
|
|
2687
|
+
var chart=this.OverlayChartPaint[i];
|
|
2688
|
+
if (!chart.ChartFrame) continue;
|
|
2689
|
+
var key=chart.ChartFrame.Identify;
|
|
2690
|
+
if (!mapFrame.has(key)) continue;
|
|
2691
|
+
|
|
2692
|
+
var finder=mapFrame.get(key);
|
|
2693
|
+
finder.ChartPaint.push(chart);
|
|
2694
|
+
}
|
|
2695
|
+
|
|
2696
|
+
for(var mapItem of mapFrame)
|
|
2697
|
+
{
|
|
2698
|
+
var item=mapItem[1];
|
|
2699
|
+
var frame=item.Frame;
|
|
2700
|
+
//计算主框架最大最小
|
|
2701
|
+
for(var i=0;i<item.ChartPaint.length;++i)
|
|
2702
|
+
{
|
|
2703
|
+
var chart=item.ChartPaint[i];
|
|
2704
|
+
if (chart.IsShow==false) continue; //隐藏的图形不计算
|
|
2705
|
+
if (chart.NotSupportMessage) continue;
|
|
2706
|
+
if (!chart.ChartFrame) continue;
|
|
2707
|
+
|
|
2708
|
+
var range=chart.GetMaxMin();
|
|
2709
|
+
if (range==null || range.Max==null || range.Min==null) continue;
|
|
2710
|
+
|
|
2711
|
+
if (item.Max==null || item.Max<range.Max) item.Max=range.Max;
|
|
2712
|
+
if (item.Min==null || item.Min>range.Min) item.Min=range.Min;
|
|
2713
|
+
}
|
|
2714
|
+
|
|
2715
|
+
if (item.Frame.YSpecificMaxMin) //固定坐标
|
|
2716
|
+
{
|
|
2717
|
+
item.Min=item.Frame.YSpecificMaxMin.Max;
|
|
2718
|
+
item.Max=item.Frame.YSpecificMaxMin.Min;
|
|
2719
|
+
}
|
|
2720
|
+
|
|
2721
|
+
if (!IFrameSplitOperator.IsNumber(frame.YMaxMin.Max) || frame.YMaxMin.Max!=item.Max)
|
|
2722
|
+
{
|
|
2723
|
+
frame.YMaxMin.Max=item.Max;
|
|
2724
|
+
frame.XYSplit=true;
|
|
2725
|
+
}
|
|
2726
|
+
|
|
2727
|
+
if (!IFrameSplitOperator.IsNumber(frame.YMaxMin.Min) || frame.YMaxMin.Min!=item.Min)
|
|
2728
|
+
{
|
|
2729
|
+
frame.YMaxMin.Min=item.Min
|
|
2730
|
+
frame.XYSplit=true;
|
|
2731
|
+
}
|
|
2732
|
+
|
|
2733
|
+
if (frame.XYSplit)
|
|
2734
|
+
{
|
|
2735
|
+
var max=10, min=0;
|
|
2736
|
+
if (item.Max!=null) max=item.Max;
|
|
2737
|
+
if (item.Min!=null) min=item.Min;
|
|
2738
|
+
|
|
2739
|
+
frame.HorizontalMax=max;
|
|
2740
|
+
frame.HorizontalMin=min;
|
|
2741
|
+
|
|
2742
|
+
for(var j=0;j<item.OverlayFrame.length;++j)
|
|
2743
|
+
{
|
|
2744
|
+
item.OverlayFrame[j].XYSplit=true;
|
|
2745
|
+
}
|
|
2746
|
+
}
|
|
2747
|
+
|
|
2748
|
+
|
|
2749
|
+
//独立坐标叠加指标
|
|
2750
|
+
for(var i=0;i<item.SingleOverlay.length;++i)
|
|
2751
|
+
{
|
|
2752
|
+
var overlayItem=item.SingleOverlay[i];
|
|
2753
|
+
overlayItem.UpdateFrameMaxMin();
|
|
2754
|
+
}
|
|
2755
|
+
}
|
|
2756
|
+
}
|
|
2633
2757
|
this.UpdateFrameMaxMin = function ()
|
|
2634
2758
|
{
|
|
2759
|
+
this.UpdateFrameMaxMinV2();
|
|
2760
|
+
return;
|
|
2761
|
+
|
|
2635
2762
|
var frameMaxMinData = new Array();
|
|
2636
2763
|
var chartPaint = new Array();
|
|
2637
2764
|
|