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.
- package/lib/umychart.vue.js +20 -11
- package/package.json +1 -1
- package/src/jscommon/umychart.complier.js +2 -1
- package/src/jscommon/umychart.js +57 -10
- package/src/jscommon/umychart.scrollbar.js +47 -2
- package/src/jscommon/umychart.uniapp.h5/umychart.uniapp.h5.js +107 -14
- package/src/jscommon/umychart.version.js +1 -1
- package/src/jscommon/umychart.vue/umychart.vue.js +107 -14
package/lib/umychart.vue.js
CHANGED
|
@@ -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.
|
|
3437
|
-
|
|
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);
|
|
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":
|
|
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)
|
|
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:
|
|
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.
|
|
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
|
@@ -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
|
-
|
|
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);
|
package/src/jscommon/umychart.js
CHANGED
|
@@ -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
|
-
|
|
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=
|
|
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=
|
|
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)
|
|
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:
|
|
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
|
-
|
|
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=
|
|
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=
|
|
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
|
-
|
|
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)
|
|
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:
|
|
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.
|
|
134298
|
+
var HQCHART_VERSION="1.1.13454";
|
|
134206
134299
|
|
|
134207
134300
|
function PrintHQChartVersion()
|
|
134208
134301
|
{
|
|
@@ -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
|
-
|
|
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=
|
|
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=
|
|
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
|
-
|
|
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)
|
|
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:
|
|
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.
|
|
138239
|
+
var HQCHART_VERSION="1.1.13454";
|
|
138147
138240
|
|
|
138148
138241
|
function PrintHQChartVersion()
|
|
138149
138242
|
{
|