hqchart 1.1.12622 → 1.1.12631
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 +51 -13
- package/package.json +1 -1
- package/src/jscommon/umychart.complier.js +49 -5
- package/src/jscommon/umychart.js +135 -22
- package/src/jscommon/umychart.uniapp.h5/umychart.uniapp.h5.js +185 -28
- package/src/jscommon/umychart.version.js +1 -1
- package/src/jscommon/umychart.vue/umychart.vue.js +185 -28
package/lib/umychart.vue.js
CHANGED
|
@@ -5770,7 +5770,7 @@ this.PointToValue=function(){if(!this.Frame)return false;if(this.Frame.ClassName
|
|
|
5770
5770
|
this.ValueToPoint=function(){if(!this.Frame)return false;var data=this.Frame.Data;if(!data)return false;//this.UpdateXValue();
|
|
5771
5771
|
var isHScreen=this.Frame.IsHScreen;this.Point=[];for(var i=0;i<this.Value.length;++i){var item=this.Value[i];var pt=new Point();if(isHScreen){pt.Y=this.Frame.GetXFromIndex(item.XValue-data.DataOffset,false);pt.X=this.Frame.GetYFromData(item.YValue,false);}else{pt.X=this.Frame.GetXFromIndex(item.XValue-data.DataOffset,false);pt.Y=this.Frame.GetYFromData(item.YValue,false);}this.Point[i]=pt;}};this.UpdateXValue=function()//通过datetime更新x的索引
|
|
5772
5772
|
{if(!this.Frame)return false;var data=this.Frame.Data;if(!data)return false;var aryDateTime=[];for(var i=0;i<this.Value.length;++i){var item=this.Value[i];if(!item.DateTime)break;var dateTime={Date:item.DateTime.Date};if(IFrameSplitOperator.IsNumber(item.DateTime.Time))dateTime.Time=item.DateTime.Time;aryDateTime[i]=dateTime;}data.FindDataIndexByDateTime(aryDateTime);for(var i in aryDateTime){var findItem=aryDateTime[i];var valueItem=this.Value[i];if(findItem.Index>=0)valueItem.XValue=findItem.Index;}};//xStep,yStep 移动的偏移量
|
|
5773
|
-
this.Move=function(xStep,yStep){if(this.Status!=20)return
|
|
5773
|
+
this.Move=function(xStep,yStep){if(this.Status!=20)return false;if(!this.Frame)return false;var data=this.Frame.Data;if(!data)return false;if(this.MovePointIndex==null)return false;var index=parseInt(this.MovePointIndex);if(index===100)//整体移动
|
|
5774
5774
|
{if(this.IsMoveOutOfBounds(this.Point,xStep,yStep))return false;for(var i in this.Point){this.Point[i].X+=xStep;this.Point[i].Y+=yStep;}}else if(index===0||index===1||index===2||index===3||index===4||index===5){if(index<this.Point.length){this.Point[index].X+=xStep;this.Point[index].Y+=yStep;}}else{return false;}};//是否超出边界了
|
|
5775
5775
|
this.IsMoveOutOfBounds=function(aryPoint,xStep,yStep){if(!this.EnableMoveCheck)return false;if(!this.Frame)return false;if(this.Frame.ClassName=="MinuteFrame"||this.Frame.Class=="MinuteHScreenFrame")return false;var data=this.Frame.Data;if(!data)return false;if(!IFrameSplitOperator.IsNonEmptyArray(data.Data))return false;if(!IFrameSplitOperator.IsNonEmptyArray(aryPoint))return false;var isHScreen=this.Frame.IsHScreen;if(isHScreen){//TODO:横屏以后再做
|
|
5776
5776
|
return false;}else{var offset=data.DataOffset;var startIndex=0-offset;var endIndex=data.Data.length-offset;if(xStep>0){var xEnd=this.Frame.GetXFromIndex(endIndex-1,false);for(var i=0;i<aryPoint.length;++i){var item=aryPoint[i];if(item.X+xStep>xEnd)return true;}}else if(xStep<0){var xStart=this.Frame.GetXFromIndex(startIndex,false);for(var i=0;i<aryPoint.length;++i){var item=aryPoint[i];if(item.X+xStep<xStart)return true;}}return false;}};this.ClipFrame=function(){if(this.Frame.IsHScreen){var left=this.Frame.ChartBorder.GetLeftEx();var top=this.Frame.ChartBorder.GetTop();var width=this.Frame.ChartBorder.GetWidthEx();var height=this.Frame.ChartBorder.GetHeight();}else{var left=this.Frame.ChartBorder.GetLeft();var top=this.Frame.ChartBorder.GetTopEx();var width=this.Frame.ChartBorder.GetWidth();var height=this.Frame.ChartBorder.GetHeightEx();}this.Canvas.save();this.Canvas.beginPath();this.Canvas.rect(left,top,width,height);this.Canvas.clip();};//计算需要画的点的坐标option:{IsCheckX:是否检测X值, IsCheckY:是否检测Y值}
|
|
@@ -5889,8 +5889,41 @@ this.newMethod();delete this.newMethod;this.Super_SetOption=this.SetOption;//父
|
|
|
5889
5889
|
this.Super_ExportStorageData=this.ExportStorageData;this.Label;//{Text:文本, Position: 0=左, 1=右 }
|
|
5890
5890
|
this.SetOption=function(option){if(this.Super_SetOption)this.Super_SetOption(option);if(option){if(option.Label)this.Label=option.Label;}};this.ExportStorageData=function(){var storageData;if(this.Super_ExportStorageData){storageData=this.Super_ExportStorageData();if(this.Label)storageData.Label=this.Label;}return storageData;};this.PointCount=1;this.ClassName='ChartDrawPictureHorizontalLine';this.IsPointIn=this.IsPointIn_XYValue_Line;this.Font=16*GetDevicePixelRatio()+"px 微软雅黑";this.GetXYCoordinate=function(){if(this.IsFrameMinSize())return null;var drawPoint=this.CalculateDrawPoint();return this.PointRange(drawPoint);};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint();if(!drawPoint||drawPoint.length!=1)return;if(!this.Frame)return;if(this.Value.length!=1)return;if(!this.IsYValueInFrame(this.Value[0].YValue))return null;var isHScreen=this.Frame.IsHScreen;var left=this.Frame.ChartBorder.GetLeft();var right=this.Frame.ChartBorder.GetRight();if(isHScreen){left=this.Frame.ChartBorder.GetTop();right=this.Frame.ChartBorder.GetBottom();}this.ClipFrame();this.Canvas.strokeStyle=this.LineColor;this.SetLineWidth();this.Canvas.beginPath();if(isHScreen){this.Canvas.moveTo(drawPoint[0].X,left);this.Canvas.lineTo(drawPoint[0].X,right);}else{this.Canvas.moveTo(left,drawPoint[0].Y);this.Canvas.lineTo(right,drawPoint[0].Y);}this.Canvas.stroke();this.RestoreLineWidth();var line={Start:new Point(),End:new Point()};if(isHScreen){line.Start.X=drawPoint[0].X;line.Start.Y=left;line.End.X=drawPoint[0].X;line.End.Y=right;}else{line.Start.X=left;line.Start.Y=drawPoint[0].Y;line.End.X=right;line.End.Y=drawPoint[0].Y;}this.LinePoint.push(line);//画点
|
|
5891
5891
|
this.DrawPoint(drawPoint);//显示价格
|
|
5892
|
-
this.
|
|
5893
|
-
|
|
5892
|
+
this.LineText(drawPoint[0]);/*
|
|
5893
|
+
this.Canvas.fillStyle=this.LineColor;
|
|
5894
|
+
this.Canvas.font=this.Font;
|
|
5895
|
+
if (isHScreen)
|
|
5896
|
+
{
|
|
5897
|
+
this.Canvas.textAlign="left";
|
|
5898
|
+
this.Canvas.textBaseline="bottom";
|
|
5899
|
+
var xText=drawPoint[0].X;
|
|
5900
|
+
var yText=left;
|
|
5901
|
+
this.Canvas.translate(xText, yText);
|
|
5902
|
+
this.Canvas.rotate(90 * Math.PI / 180); //数据和框子旋转180度
|
|
5903
|
+
var yValue=this.Frame.GetYData(drawPoint[0].X);
|
|
5904
|
+
var text=yValue.toFixed(2);
|
|
5905
|
+
if (this.Label)
|
|
5906
|
+
{
|
|
5907
|
+
if (this.Label.Position==0) text=this.Label.Text+yValue.toFixed(2);
|
|
5908
|
+
else if (this.Label.Position==1) text=yValue.toFixed(2)+this.Label.Text;
|
|
5909
|
+
}
|
|
5910
|
+
this.Canvas.fillText(text,0,0);
|
|
5911
|
+
}
|
|
5912
|
+
else
|
|
5913
|
+
{
|
|
5914
|
+
this.Canvas.textAlign="left";
|
|
5915
|
+
this.Canvas.textBaseline="bottom";
|
|
5916
|
+
var yValue=this.Frame.GetYData(drawPoint[0].Y);
|
|
5917
|
+
var text=yValue.toFixed(2);
|
|
5918
|
+
if (this.Label)
|
|
5919
|
+
{
|
|
5920
|
+
if (this.Label.Position==0) text=this.Label.Text+yValue.toFixed(2);
|
|
5921
|
+
else if (this.Label.Position==1) text=yValue.toFixed(2)+this.Label.Text;
|
|
5922
|
+
}
|
|
5923
|
+
this.Canvas.fillText(text,left,drawPoint[0].Y);
|
|
5924
|
+
}
|
|
5925
|
+
*/this.Canvas.restore();};this.LineText=function(point){if(!point)return;var isHScreen=this.Frame.IsHScreen;var left=this.Frame.ChartBorder.GetLeft();this.Canvas.fillStyle=this.LineColor;this.Canvas.font=this.Font;if(isHScreen){left=this.Frame.ChartBorder.GetTop();this.Canvas.textAlign="left";this.Canvas.textBaseline="bottom";var xText=point.X;var yText=left;this.Canvas.translate(xText,yText);this.Canvas.rotate(90*Math.PI/180);//数据和框子旋转180度
|
|
5926
|
+
var yValue=this.Frame.GetYData(point.X);var text=yValue.toFixed(2);if(this.Label){if(this.Label.Position==0)text=this.Label.Text+yValue.toFixed(2);else if(this.Label.Position==1)text=yValue.toFixed(2)+this.Label.Text;}this.Canvas.fillText(text,2,0);}else{this.Canvas.textAlign="left";this.Canvas.textBaseline="bottom";var yValue=this.Frame.GetYData(point.Y);var text=yValue.toFixed(2);if(this.Label){if(this.Label.Position==0)text=this.Label.Text+yValue.toFixed(2);else if(this.Label.Position==1)text=yValue.toFixed(2)+this.Label.Text;}this.Canvas.fillText(text,left,point.Y);}};}//水平线2
|
|
5894
5927
|
function ChartDrawHLine(){this.newMethod=IChartDrawPicture;//派生
|
|
5895
5928
|
this.newMethod();delete this.newMethod;this.Super_SetOption=this.SetOption;//父类函数
|
|
5896
5929
|
this.Super_ExportStorageData=this.ExportStorageData;//this.Label; //{Text:文本, Position: 0=左, 1=右 2=中间 }
|
|
@@ -5987,7 +6020,7 @@ this.CalculateDrawPoint=function(){if(this.Status<2)return null;if(!this.Point.l
|
|
|
5987
6020
|
linePoint={Start:new Point(),End:new Point()};linePoint.Start.X=drawPoint[0].X;linePoint.Start.Y=drawPoint[0].Y-yMove;linePoint.End.X=drawPoint[1].X;linePoint.End.Y=drawPoint[1].Y-yMove;this.LinePoint.push(linePoint);var ptCenter=new Point();ptCenter.X=linePoint.Start.X+(linePoint.End.X-linePoint.Start.X)/2;ptCenter.Y=linePoint.Start.Y+(linePoint.End.Y-linePoint.Start.Y)/2;drawPoint[2]=ptCenter;this.Point[2]=ptCenter;var xValue=parseInt(this.Frame.GetXData(ptCenter.X))+data.DataOffset;var yValue=this.Frame.GetYData(ptCenter.Y);this.Value[2]={XValue:xValue,YValue:yValue};this.PointCount=this.Point.length;//完成以后是3个点
|
|
5988
6021
|
linePoint={Start:new Point(),End:new Point()};linePoint.Start.X=drawPoint[0].X;linePoint.Start.Y=drawPoint[0].Y-yMove/2;linePoint.End.X=drawPoint[1].X;linePoint.End.Y=drawPoint[1].Y-yMove/2;this.CenterLine.Line=linePoint;}}return drawPoint;};this.DrawArea=function(pt,pt2,pt3,pt4){this.Canvas.fillStyle=this.AreaColor;this.Canvas.beginPath();this.Canvas.moveTo(pt.X,pt.Y);this.Canvas.lineTo(pt2.X,pt2.Y);this.Canvas.lineTo(pt3.X,pt3.Y);this.Canvas.lineTo(pt4.X,pt4.Y);this.Canvas.closePath();this.Canvas.fill();};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;var drawPoint=this.CalculateDrawPoint();if(!drawPoint)return;this.AreaColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.3);this.ClipFrame();if(this.LinePoint.length==2){this.DrawArea(this.LinePoint[0].Start,this.LinePoint[0].End,this.LinePoint[1].End,this.LinePoint[1].Start);}for(var i=0;i<this.LinePoint.length;++i){var item=this.LinePoint[i];this.DrawLine(item.Start,item.End);}if(this.CenterLine.IsShow&&this.CenterLine.Line){var item=this.CenterLine.Line;this.Canvas.setLineDash(this.CenterLine.LineDash);this.DrawLine(item.Start,item.End);this.Canvas.setLineDash([]);}this.Canvas.restore();this.DrawPoint(drawPoint);//画点
|
|
5989
6022
|
};//xStep,yStep 移动的偏移量
|
|
5990
|
-
this.Move=function(xStep,yStep){if(this.Status!=20)return
|
|
6023
|
+
this.Move=function(xStep,yStep){if(this.Status!=20)return false;if(!this.Frame)return false;var data=this.Frame.Data;if(!data)return false;if(this.MovePointIndex==100)//整体移动
|
|
5991
6024
|
{for(var i=0;i<this.Point.length;++i){this.Point[i].X+=xStep;this.Point[i].Y+=yStep;}}else if(this.MovePointIndex==0||this.MovePointIndex==1){if(this.MovePointIndex<this.Point.length){this.Point[this.MovePointIndex].X+=xStep;this.Point[this.MovePointIndex].Y+=yStep;}}else if(this.MovePointIndex==2)//宽度的点要计算
|
|
5992
6025
|
{this.Point[this.MovePointIndex].X+=xStep;this.Point[this.MovePointIndex].Y+=yStep;var x=this.Point[1].X-this.Point[0].X;var y=this.Point[1].Y-this.Point[0].Y;var angle=Math.atan(Math.abs(x/y));var yMove=this.ChannelWidth/Math.sin(angle)-yStep;this.ChannelWidth=Math.sin(angle)*yMove;}};//0-10 鼠标对应的点索引 100=鼠标在正个图形上 -1 鼠标不在图形上
|
|
5993
6026
|
this.IsPointIn=function(x,y){if(!this.Frame||this.Status!=10)return-1;var data=this.Frame.Data;if(!data)return-1;//是否在点上
|
|
@@ -7279,7 +7312,12 @@ this.ClearIndexPaint();//清空指标
|
|
|
7279
7312
|
if(option){if(option.Windows&&Array.isArray(option.Windows)&&option.Windows.length>0){var windows=option.Windows;var systemScript=new JSIndexScript();for(var i in windows){if(i>=this.WindowIndex.length)break;//暂时不支持 动态增加/减少
|
|
7280
7313
|
var item=windows[i];if(!item)continue;if(item.Script){this.WindowIndex[i]=new ScriptIndex(item.Name,item.Script,item.Args,item);//脚本执行
|
|
7281
7314
|
}else if(item.API){var apiItem=item.API;this.WindowIndex[i]=new APIScriptIndex(apiItem.Name,apiItem.Script,apiItem.Args,item);}else{var indexID=item.Index;var indexInfo=systemScript.Get(indexID);if(indexInfo){var args=indexInfo.Args;if(item.Args)indexInfo.Args=item.Args;indexInfo.ID=indexID;this.WindowIndex[i]=new ScriptIndex(indexInfo.Name,indexInfo.Script,indexInfo.Args,indexInfo);//脚本执行
|
|
7282
|
-
}}}}
|
|
7315
|
+
}}}}//清空叠加股票
|
|
7316
|
+
if(option.ClearOverlay===true){for(var i in this.OverlayChartPaint){var item=this.OverlayChartPaint[i];item.IsDelete=true;}this.OverlayChartPaint=[];this.Frame.SubFrame[0].Frame.YSplitOperator.OverlayChartPaint=this.OverlayChartPaint;this.TitlePaint[0].OverlayChartPaint=this.OverlayChartPaint;//绑定叠加
|
|
7317
|
+
}//叠加股票
|
|
7318
|
+
if(open.Overlay&&IFrameSplitOperator.IsNonEmptyArray(option.Overlay)){var setSymbol=new _set2.default();for(var i=0;i<this.OverlayChartPaint.length;++i){var item=this.OverlayChartPaint[j];setSymbol.add(item.Symbol);}for(var i=0;i<option.Overlay.length;++i){var item=option.Overlay[i];if(setSymbol.has(item.Symbol))continue;var paint=new ChartOverlayMinutePriceLine();paint.Canvas=this.Canvas;paint.ChartBorder=this.Frame.SubFrame[0].Frame.ChartBorder;paint.ChartFrame=this.Frame.SubFrame[0].Frame;paint.Name="Overlay-Minute";paint.Symbol=item.Symbol;paint.Identify='Overlay-Minute-'+item.Symbol;if(item.Color)paint.Color=item.Color;//外部设置颜色
|
|
7319
|
+
else paint.Color=g_JSChartResource.OverlaySymbol.Color[g_JSChartResource.OverlaySymbol.Random%g_JSChartResource.OverlaySymbol.Color.length];++g_JSChartResource.OverlaySymbol.Random;paint.MainData=this.SourceData;//绑定主图数据
|
|
7320
|
+
if(paint.SetOption)paint.SetOption(item);this.OverlayChartPaint.push(paint);}}}this.ReloadChartDrawPicture();this.Frame.ClearUpDonwFrameYData();if(ChartData.IsDayPeriod(this.Period,true)){this.ClearStockCache();this.RequestHistoryData();//请求日线数据
|
|
7283
7321
|
//this.ReqeustKLineInfoData();
|
|
7284
7322
|
}else if(ChartData.IsMinutePeriod(this.Period,true)||ChartData.IsSecondPeriod(this.Period)||ChartData.IsMilliSecondPeriod(this.Period)){this.ClearStockCache();this.ReqeustHistoryMinuteData();//请求分钟数据
|
|
7285
7323
|
}else if(ChartData.IsTickPeriod(this.Period)){this.ClearStockCache();this.RequestTickData();}};this.ReqeustKLineInfoData=function(obj){if(obj&&obj.FunctionName=="RecvDragDayData")//增量更新
|
|
@@ -7780,10 +7818,10 @@ var item=option.Windows[i];if(!item)continue;if(item.Script){this.WindowIndex[in
|
|
|
7780
7818
|
}else if(item.API){var apiItem=item.API;this.WindowIndex[index]=new APIScriptIndex(apiItem.Name,apiItem.Script,apiItem.Args,item);}else{var indexID=item.Index;var indexInfo=systemScript.Get(indexID);if(indexInfo){var args=indexInfo.Args;if(item.Args)indexInfo.Args=item.Args;indexInfo.ID=indexID;this.WindowIndex[index]=new ScriptIndex(indexInfo.Name,indexInfo.Script,indexInfo.Args,indexInfo);//脚本执行
|
|
7781
7819
|
}}}}}if(!symbol||this.DayCount<=0){this.DrawEmpty();}else{this.ChartSplashPaint.SetTitle(this.LoadDataSplashTitle);this.ChartSplashPaint.EnableSplash(true);//增加下载动画
|
|
7782
7820
|
this.Draw();this.RequestData();}};this.SetPageInfo=function(pageInfo){if(!pageInfo)return;if(IFrameSplitOperator.IsBool(pageInfo.Enable))this.PageInfo.Enable=pageInfo.Enable;if(IFrameSplitOperator.IsNumber(pageInfo.Offset))this.PageInfo.Offset=pageInfo.Offset;if(IFrameSplitOperator.IsNumber(pageInfo.ShowDayCount))this.PageInfo.ShowDayCount=pageInfo.ShowDayCount;};this.ClearMinuteData=function(){this.SourceData=null;this.DayData=null;this.BeforeOpenData=null;this.AfterCloseData=null;this.MultiDayBeforeOpenData=null;this.MultiDayAfterCloseData=null;};this.ChangeDayCount=function(count,option){if(count<0)return;this.StopDisplayLatest();this.CancelAutoUpdate();this.AutoUpdateEvent(false,"MinuteChartContainer::ChangeDayCount");this.DayCount=count;this.ClearMinuteData();if(option&&option.PageInfo){this.SetPageInfo(option.PageInfo);this.ResetDayOffset();}if(this.DayCount>1){this.ChartDrawPicture=[];}else{this.ReloadChartDrawPicture();}this.ResetDataStatus();this.ClearIndexPaint();//清空指标
|
|
7783
|
-
this.ResetOverlaySymbolStatus();this.RequestData();};//叠加股票
|
|
7784
|
-
this.OverlaySymbol=function(symbol,option){for(var i=0;i<this.OverlayChartPaint.length;++
|
|
7821
|
+
this.ResetOverlaySymbolStatus();this.RequestData();};//叠加股票 symbol支持数据 ["600000.sh", "0000001.sz"]
|
|
7822
|
+
this.OverlaySymbol=function(symbol,option){var arySymbol=null;if(IFrameSplitOperator.IsString(symbol))arySymbol=[symbol];else if(Array.isArray(symbol))arySymbol=symbol;if(!IFrameSplitOperator.IsNonEmptyArray(arySymbol))return false;var aryNewSymbol=[];for(var i=0,j=0;i<arySymbol.length;++i){var strSymbol=arySymbol[i];var bFind=false;for(j=0;j<this.OverlayChartPaint.length;++j){var item=this.OverlayChartPaint[j];if(item.Symbol==strSymbol){bFind=true;console.warn('[MinuteChartContainer::OverlaySymbol] overlay symbol='+strSymbol+' exist.');break;}}if(!bFind)aryNewSymbol.push(strSymbol);}if(!IFrameSplitOperator.IsNonEmptyArray(arySymbol))return true;for(var i=0;i<aryNewSymbol.length;++i){var strSymbol=aryNewSymbol[i];var paint=new ChartOverlayMinutePriceLine();paint.Canvas=this.Canvas;paint.ChartBorder=this.Frame.SubFrame[0].Frame.ChartBorder;paint.ChartFrame=this.Frame.SubFrame[0].Frame;paint.Name="Overlay-Minute";paint.Symbol=strSymbol;paint.Identify='Overlay-Minute-'+strSymbol;if(option&&option.Color)paint.Color=option.Color;//外部设置颜色
|
|
7785
7823
|
else paint.Color=g_JSChartResource.OverlaySymbol.Color[g_JSChartResource.OverlaySymbol.Random%g_JSChartResource.OverlaySymbol.Color.length];++g_JSChartResource.OverlaySymbol.Random;paint.MainData=this.SourceData;//绑定主图数据
|
|
7786
|
-
if(paint.SetOption)paint.SetOption(option);this.OverlayChartPaint.push(paint);if(this.DayCount<=1)this.RequestOverlayMinuteData();//请求数据
|
|
7824
|
+
if(paint.SetOption)paint.SetOption(option);this.OverlayChartPaint.push(paint);}if(this.DayCount<=1)this.RequestOverlayMinuteData();//请求数据
|
|
7787
7825
|
else this.RequestOverlayHistoryMinuteData();return true;};this.ResetOverlaySymbolStatus=function(){for(var i in this.OverlayChartPaint){var item=this.OverlayChartPaint[i];item.Status=OVERLAY_STATUS_ID.STATUS_NONE_ID;}};//删除一个叠加股票
|
|
7788
7826
|
this.DeleteOverlaySymbol=function(symbol){for(var i in this.OverlayChartPaint){var item=this.OverlayChartPaint[i];if(item.Symbol===symbol){item.IsDelete=true;this.OverlayChartPaint.splice(i,1);this.UpdateFrameMaxMin();this.Draw();return true;}}console.warn('[MinuteChartContainer::DeleteOverlaySymbol] overlay symbol='+symbol+' not exist.');return false;};//取消叠加股票
|
|
7789
7827
|
this.ClearOverlaySymbol=function(){for(var i in this.OverlayChartPaint){var item=this.OverlayChartPaint[i];item.IsDelete=true;}this.OverlayChartPaint=[];this.Frame.SubFrame[0].Frame.YSplitOperator.OverlayChartPaint=this.OverlayChartPaint;this.TitlePaint[0].OverlayChartPaint=this.OverlayChartPaint;//绑定叠加
|
|
@@ -10351,10 +10389,10 @@ this.ALL=function(data,n){if(n<=0)n=1;var result=[];if(Array.isArray(data)){if(n
|
|
|
10351
10389
|
SUMBARS(X,A):将X向前累加直到大于等于A,返回这个区间的周期数,若所有的数据都累加后还不能达到A,则返回此时前面的总周期数.
|
|
10352
10390
|
例如:SUMBARS(VOL,CAPITAL)求完全换手到现在的周期数
|
|
10353
10391
|
*/this.SUMBARS=function(data,data2){var isArray=Array.isArray(data);var isArray2=Array.isArray(data2);var isNumber=IFrameSplitOperator.IsNumber(data);var isNumber2=IFrameSplitOperator.IsNumber(data2);var result=[];if(isArray&&isNumber2){for(var i=0,n=0;i<data.length;++i){var sum=0;var n=0;for(var j=i-1;j>=0;--j,++n){var item=data[i];if(!IFrameSplitOperator.IsNumber(item))continue;sum+=data[j];if(sum>data2){break;}}result[i]=n;}}else if(isArray&&isArray2){var count=Math.max(data.length,data2.length);for(var i=0;i<count;++i){result[i]=null;var sum=0;var n=0;var value=data2[i];if(!IFrameSplitOperator.IsNumber(value))continue;for(var j=i-1;j>=0;--j,++n){var item=data[i];if(!IFrameSplitOperator.IsNumber(item))continue;sum+=data[j];if(sum>value){break;}}result[i]=n;}}else if(isNumber&&isArray2){for(var i=0;i<data2.length;++i){result[i]=null;var sum=0;var n=0;var value=data2[i];if(!IFrameSplitOperator.IsNumber(value))continue;for(var j=i-1;j>=0;--j,++n){sum+=data;if(sum>value){break;}}result[i]=n;}}else if(isNumber&&isNumber2){//TODO: 后面再写吧
|
|
10354
|
-
}return result;};//格式化字符串 "{0}-{1}", C, O;
|
|
10355
|
-
this.STRFORMAT=function(strFormat,args,node){var aryParam=strFormat.match(/{
|
|
10356
|
-
var maxIndex=-1;for(var i=0;i<aryParam.length;++i){var item=aryParam[i];if(item.length<3)continue;var value=item.slice(1,item.length-1);var index=parseInt(value);var paramItem={Src:item,Index:index,Text:null};if(maxIndex<index)maxIndex=index;mapParam.set(index,paramItem);}var isArray=false;//是否输出数组字符串
|
|
10357
|
-
var maxCount=0;for(var i=1;i<args.length;++i){var item=args[i];if(Array.isArray(item)){isArray=true;if(maxCount<item.length)maxCount=item.length;}}if(isArray){var result=[];for(var i=0;i<maxCount;++i){var strItem=strFormat;var _iteratorNormalCompletion19=true;var _didIteratorError19=false;var _iteratorError19=undefined;try{for(var _iterator19=(0,_getIterator3.default)(mapParam),_step19;!(_iteratorNormalCompletion19=(_step19=_iterator19.next()).done);_iteratorNormalCompletion19=true){var item=_step19.value;var paramInfo=item[1];var paramItem=args[paramInfo.Index+1];var text="null";if(paramItem){if(Array.isArray(paramItem)){var value=paramItem[i];if(value)text=''+value;}else{text=''+paramItem;}}strItem=strItem.replace(paramInfo.Src,text);}}catch(err){_didIteratorError19=true;_iteratorError19=err;}finally{try{if(!_iteratorNormalCompletion19&&_iterator19.return){_iterator19.return();}}finally{if(_didIteratorError19){throw _iteratorError19;}}}result[i]=strItem;}return result;}else{var result=strFormat;var _iteratorNormalCompletion20=true;var _didIteratorError20=false;var _iteratorError20=undefined;try{for(var _iterator20=(0,_getIterator3.default)(mapParam),_step20;!(_iteratorNormalCompletion20=(_step20=_iterator20.next()).done);_iteratorNormalCompletion20=true){var item=_step20.value;var paramInfo=item[1];var paramItem=args[paramInfo.Index+1];var text="null";if(paramItem){text=''+paramItem;}result=result.replace(paramInfo.Src,text);}}catch(err){_didIteratorError20=true;_iteratorError20=err;}finally{try{if(!_iteratorNormalCompletion20&&_iterator20.return){_iterator20.return();}}finally{if(_didIteratorError20){throw _iteratorError20;}}}return result;}};//函数调用
|
|
10392
|
+
}return result;};//格式化字符串 "{0}-{1}", C, O; 小数位数 {0:0.00}
|
|
10393
|
+
this.STRFORMAT=function(strFormat,args,node){var aryParam=strFormat.match(/{[0-9.:]+}/g);if(!IFrameSplitOperator.IsNonEmptyArray(aryParam))return null;var mapParam=new _map2.default();//key=index, value={Text}
|
|
10394
|
+
var maxIndex=-1;for(var i=0;i<aryParam.length;++i){var item=aryParam[i];if(item.length<3)continue;var value=item.slice(1,item.length-1);var index=-1,decimal=-1;if(value.indexOf(":")>0){var aryTemp=value.split(":");if(aryTemp){if(aryTemp[0])index=parseInt(aryTemp[0]);if(aryTemp[1]){if(aryTemp[1].indexOf(".")>=0){var zeroCount=0;var strTemp=aryTemp[1];for(var j=strTemp.length-1;j>=0;--j){if(strTemp[j]=="0")++zeroCount;else break;}if(zeroCount>0)decimal=zeroCount;}else if(aryTemp[1]=="0"){decimal=0;}}}}else{index=parseInt(value);}if(index<0)continue;var paramItem={Src:item,Index:index,Text:null,Decimal:null};if(decimal>=0)paramItem.Decimal=decimal;if(maxIndex<index)maxIndex=index;mapParam.set(index,paramItem);}var isArray=false;//是否输出数组字符串
|
|
10395
|
+
var maxCount=0;for(var i=1;i<args.length;++i){var item=args[i];if(Array.isArray(item)){isArray=true;if(maxCount<item.length)maxCount=item.length;}}if(isArray){var result=[];for(var i=0;i<maxCount;++i){var strItem=strFormat;var _iteratorNormalCompletion19=true;var _didIteratorError19=false;var _iteratorError19=undefined;try{for(var _iterator19=(0,_getIterator3.default)(mapParam),_step19;!(_iteratorNormalCompletion19=(_step19=_iterator19.next()).done);_iteratorNormalCompletion19=true){var item=_step19.value;var paramInfo=item[1];var paramItem=args[paramInfo.Index+1];var text="null";if(paramItem){if(Array.isArray(paramItem)){var value=paramItem[i];if(value){if(IFrameSplitOperator.IsNumber(paramInfo.Decimal))text=''+value.toFixed(paramInfo.Decimal);else text=''+value;}}else{text=''+paramItem;}}strItem=strItem.replace(paramInfo.Src,text);}}catch(err){_didIteratorError19=true;_iteratorError19=err;}finally{try{if(!_iteratorNormalCompletion19&&_iterator19.return){_iterator19.return();}}finally{if(_didIteratorError19){throw _iteratorError19;}}}result[i]=strItem;}return result;}else{var result=strFormat;var _iteratorNormalCompletion20=true;var _didIteratorError20=false;var _iteratorError20=undefined;try{for(var _iterator20=(0,_getIterator3.default)(mapParam),_step20;!(_iteratorNormalCompletion20=(_step20=_iterator20.next()).done);_iteratorNormalCompletion20=true){var item=_step20.value;var paramInfo=item[1];var paramItem=args[paramInfo.Index+1];var text="null";if(paramItem){text=''+paramItem;}result=result.replace(paramInfo.Src,text);}}catch(err){_didIteratorError20=true;_iteratorError20=err;}finally{try{if(!_iteratorNormalCompletion20&&_iterator20.return){_iterator20.return();}}finally{if(_didIteratorError20){throw _iteratorError20;}}}return result;}};//函数调用
|
|
10358
10396
|
this.CallFunction=function(name,args,node,symbolData){switch(name){case'MAX':case"MAX6":return this.MAX(args,node);case'MIN':case"MIN6":return this.MIN(args,node);case'REF':return this.REF(args[0],args[1]);case"REFV":return this.REFV(args[0],args[1]);case'REFX':return this.REFX(args[0],args[1]);case"REFXV":return this.REFXV(args[0],args[1]);case"REFX1"://文华函数
|
|
10359
10397
|
return this.REFX(args[0],args[1]);case'ABS':return this.ABS(args[0]);case'MA':return this.MA(args[0],args[1]);case"EMA":return this.EMA(args[0],args[1]);case"SMA":return this.SMA(args[0],args[1],args[2]);case"DMA":return this.DMA(args[0],args[1]);case"XMA":return this.XMA(args[0],args[1]);case'EXPMA':return this.EXPMA(args[0],args[1]);case'EXPMEMA':return this.EXPMEMA(args[0],args[1]);case'COUNT':return this.COUNT(args[0],args[1]);case'LLV':return this.LLV(args[0],args[1]);case"LV":return this.LV(args[0],args[1]);case'LLVBARS':return this.LLVBARS(args[0],args[1]);case'HHV':return this.HHV(args[0],args[1]);case'HV':return this.HV(args[0],args[1]);case'HHVBARS':return this.HHVBARS(args[0],args[1]);case'MULAR':return this.MULAR(args[0],args[1]);case'CROSS':return this.CROSS(args[0],args[1]);case'LONGCROSS':return this.LONGCROSS(args[0],args[1],args[2]);case"ISVALID":return this.ISVALID(args[0]);case"CROSSDOWN":return this.CROSSDOWN(args[0],args[1]);case"CROSSUP":return this.CROSSUP(args[0],args[1]);case'AVEDEV':return this.AVEDEV(args[0],args[1]);case'STD':return this.STD(args[0],args[1]);case'IF':case'IFF':case"IFELSE":return this.IF(args[0],args[1],args[2]);case'IFN':return this.IFN(args[0],args[1],args[2]);case'NOT':return this.NOT(args[0]);case'SUM':return this.SUM(args[0],args[1]);case'RANGE':return this.RANGE(args[0],args[1],args[2]);case'EXIST':return this.EXIST(args[0],args[1]);case'EXISTR':return this.EXISTR(args[0],args[1],args[2]);case'FILTER':return this.FILTER(args[0],args[1]);case'TFILTER':return this.TFILTER(args[0],args[1],args[2]);case'SLOPE':return this.SLOPE(args[0],args[1]);case'BARSLAST':return this.BARSLAST(args[0]);case'BARSCOUNT':return this.BARSCOUNT(args[0]);case'BARSSINCEN':return this.BARSSINCEN(args[0],args[1]);case'BARSSINCE':return this.BARSSINCE(args[0]);case'LAST':return this.LAST(args[0],args[1],args[2]);case'EVERY':return this.EVERY(args[0],args[1]);case'DEVSQ':return this.DEVSQ(args[0],args[1]);case'ZIG':return this.ZIG(args[0],args[1]);case'TROUGHBARS':return this.TROUGHBARS(args[0],args[1],args[2]);case"TROUGH":return this.TROUGH(args[0],args[1],args[2]);case'PEAKBARS':return this.PEAKBARS(args[0],args[1],args[2]);case'PEAK':return this.PEAK(args[0],args[1],args[2]);case'COST':return this.COST(args[0]);case'WINNER':return this.WINNER(args[0],node);case'PPART':return this.PPART(args[0],node);case"COSTEX":return this.COSTEX(args[0],args[1],node);case"LWINNER":return this.LWINNER(args[0],args[1],node);case"PWINNER":return this.PWINNER(args[0],args[1],node);case'FORCAST':return this.FORCAST(args[0],args[1]);case"TSMA":return this.TSMA(args[0],args[1]);case'STDP':return this.STDP(args[0],args[1]);case'VAR':return this.VAR(args[0],args[1]);case'VARP':return this.VARP(args[0],args[1]);case'UPNDAY':return this.UPNDAY(args[0],args[1]);case'DOWNNDAY':return this.DOWNNDAY(args[0],args[1]);case'NDAY':return this.NDAY(args[0],args[1],args[2]);case'RELATE':return this.RELATE(args[0],args[1],args[2]);case'COVAR':return this.COVAR(args[0],args[1],args[2]);case'BETA':return this.BETA(args[0]);case'BETA2':return this.BETA2(args[0],args[1],args[2]);case'WMA':return this.WMA(args[0],args[1]);case'MEMA':return this.MEMA(args[0],args[1]);case'SUMBARS':return this.SUMBARS(args[0],args[1]);case'REVERSE':return this.REVERSE(args[0]);case'SAR':return this.SAR(args[0],args[1],args[2]);case'SARTURN':return this.SARTURN(args[0],args[1],args[2]);case'BACKSET':return this.BACKSET(args[0],args[1]);case'BETWEEN':return this.BETWEEN(args[0],args[1],args[2]);case'STRCAT':return this.STRCAT(args[0],args[1]);case'CON2STR':return this.CON2STR(args[0],args[1]);case"VAR2STR":return this.VAR2STR(args[0],args[1]);case"VARCAT":return this.VARCAT(args[0],args[1]);case"STRSPACE":return this.STRSPACE(args[0]);case"FINDSTR":return this.FINDSTR(args[0],args[1]);case"STRCMP":return this.STRCMP(args[0],args[1]);case"STRLEN":return this.STRLEN(args[0]);case"STRFORMAT":return this.STRFORMAT(args[0],args,node);case'DTPRICE':return this.DTPRICE(args[0],args[1]);case'ZTPRICE':return this.ZTPRICE(args[0],args[1]);case'MOD':return this.MOD(args[0],args[1]);case'POW':return this.POW(args[0],args[1]);case'CEILING':return this.CEILING(args[0]);case'FLOOR':return this.FLOOR(args[0]);case'FRACPART':return this.FRACPART(args[0]);case"SIGN":return this.SIGN(args[0]);case'BARSLASTCOUNT':return this.BARSLASTCOUNT(args[0]);case'INTPART':return this.INTPART(args[0]);case"CONST":return this.CONST(args[0]);case"TOPRANGE":return this.TOPRANGE(args[0]);case"LOWRANGE":return this.LOWRANGE(args[0]);case"FINDLOW":return this.FINDLOW(args[0],args[1],args[2],args[3]);case"FINDLOWBARS":return this.FINDLOWBARS(args[0],args[1],args[2],args[3]);case"FINDHIGH":return this.FINDHIGH(args[0],args[1],args[2],args[3]);case"FINDHIGHBARS":return this.FINDHIGHBARS(args[0],args[1],args[2],args[3]);case"BARSNEXT":return this.BARSNEXT(args[0]);case"HOD":return this.HOD(args[0],args[1]);case"LOD":return this.LOD(args[0],args[1]);case"AMA":return this.AMA(args[0],args[1]);case"TMA":return this.TMA(args[0],args[1],args[2]);case"ROUND":return this.ROUND(args[0]);case"ROUND2":return this.ROUND2(args[0],args[1]);case"TRMA":return this.TRMA(args[0],args[1]);case"VALUEWHEN":return this.VALUEWHEN(args[0],args[1]);case"HARMEAN":return this.HARMEAN(args[0],args[1]);case"DATETODAY":return this.DATETODAY(args[0]);case"DAYTODATE":return this.DAYTODATE(args[0]);case"TIMETOSEC":return this.TIMETOSEC(args[0]);case"SECTOTIME":return this.SECTOTIME(args[0]);case"ANY":return this.ANY(args[0],args[1]);case"ALL":return this.ALL(args[0],args[1]);case"TESTSKIP":return this.TESTSKIP(args[0],node);case"SUMBARS":return this.SUMBARS(args[0],args[1]);case"ALIGNRIGHT":return this.ALIGNRIGHT(args[0]);//三角函数
|
|
10360
10398
|
case'ATAN':return this.Trigonometric(args[0],Math.atan);case'ACOS':return this.ACOS(args[0]);case'ASIN':return this.ASIN(args[0]);case'COS':return this.Trigonometric(args[0],Math.cos);case'SIN':return this.Trigonometric(args[0],Math.sin);case'TAN':return this.Trigonometric(args[0],Math.tan);case'LN':return this.Trigonometric(args[0],Math.log);case'LOG':return this.Trigonometric(args[0],_log2.default);case'EXP':return this.Trigonometric(args[0],Math.exp);case'SQRT':return this.Trigonometric(args[0],Math.sqrt);case"RAND":return this.RAND(args[0]);default:this.ThrowUnexpectedNode(node,'函数'+name+'不存在',name);}};//调用自定义函数 返回数据格式{Out:输出数据, Draw:绘图数据(可选)}
|
|
@@ -12734,7 +12772,7 @@ hisData.Symbol=message.symbol;}var stockObj={HQDataType:HQ_DATA_TYPE.KLINE_ID,St
|
|
|
12734
12772
|
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);};}/********************************************************************************
|
|
12735
12773
|
* 版本信息输出
|
|
12736
12774
|
*
|
|
12737
|
-
*/var HQCHART_VERSION="1.1.
|
|
12775
|
+
*/var HQCHART_VERSION="1.1.12630";function PrintHQChartVersion(){var log='*************************************************************************************************************\n*\n* HQChart Ver: '+HQCHART_VERSION+' \n* \n* License: Apache License 2.0 \n* Source: https://github.com/jones2000/HQChart\n*\n*************************************************************************************************************\n';console.log(log);}PrintHQChartVersion();//把给外界调用的方法暴露出来
|
|
12738
12776
|
exports.default=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
|
|
12739
12777
|
// BaseIndex:BaseIndex,
|
|
12740
12778
|
// ChartLine:ChartLine,
|
package/package.json
CHANGED
|
@@ -8611,10 +8611,10 @@ function JSAlgorithm(errorHandler,symbolData)
|
|
|
8611
8611
|
}
|
|
8612
8612
|
|
|
8613
8613
|
|
|
8614
|
-
//格式化字符串 "{0}-{1}", C, O;
|
|
8614
|
+
//格式化字符串 "{0}-{1}", C, O; 小数位数 {0:0.00}
|
|
8615
8615
|
this.STRFORMAT=function(strFormat,args,node)
|
|
8616
8616
|
{
|
|
8617
|
-
var aryParam=strFormat.match(/{
|
|
8617
|
+
var aryParam=strFormat.match(/{[0-9.:]+}/g);
|
|
8618
8618
|
|
|
8619
8619
|
if (!IFrameSplitOperator.IsNonEmptyArray(aryParam)) return null;
|
|
8620
8620
|
|
|
@@ -8626,9 +8626,47 @@ function JSAlgorithm(errorHandler,symbolData)
|
|
|
8626
8626
|
if (item.length<3) continue;
|
|
8627
8627
|
|
|
8628
8628
|
var value=item.slice(1, item.length-1);
|
|
8629
|
-
var index
|
|
8629
|
+
var index=-1,decimal=-1;
|
|
8630
|
+
if (value.indexOf(":")>0)
|
|
8631
|
+
{
|
|
8632
|
+
var aryTemp=value.split(":");
|
|
8633
|
+
if (aryTemp)
|
|
8634
|
+
{
|
|
8635
|
+
if (aryTemp[0])
|
|
8636
|
+
index=parseInt(aryTemp[0]);
|
|
8630
8637
|
|
|
8631
|
-
|
|
8638
|
+
if (aryTemp[1])
|
|
8639
|
+
{
|
|
8640
|
+
if (aryTemp[1].indexOf(".")>=0)
|
|
8641
|
+
{
|
|
8642
|
+
var zeroCount=0;
|
|
8643
|
+
var strTemp=aryTemp[1];
|
|
8644
|
+
for(var j=strTemp.length-1; j>=0; --j)
|
|
8645
|
+
{
|
|
8646
|
+
if (strTemp[j]=="0") ++zeroCount;
|
|
8647
|
+
else break;
|
|
8648
|
+
}
|
|
8649
|
+
|
|
8650
|
+
if (zeroCount>0) decimal=zeroCount;
|
|
8651
|
+
}
|
|
8652
|
+
else if (aryTemp[1]=="0")
|
|
8653
|
+
{
|
|
8654
|
+
decimal=0;
|
|
8655
|
+
}
|
|
8656
|
+
}
|
|
8657
|
+
|
|
8658
|
+
}
|
|
8659
|
+
|
|
8660
|
+
}
|
|
8661
|
+
else
|
|
8662
|
+
{
|
|
8663
|
+
index=parseInt(value);
|
|
8664
|
+
}
|
|
8665
|
+
|
|
8666
|
+
if (index<0) continue;
|
|
8667
|
+
|
|
8668
|
+
var paramItem={ Src:item, Index:index, Text:null, Decimal:null };
|
|
8669
|
+
if (decimal>=0) paramItem.Decimal=decimal;
|
|
8632
8670
|
|
|
8633
8671
|
if (maxIndex<index) maxIndex=index;
|
|
8634
8672
|
|
|
@@ -8665,7 +8703,13 @@ function JSAlgorithm(errorHandler,symbolData)
|
|
|
8665
8703
|
if (Array.isArray(paramItem))
|
|
8666
8704
|
{
|
|
8667
8705
|
var value=paramItem[i];
|
|
8668
|
-
if (value)
|
|
8706
|
+
if (value)
|
|
8707
|
+
{
|
|
8708
|
+
if (IFrameSplitOperator.IsNumber(paramInfo.Decimal))
|
|
8709
|
+
text=`${value.toFixed(paramInfo.Decimal)}`;
|
|
8710
|
+
else
|
|
8711
|
+
text=`${value}`;
|
|
8712
|
+
}
|
|
8669
8713
|
}
|
|
8670
8714
|
else
|
|
8671
8715
|
{
|
package/src/jscommon/umychart.js
CHANGED
|
@@ -51289,7 +51289,7 @@ function IChartDrawPicture()
|
|
|
51289
51289
|
//xStep,yStep 移动的偏移量
|
|
51290
51290
|
this.Move=function(xStep,yStep)
|
|
51291
51291
|
{
|
|
51292
|
-
if (this.Status!=20) return
|
|
51292
|
+
if (this.Status!=20) return false;
|
|
51293
51293
|
if (!this.Frame) return false;
|
|
51294
51294
|
var data=this.Frame.Data;
|
|
51295
51295
|
if (!data) return false;
|
|
@@ -52981,7 +52981,8 @@ function ChartDrawPictureHorizontalLine()
|
|
|
52981
52981
|
this.DrawPoint(drawPoint);
|
|
52982
52982
|
|
|
52983
52983
|
//显示价格
|
|
52984
|
-
|
|
52984
|
+
this.LineText(drawPoint[0])
|
|
52985
|
+
/*
|
|
52985
52986
|
this.Canvas.fillStyle=this.LineColor;
|
|
52986
52987
|
this.Canvas.font=this.Font;
|
|
52987
52988
|
if (isHScreen)
|
|
@@ -53014,9 +53015,53 @@ function ChartDrawPictureHorizontalLine()
|
|
|
53014
53015
|
}
|
|
53015
53016
|
this.Canvas.fillText(text,left,drawPoint[0].Y);
|
|
53016
53017
|
}
|
|
53018
|
+
*/
|
|
53017
53019
|
|
|
53018
53020
|
this.Canvas.restore();
|
|
53019
53021
|
}
|
|
53022
|
+
|
|
53023
|
+
this.LineText=function(point)
|
|
53024
|
+
{
|
|
53025
|
+
if (!point) return;
|
|
53026
|
+
|
|
53027
|
+
var isHScreen=this.Frame.IsHScreen;
|
|
53028
|
+
var left=this.Frame.ChartBorder.GetLeft();
|
|
53029
|
+
|
|
53030
|
+
this.Canvas.fillStyle=this.LineColor;
|
|
53031
|
+
this.Canvas.font=this.Font;
|
|
53032
|
+
|
|
53033
|
+
if (isHScreen)
|
|
53034
|
+
{
|
|
53035
|
+
left=this.Frame.ChartBorder.GetTop();
|
|
53036
|
+
this.Canvas.textAlign="left";
|
|
53037
|
+
this.Canvas.textBaseline="bottom";
|
|
53038
|
+
var xText=point.X;
|
|
53039
|
+
var yText=left;
|
|
53040
|
+
this.Canvas.translate(xText, yText);
|
|
53041
|
+
this.Canvas.rotate(90 * Math.PI / 180); //数据和框子旋转180度
|
|
53042
|
+
var yValue=this.Frame.GetYData(point.X);
|
|
53043
|
+
var text=yValue.toFixed(2);
|
|
53044
|
+
if (this.Label)
|
|
53045
|
+
{
|
|
53046
|
+
if (this.Label.Position==0) text=this.Label.Text+yValue.toFixed(2);
|
|
53047
|
+
else if (this.Label.Position==1) text=yValue.toFixed(2)+this.Label.Text;
|
|
53048
|
+
}
|
|
53049
|
+
this.Canvas.fillText(text,2,0);
|
|
53050
|
+
}
|
|
53051
|
+
else
|
|
53052
|
+
{
|
|
53053
|
+
this.Canvas.textAlign="left";
|
|
53054
|
+
this.Canvas.textBaseline="bottom";
|
|
53055
|
+
var yValue=this.Frame.GetYData(point.Y);
|
|
53056
|
+
var text=yValue.toFixed(2);
|
|
53057
|
+
if (this.Label)
|
|
53058
|
+
{
|
|
53059
|
+
if (this.Label.Position==0) text=this.Label.Text+yValue.toFixed(2);
|
|
53060
|
+
else if (this.Label.Position==1) text=yValue.toFixed(2)+this.Label.Text;
|
|
53061
|
+
}
|
|
53062
|
+
this.Canvas.fillText(text,left,point.Y);
|
|
53063
|
+
}
|
|
53064
|
+
}
|
|
53020
53065
|
}
|
|
53021
53066
|
|
|
53022
53067
|
//水平线2
|
|
@@ -54714,7 +54759,7 @@ function ChartDrawPictureParallelChannel()
|
|
|
54714
54759
|
//xStep,yStep 移动的偏移量
|
|
54715
54760
|
this.Move=function(xStep,yStep)
|
|
54716
54761
|
{
|
|
54717
|
-
if (this.Status!=20) return
|
|
54762
|
+
if (this.Status!=20) return false;
|
|
54718
54763
|
if (!this.Frame) return false;
|
|
54719
54764
|
var data=this.Frame.Data;
|
|
54720
54765
|
if (!data) return false;
|
|
@@ -68992,6 +69037,53 @@ function KLineChartContainer(uielement,OffscreenElement)
|
|
|
68992
69037
|
}
|
|
68993
69038
|
}
|
|
68994
69039
|
}
|
|
69040
|
+
|
|
69041
|
+
//清空叠加股票
|
|
69042
|
+
if (option.ClearOverlay===true)
|
|
69043
|
+
{
|
|
69044
|
+
for(var i in this.OverlayChartPaint)
|
|
69045
|
+
{
|
|
69046
|
+
var item=this.OverlayChartPaint[i];
|
|
69047
|
+
item.IsDelete=true;
|
|
69048
|
+
}
|
|
69049
|
+
|
|
69050
|
+
this.OverlayChartPaint=[];
|
|
69051
|
+
this.Frame.SubFrame[0].Frame.YSplitOperator.OverlayChartPaint=this.OverlayChartPaint;
|
|
69052
|
+
this.TitlePaint[0].OverlayChartPaint=this.OverlayChartPaint; //绑定叠加
|
|
69053
|
+
}
|
|
69054
|
+
|
|
69055
|
+
//叠加股票
|
|
69056
|
+
if (open.Overlay && IFrameSplitOperator.IsNonEmptyArray(option.Overlay))
|
|
69057
|
+
{
|
|
69058
|
+
var setSymbol=new Set();
|
|
69059
|
+
for(var i=0;i<this.OverlayChartPaint.length;++i)
|
|
69060
|
+
{
|
|
69061
|
+
var item=this.OverlayChartPaint[j];
|
|
69062
|
+
setSymbol.add(item.Symbol);
|
|
69063
|
+
}
|
|
69064
|
+
|
|
69065
|
+
for(var i=0;i<option.Overlay.length;++i)
|
|
69066
|
+
{
|
|
69067
|
+
var item=option.Overlay[i];
|
|
69068
|
+
if (setSymbol.has(item.Symbol)) continue;
|
|
69069
|
+
|
|
69070
|
+
var paint=new ChartOverlayMinutePriceLine();
|
|
69071
|
+
paint.Canvas=this.Canvas;
|
|
69072
|
+
paint.ChartBorder=this.Frame.SubFrame[0].Frame.ChartBorder;
|
|
69073
|
+
paint.ChartFrame=this.Frame.SubFrame[0].Frame;
|
|
69074
|
+
paint.Name="Overlay-Minute";
|
|
69075
|
+
paint.Symbol=item.Symbol;
|
|
69076
|
+
paint.Identify=`Overlay-Minute-${item.Symbol}`;
|
|
69077
|
+
if (item.Color) paint.Color=item.Color; //外部设置颜色
|
|
69078
|
+
else paint.Color=g_JSChartResource.OverlaySymbol.Color[g_JSChartResource.OverlaySymbol.Random%g_JSChartResource.OverlaySymbol.Color.length];
|
|
69079
|
+
++g_JSChartResource.OverlaySymbol.Random;
|
|
69080
|
+
paint.MainData=this.SourceData; //绑定主图数据
|
|
69081
|
+
|
|
69082
|
+
if (paint.SetOption) paint.SetOption(item);
|
|
69083
|
+
|
|
69084
|
+
this.OverlayChartPaint.push(paint);
|
|
69085
|
+
}
|
|
69086
|
+
}
|
|
68995
69087
|
}
|
|
68996
69088
|
|
|
68997
69089
|
this.ReloadChartDrawPicture();
|
|
@@ -74153,34 +74245,55 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
74153
74245
|
this.RequestData();
|
|
74154
74246
|
}
|
|
74155
74247
|
|
|
74156
|
-
//叠加股票
|
|
74248
|
+
//叠加股票 symbol支持数据 ["600000.sh", "0000001.sz"]
|
|
74157
74249
|
this.OverlaySymbol=function(symbol,option)
|
|
74158
74250
|
{
|
|
74159
|
-
|
|
74251
|
+
var arySymbol=null;
|
|
74252
|
+
if (IFrameSplitOperator.IsString(symbol)) arySymbol=[symbol];
|
|
74253
|
+
else if (Array.isArray(symbol)) arySymbol=symbol;
|
|
74254
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(arySymbol)) return false;
|
|
74255
|
+
|
|
74256
|
+
var aryNewSymbol=[];
|
|
74257
|
+
for(var i=0, j=0;i<arySymbol.length;++i)
|
|
74160
74258
|
{
|
|
74161
|
-
var
|
|
74162
|
-
|
|
74259
|
+
var strSymbol=arySymbol[i];
|
|
74260
|
+
var bFind=false;
|
|
74261
|
+
for(j=0;j<this.OverlayChartPaint.length; ++j)
|
|
74163
74262
|
{
|
|
74164
|
-
|
|
74165
|
-
|
|
74263
|
+
var item=this.OverlayChartPaint[j];
|
|
74264
|
+
if (item.Symbol==strSymbol)
|
|
74265
|
+
{
|
|
74266
|
+
bFind=true;
|
|
74267
|
+
console.warn(`[MinuteChartContainer::OverlaySymbol] overlay symbol=${strSymbol} exist.`);
|
|
74268
|
+
break;
|
|
74269
|
+
}
|
|
74166
74270
|
}
|
|
74271
|
+
|
|
74272
|
+
if (!bFind) aryNewSymbol.push(strSymbol);
|
|
74167
74273
|
}
|
|
74168
74274
|
|
|
74169
|
-
|
|
74170
|
-
paint.Canvas=this.Canvas;
|
|
74171
|
-
paint.ChartBorder=this.Frame.SubFrame[0].Frame.ChartBorder;
|
|
74172
|
-
paint.ChartFrame=this.Frame.SubFrame[0].Frame;
|
|
74173
|
-
paint.Name="Overlay-Minute";
|
|
74174
|
-
paint.Symbol=symbol;
|
|
74175
|
-
paint.Identify=`Overlay-Minute-${symbol}`;
|
|
74176
|
-
if (option && option.Color) paint.Color=option.Color; //外部设置颜色
|
|
74177
|
-
else paint.Color=g_JSChartResource.OverlaySymbol.Color[g_JSChartResource.OverlaySymbol.Random%g_JSChartResource.OverlaySymbol.Color.length];
|
|
74178
|
-
++g_JSChartResource.OverlaySymbol.Random;
|
|
74179
|
-
paint.MainData=this.SourceData; //绑定主图数据
|
|
74275
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(arySymbol)) return true;
|
|
74180
74276
|
|
|
74181
|
-
|
|
74277
|
+
for(var i=0;i<aryNewSymbol.length;++i)
|
|
74278
|
+
{
|
|
74279
|
+
var strSymbol=aryNewSymbol[i];
|
|
74182
74280
|
|
|
74183
|
-
|
|
74281
|
+
var paint=new ChartOverlayMinutePriceLine();
|
|
74282
|
+
paint.Canvas=this.Canvas;
|
|
74283
|
+
paint.ChartBorder=this.Frame.SubFrame[0].Frame.ChartBorder;
|
|
74284
|
+
paint.ChartFrame=this.Frame.SubFrame[0].Frame;
|
|
74285
|
+
paint.Name="Overlay-Minute";
|
|
74286
|
+
paint.Symbol=strSymbol;
|
|
74287
|
+
paint.Identify=`Overlay-Minute-${strSymbol}`;
|
|
74288
|
+
if (option && option.Color) paint.Color=option.Color; //外部设置颜色
|
|
74289
|
+
else paint.Color=g_JSChartResource.OverlaySymbol.Color[g_JSChartResource.OverlaySymbol.Random%g_JSChartResource.OverlaySymbol.Color.length];
|
|
74290
|
+
++g_JSChartResource.OverlaySymbol.Random;
|
|
74291
|
+
paint.MainData=this.SourceData; //绑定主图数据
|
|
74292
|
+
|
|
74293
|
+
if (paint.SetOption) paint.SetOption(option);
|
|
74294
|
+
|
|
74295
|
+
this.OverlayChartPaint.push(paint);
|
|
74296
|
+
}
|
|
74184
74297
|
|
|
74185
74298
|
if (this.DayCount<=1) this.RequestOverlayMinuteData(); //请求数据
|
|
74186
74299
|
else this.RequestOverlayHistoryMinuteData();
|
|
@@ -55369,7 +55369,7 @@ function IChartDrawPicture()
|
|
|
55369
55369
|
//xStep,yStep 移动的偏移量
|
|
55370
55370
|
this.Move=function(xStep,yStep)
|
|
55371
55371
|
{
|
|
55372
|
-
if (this.Status!=20) return
|
|
55372
|
+
if (this.Status!=20) return false;
|
|
55373
55373
|
if (!this.Frame) return false;
|
|
55374
55374
|
var data=this.Frame.Data;
|
|
55375
55375
|
if (!data) return false;
|
|
@@ -57061,7 +57061,8 @@ function ChartDrawPictureHorizontalLine()
|
|
|
57061
57061
|
this.DrawPoint(drawPoint);
|
|
57062
57062
|
|
|
57063
57063
|
//显示价格
|
|
57064
|
-
|
|
57064
|
+
this.LineText(drawPoint[0])
|
|
57065
|
+
/*
|
|
57065
57066
|
this.Canvas.fillStyle=this.LineColor;
|
|
57066
57067
|
this.Canvas.font=this.Font;
|
|
57067
57068
|
if (isHScreen)
|
|
@@ -57094,9 +57095,53 @@ function ChartDrawPictureHorizontalLine()
|
|
|
57094
57095
|
}
|
|
57095
57096
|
this.Canvas.fillText(text,left,drawPoint[0].Y);
|
|
57096
57097
|
}
|
|
57098
|
+
*/
|
|
57097
57099
|
|
|
57098
57100
|
this.Canvas.restore();
|
|
57099
57101
|
}
|
|
57102
|
+
|
|
57103
|
+
this.LineText=function(point)
|
|
57104
|
+
{
|
|
57105
|
+
if (!point) return;
|
|
57106
|
+
|
|
57107
|
+
var isHScreen=this.Frame.IsHScreen;
|
|
57108
|
+
var left=this.Frame.ChartBorder.GetLeft();
|
|
57109
|
+
|
|
57110
|
+
this.Canvas.fillStyle=this.LineColor;
|
|
57111
|
+
this.Canvas.font=this.Font;
|
|
57112
|
+
|
|
57113
|
+
if (isHScreen)
|
|
57114
|
+
{
|
|
57115
|
+
left=this.Frame.ChartBorder.GetTop();
|
|
57116
|
+
this.Canvas.textAlign="left";
|
|
57117
|
+
this.Canvas.textBaseline="bottom";
|
|
57118
|
+
var xText=point.X;
|
|
57119
|
+
var yText=left;
|
|
57120
|
+
this.Canvas.translate(xText, yText);
|
|
57121
|
+
this.Canvas.rotate(90 * Math.PI / 180); //数据和框子旋转180度
|
|
57122
|
+
var yValue=this.Frame.GetYData(point.X);
|
|
57123
|
+
var text=yValue.toFixed(2);
|
|
57124
|
+
if (this.Label)
|
|
57125
|
+
{
|
|
57126
|
+
if (this.Label.Position==0) text=this.Label.Text+yValue.toFixed(2);
|
|
57127
|
+
else if (this.Label.Position==1) text=yValue.toFixed(2)+this.Label.Text;
|
|
57128
|
+
}
|
|
57129
|
+
this.Canvas.fillText(text,2,0);
|
|
57130
|
+
}
|
|
57131
|
+
else
|
|
57132
|
+
{
|
|
57133
|
+
this.Canvas.textAlign="left";
|
|
57134
|
+
this.Canvas.textBaseline="bottom";
|
|
57135
|
+
var yValue=this.Frame.GetYData(point.Y);
|
|
57136
|
+
var text=yValue.toFixed(2);
|
|
57137
|
+
if (this.Label)
|
|
57138
|
+
{
|
|
57139
|
+
if (this.Label.Position==0) text=this.Label.Text+yValue.toFixed(2);
|
|
57140
|
+
else if (this.Label.Position==1) text=yValue.toFixed(2)+this.Label.Text;
|
|
57141
|
+
}
|
|
57142
|
+
this.Canvas.fillText(text,left,point.Y);
|
|
57143
|
+
}
|
|
57144
|
+
}
|
|
57100
57145
|
}
|
|
57101
57146
|
|
|
57102
57147
|
//水平线2
|
|
@@ -58794,7 +58839,7 @@ function ChartDrawPictureParallelChannel()
|
|
|
58794
58839
|
//xStep,yStep 移动的偏移量
|
|
58795
58840
|
this.Move=function(xStep,yStep)
|
|
58796
58841
|
{
|
|
58797
|
-
if (this.Status!=20) return
|
|
58842
|
+
if (this.Status!=20) return false;
|
|
58798
58843
|
if (!this.Frame) return false;
|
|
58799
58844
|
var data=this.Frame.Data;
|
|
58800
58845
|
if (!data) return false;
|
|
@@ -73072,6 +73117,53 @@ function KLineChartContainer(uielement,OffscreenElement)
|
|
|
73072
73117
|
}
|
|
73073
73118
|
}
|
|
73074
73119
|
}
|
|
73120
|
+
|
|
73121
|
+
//清空叠加股票
|
|
73122
|
+
if (option.ClearOverlay===true)
|
|
73123
|
+
{
|
|
73124
|
+
for(var i in this.OverlayChartPaint)
|
|
73125
|
+
{
|
|
73126
|
+
var item=this.OverlayChartPaint[i];
|
|
73127
|
+
item.IsDelete=true;
|
|
73128
|
+
}
|
|
73129
|
+
|
|
73130
|
+
this.OverlayChartPaint=[];
|
|
73131
|
+
this.Frame.SubFrame[0].Frame.YSplitOperator.OverlayChartPaint=this.OverlayChartPaint;
|
|
73132
|
+
this.TitlePaint[0].OverlayChartPaint=this.OverlayChartPaint; //绑定叠加
|
|
73133
|
+
}
|
|
73134
|
+
|
|
73135
|
+
//叠加股票
|
|
73136
|
+
if (open.Overlay && IFrameSplitOperator.IsNonEmptyArray(option.Overlay))
|
|
73137
|
+
{
|
|
73138
|
+
var setSymbol=new Set();
|
|
73139
|
+
for(var i=0;i<this.OverlayChartPaint.length;++i)
|
|
73140
|
+
{
|
|
73141
|
+
var item=this.OverlayChartPaint[j];
|
|
73142
|
+
setSymbol.add(item.Symbol);
|
|
73143
|
+
}
|
|
73144
|
+
|
|
73145
|
+
for(var i=0;i<option.Overlay.length;++i)
|
|
73146
|
+
{
|
|
73147
|
+
var item=option.Overlay[i];
|
|
73148
|
+
if (setSymbol.has(item.Symbol)) continue;
|
|
73149
|
+
|
|
73150
|
+
var paint=new ChartOverlayMinutePriceLine();
|
|
73151
|
+
paint.Canvas=this.Canvas;
|
|
73152
|
+
paint.ChartBorder=this.Frame.SubFrame[0].Frame.ChartBorder;
|
|
73153
|
+
paint.ChartFrame=this.Frame.SubFrame[0].Frame;
|
|
73154
|
+
paint.Name="Overlay-Minute";
|
|
73155
|
+
paint.Symbol=item.Symbol;
|
|
73156
|
+
paint.Identify=`Overlay-Minute-${item.Symbol}`;
|
|
73157
|
+
if (item.Color) paint.Color=item.Color; //外部设置颜色
|
|
73158
|
+
else paint.Color=g_JSChartResource.OverlaySymbol.Color[g_JSChartResource.OverlaySymbol.Random%g_JSChartResource.OverlaySymbol.Color.length];
|
|
73159
|
+
++g_JSChartResource.OverlaySymbol.Random;
|
|
73160
|
+
paint.MainData=this.SourceData; //绑定主图数据
|
|
73161
|
+
|
|
73162
|
+
if (paint.SetOption) paint.SetOption(item);
|
|
73163
|
+
|
|
73164
|
+
this.OverlayChartPaint.push(paint);
|
|
73165
|
+
}
|
|
73166
|
+
}
|
|
73075
73167
|
}
|
|
73076
73168
|
|
|
73077
73169
|
this.ReloadChartDrawPicture();
|
|
@@ -78233,34 +78325,55 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
78233
78325
|
this.RequestData();
|
|
78234
78326
|
}
|
|
78235
78327
|
|
|
78236
|
-
//叠加股票
|
|
78328
|
+
//叠加股票 symbol支持数据 ["600000.sh", "0000001.sz"]
|
|
78237
78329
|
this.OverlaySymbol=function(symbol,option)
|
|
78238
78330
|
{
|
|
78239
|
-
|
|
78331
|
+
var arySymbol=null;
|
|
78332
|
+
if (IFrameSplitOperator.IsString(symbol)) arySymbol=[symbol];
|
|
78333
|
+
else if (Array.isArray(symbol)) arySymbol=symbol;
|
|
78334
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(arySymbol)) return false;
|
|
78335
|
+
|
|
78336
|
+
var aryNewSymbol=[];
|
|
78337
|
+
for(var i=0, j=0;i<arySymbol.length;++i)
|
|
78240
78338
|
{
|
|
78241
|
-
var
|
|
78242
|
-
|
|
78339
|
+
var strSymbol=arySymbol[i];
|
|
78340
|
+
var bFind=false;
|
|
78341
|
+
for(j=0;j<this.OverlayChartPaint.length; ++j)
|
|
78243
78342
|
{
|
|
78244
|
-
|
|
78245
|
-
|
|
78343
|
+
var item=this.OverlayChartPaint[j];
|
|
78344
|
+
if (item.Symbol==strSymbol)
|
|
78345
|
+
{
|
|
78346
|
+
bFind=true;
|
|
78347
|
+
console.warn(`[MinuteChartContainer::OverlaySymbol] overlay symbol=${strSymbol} exist.`);
|
|
78348
|
+
break;
|
|
78349
|
+
}
|
|
78246
78350
|
}
|
|
78351
|
+
|
|
78352
|
+
if (!bFind) aryNewSymbol.push(strSymbol);
|
|
78247
78353
|
}
|
|
78248
78354
|
|
|
78249
|
-
|
|
78250
|
-
paint.Canvas=this.Canvas;
|
|
78251
|
-
paint.ChartBorder=this.Frame.SubFrame[0].Frame.ChartBorder;
|
|
78252
|
-
paint.ChartFrame=this.Frame.SubFrame[0].Frame;
|
|
78253
|
-
paint.Name="Overlay-Minute";
|
|
78254
|
-
paint.Symbol=symbol;
|
|
78255
|
-
paint.Identify=`Overlay-Minute-${symbol}`;
|
|
78256
|
-
if (option && option.Color) paint.Color=option.Color; //外部设置颜色
|
|
78257
|
-
else paint.Color=g_JSChartResource.OverlaySymbol.Color[g_JSChartResource.OverlaySymbol.Random%g_JSChartResource.OverlaySymbol.Color.length];
|
|
78258
|
-
++g_JSChartResource.OverlaySymbol.Random;
|
|
78259
|
-
paint.MainData=this.SourceData; //绑定主图数据
|
|
78355
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(arySymbol)) return true;
|
|
78260
78356
|
|
|
78261
|
-
|
|
78357
|
+
for(var i=0;i<aryNewSymbol.length;++i)
|
|
78358
|
+
{
|
|
78359
|
+
var strSymbol=aryNewSymbol[i];
|
|
78262
78360
|
|
|
78263
|
-
|
|
78361
|
+
var paint=new ChartOverlayMinutePriceLine();
|
|
78362
|
+
paint.Canvas=this.Canvas;
|
|
78363
|
+
paint.ChartBorder=this.Frame.SubFrame[0].Frame.ChartBorder;
|
|
78364
|
+
paint.ChartFrame=this.Frame.SubFrame[0].Frame;
|
|
78365
|
+
paint.Name="Overlay-Minute";
|
|
78366
|
+
paint.Symbol=strSymbol;
|
|
78367
|
+
paint.Identify=`Overlay-Minute-${strSymbol}`;
|
|
78368
|
+
if (option && option.Color) paint.Color=option.Color; //外部设置颜色
|
|
78369
|
+
else paint.Color=g_JSChartResource.OverlaySymbol.Color[g_JSChartResource.OverlaySymbol.Random%g_JSChartResource.OverlaySymbol.Color.length];
|
|
78370
|
+
++g_JSChartResource.OverlaySymbol.Random;
|
|
78371
|
+
paint.MainData=this.SourceData; //绑定主图数据
|
|
78372
|
+
|
|
78373
|
+
if (paint.SetOption) paint.SetOption(option);
|
|
78374
|
+
|
|
78375
|
+
this.OverlayChartPaint.push(paint);
|
|
78376
|
+
}
|
|
78264
78377
|
|
|
78265
78378
|
if (this.DayCount<=1) this.RequestOverlayMinuteData(); //请求数据
|
|
78266
78379
|
else this.RequestOverlayHistoryMinuteData();
|
|
@@ -102543,10 +102656,10 @@ function JSAlgorithm(errorHandler,symbolData)
|
|
|
102543
102656
|
}
|
|
102544
102657
|
|
|
102545
102658
|
|
|
102546
|
-
//格式化字符串 "{0}-{1}", C, O;
|
|
102659
|
+
//格式化字符串 "{0}-{1}", C, O; 小数位数 {0:0.00}
|
|
102547
102660
|
this.STRFORMAT=function(strFormat,args,node)
|
|
102548
102661
|
{
|
|
102549
|
-
var aryParam=strFormat.match(/{
|
|
102662
|
+
var aryParam=strFormat.match(/{[0-9.:]+}/g);
|
|
102550
102663
|
|
|
102551
102664
|
if (!IFrameSplitOperator.IsNonEmptyArray(aryParam)) return null;
|
|
102552
102665
|
|
|
@@ -102558,9 +102671,47 @@ function JSAlgorithm(errorHandler,symbolData)
|
|
|
102558
102671
|
if (item.length<3) continue;
|
|
102559
102672
|
|
|
102560
102673
|
var value=item.slice(1, item.length-1);
|
|
102561
|
-
var index
|
|
102674
|
+
var index=-1,decimal=-1;
|
|
102675
|
+
if (value.indexOf(":")>0)
|
|
102676
|
+
{
|
|
102677
|
+
var aryTemp=value.split(":");
|
|
102678
|
+
if (aryTemp)
|
|
102679
|
+
{
|
|
102680
|
+
if (aryTemp[0])
|
|
102681
|
+
index=parseInt(aryTemp[0]);
|
|
102562
102682
|
|
|
102563
|
-
|
|
102683
|
+
if (aryTemp[1])
|
|
102684
|
+
{
|
|
102685
|
+
if (aryTemp[1].indexOf(".")>=0)
|
|
102686
|
+
{
|
|
102687
|
+
var zeroCount=0;
|
|
102688
|
+
var strTemp=aryTemp[1];
|
|
102689
|
+
for(var j=strTemp.length-1; j>=0; --j)
|
|
102690
|
+
{
|
|
102691
|
+
if (strTemp[j]=="0") ++zeroCount;
|
|
102692
|
+
else break;
|
|
102693
|
+
}
|
|
102694
|
+
|
|
102695
|
+
if (zeroCount>0) decimal=zeroCount;
|
|
102696
|
+
}
|
|
102697
|
+
else if (aryTemp[1]=="0")
|
|
102698
|
+
{
|
|
102699
|
+
decimal=0;
|
|
102700
|
+
}
|
|
102701
|
+
}
|
|
102702
|
+
|
|
102703
|
+
}
|
|
102704
|
+
|
|
102705
|
+
}
|
|
102706
|
+
else
|
|
102707
|
+
{
|
|
102708
|
+
index=parseInt(value);
|
|
102709
|
+
}
|
|
102710
|
+
|
|
102711
|
+
if (index<0) continue;
|
|
102712
|
+
|
|
102713
|
+
var paramItem={ Src:item, Index:index, Text:null, Decimal:null };
|
|
102714
|
+
if (decimal>=0) paramItem.Decimal=decimal;
|
|
102564
102715
|
|
|
102565
102716
|
if (maxIndex<index) maxIndex=index;
|
|
102566
102717
|
|
|
@@ -102597,7 +102748,13 @@ function JSAlgorithm(errorHandler,symbolData)
|
|
|
102597
102748
|
if (Array.isArray(paramItem))
|
|
102598
102749
|
{
|
|
102599
102750
|
var value=paramItem[i];
|
|
102600
|
-
if (value)
|
|
102751
|
+
if (value)
|
|
102752
|
+
{
|
|
102753
|
+
if (IFrameSplitOperator.IsNumber(paramInfo.Decimal))
|
|
102754
|
+
text=`${value.toFixed(paramInfo.Decimal)}`;
|
|
102755
|
+
else
|
|
102756
|
+
text=`${value}`;
|
|
102757
|
+
}
|
|
102601
102758
|
}
|
|
102602
102759
|
else
|
|
102603
102760
|
{
|
|
@@ -129881,7 +130038,7 @@ function ScrollBarBGChart()
|
|
|
129881
130038
|
|
|
129882
130039
|
|
|
129883
130040
|
|
|
129884
|
-
var HQCHART_VERSION="1.1.
|
|
130041
|
+
var HQCHART_VERSION="1.1.12630";
|
|
129885
130042
|
|
|
129886
130043
|
function PrintHQChartVersion()
|
|
129887
130044
|
{
|
|
@@ -55413,7 +55413,7 @@ function IChartDrawPicture()
|
|
|
55413
55413
|
//xStep,yStep 移动的偏移量
|
|
55414
55414
|
this.Move=function(xStep,yStep)
|
|
55415
55415
|
{
|
|
55416
|
-
if (this.Status!=20) return
|
|
55416
|
+
if (this.Status!=20) return false;
|
|
55417
55417
|
if (!this.Frame) return false;
|
|
55418
55418
|
var data=this.Frame.Data;
|
|
55419
55419
|
if (!data) return false;
|
|
@@ -57105,7 +57105,8 @@ function ChartDrawPictureHorizontalLine()
|
|
|
57105
57105
|
this.DrawPoint(drawPoint);
|
|
57106
57106
|
|
|
57107
57107
|
//显示价格
|
|
57108
|
-
|
|
57108
|
+
this.LineText(drawPoint[0])
|
|
57109
|
+
/*
|
|
57109
57110
|
this.Canvas.fillStyle=this.LineColor;
|
|
57110
57111
|
this.Canvas.font=this.Font;
|
|
57111
57112
|
if (isHScreen)
|
|
@@ -57138,9 +57139,53 @@ function ChartDrawPictureHorizontalLine()
|
|
|
57138
57139
|
}
|
|
57139
57140
|
this.Canvas.fillText(text,left,drawPoint[0].Y);
|
|
57140
57141
|
}
|
|
57142
|
+
*/
|
|
57141
57143
|
|
|
57142
57144
|
this.Canvas.restore();
|
|
57143
57145
|
}
|
|
57146
|
+
|
|
57147
|
+
this.LineText=function(point)
|
|
57148
|
+
{
|
|
57149
|
+
if (!point) return;
|
|
57150
|
+
|
|
57151
|
+
var isHScreen=this.Frame.IsHScreen;
|
|
57152
|
+
var left=this.Frame.ChartBorder.GetLeft();
|
|
57153
|
+
|
|
57154
|
+
this.Canvas.fillStyle=this.LineColor;
|
|
57155
|
+
this.Canvas.font=this.Font;
|
|
57156
|
+
|
|
57157
|
+
if (isHScreen)
|
|
57158
|
+
{
|
|
57159
|
+
left=this.Frame.ChartBorder.GetTop();
|
|
57160
|
+
this.Canvas.textAlign="left";
|
|
57161
|
+
this.Canvas.textBaseline="bottom";
|
|
57162
|
+
var xText=point.X;
|
|
57163
|
+
var yText=left;
|
|
57164
|
+
this.Canvas.translate(xText, yText);
|
|
57165
|
+
this.Canvas.rotate(90 * Math.PI / 180); //数据和框子旋转180度
|
|
57166
|
+
var yValue=this.Frame.GetYData(point.X);
|
|
57167
|
+
var text=yValue.toFixed(2);
|
|
57168
|
+
if (this.Label)
|
|
57169
|
+
{
|
|
57170
|
+
if (this.Label.Position==0) text=this.Label.Text+yValue.toFixed(2);
|
|
57171
|
+
else if (this.Label.Position==1) text=yValue.toFixed(2)+this.Label.Text;
|
|
57172
|
+
}
|
|
57173
|
+
this.Canvas.fillText(text,2,0);
|
|
57174
|
+
}
|
|
57175
|
+
else
|
|
57176
|
+
{
|
|
57177
|
+
this.Canvas.textAlign="left";
|
|
57178
|
+
this.Canvas.textBaseline="bottom";
|
|
57179
|
+
var yValue=this.Frame.GetYData(point.Y);
|
|
57180
|
+
var text=yValue.toFixed(2);
|
|
57181
|
+
if (this.Label)
|
|
57182
|
+
{
|
|
57183
|
+
if (this.Label.Position==0) text=this.Label.Text+yValue.toFixed(2);
|
|
57184
|
+
else if (this.Label.Position==1) text=yValue.toFixed(2)+this.Label.Text;
|
|
57185
|
+
}
|
|
57186
|
+
this.Canvas.fillText(text,left,point.Y);
|
|
57187
|
+
}
|
|
57188
|
+
}
|
|
57144
57189
|
}
|
|
57145
57190
|
|
|
57146
57191
|
//水平线2
|
|
@@ -58838,7 +58883,7 @@ function ChartDrawPictureParallelChannel()
|
|
|
58838
58883
|
//xStep,yStep 移动的偏移量
|
|
58839
58884
|
this.Move=function(xStep,yStep)
|
|
58840
58885
|
{
|
|
58841
|
-
if (this.Status!=20) return
|
|
58886
|
+
if (this.Status!=20) return false;
|
|
58842
58887
|
if (!this.Frame) return false;
|
|
58843
58888
|
var data=this.Frame.Data;
|
|
58844
58889
|
if (!data) return false;
|
|
@@ -73116,6 +73161,53 @@ function KLineChartContainer(uielement,OffscreenElement)
|
|
|
73116
73161
|
}
|
|
73117
73162
|
}
|
|
73118
73163
|
}
|
|
73164
|
+
|
|
73165
|
+
//清空叠加股票
|
|
73166
|
+
if (option.ClearOverlay===true)
|
|
73167
|
+
{
|
|
73168
|
+
for(var i in this.OverlayChartPaint)
|
|
73169
|
+
{
|
|
73170
|
+
var item=this.OverlayChartPaint[i];
|
|
73171
|
+
item.IsDelete=true;
|
|
73172
|
+
}
|
|
73173
|
+
|
|
73174
|
+
this.OverlayChartPaint=[];
|
|
73175
|
+
this.Frame.SubFrame[0].Frame.YSplitOperator.OverlayChartPaint=this.OverlayChartPaint;
|
|
73176
|
+
this.TitlePaint[0].OverlayChartPaint=this.OverlayChartPaint; //绑定叠加
|
|
73177
|
+
}
|
|
73178
|
+
|
|
73179
|
+
//叠加股票
|
|
73180
|
+
if (open.Overlay && IFrameSplitOperator.IsNonEmptyArray(option.Overlay))
|
|
73181
|
+
{
|
|
73182
|
+
var setSymbol=new Set();
|
|
73183
|
+
for(var i=0;i<this.OverlayChartPaint.length;++i)
|
|
73184
|
+
{
|
|
73185
|
+
var item=this.OverlayChartPaint[j];
|
|
73186
|
+
setSymbol.add(item.Symbol);
|
|
73187
|
+
}
|
|
73188
|
+
|
|
73189
|
+
for(var i=0;i<option.Overlay.length;++i)
|
|
73190
|
+
{
|
|
73191
|
+
var item=option.Overlay[i];
|
|
73192
|
+
if (setSymbol.has(item.Symbol)) continue;
|
|
73193
|
+
|
|
73194
|
+
var paint=new ChartOverlayMinutePriceLine();
|
|
73195
|
+
paint.Canvas=this.Canvas;
|
|
73196
|
+
paint.ChartBorder=this.Frame.SubFrame[0].Frame.ChartBorder;
|
|
73197
|
+
paint.ChartFrame=this.Frame.SubFrame[0].Frame;
|
|
73198
|
+
paint.Name="Overlay-Minute";
|
|
73199
|
+
paint.Symbol=item.Symbol;
|
|
73200
|
+
paint.Identify=`Overlay-Minute-${item.Symbol}`;
|
|
73201
|
+
if (item.Color) paint.Color=item.Color; //外部设置颜色
|
|
73202
|
+
else paint.Color=g_JSChartResource.OverlaySymbol.Color[g_JSChartResource.OverlaySymbol.Random%g_JSChartResource.OverlaySymbol.Color.length];
|
|
73203
|
+
++g_JSChartResource.OverlaySymbol.Random;
|
|
73204
|
+
paint.MainData=this.SourceData; //绑定主图数据
|
|
73205
|
+
|
|
73206
|
+
if (paint.SetOption) paint.SetOption(item);
|
|
73207
|
+
|
|
73208
|
+
this.OverlayChartPaint.push(paint);
|
|
73209
|
+
}
|
|
73210
|
+
}
|
|
73119
73211
|
}
|
|
73120
73212
|
|
|
73121
73213
|
this.ReloadChartDrawPicture();
|
|
@@ -78277,34 +78369,55 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
78277
78369
|
this.RequestData();
|
|
78278
78370
|
}
|
|
78279
78371
|
|
|
78280
|
-
//叠加股票
|
|
78372
|
+
//叠加股票 symbol支持数据 ["600000.sh", "0000001.sz"]
|
|
78281
78373
|
this.OverlaySymbol=function(symbol,option)
|
|
78282
78374
|
{
|
|
78283
|
-
|
|
78375
|
+
var arySymbol=null;
|
|
78376
|
+
if (IFrameSplitOperator.IsString(symbol)) arySymbol=[symbol];
|
|
78377
|
+
else if (Array.isArray(symbol)) arySymbol=symbol;
|
|
78378
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(arySymbol)) return false;
|
|
78379
|
+
|
|
78380
|
+
var aryNewSymbol=[];
|
|
78381
|
+
for(var i=0, j=0;i<arySymbol.length;++i)
|
|
78284
78382
|
{
|
|
78285
|
-
var
|
|
78286
|
-
|
|
78383
|
+
var strSymbol=arySymbol[i];
|
|
78384
|
+
var bFind=false;
|
|
78385
|
+
for(j=0;j<this.OverlayChartPaint.length; ++j)
|
|
78287
78386
|
{
|
|
78288
|
-
|
|
78289
|
-
|
|
78387
|
+
var item=this.OverlayChartPaint[j];
|
|
78388
|
+
if (item.Symbol==strSymbol)
|
|
78389
|
+
{
|
|
78390
|
+
bFind=true;
|
|
78391
|
+
console.warn(`[MinuteChartContainer::OverlaySymbol] overlay symbol=${strSymbol} exist.`);
|
|
78392
|
+
break;
|
|
78393
|
+
}
|
|
78290
78394
|
}
|
|
78395
|
+
|
|
78396
|
+
if (!bFind) aryNewSymbol.push(strSymbol);
|
|
78291
78397
|
}
|
|
78292
78398
|
|
|
78293
|
-
|
|
78294
|
-
paint.Canvas=this.Canvas;
|
|
78295
|
-
paint.ChartBorder=this.Frame.SubFrame[0].Frame.ChartBorder;
|
|
78296
|
-
paint.ChartFrame=this.Frame.SubFrame[0].Frame;
|
|
78297
|
-
paint.Name="Overlay-Minute";
|
|
78298
|
-
paint.Symbol=symbol;
|
|
78299
|
-
paint.Identify=`Overlay-Minute-${symbol}`;
|
|
78300
|
-
if (option && option.Color) paint.Color=option.Color; //外部设置颜色
|
|
78301
|
-
else paint.Color=g_JSChartResource.OverlaySymbol.Color[g_JSChartResource.OverlaySymbol.Random%g_JSChartResource.OverlaySymbol.Color.length];
|
|
78302
|
-
++g_JSChartResource.OverlaySymbol.Random;
|
|
78303
|
-
paint.MainData=this.SourceData; //绑定主图数据
|
|
78399
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(arySymbol)) return true;
|
|
78304
78400
|
|
|
78305
|
-
|
|
78401
|
+
for(var i=0;i<aryNewSymbol.length;++i)
|
|
78402
|
+
{
|
|
78403
|
+
var strSymbol=aryNewSymbol[i];
|
|
78306
78404
|
|
|
78307
|
-
|
|
78405
|
+
var paint=new ChartOverlayMinutePriceLine();
|
|
78406
|
+
paint.Canvas=this.Canvas;
|
|
78407
|
+
paint.ChartBorder=this.Frame.SubFrame[0].Frame.ChartBorder;
|
|
78408
|
+
paint.ChartFrame=this.Frame.SubFrame[0].Frame;
|
|
78409
|
+
paint.Name="Overlay-Minute";
|
|
78410
|
+
paint.Symbol=strSymbol;
|
|
78411
|
+
paint.Identify=`Overlay-Minute-${strSymbol}`;
|
|
78412
|
+
if (option && option.Color) paint.Color=option.Color; //外部设置颜色
|
|
78413
|
+
else paint.Color=g_JSChartResource.OverlaySymbol.Color[g_JSChartResource.OverlaySymbol.Random%g_JSChartResource.OverlaySymbol.Color.length];
|
|
78414
|
+
++g_JSChartResource.OverlaySymbol.Random;
|
|
78415
|
+
paint.MainData=this.SourceData; //绑定主图数据
|
|
78416
|
+
|
|
78417
|
+
if (paint.SetOption) paint.SetOption(option);
|
|
78418
|
+
|
|
78419
|
+
this.OverlayChartPaint.push(paint);
|
|
78420
|
+
}
|
|
78308
78421
|
|
|
78309
78422
|
if (this.DayCount<=1) this.RequestOverlayMinuteData(); //请求数据
|
|
78310
78423
|
else this.RequestOverlayHistoryMinuteData();
|
|
@@ -102587,10 +102700,10 @@ function JSAlgorithm(errorHandler,symbolData)
|
|
|
102587
102700
|
}
|
|
102588
102701
|
|
|
102589
102702
|
|
|
102590
|
-
//格式化字符串 "{0}-{1}", C, O;
|
|
102703
|
+
//格式化字符串 "{0}-{1}", C, O; 小数位数 {0:0.00}
|
|
102591
102704
|
this.STRFORMAT=function(strFormat,args,node)
|
|
102592
102705
|
{
|
|
102593
|
-
var aryParam=strFormat.match(/{
|
|
102706
|
+
var aryParam=strFormat.match(/{[0-9.:]+}/g);
|
|
102594
102707
|
|
|
102595
102708
|
if (!IFrameSplitOperator.IsNonEmptyArray(aryParam)) return null;
|
|
102596
102709
|
|
|
@@ -102602,9 +102715,47 @@ function JSAlgorithm(errorHandler,symbolData)
|
|
|
102602
102715
|
if (item.length<3) continue;
|
|
102603
102716
|
|
|
102604
102717
|
var value=item.slice(1, item.length-1);
|
|
102605
|
-
var index
|
|
102718
|
+
var index=-1,decimal=-1;
|
|
102719
|
+
if (value.indexOf(":")>0)
|
|
102720
|
+
{
|
|
102721
|
+
var aryTemp=value.split(":");
|
|
102722
|
+
if (aryTemp)
|
|
102723
|
+
{
|
|
102724
|
+
if (aryTemp[0])
|
|
102725
|
+
index=parseInt(aryTemp[0]);
|
|
102606
102726
|
|
|
102607
|
-
|
|
102727
|
+
if (aryTemp[1])
|
|
102728
|
+
{
|
|
102729
|
+
if (aryTemp[1].indexOf(".")>=0)
|
|
102730
|
+
{
|
|
102731
|
+
var zeroCount=0;
|
|
102732
|
+
var strTemp=aryTemp[1];
|
|
102733
|
+
for(var j=strTemp.length-1; j>=0; --j)
|
|
102734
|
+
{
|
|
102735
|
+
if (strTemp[j]=="0") ++zeroCount;
|
|
102736
|
+
else break;
|
|
102737
|
+
}
|
|
102738
|
+
|
|
102739
|
+
if (zeroCount>0) decimal=zeroCount;
|
|
102740
|
+
}
|
|
102741
|
+
else if (aryTemp[1]=="0")
|
|
102742
|
+
{
|
|
102743
|
+
decimal=0;
|
|
102744
|
+
}
|
|
102745
|
+
}
|
|
102746
|
+
|
|
102747
|
+
}
|
|
102748
|
+
|
|
102749
|
+
}
|
|
102750
|
+
else
|
|
102751
|
+
{
|
|
102752
|
+
index=parseInt(value);
|
|
102753
|
+
}
|
|
102754
|
+
|
|
102755
|
+
if (index<0) continue;
|
|
102756
|
+
|
|
102757
|
+
var paramItem={ Src:item, Index:index, Text:null, Decimal:null };
|
|
102758
|
+
if (decimal>=0) paramItem.Decimal=decimal;
|
|
102608
102759
|
|
|
102609
102760
|
if (maxIndex<index) maxIndex=index;
|
|
102610
102761
|
|
|
@@ -102641,7 +102792,13 @@ function JSAlgorithm(errorHandler,symbolData)
|
|
|
102641
102792
|
if (Array.isArray(paramItem))
|
|
102642
102793
|
{
|
|
102643
102794
|
var value=paramItem[i];
|
|
102644
|
-
if (value)
|
|
102795
|
+
if (value)
|
|
102796
|
+
{
|
|
102797
|
+
if (IFrameSplitOperator.IsNumber(paramInfo.Decimal))
|
|
102798
|
+
text=`${value.toFixed(paramInfo.Decimal)}`;
|
|
102799
|
+
else
|
|
102800
|
+
text=`${value}`;
|
|
102801
|
+
}
|
|
102645
102802
|
}
|
|
102646
102803
|
else
|
|
102647
102804
|
{
|
|
@@ -130039,7 +130196,7 @@ function HQChartScriptWorker()
|
|
|
130039
130196
|
|
|
130040
130197
|
|
|
130041
130198
|
|
|
130042
|
-
var HQCHART_VERSION="1.1.
|
|
130199
|
+
var HQCHART_VERSION="1.1.12630";
|
|
130043
130200
|
|
|
130044
130201
|
function PrintHQChartVersion()
|
|
130045
130202
|
{
|