hqchart 1.1.15710 → 1.1.15726

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.
@@ -1245,7 +1245,7 @@ if(IFrameSplitOperator.IsBool(option.CorssCursorInfo.IsFixXLastTime))chart.Chart
1245
1245
  {var subItem=item.TextStyle.Right;if(IFrameSplitOperator.IsNumber(subItem.Type))chart.ChartCorssCursor.StringFormatY.TextStyleConfig.Right.Type=subItem.Type;}}}if(option.MinuteInfo)chart.CreateMinuteInfo(option.MinuteInfo);if(IFrameSplitOperator.IsBool(option.IsShowRightMenu))chart.IsShowRightMenu=option.IsShowRightMenu;if(IFrameSplitOperator.IsNumber(option.DayCount))chart.DayCount=option.DayCount;if(IFrameSplitOperator.IsBool(option.IsShowMaxMinText))chart.ChartPaint[0].MaxMinTextConfig.IsShow=option.IsShowMaxMinText;this.SetChartBorder(chart,option);if(option.SplashTitle)chart.ChartSplashPaint.SplashTitle=option.SplashTitle;if(IFrameSplitOperator.IsBool(option.EnableBorderDrag)){chart.EnableBorderDrag=option.EnableBorderDrag;}if(IFrameSplitOperator.IsBool(option.EnableBuySellBar)){var barChart=chart.GetChartMinuteBuySellBar();if(barChart)barChart.IsShow=option.EnableBuySellBar;}this.AdjustChartBorder(chart);if(option.Frame){for(var i=0;i<option.Frame.length;++i){var item=option.Frame[i];if(!chart.Frame.SubFrame[i])continue;chart.SetSubFrameAttribute(chart.Frame.SubFrame[i],null,item);}chart.UpdateXShowText();}if(option.ExtendChart){for(var i=0;i<option.ExtendChart.length;++i){var item=option.ExtendChart[i];chart.CreateExtendChart(item.Name,item);}}//叠加股票
1246
1246
  if(option.Overlay){for(var i=0;i<option.Overlay.length;++i){var item=option.Overlay[i];chart.OverlaySymbol(item.Symbol,item);}}if(option.MinuteLine){if(option.MinuteLine.IsDrawAreaPrice==false)chart.ChartPaint[0].IsDrawArea=false;if(option.MinuteLine.IsShowLead==false)chart.IsShowLead=false;if(option.MinuteLine.IsShowAveragePrice==false){chart.ChartPaint[1].IsShow=false;chart.TitlePaint[0].IsShowAveragePrice=false;//标题栏均线也不显示
1247
1247
  for(var i=0;i<chart.ExtendChartPaint.length;++i){var item=chart.ExtendChartPaint[i];if(item.ClassName=="MinuteTooltipPaint")item.IsShowAveragePrice=false;}}if(option.MinuteLine.SplitType>0)chart.Frame.SubFrame[0].Frame.YSplitOperator.SplitType=option.MinuteLine.SplitType;}if(option.MinuteVol){var item=option.MinuteVol;if(IFrameSplitOperator.IsNumber(item.BarColorType))chart.ChartPaint[2].BarColorType=item.BarColorType;}if(option.MinuteTitle){var item=option.MinuteTitle;var chartTitle=chart.TitlePaint[0];if(IFrameSplitOperator.IsBool(item.IsShowName))chart.TitlePaint[0].IsShowName=item.IsShowName;if(IFrameSplitOperator.IsBool(item.IsShowDate))chart.TitlePaint[0].IsShowDate=item.IsShowDate;if(IFrameSplitOperator.IsBool(item.IsShowTime))chart.TitlePaint[0].IsShowTime=item.IsShowTime;if(IFrameSplitOperator.IsBool(item.IsTitleShowLatestData))chart.IsTitleShowLatestData=item.IsTitleShowLatestData;if(IFrameSplitOperator.IsBool(item.IsAlwaysShowLastData))chart.TitlePaint[0].IsAlwaysShowLastData=item.IsAlwaysShowLastData;if(IFrameSplitOperator.IsNumber(item.ShowLastDataFormat))chart.TitlePaint[0].ShowLastDataFormat=item.ShowLastDataFormat;if(item.TimeFormat)chart.TitlePaint[0].TimeFormat=item.TimeFormat;if(item.ShowPostion||item.ShowPosition)//显示位置高级配置
1248
- {var subItem=item.ShowPostion;if(item.ShowPosition)subItem=item.ShowPosition;if(!chartTitle.ShowPositionConfig)chartTitle.ShowPositionConfig={Margin:{}};if(IFrameSplitOperator.IsNumber(subItem.Type))chartTitle.ShowPositionConfig.Type=subItem.Type;if(subItem.Margin){if(IFrameSplitOperator.IsNumber(subItem.Margin.Left))chartTitle.ShowPositionConfig.Margin.Left=subItem.Margin.Left;if(IFrameSplitOperator.IsNumber(subItem.Margin.Right))chartTitle.ShowPositionConfig.Margin.Right=subItem.Margin.Right;if(IFrameSplitOperator.IsNumber(subItem.Margin.Bottom))chartTitle.ShowPositionConfig.Margin.Bottom=subItem.Margin.Bottom;}}}if(IFrameSplitOperator.IsBool(option.CorssCursorTouchEnd))chart.CorssCursorTouchEnd=option.CorssCursorTouchEnd;if(IFrameSplitOperator.IsBool(option.IsClickShowCorssCursor))chart.IsClickShowCorssCursor=option.IsClickShowCorssCursor;if(option.IsShowBeforeData===true)chart.IsShowBeforeData=option.IsShowBeforeData;var windows=[null,null];if(option.MainWindow)windows[0]=option.MainWindow;if(IFrameSplitOperator.IsNonEmptyArray(option.Windows))windows.push.apply(windows,(0,_toConsumableArray3.default)(option.Windows));//分钟数据指标从第3个指标窗口设置
1248
+ {var subItem=item.ShowPostion;if(item.ShowPosition)subItem=item.ShowPosition;if(!chartTitle.ShowPositionConfig)chartTitle.ShowPositionConfig={Margin:{}};if(IFrameSplitOperator.IsNumber(subItem.Type))chartTitle.ShowPositionConfig.Type=subItem.Type;if(subItem.Margin){if(IFrameSplitOperator.IsNumber(subItem.Margin.Left))chartTitle.ShowPositionConfig.Margin.Left=subItem.Margin.Left;if(IFrameSplitOperator.IsNumber(subItem.Margin.Right))chartTitle.ShowPositionConfig.Margin.Right=subItem.Margin.Right;if(IFrameSplitOperator.IsNumber(subItem.Margin.Bottom))chartTitle.ShowPositionConfig.Margin.Bottom=subItem.Margin.Bottom;}}if(IFrameSplitOperator.IsNonEmptyArray(item.OverlayTitleName))chartTitle.AryOverlayTitleName=item.OverlayTitleName.slice();}if(IFrameSplitOperator.IsBool(option.CorssCursorTouchEnd))chart.CorssCursorTouchEnd=option.CorssCursorTouchEnd;if(IFrameSplitOperator.IsBool(option.IsClickShowCorssCursor))chart.IsClickShowCorssCursor=option.IsClickShowCorssCursor;if(option.IsShowBeforeData===true)chart.IsShowBeforeData=option.IsShowBeforeData;var windows=[null,null];if(option.MainWindow)windows[0]=option.MainWindow;if(IFrameSplitOperator.IsNonEmptyArray(option.Windows))windows.push.apply(windows,(0,_toConsumableArray3.default)(option.Windows));//分钟数据指标从第3个指标窗口设置
1249
1249
  if(IFrameSplitOperator.IsNonEmptyArray(windows)){var scriptData=new JSIndexScript();for(var i=0;i<windows.length;++i){var index=i;var item=windows[i];if(!item)continue;if(item.Script){chart.WindowIndex[index]=new ScriptIndex(item.Name,item.Script,item.Args,item);//脚本执行
1250
1250
  }else if(item.API)//使用API挂接指标数据 API:{ Name:指标名字, Script:指标脚本可以为空, Args:参数可以为空, Url:指标执行地址 }
1251
1251
  {var apiItem=item.API;chart.WindowIndex[index]=new APIScriptIndex(apiItem.Name,apiItem.Script,apiItem.Args,item);}else{var indexItem=JSIndexMap.Get(item.Index);if(indexItem){chart.WindowIndex[index]=indexItem.Create();//创建子窗口的指标
@@ -1699,7 +1699,9 @@ SUSP_ID:1//停牌
1699
1699
  //十字光标状态
1700
1700
  };var JSCHART_CORSSCURSOR_STATUS_ID={NONE_ID:0,LINE_ID:1,LEFT_TEXT_ID:2,LEFT_INTER_TEXT_ID:4,RIGHT_TEXT_ID:8,RIGHT_INTER_TEXT_ID:16,BOTTOM_TEXT_ID:32};var JSCHART_TEMPORARY_ATTRIBUTE={MAINFRAME:{BOTTOMSPACE:"MainFrame-BottomSpace",//主图底部预留空间,单位像素
1701
1701
  TOPSPACE:"MainFrame-TopSpace",//主图顶部预留空间,单位像素
1702
- SHOWLEFTTEXT:"MainFrame-ShowLeftText",SHOWRIGHTTEXT:"MainFrame-ShowRightText",SPLITTYPE:"MainFrame-SplitType"//0=自动分割 1=数据的最大最小值分割 2=堆积图(0-100)
1702
+ SHOWLEFTTEXT:"MainFrame-ShowLeftText",SHOWRIGHTTEXT:"MainFrame-ShowRightText",SPLITTYPE:"MainFrame-SplitType",//0=自动分割 1=数据的最大最小值分割 2=堆积图(0-100)
1703
+ HRESERVED:"MainFrame-HorizontalReserved",//上下预留空间 { Top:, Bottom: }
1704
+ TITLEHEIGHT:"MainFrame-TitleHeight"//标题栏高度
1703
1705
  }};function PhoneDBClick(){this.Start=[];this.Clear=function(){this.Start=[];};this.AddTouchStart=function(x,y,time){if(this.Start.length>0){var item=this.Start[this.Start.length-1];var spanTime=time-item.Time;if(spanTime>0&&spanTime<300){this.Start.push({X:x,Y:y,Time:time});}else{this.Start=[];}}else{this.Start.push({X:x,Y:y,Time:time});}};this.IsVaildDBClick=function(){if(this.Start.length==2)return true;return false;};this.AddTouchEnd=function(time){if(this.Start.length<=0)return;var item=this.Start[this.Start.length-1];var spanTime=time-item.Time;if(spanTime>=0&&spanTime<150){}else{this.Start=[];}};}/*
1704
1706
  图形控件
1705
1707
  */function JSChartContainer(uielement,OffscreenElement,cacheElement){var _this9=this;this.ClassName='JSChartContainer';var _self=this;this.Frame;//框架画法
@@ -1852,7 +1854,7 @@ this.TryYDrag=function(x,y){if(!this.EnableYDrag)return null;if(!this.EnableYDra
1852
1854
  this.TryUpDownDrag=function(x,y){var windowIndex=this.Frame.PtInFrame(x,y);if(windowIndex<0)return null;var item=this.Frame.SubFrame[windowIndex];if(!item||!item.Frame)return null;var frame=item.Frame;if(!frame.YSplitOperator||!frame.YSplitOperator.FixedYMaxMin)return null;return{Index:windowIndex,X:x,Y:y};};this.TryRectSelectDrag=function(x,y){var paint=this.GetRectSelectPaint();if(!paint)return null;if(paint.GetPointCount()<=0)return null;var item=paint.PtInPaint(x,y);return{Item:item,X:x,Y:y};};this.TryClickCrossCursor=function(x,y,e){if(!this.ChartCorssCursor)return;var button=this.ChartCorssCursor.PtInButton(x,y);if(!button)return false;if(button.Type==1){var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CLICK_CROSSCURSOR_RIGHT);if(event&&event.Callback){var sendData={Button:button,e:e};event.Callback(event,sendData,this);}}else if(button.Type==2){var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CLICK_CROSSCURSOR_BOTTOM);if(event&&event.Callback){var sendData={Button:button,e:e};event.Callback(event,sendData,this);}}return true;};this.TryClickButton=function(x,y,e){var button=this.Frame.PtInButtons(x,y);if(button&&this.ClickFrameButton){this.ClickFrameButton(button,e);return true;}button=this.PtInExtendChartButtons(x,y);if(button&&this.ClickExtendChartButton){this.ClickExtendChartButton(button,e);return true;}button=this.PtInDrawPictureButtons(x,y);if(button&&this.ClickDrawPictureButton){this.ClickDrawPictureButton(button,e);return true;}button=this.PtInTitleButtons(x,y);if(button&&this.ClickTitleButton){this.ClickTitleButton(button,e);return true;}var label=this.Frame.PtInHorizontalLabel(x,y);if(label&&this.ClickHorizontalLabel){this.ClickHorizontalLabel(label,e);return true;}return false;};//点击图新内部元素
1853
1855
  this.TryClickChartCell=function(x,y,e){var result=null;for(var i=0;i<this.ChartPaint.length;++i){var item=this.ChartPaint[i];if(!item.ClickCell)continue;if(item.IsHideScriptIndex())continue;result=item.ClickCell(x,y,e);if(result){result.Chart=item;return result;}}for(var i=0;i<this.OverlayChartPaint.length;++i){var item=this.OverlayChartPaint[i];if(!item.ClickCell)continue;result=item.ClickCell(x,y,e);if(result){result.Chart=item;result.IsOverlayChart=true;return result;}}for(var i=0,j=0,k=0;i<this.Frame.SubFrame.length;++i){var item=this.Frame.SubFrame[i];if(!IFrameSplitOperator.IsNonEmptyArray(item.OverlayIndex))continue;for(j=0;j<item.OverlayIndex.length;++j){var overlayItem=item.OverlayIndex[j];if(!IFrameSplitOperator.IsNonEmptyArray(overlayItem.ChartPaint))continue;for(var k=0;k<overlayItem.ChartPaint.length;++k){var chart=overlayItem.ChartPaint[k];if(!chart.IsShow)continue;if(chart.IsHideScriptIndex())continue;if(chart.ClickCell){result=chart.ClickCell(x,y,e);if(result){result.Chart=chart;result.IsOverlayIndex=true;return result;}}}}}return null;};this.TryMouseMove_CustomChartDrag=function(sendData){var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CUSTOM_DRAG_MOUSE_MOVE);if(!event||!event.Callback)return false;return event.Callback(event,sendData,this);};this.TryClick_CustomChartDrag=function(sendData){var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CUSTOM_DRAG_MOUSE_DOWN);if(!event||!event.Callback)return false;sendData.ChartDrag=null;sendData.Cusrsor=null;event.Callback(event,sendData,this);this.CustomChartDrag=sendData.ChartDrag;this.SetCursor(sendData);};this.TryDragMove_CustomChartDrag=function(sendData){var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CUSTOM_DRAG_DOC_MOUSE_MOVE);if(!event||!event.Callback)return;var e=sendData.e;var drag=sendData.Drag;if(Math.abs(drag.LastMove.Y-e.clientY)<2&&Math.abs(drag.LastMove.X-e.clientX)<2)return;if(event.Callback(event,sendData,this)){drag.LastMove.X=e.clientX;drag.LastMove.Y=e.clientY;}};this.TryMouseUp_CustomChartDrag=function(sendData){var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CUSTOM_DRAG_DOC_MOUSE_UP);if(!event||!event.Callback)return;event.Callback(event,sendData,this);};this.UIOnMouseDown=function(e){var _this10=this;this.MoveOnChartDrawPicture=null;if(this.ChartSplashPaint&&this.ChartSplashPaint.IsEnableSplash==true)return;this.ClickDownPoint={X:e.clientX,Y:e.clientY};this.IsOnTouch=true;this.BorderDrag=null;this.YDrag=null;this.UpDownDrag=null;this.RectSelectDrag=null;this.IndexChartDrag=null;this.CustomChartDrag=null;var pixelTatio=GetDevicePixelRatio();var x=(e.clientX-this.UIElement.getBoundingClientRect().left)*pixelTatio;var y=(e.clientY-this.UIElement.getBoundingClientRect().top)*pixelTatio;if(this.TryClickButton(x,y,e)){this.IsOnTouch=false;return;}var bDrawDynamicInfo=false;if(this.GlobalOption.SelectedBorder&&this.GlobalOption.SelectedBorder.Mode>=1){var item=this.GlobalOption.SelectedBorder;var frameId=this.Frame.PtInFrame(x,y);if(frameId>=0&&frameId!=item.SelFrame){item.SelFrame=frameId;bDrawDynamicInfo=true;}}var bRedraw=false;if(this.GlobalOption.SelectedXBorder&&this.GlobalOption.SelectedXBorder.Mode>=1){if(this.PtInMulitDayMinute){var item=this.GlobalOption.SelectedXBorder;var selectedDate=this.PtInMulitDayMinute(x,y);if(item.Date!=selectedDate){item.Date=selectedDate;bRedraw=true;}}}if(this.TryClickCrossCursor(x,y,e)){this.IsOnTouch=false;return;}if(this.TryClickChartTooltipData&&this.TryClickChartTooltipData(x,y,e))//预留给外部点击图标什么用的
1854
1856
  {this.IsOnTouch=false;return;}if(this.TryClickLock){//JSConsole.Chart.Log('[uielement.onmousedown] left, top ',e.clientX, e.clientY, this.getBoundingClientRect().left,this.getBoundingClientRect().top);
1855
- if(this.TryClickLock(x,y))return;}this.HideSelectRect();this.ClearDragSelectRect();if(this.ChartPictureMenu)this.ChartPictureMenu.Hide();var paint=this.GetRectSelectPaint();if(paint&&paint.GetPointCount()>0){var item=paint.PtInPaint(x,y);if(item){if(item.Type==4){//this.UIElement.style.cursor="pointer";
1857
+ if(this.TryClickLock(x,y)){this.IsOnTouch=false;return;}}this.HideSelectRect();this.ClearDragSelectRect();if(this.ChartPictureMenu)this.ChartPictureMenu.Hide();var paint=this.GetRectSelectPaint();if(paint&&paint.GetPointCount()>0){var item=paint.PtInPaint(x,y);if(item){if(item.Type==4){//this.UIElement.style.cursor="pointer";
1856
1858
  this.SetCursor({Cursor:"pointer"});var obj={X:e.clientX};if(this.GetXDataIndex(obj)){this.RectSelectDrag={DataIndex:obj.DataIndex,Type:item.Type,X:e.clientX};JSConsole.Chart.Log("[JSChartContainer::UIOnMouseDown] drag sub rect select ",obj);}}else{//this.UIElement.style.cursor="ew-resize";
1857
1859
  this.SetCursor({Cursor:"ew-resize"});this.RectSelectDrag={Index:item.PointIndex,Type:item.Type};JSConsole.Chart.Log("[JSChartContainer::UIOnMouseDown] drag rect select ",item);}}}if(!this.IsShowSelectRectDialog())//区间统计框存在,不清空区间背景色
1858
1860
  {if(!this.RectSelectDrag&&this.ClearRectSelect(false))this.Draw();}if(this.EnableBorderDrag&&this.Frame){var dragBorder=this.Frame.PtInFrameBorder(x,y);if(dragBorder&&dragBorder.Index>=0){//this.UIElement.style.cursor="n-resize";
@@ -2345,8 +2347,7 @@ this.GetExtendChartByClassNameV2=function(name){var aryChart=[];for(var i=0;i<th
2345
2347
  this.DeleteExtendChart=function(data){if(data.Index>=this.ExtendChartPaint.length)return;if(this.ExtendChartPaint[data.Index]!=data.Chart)return;if(typeof data.Chart.Clear=='function')data.Chart.Clear();this.ExtendChartPaint.splice(data.Index,1);};//删除扩展画法
2346
2348
  this.DeleteExtendChartByID=function(id){for(var i=0;i<this.ExtendChartPaint.length;++i){var item=this.ExtendChartPaint[i];if(item.ID==id){this.ExtendChartPaint.splice(i,1);return true;}}return false;};//全屏提示信息 { Title:提示信息, Draw:false/true 是否立即重绘, }
2347
2349
  this.EnableSplashScreen=function(enable,option){if(!this.ChartSplashPaint)return;this.ChartSplashPaint.EnableSplash(enable);if(option&&option.Draw===false)return;if(enable)this.DrawSplashScreen(option);else this.Draw();};this.SetSplashScreen=function(option){if(!option)return;if(IFrameSplitOperator.IsBool(option.Enable))this.ChartSplashPaint.EnableSplash(option.Enable);if(option.Title)this.ChartSplashPaint.SetTitle(option.Title);if(option.Draw)this.Draw();};this.IsEnableSplashScreen=function(){if(!this.ChartSplashPaint)return false;return this.ChartSplashPaint.IsEnableSplash;};//设置指标窗口属性 windowItem=SetOption.Windows[i], frameItem=SetOption.Frames[i];
2348
- this.SetSubFrameAttribute=function(subFrame,windowItem,frameItem){if(!subFrame||!subFrame.Frame)return;var frame=subFrame.Frame;var pixelRatio=GetDevicePixelRatio();if(windowItem){if(IFrameSplitOperator.IsBool(windowItem.Modify))frame.ModifyIndex=windowItem.Modify;if(IFrameSplitOperator.IsBool(windowItem.Change))frame.ChangeIndex=windowItem.Change;if(IFrameSplitOperator.IsBool(windowItem.Close))frame.CloseIndex=windowItem.Close;if(IFrameSplitOperator.IsBool(windowItem.Overlay))frame.OverlayIndex=windowItem.Overlay;if(IFrameSplitOperator.IsBool(windowItem.Export))frame.ExportData=windowItem.Export;if(IFrameSplitOperator.IsBool(windowItem.MaxMin))frame.MaxMinWindow=windowItem.MaxMin;if(IFrameSplitOperator.IsBool(windowItem.TitleWindow))frame.TitleWindow=windowItem.TitleWindow;if(IFrameSplitOperator.IsBool(windowItem.AddIndexWindow))frame.AddIndexWindow=windowItem.AddIndexWindow;if(IFrameSplitOperator.IsBool(windowItem.IndexHelp))frame.IndexHelp=windowItem.IndexHelp;if(IFrameSplitOperator.IsBool(windowItem.IsDrawTitleBG))frame.IsDrawTitleBG=windowItem.IsDrawTitleBG;if(IFrameSplitOperator.IsBool(windowItem.IsShowNameArrow))frame.IsShowNameArrow=windowItem.IsShowNameArrow;if(IFrameSplitOperator.IsNumber(windowItem.TitleHeight))frame.ChartBorder.TitleHeight=windowItem.TitleHeight;else windowItem.TitleHeight=frame.ChartBorder.TitleHeight;if(IFrameSplitOperator.IsBool(windowItem.IsShowTitleArrow))frame.IsShowTitleArrow=windowItem.IsShowTitleArrow;if(IFrameSplitOperator.IsNumber(windowItem.TitleArrowType))frame.TitleArrowType=windowItem.TitleArrowType;if(IFrameSplitOperator.IsBool(windowItem.IsShowIndexName))frame.IsShowIndexName=windowItem.IsShowIndexName;if(IFrameSplitOperator.IsBool(windowItem.IsSinlgeLine))frame.IsSinlgeLine=windowItem.IsSinlgeLine;if(IFrameSplitOperator.IsBool(windowItem.IsShowOverlayIndexName))frame.IsShowOverlayIndexName=windowItem.IsShowOverlayIndexName;if(IFrameSplitOperator.IsNumber(windowItem.IndexParamSpace))frame.IndexParamSpace=windowItem.IndexParamSpace;if(IFrameSplitOperator.IsNumber(windowItem.IndexTitleSpace))frame.IndexTitleSpace=windowItem.IndexTitleSpace;if(!IFrameSplitOperator.IsUndefined(windowItem.HorizontalReserved))frame.HorizontalReserved=windowItem.HorizontalReserved;//Y轴上下预留
2349
- if(windowItem.OverlayIndexType){if(IFrameSplitOperator.IsNumber(windowItem.OverlayIndexType.Position))frame.OverlayIndexType.Position=windowItem.OverlayIndexType.Position;if(IFrameSplitOperator.IsNumber(windowItem.OverlayIndexType.LineSpace))frame.OverlayIndexType.LineSpace=windowItem.OverlayIndexType.LineSpace;}}if(frameItem){if(frameItem.SplitCount)frame.YSplitOperator.SplitCount=frameItem.SplitCount;//Y轴刻度线个数
2350
+ this.SetSubFrameAttribute=function(subFrame,windowItem,frameItem){if(!subFrame||!subFrame.Frame)return;var frame=subFrame.Frame;var pixelRatio=GetDevicePixelRatio();if(windowItem){if(IFrameSplitOperator.IsBool(windowItem.Modify))frame.ModifyIndex=windowItem.Modify;if(IFrameSplitOperator.IsBool(windowItem.Change))frame.ChangeIndex=windowItem.Change;if(IFrameSplitOperator.IsBool(windowItem.Close))frame.CloseIndex=windowItem.Close;if(IFrameSplitOperator.IsBool(windowItem.Overlay))frame.OverlayIndex=windowItem.Overlay;if(IFrameSplitOperator.IsBool(windowItem.Export))frame.ExportData=windowItem.Export;if(IFrameSplitOperator.IsBool(windowItem.MaxMin))frame.MaxMinWindow=windowItem.MaxMin;if(IFrameSplitOperator.IsBool(windowItem.TitleWindow))frame.TitleWindow=windowItem.TitleWindow;if(IFrameSplitOperator.IsBool(windowItem.AddIndexWindow))frame.AddIndexWindow=windowItem.AddIndexWindow;if(IFrameSplitOperator.IsBool(windowItem.IndexHelp))frame.IndexHelp=windowItem.IndexHelp;if(IFrameSplitOperator.IsBool(windowItem.IsDrawTitleBG))frame.IsDrawTitleBG=windowItem.IsDrawTitleBG;if(IFrameSplitOperator.IsBool(windowItem.IsShowNameArrow))frame.IsShowNameArrow=windowItem.IsShowNameArrow;if(IFrameSplitOperator.IsNumber(windowItem.TitleHeight))frame.ChartBorder.TitleHeight=windowItem.TitleHeight;else windowItem.TitleHeight=frame.ChartBorder.TitleHeight;if(IFrameSplitOperator.IsBool(windowItem.IsShowTitleArrow))frame.IsShowTitleArrow=windowItem.IsShowTitleArrow;if(IFrameSplitOperator.IsNumber(windowItem.TitleArrowType))frame.TitleArrowType=windowItem.TitleArrowType;if(IFrameSplitOperator.IsBool(windowItem.IsShowIndexName))frame.IsShowIndexName=windowItem.IsShowIndexName;if(IFrameSplitOperator.IsBool(windowItem.IsSinlgeLine))frame.IsSinlgeLine=windowItem.IsSinlgeLine;if(IFrameSplitOperator.IsBool(windowItem.IsShowOverlayIndexName))frame.IsShowOverlayIndexName=windowItem.IsShowOverlayIndexName;if(IFrameSplitOperator.IsNumber(windowItem.IndexParamSpace))frame.IndexParamSpace=windowItem.IndexParamSpace;if(IFrameSplitOperator.IsNumber(windowItem.IndexTitleSpace))frame.IndexTitleSpace=windowItem.IndexTitleSpace;if(windowItem.OverlayIndexType){if(IFrameSplitOperator.IsNumber(windowItem.OverlayIndexType.Position))frame.OverlayIndexType.Position=windowItem.OverlayIndexType.Position;if(IFrameSplitOperator.IsNumber(windowItem.OverlayIndexType.LineSpace))frame.OverlayIndexType.LineSpace=windowItem.OverlayIndexType.LineSpace;}}if(frameItem){if(frameItem.SplitCount)frame.YSplitOperator.SplitCount=frameItem.SplitCount;//Y轴刻度线个数
2350
2351
  if(frameItem.StringFormat)frame.YSplitOperator.StringFormat=frameItem.StringFormat;//Y轴文字格式
2351
2352
  if(IFrameSplitOperator.IsNumber(frameItem.FloatPrecision))frame.YSplitOperator.FloatPrecision=frameItem.FloatPrecision;//Y轴小数位数
2352
2353
  if(frameItem.Custom)frame.YSplitOperator.Custom=frameItem.Custom;//Y轴自定义刻度
@@ -2357,8 +2358,9 @@ if(frameItem.IsYReverse===true)frame.CoordinateType=1;//反转坐标
2357
2358
  if(IFrameSplitOperator.IsNumber(frameItem.PercentageTextFormat))frame.YSplitOperator.PercentageTextFormat=frameItem.PercentageTextFormat;//百分比坐标格式
2358
2359
  if(frameItem.DefaultYMaxMin)frame.YSplitOperator.DefaultYMaxMin=frameItem.DefaultYMaxMin;//指定最大最小值
2359
2360
  if(IFrameSplitOperator.IsBool(frameItem.EnableRemoveZero))frame.YSplitOperator.EnableRemoveZero=frameItem.EnableRemoveZero;//Y轴文字小数位是否自动抹0
2360
- if(IFrameSplitOperator.IsPlusNumber(frameItem.MinYDistance))frame.MinYDistance=frameItem.MinYDistance;if(IFrameSplitOperator.IsNumber(frameItem.BorderLine))frame.BorderLine=frameItem.BorderLine;if(IFrameSplitOperator.IsBool(frameItem.IsDrawTitleBottomLine))frame.IsDrawTitleBottomLine=frameItem.IsDrawTitleBottomLine;if(IFrameSplitOperator.IsBool(frameItem.IsShowIndexTitle))frame.IsShowIndexTitle=frameItem.IsShowIndexTitle;if(frameItem.ClientBGColor)frame.ClientBGColor=frameItem.ClientBGColor;if(frameItem.Toolbar){var subItem=frameItem.Toolbar.Margin;if(subItem&&IFrameSplitOperator.IsNumber(subItem.Right))frame.ToolbarConfig.Margin.Right=subItem.Right;}//分时图属性
2361
- if(IFrameSplitOperator.IsBool(frameItem.CloseBeforeButton))frameItem.IsShowCloseButton=frameItem.CloseBeforeButton;if(frame.YSplitOperator.RightTextConfig)//主图右侧坐标设置
2361
+ if(IFrameSplitOperator.IsPlusNumber(frameItem.MinYDistance))frame.MinYDistance=frameItem.MinYDistance;if(IFrameSplitOperator.IsNumber(frameItem.BorderLine))frame.BorderLine=frameItem.BorderLine;if(IFrameSplitOperator.IsBool(frameItem.IsDrawTitleBottomLine))frame.IsDrawTitleBottomLine=frameItem.IsDrawTitleBottomLine;if(IFrameSplitOperator.IsBool(frameItem.IsShowIndexTitle))frame.IsShowIndexTitle=frameItem.IsShowIndexTitle;if(frameItem.ClientBGColor)frame.ClientBGColor=frameItem.ClientBGColor;if(frameItem.Toolbar){var subItem=frameItem.Toolbar.Margin;if(subItem&&IFrameSplitOperator.IsNumber(subItem.Right))frame.ToolbarConfig.Margin.Right=subItem.Right;}if(!IFrameSplitOperator.IsUndefined(frameItem.HorizontalReserved))frame.HorizontalReserved=frameItem.HorizontalReserved;//Y轴上下预留
2362
+ //分时图属性
2363
+ if(IFrameSplitOperator.IsBool(frameItem.CloseBeforeButton))frame.IsShowCloseButton=frameItem.CloseBeforeButton;if(frame.YSplitOperator.RightTextConfig)//主图右侧坐标设置
2362
2364
  {if(IFrameSplitOperator.IsNumber(frameItem.RightTextFormat))//废弃(兼容版本)
2363
2365
  {frame.YSplitOperator.RightTextConfig.Format=frameItem.RightTextFormat;if(frameItem.RightTextFormat==2)frame.MultiTextFormat=1;}if(frameItem.RightText)//主图右侧坐标设置(新版本)
2364
2366
  {var subItem=frameItem.RightText;if(IFrameSplitOperator.IsNumber(subItem.Format))frame.YSplitOperator.RightTextConfig.Format=subItem.Format;if(subItem.Format==2)frame.MultiTextFormat=1;if(subItem.Percentage&&IFrameSplitOperator.IsNumber(subItem.Percentage.Dec))frame.YSplitOperator.RightTextConfig.Percentage.Dec=subItem.Percentage.Dec;}}}if(frame.DivFrameToolbar)frame.DivFrameToolbar.UpdateButton();//更新div工具条
@@ -2436,11 +2438,11 @@ for(var i=0,j=0,k=0;i<this.Frame.SubFrame.length;++i){var item=this.Frame.SubFra
2436
2438
  this.ClearIndexRunCount=function(){//主图指标
2437
2439
  for(var i=0;i<this.WindowIndex.length;++i){var item=this.WindowIndex[i];if(!item)continue;item.RunCount=0;}//叠加指标
2438
2440
  for(var i=0;i<this.Frame.SubFrame.length;++i){var item=this.Frame.SubFrame[i];for(var j=0;j<item.OverlayIndex.length;++j){var overlayItem=item.OverlayIndex[j];if(overlayItem.Script)overlayItem.Script.RunCount=0;}}};//获取当前的显示的指标 包含叠加指标
2439
- this.GetIndexInfo=function(){var aryIndex=[];for(var i=0,j=0;i<this.WindowIndex.length;++i){var item=this.WindowIndex[i];if(!item)continue;var info={Name:item.Name,WindowIndex:i,IsOverlay:false};if(item.ID)info.ID=item.ID;if(IFrameSplitOperator.IsNonEmptyArray(item.Arguments))//参数
2440
- {info.Args=[];for(j=0;j<item.Arguments.length;++j){var argItem=item.Arguments[j];info.Args.push({Name:argItem.Name,Value:argItem.Value});}}aryIndex.push(info);}this.GetOverlayIndexInfo(aryIndex);//叠加指标
2441
+ this.GetIndexInfo=function(){var aryIndex=[];for(var i=0,j=0;i<this.WindowIndex.length;++i){var item=this.WindowIndex[i];if(!item)continue;var info={Name:item.Name,WindowIndex:i,IsOverlay:false,IsAuthorization:item.IsAuthorization};if(item.ID)info.ID=item.ID;if(item.ClassName=="APIScriptIndex")info.API={Url:item.ApiUrl,Name:item.Name,ID:item.ID};if(IFrameSplitOperator.IsNonEmptyArray(item.Arguments))//参数
2442
+ {info.Args=[];for(j=0;j<item.Arguments.length;++j){var argItem=item.Arguments[j];info.Args.push({Name:argItem.Name,Value:argItem.Value});}if(info.API)info.API.Args=info.Args;}aryIndex.push(info);}this.GetOverlayIndexInfo(aryIndex);//叠加指标
2441
2443
  return aryIndex;};//叠加指标
2442
- this.GetOverlayIndexInfo=function(aryIndex){for(var i=0,j=0,k=0;i<this.Frame.SubFrame.length;++i){var item=this.Frame.SubFrame[i];if(!IFrameSplitOperator.IsNonEmptyArray(item.OverlayIndex))continue;for(j=0;j<item.OverlayIndex.length;++j){var overlayItem=item.OverlayIndex[j];if(!overlayItem.Script)continue;var indexData=overlayItem.Script;var info={Name:indexData.Name,ID:indexData.ID,WindowIndex:i,IsOverlay:true,Identify:overlayItem.Identify};if(IFrameSplitOperator.IsNonEmptyArray(indexData.Arguments))//参数
2443
- {info.Args=[];for(k=0;k<indexData.Arguments.length;++k){var argItem=indexData.Arguments[k];info.Args.push({Name:argItem.Name,Value:argItem.Value});}}aryIndex.push(info);}}};//点tab弹菜单
2444
+ this.GetOverlayIndexInfo=function(aryIndex){for(var i=0,j=0,k=0;i<this.Frame.SubFrame.length;++i){var item=this.Frame.SubFrame[i];if(!IFrameSplitOperator.IsNonEmptyArray(item.OverlayIndex))continue;for(j=0;j<item.OverlayIndex.length;++j){var overlayItem=item.OverlayIndex[j];if(!overlayItem.Script)continue;var indexData=overlayItem.Script;var info={Name:indexData.Name,ID:indexData.ID,WindowIndex:i,IsOverlay:true,Identify:overlayItem.Identify,IsAuthorization:indexData.IsAuthorization};if(indexData.ClassName=="APIScriptIndex")info.API={Url:indexData.ApiUrl,Name:indexData.Name,ID:indexData.ID};if(IFrameSplitOperator.IsNonEmptyArray(indexData.Arguments))//参数
2445
+ {info.Args=[];for(k=0;k<indexData.Arguments.length;++k){var argItem=indexData.Arguments[k];info.Args.push({Name:argItem.Name,Value:argItem.Value});}if(info.API)info.API.Args=info.Args;}aryIndex.push(info);}}};//点tab弹菜单
2444
2446
  this.PopupMenuByTab=function(menuData,rtTab){if(!this.JSPopMenu)return;var pixelRatio=GetDevicePixelRatio();var rtCell={Left:rtTab.Left/pixelRatio,Right:rtTab.Right/pixelRatio,Bottom:rtTab.Bottom/pixelRatio,Top:rtTab.Top/pixelRatio};rtCell.Width=rtCell.Right-rtCell.Left;rtCell.Height=rtCell.Bottom-rtCell.Top;var rtClient=this.UIElement.getBoundingClientRect();var rtScroll=GetScrollPosition();var offsetLeft=rtClient.left+rtScroll.Left;var offsetTop=rtClient.top+rtScroll.Top;rtCell.Left+=offsetLeft;rtCell.Right+=offsetLeft;rtCell.Top+=offsetTop;rtCell.Bottom+=offsetTop;this.JSPopMenu.CreatePopMenu(menuData);this.JSPopMenu.PopupMenuByTab(rtCell);};//下拉菜单
2445
2447
  this.PopupMenuByDrapdown=function(menuData,rtButton){if(!this.JSPopMenu)return;var pixelRatio=GetDevicePixelRatio();var rtCell={Left:rtButton.Left/pixelRatio,Right:rtButton.Right/pixelRatio,Bottom:rtButton.Bottom/pixelRatio,Top:rtButton.Top/pixelRatio};rtCell.Width=rtCell.Right-rtCell.Left;rtCell.Height=rtCell.Bottom-rtCell.Top;var rtClient=this.UIElement.getBoundingClientRect();var rtScroll=GetScrollPosition();var offsetLeft=rtClient.left+rtScroll.Left;var offsetTop=rtClient.top+rtScroll.Top;rtCell.Left+=offsetLeft;rtCell.Right+=offsetLeft;rtCell.Top+=offsetTop;rtCell.Bottom+=offsetTop;this.JSPopMenu.CreatePopMenu(menuData);this.JSPopMenu.PopupMenuByDrapdown(rtCell);};//右键菜单
2446
2448
  this.PopupMenuByRClick=function(menuData,x,y){if(!this.JSPopMenu)return;var rtClient=this.UIElement.getBoundingClientRect();var rtScroll=GetScrollPosition();x+=rtClient.left+rtScroll.Left;y+=rtClient.top+rtScroll.Top;this.JSPopMenu.CreatePopMenu(menuData);this.JSPopMenu.PopupMenuByRight(x,y);};//菜单命令
@@ -2523,7 +2525,7 @@ this.UpdateTradeStatusData=function(data,option){if(option){//是否清空
2523
2525
  if(option.IsClear===true)this.GlobalOption.TradeStatus=null;}if(!data)return false;if(IFrameSplitOperator.IsNumber(data.Date)&&IFrameSplitOperator.IsNumber(data.Time)&&IFrameSplitOperator.IsNumber(data.Status)){this.GlobalOption.TradeStatus={Date:data.Date,Time:data.Time,Status:data.Status};return true;}return false;};//键盘下按暂停更新
2524
2526
  this.IsPauseUpdateByKeyboard=function(){if(!this.IsPressKeyboard)return false;if(!this.PressKeyboardConfig)return false;if(!this.PressKeyboardConfig.PauseUpdate)return false;return true;},//启动|关闭锁指标 aryIndex=[{ IndexID:指标ID, LockData:{IsLocked:} } ]
2525
2527
  this.EnableLockIndex=function(aryIndex){if(!IFrameSplitOperator.IsNonEmptyArray(aryIndex))return false;var mapIndex=new _map2.default();for(var i=0;i<aryIndex.length;++i){var item=aryIndex[i];if(item.IndexID&&item.LockData)mapIndex.set(item.IndexID,item);}var aryUpdate=[];for(var i=0;i<this.WindowIndex.length;++i){var item=this.WindowIndex[i];if(!item)continue;if(mapIndex.has(item.ID)){var mapItem=mapIndex.get(item.ID);item.SetLock(mapItem.LockData);//设置锁
2526
- aryUpdate.push({ID:i});}}for(var i=0;i<this.Frame.SubFrame.length;++i){var item=this.Frame.SubFrame[i];if(!IFrameSplitOperator.IsNonEmptyArray(item.OverlayIndex))continue;for(var j=0;j<item.OverlayIndex.length;++j){var overlayItem=item.OverlayIndex[j];var script=overlayItem.Script;if(mapIndex.has(script.ID)){var mapItem=mapIndex.get(script.ID);script.SetLock(mapItem.LockData);aryUpdate.push({OverlayID:overlayItem.Identify});}}}if(!IFrameSplitOperator.IsNonEmptyArray(aryUpdate))return false;this.UpdateWindowIndexV2(aryUpdate);return true;};this.TryClickLock=function(x,y){if(!this.Frame||!IFrameSplitOperator.IsNonEmptyArray(this.Frame.SubFrame))return false;for(var i=0;i<this.Frame.SubFrame.length;++i){var item=this.Frame.SubFrame[i];var chartLock=item.Frame.LockPaint;if(!chartLock||!chartLock.LockRect)continue;var tooltip=new TooltipData();if(!chartLock.GetTooltipData(x,y,tooltip))continue;tooltip.HQChart=this;var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CLICK_INDEX_LOCK);if(event&&event.Callback){var sendData={FrameID:item.Frame.Identify,Data:tooltip};event.Callback(event,sendData,this);}if(tooltip.Data.Callback)tooltip.Data.Callback(tooltip);return true;}return false;};this.RecvOverlayIndex=function(identify,data){var overlayIndex=this.GetOverlayIndexByIdentify(identify);if(overlayIndex==null){console.warn('[JSChartContainer::RecvOverlayIndex] can\'t find overlay index. [identify='+identify+']');return;}var script=overlayIndex.OverlayItem.Script;if(!script)return;if(typeof script.RecvSubscribeData!="function")return;var kData=this.GetKData();if(!kData)return;script.RecvSubscribeData(data,this,overlayIndex.WindowIndex,kData);};this.UpdateIndexTemporaryAttribute=function(windowIndex,aryAttribute){if(windowIndex<0)return;if(!IFrameSplitOperator.IsNonEmptyArray(aryAttribute))return;if(!this.Frame||!IFrameSplitOperator.IsNonEmptyArray(this.Frame.SubFrame))return;var mainFrame=this.Frame.SubFrame[windowIndex].Frame;this.IndexTemporaryAttribute[windowIndex]=[];var aryTemporaryAttribute=this.IndexTemporaryAttribute[windowIndex];for(var i=0;i<aryAttribute.length;++i){var item=aryAttribute[i];if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.BOTTOMSPACE){var backup=mainFrame.ChartBorder.BottomSpace;mainFrame.ChartBorder.BottomSpace=item.Value;aryTemporaryAttribute.push({Name:item.Name,Value:item.Value,BackupValue:backup});}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.TOPSPACE){var backup=mainFrame.ChartBorder.TopSpace;mainFrame.ChartBorder.TopSpace=item.Value;aryTemporaryAttribute.push({Name:item.Name,Value:item.Value,BackupValue:backup});}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.SHOWLEFTTEXT){var backup=mainFrame.YSplitOperator.IsShowLeftText;mainFrame.YSplitOperator.IsShowLeftText=item.Value;aryTemporaryAttribute.push({Name:item.Name,Value:item.Value,BackupValue:backup});}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.SHOWRIGHTTEXT){var backup=mainFrame.YSplitOperator.IsShowRightText;mainFrame.YSplitOperator.IsShowRightText=item.Value;aryTemporaryAttribute.push({Name:item.Name,Value:item.Value,BackupValue:backup});}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.SPLITTYPE){var backup=mainFrame.YSplitOperator.SplitType;mainFrame.YSplitOperator.SplitType=item.Value;aryTemporaryAttribute.push({Name:item.Name,Value:item.Value,BackupValue:backup});}}};this.RestoreIndexTemporaryAttribute=function(windowIndex){if(windowIndex<0)return;if(!this.Frame||!IFrameSplitOperator.IsNonEmptyArray(this.Frame.SubFrame))return;var aryTemporaryAttribute=this.IndexTemporaryAttribute[windowIndex];if(!IFrameSplitOperator.IsNonEmptyArray(aryTemporaryAttribute))return;var mainFrame=this.Frame.SubFrame[windowIndex].Frame;for(var i=0;i<aryTemporaryAttribute.length;++i){var item=aryTemporaryAttribute[i];if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.BOTTOMSPACE){mainFrame.ChartBorder.BottomSpace=item.BackupValue;}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.TOPSPACE){mainFrame.ChartBorder.TopSpace=item.BackupValue;}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.SHOWLEFTTEXT){mainFrame.YSplitOperator.IsShowLeftText=item.BackupValue;}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.SHOWRIGHTTEXT){mainFrame.YSplitOperator.IsShowRightText=item.BackupValue;}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.SPLITTYPE){mainFrame.YSplitOperator.SplitType=item.BackupValue;}}};}function GetDevicePixelRatio(){if(typeof window=='undefined')return 1;return window.devicePixelRatio||1;}function GetFontHeight(context,font,word){if(!context)return null;if(font)context.font=font;var text='擎';if(IFrameSplitOperator.IsString(word))text=word;var fontInfo=context.measureText(text);var textHeight=fontInfo.fontBoundingBoxAscent+fontInfo.fontBoundingBoxDescent;if(!IFrameSplitOperator.IsNumber(textHeight))textHeight=fontInfo.width+2*GetDevicePixelRatio();return textHeight;}function IsPhoneWeb(){var userAgentInfo=navigator.userAgent;var Agents=new Array("Android","iPhone","SymbianOS","Windows Phone","iPad","iPod");for(var v=0;v<Agents.length;v++){if(userAgentInfo.indexOf(Agents[v])>0)return true;}return false;}function OnKeyDown(e)//键盘事件
2528
+ aryUpdate.push({ID:i});}}for(var i=0;i<this.Frame.SubFrame.length;++i){var item=this.Frame.SubFrame[i];if(!IFrameSplitOperator.IsNonEmptyArray(item.OverlayIndex))continue;for(var j=0;j<item.OverlayIndex.length;++j){var overlayItem=item.OverlayIndex[j];var script=overlayItem.Script;if(mapIndex.has(script.ID)){var mapItem=mapIndex.get(script.ID);script.SetLock(mapItem.LockData);aryUpdate.push({OverlayID:overlayItem.Identify});}}}if(!IFrameSplitOperator.IsNonEmptyArray(aryUpdate))return false;this.UpdateWindowIndexV2(aryUpdate);return true;};this.TryClickLock=function(x,y){if(!this.Frame||!IFrameSplitOperator.IsNonEmptyArray(this.Frame.SubFrame))return false;for(var i=0;i<this.Frame.SubFrame.length;++i){var item=this.Frame.SubFrame[i];var chartLock=item.Frame.LockPaint;if(!chartLock||!chartLock.LockRect)continue;var tooltip=new TooltipData();if(!chartLock.GetTooltipData(x,y,tooltip))continue;tooltip.HQChart=this;var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CLICK_INDEX_LOCK);if(event&&event.Callback){var sendData={FrameID:item.Frame.Identify,Data:tooltip};event.Callback(event,sendData,this);}if(tooltip.Data.Callback)tooltip.Data.Callback(tooltip);return true;}return false;};this.RecvOverlayIndex=function(identify,data){var overlayIndex=this.GetOverlayIndexByIdentify(identify);if(overlayIndex==null){console.warn('[JSChartContainer::RecvOverlayIndex] can\'t find overlay index. [identify='+identify+']');return;}var script=overlayIndex.OverlayItem.Script;if(!script)return;if(typeof script.RecvSubscribeData!="function")return;var kData=this.GetKData();if(!kData)return;script.RecvSubscribeData(data,this,overlayIndex.WindowIndex,kData);};this.UpdateIndexTemporaryAttribute=function(windowIndex,aryAttribute){if(windowIndex<0)return;if(!IFrameSplitOperator.IsNonEmptyArray(aryAttribute))return;if(!this.Frame||!IFrameSplitOperator.IsNonEmptyArray(this.Frame.SubFrame))return;var mainFrame=this.Frame.SubFrame[windowIndex].Frame;this.IndexTemporaryAttribute[windowIndex]=[];var aryTemporaryAttribute=this.IndexTemporaryAttribute[windowIndex];for(var i=0;i<aryAttribute.length;++i){var item=aryAttribute[i];if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.BOTTOMSPACE){var backup=mainFrame.ChartBorder.BottomSpace;mainFrame.ChartBorder.BottomSpace=item.Value;aryTemporaryAttribute.push({Name:item.Name,Value:item.Value,BackupValue:backup});}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.TOPSPACE){var backup=mainFrame.ChartBorder.TopSpace;mainFrame.ChartBorder.TopSpace=item.Value;aryTemporaryAttribute.push({Name:item.Name,Value:item.Value,BackupValue:backup});}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.SHOWLEFTTEXT){var backup=mainFrame.YSplitOperator.IsShowLeftText;mainFrame.YSplitOperator.IsShowLeftText=item.Value;aryTemporaryAttribute.push({Name:item.Name,Value:item.Value,BackupValue:backup});}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.SHOWRIGHTTEXT){var backup=mainFrame.YSplitOperator.IsShowRightText;mainFrame.YSplitOperator.IsShowRightText=item.Value;aryTemporaryAttribute.push({Name:item.Name,Value:item.Value,BackupValue:backup});}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.SPLITTYPE){var backup=mainFrame.YSplitOperator.SplitType;mainFrame.YSplitOperator.SplitType=item.Value;aryTemporaryAttribute.push({Name:item.Name,Value:item.Value,BackupValue:backup});}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.HRESERVED){var backup=mainFrame.HorizontalReserved;mainFrame.HorizontalReserved=item.Value;aryTemporaryAttribute.push({Name:item.Name,Value:item.Value,BackupValue:backup});}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.TITLEHEIGHT){var backup=mainFrame.ChartBorder.TitleHeight;mainFrame.ChartBorder.TitleHeight=item.Value;aryTemporaryAttribute.push({Name:item.Name,Value:item.Value,BackupValue:backup});}}};this.RestoreIndexTemporaryAttribute=function(windowIndex){if(windowIndex<0)return;if(!this.Frame||!IFrameSplitOperator.IsNonEmptyArray(this.Frame.SubFrame))return;var aryTemporaryAttribute=this.IndexTemporaryAttribute[windowIndex];if(!IFrameSplitOperator.IsNonEmptyArray(aryTemporaryAttribute))return;var mainFrame=this.Frame.SubFrame[windowIndex].Frame;for(var i=0;i<aryTemporaryAttribute.length;++i){var item=aryTemporaryAttribute[i];if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.BOTTOMSPACE){mainFrame.ChartBorder.BottomSpace=item.BackupValue;}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.TOPSPACE){mainFrame.ChartBorder.TopSpace=item.BackupValue;}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.SHOWLEFTTEXT){mainFrame.YSplitOperator.IsShowLeftText=item.BackupValue;}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.SHOWRIGHTTEXT){mainFrame.YSplitOperator.IsShowRightText=item.BackupValue;}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.SPLITTYPE){mainFrame.YSplitOperator.SplitType=item.BackupValue;}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.HRESERVED){mainFrame.HorizontalReserved=item.BackupValue;}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.TITLEHEIGHT){mainFrame.ChartBorder.TitleHeight=item.BackupValue;}}};}function GetDevicePixelRatio(){if(typeof window=='undefined')return 1;return window.devicePixelRatio||1;}function GetFontHeight(context,font,word){if(!context)return null;if(font)context.font=font;var text='擎';if(IFrameSplitOperator.IsString(word))text=word;var fontInfo=context.measureText(text);var textHeight=fontInfo.fontBoundingBoxAscent+fontInfo.fontBoundingBoxDescent;if(!IFrameSplitOperator.IsNumber(textHeight))textHeight=fontInfo.width+2*GetDevicePixelRatio();return textHeight;}function IsPhoneWeb(){var userAgentInfo=navigator.userAgent;var Agents=new Array("Android","iPhone","SymbianOS","Windows Phone","iPad","iPod");for(var v=0;v<Agents.length;v++){if(userAgentInfo.indexOf(Agents[v])>0)return true;}return false;}function OnKeyDown(e)//键盘事件
2527
2529
  {if(this.JSChartContainer&&this.JSChartContainer.OnKeyDown)this.JSChartContainer.OnKeyDown(e);}function OnKeyUp(e)//键盘事件
2528
2530
  {if(this.JSChartContainer&&this.JSChartContainer.OnKeyUp)this.JSChartContainer.OnKeyUp(e);}function OnWheel(e)//上下滚动事件
2529
2531
  {if(this.JSChartContainer&&this.JSChartContainer.OnWheel)this.JSChartContainer.OnWheel(e);}function ToFixed(number,precision){var b=1;if(isNaN(number))return number;if(number<0)b=-1;var multiplier=Math.pow(10,precision);var value=Math.round(Math.abs(number)*multiplier)/multiplier*b;if(/^(\d+(?:\.\d+)?)(e)([\-]?\d+)$/.test(value))var s=value.toFixed2(precision);else var s=value.toString();var rs=s.indexOf('.');if(rs<0&&precision>0){rs=s.length;s+='.';}while(s.length<=rs+precision){s+='0';}return s;}function IsRectOverlap(rt,rt2){if(Math.max(rt.Left,rt2.Left)<Math.min(rt.Right,rt2.Right)&&Math.max(rt.Top,rt2.Top)<Math.min(rt.Bottom,rt2.Bottom))return true;return false;}//获取文字高度和宽度
@@ -3316,8 +3318,8 @@ this.UpdateFrameMaxMin=function()//调整坐标最大 最小值
3316
3318
  {this.Frame.XYSplit=true;return;}if(this.Frame.YSpecificMaxMin)//固定坐标
3317
3319
  {value.Max=this.Frame.YSpecificMaxMin.Max;value.Min=this.Frame.YSpecificMaxMin.Min;}else{for(var i=0;i<this.ChartPaint.length;++i){var paint=this.ChartPaint[i];if(paint.IsShow==false)continue;//隐藏的图形不计算
3318
3320
  var range=paint.GetMaxMin();if(range==null||range.Max==null||range.Min==null)continue;if(IFrameSplitOperator.IsNumber(range.Max)){if(value.Max==null||value.Max<range.Max)value.Max=range.Max;}if(IFrameSplitOperator.IsNumber(range.Min)){if(value.Min==null||value.Min>range.Min)value.Min=range.Min;}}}if(!IFrameSplitOperator.IsNumber(this.Frame.YMaxMin.Max)||this.Frame.YMaxMin.Max!=value.Max){this.Frame.YMaxMin.Max=value.Max;this.Frame.XYSplit=true;}if(!IFrameSplitOperator.IsNumber(this.Frame.YMaxMin.Min)||this.Frame.YMaxMin.Min!=value.Min){this.Frame.YMaxMin.Min=value.Min;this.Frame.XYSplit=true;}if(this.Frame.XYSplit){var max=10,min=0;if(value.Max!=null)max=value.Max;if(value.Min!=null)min=value.Min;this.Frame.HorizontalMax=max;this.Frame.HorizontalMin=min;}else{this.Frame.XYSplit=true;}};this.UpdateTemporaryAttribute=function(mainFrame,aryAttribute)//更新临时属性
3319
- {if(!IFrameSplitOperator.IsNonEmptyArray(aryAttribute))return;for(var i=0;i<aryAttribute.length;++i){var item=aryAttribute[i];if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.BOTTOMSPACE){var backup=mainFrame.ChartBorder.BottomSpace;mainFrame.ChartBorder.BottomSpace=item.Value;this.AryTemporaryAttribute.push({Name:item.Name,Value:item.Value,BackupValue:backup});}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.TOPSPACE){var backup=mainFrame.ChartBorder.TopSpace;mainFrame.ChartBorder.TopSpace=item.Value;this.AryTemporaryAttribute.push({Name:item.Name,Value:item.Value,BackupValue:backup});}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.SHOWLEFTTEXT){var backup=mainFrame.YSplitOperator.IsShowLeftText;mainFrame.YSplitOperator.IsShowLeftText=item.Value;this.AryTemporaryAttribute.push({Name:item.Name,Value:item.Value,BackupValue:backup});}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.SHOWRIGHTTEXT){var backup=mainFrame.YSplitOperator.IsShowRightText;mainFrame.YSplitOperator.IsShowRightText=item.Value;this.AryTemporaryAttribute.push({Name:item.Name,Value:item.Value,BackupValue:backup});}}};this.RestoreTemporaryAttribute=function(mainFrame)//还原临时属性
3320
- {if(!IFrameSplitOperator.IsNonEmptyArray(this.AryTemporaryAttribute))return;for(var i=0;i<this.AryTemporaryAttribute.length;++i){var item=this.AryTemporaryAttribute[i];if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.BOTTOMSPACE){mainFrame.ChartBorder.BottomSpace=item.BackupValue;}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.TOPSPACE){mainFrame.ChartBorder.TopSpace=item.BackupValue;}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.SHOWLEFTTEXT){mainFrame.YSplitOperator.IsShowLeftText=item.BackupValue;}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.SHOWRIGHTTEXT){mainFrame.YSplitOperator.IsShowRightText=item.BackupValue;}}this.AryTemporaryAttribute=[];};}//行情框架
3321
+ {if(!IFrameSplitOperator.IsNonEmptyArray(aryAttribute))return;for(var i=0;i<aryAttribute.length;++i){var item=aryAttribute[i];if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.BOTTOMSPACE){var backup=mainFrame.ChartBorder.BottomSpace;mainFrame.ChartBorder.BottomSpace=item.Value;this.AryTemporaryAttribute.push({Name:item.Name,Value:item.Value,BackupValue:backup});}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.TOPSPACE){var backup=mainFrame.ChartBorder.TopSpace;mainFrame.ChartBorder.TopSpace=item.Value;this.AryTemporaryAttribute.push({Name:item.Name,Value:item.Value,BackupValue:backup});}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.SHOWLEFTTEXT){var backup=mainFrame.YSplitOperator.IsShowLeftText;mainFrame.YSplitOperator.IsShowLeftText=item.Value;this.AryTemporaryAttribute.push({Name:item.Name,Value:item.Value,BackupValue:backup});}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.SHOWRIGHTTEXT){var backup=mainFrame.YSplitOperator.IsShowRightText;mainFrame.YSplitOperator.IsShowRightText=item.Value;this.AryTemporaryAttribute.push({Name:item.Name,Value:item.Value,BackupValue:backup});}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.HRESERVED){var backup=mainFrame.HorizontalReserved;mainFrame.HorizontalReserved=item.Value;this.AryTemporaryAttribute.push({Name:item.Name,Value:item.Value,BackupValue:backup});}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.TITLEHEIGHT){var backup=mainFrame.ChartBorder.TitleHeight;mainFrame.ChartBorder.TitleHeight=item.Value;this.AryTemporaryAttribute.push({Name:item.Name,Value:item.Value,BackupValue:backup});}}};this.RestoreTemporaryAttribute=function(mainFrame)//还原临时属性
3322
+ {if(!IFrameSplitOperator.IsNonEmptyArray(this.AryTemporaryAttribute))return;for(var i=0;i<this.AryTemporaryAttribute.length;++i){var item=this.AryTemporaryAttribute[i];if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.BOTTOMSPACE){mainFrame.ChartBorder.BottomSpace=item.BackupValue;}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.TOPSPACE){mainFrame.ChartBorder.TopSpace=item.BackupValue;}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.SHOWLEFTTEXT){mainFrame.YSplitOperator.IsShowLeftText=item.BackupValue;}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.SHOWRIGHTTEXT){mainFrame.YSplitOperator.IsShowRightText=item.BackupValue;}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.HRESERVED){mainFrame.HorizontalReserved=item.BackupValue;}else if(item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.TITLEHEIGHT){mainFrame.ChartBorder.TitleHeight=item.BackupValue;this.AryTemporaryAttribute.push({Name:item.Name,Value:item.Value,BackupValue:backup});}}this.AryTemporaryAttribute=[];};}//行情框架
3321
3323
  function HQTradeFrame(){this.SubFrame=new Array();//SubFrameItem 数组
3322
3324
  this.SizeChange=true;//大小是否改变
3323
3325
  this.ChartBorder;this.Canvas;//画布
@@ -6508,6 +6510,7 @@ this.ShowLastDataFormat=0;//0=默认 1=更新时间替换时间
6508
6510
  this.MultiDayBeforeOpenData;//多日分时图 盘前数据
6509
6511
  this.MultiDayAfterCloseData;//多日分时图 收盘数据
6510
6512
  this.TimeFormat;//显示时间格式 "HH:MM:SS", "hh:MM", "HH:MM:SS.fff"
6513
+ this.AryOverlayTitleName=[];//["MTitle-Close", "MTitle-Increase"];
6511
6514
  this.CallAuctionShowTitle=new _set2.default(["MTitle-AC-Price","MTitle-AC-Vol","MTitle-AC-NotMatchVol","MTitle-AC-Increase","MTitle-AC-AvPrice"]);this.GetCurrentKLineData=function()//获取当天鼠标位置所在的K线数据
6512
6515
  {if(this.LastShowData)return this.LastShowData;if(this.CursorIndex==null||!this.Data)return null;if(this.Data.length<=0)return null;var index=Math.abs(this.CursorIndex);index=parseInt(index.toFixed(0));var dataIndex=this.Data.DataOffset+index;if(dataIndex>=this.Data.Data.length)dataIndex=this.Data.Data.length-1;if(dataIndex<0)return null;var item=this.Data.Data[dataIndex];return item;};this.GetCurrentAuctionData=function()//获取当前鼠标所在位置的盘前盘后数据
6513
6516
  {var isHScreen=this.Frame.IsHScreen===true;//空数据 返回坐标信息
@@ -6524,7 +6527,9 @@ if(isLastOne&&this.ShowLastDataFormat==1){if(this.Data&&this.Data.UpdateTime&&IF
6524
6527
  {var strDate=null,strTime=null,text=null;if(this.IsShowDate)strDate=IFrameSplitOperator.FormatDateString(item.Date,"YYYY-MM-DD");if(this.IsShowTime)strTime=IFrameSplitOperator.FormatTimeString(item.Time,this.TimeFormat);if(strDate&&strTime)text=strDate+' '+strTime;else if(strDate)text=strDate;else if(strTime)text=strTime;if(text)aryText.push({Text:text,Color:this.DateTimeColor});}else{var text=IFrameSplitOperator.FormatDateTimeString(item.DateTime,this.IsShowDate,this.IsShowTime);aryText.push({Text:text,Color:this.DateTimeColor});}}}var close=item.Close;var increase=item.Increase;var vol=item.Vol;var amount=item.Amount;var yClose=item.YClose;if(!IFrameSplitOperator.IsNumber(yClose))yClose=this.YClose;if(isFutures&&IFrameSplitOperator.IsNumber(item.YClearing))yClose=item.YClearing;//期货使用昨结算
6525
6528
  if(IFrameSplitOperator.IsNumber(close)){var color=this.GetColor(close,yClose);var text=g_JSChartLocalization.GetText('MTitle-Close',this.LanguageID)+close.toFixed(defaultfloatPrecision);aryText.push({Text:text,Color:color});}if(IFrameSplitOperator.IsNumber(increase)){var color=this.GetColor(increase,0);var text=g_JSChartLocalization.GetText('MTitle-Increase',this.LanguageID)+increase.toFixed(2)+'%';aryText.push({Text:text,Color:color});}var isShowAvPrice=true;var upperSymbol=this.Symbol.toUpperCase();if(MARKET_SUFFIX_NAME.IsET(upperSymbol)&&!MARKET_SUFFIX_NAME.IsETShowAvPrice(upperSymbol))isShowAvPrice=false;else if(MARKET_SUFFIX_NAME.IsShowAvPrice&&!MARKET_SUFFIX_NAME.IsShowAvPrice(upperSymbol))isShowAvPrice=false;if(IFrameSplitOperator.IsNumber(item.AvPrice)&&isShowAvPrice&&this.IsShowAveragePrice){var color=this.GetColor(item.AvPrice,yClose);var text=g_JSChartLocalization.GetText('MTitle-AvPrice',this.LanguageID)+item.AvPrice.toFixed(defaultfloatPrecision);aryText.push({Text:text,Color:color});}if(IFrameSplitOperator.IsNumber(vol)){var text=g_JSChartLocalization.GetText('MTitle-Vol',this.LanguageID)+IFrameSplitOperator.FromatIntegerString(vol/unit,2,this.LanguageID);aryText.push({Text:text,Color:this.VolColor});}if(IFrameSplitOperator.IsNumber(amount)){var text=g_JSChartLocalization.GetText('MTitle-Amount',this.LanguageID)+IFrameSplitOperator.FormatValueString(amount,2,this.LanguageID);aryText.push({Text:text,Color:this.AmountColor});}if(IFrameSplitOperator.IsNumber(item.Position)){var text=g_JSChartLocalization.GetText('MTitle-Position',this.LanguageID)+IFrameSplitOperator.FromatIntegerString(item.Position,2,this.LanguageID);aryText.push({Text:text,Color:this.VolColor});}if(isLastOne&&this.ShowLastDataFormat==0)//显示数据最后的更新时间
6526
6529
  {if(this.Data&&this.Data.UpdateTime&&IFrameSplitOperator.IsNumber(this.Data.UpdateTime.Date)&&IFrameSplitOperator.IsNumber(this.Data.UpdateTime.Time)){var text=g_JSChartLocalization.GetText('MTitle-UpdateTime',this.LanguageID)+IFrameSplitOperator.FormatTimeString(this.Data.UpdateTime.Time,"HH:MM:SS");aryText.push({Text:text,Color:this.DateTimeColor});}}//叠加股票的名字
6527
- if(IFrameSplitOperator.IsNonEmptyArray(this.OverlayChartPaint)){for(var i=0;i<this.OverlayChartPaint.length;++i){var item=this.OverlayChartPaint[i];if(!item.Symbol||!item.Title)continue;var clrText=item.Color;var text='['+item.Title+']';aryText.push({Text:text,Color:clrText});}}return{AryText:aryText};};this.DrawItem=function(item,isLastOne)//isLastOne 是否是最后一个数据
6530
+ if(IFrameSplitOperator.IsNonEmptyArray(this.OverlayChartPaint)){for(var i=0;i<this.OverlayChartPaint.length;++i){var overlayItem=this.OverlayChartPaint[i];if(!overlayItem.Symbol||!overlayItem.Title)continue;var clrText=overlayItem.Color;var text=''+overlayItem.Title;var arySubText=[{Text:"[",Color:clrText}];arySubText.push({Text:text,Color:clrText});//分钟数据
6531
+ if(IFrameSplitOperator.IsNonEmptyArray(this.AryOverlayTitleName)){var minItem=this.GetMinuteItemByDateTime(overlayItem.Data,{Date:item.Date,Time:item.Time});if(minItem){var dec=GetfloatPrecision(overlayItem.Symbol);//价格小数位数
6532
+ for(var j=0;j<this.AryOverlayTitleName.length;++j){var titleName=this.AryOverlayTitleName[j];if(titleName=="MTitle-Close"){if(IFrameSplitOperator.IsNumber(minItem.Close)&&IFrameSplitOperator.IsNumber(minItem.YClose))var color=this.GetColor(minItem.Close,minItem.YClose);var text=g_JSChartLocalization.GetText(titleName,this.LanguageID)+minItem.Close.toFixed(dec);arySubText.push({Text:text,Color:color});}else if(titleName="MTitle-Increase"){if(IFrameSplitOperator.IsNumber(minItem.Increase)){var color=this.GetColor(minItem.Increase,0);var text=g_JSChartLocalization.GetText(titleName,this.LanguageID)+minItem.Increase.toFixed(2)+'%';arySubText.push({Text:text,Color:color});}}}}}arySubText.push({Text:"]",Color:clrText});aryText.push.apply(aryText,arySubText);}}return{AryText:aryText};};this.GetMinuteItemByDateTime=function(data,dateTime){if(!dateTime||!data||!IFrameSplitOperator.IsNonEmptyArray(data.Data))return null;for(var i=0;i<data.Data.length;++i){var item=data.Data[i];if(item.Date===dateTime.Date&&item.Time===dateTime.Time){return item;}}return null;};this.DrawItem=function(item,isLastOne)//isLastOne 是否是最后一个数据
6528
6533
  {if(!item)return;var pixelRatio=GetDevicePixelRatio();var isHScreen=this.Frame.IsHScreen===true;var border=this.Frame.GetBorder();var left=this.GetLeft(isHScreen);var right=this.GetRight(isHScreen);var bottom=this.GetBottom(isHScreen);if(isHScreen){if(this.Frame.ChartBorder.Right<5*pixelRatio)return;var xText=bottom;var yText=left;this.Canvas.translate(xText,yText);this.Canvas.rotate(90*Math.PI/180);left=bottom=0;//旋转以后 位置调整0
6529
6534
  }else{if(this.Frame.ChartBorder.Top<5*pixelRatio)return;}this.Canvas.font=this.Font;this.Canvas.textAlign="left";this.Canvas.textBaseline="bottom";var position={Left:left,MaxRight:right,Bottom:bottom,IsHScreen:isHScreen};var titleData=this.GetFormatTitle({Data:item,IsLastOne:isLastOne});if(titleData&&IFrameSplitOperator.IsNonEmptyArray(titleData.AryText)){for(var i=0;i<titleData.AryText.length;++i){var item=titleData.AryText[i];if(!this.DrawText(item.Text,item.Color,position))break;}}};//盘前 盘后数据格式化
6530
6535
  this.FormatCallAuctionTitle=function(data){var aryText=[];//{ Color: Text: }
@@ -8521,9 +8526,11 @@ this.ChartPaint[0].TradeData=null;//交易系统数据取消
8521
8526
  var title=this.TitlePaint[1];if(title){title.TradeIndex=null;title.ColorIndex=null;}this.UpdataDataoffset();//更新数据偏移
8522
8527
  this.UpdateFrameMaxMin();//调整坐标最大 最小值
8523
8528
  this.Draw();};this.SetFrameToolbar=function(windowIndex,window){if(!window||!this.Frame.SubFrame[windowIndex]||!this.Frame.SubFrame[windowIndex].Frame)return;var frame=this.Frame.SubFrame[windowIndex].Frame;var bChanged=false;if(IFrameSplitOperator.IsBool(window.Modify)){frame.ModifyIndex=window.Modify;bChanged=true;}if(IFrameSplitOperator.IsBool(window.Change)){frame.ChangeIndex=window.Change;bChanged=true;}if(IFrameSplitOperator.IsBool(window.Close)){frame.CloseIndex=window.Close;bChanged=true;}if(IFrameSplitOperator.IsBool(window.Overlay)){frame.OverlayIndex=window.Overlay;bChanged=true;}//工具栏变 先刷新工具栏
8524
- if(bChanged){frame.SizeChange=true;frame.DrawToolbar();}};this.SetFrameAttribute=function(windowIndex,attr){if(!this.Frame.SubFrame[windowIndex]||!this.Frame.SubFrame[windowIndex].Frame)return;if(!attr)return;var frame=this.Frame.SubFrame[windowIndex].Frame;if(!IFrameSplitOperator.IsUndefined(attr.HorizontalReserved))frame.HorizontalReserved=attr.HorizontalReserved;//Y轴上下预留
8529
+ if(bChanged){frame.SizeChange=true;frame.DrawToolbar();}};//TODO:准备废弃
8530
+ this.SetFrameAttribute=function(windowIndex,attr){if(!this.Frame.SubFrame[windowIndex]||!this.Frame.SubFrame[windowIndex].Frame)return;if(!attr)return;var frame=this.Frame.SubFrame[windowIndex].Frame;if(!IFrameSplitOperator.IsUndefined(attr.HorizontalReserved))frame.HorizontalReserved=attr.HorizontalReserved;//Y轴上下预留
8525
8531
  if(IFrameSplitOperator.IsNumber(attr.TitleHeight))frame.ChartBorder.TitleHeight=attr.TitleHeight;//指标标题高度
8526
- };this.ResetFrameAttribute=function(windowIndex){if(!this.Frame.SubFrame[windowIndex]||!this.Frame.SubFrame[windowIndex].Frame)return;var frame=this.Frame.SubFrame[windowIndex].Frame;frame.HorizontalReserved=null;};//切换成 脚本指标
8532
+ };//TODO:准备废弃
8533
+ this.ResetFrameAttribute=function(windowIndex){if(!this.Frame.SubFrame[windowIndex]||!this.Frame.SubFrame[windowIndex].Frame)return;var frame=this.Frame.SubFrame[windowIndex].Frame;frame.HorizontalReserved=null;};//切换成 脚本指标
8527
8534
  this.ChangeScriptIndex=function(windowIndex,indexData,option){this.DeleteIndexPaint(windowIndex,true);this.RestoreIndexTemporaryAttribute(windowIndex);//恢复临时属性
8528
8535
  this.WindowIndex[windowIndex]=new ScriptIndex(indexData.Name,indexData.Script,indexData.Args,indexData);//脚本执行
8529
8536
  this.ResetFrameAttribute(windowIndex);this.Frame.ClearYCoordinateMaxMin(windowIndex);if(option){if(option.Window){this.SetFrameToolbar(windowIndex,option.Window);this.SetFrameAttribute(windowIndex,option.Window);//窗口属性
@@ -12089,7 +12096,7 @@ this.HORLINE=function(condition,data,type,extend){var drawData={Data:[],LineType
12089
12096
  //{ Color:背景色, Border:边框颜色, Margin=[上,下,左, 右] }
12090
12097
  this.BACKGROUND=function(color,borderColor,left,right,top,bottom){var bg={Margin:[0,1,1,1]};if(color)bg.Color=color;if(borderColor)bg.Border=borderColor;if(IFrameSplitOperator.IsNumber(left))bg.Margin[2]=left;if(IFrameSplitOperator.IsNumber(right))bg.Margin[3]=right;if(IFrameSplitOperator.IsNumber(top))bg.Margin[0]=top;if(IFrameSplitOperator.IsNumber(bottom))bg.Margin[1]=bottom;return bg;};//该函数和DRAWTEXT, DRAWICON连用
12091
12098
  //{ color:线段颜色, lineWidth:宽度 lineType:线段样式0=直线 1=虚线}
12092
- this.CKLINE=function(color,lineWidth,lineType,lineDotted){var drawData={Color:color,LineWidth:1,LineType:0,LineDot:[3,3]};if(IFrameSplitOperator.IsPlusNumber(lineWidth))drawData.LineWidth=lineWidth;if(IFrameSplitOperator.IsPlusNumber(lineType))drawData.LineType=lineType;if(lineDotted){var ary=lineDotted.split(',');var dotted=[];for(var i in ary){var item=ary[i];if(!item)continue;var value=parseInt(ary[i]);if(value<=0)continue;dotted.push(value);}if(dotted.length>0)drawData.LineDotted=dotted;}drawData.Data=[];for(var i=0;i<this.SymbolData.Data.Data.length;++i){var item=this.SymbolData.Data.Data[i];drawData.Data[i]={High:item.High,Low:item.Low};}return drawData;};//多头建仓(买入开仓).
12099
+ this.CKLINE=function(color,lineWidth,lineType,lineDotted){var drawData={Color:color,LineWidth:1,LineType:0,LineDot:[3,3]};if(IFrameSplitOperator.IsPlusNumber(lineWidth))drawData.LineWidth=lineWidth;if(IFrameSplitOperator.IsPlusNumber(lineType))drawData.LineType=lineType;if(lineDotted){var ary=lineDotted.split(',');var dotted=[];for(var i in ary){var item=ary[i];if(!item)continue;var value=parseInt(ary[i]);if(value<=0)continue;dotted.push(value);}if(dotted.length>0)drawData.LineDotted=dotted;}drawData.Data=[];for(var i=0;i<this.SymbolData.Data.Data.length;++i){var item=this.SymbolData.Data.Data[i];drawData.Data[i]={High:item.High,Low:item.Low,Close:item.Close};}return drawData;};//多头建仓(买入开仓).
12093
12100
  //参数1为触发条件,参数2为标记放置位置.此函数只适用于特定版本交易模式下.
12094
12101
  //例如: BUY(CROSS(A,B),LOW),当A上穿B时,在LOW处画标记,同时突出提示或直接下单,如果LOW改为DRAWNULL,就不画标记.(分时图上不支持)
12095
12102
  this.BUY=function(condition,data,iconSymbol,color){var iconInfo={Color:"rgb(0,255,0)",Type:"SVG",Icon:'\uE660'};if(IFrameSplitOperator.IsString(iconSymbol))iconInfo.Icon=iconSymbol;if(color)iconInfo.Color=color;var result=this.CalculateTradeData(condition,data,iconInfo);result.DrawType='BUY';return result;};this.BUYSHORT=function(condition,data,iconSymbol,color){var iconInfo={Color:"rgb(0,255,0)",Type:"SVG",Icon:'\uE660'};if(IFrameSplitOperator.IsString(iconSymbol))iconInfo.Icon=iconSymbol;if(color)iconInfo.Color=color;var result=this.CalculateTradeData(condition,data,iconInfo);result.DrawType='BUYSHORT';return result;};//多头平仓(卖出平仓).
@@ -12970,7 +12977,7 @@ else hqDataType=HQ_DATA_TYPE.MINUTE_ID;//分钟数据
12970
12977
  {if(hqChart.ChartPaint[0]){var item=hqChart.ChartPaint[0];if(item&&item.DrawKRange)option.DrawInfo={Start:item.DrawKRange.Start,End:item.DrawKRange.End};}}if(hqDataType===HQ_DATA_TYPE.HISTORY_MINUTE_ID)option.TrateDate=hqChart.TradeDate;if(hqDataType===HQ_DATA_TYPE.MULTIDAY_MINUTE_ID)option.DayCount=hqChart.DayCount;if(hqChart.NetworkFilter)option.NetworkFilter=hqChart.NetworkFilter;if(this.Condition&&!this.IsMeetCondition(param,option)){this.ShowConditionError(param,this.Condition.Message);return;}function _Temp_ExecuteScript(){++self.RunCount;var code=self.Script;var run=JSComplier.Execute(code,option,hqChart.ScriptErrorCallback);}if(this.IsAuthorization===true&&this.RunCount===0)//权限认证 执行一次
12971
12978
  {this.RequestAuthorization(hqChart,function(){_Temp_ExecuteScript();});}else{_Temp_ExecuteScript();}};//是否符合限制条件
12972
12979
  this.IsMeetCondition=function(param,option){JSConsole.Complier.Log('[ScriptIndex::IsMeetCondition] ',this.Condition);if(this.Condition.Period)//周期是否满足
12973
- {if(!this.IsMeetPeriodCondition(param,option))return false;if(!this.IsMeetIncludeCondition(param,option))return false;}return true;};this.RequestAuthorization=function(hqChart,callback){var _this60=this;var reqData={IndexName:this.Name,IndexID:this.ID,IsOverlayIndex:this.IsOverlayIndex===true};var obj={Name:'ScriptIndex::RequestAuthorization',//类名::
12980
+ {if(!this.IsMeetPeriodCondition(param,option))return false;if(!this.IsMeetIncludeCondition(param,option))return false;}return true;};this.RequestAuthorization=function(hqChart,callback){var _this60=this;var reqData={IndexName:this.Name,IndexID:this.ID,IsOverlayIndex:this.IsOverlayIndex===true,Symbol:hqChart.Symbol};var obj={Name:'ScriptIndex::RequestAuthorization',//类名::
12974
12981
  Explain:'指标权限验证',Request:{Data:reqData},Self:this,HQChart:hqChart,PreventDefault:false};if(hqChart.NetworkFilter){hqChart.NetworkFilter(obj,function(data){_this60.OnRecvAuthorization(data);callback();});}else{JSConsole.JSComplier.Warn("[ScriptIndex::RequestData] NetworkFilter error.");}};this.OnRecvAuthorization=function(recv){if(recv&&recv.Lock)this.SetLock(recv.Lock);};//周期是否满足条件
12975
12982
  this.IsMeetPeriodCondition=function(param,option){if(!this.Condition.Period)return true;for(var i in this.Condition.Period){var item=this.Condition.Period[i];switch(item){case CONDITION_PERIOD.MINUTE_ID:if(option.HQDataType==HQ_DATA_TYPE.MINUTE_ID)return true;break;case CONDITION_PERIOD.MULTIDAY_MINUTE_ID:if(option.HQDataType==HQ_DATA_TYPE.MULTIDAY_MINUTE_ID)return true;break;case CONDITION_PERIOD.KLINE_DAY_ID:case CONDITION_PERIOD.KLINE_WEEK_ID:case CONDITION_PERIOD.KLINE_MONTH_ID:case CONDITION_PERIOD.KLINE_YEAR_ID:case CONDITION_PERIOD.KLINE_TWOWEEK_ID:case CONDITION_PERIOD.KLINE_QUARTER_ID:case CONDITION_PERIOD.KLINE_MINUTE_ID:case CONDITION_PERIOD.KLINE_5_MINUTE_ID:case CONDITION_PERIOD.KLINE_15_MINUTE_ID:case CONDITION_PERIOD.KLINE_30_MINUTE_ID:case CONDITION_PERIOD.KLINE_60_MINUTE_ID:if(param.HQChart.Period==item)return true;break;}}return false;};this.IsMeetIncludeCondition=function(param,option){if(!this.Condition.Include||this.Condition.Include.length<=0)return true;var symbol=param.HQChart.Symbol;if(symbol)symbol=symbol.toUpperCase();for(var i in this.Condition.Include){var item=this.Condition.Include[i];if(symbol==item)return true;}return false;};//显示指标不符合条件
12976
12983
  this.ShowConditionError=function(param,msg){var hqChart=param.HQChart;var windowIndex=param.WindowIndex;hqChart.DeleteIndexPaint(windowIndex);if(windowIndex==0)hqChart.ShowKLine(true);var message='指标不支持当前品种或周期';if(msg)message=msg;var line=new ChartLine();line.Canvas=hqChart.Canvas;line.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;line.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;line.NotSupportMessage=message;hqChart.ChartPaint.push(line);hqChart.UpdataDataoffset();//更新数据偏移
@@ -13224,7 +13231,9 @@ var hqDataType=HQ_DATA_TYPE.KLINE_ID;//默认K线
13224
13231
  var dateRange=null;if(hqChart.ClassName==='MinuteChartContainer'||hqChart.ClassName==='MinuteChartHScreenContainer'){if(hqChart.DayCount>1)hqDataType=HQ_DATA_TYPE.MULTIDAY_MINUTE_ID;//多日分钟
13225
13232
  else hqDataType=HQ_DATA_TYPE.MINUTE_ID;//分钟数据
13226
13233
  dateRange=hisData.GetDateRange();}else if(hqChart.ClassName==='HistoryMinuteChartContainer'){hqDataType=HQ_DATA_TYPE.HISTORY_MINUTE_ID;//历史分钟
13227
- }else{dateRange=hisData.GetDateRange();}var args=[];if(this.Arguments){for(var i in this.Arguments){var item=this.Arguments[i];args.push({name:item.Name,value:item.Value});}}var requestCount;if(hqChart.GetRequestDataCount)requestCount=hqChart.GetRequestDataCount();var self=this;var postData={indexname:this.ID,symbol:hqChart.Symbol,script:this.Script,args:args,period:hqChart.Period,right:hqChart.Right,hqdatatype:hqDataType,IsAuthorization:this.IsAuthorization,WindowID:windowIndex,IsOverlayIndex:this.IsOverlayIndex===true};if(dateRange)postData.DateRange=dateRange;if(requestCount){postData.maxdatacount=requestCount.MaxRequestDataCount;postData.maxminutedaycount=requestCount.MaxRequestMinuteDayCount;}if(hqDataType==HQ_DATA_TYPE.MULTIDAY_MINUTE_ID||hqDataType==HQ_DATA_TYPE.MINUTE_ID)postData.daycount=hqChart.DayCount;this.HQDataType=hqDataType;++this.RunCount;if(hqChart.NetworkFilter){var obj={Name:'APIScriptIndex::ExecuteScript',//类名::
13234
+ }else{dateRange=hisData.GetDateRange();}var args=[];if(this.Arguments){for(var i in this.Arguments){var item=this.Arguments[i];args.push({name:item.Name,value:item.Value});}}var requestCount;if(hqChart.GetRequestDataCount)requestCount=hqChart.GetRequestDataCount();var self=this;var postData={indexname:this.ID,symbol:hqChart.Symbol,script:this.Script,args:args,period:hqChart.Period,right:hqChart.Right,hqdatatype:hqDataType,IsAuthorization:this.IsAuthorization,//是否需要鉴权
13235
+ IsFirst:this.RunCount===0,//指标是否首次请求数据
13236
+ WindowID:windowIndex,IsOverlayIndex:this.IsOverlayIndex===true};if(dateRange)postData.DateRange=dateRange;if(requestCount){postData.maxdatacount=requestCount.MaxRequestDataCount;postData.maxminutedaycount=requestCount.MaxRequestMinuteDayCount;}if(hqDataType==HQ_DATA_TYPE.MULTIDAY_MINUTE_ID||hqDataType==HQ_DATA_TYPE.MINUTE_ID)postData.daycount=hqChart.DayCount;this.HQDataType=hqDataType;++this.RunCount;if(hqChart.NetworkFilter){var obj={Name:'APIScriptIndex::ExecuteScript',//类名::
13228
13237
  Explain:'指标计算',Request:{Url:self.ApiUrl,Type:'POST',Data:postData},Self:this,HQChart:hqChart,PreventDefault:false};hqChart.NetworkFilter(obj,function(data){if(self.Version==2)self.RecvAPIData2(data,hqChart,windowIndex,hisData);else self.RecvAPIData(data,hqChart,windowIndex,hisData);});if(obj.PreventDefault==true)return;//已被上层替换,不调用默认的网络请求
13229
13238
  }JSNetwork.HttpRequest({url:self.ApiUrl,data:postData,type:"post",dataType:"json",async:true,success:function success(recvData){self.RecvAPIData(recvData,hqChart,windowIndex,hisData);},error:function error(request){self.RecvError(request);}});};//py 后台指标计算格式
13230
13239
  this.RecvAPIData2=function(data,hqChart,windowIndex,hisData){JSConsole.Complier.Log('[APIScriptIndex::RecvAPIData2] recv data ',this.Name,data);//if (data.code!=0) return;
@@ -16321,7 +16330,7 @@ if(this.MouseOnItem){if(this.MouseOnItem.Data==item)color=this.TextConfig.MouseO
16321
16330
  */this.Canvas.restore();this.ResizeDataCount(endIndex);};this.ResizeDataCount=function(startIndex){if(!IFrameSplitOperator.IsNumber(startIndex))return;if(startIndex<=0)return;if(this.LimitCount<=0)return;if(!this.Data||!IFrameSplitOperator.IsNonEmptyArray(this.Data.AryText))return;if(this.Data.AryText.length<=this.LimitCount)return;var delCount=this.Data.AryText.length-this.LimitCount;for(var i=0;i<delCount&&i<startIndex;++i){this.Data.AryText.shift();}};this.GetTooltipData=function(x,y,tooltip){var rtClient=this.GetClientRect();if(x>=rtClient.Left&&x<=rtClient.Right){for(var i=0;i<this.AryRect.length;++i){var item=this.AryRect[i];if(Path2DHelper.PtInRect(x,y,item.Rect)){tooltip.Data=item;tooltip.ChartPaint=this;tooltip.Type=1;return true;}}}return false;};this.ScrollStep=function(defaultStep){if(!this.Data||!IFrameSplitOperator.IsNonEmptyArray(this.Data.AryText))return false;if(!this.FirstItem)return false;var moveStep=this.MoveStep;if(IFrameSplitOperator.IsNumber(defaultStep))moveStep=defaultStep;var rtClient=this.GetClientRect();var left=rtClient.Left;var right=rtClient.Right;var width=this.FirstItem.Move.Width;var xOffset=this.FirstItem.Move.XOffset+moveStep;if(right-xOffset+width<left){var startIndex=this.GetDataIndex(this.FirstItem);nextIndex=startIndex-1;if(nextIndex<0){var index=this.Data.AryText.length-1;this.FirstItem=this.Data.AryText[index];this.FirstItem.Move={XOffset:0};}else{this.FirstItem=this.Data.AryText[nextIndex];this.FirstItem.Move={XOffset:xOffset-width};}}else{this.FirstItem.Move.XOffset=xOffset;}return true;};}/********************************************************************************
16322
16331
  * 版本信息输出
16323
16332
  *
16324
- */var HQCHART_VERSION="1.1.15709";function PrintHQChartVersion(){var logo='\n\n*************************************************************************************************************************************************************************** \n* \n* :%@@- \n* :@@@@- \n* =@@@@ :#@@@ .:+#@@@#=: :=*@@@@@@#+-. *@@@@. \n* :@@@@@ .@@@@@ .#@@@@@@@@@@@- +@@@@@@@@@@@@@+ @@@@@ -%@@* \n* +@@@@% #@@@@# *@@@@@@@@@@@@@@%. =@@@@@@@@@@@@@@@- @@@@@ -@@@@+ \n* %@@@@* @@@@@+ .%@@@@@@@@@@@@@@@@%: #@@@@@@@@@@@@@@@% @@@@# *@@@@= \n* @@@@@= @@@@@- .%@@@@@@@*++*%@@@@@@% .%@@@@@@@%*+==+**= -@@@@+ #@@@@- \n* @@@@@. @@@@@. #@@@@@%= =@@@@@@* %@@@@@@#: *@@@@- :::. .-+*###+: ::: .+##+: -%%@@@@@%%%% \n* .@@@@@ .@@@@@. +@@@@@% .@@@@@@ *@@@@@@: %@@@@: +@@@@@%. :%@@@@@@@@@@: *@@@ :@@@@@* @@@@@@@@@@@@ \n* :@@@@@ :@@@@@ @@@@@% :@@@@@+ @@@@@@: %@@@@-@@@@@@@@@. @@@@@@@@@@@@@. :@@@%-@@@@@@.:@@@@@@@@@@@# \n* -@@@@% -@@@@@ =@@@@@. %@@@@% %@@@@@- %@@@@@@@@@@@@@@* %@@@@@@@@@@@@+ -@@@@@@@@@@# -@@@@@@@@@@@. \n* +@@@@%=========#@@@@% @@@@@# :@@@@@ .@@@@@% @@@@@@@@%@@@@@@@ -%+:. .#@@@@* +@@@@@@@%%@. .::+@@@@#:: \n* #@@@@@@@@@@@@@@@@@@@# .@@@@@ .@@@@@ :@@@@@. @@@@@@#. #@@@@@. -@@@@* #@@@@@@: *@@@@+ \n* %@@@@@@@@@@@@@@@@@@@+ :@@@@@ .@@@@@ -@@@@@ @@@@@+ @@@@@. :@@@@* @@@@@% #@@@@- \n* @@@@@@@@@@@@@@@@@@@@: :@@@@% :@@@@@ +@@@@% -@@@@+ @@@@@ -@@@@+ @@@@@. @@@@@. \n* .@@@@@@@@@@@@@@@@@@@@ :@@@@% -@@@@% *@@@@% #@@@@. @@@@@ .=*#%%%@@@@@= :@@@@# @@@@@. \n* -@@@@@:::::::::=@@@@@ :@@@@@ @@@@@* +@@@@% @@@@@ @@@@% -#@@@@@@@@@@@@: -@@@@* @@@@@ \n* =@@@@% =@@@@% .@@@@@ :@@@@@. -@@@@% @@@@@ .@@@@* +@@@@@@@@@@@@@@. =@@@@+ .@@@@@ \n* +@@@@# +@@@@# @@@@@# %@@@@% :@@@@@ .@@@@% =@@@@= -@@@@@*-:..%@@@@ +@@@@= :@@@@# \n* *@@@@* *@@@@* +@@@@@: #@@@@@+ .@@@@@@ :@@@@% *@@@@- @@@@@. @@@@% #@@@@: =@@@@+ \n* %@@@@= %@@@@+ @@@@@@- .%@@@@@# #@@@@@# :@@@@% #@@@@: @@@@% @@@@* %@@@@. #@@@@- \n* @@@@@- @@@@@= =@@@@@@#=...-*@@@@@@@: @@@@@@%=. :+**. :@@@@* %@@@@. .@@@@* *@@@@= @@@@@ %@@@@+ \n* .@@@@@: .@@@@@: *@@@@@@@@@@@@@@@@@@@# =@@@@@@@@%%%@@@@@@ +@@@@- @@@@@ .@@@@@: :%@@@@@- .@@@@% %@@@@@*+- \n* :@@@@@ :@@@@@ +@@@@@@@@@@@@@@@@@@@# =@@@@@@@@@@@@@@@@% %@@@@ @@@@@ @@@@@@@@@@@@@@@: -@@@@* *@@@@@@@@- \n* =@@@@@ -@@@@@ :@@@@@@@@@@@@@@@@@@@# :@@@@@@@@@@@@@@@% @@@@@ %@@@% #@@@@@@@@@#@@@@. +@@@@- .@@@@@@@@# \n* *@@@@# =@@@@% :#@@@@@@@#: :@@@@@= =@@@@@@@@@@@+. @@@@@ :@@@+ *@@@@@@@- %@@@ *@@@= =@@@@@@@* \n* =++++- -++++= .:::. .=*+: :-=+++=:. ****= .=+. .-++=: :+++ -+=: .-=+=:. \n* \n* \n* HQChart \n* Ver: '+HQCHART_VERSION+' \n* License: Apache License 2.0 \n* Source: https://github.com/jones2000/HQChart\n*\n************************************************************************************************************************************************************************** \n ';console.log(logo);}PrintHQChartVersion();//把给外界调用的方法暴露出来
16333
+ */var HQCHART_VERSION="1.1.15725";function PrintHQChartVersion(){var logo='\n\n*************************************************************************************************************************************************************************** \n* \n* :%@@- \n* :@@@@- \n* =@@@@ :#@@@ .:+#@@@#=: :=*@@@@@@#+-. *@@@@. \n* :@@@@@ .@@@@@ .#@@@@@@@@@@@- +@@@@@@@@@@@@@+ @@@@@ -%@@* \n* +@@@@% #@@@@# *@@@@@@@@@@@@@@%. =@@@@@@@@@@@@@@@- @@@@@ -@@@@+ \n* %@@@@* @@@@@+ .%@@@@@@@@@@@@@@@@%: #@@@@@@@@@@@@@@@% @@@@# *@@@@= \n* @@@@@= @@@@@- .%@@@@@@@*++*%@@@@@@% .%@@@@@@@%*+==+**= -@@@@+ #@@@@- \n* @@@@@. @@@@@. #@@@@@%= =@@@@@@* %@@@@@@#: *@@@@- :::. .-+*###+: ::: .+##+: -%%@@@@@%%%% \n* .@@@@@ .@@@@@. +@@@@@% .@@@@@@ *@@@@@@: %@@@@: +@@@@@%. :%@@@@@@@@@@: *@@@ :@@@@@* @@@@@@@@@@@@ \n* :@@@@@ :@@@@@ @@@@@% :@@@@@+ @@@@@@: %@@@@-@@@@@@@@@. @@@@@@@@@@@@@. :@@@%-@@@@@@.:@@@@@@@@@@@# \n* -@@@@% -@@@@@ =@@@@@. %@@@@% %@@@@@- %@@@@@@@@@@@@@@* %@@@@@@@@@@@@+ -@@@@@@@@@@# -@@@@@@@@@@@. \n* +@@@@%=========#@@@@% @@@@@# :@@@@@ .@@@@@% @@@@@@@@%@@@@@@@ -%+:. .#@@@@* +@@@@@@@%%@. .::+@@@@#:: \n* #@@@@@@@@@@@@@@@@@@@# .@@@@@ .@@@@@ :@@@@@. @@@@@@#. #@@@@@. -@@@@* #@@@@@@: *@@@@+ \n* %@@@@@@@@@@@@@@@@@@@+ :@@@@@ .@@@@@ -@@@@@ @@@@@+ @@@@@. :@@@@* @@@@@% #@@@@- \n* @@@@@@@@@@@@@@@@@@@@: :@@@@% :@@@@@ +@@@@% -@@@@+ @@@@@ -@@@@+ @@@@@. @@@@@. \n* .@@@@@@@@@@@@@@@@@@@@ :@@@@% -@@@@% *@@@@% #@@@@. @@@@@ .=*#%%%@@@@@= :@@@@# @@@@@. \n* -@@@@@:::::::::=@@@@@ :@@@@@ @@@@@* +@@@@% @@@@@ @@@@% -#@@@@@@@@@@@@: -@@@@* @@@@@ \n* =@@@@% =@@@@% .@@@@@ :@@@@@. -@@@@% @@@@@ .@@@@* +@@@@@@@@@@@@@@. =@@@@+ .@@@@@ \n* +@@@@# +@@@@# @@@@@# %@@@@% :@@@@@ .@@@@% =@@@@= -@@@@@*-:..%@@@@ +@@@@= :@@@@# \n* *@@@@* *@@@@* +@@@@@: #@@@@@+ .@@@@@@ :@@@@% *@@@@- @@@@@. @@@@% #@@@@: =@@@@+ \n* %@@@@= %@@@@+ @@@@@@- .%@@@@@# #@@@@@# :@@@@% #@@@@: @@@@% @@@@* %@@@@. #@@@@- \n* @@@@@- @@@@@= =@@@@@@#=...-*@@@@@@@: @@@@@@%=. :+**. :@@@@* %@@@@. .@@@@* *@@@@= @@@@@ %@@@@+ \n* .@@@@@: .@@@@@: *@@@@@@@@@@@@@@@@@@@# =@@@@@@@@%%%@@@@@@ +@@@@- @@@@@ .@@@@@: :%@@@@@- .@@@@% %@@@@@*+- \n* :@@@@@ :@@@@@ +@@@@@@@@@@@@@@@@@@@# =@@@@@@@@@@@@@@@@% %@@@@ @@@@@ @@@@@@@@@@@@@@@: -@@@@* *@@@@@@@@- \n* =@@@@@ -@@@@@ :@@@@@@@@@@@@@@@@@@@# :@@@@@@@@@@@@@@@% @@@@@ %@@@% #@@@@@@@@@#@@@@. +@@@@- .@@@@@@@@# \n* *@@@@# =@@@@% :#@@@@@@@#: :@@@@@= =@@@@@@@@@@@+. @@@@@ :@@@+ *@@@@@@@- %@@@ *@@@= =@@@@@@@* \n* =++++- -++++= .:::. .=*+: :-=+++=:. ****= .=+. .-++=: :+++ -+=: .-=+=:. \n* \n* \n* HQChart \n* Ver: '+HQCHART_VERSION+' \n* License: Apache License 2.0 \n* Source: https://github.com/jones2000/HQChart\n*\n************************************************************************************************************************************************************************** \n ';console.log(logo);}PrintHQChartVersion();//把给外界调用的方法暴露出来
16325
16334
  exports.default=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
16326
16335
  // BaseIndex:BaseIndex,
16327
16336
  // ChartLine:ChartLine,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hqchart",
3
- "version": "1.1.15710",
3
+ "version": "1.1.15726",
4
4
  "description": "HQChart - H5, 微信小程序 沪深/港股/数字货币/期货/美股 K线图(kline),走势图,缩放,拖拽,十字光标,画图工具,截图,筹码图. 分析家语法,通达信语法,(麦语法),第3方数据对接",
5
5
  "main": "lib/main.js",
6
6
  "scripts": {
@@ -59509,6 +59509,7 @@ HQData.APIIndex_PARTLINE=function(data, callback)
59509
59509
  var hqchart=data.HQChart;
59510
59510
  var kData=hqchart.GetKData();
59511
59511
  var bAuthorization=data.Request.Data.IsAuthorization;
59512
+ var bFirst=data.Request.Data.IsFirst;
59512
59513
 
59513
59514
  var lineData=
59514
59515
  {
@@ -59544,7 +59545,7 @@ HQData.APIIndex_PARTLINE=function(data, callback)
59544
59545
  outdata: { date:kData.GetDate(), time:kData.GetTime(), outvar:[lineData] }
59545
59546
  };
59546
59547
 
59547
- if (bAuthorization)
59548
+ if (bAuthorization && bFirst) //首次请求鉴权
59548
59549
  {
59549
59550
  apiData.Lock={ IsLocked:true };
59550
59551
  }
@@ -60927,6 +60928,7 @@ HQData.Request_IndexAuthorization=function(data, callback)
60927
60928
  Lock:
60928
60929
  {
60929
60930
  IsLocked:true,
60931
+ IsFullFrame:true,
60930
60932
  //Text:""
60931
60933
  //BG: ['rgba(245,245,220, 0.5)', "rgb(100,255,100)"], //锁区域背景色
60932
60934
  /*
@@ -11748,7 +11748,7 @@ function JSDraw(errorHandler,symbolData)
11748
11748
  for(var i=0;i<this.SymbolData.Data.Data.length;++i)
11749
11749
  {
11750
11750
  var item=this.SymbolData.Data.Data[i];
11751
- drawData.Data[i]={ High:item.High, Low:item.Low };
11751
+ drawData.Data[i]={ High:item.High, Low:item.Low, Close:item.Close };
11752
11752
  }
11753
11753
 
11754
11754
  return drawData;
@@ -21085,7 +21085,7 @@ function ScriptIndex(name,script,args,option)
21085
21085
 
21086
21086
  this.RequestAuthorization=function(hqChart, callback)
21087
21087
  {
21088
- var reqData={ IndexName:this.Name, IndexID:this.ID, IsOverlayIndex:this.IsOverlayIndex===true };
21088
+ var reqData={ IndexName:this.Name, IndexID:this.ID, IsOverlayIndex:this.IsOverlayIndex===true, Symbol:hqChart.Symbol };
21089
21089
 
21090
21090
  var obj=
21091
21091
  {
@@ -25480,7 +25480,9 @@ function APIScriptIndex(name,script,args,option, isOverlay)
25480
25480
  {
25481
25481
  indexname:this.ID, symbol: hqChart.Symbol, script:this.Script, args:args,
25482
25482
  period:hqChart.Period, right:hqChart.Right, hqdatatype: hqDataType,
25483
- IsAuthorization:this.IsAuthorization, WindowID:windowIndex,
25483
+ IsAuthorization:this.IsAuthorization, //是否需要鉴权
25484
+ IsFirst:this.RunCount===0, //指标是否首次请求数据
25485
+ WindowID:windowIndex,
25484
25486
  IsOverlayIndex:this.IsOverlayIndex===true,
25485
25487
  };
25486
25488
 
@@ -1166,6 +1166,8 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
1166
1166
  if (IFrameSplitOperator.IsNumber(subItem.Margin.Bottom)) chartTitle.ShowPositionConfig.Margin.Bottom=subItem.Margin.Bottom;
1167
1167
  }
1168
1168
  }
1169
+
1170
+ if (IFrameSplitOperator.IsNonEmptyArray(item.OverlayTitleName)) chartTitle.AryOverlayTitleName=item.OverlayTitleName.slice();
1169
1171
  }
1170
1172
 
1171
1173
  if (IFrameSplitOperator.IsBool(option.CorssCursorTouchEnd)) chart.CorssCursorTouchEnd = option.CorssCursorTouchEnd;
@@ -3081,6 +3083,8 @@ var JSCHART_TEMPORARY_ATTRIBUTE=
3081
3083
  SHOWLEFTTEXT:"MainFrame-ShowLeftText",
3082
3084
  SHOWRIGHTTEXT:"MainFrame-ShowRightText",
3083
3085
  SPLITTYPE:"MainFrame-SplitType", //0=自动分割 1=数据的最大最小值分割 2=堆积图(0-100)
3086
+ HRESERVED:"MainFrame-HorizontalReserved", //上下预留空间 { Top:, Bottom: }
3087
+ TITLEHEIGHT:"MainFrame-TitleHeight", //标题栏高度
3084
3088
  }
3085
3089
  }
3086
3090
 
@@ -4421,7 +4425,11 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
4421
4425
  if (this.TryClickLock)
4422
4426
  {
4423
4427
  //JSConsole.Chart.Log('[uielement.onmousedown] left, top ',e.clientX, e.clientY, this.getBoundingClientRect().left,this.getBoundingClientRect().top);
4424
- if (this.TryClickLock(x,y)) return;
4428
+ if (this.TryClickLock(x,y))
4429
+ {
4430
+ this.IsOnTouch=false;
4431
+ return;
4432
+ }
4425
4433
  }
4426
4434
 
4427
4435
  this.HideSelectRect();
@@ -10536,7 +10544,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10536
10544
  if (IFrameSplitOperator.IsBool(windowItem.IsShowOverlayIndexName)) frame.IsShowOverlayIndexName=windowItem.IsShowOverlayIndexName;
10537
10545
  if (IFrameSplitOperator.IsNumber(windowItem.IndexParamSpace)) frame.IndexParamSpace=windowItem.IndexParamSpace;
10538
10546
  if (IFrameSplitOperator.IsNumber(windowItem.IndexTitleSpace)) frame.IndexTitleSpace=windowItem.IndexTitleSpace;
10539
- if (!IFrameSplitOperator.IsUndefined(windowItem.HorizontalReserved)) frame.HorizontalReserved=windowItem.HorizontalReserved; //Y轴上下预留
10547
+
10540
10548
 
10541
10549
  if (windowItem.OverlayIndexType)
10542
10550
  {
@@ -10596,8 +10604,10 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10596
10604
  if (subItem && IFrameSplitOperator.IsNumber(subItem.Right)) frame.ToolbarConfig.Margin.Right=subItem.Right;
10597
10605
  }
10598
10606
 
10607
+ if (!IFrameSplitOperator.IsUndefined(frameItem.HorizontalReserved)) frame.HorizontalReserved=frameItem.HorizontalReserved; //Y轴上下预留
10608
+
10599
10609
  //分时图属性
10600
- if (IFrameSplitOperator.IsBool(frameItem.CloseBeforeButton)) frameItem.IsShowCloseButton=frameItem.CloseBeforeButton;
10610
+ if (IFrameSplitOperator.IsBool(frameItem.CloseBeforeButton)) frame.IsShowCloseButton=frameItem.CloseBeforeButton;
10601
10611
  if (frame.YSplitOperator.RightTextConfig) //主图右侧坐标设置
10602
10612
  {
10603
10613
  if (IFrameSplitOperator.IsNumber(frameItem.RightTextFormat)) //废弃(兼容版本)
@@ -11458,8 +11468,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11458
11468
  var item=this.WindowIndex[i];
11459
11469
  if (!item) continue;
11460
11470
 
11461
- var info={ Name:item.Name, WindowIndex:i, IsOverlay:false };
11471
+ var info={ Name:item.Name, WindowIndex:i, IsOverlay:false, IsAuthorization:item.IsAuthorization };
11462
11472
  if (item.ID) info.ID=item.ID;
11473
+ if (item.ClassName=="APIScriptIndex") info.API={ Url:item.ApiUrl, Name:item.Name, ID:item.ID };
11463
11474
  if (IFrameSplitOperator.IsNonEmptyArray(item.Arguments)) //参数
11464
11475
  {
11465
11476
  info.Args=[];
@@ -11468,6 +11479,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11468
11479
  var argItem=item.Arguments[j];
11469
11480
  info.Args.push( { Name:argItem.Name, Value:argItem.Value} );
11470
11481
  }
11482
+
11483
+ if (info.API) info.API.Args=info.Args;
11471
11484
  }
11472
11485
 
11473
11486
  aryIndex.push(info);
@@ -11491,8 +11504,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11491
11504
  var overlayItem=item.OverlayIndex[j];
11492
11505
  if (!overlayItem.Script) continue;
11493
11506
  var indexData=overlayItem.Script;
11494
- var info={ Name:indexData.Name, ID:indexData.ID, WindowIndex:i, IsOverlay:true, Identify:overlayItem.Identify };
11495
-
11507
+ var info={ Name:indexData.Name, ID:indexData.ID, WindowIndex:i, IsOverlay:true, Identify:overlayItem.Identify, IsAuthorization:indexData.IsAuthorization };
11508
+ if (indexData.ClassName=="APIScriptIndex") info.API={ Url:indexData.ApiUrl, Name:indexData.Name, ID:indexData.ID };
11496
11509
  if (IFrameSplitOperator.IsNonEmptyArray(indexData.Arguments)) //参数
11497
11510
  {
11498
11511
  info.Args=[];
@@ -11501,6 +11514,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11501
11514
  var argItem=indexData.Arguments[k];
11502
11515
  info.Args.push( { Name:argItem.Name, Value:argItem.Value} );
11503
11516
  }
11517
+
11518
+ if (info.API) info.API.Args=info.Args;
11504
11519
  }
11505
11520
 
11506
11521
  aryIndex.push(info);
@@ -12920,6 +12935,18 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
12920
12935
  mainFrame.YSplitOperator.SplitType=item.Value;
12921
12936
  aryTemporaryAttribute.push({ Name:item.Name, Value:item.Value, BackupValue:backup });
12922
12937
  }
12938
+ else if (item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.HRESERVED)
12939
+ {
12940
+ var backup=mainFrame.HorizontalReserved;
12941
+ mainFrame.HorizontalReserved=item.Value;
12942
+ aryTemporaryAttribute.push({ Name:item.Name, Value:item.Value, BackupValue:backup });
12943
+ }
12944
+ else if (item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.TITLEHEIGHT)
12945
+ {
12946
+ var backup=mainFrame.ChartBorder.TitleHeight;
12947
+ mainFrame.ChartBorder.TitleHeight=item.Value;
12948
+ aryTemporaryAttribute.push({ Name:item.Name, Value:item.Value, BackupValue:backup });
12949
+ }
12923
12950
 
12924
12951
  }
12925
12952
  }
@@ -12955,6 +12982,14 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
12955
12982
  {
12956
12983
  mainFrame.YSplitOperator.SplitType=item.BackupValue;
12957
12984
  }
12985
+ else if (item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.HRESERVED)
12986
+ {
12987
+ mainFrame.HorizontalReserved=item.BackupValue;
12988
+ }
12989
+ else if (item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.TITLEHEIGHT)
12990
+ {
12991
+ mainFrame.ChartBorder.TitleHeight=item.BackupValue;
12992
+ }
12958
12993
  }
12959
12994
 
12960
12995
  }
@@ -21928,6 +21963,19 @@ function OverlayIndexItem()
21928
21963
  mainFrame.YSplitOperator.IsShowRightText=item.Value;
21929
21964
  this.AryTemporaryAttribute.push({ Name:item.Name, Value:item.Value, BackupValue:backup });
21930
21965
  }
21966
+ else if (item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.HRESERVED)
21967
+ {
21968
+ var backup=mainFrame.HorizontalReserved;
21969
+ mainFrame.HorizontalReserved=item.Value;
21970
+ this.AryTemporaryAttribute.push({ Name:item.Name, Value:item.Value, BackupValue:backup });
21971
+ }
21972
+ else if (item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.TITLEHEIGHT)
21973
+ {
21974
+ var backup=mainFrame.ChartBorder.TitleHeight;
21975
+ mainFrame.ChartBorder.TitleHeight=item.Value;
21976
+ this.AryTemporaryAttribute.push({ Name:item.Name, Value:item.Value, BackupValue:backup });
21977
+ }
21978
+
21931
21979
  }
21932
21980
  }
21933
21981
 
@@ -21954,6 +22002,15 @@ function OverlayIndexItem()
21954
22002
  {
21955
22003
  mainFrame.YSplitOperator.IsShowRightText=item.BackupValue;
21956
22004
  }
22005
+ else if (item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.HRESERVED)
22006
+ {
22007
+ mainFrame.HorizontalReserved=item.BackupValue;
22008
+ }
22009
+ else if (item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.TITLEHEIGHT)
22010
+ {
22011
+ mainFrame.ChartBorder.TitleHeight=item.BackupValue;
22012
+ this.AryTemporaryAttribute.push({ Name:item.Name, Value:item.Value, BackupValue:backup });
22013
+ }
21957
22014
  }
21958
22015
 
21959
22016
  this.AryTemporaryAttribute=[];
@@ -64358,6 +64415,7 @@ function DynamicMinuteTitlePainting()
64358
64415
  this.MultiDayAfterCloseData; //多日分时图 收盘数据
64359
64416
 
64360
64417
  this.TimeFormat; //显示时间格式 "HH:MM:SS", "hh:MM", "HH:MM:SS.fff"
64418
+ this.AryOverlayTitleName=[]; //["MTitle-Close", "MTitle-Increase"];
64361
64419
 
64362
64420
 
64363
64421
  this.CallAuctionShowTitle=new Set(
@@ -64651,20 +64709,71 @@ function DynamicMinuteTitlePainting()
64651
64709
  {
64652
64710
  for(var i=0; i<this.OverlayChartPaint.length; ++i)
64653
64711
  {
64654
- var item=this.OverlayChartPaint[i];
64655
- if (!item.Symbol || !item.Title) continue;
64712
+ var overlayItem=this.OverlayChartPaint[i];
64713
+ if (!overlayItem.Symbol || !overlayItem.Title) continue;
64656
64714
 
64657
- var clrText=item.Color;
64658
- var text=`[${item.Title}]`;
64715
+ var clrText=overlayItem.Color;
64716
+ var text=`${overlayItem.Title}`;
64717
+
64718
+ var arySubText=[{Text:"[", Color:clrText}];
64719
+
64720
+ arySubText.push({Text:text, Color:clrText});
64721
+
64722
+ //分钟数据
64723
+ if (IFrameSplitOperator.IsNonEmptyArray(this.AryOverlayTitleName))
64724
+ {
64725
+ var minItem=this.GetMinuteItemByDateTime(overlayItem.Data, { Date:item.Date, Time:item.Time});
64726
+ if (minItem)
64727
+ {
64728
+ var dec=GetfloatPrecision(overlayItem.Symbol); //价格小数位数
64729
+ for(var j=0;j<this.AryOverlayTitleName.length;++j)
64730
+ {
64731
+ var titleName=this.AryOverlayTitleName[j];
64732
+ if (titleName=="MTitle-Close")
64733
+ {
64734
+ if (IFrameSplitOperator.IsNumber(minItem.Close) && IFrameSplitOperator.IsNumber(minItem.YClose))
64735
+ var color=this.GetColor(minItem.Close,minItem.YClose);
64736
+ var text=g_JSChartLocalization.GetText(titleName,this.LanguageID)+minItem.Close.toFixed(dec);
64737
+ arySubText.push({Text:text, Color:color});
64738
+ }
64739
+ else if (titleName="MTitle-Increase")
64740
+ {
64741
+ if (IFrameSplitOperator.IsNumber(minItem.Increase))
64742
+ {
64743
+ var color=this.GetColor(minItem.Increase,0);
64744
+ var text=g_JSChartLocalization.GetText(titleName,this.LanguageID)+minItem.Increase.toFixed(2)+'%';
64745
+ arySubText.push({Text:text, Color:color});
64746
+ }
64747
+ }
64748
+ }
64749
+ }
64750
+ }
64751
+
64752
+ arySubText.push({Text:"]", Color:clrText});
64659
64753
 
64660
- aryText.push({Text:text, Color:clrText});
64754
+ aryText.push(...arySubText);
64661
64755
  }
64662
64756
  }
64663
64757
 
64664
-
64665
64758
  return { AryText:aryText };
64666
64759
  }
64667
64760
 
64761
+ this.GetMinuteItemByDateTime=function(data, dateTime)
64762
+ {
64763
+ if (!dateTime || !data || !IFrameSplitOperator.IsNonEmptyArray(data.Data)) return null;
64764
+
64765
+ for(var i=0;i<data.Data.length;++i)
64766
+ {
64767
+ var item=data.Data[i];
64768
+ if (item.Date===dateTime.Date && item.Time===dateTime.Time)
64769
+ {
64770
+ return item;
64771
+ }
64772
+ }
64773
+
64774
+ return null;
64775
+ }
64776
+
64668
64777
  this.DrawItem=function(item, isLastOne) //isLastOne 是否是最后一个数据
64669
64778
  {
64670
64779
  if (!item) return;
@@ -88822,6 +88931,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
88822
88931
  }
88823
88932
  }
88824
88933
 
88934
+ //TODO:准备废弃
88825
88935
  this.SetFrameAttribute=function(windowIndex, attr)
88826
88936
  {
88827
88937
  if (!this.Frame.SubFrame[windowIndex] || !this.Frame.SubFrame[windowIndex].Frame) return;
@@ -88833,6 +88943,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
88833
88943
  if (IFrameSplitOperator.IsNumber(attr.TitleHeight)) frame.ChartBorder.TitleHeight=attr.TitleHeight; //指标标题高度
88834
88944
  }
88835
88945
 
88946
+ //TODO:准备废弃
88836
88947
  this.ResetFrameAttribute=function(windowIndex)
88837
88948
  {
88838
88949
  if (!this.Frame.SubFrame[windowIndex] || !this.Frame.SubFrame[windowIndex].Frame) return;
@@ -3995,6 +3995,7 @@ HQData.APIIndex_PARTLINE=function(data, callback)
3995
3995
  var hqchart=data.HQChart;
3996
3996
  var kData=hqchart.GetKData();
3997
3997
  var bAuthorization=data.Request.Data.IsAuthorization;
3998
+ var bFirst=data.Request.Data.IsFirst;
3998
3999
 
3999
4000
  var lineData=
4000
4001
  {
@@ -4030,7 +4031,7 @@ HQData.APIIndex_PARTLINE=function(data, callback)
4030
4031
  outdata: { date:kData.GetDate(), time:kData.GetTime(), outvar:[lineData] }
4031
4032
  };
4032
4033
 
4033
- if (bAuthorization)
4034
+ if (bAuthorization && bFirst) //首次请求鉴权
4034
4035
  {
4035
4036
  apiData.Lock={ IsLocked:true };
4036
4037
  }
@@ -5413,6 +5414,7 @@ HQData.Request_IndexAuthorization=function(data, callback)
5413
5414
  Lock:
5414
5415
  {
5415
5416
  IsLocked:true,
5417
+ IsFullFrame:true,
5416
5418
  //Text:""
5417
5419
  //BG: ['rgba(245,245,220, 0.5)', "rgb(100,255,100)"], //锁区域背景色
5418
5420
  /*
@@ -5264,6 +5264,8 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
5264
5264
  if (IFrameSplitOperator.IsNumber(subItem.Margin.Bottom)) chartTitle.ShowPositionConfig.Margin.Bottom=subItem.Margin.Bottom;
5265
5265
  }
5266
5266
  }
5267
+
5268
+ if (IFrameSplitOperator.IsNonEmptyArray(item.OverlayTitleName)) chartTitle.AryOverlayTitleName=item.OverlayTitleName.slice();
5267
5269
  }
5268
5270
 
5269
5271
  if (IFrameSplitOperator.IsBool(option.CorssCursorTouchEnd)) chart.CorssCursorTouchEnd = option.CorssCursorTouchEnd;
@@ -7179,6 +7181,8 @@ var JSCHART_TEMPORARY_ATTRIBUTE=
7179
7181
  SHOWLEFTTEXT:"MainFrame-ShowLeftText",
7180
7182
  SHOWRIGHTTEXT:"MainFrame-ShowRightText",
7181
7183
  SPLITTYPE:"MainFrame-SplitType", //0=自动分割 1=数据的最大最小值分割 2=堆积图(0-100)
7184
+ HRESERVED:"MainFrame-HorizontalReserved", //上下预留空间 { Top:, Bottom: }
7185
+ TITLEHEIGHT:"MainFrame-TitleHeight", //标题栏高度
7182
7186
  }
7183
7187
  }
7184
7188
 
@@ -8519,7 +8523,11 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8519
8523
  if (this.TryClickLock)
8520
8524
  {
8521
8525
  //JSConsole.Chart.Log('[uielement.onmousedown] left, top ',e.clientX, e.clientY, this.getBoundingClientRect().left,this.getBoundingClientRect().top);
8522
- if (this.TryClickLock(x,y)) return;
8526
+ if (this.TryClickLock(x,y))
8527
+ {
8528
+ this.IsOnTouch=false;
8529
+ return;
8530
+ }
8523
8531
  }
8524
8532
 
8525
8533
  this.HideSelectRect();
@@ -14634,7 +14642,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
14634
14642
  if (IFrameSplitOperator.IsBool(windowItem.IsShowOverlayIndexName)) frame.IsShowOverlayIndexName=windowItem.IsShowOverlayIndexName;
14635
14643
  if (IFrameSplitOperator.IsNumber(windowItem.IndexParamSpace)) frame.IndexParamSpace=windowItem.IndexParamSpace;
14636
14644
  if (IFrameSplitOperator.IsNumber(windowItem.IndexTitleSpace)) frame.IndexTitleSpace=windowItem.IndexTitleSpace;
14637
- if (!IFrameSplitOperator.IsUndefined(windowItem.HorizontalReserved)) frame.HorizontalReserved=windowItem.HorizontalReserved; //Y轴上下预留
14645
+
14638
14646
 
14639
14647
  if (windowItem.OverlayIndexType)
14640
14648
  {
@@ -14694,8 +14702,10 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
14694
14702
  if (subItem && IFrameSplitOperator.IsNumber(subItem.Right)) frame.ToolbarConfig.Margin.Right=subItem.Right;
14695
14703
  }
14696
14704
 
14705
+ if (!IFrameSplitOperator.IsUndefined(frameItem.HorizontalReserved)) frame.HorizontalReserved=frameItem.HorizontalReserved; //Y轴上下预留
14706
+
14697
14707
  //分时图属性
14698
- if (IFrameSplitOperator.IsBool(frameItem.CloseBeforeButton)) frameItem.IsShowCloseButton=frameItem.CloseBeforeButton;
14708
+ if (IFrameSplitOperator.IsBool(frameItem.CloseBeforeButton)) frame.IsShowCloseButton=frameItem.CloseBeforeButton;
14699
14709
  if (frame.YSplitOperator.RightTextConfig) //主图右侧坐标设置
14700
14710
  {
14701
14711
  if (IFrameSplitOperator.IsNumber(frameItem.RightTextFormat)) //废弃(兼容版本)
@@ -15556,8 +15566,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
15556
15566
  var item=this.WindowIndex[i];
15557
15567
  if (!item) continue;
15558
15568
 
15559
- var info={ Name:item.Name, WindowIndex:i, IsOverlay:false };
15569
+ var info={ Name:item.Name, WindowIndex:i, IsOverlay:false, IsAuthorization:item.IsAuthorization };
15560
15570
  if (item.ID) info.ID=item.ID;
15571
+ if (item.ClassName=="APIScriptIndex") info.API={ Url:item.ApiUrl, Name:item.Name, ID:item.ID };
15561
15572
  if (IFrameSplitOperator.IsNonEmptyArray(item.Arguments)) //参数
15562
15573
  {
15563
15574
  info.Args=[];
@@ -15566,6 +15577,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
15566
15577
  var argItem=item.Arguments[j];
15567
15578
  info.Args.push( { Name:argItem.Name, Value:argItem.Value} );
15568
15579
  }
15580
+
15581
+ if (info.API) info.API.Args=info.Args;
15569
15582
  }
15570
15583
 
15571
15584
  aryIndex.push(info);
@@ -15589,8 +15602,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
15589
15602
  var overlayItem=item.OverlayIndex[j];
15590
15603
  if (!overlayItem.Script) continue;
15591
15604
  var indexData=overlayItem.Script;
15592
- var info={ Name:indexData.Name, ID:indexData.ID, WindowIndex:i, IsOverlay:true, Identify:overlayItem.Identify };
15593
-
15605
+ var info={ Name:indexData.Name, ID:indexData.ID, WindowIndex:i, IsOverlay:true, Identify:overlayItem.Identify, IsAuthorization:indexData.IsAuthorization };
15606
+ if (indexData.ClassName=="APIScriptIndex") info.API={ Url:indexData.ApiUrl, Name:indexData.Name, ID:indexData.ID };
15594
15607
  if (IFrameSplitOperator.IsNonEmptyArray(indexData.Arguments)) //参数
15595
15608
  {
15596
15609
  info.Args=[];
@@ -15599,6 +15612,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
15599
15612
  var argItem=indexData.Arguments[k];
15600
15613
  info.Args.push( { Name:argItem.Name, Value:argItem.Value} );
15601
15614
  }
15615
+
15616
+ if (info.API) info.API.Args=info.Args;
15602
15617
  }
15603
15618
 
15604
15619
  aryIndex.push(info);
@@ -17018,6 +17033,18 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
17018
17033
  mainFrame.YSplitOperator.SplitType=item.Value;
17019
17034
  aryTemporaryAttribute.push({ Name:item.Name, Value:item.Value, BackupValue:backup });
17020
17035
  }
17036
+ else if (item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.HRESERVED)
17037
+ {
17038
+ var backup=mainFrame.HorizontalReserved;
17039
+ mainFrame.HorizontalReserved=item.Value;
17040
+ aryTemporaryAttribute.push({ Name:item.Name, Value:item.Value, BackupValue:backup });
17041
+ }
17042
+ else if (item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.TITLEHEIGHT)
17043
+ {
17044
+ var backup=mainFrame.ChartBorder.TitleHeight;
17045
+ mainFrame.ChartBorder.TitleHeight=item.Value;
17046
+ aryTemporaryAttribute.push({ Name:item.Name, Value:item.Value, BackupValue:backup });
17047
+ }
17021
17048
 
17022
17049
  }
17023
17050
  }
@@ -17053,6 +17080,14 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
17053
17080
  {
17054
17081
  mainFrame.YSplitOperator.SplitType=item.BackupValue;
17055
17082
  }
17083
+ else if (item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.HRESERVED)
17084
+ {
17085
+ mainFrame.HorizontalReserved=item.BackupValue;
17086
+ }
17087
+ else if (item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.TITLEHEIGHT)
17088
+ {
17089
+ mainFrame.ChartBorder.TitleHeight=item.BackupValue;
17090
+ }
17056
17091
  }
17057
17092
 
17058
17093
  }
@@ -26026,6 +26061,19 @@ function OverlayIndexItem()
26026
26061
  mainFrame.YSplitOperator.IsShowRightText=item.Value;
26027
26062
  this.AryTemporaryAttribute.push({ Name:item.Name, Value:item.Value, BackupValue:backup });
26028
26063
  }
26064
+ else if (item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.HRESERVED)
26065
+ {
26066
+ var backup=mainFrame.HorizontalReserved;
26067
+ mainFrame.HorizontalReserved=item.Value;
26068
+ this.AryTemporaryAttribute.push({ Name:item.Name, Value:item.Value, BackupValue:backup });
26069
+ }
26070
+ else if (item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.TITLEHEIGHT)
26071
+ {
26072
+ var backup=mainFrame.ChartBorder.TitleHeight;
26073
+ mainFrame.ChartBorder.TitleHeight=item.Value;
26074
+ this.AryTemporaryAttribute.push({ Name:item.Name, Value:item.Value, BackupValue:backup });
26075
+ }
26076
+
26029
26077
  }
26030
26078
  }
26031
26079
 
@@ -26052,6 +26100,15 @@ function OverlayIndexItem()
26052
26100
  {
26053
26101
  mainFrame.YSplitOperator.IsShowRightText=item.BackupValue;
26054
26102
  }
26103
+ else if (item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.HRESERVED)
26104
+ {
26105
+ mainFrame.HorizontalReserved=item.BackupValue;
26106
+ }
26107
+ else if (item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.TITLEHEIGHT)
26108
+ {
26109
+ mainFrame.ChartBorder.TitleHeight=item.BackupValue;
26110
+ this.AryTemporaryAttribute.push({ Name:item.Name, Value:item.Value, BackupValue:backup });
26111
+ }
26055
26112
  }
26056
26113
 
26057
26114
  this.AryTemporaryAttribute=[];
@@ -68456,6 +68513,7 @@ function DynamicMinuteTitlePainting()
68456
68513
  this.MultiDayAfterCloseData; //多日分时图 收盘数据
68457
68514
 
68458
68515
  this.TimeFormat; //显示时间格式 "HH:MM:SS", "hh:MM", "HH:MM:SS.fff"
68516
+ this.AryOverlayTitleName=[]; //["MTitle-Close", "MTitle-Increase"];
68459
68517
 
68460
68518
 
68461
68519
  this.CallAuctionShowTitle=new Set(
@@ -68749,20 +68807,71 @@ function DynamicMinuteTitlePainting()
68749
68807
  {
68750
68808
  for(var i=0; i<this.OverlayChartPaint.length; ++i)
68751
68809
  {
68752
- var item=this.OverlayChartPaint[i];
68753
- if (!item.Symbol || !item.Title) continue;
68810
+ var overlayItem=this.OverlayChartPaint[i];
68811
+ if (!overlayItem.Symbol || !overlayItem.Title) continue;
68754
68812
 
68755
- var clrText=item.Color;
68756
- var text=`[${item.Title}]`;
68813
+ var clrText=overlayItem.Color;
68814
+ var text=`${overlayItem.Title}`;
68815
+
68816
+ var arySubText=[{Text:"[", Color:clrText}];
68817
+
68818
+ arySubText.push({Text:text, Color:clrText});
68819
+
68820
+ //分钟数据
68821
+ if (IFrameSplitOperator.IsNonEmptyArray(this.AryOverlayTitleName))
68822
+ {
68823
+ var minItem=this.GetMinuteItemByDateTime(overlayItem.Data, { Date:item.Date, Time:item.Time});
68824
+ if (minItem)
68825
+ {
68826
+ var dec=GetfloatPrecision(overlayItem.Symbol); //价格小数位数
68827
+ for(var j=0;j<this.AryOverlayTitleName.length;++j)
68828
+ {
68829
+ var titleName=this.AryOverlayTitleName[j];
68830
+ if (titleName=="MTitle-Close")
68831
+ {
68832
+ if (IFrameSplitOperator.IsNumber(minItem.Close) && IFrameSplitOperator.IsNumber(minItem.YClose))
68833
+ var color=this.GetColor(minItem.Close,minItem.YClose);
68834
+ var text=g_JSChartLocalization.GetText(titleName,this.LanguageID)+minItem.Close.toFixed(dec);
68835
+ arySubText.push({Text:text, Color:color});
68836
+ }
68837
+ else if (titleName="MTitle-Increase")
68838
+ {
68839
+ if (IFrameSplitOperator.IsNumber(minItem.Increase))
68840
+ {
68841
+ var color=this.GetColor(minItem.Increase,0);
68842
+ var text=g_JSChartLocalization.GetText(titleName,this.LanguageID)+minItem.Increase.toFixed(2)+'%';
68843
+ arySubText.push({Text:text, Color:color});
68844
+ }
68845
+ }
68846
+ }
68847
+ }
68848
+ }
68849
+
68850
+ arySubText.push({Text:"]", Color:clrText});
68757
68851
 
68758
- aryText.push({Text:text, Color:clrText});
68852
+ aryText.push(...arySubText);
68759
68853
  }
68760
68854
  }
68761
68855
 
68762
-
68763
68856
  return { AryText:aryText };
68764
68857
  }
68765
68858
 
68859
+ this.GetMinuteItemByDateTime=function(data, dateTime)
68860
+ {
68861
+ if (!dateTime || !data || !IFrameSplitOperator.IsNonEmptyArray(data.Data)) return null;
68862
+
68863
+ for(var i=0;i<data.Data.length;++i)
68864
+ {
68865
+ var item=data.Data[i];
68866
+ if (item.Date===dateTime.Date && item.Time===dateTime.Time)
68867
+ {
68868
+ return item;
68869
+ }
68870
+ }
68871
+
68872
+ return null;
68873
+ }
68874
+
68766
68875
  this.DrawItem=function(item, isLastOne) //isLastOne 是否是最后一个数据
68767
68876
  {
68768
68877
  if (!item) return;
@@ -92920,6 +93029,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
92920
93029
  }
92921
93030
  }
92922
93031
 
93032
+ //TODO:准备废弃
92923
93033
  this.SetFrameAttribute=function(windowIndex, attr)
92924
93034
  {
92925
93035
  if (!this.Frame.SubFrame[windowIndex] || !this.Frame.SubFrame[windowIndex].Frame) return;
@@ -92931,6 +93041,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
92931
93041
  if (IFrameSplitOperator.IsNumber(attr.TitleHeight)) frame.ChartBorder.TitleHeight=attr.TitleHeight; //指标标题高度
92932
93042
  }
92933
93043
 
93044
+ //TODO:准备废弃
92934
93045
  this.ResetFrameAttribute=function(windowIndex)
92935
93046
  {
92936
93047
  if (!this.Frame.SubFrame[windowIndex] || !this.Frame.SubFrame[windowIndex].Frame) return;
@@ -125372,7 +125483,7 @@ function JSDraw(errorHandler,symbolData)
125372
125483
  for(var i=0;i<this.SymbolData.Data.Data.length;++i)
125373
125484
  {
125374
125485
  var item=this.SymbolData.Data.Data[i];
125375
- drawData.Data[i]={ High:item.High, Low:item.Low };
125486
+ drawData.Data[i]={ High:item.High, Low:item.Low, Close:item.Close };
125376
125487
  }
125377
125488
 
125378
125489
  return drawData;
@@ -134709,7 +134820,7 @@ function ScriptIndex(name,script,args,option)
134709
134820
 
134710
134821
  this.RequestAuthorization=function(hqChart, callback)
134711
134822
  {
134712
- var reqData={ IndexName:this.Name, IndexID:this.ID, IsOverlayIndex:this.IsOverlayIndex===true };
134823
+ var reqData={ IndexName:this.Name, IndexID:this.ID, IsOverlayIndex:this.IsOverlayIndex===true, Symbol:hqChart.Symbol };
134713
134824
 
134714
134825
  var obj=
134715
134826
  {
@@ -139104,7 +139215,9 @@ function APIScriptIndex(name,script,args,option, isOverlay)
139104
139215
  {
139105
139216
  indexname:this.ID, symbol: hqChart.Symbol, script:this.Script, args:args,
139106
139217
  period:hqChart.Period, right:hqChart.Right, hqdatatype: hqDataType,
139107
- IsAuthorization:this.IsAuthorization, WindowID:windowIndex,
139218
+ IsAuthorization:this.IsAuthorization, //是否需要鉴权
139219
+ IsFirst:this.RunCount===0, //指标是否首次请求数据
139220
+ WindowID:windowIndex,
139108
139221
  IsOverlayIndex:this.IsOverlayIndex===true,
139109
139222
  };
139110
139223
 
@@ -159099,7 +159212,7 @@ function ScrollBarBGChart()
159099
159212
 
159100
159213
 
159101
159214
 
159102
- var HQCHART_VERSION="1.1.15709";
159215
+ var HQCHART_VERSION="1.1.15725";
159103
159216
 
159104
159217
  function PrintHQChartVersion()
159105
159218
  {
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.15709";
8
+ var HQCHART_VERSION="1.1.15725";
9
9
 
10
10
  function PrintHQChartVersion()
11
11
  {
@@ -59527,6 +59527,7 @@ HQData.APIIndex_PARTLINE=function(data, callback)
59527
59527
  var hqchart=data.HQChart;
59528
59528
  var kData=hqchart.GetKData();
59529
59529
  var bAuthorization=data.Request.Data.IsAuthorization;
59530
+ var bFirst=data.Request.Data.IsFirst;
59530
59531
 
59531
59532
  var lineData=
59532
59533
  {
@@ -59562,7 +59563,7 @@ HQData.APIIndex_PARTLINE=function(data, callback)
59562
59563
  outdata: { date:kData.GetDate(), time:kData.GetTime(), outvar:[lineData] }
59563
59564
  };
59564
59565
 
59565
- if (bAuthorization)
59566
+ if (bAuthorization && bFirst) //首次请求鉴权
59566
59567
  {
59567
59568
  apiData.Lock={ IsLocked:true };
59568
59569
  }
@@ -60945,6 +60946,7 @@ HQData.Request_IndexAuthorization=function(data, callback)
60945
60946
  Lock:
60946
60947
  {
60947
60948
  IsLocked:true,
60949
+ IsFullFrame:true,
60948
60950
  //Text:""
60949
60951
  //BG: ['rgba(245,245,220, 0.5)', "rgb(100,255,100)"], //锁区域背景色
60950
60952
  /*
@@ -5308,6 +5308,8 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
5308
5308
  if (IFrameSplitOperator.IsNumber(subItem.Margin.Bottom)) chartTitle.ShowPositionConfig.Margin.Bottom=subItem.Margin.Bottom;
5309
5309
  }
5310
5310
  }
5311
+
5312
+ if (IFrameSplitOperator.IsNonEmptyArray(item.OverlayTitleName)) chartTitle.AryOverlayTitleName=item.OverlayTitleName.slice();
5311
5313
  }
5312
5314
 
5313
5315
  if (IFrameSplitOperator.IsBool(option.CorssCursorTouchEnd)) chart.CorssCursorTouchEnd = option.CorssCursorTouchEnd;
@@ -7223,6 +7225,8 @@ var JSCHART_TEMPORARY_ATTRIBUTE=
7223
7225
  SHOWLEFTTEXT:"MainFrame-ShowLeftText",
7224
7226
  SHOWRIGHTTEXT:"MainFrame-ShowRightText",
7225
7227
  SPLITTYPE:"MainFrame-SplitType", //0=自动分割 1=数据的最大最小值分割 2=堆积图(0-100)
7228
+ HRESERVED:"MainFrame-HorizontalReserved", //上下预留空间 { Top:, Bottom: }
7229
+ TITLEHEIGHT:"MainFrame-TitleHeight", //标题栏高度
7226
7230
  }
7227
7231
  }
7228
7232
 
@@ -8563,7 +8567,11 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8563
8567
  if (this.TryClickLock)
8564
8568
  {
8565
8569
  //JSConsole.Chart.Log('[uielement.onmousedown] left, top ',e.clientX, e.clientY, this.getBoundingClientRect().left,this.getBoundingClientRect().top);
8566
- if (this.TryClickLock(x,y)) return;
8570
+ if (this.TryClickLock(x,y))
8571
+ {
8572
+ this.IsOnTouch=false;
8573
+ return;
8574
+ }
8567
8575
  }
8568
8576
 
8569
8577
  this.HideSelectRect();
@@ -14678,7 +14686,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
14678
14686
  if (IFrameSplitOperator.IsBool(windowItem.IsShowOverlayIndexName)) frame.IsShowOverlayIndexName=windowItem.IsShowOverlayIndexName;
14679
14687
  if (IFrameSplitOperator.IsNumber(windowItem.IndexParamSpace)) frame.IndexParamSpace=windowItem.IndexParamSpace;
14680
14688
  if (IFrameSplitOperator.IsNumber(windowItem.IndexTitleSpace)) frame.IndexTitleSpace=windowItem.IndexTitleSpace;
14681
- if (!IFrameSplitOperator.IsUndefined(windowItem.HorizontalReserved)) frame.HorizontalReserved=windowItem.HorizontalReserved; //Y轴上下预留
14689
+
14682
14690
 
14683
14691
  if (windowItem.OverlayIndexType)
14684
14692
  {
@@ -14738,8 +14746,10 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
14738
14746
  if (subItem && IFrameSplitOperator.IsNumber(subItem.Right)) frame.ToolbarConfig.Margin.Right=subItem.Right;
14739
14747
  }
14740
14748
 
14749
+ if (!IFrameSplitOperator.IsUndefined(frameItem.HorizontalReserved)) frame.HorizontalReserved=frameItem.HorizontalReserved; //Y轴上下预留
14750
+
14741
14751
  //分时图属性
14742
- if (IFrameSplitOperator.IsBool(frameItem.CloseBeforeButton)) frameItem.IsShowCloseButton=frameItem.CloseBeforeButton;
14752
+ if (IFrameSplitOperator.IsBool(frameItem.CloseBeforeButton)) frame.IsShowCloseButton=frameItem.CloseBeforeButton;
14743
14753
  if (frame.YSplitOperator.RightTextConfig) //主图右侧坐标设置
14744
14754
  {
14745
14755
  if (IFrameSplitOperator.IsNumber(frameItem.RightTextFormat)) //废弃(兼容版本)
@@ -15600,8 +15610,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
15600
15610
  var item=this.WindowIndex[i];
15601
15611
  if (!item) continue;
15602
15612
 
15603
- var info={ Name:item.Name, WindowIndex:i, IsOverlay:false };
15613
+ var info={ Name:item.Name, WindowIndex:i, IsOverlay:false, IsAuthorization:item.IsAuthorization };
15604
15614
  if (item.ID) info.ID=item.ID;
15615
+ if (item.ClassName=="APIScriptIndex") info.API={ Url:item.ApiUrl, Name:item.Name, ID:item.ID };
15605
15616
  if (IFrameSplitOperator.IsNonEmptyArray(item.Arguments)) //参数
15606
15617
  {
15607
15618
  info.Args=[];
@@ -15610,6 +15621,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
15610
15621
  var argItem=item.Arguments[j];
15611
15622
  info.Args.push( { Name:argItem.Name, Value:argItem.Value} );
15612
15623
  }
15624
+
15625
+ if (info.API) info.API.Args=info.Args;
15613
15626
  }
15614
15627
 
15615
15628
  aryIndex.push(info);
@@ -15633,8 +15646,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
15633
15646
  var overlayItem=item.OverlayIndex[j];
15634
15647
  if (!overlayItem.Script) continue;
15635
15648
  var indexData=overlayItem.Script;
15636
- var info={ Name:indexData.Name, ID:indexData.ID, WindowIndex:i, IsOverlay:true, Identify:overlayItem.Identify };
15637
-
15649
+ var info={ Name:indexData.Name, ID:indexData.ID, WindowIndex:i, IsOverlay:true, Identify:overlayItem.Identify, IsAuthorization:indexData.IsAuthorization };
15650
+ if (indexData.ClassName=="APIScriptIndex") info.API={ Url:indexData.ApiUrl, Name:indexData.Name, ID:indexData.ID };
15638
15651
  if (IFrameSplitOperator.IsNonEmptyArray(indexData.Arguments)) //参数
15639
15652
  {
15640
15653
  info.Args=[];
@@ -15643,6 +15656,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
15643
15656
  var argItem=indexData.Arguments[k];
15644
15657
  info.Args.push( { Name:argItem.Name, Value:argItem.Value} );
15645
15658
  }
15659
+
15660
+ if (info.API) info.API.Args=info.Args;
15646
15661
  }
15647
15662
 
15648
15663
  aryIndex.push(info);
@@ -17062,6 +17077,18 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
17062
17077
  mainFrame.YSplitOperator.SplitType=item.Value;
17063
17078
  aryTemporaryAttribute.push({ Name:item.Name, Value:item.Value, BackupValue:backup });
17064
17079
  }
17080
+ else if (item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.HRESERVED)
17081
+ {
17082
+ var backup=mainFrame.HorizontalReserved;
17083
+ mainFrame.HorizontalReserved=item.Value;
17084
+ aryTemporaryAttribute.push({ Name:item.Name, Value:item.Value, BackupValue:backup });
17085
+ }
17086
+ else if (item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.TITLEHEIGHT)
17087
+ {
17088
+ var backup=mainFrame.ChartBorder.TitleHeight;
17089
+ mainFrame.ChartBorder.TitleHeight=item.Value;
17090
+ aryTemporaryAttribute.push({ Name:item.Name, Value:item.Value, BackupValue:backup });
17091
+ }
17065
17092
 
17066
17093
  }
17067
17094
  }
@@ -17097,6 +17124,14 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
17097
17124
  {
17098
17125
  mainFrame.YSplitOperator.SplitType=item.BackupValue;
17099
17126
  }
17127
+ else if (item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.HRESERVED)
17128
+ {
17129
+ mainFrame.HorizontalReserved=item.BackupValue;
17130
+ }
17131
+ else if (item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.TITLEHEIGHT)
17132
+ {
17133
+ mainFrame.ChartBorder.TitleHeight=item.BackupValue;
17134
+ }
17100
17135
  }
17101
17136
 
17102
17137
  }
@@ -26070,6 +26105,19 @@ function OverlayIndexItem()
26070
26105
  mainFrame.YSplitOperator.IsShowRightText=item.Value;
26071
26106
  this.AryTemporaryAttribute.push({ Name:item.Name, Value:item.Value, BackupValue:backup });
26072
26107
  }
26108
+ else if (item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.HRESERVED)
26109
+ {
26110
+ var backup=mainFrame.HorizontalReserved;
26111
+ mainFrame.HorizontalReserved=item.Value;
26112
+ this.AryTemporaryAttribute.push({ Name:item.Name, Value:item.Value, BackupValue:backup });
26113
+ }
26114
+ else if (item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.TITLEHEIGHT)
26115
+ {
26116
+ var backup=mainFrame.ChartBorder.TitleHeight;
26117
+ mainFrame.ChartBorder.TitleHeight=item.Value;
26118
+ this.AryTemporaryAttribute.push({ Name:item.Name, Value:item.Value, BackupValue:backup });
26119
+ }
26120
+
26073
26121
  }
26074
26122
  }
26075
26123
 
@@ -26096,6 +26144,15 @@ function OverlayIndexItem()
26096
26144
  {
26097
26145
  mainFrame.YSplitOperator.IsShowRightText=item.BackupValue;
26098
26146
  }
26147
+ else if (item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.HRESERVED)
26148
+ {
26149
+ mainFrame.HorizontalReserved=item.BackupValue;
26150
+ }
26151
+ else if (item.Name==JSCHART_TEMPORARY_ATTRIBUTE.MAINFRAME.TITLEHEIGHT)
26152
+ {
26153
+ mainFrame.ChartBorder.TitleHeight=item.BackupValue;
26154
+ this.AryTemporaryAttribute.push({ Name:item.Name, Value:item.Value, BackupValue:backup });
26155
+ }
26099
26156
  }
26100
26157
 
26101
26158
  this.AryTemporaryAttribute=[];
@@ -68500,6 +68557,7 @@ function DynamicMinuteTitlePainting()
68500
68557
  this.MultiDayAfterCloseData; //多日分时图 收盘数据
68501
68558
 
68502
68559
  this.TimeFormat; //显示时间格式 "HH:MM:SS", "hh:MM", "HH:MM:SS.fff"
68560
+ this.AryOverlayTitleName=[]; //["MTitle-Close", "MTitle-Increase"];
68503
68561
 
68504
68562
 
68505
68563
  this.CallAuctionShowTitle=new Set(
@@ -68793,20 +68851,71 @@ function DynamicMinuteTitlePainting()
68793
68851
  {
68794
68852
  for(var i=0; i<this.OverlayChartPaint.length; ++i)
68795
68853
  {
68796
- var item=this.OverlayChartPaint[i];
68797
- if (!item.Symbol || !item.Title) continue;
68854
+ var overlayItem=this.OverlayChartPaint[i];
68855
+ if (!overlayItem.Symbol || !overlayItem.Title) continue;
68798
68856
 
68799
- var clrText=item.Color;
68800
- var text=`[${item.Title}]`;
68857
+ var clrText=overlayItem.Color;
68858
+ var text=`${overlayItem.Title}`;
68859
+
68860
+ var arySubText=[{Text:"[", Color:clrText}];
68861
+
68862
+ arySubText.push({Text:text, Color:clrText});
68863
+
68864
+ //分钟数据
68865
+ if (IFrameSplitOperator.IsNonEmptyArray(this.AryOverlayTitleName))
68866
+ {
68867
+ var minItem=this.GetMinuteItemByDateTime(overlayItem.Data, { Date:item.Date, Time:item.Time});
68868
+ if (minItem)
68869
+ {
68870
+ var dec=GetfloatPrecision(overlayItem.Symbol); //价格小数位数
68871
+ for(var j=0;j<this.AryOverlayTitleName.length;++j)
68872
+ {
68873
+ var titleName=this.AryOverlayTitleName[j];
68874
+ if (titleName=="MTitle-Close")
68875
+ {
68876
+ if (IFrameSplitOperator.IsNumber(minItem.Close) && IFrameSplitOperator.IsNumber(minItem.YClose))
68877
+ var color=this.GetColor(minItem.Close,minItem.YClose);
68878
+ var text=g_JSChartLocalization.GetText(titleName,this.LanguageID)+minItem.Close.toFixed(dec);
68879
+ arySubText.push({Text:text, Color:color});
68880
+ }
68881
+ else if (titleName="MTitle-Increase")
68882
+ {
68883
+ if (IFrameSplitOperator.IsNumber(minItem.Increase))
68884
+ {
68885
+ var color=this.GetColor(minItem.Increase,0);
68886
+ var text=g_JSChartLocalization.GetText(titleName,this.LanguageID)+minItem.Increase.toFixed(2)+'%';
68887
+ arySubText.push({Text:text, Color:color});
68888
+ }
68889
+ }
68890
+ }
68891
+ }
68892
+ }
68893
+
68894
+ arySubText.push({Text:"]", Color:clrText});
68801
68895
 
68802
- aryText.push({Text:text, Color:clrText});
68896
+ aryText.push(...arySubText);
68803
68897
  }
68804
68898
  }
68805
68899
 
68806
-
68807
68900
  return { AryText:aryText };
68808
68901
  }
68809
68902
 
68903
+ this.GetMinuteItemByDateTime=function(data, dateTime)
68904
+ {
68905
+ if (!dateTime || !data || !IFrameSplitOperator.IsNonEmptyArray(data.Data)) return null;
68906
+
68907
+ for(var i=0;i<data.Data.length;++i)
68908
+ {
68909
+ var item=data.Data[i];
68910
+ if (item.Date===dateTime.Date && item.Time===dateTime.Time)
68911
+ {
68912
+ return item;
68913
+ }
68914
+ }
68915
+
68916
+ return null;
68917
+ }
68918
+
68810
68919
  this.DrawItem=function(item, isLastOne) //isLastOne 是否是最后一个数据
68811
68920
  {
68812
68921
  if (!item) return;
@@ -92964,6 +93073,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
92964
93073
  }
92965
93074
  }
92966
93075
 
93076
+ //TODO:准备废弃
92967
93077
  this.SetFrameAttribute=function(windowIndex, attr)
92968
93078
  {
92969
93079
  if (!this.Frame.SubFrame[windowIndex] || !this.Frame.SubFrame[windowIndex].Frame) return;
@@ -92975,6 +93085,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
92975
93085
  if (IFrameSplitOperator.IsNumber(attr.TitleHeight)) frame.ChartBorder.TitleHeight=attr.TitleHeight; //指标标题高度
92976
93086
  }
92977
93087
 
93088
+ //TODO:准备废弃
92978
93089
  this.ResetFrameAttribute=function(windowIndex)
92979
93090
  {
92980
93091
  if (!this.Frame.SubFrame[windowIndex] || !this.Frame.SubFrame[windowIndex].Frame) return;
@@ -125416,7 +125527,7 @@ function JSDraw(errorHandler,symbolData)
125416
125527
  for(var i=0;i<this.SymbolData.Data.Data.length;++i)
125417
125528
  {
125418
125529
  var item=this.SymbolData.Data.Data[i];
125419
- drawData.Data[i]={ High:item.High, Low:item.Low };
125530
+ drawData.Data[i]={ High:item.High, Low:item.Low, Close:item.Close };
125420
125531
  }
125421
125532
 
125422
125533
  return drawData;
@@ -134753,7 +134864,7 @@ function ScriptIndex(name,script,args,option)
134753
134864
 
134754
134865
  this.RequestAuthorization=function(hqChart, callback)
134755
134866
  {
134756
- var reqData={ IndexName:this.Name, IndexID:this.ID, IsOverlayIndex:this.IsOverlayIndex===true };
134867
+ var reqData={ IndexName:this.Name, IndexID:this.ID, IsOverlayIndex:this.IsOverlayIndex===true, Symbol:hqChart.Symbol };
134757
134868
 
134758
134869
  var obj=
134759
134870
  {
@@ -139148,7 +139259,9 @@ function APIScriptIndex(name,script,args,option, isOverlay)
139148
139259
  {
139149
139260
  indexname:this.ID, symbol: hqChart.Symbol, script:this.Script, args:args,
139150
139261
  period:hqChart.Period, right:hqChart.Right, hqdatatype: hqDataType,
139151
- IsAuthorization:this.IsAuthorization, WindowID:windowIndex,
139262
+ IsAuthorization:this.IsAuthorization, //是否需要鉴权
139263
+ IsFirst:this.RunCount===0, //指标是否首次请求数据
139264
+ WindowID:windowIndex,
139152
139265
  IsOverlayIndex:this.IsOverlayIndex===true,
139153
139266
  };
139154
139267
 
@@ -175461,7 +175574,7 @@ function ChartScrollText()
175461
175574
 
175462
175575
 
175463
175576
 
175464
- var HQCHART_VERSION="1.1.15709";
175577
+ var HQCHART_VERSION="1.1.15725";
175465
175578
 
175466
175579
  function PrintHQChartVersion()
175467
175580
  {