hqchart 1.1.12391 → 1.1.12406

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.
@@ -1309,12 +1309,12 @@ Complier:{Log:console.log,Warn:console.warn//编译器日志
1309
1309
  }};}function JSChart(divElement,bOffscreen,bCacheCanvas){this.DivElement=divElement;this.DivToolElement=null;//工具条
1310
1310
  this.JSChartContainer;//画图控件
1311
1311
  //h5 canvas
1312
- this.CanvasElement=document.createElement("canvas");this.CanvasElement.className='jschart-drawing';this.CanvasElement.id=Guid();this.CanvasElement.setAttribute("tabindex",0);if(this.CanvasElement.style)this.CanvasElement.style.outline='none';if(divElement.hasChildNodes()){JSConsole.Chart.Log("[JSChart::JSChart] divElement hasChildNodes",divElement.childNodes);}divElement.appendChild(this.CanvasElement);//离屏
1312
+ this.CanvasElement=document.createElement("canvas");this.CanvasElement.className='jschart-drawing';this.CanvasElement.id=Guid();this.CanvasElement.setAttribute("tabindex",0);if(this.CanvasElement.style){this.CanvasElement.style.outline='none';this.CanvasElement.style.position="absolute";}if(divElement.hasChildNodes()){JSConsole.Chart.Log("[JSChart::JSChart] divElement hasChildNodes",divElement.childNodes);}divElement.appendChild(this.CanvasElement);//离屏
1313
1313
  this.OffscreenCanvasElement;if(bOffscreen==true)this.OffscreenCanvasElement=document.createElement("canvas");//图形缓存
1314
1314
  this.CacheCanvasElement=null;if(bCacheCanvas)this.CacheCanvasElement=document.createElement("canvas");//改参数div
1315
1315
  this.ModifyIndexDialog=new ModifyIndexDialog(divElement);this.ChangeIndexDialog=new ChangeIndexDialog(divElement);this.MinuteDialog=new MinuteDialog(divElement);//额外的画布
1316
1316
  this.MapExtraCanvasElement=new _map2.default();//key=画布名字, value={ Element:, Canvas:}
1317
- this.CreateExtraCanvasElement=function(name,option){if(this.MapExtraCanvasElement.has(name))return this.MapExtraCanvasElement.get(name);var element=document.createElement("canvas");element.className='jschart-drawing-extra';element.id=Guid();if(name==JSChart.CorssCursorCanvasKey)element.setAttribute("tabindex",5);else element.setAttribute("tabindex",1);if(element.style){element.style.outline='none';element.style.position="absolute";element.style.left='0px';element.style.top='0px';element.style["pointer-events"]="none";}if(option){if(IFrameSplitOperator.IsNumber(option.TabIndex))element.setAttribute("tabindex",option.TabIndex);}divElement.appendChild(element);var item={Element:element,Canvas:null};this.MapExtraCanvasElement.set(name,item);};this.GetExtraCanvas=function(name){if(!this.MapExtraCanvasElement.has(name))return null;var item=this.MapExtraCanvasElement.get(name);if(!item.Element)return null;if(!item.Canvas)item.Canvas=item.Element.getContext("2d");return item;};this.OnSize=function(option)//{ Type:1 新版本OnSize Redraw:是否重绘, XYSplit:是否重新计算分割线 }
1317
+ this.CreateExtraCanvasElement=function(name,option){if(this.MapExtraCanvasElement.has(name))return this.MapExtraCanvasElement.get(name);var element=document.createElement("canvas");element.className='jschart-drawing-extra';element.id=Guid();if(name==JSChart.CorssCursorCanvasKey)element.setAttribute("tabindex",5);else element.setAttribute("tabindex",1);if(element.style){element.style.outline='none';element.style.position="absolute";element.style.left='0px';element.style.top='0px';element.style["pointer-events"]="none";}if(option){if(IFrameSplitOperator.IsNumber(option.TabIndex))element.setAttribute("tabindex",option.TabIndex);if(IFrameSplitOperator.IsNumber(option.ZIndex))element.style["z-index"]=option.ZIndex;}divElement.appendChild(element);var item={Element:element,Canvas:null};this.MapExtraCanvasElement.set(name,item);};this.GetExtraCanvas=function(name){if(!this.MapExtraCanvasElement.has(name))return null;var item=this.MapExtraCanvasElement.get(name);if(!item.Element)return null;if(!item.Canvas)item.Canvas=item.Element.getContext("2d");return item;};this.OnSize=function(option)//{ Type:1 新版本OnSize Redraw:是否重绘, XYSplit:是否重新计算分割线 }
1318
1318
  {//画布大小通过div获取
1319
1319
  var height=parseInt(this.DivElement.style.height.replace("px",""));if(this.ToolElement){//TODO调整工具条大小
1320
1320
  height-=this.ToolElement.style.height.replace("px","");//减去工具条的高度
@@ -1847,7 +1847,7 @@ for(var i=0;i<frame.CustomHorizontalInfo.length;++i){var info=frame.CustomHorizo
1847
1847
  var newCustomHorizontalInfo=frame.CustomHorizontalInfo.filter(function(value,index,ary){return value.Type!=4;});frame.CustomHorizontalInfo=newCustomHorizontalInfo;}for(var i=0;i<this.OverlayChartPaint.length;++i){var item=this.OverlayChartPaint[i];if(!item)continue;if(item.YInfoType!=4)continue;var data=item.Data;if(!data||!IFrameSplitOperator.IsNonEmptyArray(data.Data))continue;if(!IFrameSplitOperator.IsNumber(item.DrawKRange.Start)||!IFrameSplitOperator.IsNumber(item.DrawKRange.End))continue;var startKLine=data.Data[item.DrawKRange.Start];var endKLine=data.Data[item.DrawKRange.End];var value=(endKLine.Close-startKLine.Close)/startKLine.Close*100;var info=new CoordinateInfo();info.Value=endKLine.Close/item.ShowRange.FirstOverlayOpen*item.ShowRange.FirstOpen;info.Message[1]=value.toFixed(2)+"%";info.LineType=-1;info.Type=item.YInfoType;//叠加股票
1848
1848
  info.LineColor=item.Color;info.TextColor=g_JSChartResource.FrameLatestPrice.OverlayTextColor;if(item.Title)info.Title=item.Title;frame.CustomHorizontalInfo.push(info);}};this.OffscreenToShowCanvas=function(){if(!this.ShowCanvas)return;this.ShowCanvas.clearRect(0,0,this.UIElement.width,this.UIElement.height);this.ShowCanvas.drawImage(this.OffscreenCanvasElement,0,0);};this.GetDrawStatus=function(){var status={Point:{X:this.LastPoint.X,Y:this.LastPoint.Y},IsOnTouch:this.IsOnTouch,CorssCursorTouchEnd:this.CorssCursorTouchEnd,IsTitleShowLatestData:this.IsTitleShowLatestData,IsMinuteChart:this.ClassName=="MinuteChartContainer"||this.ClassName=="MinuteChartHScreenContainer"?true:false};status.FrameID=this.Frame.PtInFrame(this.LastPoint.X,this.LastPoint.Y);return status;};//画动态信息
1849
1849
  this.DrawDynamicInfo=function(option){this.LastMouseStatus.MouseOnToolbar=null;//鼠标在工具栏按钮上
1850
- if(this.Frame.ScreenImageData==null&&!this.CacheCanvas)return;var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_BEFORE_DRAW_DYNAMIC_INFO);if(event&&event.Callback){var sendData={};event.Callback(event,sendData,this);}var isErase=false;if(this.ChartCorssCursor){if(this.ChartCorssCursor.PointX!=null||this.ChartCorssCursor.PointY!=null)isErase=true;}isErase=true;//每次都擦除背景
1850
+ var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_BEFORE_DRAW_DYNAMIC_INFO);if(event&&event.Callback){var sendData={};event.Callback(event,sendData,this);}if(this.Frame.ScreenImageData==null&&!this.CacheCanvas)return;var isErase=false;if(this.ChartCorssCursor){if(this.ChartCorssCursor.PointX!=null||this.ChartCorssCursor.PointY!=null)isErase=true;}isErase=true;//每次都擦除背景
1851
1851
  if(isErase==false){for(var i=0;i<this.ExtendChartPaint.length;++i){var item=this.ExtendChartPaint[i];if(item.IsCallbackDraw)continue;if(item.IsDynamic&&item.IsEraseBG){isErase=true;break;}}}if(isErase){if(this.Frame.ScreenImageData){this.Canvas.putImageData(this.Frame.ScreenImageData,0,0);}else if(this.CacheCanvas){this.Canvas.clearRect(0,0,this.UIElement.width,this.UIElement.height);this.Canvas.drawImage(this.CacheElement,0,0);}}if(this.Frame.DrawToolbar)this.Frame.DrawToolbar(this.LastMouseStatus);this.DrawSelectedStatus();var moveonPoint=null;if(this.LastMouseStatus&&this.LastMouseStatus.MoveOnPoint)moveonPoint=this.LastMouseStatus.MoveOnPoint;for(var i=0;i<this.ExtendChartPaint.length;++i)//动态扩展图形
1852
1852
  {var item=this.ExtendChartPaint[i];if(item.IsCallbackDraw)continue;if(item.DrawAfterPicture)continue;if(item.IsDynamic&&item.DrawAfterTitle===false&&item.IsAnimation==false){item.Draw();if(item.DrawToolbar)item.DrawToolbar(moveonPoint,this.LastMouseStatus);}}for(var i=0;i<this.ChartDrawPicture.length;++i){var item=this.ChartDrawPicture[i];if(item.IsDrawFirst)item.Draw();}this.DrawDrawPictureXYCoordinate();if(this.ChartCorssCursor){this.ChartCorssCursor.LastPoint=this.LastPoint;this.ChartCorssCursor.CursorIndex=this.CursorIndex;var bRestoreCanvas=false;if(this.CorssCursorCanvas)//独立的十字光标层
1853
1853
  {this.ChartCorssCursor.Canvas=this.CorssCursorCanvas;this.ChartCorssCursor.Canvas.clearRect(0,0,this.CorssCursorElement.width,this.CorssCursorElement.height);bRestoreCanvas=true;}if(option&&option.Corss==false){}else if(this.DragMode==JSCHART_DRAG_ID.CLICK_TOUCH_MODE_ID){if(this.TouchStatus.CorssCursorShow==true)this.ChartCorssCursor.Draw();}else if(this.IsOnTouch===false&&this.CurrentChartDrawPicture&&this.CurrentChartDrawPicture.IsShowCorssCursor===true)//开始绘图
@@ -10959,7 +10959,7 @@ this.ConstVarTable=new _map2.default([//个股数据
10959
10959
  ["ZSTJJ",null],//分时图均价线,对于分时图周期指标有效.
10960
10960
  ["ISEQUAL",null],["ISUP",null],["ISDOWN"],//ISUP=收阳 ISEQUAL=平盘 ISDOWN=收阴
10961
10961
  //日期类
10962
- ['DATE',null],['YEAR',null],['MONTH',null],['PERIOD',null],['WEEK',null],["TIME",null],["DAY",null],["DATETIME",null],["TIME2",null],["WEEKOFYEAR",null],["DAYSTOTODAY",null],//大盘数据
10962
+ ['DATE',null],['YEAR',null],['MONTH',null],['PERIOD',null],['WEEK',null],['WEEKDAY',null],["TIME",null],["DAY",null],["DATETIME",null],["TIME2",null],["WEEKOFYEAR",null],["DAYSTOTODAY",null],//大盘数据
10963
10963
  ['INDEXA',null],['INDEXC',null],['INDEXH',null],['INDEXL',null],['INDEXO',null],['INDEXV',null],['INDEXADV',null],['INDEXDEC',null],["ADVANCE",null],['DECLINE',null],['FROMOPEN',null],//已开盘有多长分钟
10964
10964
  ['TOTALFZNUM',null],//该品种的每天的总交易分钟数.
10965
10965
  ['CURRBARSCOUNT',null],//到最后交易日的周期数
@@ -11018,7 +11018,7 @@ return this.SymbolData.GetVariantData(jobItem);case JS_EXECUTE_JOB_ID.JOB_CUSTOM
11018
11018
  case"ISUP"://收阳
11019
11019
  case"ISDOWN"://收阴
11020
11020
  return this.SymbolData.GetSymbolCacheData(name);case'VOLR':return this.SymbolData.GetVolRateCacheData(node);//大盘数据
11021
- case'INDEXA':case'INDEXC':case'INDEXH':case'INDEXH':case'INDEXO':case'INDEXV':case'INDEXL':case'INDEXADV':case'INDEXDEC':return this.SymbolData.GetIndexCacheData(name);case'CURRBARSCOUNT':return this.SymbolData.GetCurrBarsCount();case"BARPOS":return this.SymbolData.GetBarPos();case"TOTALBARSCOUNT":return this.SymbolData.GetTotalBarsCount();case"TOTALFZNUM":return this.SymbolData.GetTotalTradeMinuteCount();case'ISLASTBAR':return this.SymbolData.GetIsLastBar();case"BARSTATUS":return this.SymbolData.GetBarStatus();case"TOTALCAPITAL":case'CAPITAL':case'EXCHANGE':case"HYBLOCK":case"DYBLOCK":case"GNBLOCK":case"FGBLOCK":case"ZSBLOCK":case"ZHBLOCK":case"ZDBLOCK":case"HYZSCODE":case"GNBLOCKNUM":case"FGBLOCKNUM":case"ZSBLOCKNUM":case"ZHBLOCKNUM":case"ZDBLOCKNUM":case"HYSYL":case"HYSJL":return this.SymbolData.GetStockCacheData({VariantName:name,Node:node});case'SETCODE':return this.SymbolData.SETCODE();case'CODE':return this.SymbolData.GetSymbol();case'STKNAME':return this.SymbolData.GetName();case"TIME":return this.SymbolData.TIME();case"TIME2":return this.SymbolData.TIME2();case'DATE':return this.SymbolData.DATE();case"DATETIME":return this.SymbolData.DateTime();case'YEAR':return this.SymbolData.YEAR();case'MONTH':return this.SymbolData.MONTH();case'WEEK':return this.SymbolData.WEEK();case"DAY":return this.SymbolData.DAY();case'PERIOD':return this.SymbolData.PERIOD();case'FROMOPEN':return this.SymbolData.GetLatestIndexCacheData('FROMOPEN');case'DRAWNULL':case"NULL":return this.SymbolData.GetDrawNull();case'ADVANCE':case'DECLINE':return this.SymbolData.GetIndexIncreaseCacheData(name,this.SymbolData.Symbol,node);case"TQFLAG":return this.SymbolData.Right;case"MACHINEDATE":{var now=new Date();return now.getFullYear()*10000+now.getMonth()*1*100+now.getDate()-19000000;}case"MACHINETIME":{var now=new Date();return now.getHours()*10000+now.getMinutes()*1*100+now.getSeconds();}case"MACHINEWEEK":{var now=new Date();return now.getDay();}case"WEEKOFYEAR":return this.SymbolData.WEEKOFYEAR();case"DAYSTOTODAY":return this.SymbolData.DAYSTOTODAY();}};this.ReadCustomVariant=function(name,node){return this.SymbolData.GetStockCacheData({VariantName:name,Node:node});};//读取变量
11021
+ case'INDEXA':case'INDEXC':case'INDEXH':case'INDEXH':case'INDEXO':case'INDEXV':case'INDEXL':case'INDEXADV':case'INDEXDEC':return this.SymbolData.GetIndexCacheData(name);case'CURRBARSCOUNT':return this.SymbolData.GetCurrBarsCount();case"BARPOS":return this.SymbolData.GetBarPos();case"TOTALBARSCOUNT":return this.SymbolData.GetTotalBarsCount();case"TOTALFZNUM":return this.SymbolData.GetTotalTradeMinuteCount();case'ISLASTBAR':return this.SymbolData.GetIsLastBar();case"BARSTATUS":return this.SymbolData.GetBarStatus();case"TOTALCAPITAL":case'CAPITAL':case'EXCHANGE':case"HYBLOCK":case"DYBLOCK":case"GNBLOCK":case"FGBLOCK":case"ZSBLOCK":case"ZHBLOCK":case"ZDBLOCK":case"HYZSCODE":case"GNBLOCKNUM":case"FGBLOCKNUM":case"ZSBLOCKNUM":case"ZHBLOCKNUM":case"ZDBLOCKNUM":case"HYSYL":case"HYSJL":return this.SymbolData.GetStockCacheData({VariantName:name,Node:node});case'SETCODE':return this.SymbolData.SETCODE();case'CODE':return this.SymbolData.GetSymbol();case'STKNAME':return this.SymbolData.GetName();case"TIME":return this.SymbolData.TIME();case"TIME2":return this.SymbolData.TIME2();case'DATE':return this.SymbolData.DATE();case"DATETIME":return this.SymbolData.DateTime();case'YEAR':return this.SymbolData.YEAR();case'MONTH':return this.SymbolData.MONTH();case'WEEK':case"WEEKDAY":return this.SymbolData.WEEK();case"DAY":return this.SymbolData.DAY();case'PERIOD':return this.SymbolData.PERIOD();case'FROMOPEN':return this.SymbolData.GetLatestIndexCacheData('FROMOPEN');case'DRAWNULL':case"NULL":return this.SymbolData.GetDrawNull();case'ADVANCE':case'DECLINE':return this.SymbolData.GetIndexIncreaseCacheData(name,this.SymbolData.Symbol,node);case"TQFLAG":return this.SymbolData.Right;case"MACHINEDATE":{var now=new Date();return now.getFullYear()*10000+now.getMonth()*1*100+now.getDate()-19000000;}case"MACHINETIME":{var now=new Date();return now.getHours()*10000+now.getMinutes()*1*100+now.getSeconds();}case"MACHINEWEEK":{var now=new Date();return now.getDay();}case"WEEKOFYEAR":return this.SymbolData.WEEKOFYEAR();case"DAYSTOTODAY":return this.SymbolData.DAYSTOTODAY();}};this.ReadCustomVariant=function(name,node){return this.SymbolData.GetStockCacheData({VariantName:name,Node:node});};//读取变量
11022
11022
  this.ReadVariable=function(name,node){if(this.ConstVarTable.has(name)){var data=this.ConstVarTable.get(name);if(data==null)//动态加载,用到再加载
11023
11023
  {data=this.ReadSymbolData(name,node);this.ConstVarTable.set(name,data);}return data;}if(g_JSComplierResource.IsCustomVariant(name))return this.ReadCustomVariant(name,node);//读取自定义变量
11024
11024
  if(this.VarTable.has(name))return this.VarTable.get(name);if(name.indexOf('#')>0){var aryPeriod=name.split('#');return this.SymbolData.GetSymbolPeriodCacheData(aryPeriod[0],aryPeriod[1]);}if(name.indexOf("COLOR")==0){var colorValue=JSComplier.ColorVarToRGB(name);if(colorValue)return colorValue;}this.ThrowUnexpectedNode(node,'变量'+name+'不存在',name);return null;};this.ReadMemberVariable=function(node){var obj=node.Object;var member=node.Property;var maiObj=void 0;if(obj.Type==Syntax.BinaryExpression||obj.Type==Syntax.LogicalExpression)maiObj=this.VisitBinaryExpression(obj);else if(obj.Type==Syntax.CallExpression)maiObj=this.VisitCallExpression(obj);else maiObj=this.GetNodeValue(obj);if(!maiObj)return null;var value=maiObj[member.Name];if(value)return value;return null;};//单数据转成数组 个数和历史数据一致
@@ -11332,7 +11332,7 @@ this.ShowConditionError=function(param,msg){var hqChart=param.HQChart;var window
11332
11332
  if(IFrameSplitOperator.IsNumber(this.YSplitType))this.OverlayIndex.Frame.Frame.YSplitOperator.SplitType=this.YSplitType;//指标名字
11333
11333
  var titleInfo={Data:[],Title:this.Name,Frame:this.OverlayIndex.Frame.Frame,Script:this};var indexParam='';for(var i in this.Arguments){var _item33=this.Arguments[i];if(indexParam.length>0)indexParam+=',';indexParam+=_item33.Value.toString();}if(indexParam.length>0)titleInfo.Title=this.Name+'('+indexParam+')';var titleIndex=windowIndex+1;var titlePaint=hqChart.TitlePaint[titleIndex];titlePaint.OverlayIndex.set(this.OverlayIndex.Identify,titleInfo);this.OverlayIndex.Frame.Frame.Title=titleInfo.Title;//给子框架设置标题
11334
11334
  if(this.OutName&&this.OutName.length>0&&this.Arguments&&this.Arguments.length>0){titlePaint.SetDynamicTitle(this.OutName,this.Arguments,this.OverlayIndex.Identify);}for(var i=0;i<this.OutVar.length;++i){var _item34=this.OutVar[i];if(_item34.IsExData===true)continue;//扩展数据不显示图形
11335
- if(_item34.Type==0){this.CreateLine(hqChart,windowIndex,_item34,i,_item34.Type);}else if(_item34.Type==1){switch(_item34.Draw.DrawType){case'STICKLINE':this.CreateBar(hqChart,windowIndex,_item34,i);break;case'DRAWTEXT':this.CreateDrawTextV2(hqChart,windowIndex,_item34,i);break;case'SUPERDRAWTEXT':this.CreateText(hqChart,windowIndex,_item34,i);break;case'DRAWLINE':this.CreateStraightLine(hqChart,windowIndex,_item34,i);break;case'DRAWBAND':this.CreateBand(hqChart,windowIndex,_item34,i);break;case'DRAWKLINE':this.CreateKLine(hqChart,windowIndex,_item34,i);break;case'DRAWKLINE_IF':this.CreateKLine(hqChart,windowIndex,_item34,i);break;case'POLYLINE':this.CreatePolyLine(hqChart,windowIndex,_item34,i);break;case'DRAWNUMBER':case"DRAWNUMBER_FIX":case'DRAWTEXT_FIX':this.CreateNumberText(hqChart,windowIndex,_item34,i);break;case'DRAWICON':this.CreateIcon(hqChart,windowIndex,_item34,i);break;case'DRAWCHANNEL':this.CreateChannel(hqChart,windowIndex,_item34,i);break;case'DRAWTEXT_LINE':this.CreateTextLine(hqChart,windowIndex,_item34,i);break;case"VERTLINE":this.CreateChartVericaltLine(hqChart,windowIndex,_item34,i);break;case"HORLINE":this.CreateChartHorizontalLine(hqChart,windowIndex,_item34,i);break;case'MULTI_LINE':this.CreateMultiLine(hqChart,windowIndex,_item34,i);break;case"MULTI_POINT":this.CreateMultiPoint(hqChart,windowIndex,_item34,i);break;case'MULTI_BAR':this.CreateMultiBar(hqChart,windowIndex,_item34,i);break;case'MULTI_TEXT':this.CreateMultiText(hqChart,windowIndex,_item34,i);break;case'MULTI_SVGICON':this.CreateMultiSVGIcon(hqChart,windowIndex,_item34,i);break;case"DRAWSVG":this.CreateChartDrawSVG(hqChart,windowIndex,_item34,i);break;case"MULTI_HTMLDOM":this.CreateMulitHtmlDom(hqChart,windowIndex,_item34,i);break;case"KLINE_BG":this.CreateBackgroud(hqChart,windowIndex,_item34,i);break;case'PARTLINE':this.CreatePartLine(hqChart,windowIndex,_item34,i);break;case SCRIPT_CHART_NAME.OVERLAY_BARS:this.CreateStackedBar(hqChart,windowIndex,_item34,i);break;default:{var find=g_ScriptIndexChartFactory.Get(_item34.Draw.DrawType);//外部挂接
11335
+ if(_item34.Type==0){this.CreateLine(hqChart,windowIndex,_item34,i,_item34.Type);}else if(_item34.Type==1){switch(_item34.Draw.DrawType){case'STICKLINE':this.CreateBar(hqChart,windowIndex,_item34,i);break;case'DRAWTEXT':this.CreateDrawTextV2(hqChart,windowIndex,_item34,i);break;case'SUPERDRAWTEXT':this.CreateText(hqChart,windowIndex,_item34,i);break;case'DRAWLINE':this.CreateStraightLine(hqChart,windowIndex,_item34,i);break;case'DRAWBAND':this.CreateBand(hqChart,windowIndex,_item34,i);break;case'DRAWKLINE':this.CreateKLine(hqChart,windowIndex,_item34,i);break;case'DRAWKLINE_IF':this.CreateKLine(hqChart,windowIndex,_item34,i);break;case'POLYLINE':this.CreatePolyLine(hqChart,windowIndex,_item34,i);break;case'DRAWNUMBER':case"DRAWNUMBER_FIX":case'DRAWTEXT_FIX':this.CreateNumberText(hqChart,windowIndex,_item34,i);break;case'DRAWICON':this.CreateIcon(hqChart,windowIndex,_item34,i);break;case'DRAWCHANNEL':this.CreateChannel(hqChart,windowIndex,_item34,i);break;case'DRAWTEXT_LINE':this.CreateTextLine(hqChart,windowIndex,_item34,i);break;case"VERTLINE":this.CreateChartVericaltLine(hqChart,windowIndex,_item34,i);break;case"HORLINE":this.CreateChartHorizontalLine(hqChart,windowIndex,_item34,i);break;case'MULTI_LINE':this.CreateMultiLine(hqChart,windowIndex,_item34,i);break;case"MULTI_POINT":this.CreateMultiPoint(hqChart,windowIndex,_item34,i);break;case'MULTI_BAR':this.CreateMultiBar(hqChart,windowIndex,_item34,i);break;case'MULTI_TEXT':this.CreateMultiText(hqChart,windowIndex,_item34,i);break;case'MULTI_SVGICON':this.CreateMultiSVGIcon(hqChart,windowIndex,_item34,i);break;case"DRAWSVG":this.CreateChartDrawSVG(hqChart,windowIndex,_item34,i);break;case"MULTI_HTMLDOM":this.CreateMulitHtmlDom(hqChart,windowIndex,_item34,i);break;case"KLINE_BG":this.CreateBackgroud(hqChart,windowIndex,_item34,i);break;case'PARTLINE':this.CreatePartLine(hqChart,windowIndex,_item34,i);break;case"DRAWTEXTABS":case"DRAWTEXTREL":this.CreateDrawText(hqChart,windowIndex,_item34,i);break;case SCRIPT_CHART_NAME.OVERLAY_BARS:this.CreateStackedBar(hqChart,windowIndex,_item34,i);break;default:{var find=g_ScriptIndexChartFactory.Get(_item34.Draw.DrawType);//外部挂接
11336
11336
  if(find&&find.CreateChartCallback)find.CreateChartCallback(hqChart,windowIndex,_item34,i,this);}break;}}else if(_item34.Type==2){this.CreateMACD(hqChart,windowIndex,_item34,i);}else if(_item34.Type==3){this.CreatePointDot(hqChart,windowIndex,_item34,i,hisData);}else if(_item34.Type==4){this.CreateLineStick(hqChart,windowIndex,_item34,i);}else if(_item34.Type==5){this.CreateStick(hqChart,windowIndex,_item34,i);}else if(_item34.Type==6){this.CreateVolStick(hqChart,windowIndex,_item34,i,hisData);}else if(_item34.Type==7){this.CreateLine(hqChart,windowIndex,_item34,i,_item34.Type);}else if(_item34.Type==8){this.CreateLine(hqChart,windowIndex,_item34,i,_item34.Type);}var titleData=titleInfo.Data[i];if(titleData){if(this.FloatPrecision>=0)titleData.FloatPrecision=this.FloatPrecision;}}/*
11337
11337
  hqChart.TitlePaint[titleIndex].Title=this.Name;
11338
11338
 
@@ -11356,7 +11356,8 @@ if(!event||!event.Callback)return;var overlayIndex=this.OverlayIndex;var frame=o
11356
11356
  /////////////////////////////////////////////////////////////////////////////////////
11357
11357
  this.CreateLine=function(hqChart,windowIndex,varItem,id,lineType){var overlayIndex=this.OverlayIndex;var frame=overlayIndex.Frame;if(lineType==7)var chart=new ChartStepLine();else var chart=new ChartLine();chart.Canvas=hqChart.Canvas;chart.DrawType=1;chart.Name=varItem.Name;chart.ChartBorder=frame.Frame.ChartBorder;chart.ChartFrame=frame.Frame;chart.Identify=overlayIndex.Identify;if(varItem.Color)chart.Color=this.GetColor(varItem.Color);else chart.Color=this.GetDefaultColor(id);if(lineType==8){chart.DrawType=2;chart.BreakPoint=varItem.BreakPoint;}if(varItem.LineWidth){var width=parseInt(varItem.LineWidth.replace("LINETHICK",""));if(!isNaN(width)&&width>0)chart.LineWidth=width;}if(varItem.IsShow==false)chart.IsShow=false;chart.Data.Data=varItem.Data;this.ReloadChartResource(hqChart,windowIndex,chart);var titleIndex=windowIndex+1;var titlePaint=hqChart.TitlePaint[titleIndex];var titleData=new DynamicTitleData(chart.Data,varItem.Name,chart.Color);this.SetTitleData(titleData,chart);titlePaint.OverlayIndex.get(overlayIndex.Identify).Data[id]=titleData;this.SetChartIndexName(chart);frame.ChartPaint.push(chart);};//创建柱子
11358
11358
  this.CreateBar=function(hqChart,windowIndex,varItem,id){var overlayIndex=this.OverlayIndex;var frame=overlayIndex.Frame;var chart=new ChartStickLine();chart.Canvas=hqChart.Canvas;if(varItem.Draw.Width>0)chart.Width=varItem.Draw.Width;else chart.Width=1;chart.Name=varItem.Name;chart.ChartBorder=frame.Frame.ChartBorder;chart.ChartFrame=frame.Frame;chart.Identify=overlayIndex.Identify;if(varItem.Color)chart.Color=this.GetColor(varItem.Color);else chart.Color=this.GetDefaultColor(id);var titleIndex=windowIndex+1;chart.Data.Data=varItem.Draw.DrawData;//hqChart.TitlePaint[titleIndex].Data[id]=new DynamicTitleData(bar.Data,varItem.Name,bar.Color);
11359
- this.SetChartIndexName(chart);frame.ChartPaint.push(chart);};//DRAWTEXT
11359
+ this.SetChartIndexName(chart);frame.ChartPaint.push(chart);};this.CreateDrawText=function(hqChart,windowIndex,varItem,id){var overlayIndex=this.OverlayIndex;var frame=overlayIndex.Frame;var chart=new ChartSingleText();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=frame.Frame.ChartBorder;chart.ChartFrame=frame.Frame;chart.Identify=overlayIndex.Identify;chart.ReloadResource();if(varItem.Color)chart.Color=this.GetColor(varItem.Color);else chart.Color=this.GetDefaultColor(id);if(varItem.IsDrawAbove)chart.Direction=1;else chart.Direction=0;chart.DrawData=varItem.Draw.DrawData;if(varItem.DrawFontSize>0)chart.TextFont=varItem.DrawFontSize*GetDevicePixelRatio()+'px \u5FAE\u8F6F\u96C5\u9ED1';//临时用下吧
11360
+ frame.ChartPaint.push(chart);};//DRAWTEXT
11360
11361
  this.CreateDrawTextV2=function(hqChart,windowIndex,varItem,id){var overlayIndex=this.OverlayIndex;var frame=overlayIndex.Frame;var chartText=new ChartDrawText();chartText.Canvas=hqChart.Canvas;chartText.Name=varItem.Name;chartText.ChartBorder=frame.Frame.ChartBorder;chartText.ChartFrame=frame.Frame;chartText.Identify=overlayIndex.Identify;chartText.ReloadResource();if(varItem.Color)chartText.Color=this.GetColor(varItem.Color);else chartText.Color=this.GetDefaultColor(id);if(varItem.IsDrawCenter===true)chartText.TextAlign='center';if(varItem.IsDrawAbove===true)chartText.TextBaseline='bottom';if(varItem.IsDrawBelow===true)chartText.TextBaseline='top';if(varItem.Draw.DrawData)chartText.Data.Data=varItem.Draw.DrawData;chartText.Text=varItem.Draw.Text;if(varItem.Draw.Direction>0)chartText.Direction=varItem.Draw.Direction;if(varItem.Draw.YOffset>0)chartText.YOffset=varItem.Draw.YOffset;if(varItem.Draw.TextAlign)chartText.TextAlign=varItem.Draw.TextAlign;//指定输出位置
11361
11362
  if(varItem.Draw.FixedPosition==="TOP")chartText.FixedPosition=1;else if(varItem.Draw.FixedPosition==="BOTTOM")chartText.FixedPosition=2;if(varItem.DrawVAlign>=0){if(varItem.DrawVAlign==0)chartText.TextBaseline='top';else if(varItem.DrawVAlign==1)chartText.TextBaseline='middle';else if(varItem.DrawVAlign==2)chartText.TextBaseline='bottom';}if(varItem.DrawAlign>=0){if(varItem.DrawAlign==0)chartText.TextAlign="left";else if(varItem.DrawAlign==1)chartText.TextAlign="center";else if(varItem.DrawAlign==2)chartText.TextAlign='right';}if(varItem.DrawFontSize>0)chartText.FixedFontSize=varItem.DrawFontSize;if(varItem.Background)chartText.TextBG=varItem.Background;if(varItem.VerticalLine)chartText.VerticalLine=varItem.VerticalLine;if(IFrameSplitOperator.IsNumber(varItem.XOffset))chartText.ShowOffset.X=varItem.XOffset;if(IFrameSplitOperator.IsNumber(varItem.YOffset))chartText.ShowOffset.Y=varItem.YOffset;//let titleIndex=windowIndex+1;
11362
11363
  frame.ChartPaint.push(chartText);};//创建文本
@@ -12566,7 +12567,7 @@ this.AreaColor=g_JSChartResource.ScrollBar.BGChart.AreaColor;//面积图颜色
12566
12567
  };this.Draw=function(){if(!this.Data||!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data))return;this.Canvas.save();if(this.LineWidth>0)this.Canvas.lineWidth=this.LineWidth*GetDevicePixelRatio();var bottom=this.ChartBorder.GetBottom();this.Canvas.strokeStyle=this.Color;var bFirstPoint=true;var drawCount=0,x,y;var firstPoint={};for(var i=0;i<this.Data.Data.length;++i){var item=this.Data.Data[i];var value=item.Close;if(!IFrameSplitOperator.IsNumber(value))continue;x=this.ChartFrame.GetXFromIndex(i);y=this.ChartFrame.GetYFromData(value);if(bFirstPoint){this.Canvas.beginPath();this.Canvas.moveTo(x,y);bFirstPoint=false;firstPoint={X:x,Y:y};}else{this.Canvas.lineTo(x,y);}++drawCount;}if(drawCount>0){this.Canvas.stroke();this.Canvas.lineTo(x,bottom);this.Canvas.lineTo(firstPoint.X,bottom);this.Canvas.closePath();this.Canvas.fillStyle=this.AreaColor;this.Canvas.fill();}this.Canvas.restore();};this.GetMaxMin=function(){var range={Max:null,Min:null};if(!this.Data||!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data))return range;for(var i=0;i<this.Data.Data.length;++i){var item=this.Data.Data[i];var value=item.Close;if(!IFrameSplitOperator.IsNumber(value))continue;if(range.Max==null||range.Max<value)range.Max=value;if(range.Min==null||range.Min>value)range.Min=value;}return range;};}/********************************************************************************
12567
12568
  * 版本信息输出
12568
12569
  *
12569
- */var HQCHART_VERSION="1.1.12390";function PrintHQChartVersion(){var log='*************************************************************************************************************\n*\n* HQChart Ver: '+HQCHART_VERSION+' \n* \n* License: Apache License 2.0 \n* Source: https://github.com/jones2000/HQChart\n*\n*************************************************************************************************************\n';console.log(log);}PrintHQChartVersion();//把给外界调用的方法暴露出来
12570
+ */var HQCHART_VERSION="1.1.12405";function PrintHQChartVersion(){var log='*************************************************************************************************************\n*\n* HQChart Ver: '+HQCHART_VERSION+' \n* \n* License: Apache License 2.0 \n* Source: https://github.com/jones2000/HQChart\n*\n*************************************************************************************************************\n';console.log(log);}PrintHQChartVersion();//把给外界调用的方法暴露出来
12570
12571
  exports.default=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
12571
12572
  // BaseIndex:BaseIndex,
12572
12573
  // ChartLine:ChartLine,
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "hqchart",
3
3
  "description": "stock chart",
4
4
  "author": "jones2000",
5
- "version": "1.1.12391",
5
+ "version": "1.1.12406",
6
6
  "main": "lib/main.js",
7
7
  "private": false,
8
8
  "license": "Apache License 2.0",
@@ -16042,7 +16042,7 @@ function JSExecute(ast,option)
16042
16042
  ["ISEQUAL",null], ["ISUP",null],["ISDOWN"], //ISUP=收阳 ISEQUAL=平盘 ISDOWN=收阴
16043
16043
 
16044
16044
  //日期类
16045
- ['DATE',null],['YEAR',null],['MONTH',null],['PERIOD', null],['WEEK',null],["TIME",null],["DAY",null],["DATETIME",null],["TIME2",null],
16045
+ ['DATE',null],['YEAR',null],['MONTH',null],['PERIOD', null],['WEEK',null],['WEEKDAY',null],["TIME",null],["DAY",null],["DATETIME",null],["TIME2",null],
16046
16046
  ["WEEKOFYEAR", null],["DAYSTOTODAY", null],
16047
16047
 
16048
16048
  //大盘数据
@@ -16324,6 +16324,7 @@ function JSExecute(ast,option)
16324
16324
  case 'MONTH':
16325
16325
  return this.SymbolData.MONTH();
16326
16326
  case 'WEEK':
16327
+ case "WEEKDAY":
16327
16328
  return this.SymbolData.WEEK();
16328
16329
  case "DAY":
16329
16330
  return this.SymbolData.DAY();
@@ -21057,6 +21058,11 @@ function OverlayScriptIndex(name,script,args,option)
21057
21058
  this.CreatePartLine(hqChart,windowIndex,item,i);
21058
21059
  break;
21059
21060
 
21061
+ case "DRAWTEXTABS":
21062
+ case "DRAWTEXTREL":
21063
+ this.CreateDrawText(hqChart,windowIndex,item,i);
21064
+ break;
21065
+
21060
21066
  case SCRIPT_CHART_NAME.OVERLAY_BARS:
21061
21067
  this.CreateStackedBar(hqChart,windowIndex,item,i);
21062
21068
  break;
@@ -21234,6 +21240,30 @@ function OverlayScriptIndex(name,script,args,option)
21234
21240
  frame.ChartPaint.push(chart);
21235
21241
  }
21236
21242
 
21243
+ this.CreateDrawText=function(hqChart,windowIndex,varItem,id)
21244
+ {
21245
+ var overlayIndex=this.OverlayIndex;
21246
+ var frame=overlayIndex.Frame;
21247
+ var chart=new ChartSingleText();
21248
+ chart.Canvas=hqChart.Canvas;
21249
+ chart.Name=varItem.Name;
21250
+ chart.ChartBorder=frame.Frame.ChartBorder;
21251
+ chart.ChartFrame=frame.Frame;
21252
+ chart.Identify=overlayIndex.Identify;
21253
+ chart.ReloadResource();
21254
+
21255
+ if (varItem.Color) chart.Color=this.GetColor(varItem.Color);
21256
+ else chart.Color=this.GetDefaultColor(id);
21257
+
21258
+ if (varItem.IsDrawAbove) chart.Direction=1;
21259
+ else chart.Direction=0;
21260
+
21261
+ chart.DrawData=varItem.Draw.DrawData;
21262
+ if (varItem.DrawFontSize>0) chart.TextFont=`${varItem.DrawFontSize*GetDevicePixelRatio()}px 微软雅黑`; //临时用下吧
21263
+
21264
+ frame.ChartPaint.push(chart);
21265
+ }
21266
+
21237
21267
  //DRAWTEXT
21238
21268
  this.CreateDrawTextV2=function(hqChart,windowIndex,varItem,id)
21239
21269
  {
@@ -33,7 +33,11 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
33
33
  this.CanvasElement.className='jschart-drawing';
34
34
  this.CanvasElement.id=Guid();
35
35
  this.CanvasElement.setAttribute("tabindex",0);
36
- if (this.CanvasElement.style) this.CanvasElement.style.outline='none';
36
+ if (this.CanvasElement.style)
37
+ {
38
+ this.CanvasElement.style.outline='none';
39
+ this.CanvasElement.style.position="absolute";
40
+ }
37
41
  if(divElement.hasChildNodes())
38
42
  {
39
43
  JSConsole.Chart.Log("[JSChart::JSChart] divElement hasChildNodes", divElement.childNodes);
@@ -80,6 +84,7 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
80
84
  if (option)
81
85
  {
82
86
  if (IFrameSplitOperator.IsNumber(option.TabIndex)) element.setAttribute("tabindex",option.TabIndex);
87
+ if (IFrameSplitOperator.IsNumber(option.ZIndex)) element.style["z-index"]=option.ZIndex;
83
88
  }
84
89
 
85
90
  divElement.appendChild(element);
@@ -5224,8 +5229,6 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
5224
5229
  {
5225
5230
  this.LastMouseStatus.MouseOnToolbar=null; //鼠标在工具栏按钮上
5226
5231
 
5227
- if (this.Frame.ScreenImageData==null && !this.CacheCanvas) return;
5228
-
5229
5232
  var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_BEFORE_DRAW_DYNAMIC_INFO);
5230
5233
  if (event && event.Callback)
5231
5234
  {
@@ -5233,6 +5236,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
5233
5236
  event.Callback(event,sendData,this);
5234
5237
  }
5235
5238
 
5239
+ if (this.Frame.ScreenImageData==null && !this.CacheCanvas) return;
5240
+
5236
5241
  var isErase=false;
5237
5242
  if (this.ChartCorssCursor)
5238
5243
  {
@@ -4113,7 +4113,11 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4113
4113
  this.CanvasElement.className='jschart-drawing';
4114
4114
  this.CanvasElement.id=Guid();
4115
4115
  this.CanvasElement.setAttribute("tabindex",0);
4116
- if (this.CanvasElement.style) this.CanvasElement.style.outline='none';
4116
+ if (this.CanvasElement.style)
4117
+ {
4118
+ this.CanvasElement.style.outline='none';
4119
+ this.CanvasElement.style.position="absolute";
4120
+ }
4117
4121
  if(divElement.hasChildNodes())
4118
4122
  {
4119
4123
  JSConsole.Chart.Log("[JSChart::JSChart] divElement hasChildNodes", divElement.childNodes);
@@ -4160,6 +4164,7 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4160
4164
  if (option)
4161
4165
  {
4162
4166
  if (IFrameSplitOperator.IsNumber(option.TabIndex)) element.setAttribute("tabindex",option.TabIndex);
4167
+ if (IFrameSplitOperator.IsNumber(option.ZIndex)) element.style["z-index"]=option.ZIndex;
4163
4168
  }
4164
4169
 
4165
4170
  divElement.appendChild(element);
@@ -9304,8 +9309,6 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9304
9309
  {
9305
9310
  this.LastMouseStatus.MouseOnToolbar=null; //鼠标在工具栏按钮上
9306
9311
 
9307
- if (this.Frame.ScreenImageData==null && !this.CacheCanvas) return;
9308
-
9309
9312
  var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_BEFORE_DRAW_DYNAMIC_INFO);
9310
9313
  if (event && event.Callback)
9311
9314
  {
@@ -9313,6 +9316,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9313
9316
  event.Callback(event,sendData,this);
9314
9317
  }
9315
9318
 
9319
+ if (this.Frame.ScreenImageData==null && !this.CacheCanvas) return;
9320
+
9316
9321
  var isErase=false;
9317
9322
  if (this.ChartCorssCursor)
9318
9323
  {
@@ -107986,7 +107991,7 @@ function JSExecute(ast,option)
107986
107991
  ["ISEQUAL",null], ["ISUP",null],["ISDOWN"], //ISUP=收阳 ISEQUAL=平盘 ISDOWN=收阴
107987
107992
 
107988
107993
  //日期类
107989
- ['DATE',null],['YEAR',null],['MONTH',null],['PERIOD', null],['WEEK',null],["TIME",null],["DAY",null],["DATETIME",null],["TIME2",null],
107994
+ ['DATE',null],['YEAR',null],['MONTH',null],['PERIOD', null],['WEEK',null],['WEEKDAY',null],["TIME",null],["DAY",null],["DATETIME",null],["TIME2",null],
107990
107995
  ["WEEKOFYEAR", null],["DAYSTOTODAY", null],
107991
107996
 
107992
107997
  //大盘数据
@@ -108268,6 +108273,7 @@ function JSExecute(ast,option)
108268
108273
  case 'MONTH':
108269
108274
  return this.SymbolData.MONTH();
108270
108275
  case 'WEEK':
108276
+ case "WEEKDAY":
108271
108277
  return this.SymbolData.WEEK();
108272
108278
  case "DAY":
108273
108279
  return this.SymbolData.DAY();
@@ -113001,6 +113007,11 @@ function OverlayScriptIndex(name,script,args,option)
113001
113007
  this.CreatePartLine(hqChart,windowIndex,item,i);
113002
113008
  break;
113003
113009
 
113010
+ case "DRAWTEXTABS":
113011
+ case "DRAWTEXTREL":
113012
+ this.CreateDrawText(hqChart,windowIndex,item,i);
113013
+ break;
113014
+
113004
113015
  case SCRIPT_CHART_NAME.OVERLAY_BARS:
113005
113016
  this.CreateStackedBar(hqChart,windowIndex,item,i);
113006
113017
  break;
@@ -113178,6 +113189,30 @@ function OverlayScriptIndex(name,script,args,option)
113178
113189
  frame.ChartPaint.push(chart);
113179
113190
  }
113180
113191
 
113192
+ this.CreateDrawText=function(hqChart,windowIndex,varItem,id)
113193
+ {
113194
+ var overlayIndex=this.OverlayIndex;
113195
+ var frame=overlayIndex.Frame;
113196
+ var chart=new ChartSingleText();
113197
+ chart.Canvas=hqChart.Canvas;
113198
+ chart.Name=varItem.Name;
113199
+ chart.ChartBorder=frame.Frame.ChartBorder;
113200
+ chart.ChartFrame=frame.Frame;
113201
+ chart.Identify=overlayIndex.Identify;
113202
+ chart.ReloadResource();
113203
+
113204
+ if (varItem.Color) chart.Color=this.GetColor(varItem.Color);
113205
+ else chart.Color=this.GetDefaultColor(id);
113206
+
113207
+ if (varItem.IsDrawAbove) chart.Direction=1;
113208
+ else chart.Direction=0;
113209
+
113210
+ chart.DrawData=varItem.Draw.DrawData;
113211
+ if (varItem.DrawFontSize>0) chart.TextFont=`${varItem.DrawFontSize*GetDevicePixelRatio()}px 微软雅黑`; //临时用下吧
113212
+
113213
+ frame.ChartPaint.push(chart);
113214
+ }
113215
+
113181
113216
  //DRAWTEXT
113182
113217
  this.CreateDrawTextV2=function(hqChart,windowIndex,varItem,id)
113183
113218
  {
@@ -127427,7 +127462,7 @@ function ScrollBarBGChart()
127427
127462
 
127428
127463
 
127429
127464
 
127430
- var HQCHART_VERSION="1.1.12390";
127465
+ var HQCHART_VERSION="1.1.12405";
127431
127466
 
127432
127467
  function PrintHQChartVersion()
127433
127468
  {
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.12390";
8
+ var HQCHART_VERSION="1.1.12405";
9
9
 
10
10
  function PrintHQChartVersion()
11
11
  {
@@ -4157,7 +4157,11 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4157
4157
  this.CanvasElement.className='jschart-drawing';
4158
4158
  this.CanvasElement.id=Guid();
4159
4159
  this.CanvasElement.setAttribute("tabindex",0);
4160
- if (this.CanvasElement.style) this.CanvasElement.style.outline='none';
4160
+ if (this.CanvasElement.style)
4161
+ {
4162
+ this.CanvasElement.style.outline='none';
4163
+ this.CanvasElement.style.position="absolute";
4164
+ }
4161
4165
  if(divElement.hasChildNodes())
4162
4166
  {
4163
4167
  JSConsole.Chart.Log("[JSChart::JSChart] divElement hasChildNodes", divElement.childNodes);
@@ -4204,6 +4208,7 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4204
4208
  if (option)
4205
4209
  {
4206
4210
  if (IFrameSplitOperator.IsNumber(option.TabIndex)) element.setAttribute("tabindex",option.TabIndex);
4211
+ if (IFrameSplitOperator.IsNumber(option.ZIndex)) element.style["z-index"]=option.ZIndex;
4207
4212
  }
4208
4213
 
4209
4214
  divElement.appendChild(element);
@@ -9348,8 +9353,6 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9348
9353
  {
9349
9354
  this.LastMouseStatus.MouseOnToolbar=null; //鼠标在工具栏按钮上
9350
9355
 
9351
- if (this.Frame.ScreenImageData==null && !this.CacheCanvas) return;
9352
-
9353
9356
  var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_BEFORE_DRAW_DYNAMIC_INFO);
9354
9357
  if (event && event.Callback)
9355
9358
  {
@@ -9357,6 +9360,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9357
9360
  event.Callback(event,sendData,this);
9358
9361
  }
9359
9362
 
9363
+ if (this.Frame.ScreenImageData==null && !this.CacheCanvas) return;
9364
+
9360
9365
  var isErase=false;
9361
9366
  if (this.ChartCorssCursor)
9362
9367
  {
@@ -108030,7 +108035,7 @@ function JSExecute(ast,option)
108030
108035
  ["ISEQUAL",null], ["ISUP",null],["ISDOWN"], //ISUP=收阳 ISEQUAL=平盘 ISDOWN=收阴
108031
108036
 
108032
108037
  //日期类
108033
- ['DATE',null],['YEAR',null],['MONTH',null],['PERIOD', null],['WEEK',null],["TIME",null],["DAY",null],["DATETIME",null],["TIME2",null],
108038
+ ['DATE',null],['YEAR',null],['MONTH',null],['PERIOD', null],['WEEK',null],['WEEKDAY',null],["TIME",null],["DAY",null],["DATETIME",null],["TIME2",null],
108034
108039
  ["WEEKOFYEAR", null],["DAYSTOTODAY", null],
108035
108040
 
108036
108041
  //大盘数据
@@ -108312,6 +108317,7 @@ function JSExecute(ast,option)
108312
108317
  case 'MONTH':
108313
108318
  return this.SymbolData.MONTH();
108314
108319
  case 'WEEK':
108320
+ case "WEEKDAY":
108315
108321
  return this.SymbolData.WEEK();
108316
108322
  case "DAY":
108317
108323
  return this.SymbolData.DAY();
@@ -113045,6 +113051,11 @@ function OverlayScriptIndex(name,script,args,option)
113045
113051
  this.CreatePartLine(hqChart,windowIndex,item,i);
113046
113052
  break;
113047
113053
 
113054
+ case "DRAWTEXTABS":
113055
+ case "DRAWTEXTREL":
113056
+ this.CreateDrawText(hqChart,windowIndex,item,i);
113057
+ break;
113058
+
113048
113059
  case SCRIPT_CHART_NAME.OVERLAY_BARS:
113049
113060
  this.CreateStackedBar(hqChart,windowIndex,item,i);
113050
113061
  break;
@@ -113222,6 +113233,30 @@ function OverlayScriptIndex(name,script,args,option)
113222
113233
  frame.ChartPaint.push(chart);
113223
113234
  }
113224
113235
 
113236
+ this.CreateDrawText=function(hqChart,windowIndex,varItem,id)
113237
+ {
113238
+ var overlayIndex=this.OverlayIndex;
113239
+ var frame=overlayIndex.Frame;
113240
+ var chart=new ChartSingleText();
113241
+ chart.Canvas=hqChart.Canvas;
113242
+ chart.Name=varItem.Name;
113243
+ chart.ChartBorder=frame.Frame.ChartBorder;
113244
+ chart.ChartFrame=frame.Frame;
113245
+ chart.Identify=overlayIndex.Identify;
113246
+ chart.ReloadResource();
113247
+
113248
+ if (varItem.Color) chart.Color=this.GetColor(varItem.Color);
113249
+ else chart.Color=this.GetDefaultColor(id);
113250
+
113251
+ if (varItem.IsDrawAbove) chart.Direction=1;
113252
+ else chart.Direction=0;
113253
+
113254
+ chart.DrawData=varItem.Draw.DrawData;
113255
+ if (varItem.DrawFontSize>0) chart.TextFont=`${varItem.DrawFontSize*GetDevicePixelRatio()}px 微软雅黑`; //临时用下吧
113256
+
113257
+ frame.ChartPaint.push(chart);
113258
+ }
113259
+
113225
113260
  //DRAWTEXT
113226
113261
  this.CreateDrawTextV2=function(hqChart,windowIndex,varItem,id)
113227
113262
  {
@@ -127471,7 +127506,7 @@ function ScrollBarBGChart()
127471
127506
 
127472
127507
 
127473
127508
 
127474
- var HQCHART_VERSION="1.1.12390";
127509
+ var HQCHART_VERSION="1.1.12405";
127475
127510
 
127476
127511
  function PrintHQChartVersion()
127477
127512
  {
@@ -105,6 +105,7 @@ function IChartPainting()
105
105
 
106
106
  this.IsDrawFirst = false; //是否比K线先画
107
107
  this.IsShow = true; //是否显示
108
+ this.IsVisible=true; //是否显示 (预留给外部单独设置线段显隐)
108
109
  this.GetEventCallback;
109
110
 
110
111
  this.Draw = function () { }
@@ -3301,7 +3302,7 @@ function ChartLine()
3301
3302
 
3302
3303
  this.Draw = function ()
3303
3304
  {
3304
- if (!this.IsShow || this.ChartFrame.IsMinSize) return;
3305
+ if (!this.IsShow || this.ChartFrame.IsMinSize || !this.IsVisible) return;
3305
3306
  if (this.NotSupportMessage)
3306
3307
  {
3307
3308
  this.DrawNotSupportmessage();
@@ -5934,7 +5935,7 @@ function ChartMACD()
5934
5935
 
5935
5936
  this.Draw = function ()
5936
5937
  {
5937
- if (this.ChartFrame.IsMinSize) return;
5938
+ if (this.ChartFrame.IsMinSize || !this.IsVisible) return;
5938
5939
  if (this.NotSupportMessage)
5939
5940
  {
5940
5941
  this.DrawNotSupportmessage();
@@ -7008,7 +7009,7 @@ function ChartVolStick()
7008
7009
 
7009
7010
  this.Draw = function ()
7010
7011
  {
7011
- if (this.ChartFrame.IsMinSize) return;
7012
+ if (!this.IsShow || this.ChartFrame.IsMinSize || !this.IsVisible) return;
7012
7013
  if (this.ChartFrame.IsHScreen === true)
7013
7014
  {
7014
7015
  this.HScreenDraw();
@@ -2065,6 +2065,9 @@ var JSCHART_EVENT_ID =
2065
2065
  ON_CHANGE_KLINE_PERIOD:101, //切换周期
2066
2066
  ON_MINUTE_TOUCH_ZOOM:102, //分时图手势缩放
2067
2067
 
2068
+ ON_RELOAD_INDEX_CHART_RESOURCE:103, //加载指标图形额外资源
2069
+ ON_RELOAD_OVERLAY_INDEX_CHART_RESOURCE:104, //加载叠加指标图形额外资源
2070
+
2068
2071
  ON_CREATE_FRAME:105,
2069
2072
  ON_DELETE_FRAME:106,
2070
2073
  ON_SIZE_FRAME:107,
@@ -156,7 +156,12 @@ JSIndexScript.prototype.Get=function(id)
156
156
  if (data) return data;
157
157
 
158
158
  var func=this.DataMap.get(id);
159
- if (func) return func();
159
+ if (func)
160
+ {
161
+ var data=func();
162
+ data.ID=id;
163
+ return data;
164
+ }
160
165
 
161
166
  console.log(`[JSIndexScript::Get] can't find index by id=${id}`);
162
167
  return null;
@@ -3173,8 +3178,16 @@ JSIndexScript.prototype.TEST = function ()
3173
3178
  "DRAWBAND(OPEN,RGB(0,224,224),CLOSE,RGB(255,96,96));"
3174
3179
  //"T2:IF(KDJ.J>-10,KDJ.J#WEEK,0);"
3175
3180
  */
3176
- Script:
3177
- "T:EXCHANGE;"
3181
+ Script:"VOL:VOL,VOLSTICK, UPCOLOR(RGBA(255,0,0,0.3)), DOWNCOLOR(RGBA(0,255,0,0.3));"
3182
+
3183
+ //"DRAWGBK_DIV(C>O,RGB(221 ,160 ,221),RGB(100 ,250, 250),1,1);"
3184
+ /*
3185
+ 'TEXT:IF(PERIOD=5,"","不支持");\n'+
3186
+ 'DRAWTEXTREL(500,500,TEXT),FONTSIZE20;\n'+
3187
+ 'TESTSKIP(PERIOD!=5);\n'+
3188
+ 'T:C;\n'+
3189
+ 'T2:O;\n'
3190
+ */
3178
3191
  };
3179
3192
 
3180
3193
  return data;
@@ -352,6 +352,34 @@ function ScriptIndex(name, script, args, option)
352
352
  }
353
353
  }
354
354
 
355
+ //给图形设置指标名字
356
+ this.SetChartIndexName=function(chart)
357
+ {
358
+ if (this.Name) chart.IndexName=this.Name;
359
+ else if (this.ID) chart.IndexName==this.ID;
360
+
361
+ if (this.ID) chart.IndexID=this.ID;
362
+
363
+ chart.Script=this; //指标内容绑定上去
364
+ }
365
+
366
+ //设置标题数据
367
+ this.SetTitleData=function(titleData, chart)
368
+ {
369
+ titleData.ChartClassName=chart.ClassName;
370
+ titleData.IsVisible=chart.IsVisible;
371
+ }
372
+
373
+ //自定义图形配色
374
+ this.ReloadChartResource=function(hqChart, windowIndex, chart)
375
+ {
376
+ var event=hqChart.GetEventCallback(JSCHART_EVENT_ID.ON_RELOAD_INDEX_CHART_RESOURCE); //指标计算完成回调
377
+ if (!event || !event.Callback) return;
378
+
379
+ var sendData={ Chart:chart, IndexName:this.Name,IndexID:this.ID, HQChart:hqChart, WindowIndex:windowIndex };
380
+ event.Callback(event,sendData,this);
381
+ }
382
+
355
383
  this.CreateLine = function (hqChart, windowIndex, varItem, id, lineType)
356
384
  {
357
385
  if (lineType==7) var line=new ChartStepLine();
@@ -375,6 +403,9 @@ function ScriptIndex(name, script, args, option)
375
403
 
376
404
  let titleIndex = windowIndex + 1;
377
405
  line.Data.Data = varItem.Data;
406
+
407
+ this.ReloadChartResource(hqChart,windowIndex,line);
408
+
378
409
  if (varItem.IsShowTitle===false) //NOTEXT 不绘制标题
379
410
  {
380
411
  }
@@ -383,10 +414,12 @@ function ScriptIndex(name, script, args, option)
383
414
  }
384
415
  else
385
416
  {
386
- hqChart.TitlePaint[titleIndex].Data[id] = new DynamicTitleData(line.Data, (varItem.NoneName==true? null: varItem.Name) , line.Color);
387
- hqChart.TitlePaint[titleIndex].Data[id].ChartClassName=line.ClassName;
417
+ var titleData=new DynamicTitleData(line.Data, (varItem.NoneName==true? null: varItem.Name) , line.Color);
418
+ hqChart.TitlePaint[titleIndex].Data[id] = titleData;
419
+ this.SetTitleData(titleData,line);
388
420
  }
389
-
421
+
422
+ this.SetChartIndexName(line);
390
423
  hqChart.ChartPaint.push(line);
391
424
  }
392
425
 
@@ -659,8 +692,11 @@ function ScriptIndex(name, script, args, option)
659
692
  if (varItem.UpColor) chartMACD.UpColor=varItem.UpColor;
660
693
  if (varItem.DownColor) chartMACD.DownColor=varItem.DownColor;
661
694
 
695
+ this.ReloadChartResource(hqChart,windowIndex,chartMACD);
696
+
662
697
  hqChart.TitlePaint[titleIndex].Data[id] = new DynamicTitleData(chartMACD.Data, varItem.Name, clrTitle);
663
698
 
699
+ this.SetChartIndexName(chartMACD);
664
700
  hqChart.ChartPaint.push(chartMACD);
665
701
  }
666
702
 
@@ -695,26 +731,31 @@ function ScriptIndex(name, script, args, option)
695
731
  hqChart.ChartPaint.push(pointDot);
696
732
  }
697
733
 
698
- this.CreateStick = function (hqChart, windowIndex, varItem, id) {
699
- let chart = new ChartStick();
700
- chart.Canvas = hqChart.Canvas;
701
- chart.Name = varItem.Name;
702
- chart.ChartBorder = hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;
703
- chart.ChartFrame = hqChart.Frame.SubFrame[windowIndex].Frame;
704
- if (varItem.Color) chart.Color = this.GetColor(varItem.Color);
705
- else chart.Color = this.GetDefaultColor(id);
734
+ this.CreateStick = function (hqChart, windowIndex, varItem, id)
735
+ {
736
+ let chart = new ChartStick();
737
+ chart.Canvas = hqChart.Canvas;
738
+ chart.Name = varItem.Name;
739
+ chart.ChartBorder = hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;
740
+ chart.ChartFrame = hqChart.Frame.SubFrame[windowIndex].Frame;
741
+ if (varItem.Color) chart.Color = this.GetColor(varItem.Color);
742
+ else chart.Color = this.GetDefaultColor(id);
706
743
 
707
- if (varItem.LineWidth) {
708
- let width = parseInt(varItem.LineWidth.replace("LINETHICK", ""));
709
- if (!isNaN(width) && width > 0) chart.LineWidth = width;
710
- }
744
+ if (varItem.LineWidth)
745
+ {
746
+ let width = parseInt(varItem.LineWidth.replace("LINETHICK", ""));
747
+ if (!isNaN(width) && width > 0) chart.LineWidth = width;
748
+ }
711
749
 
712
- let titleIndex = windowIndex + 1;
713
- chart.Data.Data = varItem.Data;
714
- hqChart.TitlePaint[titleIndex].Data[id] = new DynamicTitleData(chart.Data, varItem.Name, chart.Color);
750
+ let titleIndex = windowIndex + 1;
751
+ chart.Data.Data = varItem.Data;
752
+ this.ReloadChartResource(hqChart,windowIndex,chart);
715
753
 
716
- hqChart.ChartPaint.push(chart);
717
- }
754
+ hqChart.TitlePaint[titleIndex].Data[id] = new DynamicTitleData(chart.Data, varItem.Name, chart.Color);
755
+
756
+ this.SetChartIndexName(chart);
757
+ hqChart.ChartPaint.push(chart);
758
+ }
718
759
 
719
760
  this.CreateLineStick = function (hqChart, windowIndex, varItem, id) {
720
761
  let chart = new ChartLineStick();
@@ -759,26 +800,32 @@ function ScriptIndex(name, script, args, option)
759
800
  hqChart.ChartPaint.push(line);
760
801
  }
761
802
 
762
- this.CreateVolStick = function (hqChart, windowIndex, varItem, id, hisData) {
763
- let chart = new ChartVolStick();
764
- chart.Canvas = hqChart.Canvas;
765
- chart.Name = varItem.Name;
766
- chart.ChartBorder = hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;
767
- chart.ChartFrame = hqChart.Frame.SubFrame[windowIndex].Frame;
768
- chart.KLineDrawType = hqChart.KLineDrawType; //设置K线显示类型
769
- if (varItem.Color) chart.Color = this.GetColor(varItem.Color);
770
- else chart.Color = this.GetDefaultColor(id);
803
+ this.CreateVolStick = function (hqChart, windowIndex, varItem, id, hisData)
804
+ {
805
+ let chart = new ChartVolStick();
806
+ chart.Canvas = hqChart.Canvas;
807
+ chart.Name = varItem.Name;
808
+ chart.ChartBorder = hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;
809
+ chart.ChartFrame = hqChart.Frame.SubFrame[windowIndex].Frame;
810
+ chart.KLineDrawType = hqChart.KLineDrawType; //设置K线显示类型
811
+ if (varItem.Color) chart.Color = this.GetColor(varItem.Color);
812
+ else chart.Color = this.GetDefaultColor(id);
771
813
 
772
- if (varItem.UpColor) chart.UpColor=varItem.UpColor;
773
- if (varItem.DownColor) chart.DownColor=varItem.DownColor;
814
+ if (varItem.UpColor) chart.UpColor=varItem.UpColor;
815
+ if (varItem.DownColor) chart.DownColor=varItem.DownColor;
774
816
 
775
- let titleIndex = windowIndex + 1;
776
- chart.Data.Data = varItem.Data;
777
- chart.HistoryData = hisData;
778
- hqChart.TitlePaint[titleIndex].Data[id] = new DynamicTitleData(chart.Data, varItem.Name, chart.Color);
817
+ let titleIndex = windowIndex + 1;
818
+ chart.Data.Data = varItem.Data;
819
+ chart.HistoryData = hisData;
820
+ this.ReloadChartResource(hqChart,windowIndex,chart);
779
821
 
780
- hqChart.ChartPaint.push(chart);
781
- }
822
+ var titleData=new DynamicTitleData(chart.Data, varItem.Name, chart.Color);
823
+ hqChart.TitlePaint[titleIndex].Data[id] = titleData;
824
+ this.SetTitleData(titleData,chart);
825
+
826
+ this.SetChartIndexName(chart);
827
+ hqChart.ChartPaint.push(chart);
828
+ }
782
829
 
783
830
  this.CreateBand = function (hqChart, windowIndex, varItem, id) {
784
831
  let chart = new ChartBand();
@@ -1658,6 +1705,20 @@ function OverlayScriptIndex(name,script,args,option)
1658
1705
  }
1659
1706
  }
1660
1707
 
1708
+ //自定义图形配色
1709
+ this.ReloadChartResource=function(hqChart, windowIndex, chart)
1710
+ {
1711
+ var event=hqChart.GetEventCallback(JSCHART_EVENT_ID.ON_RELOAD_OVERLAY_INDEX_CHART_RESOURCE); //指标计算完成回调
1712
+ if (!event || !event.Callback) return;
1713
+
1714
+ var overlayIndex=this.OverlayIndex;
1715
+ var frame=overlayIndex.Frame;
1716
+ var script=frame.Script;
1717
+
1718
+ var sendData={ Chart:chart, IndexName:script.Name,IndexID:script.ID, HQChart:hqChart, WindowIndex:windowIndex, Guid:overlayIndex.Identify };
1719
+ event.Callback(event,sendData,this);
1720
+ }
1721
+
1661
1722
  //////////////////////////////////////////////////////////////////////////////////////
1662
1723
  // 图形创建
1663
1724
  /////////////////////////////////////////////////////////////////////////////////////
@@ -1689,12 +1750,15 @@ function OverlayScriptIndex(name,script,args,option)
1689
1750
  }
1690
1751
 
1691
1752
  if (varItem.IsShow==false) chart.IsShow=false;
1692
-
1693
- let titleIndex=windowIndex+1;
1753
+
1694
1754
  chart.Data.Data=varItem.Data;
1755
+ this.ReloadChartResource(hqChart, windowIndex, chart);
1756
+
1757
+ let titleIndex=windowIndex+1;
1695
1758
  var titlePaint=hqChart.TitlePaint[titleIndex];
1696
1759
  var titleData=new DynamicTitleData(chart.Data,varItem.Name,chart.Color);
1697
- titleData.ChartClassName=chart.ClassName;
1760
+ this.SetTitleData(titleData,chart);
1761
+
1698
1762
  titlePaint.OverlayIndex.get(overlayIndex.Identify).Data[id]=titleData;
1699
1763
 
1700
1764
  this.SetChartIndexName(chart);
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.12334";
8
+ var HQCHART_VERSION="1.1.12402";
9
9
 
10
10
  function PrintHQChartVersion()
11
11
  {
@@ -3243,6 +3243,36 @@ function JSChartContainer(uielement)
3243
3243
 
3244
3244
  return true;
3245
3245
  }
3246
+
3247
+ //获取扩展画法
3248
+ this.GetExtendChartByClassName=function(name)
3249
+ {
3250
+ for(var i=0; i<this.ExtendChartPaint.length; ++i)
3251
+ {
3252
+ var item=this.ExtendChartPaint[i];
3253
+ if (item.ClassName==name) return { Index:i, Chart:item };
3254
+ }
3255
+
3256
+ return null
3257
+ }
3258
+
3259
+ //获取多个扩展画法
3260
+ this.GetExtendChartByClassNameV2=function(name)
3261
+ {
3262
+ var aryChart=[];
3263
+ for(var i=0; i<this.ExtendChartPaint.length; ++i)
3264
+ {
3265
+ var item=this.ExtendChartPaint[i];
3266
+ if (item.ClassName==name)
3267
+ {
3268
+ aryChart.push({ Index:i, Chart:item });
3269
+ }
3270
+ }
3271
+
3272
+ if (aryChart.length<=0) return null;
3273
+
3274
+ return aryChart;
3275
+ }
3246
3276
  }
3247
3277
 
3248
3278
  function ToFixed(number, precision)