hqchart 1.1.13445 → 1.1.13455

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.
@@ -1440,7 +1440,8 @@ ON_CLICK_TREPORT_ROW:127,//左键点击点击T型报价列表
1440
1440
  ON_CHANGE_INDEX:150,//切换指标
1441
1441
  ON_MENU_COMMAND:151,//菜单事件回调
1442
1442
  ON_CREATE_RIGHT_MENU:152,//创建右键菜单
1443
- ON_FORMAT_CALL_AUCTION_INDEX_TITLE:153//集合竞价指标窗口标题内容
1443
+ ON_FORMAT_CALL_AUCTION_INDEX_TITLE:153,//集合竞价指标窗口标题内容
1444
+ ON_FORMAT_KLINE_HIGH_LOW_TITLE:154//K线最高最低价格式化内容
1444
1445
  };var JSCHART_OPERATOR_ID={OP_SCROLL_LEFT:1,//往左移动
1445
1446
  OP_SCROLL_RIGHT:2,//往右移动
1446
1447
  OP_ZOOM_OUT:3,//缩小
@@ -3433,9 +3434,16 @@ this.DrawKRange={Start:null,End:null};this.AryPriceGapCache=[];this.ChartFrame.C
3433
3434
  this.DrawHeatMap();if(!this.IsShow)return;if(this.ChartFrame.IsMinSize&&this.Name=="Self Kline")return;if(ChartData.IsTickPeriod(this.Period))//分笔图
3434
3435
  {this.Canvas.save();if(this.DrawType==1){this.ClipClient(this.ChartFrame.IsHScreen);this.DrawCloseLine();}else if(this.DrawType==4){this.ClipClient(this.ChartFrame.IsHScreen);this.DrawCloseArea();}else{this.ClipTickClient(this.ChartFrame.IsHScreen);this.DrawTick();}this.Canvas.restore();return;}this.Canvas.save();this.ClipClient(this.ChartFrame.IsHScreen);if(this.DrawType==1){this.DrawCloseLine();this.Canvas.restore();if(this.PriceGap.Enable)this.DrawPriceGap();return;}else if(this.DrawType==2){this.DrawAKLine();}else if(this.DrawType==4){this.DrawCloseArea();}else if(this.DrawType==5){this.DrawOrderFlow();}else if(this.DrawType==7){this.DrawOrderFlow_Style2();}else if(this.DrawType==8){this.DrawOrderFlow_Style3();}else if(this.DrawType==9){this.DrawKBar();}else if(this.DrawType==10){this.DrawRenkoCandle();}else if(this.DrawType==12){this.DrawLineBreak();}else if(this.DrawType==13){this.DrawHighLow();}else if(this.DrawType==14){if(this.FFKChart&&this.FFKChart.Draw){this.FFKChart.Draw(this);}}else if(this.DrawType==15){this.DrawHLCArea();}else if(this.DrawType==16){this.DrawKagi();}else if(this.DrawType==17){this.DrawOrderFlow_Style4();}else if(this.DrawType==18){this.DrawOrderFlow_Style5();}else{this.DrawKBar();}if(this.TradeIcon)this.DrawTradeIcon();else this.DrawTrade();this.Canvas.restore();if(this.PriceGap.Enable)this.DrawPriceGap();if(this.IsShowMaxMinPrice)//标注最大值最小值
3435
3436
  {if(this.ChartFrame.IsHScreen===true)this.HScreenDrawMaxMinPrice(this.PtMax,this.PtMin);else this.DrawMaxMinPrice(this.PtMax,this.PtMin);}if(this.DrawType==14)//自定义图形 标注最大最小值
3436
- {if(this.FFKChart&&this.FFKChart.DrawMaxMinPrice){this.FFKChart.DrawMaxMinPrice();}}};this.DrawMaxMinPrice=function(ptMax,ptMin){if(ptMax.X==null||ptMax.Y==null||ptMax.Value==null)return;if(ptMin.X==null||ptMin.Y==null||ptMin.Value==null)return;var leftArrow=g_JSChartResource.KLine.MaxMin.LeftArrow;var rightArrow=g_JSChartResource.KLine.MaxMin.RightArrow;var highYOffset=g_JSChartResource.KLine.MaxMin.HighYOffset;var lowYOffset=g_JSChartResource.KLine.MaxMin.LowYOffset;var defaultfloatPrecision=GetfloatPrecision(this.Symbol);this.Canvas.font=this.TextFont;this.Canvas.fillStyle=this.TextColor;var top=this.ChartBorder.GetTopEx();var bottom=this.ChartBorder.GetBottomEx();var ptTop=ptMax;if(this.ChartFrame.CoordinateType==1)//反转坐标
3437
- {if(ptMax.Y<ptMin.Y)ptTop=ptMin;this.Canvas.textBaseline='top';}else{if(ptMax.Y>ptMin.Y)ptTop=ptMin;this.Canvas.textBaseline='bottom';}this.Canvas.textAlign=ptTop.Align;var left=ptTop.Align=='left'?ptTop.X:ptTop.X;if(IFrameSplitOperator.IsNumber(highYOffset))ptTop.Y+=highYOffset;var text=ptTop.Value.toFixed(defaultfloatPrecision);if(ptTop.Align=='left')text=leftArrow+text;else text=text+rightArrow;if(ptTop.Y>top-2){this.Canvas.fillText(text,left,ptTop.Y);this.ChartFrame.ChartKLine.Max={X:left,Y:ptTop.Y,Text:{BaseLine:'bottom'}};}var ptBottom=ptMin;if(this.ChartFrame.CoordinateType==1){if(ptMin.Y>ptMax.Y)ptBottom=ptMax;this.Canvas.textBaseline='bottom';}else{if(ptMax.Y>ptMin.Y)ptTop=ptMin;this.Canvas.textBaseline='top';}this.Canvas.textAlign=ptBottom.Align;var left=ptBottom.Align=='left'?ptBottom.X:ptBottom.X;if(IFrameSplitOperator.IsNumber(lowYOffset))ptBottom.Y+=lowYOffset;var text=ptMin.Value.toFixed(defaultfloatPrecision);if(ptBottom.Align=='left')text=leftArrow+text;else text=text+rightArrow;if(ptBottom.Y<bottom+1){this.Canvas.fillText(text,left,ptBottom.Y);this.ChartFrame.ChartKLine.Min={X:left,Y:ptBottom.Y,Text:{BaseLine:'top'}};}};this.HScreenDrawMaxMinPrice=function(ptMax,ptMin)//横屏模式下显示最大最小值
3438
- {if(ptMax.X==null||ptMax.Y==null||ptMax.Value==null)return;if(ptMin.X==null||ptMin.Y==null||ptMin.Value==null)return;var leftArrow=g_JSChartResource.KLine.MaxMin.LeftArrow;var rightArrow=g_JSChartResource.KLine.MaxMin.RightArrow;var highYOffset=g_JSChartResource.KLine.MaxMin.HighYOffset;var lowYOffset=g_JSChartResource.KLine.MaxMin.LowYOffset;var defaultfloatPrecision=GetfloatPrecision(this.Symbol);var xText=ptMax.Y;var yText=ptMax.X;if(IFrameSplitOperator.IsNumber(highYOffset))xText+=highYOffset;this.Canvas.save();this.Canvas.translate(xText,yText);this.Canvas.rotate(90*Math.PI/180);this.Canvas.font=this.TextFont;this.Canvas.fillStyle=this.TextColor;this.Canvas.textAlign=ptMax.Align;this.Canvas.textBaseline='bottom';var text=ptMax.Value.toFixed(defaultfloatPrecision);if(ptMax.Align=='left')text=leftArrow+text;else text=text+rightArrow;this.Canvas.fillText(text,0,0);this.Canvas.restore();var xText=ptMin.Y;var yText=ptMin.X;if(IFrameSplitOperator.IsNumber(lowYOffset))xText+=lowYOffset;this.Canvas.save();this.Canvas.translate(xText,yText);this.Canvas.rotate(90*Math.PI/180);this.Canvas.font=this.TextFont;this.Canvas.fillStyle=this.TextColor;this.Canvas.textAlign=ptMin.Align;this.Canvas.textBaseline='top';var text=ptMin.Value.toFixed(defaultfloatPrecision);if(ptMin.Align=='left')text=leftArrow+text;else text=text+rightArrow;this.Canvas.fillText(text,0,0);this.Canvas.restore();};//画某一天的信息地雷
3437
+ {if(this.FFKChart&&this.FFKChart.DrawMaxMinPrice){this.FFKChart.DrawMaxMinPrice();}}};this.OnFormatHighLowTitle=function(ptMax,ptMin){if(!ptMax||!ptMin)return null;if(!IFrameSplitOperator.IsNumber(ptMax.Value)||!IFrameSplitOperator.IsNumber(ptMin.Value))return null;var defaultfloatPrecision=GetfloatPrecision(this.Symbol);//小数位数
3438
+ var title={High:ptMax.Value.toFixed(defaultfloatPrecision),Low:ptMin.Value.toFixed(defaultfloatPrecision)};if(!this.GetEventCallback)return title;var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_FORMAT_KLINE_HIGH_LOW_TITLE);if(!event||!event.Callback)return title;var data={Max:ptMax,Min:ptMin,Symbol:this.Symbol,Title:{High:title.High,Low:title.Low},Decimal:defaultfloatPrecision,PreventDefault:false};event.Callback(event,data,this);if(data.PreventDefault)return data.Title;//使用外部回调的数值
3439
+ return title;};this.DrawMaxMinPrice=function(ptMax,ptMin){if(ptMax.X==null||ptMax.Y==null||ptMax.Value==null)return;if(ptMin.X==null||ptMin.Y==null||ptMin.Value==null)return;var title=this.OnFormatHighLowTitle(ptMax,ptMin);if(!title)return;var leftArrow=g_JSChartResource.KLine.MaxMin.LeftArrow;var rightArrow=g_JSChartResource.KLine.MaxMin.RightArrow;var highYOffset=g_JSChartResource.KLine.MaxMin.HighYOffset;var lowYOffset=g_JSChartResource.KLine.MaxMin.LowYOffset;var defaultfloatPrecision=GetfloatPrecision(this.Symbol);this.Canvas.font=this.TextFont;var top=this.ChartBorder.GetTopEx();var bottom=this.ChartBorder.GetBottomEx();var ptTop=ptMax;var text=title.High;var textColor=this.TextColor;if(this.ChartFrame.CoordinateType==1)//反转坐标
3440
+ {if(ptMax.Y<ptMin.Y)ptTop=ptMin;this.Canvas.textBaseline='top';var text=title.Low;if(title.LowColor)textColor=title.LowColor;}else{if(ptMax.Y>ptMin.Y)ptTop=ptMin;this.Canvas.textBaseline='bottom';if(title.HighColor)textColor=title.HighColor;}this.Canvas.fillStyle=textColor;this.Canvas.textAlign=ptTop.Align;var left=ptTop.Align=='left'?ptTop.X:ptTop.X;if(IFrameSplitOperator.IsNumber(highYOffset))ptTop.Y+=highYOffset;//var text=ptTop.Value.toFixed(defaultfloatPrecision);
3441
+ if(ptTop.Align=='left')text=leftArrow+text;else text=text+rightArrow;if(ptTop.Y>top-2){this.Canvas.fillText(text,left,ptTop.Y);this.ChartFrame.ChartKLine.Max={X:left,Y:ptTop.Y,Text:{BaseLine:'bottom'}};}var ptBottom=ptMin;var text=title.Low;var textColor=this.TextColor;if(this.ChartFrame.CoordinateType==1){if(ptMin.Y>ptMax.Y)ptBottom=ptMax;this.Canvas.textBaseline='bottom';var text=title.High;if(title.HighColor)textColor=title.HighColor;}else{if(ptMax.Y>ptMin.Y)ptTop=ptMin;this.Canvas.textBaseline='top';if(title.LowColor)textColor=title.LowColor;}this.Canvas.fillStyle=textColor;this.Canvas.textAlign=ptBottom.Align;var left=ptBottom.Align=='left'?ptBottom.X:ptBottom.X;if(IFrameSplitOperator.IsNumber(lowYOffset))ptBottom.Y+=lowYOffset;//var text=ptMin.Value.toFixed(defaultfloatPrecision);
3442
+ if(ptBottom.Align=='left')text=leftArrow+text;else text=text+rightArrow;if(ptBottom.Y<bottom+1){this.Canvas.fillText(text,left,ptBottom.Y);this.ChartFrame.ChartKLine.Min={X:left,Y:ptBottom.Y,Text:{BaseLine:'top'}};}};this.HScreenDrawMaxMinPrice=function(ptMax,ptMin)//横屏模式下显示最大最小值
3443
+ {if(ptMax.X==null||ptMax.Y==null||ptMax.Value==null)return;if(ptMin.X==null||ptMin.Y==null||ptMin.Value==null)return;var title=this.OnFormatHighLowTitle(ptMax,ptMin);if(!title)return;var leftArrow=g_JSChartResource.KLine.MaxMin.LeftArrow;var rightArrow=g_JSChartResource.KLine.MaxMin.RightArrow;var highYOffset=g_JSChartResource.KLine.MaxMin.HighYOffset;var lowYOffset=g_JSChartResource.KLine.MaxMin.LowYOffset;//var defaultfloatPrecision=GetfloatPrecision(this.Symbol);
3444
+ var xText=ptMax.Y;var yText=ptMax.X;if(IFrameSplitOperator.IsNumber(highYOffset))xText+=highYOffset;this.Canvas.save();this.Canvas.translate(xText,yText);this.Canvas.rotate(90*Math.PI/180);var text=title.High;this.Canvas.font=this.TextFont;if(title.HighColor)this.Canvas.fillStyle=title.HighColor;else this.Canvas.fillStyle=this.TextColor;this.Canvas.textAlign=ptMax.Align;this.Canvas.textBaseline='bottom';//var text=ptMax.Value.toFixed(defaultfloatPrecision);
3445
+ if(ptMax.Align=='left')text=leftArrow+text;else text=text+rightArrow;this.Canvas.fillText(text,0,0);this.Canvas.restore();var xText=ptMin.Y;var yText=ptMin.X;if(IFrameSplitOperator.IsNumber(lowYOffset))xText+=lowYOffset;this.Canvas.save();this.Canvas.translate(xText,yText);this.Canvas.rotate(90*Math.PI/180);var text=title.Low;this.Canvas.font=this.TextFont;if(title.LowColor)this.Canvas.fillStyle=title.LowColor;else this.Canvas.fillStyle=this.TextColor;this.Canvas.textAlign=ptMin.Align;this.Canvas.textBaseline='top';//var text=ptMin.Value.toFixed(defaultfloatPrecision);
3446
+ if(ptMin.Align=='left')text=leftArrow+text;else text=text+rightArrow;this.Canvas.fillText(text,0,0);this.Canvas.restore();};//画某一天的信息地雷
3439
3447
  this.DrawInfo=function(item){if(!this.InfoData||this.InfoData.size<=0)return;var isHScreen=this.ChartFrame.IsHScreen===true;var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var bottom=this.ChartBorder.GetBottom();var top=this.ChartBorder.GetTop();var key=''+item.DayData.Date;if(this.Data.DataType==1)key=item.DayData.Date+'-'+item.DayData.Time;if(!this.InfoData.has(key))return;var infoData=this.InfoData.get(key);if(!infoData||infoData.Data.length<=0)return;this.Canvas.restore();this.Canvas.save();this.ClipWindow(isHScreen);var pixelTatio=GetDevicePixelRatio();//获取设备的分辨率
3440
3448
  var iconSize=dataWidth+distanceWidth;var minIconSize=18*pixelTatio;var bShowNum=true;if(iconSize<=15)bShowNum=false;if(iconSize<minIconSize)iconSize=minIconSize;var text='',title='';var mapImage=new _map2.default();var iconTop=item.YMax+1*pixelTatio;var iconBottom=item.YMin+1*pixelTatio+iconSize;var drawTop=true;var yOffset=0;for(var i in infoData.Data){var infoItem=infoData.Data[i];var imageInfo=mapImage.get(infoItem.InfoType);if(!imageInfo){var icon=JSKLineInfoMap.GetIconFont(infoItem.InfoType);this.Canvas.fillStyle=icon.Color;this.Canvas.font=iconSize+'px '+icon.Family;if(isHScreen){this.Canvas.textBaseline="middle";this.Canvas.textAlign="left";this.Canvas.fillText(icon.HScreenText,iconTop,item.XCenter,iconSize);var iconRect=new Rect(item.XCenter-iconSize/2,iconTop-iconSize,iconSize,iconSize);var infoCache={Data:new Array(infoItem),Rect:iconRect,Type:infoItem.InfoType,TextRect:{X:iconTop,Y:item.XCenter}};mapImage.set(infoItem.InfoType,infoCache);iconTop+=iconSize;}else{this.Canvas.textBaseline="bottom";this.Canvas.textAlign="center";if(this.InfoPosition===1){var yBottom=bottom+yOffset;this.Canvas.fillText(icon.Text,item.XCenter,yBottom,iconSize);var iconRect=new Rect(item.XCenter-iconSize/2,yBottom-iconSize,iconSize,iconSize);var infoCache={Data:new Array(infoItem),Rect:iconRect,Type:infoItem.InfoType,TextRect:{X:item.XCenter,Y:yBottom}};mapImage.set(infoItem.InfoType,infoCache);yOffset-=iconSize;}else{if(drawTop){this.Canvas.fillText(icon.Text,item.XCenter,iconTop,iconSize);var iconRect=new Rect(item.XCenter-iconSize/2,iconTop-iconSize,iconSize,iconSize);var infoCache={Data:new Array(infoItem),Rect:iconRect,Type:infoItem.InfoType,TextRect:{X:item.XCenter,Y:iconTop}};mapImage.set(infoItem.InfoType,infoCache);iconTop-=iconSize;if(iconTop-iconSize<top)drawTop=false;}else//上面显示不下,就显示在下面
3441
3449
  {this.Canvas.fillText(icon.Text,item.XCenter,iconBottom,iconSize);var iconRect=new Rect(item.XCenter-iconSize/2,iconBottom-iconSize,iconSize,iconSize);var infoCache={Data:new Array(infoItem),Rect:iconRect,Type:infoItem.InfoType,TextRect:{X:item.XCenter,Y:iconBottom}};mapImage.set(infoItem.InfoType,infoCache);iconBottom+=iconSize;}}}}else{imageInfo.Data.push(infoItem);}}var numText;if(g_JSChartResource.KLine.NumIcon){if(isHScreen)numText=g_JSChartResource.KLine.NumIcon.HScreenText;else numText=g_JSChartResource.KLine.NumIcon.Text;}var _iteratorNormalCompletion4=true;var _didIteratorError4=false;var _iteratorError4=undefined;try{for(var _iterator4=(0,_getIterator3.default)(mapImage),_step4;!(_iteratorNormalCompletion4=(_step4=_iterator4.next()).done);_iteratorNormalCompletion4=true){var item=_step4.value;var value=item[1];if(value.Data.length>=2&&numText&&bShowNum)//太小了 就不显示了
@@ -7826,7 +7834,7 @@ this.CreateMainKLine=function(){var _this31=this;//分钟线
7826
7834
  var minuteLine=g_ChartPaintFactory.Create("ChartMinutePriceLine");minuteLine.Canvas=this.Canvas;minuteLine.ChartBorder=this.Frame.SubFrame[0].Frame.ChartBorder;minuteLine.ChartFrame=this.Frame.SubFrame[0].Frame;minuteLine.Name="Minute-Line";minuteLine.Identify="Minute-Line";minuteLine.Color=g_JSChartResource.Minute.PriceColor;minuteLine.LineWidth=g_JSChartResource.Minute.PriceLineWidth;minuteLine.AreaColor=g_JSChartResource.Minute.AreaPriceColor;minuteLine.GetEventCallback=function(id){return _this31.GetEventCallback(id);};this.ChartPaint[0]=minuteLine;//分钟线均线
7827
7835
  var averageLine=new ChartMinutePriceLine();averageLine.Canvas=this.Canvas;averageLine.ChartBorder=this.Frame.SubFrame[0].Frame.ChartBorder;averageLine.ChartFrame=this.Frame.SubFrame[0].Frame;averageLine.Name="Minute-Average-Line";averageLine.Identify="Minute-Average-Line";averageLine.Color=g_JSChartResource.Minute.AvPriceColor;averageLine.IsDrawArea=false;this.ChartPaint[1]=averageLine;//成交量
7828
7836
  var volLine=g_ChartPaintFactory.Create("ChartMinuteVolumBar");volLine.Color=g_JSChartResource.Minute.VolBarColor;volLine.Canvas=this.Canvas;volLine.ChartBorder=this.Frame.SubFrame[1].Frame.ChartBorder;volLine.ChartFrame=this.Frame.SubFrame[1].Frame;volLine.Name="Minute-Vol-Bar";volLine.Identify="Minute-Vol-Bar";volLine.ShareAfterVol=this.ShareAfterVol;this.ChartPaint[2]=volLine;this.TitlePaint[0]=new DynamicMinuteTitlePainting();this.TitlePaint[0].Frame=this.Frame.SubFrame[0].Frame;this.TitlePaint[0].Canvas=this.Canvas;this.TitlePaint[0].OverlayChartPaint=this.OverlayChartPaint;//绑定叠加
7829
- this.TitlePaint[0].LanguageID=this.LanguageID;this.TitlePaint[0].CallAcutionXOperator=new CallAcutionXOperator();this.TitlePaint[0].CallAcutionXOperator.Frame=this.Frame.SubFrame[0].Frame;};//切换成 脚本指标
7837
+ this.TitlePaint[0].LanguageID=this.LanguageID;this.TitlePaint[0].CallAcutionXOperator=new CallAcutionXOperator();this.TitlePaint[0].CallAcutionXOperator.Frame=this.Frame.SubFrame[0].Frame;this.TitlePaint[0].HQChart=this;};//切换成 脚本指标
7830
7838
  this.ChangeScriptIndex=function(windowIndex,indexData,option){this.DeleteIndexPaint(windowIndex,true);this.WindowIndex[windowIndex]=new ScriptIndex(indexData.Name,indexData.Script,indexData.Args,indexData);//脚本执行
7831
7839
  var bindData=this.SourceData;this.BindIndexData(windowIndex,bindData);//执行脚本
7832
7840
  this.UpdataDataoffset();//更新数据偏移
@@ -11231,7 +11239,7 @@ var bResult=this.Algorithm.IFC(args[0]);var item=bResult?node.Arguments[1]:node.
11231
11239
  if(g_JSComplierResource.IsCustomFunction(funcName)){var data=this.Algorithm.CallCustomFunction(funcName,args,this.SymbolData,node);node.Out=[];node.Draw=null;if(data){if(data.Out)node.Out=data.Out;if(data.Draw)node.Draw=data.Draw;}return node.Out;}switch(funcName){case'DYNAINFO'://行情最新数据
11232
11240
  node.Out=this.SymbolData.GetLatestCacheData(args[0]);break;case'STICKLINE':node.Draw=this.Draw.STICKLINE(args[0],args[1],args[2],args[3],args[4]);node.Out=[];break;case'DRAWTEXT':node.Draw=this.Draw.DRAWTEXT(args[0],args[1],args[2]);node.Out=[];break;case'DRAWTEXT_FIX':node.Draw=this.Draw.DRAWTEXT_FIX(args[0],args[1],args[2],args[3],args[4]);node.Out=[];break;case'SUPERDRAWTEXT':node.Draw=this.Draw.SUPERDRAWTEXT(args[0],args[1],args[2],args[3],args[4]);node.Out=[];break;case'DRAWICON':node.Draw=this.Draw.DRAWICON(args[0],args[1],args[2]);node.Out=[];break;case"ICON":node.Draw=this.Draw.ICON(args[0],args[1]);node.Out=[];break;case"TIPICON":node.Draw=this.Draw.TIPICON(args[0],args[1],args[2],args[3]);node.Out=[];break;case"BACKGROUND":node.Draw=this.Draw.BACKGROUND(args[0],args[1],args[2],args[3],args[4],args[5]);node.Out=[];break;case"CKLINE":node.Draw=this.Draw.CKLINE(args[0],args[1],args[2],args[3],args[4]);node.Out=[];break;case'DRAWLINE':node.Draw=this.Draw.DRAWLINE(args[0],args[1],args[2],args[3],args[4]);node.Out=node.Draw.DrawData;break;case'DRAWBAND':node.Draw=this.Draw.DRAWBAND(args[0],args[1],args[2],args[3]);node.Out=[];break;case"FILLRGN":if(args.length>=4)node.Draw=this.Draw.FILLRGN2(args);else node.Draw=this.Draw.FILLRGN(args[0],args[1],args[2]);node.Out=[];break;case"FLOATRGN":node.Draw=this.Draw.FLOATRGN(args);node.Out=[];break;case"FILLTOPRGN":node.Draw=this.Draw.FILLBGRGN(1,args);node.Out=[];break;case"FILLBOTTOMRGN":node.Draw=this.Draw.FILLBGRGN(0,args);node.Out=[];break;case"FILLVERTICALRGN":node.Draw=this.Draw.FILLVERTICALRGN(args);node.Out=[];break;case'DRAWKLINE':case"DRAWKLINE1":node.Draw=this.Draw.DRAWKLINE(args[0],args[1],args[2],args[3]);node.Out=[];break;case'DRAWKLINE_IF':node.Draw=this.Draw.DRAWKLINE_IF(args[0],args[1],args[2],args[3],args[4]);node.Out=[];break;case"KLINETYPE"://K线类型 和DRAWKLINE连用
11233
11241
  node.Out=this.Draw.KLINETYPE(args[0]);break;case"DRAWOVERLAYKLINE":node.Draw=this.Draw.DRAWOVERLAYKLINE(args[0],args[1],args[2],args[3]);node.Out=[];break;case"DRAWCOLORKLINE":node.Draw=this.Draw.DRAWCOLORKLINE(args[0],args[1],args[2]);node.Out=[];break;case'PLOYLINE':case'POLYLINE':node.Draw=this.Draw.POLYLINE(args[0],args[1]);node.Out=node.Draw.DrawData;break;case'DRAWNUMBER':node.Draw=this.Draw.DRAWNUMBER(args[0],args[1],args[2],args[3]);node.Out=node.Draw.DrawData.Value;break;case"DRAWNUMBER_FIX":node.Draw=this.Draw.DRAWNUMBER_FIX(args[0],args[1],args[2],args[3],args[4]);node.Out=node.Draw.DrawData.Value;break;case"DRAWCHANNEL":node.Draw=this.Draw.DRAWCHANNEL(args[0],args[1],args[2],args[3],args[4],args[5],args[6]);node.Out=[];break;case'RGB':node.Out=this.Draw.RGB(args[0],args[1],args[2]);break;case"RGBA":node.Out=this.Draw.RGBA(args[0],args[1],args[2],args[3]);break;case"UPCOLOR":node.Out=this.Draw.UPCOLOR(args[0]);break;case"DOWNCOLOR":node.Out=this.Draw.DOWNCOLOR(args[0]);break;case"STICKTYPE"://柱子类型
11234
- node.Out=this.Draw.STICKTYPE(args[0]);break;case"XMOVE":node.Out=this.Draw.XMOVE(args[0]);break;case"YMOVE":node.Out=this.Draw.YMOVE(args[0]);break;case"FIRSTDRAW":node.Out=this.Draw.FIRSTDRAW(args[0]);break;case'PARTLINE':node.Draw=this.Draw.PARTLINE(args);node.Out=[];break;case'DRAWGBK':node.Draw=this.Draw.DRAWGBK(args[0],args[1],args[2],args[3]);node.Out=[];break;case'DRAWGBK2':node.Draw=this.Draw.DRAWGBK2(args[0],args[1],args[2],args[3]);node.Out=[];break;case"DRAWGBK_DIV":node.Draw=this.Draw.DRAWGBK_DIV(args[0],args[1],args[2],args[3],args[4]);node.Out=[];break;case'DRAWTEXT_LINE':node.Draw=this.Draw.DRAWTEXT_LINE(args[0],args[1],args[2],args[3],args[4],args[5],args[6]);node.Out=[];break;case'DRAWRECTREL':node.Draw=this.Draw.DRAWRECTREL(args[0],args[1],args[2],args[3],args[4]);node.Out=[];break;case"DRAWTEXTREL":node.Draw=this.Draw.DRAWTEXTREL(args[0],args[1],args[2]);node.Out=[];break;case"DRAWTEXTABS":node.Draw=this.Draw.DRAWTEXTABS(args[0],args[1],args[2]);node.Out=[];break;case"DRAWOVERLAYLINE":node.Draw=this.Draw.DRAWOVERLAYLINE(args[0],args[1],args[2]);node.Out=node.Draw.DrawData.Data;break;case"DRAWSL":node.Draw=this.Draw.DRAWSL(args[0],args[1],args[2],args[3],args[4]);node.Out=[];break;case"VERTLINE":node.Draw=this.Draw.VERTLINE(args[0],args[1]);node.Out=node.Draw.DrawData.Data;break;case"HORLINE":node.Draw=this.Draw.HORLINE(args[0],args[1],args[2],args[3]);node.Out=node.Draw.DrawData.Data;break;case'CODELIKE':node.Out=this.SymbolData.CODELIKE(args[0]);break;case'NAMELIKE':case"NAMEINCLUDE":node.Out=this.SymbolData.NAMELIKE(args[1]);break;case'REFDATE':node.Out=this.SymbolData.REFDATE(args[0],args[1]);break;case'FINANCE':node.Out=this.SymbolData.GetStockCacheData({FunctionName:funcName,Args:args,ArgCount:1,Node:node});break;case"FINVALUE":node.Out=this.SymbolData.GetStockCacheData({FunctionName:funcName,Args:args,ArgCount:1,Node:node});break;case"FINONE":node.Out=this.SymbolData.GetStockCacheData({FunctionName:funcName,Args:args,ArgCount:3,Node:node});break;case"GPJYVALUE":node.Out=this.SymbolData.GetStockCacheData({FunctionName:funcName,Args:args,ArgCount:3,Node:node});break;case"SCJYVALUE":node.Out=this.SymbolData.GetStockCacheData({FunctionName:funcName,Args:args,ArgCount:3,Node:node});break;case"MARGIN":node.Out=this.SymbolData.GetMarginCacheData(args[0],node);break;case"HK2SHSZ":node.Out=this.SymbolData.GetHKToSHSZCacheData(args[0],node);break;case"NEWS":node.Out=this.SymbolData.GetNewsAnalysisCacheData(args[0],node);break;case'UPCOUNT':case'DOWNCOUNT':node.Out=this.SymbolData.GetIndexIncreaseCacheData(funcName,args[0],node);break;case'SF':node.Out=this.SymbolData.GetSectionFinanceCacheData(args[0],args[1],args[2],node);break;case'LOADAPIDATA':node.Out=this.SymbolData.GetCustomApiData(args);break;case"STKINDI":case"CALCSTOCKINDEX":node.Out=this.SymbolData.GetScriptIndexOutData(args,node,funcName);break;case"SOUND":node.Draw=this.Draw.SOUND(args[0]);node.Out=[];break;case"PLAYSOUND":node.Draw=this.Draw.PLAYSOUND(args[0],args[1]);node.Out=[];break;case'CLOSE':case'C':case'VOL':case'V':case'OPEN':case'O':case'HIGH':case'H':case'LOW':case'L':case'AMOUNT':case'AMO':node.Out=this.SymbolData.GetOtherSymolCacheData({FunctionName:funcName,Args:args});break;case"INBLOCK":node.Out=this.SymbolData.IsInBlock(args[0],node);break;case'COVER_C':case'COVER_O':case'COVER_H':case'COVER_L':case'COVER_A':case'COVER_V':if(args.length==2)return this.SymbolData.GetSymbolPeriodCacheData2(JSComplierHelper.GetConvertValueName(funcName),args[0],args[1]);return this.SymbolData.GetSymbolPeriodCacheData(JSComplierHelper.GetConvertValueName(funcName),args[0]);case"SYSPARAM":return this.SymbolData.SysParam(args[0],this);case"TESTSKIP":var bExit=this.Algorithm.TESTSKIP(args[0],node);node.Out=null;if(bExit){this.Interrupt.Exit=true;if(node&&node.Marker){var marker=node.Marker;this.Interrupt.Line=marker.Line;this.Interrupt.Index=marker.Index;this.Interrupt.Column=marker.Column;}}break;//交易函数
11242
+ node.Out=this.Draw.STICKTYPE(args[0]);break;case"XMOVE":node.Out=this.Draw.XMOVE(args[0]);break;case"YMOVE":node.Out=this.Draw.YMOVE(args[0]);break;case"FIRSTDRAW":node.Out=this.Draw.FIRSTDRAW(args[0]);break;case'PARTLINE':node.Draw=this.Draw.PARTLINE(args);node.Out=[];break;case'DRAWGBK':node.Draw=this.Draw.DRAWGBK(args[0],args[1],args[2],args[3]);node.Out=[];break;case'DRAWGBK2':node.Draw=this.Draw.DRAWGBK2(args[0],args[1],args[2],args[3]);node.Out=[];break;case"DRAWGBK_DIV":node.Draw=this.Draw.DRAWGBK_DIV(args[0],args[1],args[2],args[3],args[4]);node.Out=[];break;case'DRAWTEXT_LINE':node.Draw=this.Draw.DRAWTEXT_LINE(args[0],args[1],args[2],args[3],args[4],args[5],args[6]);node.Out=[];break;case'DRAWRECTREL':node.Draw=this.Draw.DRAWRECTREL(args[0],args[1],args[2],args[3],args[4]);node.Out=[];break;case"DRAWTEXTREL":node.Draw=this.Draw.DRAWTEXTREL(args[0],args[1],args[2]);node.Out=[];break;case"DRAWTEXTABS":node.Draw=this.Draw.DRAWTEXTABS(args[0],args[1],args[2]);node.Out=[];break;case"DRAWOVERLAYLINE":node.Draw=this.Draw.DRAWOVERLAYLINE(args[0],args[1],args[2]);node.Out=node.Draw.DrawData.Data;break;case"DRAWSL":node.Draw=this.Draw.DRAWSL(args[0],args[1],args[2],args[3],args[4]);node.Out=[];break;case"VERTLINE":node.Draw=this.Draw.VERTLINE(args[0],args[1]);node.Out=node.Draw.DrawData.Data;break;case"HORLINE":node.Draw=this.Draw.HORLINE(args[0],args[1],args[2],args[3]);node.Out=node.Draw.DrawData.Data;break;case'CODELIKE':node.Out=this.SymbolData.CODELIKE(args[0]);break;case'NAMELIKE':case"NAMEINCLUDE":node.Out=this.SymbolData.NAMELIKE(args[1]);break;case'REFDATE':node.Out=this.SymbolData.REFDATE(args[0],args[1]);break;case'FINANCE':node.Out=this.SymbolData.GetStockCacheData({FunctionName:funcName,Args:args,ArgCount:1,Node:node});break;case"FINVALUE":node.Out=this.SymbolData.GetStockCacheData({FunctionName:funcName,Args:args,ArgCount:1,Node:node});break;case"FINONE":node.Out=this.SymbolData.GetStockCacheData({FunctionName:funcName,Args:args,ArgCount:3,Node:node});break;case"GPJYVALUE":node.Out=this.SymbolData.GetStockCacheData({FunctionName:funcName,Args:args,ArgCount:3,Node:node});break;case"SCJYVALUE":node.Out=this.SymbolData.GetStockCacheData({FunctionName:funcName,Args:args,ArgCount:3,Node:node});break;case"MARGIN":node.Out=this.SymbolData.GetMarginCacheData(args[0],node);break;case"HK2SHSZ":node.Out=this.SymbolData.GetHKToSHSZCacheData(args[0],node);break;case"NEWS":node.Out=this.SymbolData.GetNewsAnalysisCacheData(args[0],node);break;case'UPCOUNT':case'DOWNCOUNT':node.Out=this.SymbolData.GetIndexIncreaseCacheData(funcName,args[0],node);break;case'SF':node.Out=this.SymbolData.GetSectionFinanceCacheData(args[0],args[1],args[2],node);break;case'LOADAPIDATA':node.Out=this.SymbolData.GetCustomApiData(args);break;case"STKINDI":case"CALCSTOCKINDEX":node.Out=this.SymbolData.GetScriptIndexOutData(args,node,funcName);break;case"SOUND":node.Draw=this.Draw.SOUND(args[0]);node.Out=[];break;case"PLAYSOUND":node.Draw=this.Draw.PLAYSOUND(args[0],args[1]);node.Out=[];break;case'CLOSE':case'C':case'VOL':case'V':case'OPEN':case'O':case'HIGH':case'H':case'LOW':case'L':case'AMOUNT':case'AMO':node.Out=this.SymbolData.GetOtherSymolCacheData({FunctionName:funcName,Args:args});break;case"INBLOCK":node.Out=this.SymbolData.IsInBlock(args[0],node);break;case'COVER_C':case'COVER_O':case'COVER_H':case'COVER_L':case'COVER_A':case'COVER_V':if(args.length==2)return this.SymbolData.GetSymbolPeriodCacheData2(JSComplierHelper.GetConvertValueName(funcName),args[0],args[1]);return this.SymbolData.GetSymbolPeriodCacheData(JSComplierHelper.GetConvertValueName(funcName),args[0]);case"SYSPARAM":node.Out=this.SymbolData.SysParam(args[0],this);break;case"TESTSKIP":var bExit=this.Algorithm.TESTSKIP(args[0],node);node.Out=null;if(bExit){this.Interrupt.Exit=true;if(node&&node.Marker){var marker=node.Marker;this.Interrupt.Line=marker.Line;this.Interrupt.Index=marker.Index;this.Interrupt.Column=marker.Column;}}break;//交易函数
11235
11243
  case"BUY":node.Draw=this.Draw.BUY(args[0],args[1],args[2],args[3]);node.Out=node.Draw.DrawData.Data;break;case"SELL":node.Draw=this.Draw.SELL(args[0],args[1],args[2],args[3]);node.Out=node.Draw.DrawData.Data;break;case"SELLSHORT":node.Draw=this.Draw.SELLSHORT(args[0],args[1],args[2],args[3]);node.Out=node.Draw.DrawData.Data;break;case"BUYSHORT":node.Draw=this.Draw.BUYSHORT(args[0],args[1],args[2],args[3]);node.Out=node.Draw.DrawData.Data;break;default:node.Out=this.Algorithm.CallFunction(funcName,args,node,this.SymbolData);break;}return node.Out;};//赋值
11236
11244
  this.VisitAssignmentExpression=function(node){var left=node.Left;if(left.Type!=Syntax.Identifier)this.ThrowUnexpectedNode(node);var varName=left.Name;var right=node.Right;var value=null,drawValue=null;if(right.Type==Syntax.BinaryExpression||right.Type==Syntax.LogicalExpression)value=this.VisitBinaryExpression(right);else if(right.Type==Syntax.CallExpression){value=this.VisitCallExpression(right);if(right.Draw)drawValue=right.Draw;}else if(right.Type==Syntax.Literal){value=right.Value;if(IFrameSplitOperator.IsString(value)&&right.Value.indexOf("$")>0)value=this.SymbolData.GetOtherSymolCacheData({Literal:value});}else if(right.Type==Syntax.Identifier)//右值是变量
11237
11245
  value=this.ReadVariable(right.Name,right);else if(right.Type==Syntax.MemberExpression)value=this.ReadMemberVariable(right);else if(right.Type==Syntax.UnaryExpression)value=this.VisitUnaryExpression(right);if(JS_EXECUTE_DEBUG_LOG)JSConsole.Complier.Log('[JSExecute::VisitAssignmentExpression]',varName,' = ',value);if(drawValue)this.VarDrawTable.set(varName,drawValue);this.VarTable.set(varName,value);};//逻辑运算
@@ -13032,7 +13040,8 @@ this.UIElement.onmousedown=function(e){_this64.UIOnMouseDown(e);};this.UIElement
13032
13040
  this.Canvas.lineWidth=pixelTatio;//手机端需要根据分辨率比调整线段宽度
13033
13041
  if(this.ChartSplashPaint&&this.ChartSplashPaint.IsEnableSplash){this.Frame.Draw({IsEnableSplash:this.ChartSplashPaint.IsEnableSplash});this.ChartSplashPaint.Draw();return;}this.Frame.Draw();this.Frame.DrawLogo();//框架内图形
13034
13042
  for(var i=0;i<this.ChartPaint.length;++i){var item=this.ChartPaint[i];if(item.IsDrawFirst)item.Draw();}for(var i=0;i<this.ChartPaint.length;++i){var item=this.ChartPaint[i];if(!item.IsDrawFirst)item.Draw();}};this.OnSize=function(){if(!this.Frame)return;this.SetSizeChange(true);this.Draw();};this.SetSizeChange=function(bChanged){for(var i=0;i<this.ChartPaint.length;++i){var chart=this.ChartPaint[i];if(chart)chart.SizeChange=bChanged;}};this.UpdateFrameMaxMin=function(){var max=null,min=null;for(var i=0;i<this.ChartPaint.length;++i){var item=this.ChartPaint[i];if(!item.GetMaxMin)continue;var range=item.GetMaxMin();if(range==null||range.Max==null||range.Min==null)continue;if(max==null||max<range.Max)max=range.Max;if(min==null||min>range.Min)min=range.Min;}if(IFrameSplitOperator.IsNumber(max)&&IFrameSplitOperator.IsNumber(min)){this.Frame.HorizontalMax=max;this.Frame.HorizontalMin=min;}};//未启动
13035
- this.UIOnDblClick=function(e){};this.CancelDragTimer=function(){if(this.DragTimer){clearTimeout(this.DragTimer);this.DragTimer=null;}};this.UIOnMouseDown=function(e){var _this65=this;this.CancelDragTimer();this.DragSlider=null;this.DragMove={Click:{X:e.clientX,Y:e.clientY},Move:{X:e.clientX,Y:e.clientY},PreMove:{X:e.clientX,Y:e.clientY}};var pixelTatio=GetDevicePixelRatio();var x=(e.clientX-this.UIElement.getBoundingClientRect().left)*pixelTatio;var y=(e.clientY-this.UIElement.getBoundingClientRect().top)*pixelTatio;if(this.SliderChart){var clickData=this.SliderChart.PtInChart(x,y);if(!clickData)return;this.DragSlider={Click:{X:e.clientX,Y:e.clientY},LastMove:{X:e.clientX,Y:e.clientY},Data:clickData};this.DragSlider.DrawCount=0;//重绘次数
13043
+ this.UIOnDblClick=function(e){};this.CancelDragTimer=function(){if(this.DragTimer){clearTimeout(this.DragTimer);this.DragTimer=null;}};this.UIOnMouseDown=function(e){var _this65=this;this.CancelDragTimer();this.DragSlider=null;this.DragMove={Click:{X:e.clientX,Y:e.clientY},Move:{X:e.clientX,Y:e.clientY},PreMove:{X:e.clientX,Y:e.clientY}};var pixelTatio=GetDevicePixelRatio();var x=(e.clientX-this.UIElement.getBoundingClientRect().left)*pixelTatio;var y=(e.clientY-this.UIElement.getBoundingClientRect().top)*pixelTatio;if(this.SliderChart){var clickData=this.SliderChart.PtInChart(x,y);if(!clickData){if(!this.Frame.PtInClient(x,y))return;//滚动块直接移动到鼠标点击的位置
13044
+ var index=this.Frame.GetXData(x);index=Math.round(index);var pageRange=this.GetPageRange();var showCount=pageRange.ShowCount;var start=index-parseInt(showCount/2);if(start<0)start=0;var end=start+showCount;if(end>=this.Frame.XPointCount){end=this.Frame.XPointCount-1;start=end-showCount;}var drag={UpdateData:{StartIndex:start,EndIndex:end,Type:3}};this.DragUpdate(drag);return;}this.DragSlider={Click:{X:e.clientX,Y:e.clientY},LastMove:{X:e.clientX,Y:e.clientY},Data:clickData};this.DragSlider.DrawCount=0;//重绘次数
13036
13045
  }document.onmousemove=function(e){_this65.DocOnMouseMove(e);};document.onmouseup=function(e){_this65.DocOnMouseUp(e);};};//去掉右键菜单
13037
13046
  this.UIOnContextMenu=function(e){e.preventDefault();};this.UIOnMouseMove=function(e){var pixelTatio=GetDevicePixelRatio();var x=(e.clientX-this.UIElement.getBoundingClientRect().left)*pixelTatio;var y=(e.clientY-this.UIElement.getBoundingClientRect().top)*pixelTatio;if(this.DragSlider)return;var mouseStatus=mouseStatus={Cursor:"default"};;//鼠标状态
13038
13047
  var item=this.SliderChart.PtInChart(x,y);if(item){switch(item.Data.Type){case 0:mouseStatus={Cursor:"grab",Name:"SliderChart"};break;case 1:case 2:mouseStatus={Cursor:"col-resize",Name:"SliderChart"};break;}}if(mouseStatus)this.UIElement.style.cursor=mouseStatus.Cursor;};this.UIOnMounseOut=function(e){};this.UIOnMouseleave=function(e){};this.DocOnMouseMove=function(e){var _this66=this;this.DragMove.PreMove.X=this.DragMove.Move.X;this.DragMove.PreMove.Y=this.DragMove.Move.Y;this.DragMove.Move.X=e.clientX;this.DragMove.Move.Y=e.clientX;if(this.ChartSplashPaint&&this.ChartSplashPaint.IsEnableSplash==true)return;var pixelTatio=GetDevicePixelRatio();var x=(e.clientX-this.UIElement.getBoundingClientRect().left)*pixelTatio;var y=(e.clientY-this.UIElement.getBoundingClientRect().top)*pixelTatio;JSConsole.Chart.Log('[JSScrollBarChartContainer::DocOnMouseMove] x='+x+', y='+y);if(this.DragSlider){var drag=this.DragSlider;var moveSetp=(e.clientX-drag.LastMove.X)*pixelTatio;if(Math.abs(moveSetp)<1)return;var pageRange=this.GetPageRange();var left=this.Frame.ChartBorder.GetLeft();var right=this.Frame.ChartBorder.GetRight();this.SliderChart.DragMode=true;var type=drag.Data.Data.Type;var xStart=this.SliderChart.XStart+moveSetp;var xEnd=this.SliderChart.XEnd+moveSetp;if(type==0)//整体移动
@@ -13041,8 +13050,8 @@ var item=this.SliderChart.PtInChart(x,y);if(item){switch(item.Data.Type){case 0:
13041
13050
  {if(xStart<=left){xStart=pageRange.First.XStart;}else if(xStart>=right){xStart=pageRange.Last.XEnd;}this.SliderChart.XStart=xStart;}else if(type==2){if(xEnd>=right){xEnd=pageRange.Last.XEnd;}else if(xEnd<=left){xEnd=pageRange.First.XStart;}this.SliderChart.XEnd=xEnd;}drag.UpdateData={XStart:xStart,XEnd:xEnd,Type:type};drag.LastMove.X=e.clientX;drag.LastMove.Y=e.clientY;if(drag.DrawCount==0){this.DragUpdate(drag);}else{this.DragTimer=setTimeout(function(){_this66.DragUpdate(_this66.DragSlider);},this.DelayDragFrequency);}}};this.DocOnMouseUp=function(e){//清空事件
13042
13051
  document.onmousemove=null;document.onmouseup=null;this.CancelDragTimer();var dragSlider=this.DragSlider;this.DragMove=null;this.DragSlider=null;this.SliderChart.DragMode=false;this.DragUpdate(dragSlider);};this.DragUpdate=function(dragData){if(!dragData||!dragData.UpdateData)return;this.UpdateXDataOffset(dragData.UpdateData);this.Draw();++dragData.DrawCount;};this.Reset=function(option){this.SourceData=null;this.XOffsetData.Start=-1;this.XOffsetData.End=-1;this.XOffsetData.Count=0;this.Frame.Data=null;for(var i=0;i<this.ChartPaint.length;++i){var item=this.ChartPaint[i];item.Data=null;}if(this.ChartSplashPaint)this.ChartSplashPaint.IsEnableSplash=true;if(option.Draw)this.Draw();};//外部更新滑块 obj={ Start: , End: }
13043
13052
  this.UpdateSlider=function(obj){if(this.SliderChart.DragMode)return;var bSizeChange=false;if((this.AutoMargin.Left||this.AutoMargin.Right)&&obj.Border){if(this.AutoMargin.Left){if(this.Frame.ChartBorder.Left!=obj.Border.Left)bSizeChange=true;}if(this.AutoMargin.Right){if(this.Frame.ChartBorder.Right!=obj.Border.Right)bSizeChange=true;}}var data=obj.Data;if(this.XOffsetData.Start==obj.Start&&this.XOffsetData.End==obj.End&&this.SourceData==data&&!bSizeChange)return;this.SourceData=data;var count=data.Data.length;if(IFrameSplitOperator.IsNumber(obj.RightSpaceCount))count+=obj.RightSpaceCount;this.Frame.XPointCount=count;this.Frame.Data=data;this.XOffsetData.Count=count;this.XOffsetData.Start=obj.Start;this.XOffsetData.End=obj.End;for(var i=0;i<this.ChartPaint.length;++i){var item=this.ChartPaint[i];item.Data=data;}if(this.AutoMargin.Left&&obj.Border){if(IFrameSplitOperator.IsNumber(obj.Border.Left))this.Frame.ChartBorder.Left=obj.Border.Left;}if(this.AutoMargin.Right&&obj.Border){if(IFrameSplitOperator.IsNumber(obj.Border.Right))this.Frame.ChartBorder.Right=obj.Border.Right;}this.UpdateFrameMaxMin();if(this.ChartSplashPaint)this.ChartSplashPaint.IsEnableSplash=false;if(obj.Draw)this.Draw();};//移动滑块
13044
- this.UpdateXDataOffset=function(obj){if(obj.Type==0){var start=this.Frame.GetXData(obj.XStart);start=parseInt(start+0.5);//四舍五入
13045
- var moveSetp=start-this.XOffsetData.Start;this.XOffsetData.Start=start;this.XOffsetData.End+=moveSetp;}else if(obj.Type==1){var start=this.Frame.GetXData(obj.XStart);start=parseInt(start);this.XOffsetData.Start=start;}else if(obj.Type==2){var end=this.Frame.GetXData(obj.XEnd);end=parseInt(end);this.XOffsetData.End=end;}var endItem=this.SourceData.Data[this.XOffsetData.End];var startItem=this.SourceData.Data[this.XOffsetData.Start];var sendData={Type:obj.Type,Count:this.XOffsetData.Count};if(this.XOffsetData.End>this.XOffsetData.Start){sendData.Start={Index:this.XOffsetData.Start,Item:startItem};sendData.End={Index:this.XOffsetData.End,Item:endItem};}else{sendData.Start={Index:this.XOffsetData.End,Item:endItem};sendData.End={Index:this.XOffsetData.Start,Item:startItem};}if(this.HQChart&&this.HQChart.JSChartContainer){var internalChart=this.HQChart.JSChartContainer;if(internalChart.ChartOperator){var obj={ID:JSCHART_OPERATOR_ID.OP_SCROOLBAR_SLIDER_CHANGED,Start:sendData.Start,End:sendData.End,Type:sendData.Type};internalChart.ChartOperator(obj);}}var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_SCROLLBAR_SLIDER_CHANGED);if(event){event.Callback(event,sendData,this);}};this.ReloadResource=function(option){this.Frame.ReloadResource(option);for(var i=0;i<this.ChartPaint.length;++i){var item=this.ChartPaint[i];if(item.ReloadResource)item.ReloadResource(option);}if(option&&option.Redraw){this.SetSizeChange(true);this.Draw();}};this.GetPageRange=function(){var result={};var showCount=Math.abs(this.XOffsetData.Start-this.XOffsetData.End);result.ShowCount=showCount;//第1页
13053
+ this.UpdateXDataOffset=function(obj){if(!obj)return;var type=obj.Type;if(obj.Type==0){var start=this.Frame.GetXData(obj.XStart);start=parseInt(start+0.5);//四舍五入
13054
+ var moveSetp=start-this.XOffsetData.Start;this.XOffsetData.Start=start;this.XOffsetData.End+=moveSetp;}else if(obj.Type==1){var start=this.Frame.GetXData(obj.XStart);start=parseInt(start);this.XOffsetData.Start=start;}else if(obj.Type==2){var end=this.Frame.GetXData(obj.XEnd);end=parseInt(end);this.XOffsetData.End=end;}else if(obj.Type==3){this.XOffsetData.End=obj.EndIndex;this.XOffsetData.Start=obj.StartIndex;type=0;}var endItem=this.SourceData.Data[this.XOffsetData.End];var startItem=this.SourceData.Data[this.XOffsetData.Start];var sendData={Type:type,Count:this.XOffsetData.Count};if(this.XOffsetData.End>this.XOffsetData.Start){sendData.Start={Index:this.XOffsetData.Start,Item:startItem};sendData.End={Index:this.XOffsetData.End,Item:endItem};}else{sendData.Start={Index:this.XOffsetData.End,Item:endItem};sendData.End={Index:this.XOffsetData.Start,Item:startItem};}if(this.HQChart&&this.HQChart.JSChartContainer){var internalChart=this.HQChart.JSChartContainer;if(internalChart.ChartOperator){var obj={ID:JSCHART_OPERATOR_ID.OP_SCROOLBAR_SLIDER_CHANGED,Start:sendData.Start,End:sendData.End,Type:sendData.Type};internalChart.ChartOperator(obj);}}var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_SCROLLBAR_SLIDER_CHANGED);if(event){event.Callback(event,sendData,this);}};this.ReloadResource=function(option){this.Frame.ReloadResource(option);for(var i=0;i<this.ChartPaint.length;++i){var item=this.ChartPaint[i];if(item.ReloadResource)item.ReloadResource(option);}if(option&&option.Redraw){this.SetSizeChange(true);this.Draw();}};this.GetPageRange=function(){var result={};var showCount=Math.abs(this.XOffsetData.Start-this.XOffsetData.End);result.ShowCount=showCount;//第1页
13046
13055
  var xStart=this.Frame.GetXFromIndex(0);var xEnd=this.Frame.GetXFromIndex(showCount);result.First={XStart:xStart,XEnd:xEnd};//最后一页
13047
13056
  var end=this.Frame.XPointCount-1;var xEnd=this.Frame.GetXFromIndex(end);var xStart=this.Frame.GetXFromIndex(end-showCount);result.Last={XStart:xStart,XEnd:xEnd};return result;};this.ReloadResource=function(option){this.Frame.ReloadResource(option);for(var i=0;i<this.ChartPaint.length;++i){var item=this.ChartPaint[i];if(item.ReloadResource)item.ReloadResource(option);}if(option.Draw==true)this.Draw();//是否立即重绘
13048
13057
  };}/////////////////////////////////////////////////////////////////////////////////////////
@@ -13063,7 +13072,7 @@ if(!IFrameSplitOperator.IsNumber(this.BorderLine)){this.Canvas.strokeStyle=this.
13063
13072
  {this.Canvas.moveTo(left,bottom);this.Canvas.lineTo(right,bottom);}if((this.BorderLine&4)>0)//左
13064
13073
  {this.Canvas.moveTo(left,top);this.Canvas.lineTo(left,bottom);}if((this.BorderLine&8)>0)//右
13065
13074
  {this.Canvas.moveTo(right,top);this.Canvas.lineTo(right,bottom);}this.Canvas.stroke();}};this.GetXFromIndex=function(index){var count=this.XPointCount;if(count==1){if(index==0)return this.ChartBorder.GetLeft();else return this.ChartBorder.GetRight();}else if(count<=0){return this.ChartBorder.GetLeft();}else if(index>=count){return this.ChartBorder.GetRight();}else{var offset=this.ChartBorder.GetLeft()+this.ChartBorder.GetWidth()*index/count;return offset;}};this.GetYFromData=function(value){if(value<=this.HorizontalMin)return this.ChartBorder.GetBottomEx();if(value>=this.HorizontalMax)return this.ChartBorder.GetTopEx();var height=this.ChartBorder.GetHeightEx()*(value-this.HorizontalMin)/(this.HorizontalMax-this.HorizontalMin);return this.ChartBorder.GetBottomEx()-height;};//X坐标转x轴数值
13066
- this.GetXData=function(x){if(x<=this.ChartBorder.GetLeft())return 0;if(x>=this.ChartBorder.GetRight())return this.XPointCount;return(x-this.ChartBorder.GetLeft())*(this.XPointCount*1.0/this.ChartBorder.GetWidth());};this.GetPreSetpWidth=function(){return this.XPointCount*1.0/this.ChartBorder.GetWidth();};this.DrawVertical=function(){if(this.ChartBorder.Bottom<=5)return;if(!this.Data||!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data))return;var item=this.Data.Data[0];var preYear=parseInt(item.Date/10000);var preDay=item.Date%10000;this.Canvas.font=this.XSplitTextFont;this.Canvas.fillStyle=this.XSplitTextColor;this.Canvas.textBaseline="top";var yText=this.ChartBorder.GetBottom()+2;var top=this.ChartBorder.GetTop();var bottom=this.ChartBorder.GetBottom();var preXText=0;if(ChartData.IsMilliSecondPeriod(this.Data.Period)){var preHour=null;for(var i=0;i<this.Data.Data.length;++i){var item=this.Data.Data[i];var day=item.Date%10000;var time=parseInt(item.Time/1000);var hour=parseInt(time/10000);if(i==0){var text=IFrameSplitOperator.FormatDateString(item.Date,"MM-DD");var x=this.ChartBorder.GetLeft();this.Canvas.textAlign="left";this.Canvas.fillText(text,x,yText);var textWidth=this.Canvas.measureText(text).width+2;preXText=x+textWidth;preDay=day;preHour=hour;continue;}if(hour!=preHour){var text=IFrameSplitOperator.FormatTimeString(item.Time,"HH:MM:SS.fff");var x=this.GetXFromIndex(i);var textWidth=this.Canvas.measureText(text).width+2;if(x-textWidth/2>preXText){this.Canvas.textAlign="center";this.Canvas.fillText(text,x,yText);preXText=x+textWidth/2;}x=ToFixedPoint(x);this.Canvas.strokeStyle=this.XSplitLineColor;this.Canvas.beginPath();this.Canvas.moveTo(x,top);this.Canvas.lineTo(x,bottom);this.Canvas.stroke();preHour=hour;}}}else if(ChartData.IsMinutePeriod(this.Data.Period,true)){for(var i=0;i<this.Data.Data.length;++i){var item=this.Data.Data[i];var day=item.Date%10000;if(i==0){var text=IFrameSplitOperator.FormatDateString(item.Date,"MM-DD");var x=this.ChartBorder.GetLeft();this.Canvas.textAlign="left";this.Canvas.fillText(text,x,yText);var textWidth=this.Canvas.measureText(text).width+2;preXText=x+textWidth;preDay=day;continue;}if(day!=preDay){var text=IFrameSplitOperator.FormatDateString(item.Date,"MM-DD");var x=this.GetXFromIndex(i);var textWidth=this.Canvas.measureText(text).width+2;if(x-textWidth/2>preXText){this.Canvas.textAlign="center";this.Canvas.fillText(text,x,yText);preXText=x+textWidth/2;}x=ToFixedPoint(x);this.Canvas.strokeStyle=this.XSplitLineColor;this.Canvas.beginPath();this.Canvas.moveTo(x,top);this.Canvas.lineTo(x,bottom);this.Canvas.stroke();preDay=day;}}}else{for(var i=0;i<this.Data.Data.length;++i){var item=this.Data.Data[i];var year=parseInt(item.Date/10000);if(i==0){var text=''+year;var x=this.ChartBorder.GetLeft();var textWidth=this.Canvas.measureText(text).width+2;this.Canvas.textAlign="left";this.Canvas.fillText(text,x,yText);preXText=x+textWidth;preYear=year;continue;}if(year!=preYear){var text=''+year;var x=this.GetXFromIndex(i);var textWidth=this.Canvas.measureText(text).width+2;if(x-textWidth/2>preXText){this.Canvas.textAlign="center";this.Canvas.fillText(text,x,yText);preXText=x+textWidth/2;}x=ToFixedPoint(x);this.Canvas.strokeStyle=this.XSplitLineColor;this.Canvas.beginPath();this.Canvas.moveTo(x,top);this.Canvas.lineTo(x,bottom);this.Canvas.stroke();preYear=year;}}}};}/////////////////////////////////////////////////////////////////////////////////////////////////
13075
+ this.GetXData=function(x){if(x<=this.ChartBorder.GetLeft())return 0;if(x>=this.ChartBorder.GetRight())return this.XPointCount;return(x-this.ChartBorder.GetLeft())*(this.XPointCount*1.0/this.ChartBorder.GetWidth());};this.GetPreSetpWidth=function(){return this.XPointCount*1.0/this.ChartBorder.GetWidth();};this.DrawVertical=function(){if(this.ChartBorder.Bottom<=5)return;if(!this.Data||!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data))return;var item=this.Data.Data[0];var preYear=parseInt(item.Date/10000);var preDay=item.Date%10000;this.Canvas.font=this.XSplitTextFont;this.Canvas.fillStyle=this.XSplitTextColor;this.Canvas.textBaseline="top";var yText=this.ChartBorder.GetBottom()+2;var top=this.ChartBorder.GetTop();var bottom=this.ChartBorder.GetBottom();var preXText=0;if(ChartData.IsMilliSecondPeriod(this.Data.Period)){var preHour=null;for(var i=0;i<this.Data.Data.length;++i){var item=this.Data.Data[i];var day=item.Date%10000;var time=parseInt(item.Time/1000);var hour=parseInt(time/10000);if(i==0){var text=IFrameSplitOperator.FormatDateString(item.Date,"MM-DD");var x=this.ChartBorder.GetLeft();this.Canvas.textAlign="left";this.Canvas.fillText(text,x,yText);var textWidth=this.Canvas.measureText(text).width+2;preXText=x+textWidth;preDay=day;preHour=hour;continue;}if(hour!=preHour){var text=IFrameSplitOperator.FormatTimeString(item.Time,"HH:MM:SS.fff");var x=this.GetXFromIndex(i);var textWidth=this.Canvas.measureText(text).width+2;if(x-textWidth/2>preXText){this.Canvas.textAlign="center";this.Canvas.fillText(text,x,yText);preXText=x+textWidth/2;}x=ToFixedPoint(x);this.Canvas.strokeStyle=this.XSplitLineColor;this.Canvas.beginPath();this.Canvas.moveTo(x,top);this.Canvas.lineTo(x,bottom);this.Canvas.stroke();preHour=hour;}}}else if(ChartData.IsMinutePeriod(this.Data.Period,true)){for(var i=0;i<this.Data.Data.length;++i){var item=this.Data.Data[i];var day=item.Date%10000;if(i==0){var text=IFrameSplitOperator.FormatDateString(item.Date,"MM-DD");var x=this.ChartBorder.GetLeft();this.Canvas.textAlign="left";this.Canvas.fillText(text,x,yText);var textWidth=this.Canvas.measureText(text).width+2;preXText=x+textWidth;preDay=day;continue;}if(day!=preDay){var text=IFrameSplitOperator.FormatDateString(item.Date,"MM-DD");var x=this.GetXFromIndex(i);var textWidth=this.Canvas.measureText(text).width+2;if(x-textWidth/2>preXText){this.Canvas.textAlign="center";this.Canvas.fillText(text,x,yText);preXText=x+textWidth/2;}x=ToFixedPoint(x);this.Canvas.strokeStyle=this.XSplitLineColor;this.Canvas.beginPath();this.Canvas.moveTo(x,top);this.Canvas.lineTo(x,bottom);this.Canvas.stroke();preDay=day;}}}else{for(var i=0;i<this.Data.Data.length;++i){var item=this.Data.Data[i];var year=parseInt(item.Date/10000);if(i==0){var text=''+year;var x=this.ChartBorder.GetLeft();var textWidth=this.Canvas.measureText(text).width+2;this.Canvas.textAlign="left";this.Canvas.fillText(text,x,yText);preXText=x+textWidth;preYear=year;continue;}if(year!=preYear){var text=''+year;var x=this.GetXFromIndex(i);var textWidth=this.Canvas.measureText(text).width+2;if(x-textWidth/2>preXText){this.Canvas.textAlign="center";this.Canvas.fillText(text,x,yText);preXText=x+textWidth/2;}x=ToFixedPoint(x);this.Canvas.strokeStyle=this.XSplitLineColor;this.Canvas.beginPath();this.Canvas.moveTo(x,top);this.Canvas.lineTo(x,bottom);this.Canvas.stroke();preYear=year;}}}};this.PtInClient=function(x,y){var left=ToFixedPoint(this.ChartBorder.GetLeft());var top=ToFixedPoint(this.ChartBorder.GetTop());var right=ToFixedPoint(this.ChartBorder.GetRight());var bottom=ToFixedPoint(this.ChartBorder.GetBottom());if(x>=left&&x<=right&&y>=top&&y<=bottom)return true;return false;};}/////////////////////////////////////////////////////////////////////////////////////////////////
13067
13076
  // 滑块
13068
13077
  //
13069
13078
  /////////////////////////////////////////////////////////////////////////////////////////////////
@@ -13191,7 +13200,7 @@ hisData.Symbol=message.symbol;}var stockObj={HQDataType:HQ_DATA_TYPE.KLINE_ID,St
13191
13200
  this.ExecuteScript(item,data);}this.Status=0;}};this.OnExecuteFinish=function(data,indexInfo,jsExectute,jobInfo){var message={Data:data,IndexInfo:indexInfo,ID:JSCHART_WORKER_MESSAGE_ID.FINISH_EXECUTE_SCRIPT,JobInfo:jobInfo};postMessage(message);};this.OnExecuteError=function(error,indexInfo,jobData){var message={IndexInfo:indexInfo,ID:JSCHART_WORKER_MESSAGE_ID.ERROR_EXECUTE_SCRIPT,Error:error};postMessage(message);};}/********************************************************************************
13192
13201
  * 版本信息输出
13193
13202
  *
13194
- */var HQCHART_VERSION="1.1.13444";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();//把给外界调用的方法暴露出来
13203
+ */var HQCHART_VERSION="1.1.13454";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();//把给外界调用的方法暴露出来
13195
13204
  exports.default=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
13196
13205
  // BaseIndex:BaseIndex,
13197
13206
  // ChartLine:ChartLine,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hqchart",
3
- "version": "1.1.13445",
3
+ "version": "1.1.13455",
4
4
  "description": "HQChart - H5, 微信小程序 沪深/港股/数字货币/期货/美股 K线图(kline),走势图,缩放,拖拽,十字光标,画图工具,截图,筹码图. 分析家语法,通达信语法,(麦语法),第3方数据对接",
5
5
  "main": "lib/main.js",
6
6
  "scripts": {
@@ -18189,7 +18189,8 @@ function JSExecute(ast,option)
18189
18189
  return this.SymbolData.GetSymbolPeriodCacheData(JSComplierHelper.GetConvertValueName(funcName),args[0]);
18190
18190
 
18191
18191
  case "SYSPARAM":
18192
- return this.SymbolData.SysParam(args[0], this);
18192
+ node.Out=this.SymbolData.SysParam(args[0], this);
18193
+ break;
18193
18194
 
18194
18195
  case "TESTSKIP":
18195
18196
  var bExit=this.Algorithm.TESTSKIP(args[0],node);
@@ -2583,6 +2583,8 @@ var JSCHART_EVENT_ID=
2583
2583
  ON_CREATE_RIGHT_MENU:152, //创建右键菜单
2584
2584
 
2585
2585
  ON_FORMAT_CALL_AUCTION_INDEX_TITLE:153, //集合竞价指标窗口标题内容
2586
+
2587
+ ON_FORMAT_KLINE_HIGH_LOW_TITLE:154, //K线最高最低价格式化内容
2586
2588
  }
2587
2589
 
2588
2590
  var JSCHART_OPERATOR_ID=
@@ -26228,11 +26230,37 @@ function ChartKLine()
26228
26230
  }
26229
26231
  }
26230
26232
 
26233
+ this.OnFormatHighLowTitle=function(ptMax, ptMin)
26234
+ {
26235
+ if (!ptMax || !ptMin) return null;
26236
+ if (!IFrameSplitOperator.IsNumber(ptMax.Value) || !IFrameSplitOperator.IsNumber(ptMin.Value)) return null;
26237
+
26238
+ var defaultfloatPrecision=GetfloatPrecision(this.Symbol); //小数位数
26239
+ var title=
26240
+ {
26241
+ High:ptMax.Value.toFixed(defaultfloatPrecision),
26242
+ Low:ptMin.Value.toFixed(defaultfloatPrecision)
26243
+ };
26244
+
26245
+ if (!this.GetEventCallback) return title;
26246
+ var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_FORMAT_KLINE_HIGH_LOW_TITLE);
26247
+ if (!event || !event.Callback) return title;
26248
+
26249
+ var data={ Max:ptMax, Min:ptMin, Symbol:this.Symbol, Title:{ High:title.High, Low:title.Low }, Decimal:defaultfloatPrecision, PreventDefault:false };
26250
+ event.Callback(event, data, this);
26251
+ if (data.PreventDefault) return data.Title; //使用外部回调的数值
26252
+
26253
+ return title;
26254
+ }
26255
+
26231
26256
  this.DrawMaxMinPrice=function(ptMax,ptMin)
26232
26257
  {
26233
26258
  if (ptMax.X==null || ptMax.Y==null || ptMax.Value==null) return;
26234
26259
  if (ptMin.X==null || ptMin.Y==null || ptMin.Value==null) return;
26235
26260
 
26261
+ var title=this.OnFormatHighLowTitle(ptMax,ptMin);
26262
+ if (!title) return;
26263
+
26236
26264
  var leftArrow=g_JSChartResource.KLine.MaxMin.LeftArrow;
26237
26265
  var rightArrow=g_JSChartResource.KLine.MaxMin.RightArrow;
26238
26266
  var highYOffset=g_JSChartResource.KLine.MaxMin.HighYOffset;
@@ -26240,26 +26268,32 @@ function ChartKLine()
26240
26268
 
26241
26269
  var defaultfloatPrecision=GetfloatPrecision(this.Symbol);
26242
26270
  this.Canvas.font=this.TextFont;
26243
- this.Canvas.fillStyle=this.TextColor;
26271
+
26244
26272
  var top=this.ChartBorder.GetTopEx();
26245
26273
  var bottom=this.ChartBorder.GetBottomEx();
26246
26274
 
26247
26275
  var ptTop=ptMax;
26276
+ var text=title.High;
26277
+ var textColor=this.TextColor;
26248
26278
  if (this.ChartFrame.CoordinateType==1) //反转坐标
26249
26279
  {
26250
26280
  if (ptMax.Y<ptMin.Y) ptTop=ptMin;
26251
26281
  this.Canvas.textBaseline='top';
26282
+ var text=title.Low;
26283
+ if (title.LowColor) textColor=title.LowColor;
26252
26284
  }
26253
26285
  else
26254
26286
  {
26255
26287
  if (ptMax.Y>ptMin.Y) ptTop=ptMin;
26256
26288
  this.Canvas.textBaseline='bottom';
26289
+ if (title.HighColor) textColor=title.HighColor;
26257
26290
  }
26258
-
26291
+
26292
+ this.Canvas.fillStyle=textColor;
26259
26293
  this.Canvas.textAlign=ptTop.Align;
26260
26294
  var left=ptTop.Align=='left'?ptTop.X:ptTop.X;
26261
26295
  if (IFrameSplitOperator.IsNumber(highYOffset)) ptTop.Y+=highYOffset;
26262
- var text=ptTop.Value.toFixed(defaultfloatPrecision);
26296
+ //var text=ptTop.Value.toFixed(defaultfloatPrecision);
26263
26297
  if (ptTop.Align=='left') text=leftArrow+text;
26264
26298
  else text=text+rightArrow;
26265
26299
  if (ptTop.Y>(top-2))
@@ -26269,21 +26303,27 @@ function ChartKLine()
26269
26303
  }
26270
26304
 
26271
26305
  var ptBottom=ptMin;
26306
+ var text=title.Low;
26307
+ var textColor=this.TextColor;
26272
26308
  if (this.ChartFrame.CoordinateType==1)
26273
26309
  {
26274
26310
  if (ptMin.Y>ptMax.Y) ptBottom=ptMax;
26275
26311
  this.Canvas.textBaseline='bottom';
26312
+ var text=title.High;
26313
+ if (title.HighColor) textColor=title.HighColor;
26276
26314
  }
26277
26315
  else
26278
26316
  {
26279
26317
  if (ptMax.Y>ptMin.Y) ptTop=ptMin;
26280
26318
  this.Canvas.textBaseline='top';
26319
+ if (title.LowColor) textColor=title.LowColor;
26281
26320
  }
26321
+
26322
+ this.Canvas.fillStyle=textColor;
26282
26323
  this.Canvas.textAlign=ptBottom.Align;
26283
-
26284
26324
  var left=ptBottom.Align=='left'?ptBottom.X:ptBottom.X;
26285
26325
  if (IFrameSplitOperator.IsNumber(lowYOffset)) ptBottom.Y+=lowYOffset;
26286
- var text=ptMin.Value.toFixed(defaultfloatPrecision);
26326
+ //var text=ptMin.Value.toFixed(defaultfloatPrecision);
26287
26327
  if (ptBottom.Align=='left') text=leftArrow+text;
26288
26328
  else text=text+rightArrow;
26289
26329
  if (ptBottom.Y<(bottom+1))
@@ -26297,13 +26337,15 @@ function ChartKLine()
26297
26337
  {
26298
26338
  if (ptMax.X==null || ptMax.Y==null || ptMax.Value==null) return;
26299
26339
  if (ptMin.X==null || ptMin.Y==null || ptMin.Value==null) return;
26340
+ var title=this.OnFormatHighLowTitle(ptMax,ptMin);
26341
+ if (!title) return;
26300
26342
 
26301
26343
  var leftArrow=g_JSChartResource.KLine.MaxMin.LeftArrow;
26302
26344
  var rightArrow=g_JSChartResource.KLine.MaxMin.RightArrow;
26303
26345
  var highYOffset=g_JSChartResource.KLine.MaxMin.HighYOffset;
26304
26346
  var lowYOffset=g_JSChartResource.KLine.MaxMin.LowYOffset;
26305
26347
 
26306
- var defaultfloatPrecision=GetfloatPrecision(this.Symbol);
26348
+ //var defaultfloatPrecision=GetfloatPrecision(this.Symbol);
26307
26349
  var xText=ptMax.Y;
26308
26350
  var yText=ptMax.X;
26309
26351
  if (IFrameSplitOperator.IsNumber(highYOffset)) xText+=highYOffset;
@@ -26311,11 +26353,13 @@ function ChartKLine()
26311
26353
  this.Canvas.translate(xText, yText);
26312
26354
  this.Canvas.rotate(90 * Math.PI / 180);
26313
26355
 
26356
+ var text=title.High;
26314
26357
  this.Canvas.font=this.TextFont;
26315
- this.Canvas.fillStyle=this.TextColor;
26358
+ if (title.HighColor) this.Canvas.fillStyle=title.HighColor;
26359
+ else this.Canvas.fillStyle=this.TextColor;
26316
26360
  this.Canvas.textAlign=ptMax.Align;
26317
26361
  this.Canvas.textBaseline='bottom';
26318
- var text=ptMax.Value.toFixed(defaultfloatPrecision);
26362
+ //var text=ptMax.Value.toFixed(defaultfloatPrecision);
26319
26363
  if (ptMax.Align=='left') text=leftArrow+text;
26320
26364
  else text=text+rightArrow;
26321
26365
  this.Canvas.fillText(text,0,0);
@@ -26329,11 +26373,13 @@ function ChartKLine()
26329
26373
  this.Canvas.translate(xText, yText);
26330
26374
  this.Canvas.rotate(90 * Math.PI / 180);
26331
26375
 
26376
+ var text=title.Low;
26332
26377
  this.Canvas.font=this.TextFont;
26333
- this.Canvas.fillStyle=this.TextColor;
26378
+ if (title.LowColor) this.Canvas.fillStyle=title.LowColor;
26379
+ else this.Canvas.fillStyle=this.TextColor;
26334
26380
  this.Canvas.textAlign=ptMin.Align;
26335
26381
  this.Canvas.textBaseline='top';
26336
- var text=ptMin.Value.toFixed(defaultfloatPrecision);
26382
+ //var text=ptMin.Value.toFixed(defaultfloatPrecision);
26337
26383
  if (ptMin.Align=='left') text=leftArrow+text;
26338
26384
  else text=text+rightArrow;
26339
26385
  this.Canvas.fillText(text,0,0);
@@ -78954,6 +79000,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
78954
79000
  this.TitlePaint[0].LanguageID=this.LanguageID;
78955
79001
  this.TitlePaint[0].CallAcutionXOperator=new CallAcutionXOperator();
78956
79002
  this.TitlePaint[0].CallAcutionXOperator.Frame=this.Frame.SubFrame[0].Frame;
79003
+ this.TitlePaint[0].HQChart=this;
78957
79004
  }
78958
79005
 
78959
79006
  //切换成 脚本指标
@@ -431,7 +431,28 @@ function JSScrollBarChartContainer(uielement)
431
431
  if (this.SliderChart)
432
432
  {
433
433
  var clickData=this.SliderChart.PtInChart(x,y);
434
- if (!clickData) return;
434
+ if (!clickData)
435
+ {
436
+ if (!this.Frame.PtInClient(x,y)) return;
437
+
438
+ //滚动块直接移动到鼠标点击的位置
439
+ var index=this.Frame.GetXData(x);
440
+ index=Math.round(index);
441
+ var pageRange=this.GetPageRange();
442
+ var showCount=pageRange.ShowCount;
443
+ var start=index-parseInt(showCount/2);
444
+ if (start<0) start=0;
445
+ var end=start+showCount;
446
+ if (end>=this.Frame.XPointCount)
447
+ {
448
+ end=this.Frame.XPointCount-1;
449
+ start=end-showCount;
450
+ }
451
+
452
+ var drag={ UpdateData:{ StartIndex:start, EndIndex:end, Type:3 } };
453
+ this.DragUpdate(drag);
454
+ return;
455
+ }
435
456
 
436
457
  this.DragSlider={ Click:{ X:e.clientX, Y:e.clientY }, LastMove:{X:e.clientX, Y:e.clientY}, Data:clickData };
437
458
  this.DragSlider.DrawCount=0; //重绘次数
@@ -441,6 +462,7 @@ function JSScrollBarChartContainer(uielement)
441
462
  document.onmouseup=(e)=> { this.DocOnMouseUp(e); }
442
463
  }
443
464
 
465
+
444
466
  //去掉右键菜单
445
467
  this.UIOnContextMenu=function(e)
446
468
  {
@@ -679,6 +701,9 @@ function JSScrollBarChartContainer(uielement)
679
701
  //移动滑块
680
702
  this.UpdateXDataOffset=function(obj)
681
703
  {
704
+ if (!obj) return;
705
+
706
+ var type=obj.Type;
682
707
  if (obj.Type==0)
683
708
  {
684
709
  var start=this.Frame.GetXData(obj.XStart);
@@ -700,11 +725,17 @@ function JSScrollBarChartContainer(uielement)
700
725
  end=parseInt(end);
701
726
  this.XOffsetData.End=end;
702
727
  }
728
+ else if (obj.Type==3)
729
+ {
730
+ this.XOffsetData.End=obj.EndIndex;
731
+ this.XOffsetData.Start=obj.StartIndex;
732
+ type=0;
733
+ }
703
734
 
704
735
  var endItem=this.SourceData.Data[this.XOffsetData.End];
705
736
  var startItem=this.SourceData.Data[this.XOffsetData.Start];
706
737
 
707
- var sendData={ Type:obj.Type, Count:this.XOffsetData.Count };
738
+ var sendData={ Type:type, Count:this.XOffsetData.Count };
708
739
  if (this.XOffsetData.End>this.XOffsetData.Start)
709
740
  {
710
741
  sendData.Start={ Index:this.XOffsetData.Start, Item:startItem};
@@ -1079,6 +1110,18 @@ function JSScrollBarFrame()
1079
1110
  }
1080
1111
  }
1081
1112
  }
1113
+
1114
+ this.PtInClient=function(x,y)
1115
+ {
1116
+ var left=ToFixedPoint(this.ChartBorder.GetLeft());
1117
+ var top=ToFixedPoint(this.ChartBorder.GetTop());
1118
+ var right=ToFixedPoint(this.ChartBorder.GetRight());
1119
+ var bottom=ToFixedPoint(this.ChartBorder.GetBottom());
1120
+
1121
+ if (x>=left && x<=right && y>=top && y<=bottom) return true;
1122
+
1123
+ return false;
1124
+ }
1082
1125
  }
1083
1126
 
1084
1127
 
@@ -1263,6 +1306,8 @@ function SliderChart()
1263
1306
  }
1264
1307
  }
1265
1308
 
1309
+
1310
+
1266
1311
  ///////////////////////////////////////////////////////////////////////////////////////////////
1267
1312
  // 滚动条K线背景色
1268
1313
  //
@@ -6508,6 +6508,8 @@ var JSCHART_EVENT_ID=
6508
6508
  ON_CREATE_RIGHT_MENU:152, //创建右键菜单
6509
6509
 
6510
6510
  ON_FORMAT_CALL_AUCTION_INDEX_TITLE:153, //集合竞价指标窗口标题内容
6511
+
6512
+ ON_FORMAT_KLINE_HIGH_LOW_TITLE:154, //K线最高最低价格式化内容
6511
6513
  }
6512
6514
 
6513
6515
  var JSCHART_OPERATOR_ID=
@@ -30153,11 +30155,37 @@ function ChartKLine()
30153
30155
  }
30154
30156
  }
30155
30157
 
30158
+ this.OnFormatHighLowTitle=function(ptMax, ptMin)
30159
+ {
30160
+ if (!ptMax || !ptMin) return null;
30161
+ if (!IFrameSplitOperator.IsNumber(ptMax.Value) || !IFrameSplitOperator.IsNumber(ptMin.Value)) return null;
30162
+
30163
+ var defaultfloatPrecision=GetfloatPrecision(this.Symbol); //小数位数
30164
+ var title=
30165
+ {
30166
+ High:ptMax.Value.toFixed(defaultfloatPrecision),
30167
+ Low:ptMin.Value.toFixed(defaultfloatPrecision)
30168
+ };
30169
+
30170
+ if (!this.GetEventCallback) return title;
30171
+ var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_FORMAT_KLINE_HIGH_LOW_TITLE);
30172
+ if (!event || !event.Callback) return title;
30173
+
30174
+ var data={ Max:ptMax, Min:ptMin, Symbol:this.Symbol, Title:{ High:title.High, Low:title.Low }, Decimal:defaultfloatPrecision, PreventDefault:false };
30175
+ event.Callback(event, data, this);
30176
+ if (data.PreventDefault) return data.Title; //使用外部回调的数值
30177
+
30178
+ return title;
30179
+ }
30180
+
30156
30181
  this.DrawMaxMinPrice=function(ptMax,ptMin)
30157
30182
  {
30158
30183
  if (ptMax.X==null || ptMax.Y==null || ptMax.Value==null) return;
30159
30184
  if (ptMin.X==null || ptMin.Y==null || ptMin.Value==null) return;
30160
30185
 
30186
+ var title=this.OnFormatHighLowTitle(ptMax,ptMin);
30187
+ if (!title) return;
30188
+
30161
30189
  var leftArrow=g_JSChartResource.KLine.MaxMin.LeftArrow;
30162
30190
  var rightArrow=g_JSChartResource.KLine.MaxMin.RightArrow;
30163
30191
  var highYOffset=g_JSChartResource.KLine.MaxMin.HighYOffset;
@@ -30165,26 +30193,32 @@ function ChartKLine()
30165
30193
 
30166
30194
  var defaultfloatPrecision=GetfloatPrecision(this.Symbol);
30167
30195
  this.Canvas.font=this.TextFont;
30168
- this.Canvas.fillStyle=this.TextColor;
30196
+
30169
30197
  var top=this.ChartBorder.GetTopEx();
30170
30198
  var bottom=this.ChartBorder.GetBottomEx();
30171
30199
 
30172
30200
  var ptTop=ptMax;
30201
+ var text=title.High;
30202
+ var textColor=this.TextColor;
30173
30203
  if (this.ChartFrame.CoordinateType==1) //反转坐标
30174
30204
  {
30175
30205
  if (ptMax.Y<ptMin.Y) ptTop=ptMin;
30176
30206
  this.Canvas.textBaseline='top';
30207
+ var text=title.Low;
30208
+ if (title.LowColor) textColor=title.LowColor;
30177
30209
  }
30178
30210
  else
30179
30211
  {
30180
30212
  if (ptMax.Y>ptMin.Y) ptTop=ptMin;
30181
30213
  this.Canvas.textBaseline='bottom';
30214
+ if (title.HighColor) textColor=title.HighColor;
30182
30215
  }
30183
-
30216
+
30217
+ this.Canvas.fillStyle=textColor;
30184
30218
  this.Canvas.textAlign=ptTop.Align;
30185
30219
  var left=ptTop.Align=='left'?ptTop.X:ptTop.X;
30186
30220
  if (IFrameSplitOperator.IsNumber(highYOffset)) ptTop.Y+=highYOffset;
30187
- var text=ptTop.Value.toFixed(defaultfloatPrecision);
30221
+ //var text=ptTop.Value.toFixed(defaultfloatPrecision);
30188
30222
  if (ptTop.Align=='left') text=leftArrow+text;
30189
30223
  else text=text+rightArrow;
30190
30224
  if (ptTop.Y>(top-2))
@@ -30194,21 +30228,27 @@ function ChartKLine()
30194
30228
  }
30195
30229
 
30196
30230
  var ptBottom=ptMin;
30231
+ var text=title.Low;
30232
+ var textColor=this.TextColor;
30197
30233
  if (this.ChartFrame.CoordinateType==1)
30198
30234
  {
30199
30235
  if (ptMin.Y>ptMax.Y) ptBottom=ptMax;
30200
30236
  this.Canvas.textBaseline='bottom';
30237
+ var text=title.High;
30238
+ if (title.HighColor) textColor=title.HighColor;
30201
30239
  }
30202
30240
  else
30203
30241
  {
30204
30242
  if (ptMax.Y>ptMin.Y) ptTop=ptMin;
30205
30243
  this.Canvas.textBaseline='top';
30244
+ if (title.LowColor) textColor=title.LowColor;
30206
30245
  }
30246
+
30247
+ this.Canvas.fillStyle=textColor;
30207
30248
  this.Canvas.textAlign=ptBottom.Align;
30208
-
30209
30249
  var left=ptBottom.Align=='left'?ptBottom.X:ptBottom.X;
30210
30250
  if (IFrameSplitOperator.IsNumber(lowYOffset)) ptBottom.Y+=lowYOffset;
30211
- var text=ptMin.Value.toFixed(defaultfloatPrecision);
30251
+ //var text=ptMin.Value.toFixed(defaultfloatPrecision);
30212
30252
  if (ptBottom.Align=='left') text=leftArrow+text;
30213
30253
  else text=text+rightArrow;
30214
30254
  if (ptBottom.Y<(bottom+1))
@@ -30222,13 +30262,15 @@ function ChartKLine()
30222
30262
  {
30223
30263
  if (ptMax.X==null || ptMax.Y==null || ptMax.Value==null) return;
30224
30264
  if (ptMin.X==null || ptMin.Y==null || ptMin.Value==null) return;
30265
+ var title=this.OnFormatHighLowTitle(ptMax,ptMin);
30266
+ if (!title) return;
30225
30267
 
30226
30268
  var leftArrow=g_JSChartResource.KLine.MaxMin.LeftArrow;
30227
30269
  var rightArrow=g_JSChartResource.KLine.MaxMin.RightArrow;
30228
30270
  var highYOffset=g_JSChartResource.KLine.MaxMin.HighYOffset;
30229
30271
  var lowYOffset=g_JSChartResource.KLine.MaxMin.LowYOffset;
30230
30272
 
30231
- var defaultfloatPrecision=GetfloatPrecision(this.Symbol);
30273
+ //var defaultfloatPrecision=GetfloatPrecision(this.Symbol);
30232
30274
  var xText=ptMax.Y;
30233
30275
  var yText=ptMax.X;
30234
30276
  if (IFrameSplitOperator.IsNumber(highYOffset)) xText+=highYOffset;
@@ -30236,11 +30278,13 @@ function ChartKLine()
30236
30278
  this.Canvas.translate(xText, yText);
30237
30279
  this.Canvas.rotate(90 * Math.PI / 180);
30238
30280
 
30281
+ var text=title.High;
30239
30282
  this.Canvas.font=this.TextFont;
30240
- this.Canvas.fillStyle=this.TextColor;
30283
+ if (title.HighColor) this.Canvas.fillStyle=title.HighColor;
30284
+ else this.Canvas.fillStyle=this.TextColor;
30241
30285
  this.Canvas.textAlign=ptMax.Align;
30242
30286
  this.Canvas.textBaseline='bottom';
30243
- var text=ptMax.Value.toFixed(defaultfloatPrecision);
30287
+ //var text=ptMax.Value.toFixed(defaultfloatPrecision);
30244
30288
  if (ptMax.Align=='left') text=leftArrow+text;
30245
30289
  else text=text+rightArrow;
30246
30290
  this.Canvas.fillText(text,0,0);
@@ -30254,11 +30298,13 @@ function ChartKLine()
30254
30298
  this.Canvas.translate(xText, yText);
30255
30299
  this.Canvas.rotate(90 * Math.PI / 180);
30256
30300
 
30301
+ var text=title.Low;
30257
30302
  this.Canvas.font=this.TextFont;
30258
- this.Canvas.fillStyle=this.TextColor;
30303
+ if (title.LowColor) this.Canvas.fillStyle=title.LowColor;
30304
+ else this.Canvas.fillStyle=this.TextColor;
30259
30305
  this.Canvas.textAlign=ptMin.Align;
30260
30306
  this.Canvas.textBaseline='top';
30261
- var text=ptMin.Value.toFixed(defaultfloatPrecision);
30307
+ //var text=ptMin.Value.toFixed(defaultfloatPrecision);
30262
30308
  if (ptMin.Align=='left') text=leftArrow+text;
30263
30309
  else text=text+rightArrow;
30264
30310
  this.Canvas.fillText(text,0,0);
@@ -82879,6 +82925,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
82879
82925
  this.TitlePaint[0].LanguageID=this.LanguageID;
82880
82926
  this.TitlePaint[0].CallAcutionXOperator=new CallAcutionXOperator();
82881
82927
  this.TitlePaint[0].CallAcutionXOperator.Frame=this.Frame.SubFrame[0].Frame;
82928
+ this.TitlePaint[0].HQChart=this;
82882
82929
  }
82883
82930
 
82884
82931
  //切换成 脚本指标
@@ -114911,7 +114958,8 @@ function JSExecute(ast,option)
114911
114958
  return this.SymbolData.GetSymbolPeriodCacheData(JSComplierHelper.GetConvertValueName(funcName),args[0]);
114912
114959
 
114913
114960
  case "SYSPARAM":
114914
- return this.SymbolData.SysParam(args[0], this);
114961
+ node.Out=this.SymbolData.SysParam(args[0], this);
114962
+ break;
114915
114963
 
114916
114964
  case "TESTSKIP":
114917
114965
  var bExit=this.Algorithm.TESTSKIP(args[0],node);
@@ -133261,7 +133309,28 @@ function JSScrollBarChartContainer(uielement)
133261
133309
  if (this.SliderChart)
133262
133310
  {
133263
133311
  var clickData=this.SliderChart.PtInChart(x,y);
133264
- if (!clickData) return;
133312
+ if (!clickData)
133313
+ {
133314
+ if (!this.Frame.PtInClient(x,y)) return;
133315
+
133316
+ //滚动块直接移动到鼠标点击的位置
133317
+ var index=this.Frame.GetXData(x);
133318
+ index=Math.round(index);
133319
+ var pageRange=this.GetPageRange();
133320
+ var showCount=pageRange.ShowCount;
133321
+ var start=index-parseInt(showCount/2);
133322
+ if (start<0) start=0;
133323
+ var end=start+showCount;
133324
+ if (end>=this.Frame.XPointCount)
133325
+ {
133326
+ end=this.Frame.XPointCount-1;
133327
+ start=end-showCount;
133328
+ }
133329
+
133330
+ var drag={ UpdateData:{ StartIndex:start, EndIndex:end, Type:3 } };
133331
+ this.DragUpdate(drag);
133332
+ return;
133333
+ }
133265
133334
 
133266
133335
  this.DragSlider={ Click:{ X:e.clientX, Y:e.clientY }, LastMove:{X:e.clientX, Y:e.clientY}, Data:clickData };
133267
133336
  this.DragSlider.DrawCount=0; //重绘次数
@@ -133271,6 +133340,7 @@ function JSScrollBarChartContainer(uielement)
133271
133340
  document.onmouseup=(e)=> { this.DocOnMouseUp(e); }
133272
133341
  }
133273
133342
 
133343
+
133274
133344
  //去掉右键菜单
133275
133345
  this.UIOnContextMenu=function(e)
133276
133346
  {
@@ -133509,6 +133579,9 @@ function JSScrollBarChartContainer(uielement)
133509
133579
  //移动滑块
133510
133580
  this.UpdateXDataOffset=function(obj)
133511
133581
  {
133582
+ if (!obj) return;
133583
+
133584
+ var type=obj.Type;
133512
133585
  if (obj.Type==0)
133513
133586
  {
133514
133587
  var start=this.Frame.GetXData(obj.XStart);
@@ -133530,11 +133603,17 @@ function JSScrollBarChartContainer(uielement)
133530
133603
  end=parseInt(end);
133531
133604
  this.XOffsetData.End=end;
133532
133605
  }
133606
+ else if (obj.Type==3)
133607
+ {
133608
+ this.XOffsetData.End=obj.EndIndex;
133609
+ this.XOffsetData.Start=obj.StartIndex;
133610
+ type=0;
133611
+ }
133533
133612
 
133534
133613
  var endItem=this.SourceData.Data[this.XOffsetData.End];
133535
133614
  var startItem=this.SourceData.Data[this.XOffsetData.Start];
133536
133615
 
133537
- var sendData={ Type:obj.Type, Count:this.XOffsetData.Count };
133616
+ var sendData={ Type:type, Count:this.XOffsetData.Count };
133538
133617
  if (this.XOffsetData.End>this.XOffsetData.Start)
133539
133618
  {
133540
133619
  sendData.Start={ Index:this.XOffsetData.Start, Item:startItem};
@@ -133909,6 +133988,18 @@ function JSScrollBarFrame()
133909
133988
  }
133910
133989
  }
133911
133990
  }
133991
+
133992
+ this.PtInClient=function(x,y)
133993
+ {
133994
+ var left=ToFixedPoint(this.ChartBorder.GetLeft());
133995
+ var top=ToFixedPoint(this.ChartBorder.GetTop());
133996
+ var right=ToFixedPoint(this.ChartBorder.GetRight());
133997
+ var bottom=ToFixedPoint(this.ChartBorder.GetBottom());
133998
+
133999
+ if (x>=left && x<=right && y>=top && y<=bottom) return true;
134000
+
134001
+ return false;
134002
+ }
133912
134003
  }
133913
134004
 
133914
134005
 
@@ -134093,6 +134184,8 @@ function SliderChart()
134093
134184
  }
134094
134185
  }
134095
134186
 
134187
+
134188
+
134096
134189
  ///////////////////////////////////////////////////////////////////////////////////////////////
134097
134190
  // 滚动条K线背景色
134098
134191
  //
@@ -134202,7 +134295,7 @@ function ScrollBarBGChart()
134202
134295
 
134203
134296
 
134204
134297
 
134205
- var HQCHART_VERSION="1.1.13444";
134298
+ var HQCHART_VERSION="1.1.13454";
134206
134299
 
134207
134300
  function PrintHQChartVersion()
134208
134301
  {
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.13444";
8
+ var HQCHART_VERSION="1.1.13454";
9
9
 
10
10
  function PrintHQChartVersion()
11
11
  {
@@ -6552,6 +6552,8 @@ var JSCHART_EVENT_ID=
6552
6552
  ON_CREATE_RIGHT_MENU:152, //创建右键菜单
6553
6553
 
6554
6554
  ON_FORMAT_CALL_AUCTION_INDEX_TITLE:153, //集合竞价指标窗口标题内容
6555
+
6556
+ ON_FORMAT_KLINE_HIGH_LOW_TITLE:154, //K线最高最低价格式化内容
6555
6557
  }
6556
6558
 
6557
6559
  var JSCHART_OPERATOR_ID=
@@ -30197,11 +30199,37 @@ function ChartKLine()
30197
30199
  }
30198
30200
  }
30199
30201
 
30202
+ this.OnFormatHighLowTitle=function(ptMax, ptMin)
30203
+ {
30204
+ if (!ptMax || !ptMin) return null;
30205
+ if (!IFrameSplitOperator.IsNumber(ptMax.Value) || !IFrameSplitOperator.IsNumber(ptMin.Value)) return null;
30206
+
30207
+ var defaultfloatPrecision=GetfloatPrecision(this.Symbol); //小数位数
30208
+ var title=
30209
+ {
30210
+ High:ptMax.Value.toFixed(defaultfloatPrecision),
30211
+ Low:ptMin.Value.toFixed(defaultfloatPrecision)
30212
+ };
30213
+
30214
+ if (!this.GetEventCallback) return title;
30215
+ var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_FORMAT_KLINE_HIGH_LOW_TITLE);
30216
+ if (!event || !event.Callback) return title;
30217
+
30218
+ var data={ Max:ptMax, Min:ptMin, Symbol:this.Symbol, Title:{ High:title.High, Low:title.Low }, Decimal:defaultfloatPrecision, PreventDefault:false };
30219
+ event.Callback(event, data, this);
30220
+ if (data.PreventDefault) return data.Title; //使用外部回调的数值
30221
+
30222
+ return title;
30223
+ }
30224
+
30200
30225
  this.DrawMaxMinPrice=function(ptMax,ptMin)
30201
30226
  {
30202
30227
  if (ptMax.X==null || ptMax.Y==null || ptMax.Value==null) return;
30203
30228
  if (ptMin.X==null || ptMin.Y==null || ptMin.Value==null) return;
30204
30229
 
30230
+ var title=this.OnFormatHighLowTitle(ptMax,ptMin);
30231
+ if (!title) return;
30232
+
30205
30233
  var leftArrow=g_JSChartResource.KLine.MaxMin.LeftArrow;
30206
30234
  var rightArrow=g_JSChartResource.KLine.MaxMin.RightArrow;
30207
30235
  var highYOffset=g_JSChartResource.KLine.MaxMin.HighYOffset;
@@ -30209,26 +30237,32 @@ function ChartKLine()
30209
30237
 
30210
30238
  var defaultfloatPrecision=GetfloatPrecision(this.Symbol);
30211
30239
  this.Canvas.font=this.TextFont;
30212
- this.Canvas.fillStyle=this.TextColor;
30240
+
30213
30241
  var top=this.ChartBorder.GetTopEx();
30214
30242
  var bottom=this.ChartBorder.GetBottomEx();
30215
30243
 
30216
30244
  var ptTop=ptMax;
30245
+ var text=title.High;
30246
+ var textColor=this.TextColor;
30217
30247
  if (this.ChartFrame.CoordinateType==1) //反转坐标
30218
30248
  {
30219
30249
  if (ptMax.Y<ptMin.Y) ptTop=ptMin;
30220
30250
  this.Canvas.textBaseline='top';
30251
+ var text=title.Low;
30252
+ if (title.LowColor) textColor=title.LowColor;
30221
30253
  }
30222
30254
  else
30223
30255
  {
30224
30256
  if (ptMax.Y>ptMin.Y) ptTop=ptMin;
30225
30257
  this.Canvas.textBaseline='bottom';
30258
+ if (title.HighColor) textColor=title.HighColor;
30226
30259
  }
30227
-
30260
+
30261
+ this.Canvas.fillStyle=textColor;
30228
30262
  this.Canvas.textAlign=ptTop.Align;
30229
30263
  var left=ptTop.Align=='left'?ptTop.X:ptTop.X;
30230
30264
  if (IFrameSplitOperator.IsNumber(highYOffset)) ptTop.Y+=highYOffset;
30231
- var text=ptTop.Value.toFixed(defaultfloatPrecision);
30265
+ //var text=ptTop.Value.toFixed(defaultfloatPrecision);
30232
30266
  if (ptTop.Align=='left') text=leftArrow+text;
30233
30267
  else text=text+rightArrow;
30234
30268
  if (ptTop.Y>(top-2))
@@ -30238,21 +30272,27 @@ function ChartKLine()
30238
30272
  }
30239
30273
 
30240
30274
  var ptBottom=ptMin;
30275
+ var text=title.Low;
30276
+ var textColor=this.TextColor;
30241
30277
  if (this.ChartFrame.CoordinateType==1)
30242
30278
  {
30243
30279
  if (ptMin.Y>ptMax.Y) ptBottom=ptMax;
30244
30280
  this.Canvas.textBaseline='bottom';
30281
+ var text=title.High;
30282
+ if (title.HighColor) textColor=title.HighColor;
30245
30283
  }
30246
30284
  else
30247
30285
  {
30248
30286
  if (ptMax.Y>ptMin.Y) ptTop=ptMin;
30249
30287
  this.Canvas.textBaseline='top';
30288
+ if (title.LowColor) textColor=title.LowColor;
30250
30289
  }
30290
+
30291
+ this.Canvas.fillStyle=textColor;
30251
30292
  this.Canvas.textAlign=ptBottom.Align;
30252
-
30253
30293
  var left=ptBottom.Align=='left'?ptBottom.X:ptBottom.X;
30254
30294
  if (IFrameSplitOperator.IsNumber(lowYOffset)) ptBottom.Y+=lowYOffset;
30255
- var text=ptMin.Value.toFixed(defaultfloatPrecision);
30295
+ //var text=ptMin.Value.toFixed(defaultfloatPrecision);
30256
30296
  if (ptBottom.Align=='left') text=leftArrow+text;
30257
30297
  else text=text+rightArrow;
30258
30298
  if (ptBottom.Y<(bottom+1))
@@ -30266,13 +30306,15 @@ function ChartKLine()
30266
30306
  {
30267
30307
  if (ptMax.X==null || ptMax.Y==null || ptMax.Value==null) return;
30268
30308
  if (ptMin.X==null || ptMin.Y==null || ptMin.Value==null) return;
30309
+ var title=this.OnFormatHighLowTitle(ptMax,ptMin);
30310
+ if (!title) return;
30269
30311
 
30270
30312
  var leftArrow=g_JSChartResource.KLine.MaxMin.LeftArrow;
30271
30313
  var rightArrow=g_JSChartResource.KLine.MaxMin.RightArrow;
30272
30314
  var highYOffset=g_JSChartResource.KLine.MaxMin.HighYOffset;
30273
30315
  var lowYOffset=g_JSChartResource.KLine.MaxMin.LowYOffset;
30274
30316
 
30275
- var defaultfloatPrecision=GetfloatPrecision(this.Symbol);
30317
+ //var defaultfloatPrecision=GetfloatPrecision(this.Symbol);
30276
30318
  var xText=ptMax.Y;
30277
30319
  var yText=ptMax.X;
30278
30320
  if (IFrameSplitOperator.IsNumber(highYOffset)) xText+=highYOffset;
@@ -30280,11 +30322,13 @@ function ChartKLine()
30280
30322
  this.Canvas.translate(xText, yText);
30281
30323
  this.Canvas.rotate(90 * Math.PI / 180);
30282
30324
 
30325
+ var text=title.High;
30283
30326
  this.Canvas.font=this.TextFont;
30284
- this.Canvas.fillStyle=this.TextColor;
30327
+ if (title.HighColor) this.Canvas.fillStyle=title.HighColor;
30328
+ else this.Canvas.fillStyle=this.TextColor;
30285
30329
  this.Canvas.textAlign=ptMax.Align;
30286
30330
  this.Canvas.textBaseline='bottom';
30287
- var text=ptMax.Value.toFixed(defaultfloatPrecision);
30331
+ //var text=ptMax.Value.toFixed(defaultfloatPrecision);
30288
30332
  if (ptMax.Align=='left') text=leftArrow+text;
30289
30333
  else text=text+rightArrow;
30290
30334
  this.Canvas.fillText(text,0,0);
@@ -30298,11 +30342,13 @@ function ChartKLine()
30298
30342
  this.Canvas.translate(xText, yText);
30299
30343
  this.Canvas.rotate(90 * Math.PI / 180);
30300
30344
 
30345
+ var text=title.Low;
30301
30346
  this.Canvas.font=this.TextFont;
30302
- this.Canvas.fillStyle=this.TextColor;
30347
+ if (title.LowColor) this.Canvas.fillStyle=title.LowColor;
30348
+ else this.Canvas.fillStyle=this.TextColor;
30303
30349
  this.Canvas.textAlign=ptMin.Align;
30304
30350
  this.Canvas.textBaseline='top';
30305
- var text=ptMin.Value.toFixed(defaultfloatPrecision);
30351
+ //var text=ptMin.Value.toFixed(defaultfloatPrecision);
30306
30352
  if (ptMin.Align=='left') text=leftArrow+text;
30307
30353
  else text=text+rightArrow;
30308
30354
  this.Canvas.fillText(text,0,0);
@@ -82923,6 +82969,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
82923
82969
  this.TitlePaint[0].LanguageID=this.LanguageID;
82924
82970
  this.TitlePaint[0].CallAcutionXOperator=new CallAcutionXOperator();
82925
82971
  this.TitlePaint[0].CallAcutionXOperator.Frame=this.Frame.SubFrame[0].Frame;
82972
+ this.TitlePaint[0].HQChart=this;
82926
82973
  }
82927
82974
 
82928
82975
  //切换成 脚本指标
@@ -114955,7 +115002,8 @@ function JSExecute(ast,option)
114955
115002
  return this.SymbolData.GetSymbolPeriodCacheData(JSComplierHelper.GetConvertValueName(funcName),args[0]);
114956
115003
 
114957
115004
  case "SYSPARAM":
114958
- return this.SymbolData.SysParam(args[0], this);
115005
+ node.Out=this.SymbolData.SysParam(args[0], this);
115006
+ break;
114959
115007
 
114960
115008
  case "TESTSKIP":
114961
115009
  var bExit=this.Algorithm.TESTSKIP(args[0],node);
@@ -135711,7 +135759,28 @@ function JSScrollBarChartContainer(uielement)
135711
135759
  if (this.SliderChart)
135712
135760
  {
135713
135761
  var clickData=this.SliderChart.PtInChart(x,y);
135714
- if (!clickData) return;
135762
+ if (!clickData)
135763
+ {
135764
+ if (!this.Frame.PtInClient(x,y)) return;
135765
+
135766
+ //滚动块直接移动到鼠标点击的位置
135767
+ var index=this.Frame.GetXData(x);
135768
+ index=Math.round(index);
135769
+ var pageRange=this.GetPageRange();
135770
+ var showCount=pageRange.ShowCount;
135771
+ var start=index-parseInt(showCount/2);
135772
+ if (start<0) start=0;
135773
+ var end=start+showCount;
135774
+ if (end>=this.Frame.XPointCount)
135775
+ {
135776
+ end=this.Frame.XPointCount-1;
135777
+ start=end-showCount;
135778
+ }
135779
+
135780
+ var drag={ UpdateData:{ StartIndex:start, EndIndex:end, Type:3 } };
135781
+ this.DragUpdate(drag);
135782
+ return;
135783
+ }
135715
135784
 
135716
135785
  this.DragSlider={ Click:{ X:e.clientX, Y:e.clientY }, LastMove:{X:e.clientX, Y:e.clientY}, Data:clickData };
135717
135786
  this.DragSlider.DrawCount=0; //重绘次数
@@ -135721,6 +135790,7 @@ function JSScrollBarChartContainer(uielement)
135721
135790
  document.onmouseup=(e)=> { this.DocOnMouseUp(e); }
135722
135791
  }
135723
135792
 
135793
+
135724
135794
  //去掉右键菜单
135725
135795
  this.UIOnContextMenu=function(e)
135726
135796
  {
@@ -135959,6 +136029,9 @@ function JSScrollBarChartContainer(uielement)
135959
136029
  //移动滑块
135960
136030
  this.UpdateXDataOffset=function(obj)
135961
136031
  {
136032
+ if (!obj) return;
136033
+
136034
+ var type=obj.Type;
135962
136035
  if (obj.Type==0)
135963
136036
  {
135964
136037
  var start=this.Frame.GetXData(obj.XStart);
@@ -135980,11 +136053,17 @@ function JSScrollBarChartContainer(uielement)
135980
136053
  end=parseInt(end);
135981
136054
  this.XOffsetData.End=end;
135982
136055
  }
136056
+ else if (obj.Type==3)
136057
+ {
136058
+ this.XOffsetData.End=obj.EndIndex;
136059
+ this.XOffsetData.Start=obj.StartIndex;
136060
+ type=0;
136061
+ }
135983
136062
 
135984
136063
  var endItem=this.SourceData.Data[this.XOffsetData.End];
135985
136064
  var startItem=this.SourceData.Data[this.XOffsetData.Start];
135986
136065
 
135987
- var sendData={ Type:obj.Type, Count:this.XOffsetData.Count };
136066
+ var sendData={ Type:type, Count:this.XOffsetData.Count };
135988
136067
  if (this.XOffsetData.End>this.XOffsetData.Start)
135989
136068
  {
135990
136069
  sendData.Start={ Index:this.XOffsetData.Start, Item:startItem};
@@ -136359,6 +136438,18 @@ function JSScrollBarFrame()
136359
136438
  }
136360
136439
  }
136361
136440
  }
136441
+
136442
+ this.PtInClient=function(x,y)
136443
+ {
136444
+ var left=ToFixedPoint(this.ChartBorder.GetLeft());
136445
+ var top=ToFixedPoint(this.ChartBorder.GetTop());
136446
+ var right=ToFixedPoint(this.ChartBorder.GetRight());
136447
+ var bottom=ToFixedPoint(this.ChartBorder.GetBottom());
136448
+
136449
+ if (x>=left && x<=right && y>=top && y<=bottom) return true;
136450
+
136451
+ return false;
136452
+ }
136362
136453
  }
136363
136454
 
136364
136455
 
@@ -136543,6 +136634,8 @@ function SliderChart()
136543
136634
  }
136544
136635
  }
136545
136636
 
136637
+
136638
+
136546
136639
  ///////////////////////////////////////////////////////////////////////////////////////////////
136547
136640
  // 滚动条K线背景色
136548
136641
  //
@@ -138143,7 +138236,7 @@ function HQChartScriptWorker()
138143
138236
 
138144
138237
 
138145
138238
 
138146
- var HQCHART_VERSION="1.1.13444";
138239
+ var HQCHART_VERSION="1.1.13454";
138147
138240
 
138148
138241
  function PrintHQChartVersion()
138149
138242
  {