hqchart 1.1.15708 → 1.1.15719

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();//创建子窗口的指标
@@ -1852,7 +1852,7 @@ this.TryYDrag=function(x,y){if(!this.EnableYDrag)return null;if(!this.EnableYDra
1852
1852
  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
1853
  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
1854
  {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";
1855
+ 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
1856
  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
1857
  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
1858
  {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";
@@ -2436,11 +2436,11 @@ for(var i=0,j=0,k=0;i<this.Frame.SubFrame.length;++i){var item=this.Frame.SubFra
2436
2436
  this.ClearIndexRunCount=function(){//主图指标
2437
2437
  for(var i=0;i<this.WindowIndex.length;++i){var item=this.WindowIndex[i];if(!item)continue;item.RunCount=0;}//叠加指标
2438
2438
  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);//叠加指标
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,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))//参数
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});}if(info.API)info.API.Args=info.Args;}aryIndex.push(info);}this.GetOverlayIndexInfo(aryIndex);//叠加指标
2441
2441
  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弹菜单
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,IsAuthorization:indexData.IsAuthorization};if(indexData.ClassName=="APIScriptIndex")info.API={Url:indexData.ApiUrl,Name:indexData.Name,ID:indexData.ID};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});}if(info.API)info.API.Args=info.Args;}aryIndex.push(info);}}};//点tab弹菜单
2444
2444
  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
2445
  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
2446
  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);};//菜单命令
@@ -6508,6 +6508,7 @@ this.ShowLastDataFormat=0;//0=默认 1=更新时间替换时间
6508
6508
  this.MultiDayBeforeOpenData;//多日分时图 盘前数据
6509
6509
  this.MultiDayAfterCloseData;//多日分时图 收盘数据
6510
6510
  this.TimeFormat;//显示时间格式 "HH:MM:SS", "hh:MM", "HH:MM:SS.fff"
6511
+ this.AryOverlayTitleName=[];//["MTitle-Close", "MTitle-Increase"];
6511
6512
  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
6513
  {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
6514
  {var isHScreen=this.Frame.IsHScreen===true;//空数据 返回坐标信息
@@ -6524,7 +6525,9 @@ if(isLastOne&&this.ShowLastDataFormat==1){if(this.Data&&this.Data.UpdateTime&&IF
6524
6525
  {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
6526
  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
6527
  {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 是否是最后一个数据
6528
+ 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});//分钟数据
6529
+ if(IFrameSplitOperator.IsNonEmptyArray(this.AryOverlayTitleName)){var minItem=this.GetMinuteItemByDateTime(overlayItem.Data,{Date:item.Date,Time:item.Time});if(minItem){var dec=GetfloatPrecision(overlayItem.Symbol);//价格小数位数
6530
+ 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
6531
  {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
6532
  }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
6533
  this.FormatCallAuctionTitle=function(data){var aryText=[];//{ Color: Text: }
@@ -9335,7 +9338,8 @@ frame.YSpecificMaxMin=null;frame.YSplitScale=null;}if(currentLength>count){var e
9335
9338
  {this.WindowIndex[windowIndex]=new ScriptIndex(item.Name,item.Script,item.Args,item);//脚本执行
9336
9339
  }else if(item.API)//后台指标
9337
9340
  {var apiItem=item.API;this.WindowIndex[windowIndex]=new APIScriptIndex(apiItem.Name,apiItem.Script,apiItem.Args,item);}else{var indexID=item.Index;var indexItem=JSIndexMap.Get(indexID);if(indexItem){this.WindowIndex[windowIndex]=indexItem.Create();this.CreateWindowIndex(windowIndex);}else{var systemScript=new JSIndexScript();var indexInfo=systemScript.Get(indexID);if(indexInfo){JSIndexScript.ModifyAttribute(indexInfo,item);this.WindowIndex[windowIndex]=new ScriptIndex(indexInfo.Name,indexInfo.Script,indexInfo.Args,indexInfo);//脚本执行
9338
- }}}}this.SetSubFrameAttribute(this.Frame.SubFrame[windowIndex],item,frameItem);if(item)this.UpdateIndexTemporaryAttribute(windowIndex,item.AryTemporaryAttribute);//指标临时属性
9341
+ }}}}else{this.WindowIndex[windowIndex]=null;//清空指标
9342
+ }this.SetSubFrameAttribute(this.Frame.SubFrame[windowIndex],item,frameItem);if(item)this.UpdateIndexTemporaryAttribute(windowIndex,item.AryTemporaryAttribute);//指标临时属性
9339
9343
  }//清空叠加指标
9340
9344
  for(var i=0;i<this.Frame.SubFrame.length;++i){this.DeleteWindowsOverlayIndex(i);}//最后一个显示X轴坐标
9341
9345
  for(var i=0;i<this.Frame.SubFrame.length;++i){var item=this.Frame.SubFrame[i].Frame;if(i==this.Frame.SubFrame.length-1)item.XSplitOperator.ShowText=true;else item.XSplitOperator.ShowText=false;}//叠加指标
@@ -12969,7 +12973,7 @@ else hqDataType=HQ_DATA_TYPE.MINUTE_ID;//分钟数据
12969
12973
  {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)//权限认证 执行一次
12970
12974
  {this.RequestAuthorization(hqChart,function(){_Temp_ExecuteScript();});}else{_Temp_ExecuteScript();}};//是否符合限制条件
12971
12975
  this.IsMeetCondition=function(param,option){JSConsole.Complier.Log('[ScriptIndex::IsMeetCondition] ',this.Condition);if(this.Condition.Period)//周期是否满足
12972
- {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',//类名::
12976
+ {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',//类名::
12973
12977
  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);};//周期是否满足条件
12974
12978
  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;};//显示指标不符合条件
12975
12979
  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();//更新数据偏移
@@ -13223,7 +13227,9 @@ var hqDataType=HQ_DATA_TYPE.KLINE_ID;//默认K线
13223
13227
  var dateRange=null;if(hqChart.ClassName==='MinuteChartContainer'||hqChart.ClassName==='MinuteChartHScreenContainer'){if(hqChart.DayCount>1)hqDataType=HQ_DATA_TYPE.MULTIDAY_MINUTE_ID;//多日分钟
13224
13228
  else hqDataType=HQ_DATA_TYPE.MINUTE_ID;//分钟数据
13225
13229
  dateRange=hisData.GetDateRange();}else if(hqChart.ClassName==='HistoryMinuteChartContainer'){hqDataType=HQ_DATA_TYPE.HISTORY_MINUTE_ID;//历史分钟
13226
- }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',//类名::
13230
+ }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,//是否需要鉴权
13231
+ IsFirst:this.RunCount===0,//指标是否首次请求数据
13232
+ 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',//类名::
13227
13233
  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;//已被上层替换,不调用默认的网络请求
13228
13234
  }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 后台指标计算格式
13229
13235
  this.RecvAPIData2=function(data,hqChart,windowIndex,hisData){JSConsole.Complier.Log('[APIScriptIndex::RecvAPIData2] recv data ',this.Name,data);//if (data.code!=0) return;
@@ -16320,7 +16326,7 @@ if(this.MouseOnItem){if(this.MouseOnItem.Data==item)color=this.TextConfig.MouseO
16320
16326
  */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;};}/********************************************************************************
16321
16327
  * 版本信息输出
16322
16328
  *
16323
- */var HQCHART_VERSION="1.1.15707";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();//把给外界调用的方法暴露出来
16329
+ */var HQCHART_VERSION="1.1.15718";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();//把给外界调用的方法暴露出来
16324
16330
  exports.default=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
16325
16331
  // BaseIndex:BaseIndex,
16326
16332
  // ChartLine:ChartLine,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hqchart",
3
- "version": "1.1.15708",
3
+ "version": "1.1.15719",
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
  /*
@@ -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;
@@ -4421,7 +4423,11 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
4421
4423
  if (this.TryClickLock)
4422
4424
  {
4423
4425
  //JSConsole.Chart.Log('[uielement.onmousedown] left, top ',e.clientX, e.clientY, this.getBoundingClientRect().left,this.getBoundingClientRect().top);
4424
- if (this.TryClickLock(x,y)) return;
4426
+ if (this.TryClickLock(x,y))
4427
+ {
4428
+ this.IsOnTouch=false;
4429
+ return;
4430
+ }
4425
4431
  }
4426
4432
 
4427
4433
  this.HideSelectRect();
@@ -11458,8 +11464,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11458
11464
  var item=this.WindowIndex[i];
11459
11465
  if (!item) continue;
11460
11466
 
11461
- var info={ Name:item.Name, WindowIndex:i, IsOverlay:false };
11467
+ var info={ Name:item.Name, WindowIndex:i, IsOverlay:false, IsAuthorization:item.IsAuthorization };
11462
11468
  if (item.ID) info.ID=item.ID;
11469
+ if (item.ClassName=="APIScriptIndex") info.API={ Url:item.ApiUrl, Name:item.Name, ID:item.ID };
11463
11470
  if (IFrameSplitOperator.IsNonEmptyArray(item.Arguments)) //参数
11464
11471
  {
11465
11472
  info.Args=[];
@@ -11468,6 +11475,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11468
11475
  var argItem=item.Arguments[j];
11469
11476
  info.Args.push( { Name:argItem.Name, Value:argItem.Value} );
11470
11477
  }
11478
+
11479
+ if (info.API) info.API.Args=info.Args;
11471
11480
  }
11472
11481
 
11473
11482
  aryIndex.push(info);
@@ -11491,8 +11500,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11491
11500
  var overlayItem=item.OverlayIndex[j];
11492
11501
  if (!overlayItem.Script) continue;
11493
11502
  var indexData=overlayItem.Script;
11494
- var info={ Name:indexData.Name, ID:indexData.ID, WindowIndex:i, IsOverlay:true, Identify:overlayItem.Identify };
11495
-
11503
+ var info={ Name:indexData.Name, ID:indexData.ID, WindowIndex:i, IsOverlay:true, Identify:overlayItem.Identify, IsAuthorization:indexData.IsAuthorization };
11504
+ if (indexData.ClassName=="APIScriptIndex") info.API={ Url:indexData.ApiUrl, Name:indexData.Name, ID:indexData.ID };
11496
11505
  if (IFrameSplitOperator.IsNonEmptyArray(indexData.Arguments)) //参数
11497
11506
  {
11498
11507
  info.Args=[];
@@ -11501,6 +11510,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11501
11510
  var argItem=indexData.Arguments[k];
11502
11511
  info.Args.push( { Name:argItem.Name, Value:argItem.Value} );
11503
11512
  }
11513
+
11514
+ if (info.API) info.API.Args=info.Args;
11504
11515
  }
11505
11516
 
11506
11517
  aryIndex.push(info);
@@ -64358,6 +64369,7 @@ function DynamicMinuteTitlePainting()
64358
64369
  this.MultiDayAfterCloseData; //多日分时图 收盘数据
64359
64370
 
64360
64371
  this.TimeFormat; //显示时间格式 "HH:MM:SS", "hh:MM", "HH:MM:SS.fff"
64372
+ this.AryOverlayTitleName=[]; //["MTitle-Close", "MTitle-Increase"];
64361
64373
 
64362
64374
 
64363
64375
  this.CallAuctionShowTitle=new Set(
@@ -64651,20 +64663,71 @@ function DynamicMinuteTitlePainting()
64651
64663
  {
64652
64664
  for(var i=0; i<this.OverlayChartPaint.length; ++i)
64653
64665
  {
64654
- var item=this.OverlayChartPaint[i];
64655
- if (!item.Symbol || !item.Title) continue;
64666
+ var overlayItem=this.OverlayChartPaint[i];
64667
+ if (!overlayItem.Symbol || !overlayItem.Title) continue;
64656
64668
 
64657
- var clrText=item.Color;
64658
- var text=`[${item.Title}]`;
64669
+ var clrText=overlayItem.Color;
64670
+ var text=`${overlayItem.Title}`;
64671
+
64672
+ var arySubText=[{Text:"[", Color:clrText}];
64673
+
64674
+ arySubText.push({Text:text, Color:clrText});
64675
+
64676
+ //分钟数据
64677
+ if (IFrameSplitOperator.IsNonEmptyArray(this.AryOverlayTitleName))
64678
+ {
64679
+ var minItem=this.GetMinuteItemByDateTime(overlayItem.Data, { Date:item.Date, Time:item.Time});
64680
+ if (minItem)
64681
+ {
64682
+ var dec=GetfloatPrecision(overlayItem.Symbol); //价格小数位数
64683
+ for(var j=0;j<this.AryOverlayTitleName.length;++j)
64684
+ {
64685
+ var titleName=this.AryOverlayTitleName[j];
64686
+ if (titleName=="MTitle-Close")
64687
+ {
64688
+ if (IFrameSplitOperator.IsNumber(minItem.Close) && IFrameSplitOperator.IsNumber(minItem.YClose))
64689
+ var color=this.GetColor(minItem.Close,minItem.YClose);
64690
+ var text=g_JSChartLocalization.GetText(titleName,this.LanguageID)+minItem.Close.toFixed(dec);
64691
+ arySubText.push({Text:text, Color:color});
64692
+ }
64693
+ else if (titleName="MTitle-Increase")
64694
+ {
64695
+ if (IFrameSplitOperator.IsNumber(minItem.Increase))
64696
+ {
64697
+ var color=this.GetColor(minItem.Increase,0);
64698
+ var text=g_JSChartLocalization.GetText(titleName,this.LanguageID)+minItem.Increase.toFixed(2)+'%';
64699
+ arySubText.push({Text:text, Color:color});
64700
+ }
64701
+ }
64702
+ }
64703
+ }
64704
+ }
64705
+
64706
+ arySubText.push({Text:"]", Color:clrText});
64659
64707
 
64660
- aryText.push({Text:text, Color:clrText});
64708
+ aryText.push(...arySubText);
64661
64709
  }
64662
64710
  }
64663
64711
 
64664
-
64665
64712
  return { AryText:aryText };
64666
64713
  }
64667
64714
 
64715
+ this.GetMinuteItemByDateTime=function(data, dateTime)
64716
+ {
64717
+ if (!dateTime || !data || !IFrameSplitOperator.IsNonEmptyArray(data.Data)) return null;
64718
+
64719
+ for(var i=0;i<data.Data.length;++i)
64720
+ {
64721
+ var item=data.Data[i];
64722
+ if (item.Date===dateTime.Date && item.Time===dateTime.Time)
64723
+ {
64724
+ return item;
64725
+ }
64726
+ }
64727
+
64728
+ return null;
64729
+ }
64730
+
64668
64731
  this.DrawItem=function(item, isLastOne) //isLastOne 是否是最后一个数据
64669
64732
  {
64670
64733
  if (!item) return;
@@ -96571,6 +96634,10 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
96571
96634
  }
96572
96635
  }
96573
96636
  }
96637
+ else
96638
+ {
96639
+ this.WindowIndex[windowIndex]=null; //清空指标
96640
+ }
96574
96641
 
96575
96642
  this.SetSubFrameAttribute(this.Frame.SubFrame[windowIndex], item, frameItem);
96576
96643
  if (item) this.UpdateIndexTemporaryAttribute(windowIndex, item.AryTemporaryAttribute); //指标临时属性
@@ -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;
@@ -8519,7 +8521,11 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8519
8521
  if (this.TryClickLock)
8520
8522
  {
8521
8523
  //JSConsole.Chart.Log('[uielement.onmousedown] left, top ',e.clientX, e.clientY, this.getBoundingClientRect().left,this.getBoundingClientRect().top);
8522
- if (this.TryClickLock(x,y)) return;
8524
+ if (this.TryClickLock(x,y))
8525
+ {
8526
+ this.IsOnTouch=false;
8527
+ return;
8528
+ }
8523
8529
  }
8524
8530
 
8525
8531
  this.HideSelectRect();
@@ -15556,8 +15562,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
15556
15562
  var item=this.WindowIndex[i];
15557
15563
  if (!item) continue;
15558
15564
 
15559
- var info={ Name:item.Name, WindowIndex:i, IsOverlay:false };
15565
+ var info={ Name:item.Name, WindowIndex:i, IsOverlay:false, IsAuthorization:item.IsAuthorization };
15560
15566
  if (item.ID) info.ID=item.ID;
15567
+ if (item.ClassName=="APIScriptIndex") info.API={ Url:item.ApiUrl, Name:item.Name, ID:item.ID };
15561
15568
  if (IFrameSplitOperator.IsNonEmptyArray(item.Arguments)) //参数
15562
15569
  {
15563
15570
  info.Args=[];
@@ -15566,6 +15573,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
15566
15573
  var argItem=item.Arguments[j];
15567
15574
  info.Args.push( { Name:argItem.Name, Value:argItem.Value} );
15568
15575
  }
15576
+
15577
+ if (info.API) info.API.Args=info.Args;
15569
15578
  }
15570
15579
 
15571
15580
  aryIndex.push(info);
@@ -15589,8 +15598,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
15589
15598
  var overlayItem=item.OverlayIndex[j];
15590
15599
  if (!overlayItem.Script) continue;
15591
15600
  var indexData=overlayItem.Script;
15592
- var info={ Name:indexData.Name, ID:indexData.ID, WindowIndex:i, IsOverlay:true, Identify:overlayItem.Identify };
15593
-
15601
+ var info={ Name:indexData.Name, ID:indexData.ID, WindowIndex:i, IsOverlay:true, Identify:overlayItem.Identify, IsAuthorization:indexData.IsAuthorization };
15602
+ if (indexData.ClassName=="APIScriptIndex") info.API={ Url:indexData.ApiUrl, Name:indexData.Name, ID:indexData.ID };
15594
15603
  if (IFrameSplitOperator.IsNonEmptyArray(indexData.Arguments)) //参数
15595
15604
  {
15596
15605
  info.Args=[];
@@ -15599,6 +15608,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
15599
15608
  var argItem=indexData.Arguments[k];
15600
15609
  info.Args.push( { Name:argItem.Name, Value:argItem.Value} );
15601
15610
  }
15611
+
15612
+ if (info.API) info.API.Args=info.Args;
15602
15613
  }
15603
15614
 
15604
15615
  aryIndex.push(info);
@@ -68456,6 +68467,7 @@ function DynamicMinuteTitlePainting()
68456
68467
  this.MultiDayAfterCloseData; //多日分时图 收盘数据
68457
68468
 
68458
68469
  this.TimeFormat; //显示时间格式 "HH:MM:SS", "hh:MM", "HH:MM:SS.fff"
68470
+ this.AryOverlayTitleName=[]; //["MTitle-Close", "MTitle-Increase"];
68459
68471
 
68460
68472
 
68461
68473
  this.CallAuctionShowTitle=new Set(
@@ -68749,20 +68761,71 @@ function DynamicMinuteTitlePainting()
68749
68761
  {
68750
68762
  for(var i=0; i<this.OverlayChartPaint.length; ++i)
68751
68763
  {
68752
- var item=this.OverlayChartPaint[i];
68753
- if (!item.Symbol || !item.Title) continue;
68764
+ var overlayItem=this.OverlayChartPaint[i];
68765
+ if (!overlayItem.Symbol || !overlayItem.Title) continue;
68754
68766
 
68755
- var clrText=item.Color;
68756
- var text=`[${item.Title}]`;
68767
+ var clrText=overlayItem.Color;
68768
+ var text=`${overlayItem.Title}`;
68769
+
68770
+ var arySubText=[{Text:"[", Color:clrText}];
68771
+
68772
+ arySubText.push({Text:text, Color:clrText});
68773
+
68774
+ //分钟数据
68775
+ if (IFrameSplitOperator.IsNonEmptyArray(this.AryOverlayTitleName))
68776
+ {
68777
+ var minItem=this.GetMinuteItemByDateTime(overlayItem.Data, { Date:item.Date, Time:item.Time});
68778
+ if (minItem)
68779
+ {
68780
+ var dec=GetfloatPrecision(overlayItem.Symbol); //价格小数位数
68781
+ for(var j=0;j<this.AryOverlayTitleName.length;++j)
68782
+ {
68783
+ var titleName=this.AryOverlayTitleName[j];
68784
+ if (titleName=="MTitle-Close")
68785
+ {
68786
+ if (IFrameSplitOperator.IsNumber(minItem.Close) && IFrameSplitOperator.IsNumber(minItem.YClose))
68787
+ var color=this.GetColor(minItem.Close,minItem.YClose);
68788
+ var text=g_JSChartLocalization.GetText(titleName,this.LanguageID)+minItem.Close.toFixed(dec);
68789
+ arySubText.push({Text:text, Color:color});
68790
+ }
68791
+ else if (titleName="MTitle-Increase")
68792
+ {
68793
+ if (IFrameSplitOperator.IsNumber(minItem.Increase))
68794
+ {
68795
+ var color=this.GetColor(minItem.Increase,0);
68796
+ var text=g_JSChartLocalization.GetText(titleName,this.LanguageID)+minItem.Increase.toFixed(2)+'%';
68797
+ arySubText.push({Text:text, Color:color});
68798
+ }
68799
+ }
68800
+ }
68801
+ }
68802
+ }
68803
+
68804
+ arySubText.push({Text:"]", Color:clrText});
68757
68805
 
68758
- aryText.push({Text:text, Color:clrText});
68806
+ aryText.push(...arySubText);
68759
68807
  }
68760
68808
  }
68761
68809
 
68762
-
68763
68810
  return { AryText:aryText };
68764
68811
  }
68765
68812
 
68813
+ this.GetMinuteItemByDateTime=function(data, dateTime)
68814
+ {
68815
+ if (!dateTime || !data || !IFrameSplitOperator.IsNonEmptyArray(data.Data)) return null;
68816
+
68817
+ for(var i=0;i<data.Data.length;++i)
68818
+ {
68819
+ var item=data.Data[i];
68820
+ if (item.Date===dateTime.Date && item.Time===dateTime.Time)
68821
+ {
68822
+ return item;
68823
+ }
68824
+ }
68825
+
68826
+ return null;
68827
+ }
68828
+
68766
68829
  this.DrawItem=function(item, isLastOne) //isLastOne 是否是最后一个数据
68767
68830
  {
68768
68831
  if (!item) return;
@@ -100669,6 +100732,10 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
100669
100732
  }
100670
100733
  }
100671
100734
  }
100735
+ else
100736
+ {
100737
+ this.WindowIndex[windowIndex]=null; //清空指标
100738
+ }
100672
100739
 
100673
100740
  this.SetSubFrameAttribute(this.Frame.SubFrame[windowIndex], item, frameItem);
100674
100741
  if (item) this.UpdateIndexTemporaryAttribute(windowIndex, item.AryTemporaryAttribute); //指标临时属性
@@ -134705,7 +134772,7 @@ function ScriptIndex(name,script,args,option)
134705
134772
 
134706
134773
  this.RequestAuthorization=function(hqChart, callback)
134707
134774
  {
134708
- var reqData={ IndexName:this.Name, IndexID:this.ID, IsOverlayIndex:this.IsOverlayIndex===true };
134775
+ var reqData={ IndexName:this.Name, IndexID:this.ID, IsOverlayIndex:this.IsOverlayIndex===true, Symbol:hqChart.Symbol };
134709
134776
 
134710
134777
  var obj=
134711
134778
  {
@@ -139100,7 +139167,9 @@ function APIScriptIndex(name,script,args,option, isOverlay)
139100
139167
  {
139101
139168
  indexname:this.ID, symbol: hqChart.Symbol, script:this.Script, args:args,
139102
139169
  period:hqChart.Period, right:hqChart.Right, hqdatatype: hqDataType,
139103
- IsAuthorization:this.IsAuthorization, WindowID:windowIndex,
139170
+ IsAuthorization:this.IsAuthorization, //是否需要鉴权
139171
+ IsFirst:this.RunCount===0, //指标是否首次请求数据
139172
+ WindowID:windowIndex,
139104
139173
  IsOverlayIndex:this.IsOverlayIndex===true,
139105
139174
  };
139106
139175
 
@@ -159095,7 +159164,7 @@ function ScrollBarBGChart()
159095
159164
 
159096
159165
 
159097
159166
 
159098
- var HQCHART_VERSION="1.1.15707";
159167
+ var HQCHART_VERSION="1.1.15718";
159099
159168
 
159100
159169
  function PrintHQChartVersion()
159101
159170
  {
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.15707";
8
+ var HQCHART_VERSION="1.1.15718";
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;
@@ -8563,7 +8565,11 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8563
8565
  if (this.TryClickLock)
8564
8566
  {
8565
8567
  //JSConsole.Chart.Log('[uielement.onmousedown] left, top ',e.clientX, e.clientY, this.getBoundingClientRect().left,this.getBoundingClientRect().top);
8566
- if (this.TryClickLock(x,y)) return;
8568
+ if (this.TryClickLock(x,y))
8569
+ {
8570
+ this.IsOnTouch=false;
8571
+ return;
8572
+ }
8567
8573
  }
8568
8574
 
8569
8575
  this.HideSelectRect();
@@ -15600,8 +15606,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
15600
15606
  var item=this.WindowIndex[i];
15601
15607
  if (!item) continue;
15602
15608
 
15603
- var info={ Name:item.Name, WindowIndex:i, IsOverlay:false };
15609
+ var info={ Name:item.Name, WindowIndex:i, IsOverlay:false, IsAuthorization:item.IsAuthorization };
15604
15610
  if (item.ID) info.ID=item.ID;
15611
+ if (item.ClassName=="APIScriptIndex") info.API={ Url:item.ApiUrl, Name:item.Name, ID:item.ID };
15605
15612
  if (IFrameSplitOperator.IsNonEmptyArray(item.Arguments)) //参数
15606
15613
  {
15607
15614
  info.Args=[];
@@ -15610,6 +15617,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
15610
15617
  var argItem=item.Arguments[j];
15611
15618
  info.Args.push( { Name:argItem.Name, Value:argItem.Value} );
15612
15619
  }
15620
+
15621
+ if (info.API) info.API.Args=info.Args;
15613
15622
  }
15614
15623
 
15615
15624
  aryIndex.push(info);
@@ -15633,8 +15642,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
15633
15642
  var overlayItem=item.OverlayIndex[j];
15634
15643
  if (!overlayItem.Script) continue;
15635
15644
  var indexData=overlayItem.Script;
15636
- var info={ Name:indexData.Name, ID:indexData.ID, WindowIndex:i, IsOverlay:true, Identify:overlayItem.Identify };
15637
-
15645
+ var info={ Name:indexData.Name, ID:indexData.ID, WindowIndex:i, IsOverlay:true, Identify:overlayItem.Identify, IsAuthorization:indexData.IsAuthorization };
15646
+ if (indexData.ClassName=="APIScriptIndex") info.API={ Url:indexData.ApiUrl, Name:indexData.Name, ID:indexData.ID };
15638
15647
  if (IFrameSplitOperator.IsNonEmptyArray(indexData.Arguments)) //参数
15639
15648
  {
15640
15649
  info.Args=[];
@@ -15643,6 +15652,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
15643
15652
  var argItem=indexData.Arguments[k];
15644
15653
  info.Args.push( { Name:argItem.Name, Value:argItem.Value} );
15645
15654
  }
15655
+
15656
+ if (info.API) info.API.Args=info.Args;
15646
15657
  }
15647
15658
 
15648
15659
  aryIndex.push(info);
@@ -68500,6 +68511,7 @@ function DynamicMinuteTitlePainting()
68500
68511
  this.MultiDayAfterCloseData; //多日分时图 收盘数据
68501
68512
 
68502
68513
  this.TimeFormat; //显示时间格式 "HH:MM:SS", "hh:MM", "HH:MM:SS.fff"
68514
+ this.AryOverlayTitleName=[]; //["MTitle-Close", "MTitle-Increase"];
68503
68515
 
68504
68516
 
68505
68517
  this.CallAuctionShowTitle=new Set(
@@ -68793,20 +68805,71 @@ function DynamicMinuteTitlePainting()
68793
68805
  {
68794
68806
  for(var i=0; i<this.OverlayChartPaint.length; ++i)
68795
68807
  {
68796
- var item=this.OverlayChartPaint[i];
68797
- if (!item.Symbol || !item.Title) continue;
68808
+ var overlayItem=this.OverlayChartPaint[i];
68809
+ if (!overlayItem.Symbol || !overlayItem.Title) continue;
68798
68810
 
68799
- var clrText=item.Color;
68800
- var text=`[${item.Title}]`;
68811
+ var clrText=overlayItem.Color;
68812
+ var text=`${overlayItem.Title}`;
68813
+
68814
+ var arySubText=[{Text:"[", Color:clrText}];
68815
+
68816
+ arySubText.push({Text:text, Color:clrText});
68817
+
68818
+ //分钟数据
68819
+ if (IFrameSplitOperator.IsNonEmptyArray(this.AryOverlayTitleName))
68820
+ {
68821
+ var minItem=this.GetMinuteItemByDateTime(overlayItem.Data, { Date:item.Date, Time:item.Time});
68822
+ if (minItem)
68823
+ {
68824
+ var dec=GetfloatPrecision(overlayItem.Symbol); //价格小数位数
68825
+ for(var j=0;j<this.AryOverlayTitleName.length;++j)
68826
+ {
68827
+ var titleName=this.AryOverlayTitleName[j];
68828
+ if (titleName=="MTitle-Close")
68829
+ {
68830
+ if (IFrameSplitOperator.IsNumber(minItem.Close) && IFrameSplitOperator.IsNumber(minItem.YClose))
68831
+ var color=this.GetColor(minItem.Close,minItem.YClose);
68832
+ var text=g_JSChartLocalization.GetText(titleName,this.LanguageID)+minItem.Close.toFixed(dec);
68833
+ arySubText.push({Text:text, Color:color});
68834
+ }
68835
+ else if (titleName="MTitle-Increase")
68836
+ {
68837
+ if (IFrameSplitOperator.IsNumber(minItem.Increase))
68838
+ {
68839
+ var color=this.GetColor(minItem.Increase,0);
68840
+ var text=g_JSChartLocalization.GetText(titleName,this.LanguageID)+minItem.Increase.toFixed(2)+'%';
68841
+ arySubText.push({Text:text, Color:color});
68842
+ }
68843
+ }
68844
+ }
68845
+ }
68846
+ }
68847
+
68848
+ arySubText.push({Text:"]", Color:clrText});
68801
68849
 
68802
- aryText.push({Text:text, Color:clrText});
68850
+ aryText.push(...arySubText);
68803
68851
  }
68804
68852
  }
68805
68853
 
68806
-
68807
68854
  return { AryText:aryText };
68808
68855
  }
68809
68856
 
68857
+ this.GetMinuteItemByDateTime=function(data, dateTime)
68858
+ {
68859
+ if (!dateTime || !data || !IFrameSplitOperator.IsNonEmptyArray(data.Data)) return null;
68860
+
68861
+ for(var i=0;i<data.Data.length;++i)
68862
+ {
68863
+ var item=data.Data[i];
68864
+ if (item.Date===dateTime.Date && item.Time===dateTime.Time)
68865
+ {
68866
+ return item;
68867
+ }
68868
+ }
68869
+
68870
+ return null;
68871
+ }
68872
+
68810
68873
  this.DrawItem=function(item, isLastOne) //isLastOne 是否是最后一个数据
68811
68874
  {
68812
68875
  if (!item) return;
@@ -100713,6 +100776,10 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
100713
100776
  }
100714
100777
  }
100715
100778
  }
100779
+ else
100780
+ {
100781
+ this.WindowIndex[windowIndex]=null; //清空指标
100782
+ }
100716
100783
 
100717
100784
  this.SetSubFrameAttribute(this.Frame.SubFrame[windowIndex], item, frameItem);
100718
100785
  if (item) this.UpdateIndexTemporaryAttribute(windowIndex, item.AryTemporaryAttribute); //指标临时属性
@@ -134749,7 +134816,7 @@ function ScriptIndex(name,script,args,option)
134749
134816
 
134750
134817
  this.RequestAuthorization=function(hqChart, callback)
134751
134818
  {
134752
- var reqData={ IndexName:this.Name, IndexID:this.ID, IsOverlayIndex:this.IsOverlayIndex===true };
134819
+ var reqData={ IndexName:this.Name, IndexID:this.ID, IsOverlayIndex:this.IsOverlayIndex===true, Symbol:hqChart.Symbol };
134753
134820
 
134754
134821
  var obj=
134755
134822
  {
@@ -139144,7 +139211,9 @@ function APIScriptIndex(name,script,args,option, isOverlay)
139144
139211
  {
139145
139212
  indexname:this.ID, symbol: hqChart.Symbol, script:this.Script, args:args,
139146
139213
  period:hqChart.Period, right:hqChart.Right, hqdatatype: hqDataType,
139147
- IsAuthorization:this.IsAuthorization, WindowID:windowIndex,
139214
+ IsAuthorization:this.IsAuthorization, //是否需要鉴权
139215
+ IsFirst:this.RunCount===0, //指标是否首次请求数据
139216
+ WindowID:windowIndex,
139148
139217
  IsOverlayIndex:this.IsOverlayIndex===true,
139149
139218
  };
139150
139219
 
@@ -175457,7 +175526,7 @@ function ChartScrollText()
175457
175526
 
175458
175527
 
175459
175528
 
175460
- var HQCHART_VERSION="1.1.15707";
175529
+ var HQCHART_VERSION="1.1.15718";
175461
175530
 
175462
175531
  function PrintHQChartVersion()
175463
175532
  {