hqchart 1.1.11276 → 1.1.11287

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.
@@ -1565,7 +1565,8 @@ CHANGE_INDEX:4,//换指标
1565
1565
  CLOSE_INDEX_WINDOW:5,//关闭指标窗口
1566
1566
  OVERLAY_INDEX:6,//叠加指标
1567
1567
  MODIFY_OVERLAY_INDEX_PARAM:7,//改叠加指标参数
1568
- CHIP_DEFULT:8,CHIP_LONG:9,CHIP_RECENT:10};var JSCHART_DATA_FIELD_ID={KLINE_ORDERFLOW:99,MINUTE_MULTI_DAY_EXTENDDATA:21//多日分时图扩展数据序号
1568
+ CHIP_DEFULT:8,CHIP_LONG:9,CHIP_RECENT:10};var JSCHART_DATA_FIELD_ID={KLINE_ORDERFLOW:99,MINUTE_MULTI_DAY_EXTENDDATA:21,//多日分时图扩展数据序号
1569
+ KLINE_COLOR_DATA:66//K线自定义颜色数据
1569
1570
  };function PhoneDBClick(){this.Start=[];this.Clear=function(){this.Start=[];};this.AddTouchStart=function(x,y,time){if(this.Start.length>0){var item=this.Start[this.Start.length-1];var spanTime=time-item.Time;if(spanTime>0&&spanTime<300){this.Start.push({X:x,Y:y,Time:time});}else{this.Start=[];}}else{this.Start.push({X:x,Y:y,Time:time});}};this.IsVaildDBClick=function(){if(this.Start.length==2)return true;return false;};this.AddTouchEnd=function(time){if(this.Start.length<=0)return;var item=this.Start[this.Start.length-1];var spanTime=time-item.Time;if(spanTime>=0&&spanTime<150){}else{this.Start=[];}};}/*
1570
1571
  图形控件
1571
1572
  */function JSChartContainer(uielement,OffscreenElement){var _this3=this;this.ClassName='JSChartContainer';var _self=this;this.Frame;//框架画法
@@ -1754,7 +1755,8 @@ if(option&&option.ParentFunction=='OnMouseMove'&&option.Point){ptPosition=this.F
1754
1755
  var barrageData=null;for(var i=0;i<this.ExtendChartPaint.length;++i){var item=this.ExtendChartPaint[i];if(item.ClassName==='BarragePaint'){bCreated=true;barrageData=item.BarrageList;break;}}if(!bCreated){var chart=new BarragePaint();chart.Canvas=this.Canvas;chart.ChartBorder=this.Frame.ChartBorder;chart.ChartFrame=this.Frame;chart.HQChart=this;chart.SetOption(option);this.ExtendChartPaint.push(chart);barrageData=chart.BarrageList;}this.EnableAnimation=true;var self=this;window.requestAnimationFrame(function(){self.DrawAnimation();});return barrageData;};this.StopAnimation=function(){this.EnableAnimation=false;this.DrawDynamicInfo();};this.GetChartTooltipData=function(x,y,option){var toolTip=new TooltipData();if(this.ChartInfoPaint){if(this.ChartInfoPaint.GetTooltipData(x,y,toolTip))return toolTip;}if(this.PtInChartPaintTooltip(x,y,toolTip))return toolTip;if(IFrameSplitOperator.IsNonEmptyArray(this.Frame.SubFrame)){for(var i=0;i<this.Frame.SubFrame.length;++i){var subFrame=this.Frame.SubFrame[i];for(var j=0;j<subFrame.OverlayIndex.length;++j){var overlayItem=subFrame.OverlayIndex[j];for(var k=0;k<overlayItem.ChartPaint.length;++k){var item=overlayItem.ChartPaint[k];if(item.GetTooltipData(x,y,toolTip))return toolTip;}}}}if(this.PtInOverlayChartPaintTooltip(x,y,toolTip))return toolTip;return null;};this.PtInExtendChartButtons=function(x,y){for(var i=0;i<this.ExtendChartPaint.length;++i){var item=this.ExtendChartPaint[i];if(item.PtInButtons){var button=item.PtInButtons(x,y);if(button){button.Chart=item;return button;}}}return null;};this.OnMouseMove=function(x,y,e,isPhone){this.LastPoint.X=x;this.LastPoint.Y=y;var mouseStatus=null;//鼠标状态
1755
1756
  var frameID=this.Frame.PtInFrame(x,y);if(IFrameSplitOperator.IsNumber(frameID)&&frameID>=0)//在K线内部移动,调整K线索引
1756
1757
  this.CursorIndex=this.Frame.GetXData(x);var paint=this.GetRectSelectPaint();if(paint&&paint.GetPointCount()>0){var item=paint.PtInPaint(x,y);if(item){mouseStatus={Cursor:"ew-resize",Name:"DragRectSelect"};JSConsole.Chart.Log("[JSChartContainer::OnMouseMove] drag rect select ",item);}}if(this.EnableBorderDrag&&this.Frame&&!this.CurrentChartDrawPicture){var dragBorder=this.Frame.PtInFrameBorder(x,y);if(dragBorder&&dragBorder.Index>=0){mouseStatus={Cursor:"n-resize",Name:"DragBorder"};JSConsole.Chart.Log("[JSChartContainer::OnMouseMove] drag border ",dragBorder);}}if(this.EnableYDrag&&this.Frame&&!this.CurrentChartDrawPicture){var dragY=this.TryYDrag(x,y);if(dragY){mouseStatus={Cursor:dragY.Position==0?"n-resize":"row-resize",Name:"DragY"};JSConsole.Chart.Log("[JSChartContainer::OnMouseMove] drag y ",dragY);}}if(!this.CurrentChartDrawPicture){var button=this.Frame.PtInButtons(x,y);if(button){mouseStatus={Cursor:"pointer",Name:"FrameButton"};JSConsole.Chart.Log("[JSChartContainer::OnMouseMove] frame button ",button);}else{button=this.PtInExtendChartButtons(x,y);if(button){mouseStatus={Cursor:"pointer",Name:"ExtendChartButton"};JSConsole.Chart.Log("[JSChartContainer::OnMouseMove] extend chart button ",button);}}}if(this.ChartCorssCursor){var crossButton=this.ChartCorssCursor.PtInButton(x,y);if(crossButton){mouseStatus={Cursor:"pointer",Name:"CorssCursorButton"};JSConsole.Chart.Log("[JSChartContainer::OnMouseMove] cross cursor button ",crossButton);}}if(this.ClassName=="KLineChartContainer"&&this.Frame.PtInFrameBottom(x,y)){mouseStatus={Cursor:"ew-resize",Name:"FrameButtom"};JSConsole.Chart.Log("[JSChartContainer::OnMouseMove] frame bottom ");}if(this.SelectedChart.EnableMoveOn&&this.PtInChart&&!this.CurrentChartDrawPicture){var chartInfo=this.PtInChart(x,y);if(chartInfo&&chartInfo.Identify){mouseStatus={Cursor:"pointer",Name:"PtInChart"};this.SelectedChart.MoveOn.Identify=chartInfo.Identify;this.SelectedChart.MoveOn.Identify=null;JSConsole.Chart.Log("[JSChartContainer::OnMouseMove] Point in chart ",chartInfo);}else{this.SelectedChart.MoveOn.Identify=null;}}else{this.SelectedChart.MoveOn.Identify=null;}var bDrawPicture=false;//是否正在画图
1757
- if(this.CurrentChartDrawPicture){if(this.CurrentChartDrawPicture.Status!=20)mouseStatus={Cursor:"crosshair",Name:"CurrentChartDrawPicture"};if(this.CurrentChartDrawPicture.SetLastPoint)this.CurrentChartDrawPicture.SetLastPoint({X:x,Y:y});bDrawPicture=true;}else{var drawPictrueData={};drawPictrueData.X=x;drawPictrueData.Y=y;if(this.GetChartDrawPictureByPoint(drawPictrueData)&&drawPictrueData.ChartDrawPicture&&drawPictrueData.ChartDrawPicture.EnableMove==true){if(drawPictrueData.PointIndex===100)this.UIElement.style.cursor="move";else this.UIElement.style.cursor="pointer";bDrawPicture=true;this.MoveOnChartDrawPicture=drawPictrueData.ChartDrawPicture;}else{if(!this.MouseDrag)this.UIElement.style.cursor="default";}}var clientPos=this.PtInClient(x,y);var option={ParentFunction:'OnMouseMove',Point:{X:x,Y:y},IsPhone:isPhone===true,ClientPos:clientPos};if(e&&(e.type=="mouseout"||e.type=="mouseleave")||button)option.Corss=false;//鼠标移开,在按钮上,不显示十字光标
1758
+ if(this.CurrentChartDrawPicture){var index=this.Frame.PtInChartFrame(x,y);if(this.CurrentChartDrawPicture.Status!=20){if(index>=0)mouseStatus={Cursor:"crosshair",Name:"CurrentChartDrawPicture"};else mouseStatus={Cursor:"not-allowed",Name:"CurrentChartDrawPicture"};//不在画图区域
1759
+ }if(this.CurrentChartDrawPicture.SetLastPoint)this.CurrentChartDrawPicture.SetLastPoint({X:x,Y:y});bDrawPicture=true;}else{var drawPictrueData={};drawPictrueData.X=x;drawPictrueData.Y=y;if(this.GetChartDrawPictureByPoint(drawPictrueData)&&drawPictrueData.ChartDrawPicture&&drawPictrueData.ChartDrawPicture.EnableMove==true){if(drawPictrueData.PointIndex===100)this.UIElement.style.cursor="move";else this.UIElement.style.cursor="pointer";bDrawPicture=true;this.MoveOnChartDrawPicture=drawPictrueData.ChartDrawPicture;}else{if(!this.MouseDrag)this.UIElement.style.cursor="default";}}var clientPos=this.PtInClient(x,y);var option={ParentFunction:'OnMouseMove',Point:{X:x,Y:y},IsPhone:isPhone===true,ClientPos:clientPos};if(e&&(e.type=="mouseout"||e.type=="mouseleave")||button)option.Corss=false;//鼠标移开,在按钮上,不显示十字光标
1758
1760
  if(this.SetCorssCursorIndex)this.SetCorssCursorIndex(option);this.DrawDynamicInfo(option);if(mouseStatus)this.UIElement.style.cursor=mouseStatus.Cursor;if(this.IsShowTooltip&&bDrawPicture==false){var toolTip=this.GetChartTooltipData(x,y);if(toolTip&&toolTip.Data){if(isPhone===true){var touche=e.touches[0];var xTooltip=touche.clientX-this.UIElement.getBoundingClientRect().left;var yTooltip=touche.clientY-this.UIElement.getBoundingClientRect().top;}else{var xTooltip=e.clientX-this.UIElement.getBoundingClientRect().left;var yTooltip=e.clientY-this.UIElement.getBoundingClientRect().top;}this.ShowTooltip(xTooltip,yTooltip,toolTip);}else{this.HideTooltip();}}};this.OnKeyDown=function(e){if(this.ChartSplashPaint&&this.ChartSplashPaint.IsEnableSplash==true)return;var keyID=e.keyCode?e.keyCode:e.which;switch(keyID){case 37://left
1759
1761
  if(e.ctrlKey&&this.OnCustomKeyDown){if(this.OnCustomKeyDown(keyID,e))break;}if(this.CursorIndex<=0.99999){if(!this.DataMoveLeft()){//左移数据到头了 触发下载新数据
1760
1762
  if(this.DragDownloadData)this.DragDownloadData();break;}this.UpdataDataoffset();this.UpdatePointByCursorIndex();this.UpdateFrameMaxMin();this.Draw();this.ShowTooltipByKeyDown();this.OnKLinePageChange("keydown");}else{--this.CursorIndex;this.UpdatePointByCursorIndex();this.DrawDynamicInfo();this.ShowTooltipByKeyDown();}break;case 39://right
@@ -2566,7 +2568,9 @@ var yValue=frame.GetYData(y);if(frame.YSplitOperator.CoordinateType==1)//百分
2566
2568
  {var firstOpenPrice=frame.YSplitOperator.GetFirstOpenPrice();outObject.RightYValue=((yValue-firstOpenPrice)/firstOpenPrice*100).toFixed(2)+'%';}return yValue;}};this.PtInFrame=function(x,y)//鼠标哪个指标窗口
2567
2569
  {for(var i=0;i<this.SubFrame.length;++i){var item=this.SubFrame[i];var left=item.Frame.ChartBorder.GetLeft();var top=item.Frame.ChartBorder.GetTop();var width=item.Frame.ChartBorder.GetWidth();var height=item.Frame.ChartBorder.GetHeight();item.Frame.Canvas.beginPath();item.Frame.Canvas.rect(left,top,width,height);if(item.Frame.Canvas.isPointInPath(x,y)){return i;//转成整形
2568
2570
  }}var bottom=this.ChartBorder.GetBottom();var chartHeight=this.ChartBorder.GetChartHeight();var left=this.ChartBorder.GetLeft();var right=this.ChartBorder.GetRight();//底部
2569
- if(x>=left&&x<=right&&y>bottom&&y<chartHeight)return-3;return-1;};this.PtInButtons=function(x,y){for(var i=0;i<this.SubFrame.length;++i){var item=this.SubFrame[i];var button=item.Frame.PtInButtons(x,y);if(button){button.Frame=item.Frame;return button;}for(var j=0;j<item.OverlayIndex.length;++j){var overlayItem=item.OverlayIndex[j];var overlayFrame=overlayItem.Frame;if(!overlayFrame||!overlayFrame.PtInButtons)continue;var button=overlayFrame.PtInButtons(x,y);if(button){button.IndexID=overlayItem.Identify;button.FrameID=i;button.OverlayFrame=overlayFrame;button.Frame=item.Frame;return button;}}}return null;};//是否在X轴坐标上
2571
+ if(x>=left&&x<=right&&y>bottom&&y<chartHeight)return-3;return-1;};this.PtInChartFrame=function(x,y)//鼠标在图形区域, 取出上下空白
2572
+ {for(var i=0;i<this.SubFrame.length;++i){var item=this.SubFrame[i];var left=item.Frame.ChartBorder.GetLeft();var top=item.Frame.ChartBorder.GetTopEx();var width=item.Frame.ChartBorder.GetWidth();var height=item.Frame.ChartBorder.GetHeightEx();item.Frame.Canvas.beginPath();item.Frame.Canvas.rect(left,top,width,height);if(item.Frame.Canvas.isPointInPath(x,y)){return i;//转成整形
2573
+ }}return-1;};this.PtInButtons=function(x,y){for(var i=0;i<this.SubFrame.length;++i){var item=this.SubFrame[i];var button=item.Frame.PtInButtons(x,y);if(button){button.Frame=item.Frame;return button;}for(var j=0;j<item.OverlayIndex.length;++j){var overlayItem=item.OverlayIndex[j];var overlayFrame=overlayItem.Frame;if(!overlayFrame||!overlayFrame.PtInButtons)continue;var button=overlayFrame.PtInButtons(x,y);if(button){button.IndexID=overlayItem.Identify;button.FrameID=i;button.OverlayFrame=overlayFrame;button.Frame=item.Frame;return button;}}}return null;};//是否在X轴坐标上
2570
2574
  this.PtInFrameBottom=function(x,y){var left=this.ChartBorder.GetLeft();var top=this.ChartBorder.GetBottom();var width=this.ChartBorder.GetWidth();var height=this.ChartBorder.Bottom;this.Canvas.beginPath();this.Canvas.rect(left,top,width,height);if(this.Canvas.isPointInPath(x,y))return true;return false;};this.GetXFromIndex=function(index){return this.SubFrame[0].Frame.GetXFromIndex(index);};this.GetYFromData=function(value){return this.SubFrame[0].Frame.GetYFromData(value);};this.ZoomUp=function(cursorIndex){var result=this.SubFrame[0].Frame.ZoomUp(cursorIndex);this.UpdateAllFrame();return result;};this.ZoomDown=function(cursorIndex){var result=this.SubFrame[0].Frame.ZoomDown(cursorIndex);this.UpdateAllFrame();return result;};this.XCoordinateZoom=function(step,isMoveLeft){var result=this.SubFrame[0].Frame.XCoordinateZoom(step,isMoveLeft);this.UpdateAllFrame();return result;};//设置重新计算刻度坐标
2571
2575
  this.ResetXYSplit=function(){for(var _i in this.SubFrame){this.SubFrame[_i].Frame.XYSplit=true;}};this.SetLanguage=function(languageID){for(var _i2 in this.SubFrame){var item=this.SubFrame[_i2];if(item&&item.Frame){if(item.Frame.YSplitOperator)item.Frame.YSplitOperator.LanguageID=languageID;if(item.Frame.XSplitOperator)item.Frame.XSplitOperator.LanguageID=languageID;}}};this.GetCurrentPageSize=function()//获取当前页显示的数据个数
2572
2576
  {if(this.SubFrame.length<=0)return null;var item=this.SubFrame[0];if(!item||!item.Frame)return null;return item.Frame.XPointCount;};this.OnSize=function(){var obj={};this.SubFrame[0].Frame.OnSize(obj);this.UpdateAllFrame();return obj;};this.SetDataWidth=function(dataWidth){var obj=this.SubFrame[0].Frame.SetDataWidth(dataWidth);this.UpdateAllFrame();return obj;};this.UpdateAllFrame=function(){var mainFrame=this.SubFrame[0].Frame;for(var i=0;i<this.SubFrame.length;++i){var item=this.SubFrame[i];if(i>0)//第1个窗口主坐标已经算好了
@@ -2635,8 +2639,8 @@ this.AFactor;//后复权
2635
2639
  }//数据复制
2636
2640
  HistoryData.Copy=function(data){var newData=new HistoryData();newData.Date=data.Date;if(IFrameSplitOperator.IsNumber(data.Time))newData.Time=data.Time;newData.YClose=data.YClose;newData.Open=data.Open;newData.Close=data.Close;newData.High=data.High;newData.Low=data.Low;newData.Vol=data.Vol;newData.Amount=data.Amount;if(IFrameSplitOperator.IsNumber(data.FlowCapital))newData.FlowCapital=data.FlowCapital;if(IFrameSplitOperator.IsNumber(data.Position))newData.Position=data.Position;if(IFrameSplitOperator.IsNumber(data.YFClose))newData.YFClose=data.YFClose;if(IFrameSplitOperator.IsNumber(data.FClose))newData.FClose=data.FClose;//指数涨停家数
2637
2641
  if(IFrameSplitOperator.IsNumber(data.Stop))newData.Stop=data.Stop;if(IFrameSplitOperator.IsNumber(data.Up))newData.Up=data.Up;if(IFrameSplitOperator.IsNumber(data.Down))newData.Down=data.Down;if(IFrameSplitOperator.IsNumber(data.Unchanged))newData.Unchanged=data.Unchanged;//复权因子
2638
- if(IFrameSplitOperator.IsNumber(data.BFactor))newData.BFactor=data.BFactor;if(IFrameSplitOperator.IsNumber(data.AFactor))newData.AFactor=data.AFactor;if(data.OrderFlow)newData.OrderFlow=data.OrderFlow;return newData;};//把数据 src 复制到 dest中
2639
- HistoryData.CopyTo=function(dest,src){dest.Date=src.Date;if(IFrameSplitOperator.IsNumber(src.Time))dest.Time=src.Time;dest.YClose=src.YClose;dest.Open=src.Open;dest.Close=src.Close;dest.High=src.High;dest.Low=src.Low;dest.Vol=src.Vol;dest.Amount=src.Amount;if(IFrameSplitOperator.IsNumber(src.FlowCapital))dest.FlowCapital=src.FlowCapital;if(IFrameSplitOperator.IsNumber(src.Position))dest.Position=src.Position;if(IFrameSplitOperator.IsNumber(src.YFClose))dest.YFClose=src.YFClose;if(IFrameSplitOperator.IsNumber(src.FClose))dest.FClose=src.FClose;if(IFrameSplitOperator.IsNumber(src.Stop))dest.Stop=src.Stop;if(IFrameSplitOperator.IsNumber(src.Up))dest.Up=src.Up;if(IFrameSplitOperator.IsNumber(src.Down))dest.Down=src.Down;if(IFrameSplitOperator.IsNumber(src.Unchanged))dest.Unchanged=src.Unchanged;if(IFrameSplitOperator.IsNumber(src.BFactor))dest.BFactor=src.BFactor;if(IFrameSplitOperator.IsNumber(src.AFactor))dest.AFactor=src.AFactor;};//数据复权拷贝
2642
+ if(IFrameSplitOperator.IsNumber(data.BFactor))newData.BFactor=data.BFactor;if(IFrameSplitOperator.IsNumber(data.AFactor))newData.AFactor=data.AFactor;if(data.OrderFlow)newData.OrderFlow=data.OrderFlow;if(data.ColorData)newData.ColorData=data.ColorData;return newData;};//把数据 src 复制到 dest中
2643
+ HistoryData.CopyTo=function(dest,src){dest.Date=src.Date;if(IFrameSplitOperator.IsNumber(src.Time))dest.Time=src.Time;dest.YClose=src.YClose;dest.Open=src.Open;dest.Close=src.Close;dest.High=src.High;dest.Low=src.Low;dest.Vol=src.Vol;dest.Amount=src.Amount;if(IFrameSplitOperator.IsNumber(src.FlowCapital))dest.FlowCapital=src.FlowCapital;if(IFrameSplitOperator.IsNumber(src.Position))dest.Position=src.Position;if(IFrameSplitOperator.IsNumber(src.YFClose))dest.YFClose=src.YFClose;if(IFrameSplitOperator.IsNumber(src.FClose))dest.FClose=src.FClose;if(IFrameSplitOperator.IsNumber(src.Stop))dest.Stop=src.Stop;if(IFrameSplitOperator.IsNumber(src.Up))dest.Up=src.Up;if(IFrameSplitOperator.IsNumber(src.Down))dest.Down=src.Down;if(IFrameSplitOperator.IsNumber(src.Unchanged))dest.Unchanged=src.Unchanged;if(IFrameSplitOperator.IsNumber(src.BFactor))dest.BFactor=src.BFactor;if(IFrameSplitOperator.IsNumber(src.AFactor))dest.AFactor=src.AFactor;if(src.OrderFlow)dest.OrderFlow=src.OrderFlow;if(src.ColorData)dest.ColorData=src.ColorData;};//数据复权拷贝
2640
2644
  HistoryData.CopyRight=function(data,seed){var newData=new HistoryData();newData.Date=data.Date;newData.YClose=data.YClose*seed;newData.Open=data.Open*seed;newData.Close=data.Close*seed;newData.High=data.High*seed;newData.Low=data.Low*seed;newData.Vol=data.Vol;newData.Amount=data.Amount;newData.FlowCapital=data.FlowCapital;newData.Position=data.Position;newData.YFClose=data.YFClose;newData.FClose=data.FClose;return newData;};function MinuteData(){this.Close;this.Open;this.High;this.Low;this.Vol;//量
2641
2645
  this.Amount;//金额
2642
2646
  this.DateTime;this.Increase;//涨幅
@@ -2868,7 +2872,7 @@ var ZOOM_SEED=
2868
2872
  function ChartKLine(){this.newMethod=IChartPainting;//派生
2869
2873
  this.newMethod();delete this.newMethod;this.ClassName='ChartKLine';//类名
2870
2874
  this.Symbol;//股票代码
2871
- this.DrawType=0;// 0=实心K线柱子 1=收盘价线 2=美国线 3=空心K线柱子 4=收盘价面积图 5=订单流 6=空心K线柱子2(全部空心) 7=订单流样式2 8=订单流样式3
2875
+ this.DrawType=0;// 0=实心K线柱子 1=收盘价线 2=美国线 3=空心K线柱子 4=收盘价面积图 5=订单流 6=空心K线柱子2(全部空心) 7=订单流样式2 8=订单流样式3 9=自定义颜色K线
2872
2876
  this.CloseLineColor=g_JSChartResource.CloseLineColor;this.CloseLineAreaColor=g_JSChartResource.CloseLineAreaColor;this.CloseLineWidth=g_JSChartResource.CloseLineWidth;this.UpColor=g_JSChartResource.UpBarColor;this.DownColor=g_JSChartResource.DownBarColor;this.UnchagneColor=g_JSChartResource.UnchagneBarColor;//平盘
2873
2877
  this.ColorData;//五彩K线颜色 >0:g_JSChartResource.UpBarColor 其他:g_JSChartResource.DownBarColor
2874
2878
  this.TradeData;//交易系统 包含买卖数据{Buy:, Sell:, Name:指标名称 }
@@ -2919,7 +2923,7 @@ if(bFirstPoint)return;this.Canvas.stroke();if(isHScreen){this.Canvas.lineTo(bord
2919
2923
  {var isHScreen=this.ChartFrame.IsHScreen===true;var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var border=this.ChartBorder.GetBorder();var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.RightEx;var xPointCount=this.ChartFrame.XPointCount;if(isHScreen){var border=this.ChartBorder.GetHScreenBorder();xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;chartright=border.BottomEx;}var ptMax={X:null,Y:null,Value:null,Align:'left'};var ptMin={X:null,Y:null,Value:null,Align:'left'};var upColor=this.UpColor;var downColor=this.DownColor;var unchagneColor=this.UnchagneColor;this.ShowRange.Start=this.Data.DataOffset;this.ShowRange.End=this.ShowRange.Start;this.ShowRange.DataCount=0;this.ShowRange.ShowCount=xPointCount;var ptLast=null;this.DrawKRange.Start=this.Data.DataOffset;for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j,xOffset+=dataWidth+distanceWidth,++this.ShowRange.DataCount){var data=this.Data.Data[i];this.ShowRange.End=i;if(data.Open==null||data.High==null||data.Low==null||data.Close==null)continue;var left=xOffset;var right=xOffset+dataWidth;if(right>chartright)break;var x=left+(right-left)/2;var yLow=this.GetYFromData(data.Low,false);var yHigh=this.GetYFromData(data.High,false);var yOpen=this.GetYFromData(data.Open,false);var yClose=this.GetYFromData(data.Close,false);var y=yHigh;this.DrawKRange.End=i;if(ptMax.Value==null||ptMax.Value<data.High)//求最大值
2920
2924
  {ptMax.X=x;ptMax.Y=yHigh;ptMax.Value=data.High;ptMax.Align=j<xPointCount/2?'left':'right';}if(ptMin.Value==null||ptMin.Value>data.Low)//求最小值
2921
2925
  {ptMin.X=x;ptMin.Y=yLow;ptMin.Value=data.Low;ptMin.Align=j<xPointCount/2?'left':'right';}if(this.ColorData)///五彩K线颜色设置
2922
- {if(i<this.ColorData.length)upColor=downColor=unchagneColor=this.ColorData[i]>0?this.UpColor:this.DownColor;else upColor=downColor=unchagneColor=this.DownColor;}var kLineOption=this.GetCustomKLine(data);if(kLineOption){var barColor=kLineOption.Color;if(!barColor){if(data.Open<data.Close)barColor=upColor;else if(data.Open>data.Close)barColor=downColor;else barColor=unchagneColor;}var drawType=this.DrawType;if(IFrameSplitOperator.IsNumber(kLineOption.DrawType))drawType=kLineOption.DrawType;this.DrawKBar_Custom(data,dataWidth,barColor,drawType,kLineOption,x,y,left,right,yLow,yHigh,yOpen,yClose,border,isHScreen);}else if(data.Open<data.Close)//阳线
2926
+ {if(i<this.ColorData.length)upColor=downColor=unchagneColor=this.ColorData[i]>0?this.UpColor:this.DownColor;else upColor=downColor=unchagneColor=this.DownColor;}var kLineOption=this.GetCustomKLine(data);if(kLineOption){var barColor=kLineOption.Color;if(!barColor){if(data.Open<data.Close)barColor=upColor;else if(data.Open>data.Close)barColor=downColor;else barColor=unchagneColor;}var drawType=this.DrawType;if(IFrameSplitOperator.IsNumber(kLineOption.DrawType))drawType=kLineOption.DrawType;this.DrawKBar_Custom(data,dataWidth,barColor,drawType,kLineOption,x,y,left,right,yLow,yHigh,yOpen,yClose,border,isHScreen);}else if(this.DrawType==9&&data.ColorData){this.DrawKBarV2(data,data.ColorData,dataWidth,x,y,left,right,yLow,yHigh,yOpen,yClose,isHScreen);}else if(data.Open<data.Close)//阳线
2923
2927
  {this.DrawKBar_Up(data,dataWidth,upColor,this.DrawType,x,y,left,right,yLow,yHigh,yOpen,yClose,isHScreen);}else if(data.Open>data.Close)//阴线
2924
2928
  {this.DrawKBar_Down(data,dataWidth,downColor,this.DrawType,x,y,left,right,yLow,yHigh,yOpen,yClose,isHScreen);}else// 平线
2925
2929
  {this.DrawKBar_Unchagne(data,dataWidth,unchagneColor,this.DrawType,x,y,left,right,yLow,yHigh,yOpen,yClose,isHScreen);}if(this.IsShowKTooltip&&!isHScreen)//添加tooltip区域
@@ -2951,7 +2955,31 @@ else this.Canvas.fillRect(ToFixedRect(y),ToFixedRect(left),ToFixedRect(yClose-y)
2951
2955
  {this.Canvas.beginPath();this.Canvas.rect(ToFixedPoint(y),ToFixedPoint(left),ToFixedRect(yOpen-y),ToFixedRect(dataWidth));this.Canvas.stroke();}else{this.Canvas.fillRect(ToFixedRect(y),ToFixedRect(left),ToFixedRect(yOpen-y),ToFixedRect(dataWidth));}}}else{if(Math.abs(yOpen-y)<1){this.Canvas.fillRect(ToFixedRect(left),ToFixedRect(y),ToFixedRect(dataWidth),1);//高度小于1,统一使用高度1
2952
2956
  }else{if(drawType==3)//空心柱
2953
2957
  {this.Canvas.beginPath();this.Canvas.rect(ToFixedPoint(left),ToFixedPoint(y),ToFixedRect(dataWidth),ToFixedRect(yOpen-y));this.Canvas.stroke();}else{this.Canvas.fillRect(ToFixedRect(left),ToFixedRect(Math.min(y,yOpen)),ToFixedRect(dataWidth),ToFixedRect(Math.abs(yOpen-y)));}}}if(data.Open>data.Low)//下影线
2954
- {this.Canvas.beginPath();if(isHScreen){this.Canvas.moveTo(ToFixedPoint(drawType==3?Math.min(yClose,yOpen):y),ToFixedPoint(x));this.Canvas.lineTo(ToFixedPoint(yLow),ToFixedPoint(x));}else{this.Canvas.moveTo(ToFixedPoint(x),ToFixedPoint(drawType==3?Math.max(yClose,yOpen):y));this.Canvas.lineTo(ToFixedPoint(x),ToFixedPoint(yLow));}this.Canvas.stroke();}}else{this.Canvas.beginPath();if(isHScreen){this.Canvas.moveTo(yHigh,ToFixedPoint(x));this.Canvas.lineTo(yLow,ToFixedPoint(x));}else{this.Canvas.moveTo(ToFixedPoint(x),yHigh);this.Canvas.lineTo(ToFixedPoint(x),yLow);}this.Canvas.strokeStyle=barColor;this.Canvas.stroke();}};this.DrawTrade=function()//交易系统
2958
+ {this.Canvas.beginPath();if(isHScreen){this.Canvas.moveTo(ToFixedPoint(drawType==3?Math.min(yClose,yOpen):y),ToFixedPoint(x));this.Canvas.lineTo(ToFixedPoint(yLow),ToFixedPoint(x));}else{this.Canvas.moveTo(ToFixedPoint(x),ToFixedPoint(drawType==3?Math.max(yClose,yOpen):y));this.Canvas.lineTo(ToFixedPoint(x),ToFixedPoint(yLow));}this.Canvas.stroke();}}else{this.Canvas.beginPath();if(isHScreen){this.Canvas.moveTo(yHigh,ToFixedPoint(x));this.Canvas.lineTo(yLow,ToFixedPoint(x));}else{this.Canvas.moveTo(ToFixedPoint(x),yHigh);this.Canvas.lineTo(ToFixedPoint(x),yLow);}this.Canvas.strokeStyle=barColor;this.Canvas.stroke();}};this.DrawKBarV2=function(data,colorData,dataWidth,x,y,left,right,yLow,yHigh,yOpen,yClose,isHScreen){var isDrawBorder=false;var isEmptyBar=false;if(colorData.border)isDrawBorder=true;if(colorData.Type===0)isEmptyBar=true;if(dataWidth>=4){if(isDrawBorder){if(dataWidth%2!=0)dataWidth-=1;}if(data.High>data.Close)//上影线
2959
+ {if(colorData.Line){this.Canvas.strokeStyle=colorData.Line.Color;this.Canvas.beginPath();if(isHScreen){this.Canvas.moveTo(ToFixedPoint(y),ToFixedPoint(x));this.Canvas.lineTo(ToFixedPoint(isEmptyBar?Math.max(yClose,yOpen):yClose),ToFixedPoint(x));}else{if(isDrawBorder){var xFixed=left+dataWidth/2;this.Canvas.moveTo(ToFixedPoint(xFixed),ToFixedPoint(y));this.Canvas.lineTo(ToFixedPoint(xFixed),ToFixedPoint(Math.min(yClose,yOpen)));}else{this.Canvas.moveTo(ToFixedPoint(x),ToFixedPoint(y));this.Canvas.lineTo(ToFixedPoint(x),ToFixedPoint(Math.min(yClose,yOpen)));}}this.Canvas.stroke();}y=yClose;}else{y=yClose;}if(isHScreen){/*
2960
+ if (Math.abs(yOpen-y)<1)
2961
+ {
2962
+ this.Canvas.fillRect(ToFixedRect(y),ToFixedRect(left),1,ToFixedRect(dataWidth)); //高度小于1,统一使用高度1
2963
+ }
2964
+ else
2965
+ {
2966
+ if (drawType==3) //空心柱
2967
+ {
2968
+ this.Canvas.beginPath();
2969
+ this.Canvas.rect(ToFixedPoint(y),ToFixedPoint(left),ToFixedRect(yOpen-y),ToFixedRect(dataWidth));
2970
+ this.Canvas.stroke();
2971
+ }
2972
+ else
2973
+ {
2974
+ this.Canvas.fillRect(ToFixedRect(y),ToFixedRect(left),ToFixedRect(yOpen-y),ToFixedRect(dataWidth));
2975
+ }
2976
+ }
2977
+ */}else{//实心
2978
+ if(!isEmptyBar&&colorData.BarColor){this.Canvas.fillStyle=colorData.BarColor;if(Math.abs(yOpen-y)<1){this.Canvas.fillRect(ToFixedRect(left),ToFixedRect(y),ToFixedRect(dataWidth),1);//高度小于1,统一使用高度1
2979
+ }else{this.Canvas.fillRect(ToFixedRect(left),ToFixedRect(Math.min(y,yOpen)),ToFixedRect(dataWidth),ToFixedRect(Math.abs(yOpen-y)));}}if(colorData.Border)//空心
2980
+ {if(Math.abs(yOpen-y)<1){this.Canvas.fillStyle=colorData.Border.Color;this.Canvas.fillRect(ToFixedRect(left),ToFixedRect(y),ToFixedRect(dataWidth),1);//高度小于1,统一使用高度1
2981
+ }else{this.Canvas.strokeStyle=colorData.Border.Color;this.Canvas.beginPath();this.Canvas.rect(ToFixedPoint(left),ToFixedPoint(y),ToFixedRect(dataWidth),ToFixedRect(yOpen-y));this.Canvas.stroke();}}}if(data.Open>data.Low)//下影线
2982
+ {if(colorData.Line){this.Canvas.strokeStyle=colorData.Line.Color;this.Canvas.beginPath();if(isHScreen){this.Canvas.moveTo(ToFixedPoint(isEmptyBar?Math.min(yClose,yOpen):y),ToFixedPoint(x));this.Canvas.lineTo(ToFixedPoint(yLow),ToFixedPoint(x));}else{if(isDrawBorder){var xFixed=left+dataWidth/2;this.Canvas.moveTo(ToFixedPoint(xFixed),ToFixedPoint(Math.max(yClose,yOpen)));this.Canvas.lineTo(ToFixedPoint(xFixed),ToFixedPoint(yLow));}else{this.Canvas.moveTo(ToFixedPoint(x),ToFixedPoint(Math.max(yClose,yOpen)));this.Canvas.lineTo(ToFixedPoint(x),ToFixedPoint(yLow));}}this.Canvas.stroke();}}}else{var lineColor;if(isEmptyBar&&colorData.Border){lineColor=colorData.Border.Color;}else if(!isEmptyBar&&colorData.BarColor){lineColor=colorData.BarColor;}if(lineColor){this.Canvas.strokeStyle=lineColor;this.Canvas.beginPath();if(isHScreen){this.Canvas.moveTo(yHigh,ToFixedPoint(x));this.Canvas.lineTo(yLow,ToFixedPoint(x));}else{this.Canvas.moveTo(ToFixedPoint(x),yHigh);this.Canvas.lineTo(ToFixedPoint(x),yLow);}this.Canvas.stroke();}}};this.DrawTrade=function()//交易系统
2955
2983
  {if(!this.TradeData)return;var isHScreen=this.ChartFrame.IsHScreen===true;var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var xOffset=this.ChartBorder.GetLeft()+distanceWidth/2.0+2.0;var chartright=this.ChartBorder.GetRight();var xPointCount=this.ChartFrame.XPointCount;if(isHScreen){xOffset=this.ChartBorder.GetTop()+distanceWidth/2.0+2.0;chartright=this.ChartBorder.GetBottom();}var sellData=this.TradeData.Sell;var buyData=this.TradeData.Buy;var arrowWidth=dataWidth;if(arrowWidth>10)arrowWidth=10;for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j,xOffset+=dataWidth+distanceWidth){var data=this.Data.Data[i];if(data.Open==null||data.High==null||data.Low==null||data.Close==null)continue;var buy=false,sell=false;if(sellData&&i<sellData.length)sell=sellData[i]>0;if(buyData&&i<buyData.length)buy=buyData[i]>0;if(!sell&&!buy)continue;var left=xOffset;var right=xOffset+dataWidth;if(right>chartright)break;var x=left+(right-left)/2;var yLow=this.GetYFromData(data.Low,false);var yHigh=this.GetYFromData(data.High,false);var yOpen=this.GetYFromData(data.Open,false);var yClose=this.GetYFromData(data.Close,false);var y=yHigh;if(buy){this.Canvas.fillStyle=this.UpColor;this.Canvas.strokeStyle=this.UnchagneColor;this.Canvas.beginPath();if(isHScreen){this.Canvas.moveTo(yLow-1,x);this.Canvas.lineTo(yLow-arrowWidth-1,x-arrowWidth/2);this.Canvas.lineTo(yLow-arrowWidth-1,x+arrowWidth/2);}else{this.Canvas.moveTo(x,yLow+1);this.Canvas.lineTo(x-arrowWidth/2,yLow+arrowWidth+1);this.Canvas.lineTo(x+arrowWidth/2,yLow+arrowWidth+1);}this.Canvas.closePath();this.Canvas.fill();this.Canvas.stroke();}if(sell){this.Canvas.fillStyle=this.DownColor;this.Canvas.strokeStyle=this.UnchagneColor;this.Canvas.beginPath();if(isHScreen){this.Canvas.moveTo(yHigh+1,x);this.Canvas.lineTo(yHigh+arrowWidth+1,x-arrowWidth/2);this.Canvas.lineTo(yHigh+arrowWidth+1,x+arrowWidth/2);}else{this.Canvas.moveTo(x,yHigh-1);this.Canvas.lineTo(x-arrowWidth/2,yHigh-arrowWidth-1);this.Canvas.lineTo(x+arrowWidth/2,yHigh-arrowWidth-1);}this.Canvas.closePath();this.Canvas.fill();this.Canvas.stroke();}}};this.DrawTick=function()//分笔图
2956
2984
  {var isHScreen=this.ChartFrame.IsHScreen===true;var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var xOffset=this.ChartBorder.GetLeft()+distanceWidth/2.0+2.0;if(isHScreen)xOffset=this.ChartBorder.GetTop()+distanceWidth/2.0+2.0;var chartright=this.ChartBorder.GetRight();if(isHScreen)chartright=this.ChartBorder.GetBottom();var xPointCount=this.ChartFrame.XPointCount;var fontSize=parseInt(dataWidth);if(fontSize<=1)fontSize=2;else if(fontSize>=18)fontSize=18;var bFirstPoint=true;var pixelRatio=GetDevicePixelRatio();var textSize=fontSize*pixelRatio;this.Canvas.beginPath();this.Canvas.font=fontSize*pixelRatio+'px '+this.TickFontName;this.ShowRange.Start=this.Data.DataOffset;this.ShowRange.End=this.ShowRange.Start;this.ShowRange.DataCount=0;this.ShowRange.ShowCount=xPointCount;this.DrawKRange.Start=this.Data.DataOffset;for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j,xOffset+=dataWidth+distanceWidth){var data=this.Data.Data[i];this.ShowRange.End=i;if(data.Open==null||data.High==null||data.Low==null||data.Close==null)continue;var left=xOffset;var right=xOffset+dataWidth;if(right>chartright)break;var x=left+(right-left)/2;var yClose=this.ChartFrame.GetYFromData(data.Close,false);this.DrawKRange.End=i;if(data.Flag===0)this.Canvas.fillStyle=this.UpColor;else if(data.Flag==1)this.Canvas.fillStyle=this.DownColor;else this.Canvas.fillStyle=this.UnchagneColor;this.Canvas.textAlign='center';this.Canvas.textBaseline='middle';if(isHScreen)this.Canvas.fillText(this.TickSymbol,yClose,x);else this.Canvas.fillText(this.TickSymbol,x,yClose);if(this.IsShowKTooltip&&!isHScreen)//添加tooltip区域
2957
2985
  {var rect=new Rect(x-textSize/2,yClose-textSize/2,textSize,textSize);//this.Canvas.fillStyle="rgb(0,0,100)";
@@ -2963,7 +2991,7 @@ this.Canvas.clip();};this.Draw=function(){this.IsShowOrderText=false;this.Toolti
2963
2991
  this.PtMin={X:null,Y:null,Value:null,Align:'left'};//清空最小
2964
2992
  this.DrawKRange={Start:null,End:null};this.ChartFrame.ChartKLine={Max:null,Min:null};//保存K线上 显示最大最小值坐标
2965
2993
  if(!this.IsShow)return;if(ChartData.IsTickPeriod(this.Period))//分笔图
2966
- {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();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{this.DrawKBar();}if(this.TradeIcon)this.DrawTradeIcon();else this.DrawTrade();this.Canvas.restore();if(this.IsShowMaxMinPrice)//标注最大值最小值
2994
+ {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();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{this.DrawKBar();}if(this.TradeIcon)this.DrawTradeIcon();else this.DrawTrade();this.Canvas.restore();if(this.IsShowMaxMinPrice)//标注最大值最小值
2967
2995
  {if(this.ChartFrame.IsHScreen===true)this.HScreenDrawMaxMinPrice(this.PtMax,this.PtMin);else this.DrawMaxMinPrice(this.PtMax,this.PtMin);}};this.DrawMaxMinPrice=function(ptMax,ptMin){if(ptMax.X==null||ptMax.Y==null||ptMax.Value==null)return;if(ptMin.X==null||ptMin.Y==null||ptMin.Value==null)return;var leftArrow=g_JSChartResource.KLine.MaxMin.LeftArrow;var rightArrow=g_JSChartResource.KLine.MaxMin.RightArrow;var highYOffset=g_JSChartResource.KLine.MaxMin.HighYOffset;var lowYOffset=g_JSChartResource.KLine.MaxMin.LowYOffset;var defaultfloatPrecision=GetfloatPrecision(this.Symbol);this.Canvas.font=this.TextFont;this.Canvas.fillStyle=this.TextColor;var top=this.ChartBorder.GetTopEx();var bottom=this.ChartBorder.GetBottomEx();var ptTop=ptMax;if(this.ChartFrame.CoordinateType==1)//反转坐标
2968
2996
  {if(ptMax.Y<ptMin.Y)ptTop=ptMin;this.Canvas.textBaseline='top';}else{if(ptMax.Y>ptMin.Y)ptTop=ptMin;this.Canvas.textBaseline='bottom';}this.Canvas.textAlign=ptTop.Align;var left=ptTop.Align=='left'?ptTop.X:ptTop.X;if(IFrameSplitOperator.IsNumber(highYOffset))ptTop.Y+=highYOffset;var text=ptTop.Value.toFixed(defaultfloatPrecision);if(ptTop.Align=='left')text=leftArrow+text;else text=text+rightArrow;if(ptTop.Y>top-2){this.Canvas.fillText(text,left,ptTop.Y);this.ChartFrame.ChartKLine.Max={X:left,Y:ptTop.Y,Text:{BaseLine:'bottom'}};}var ptBottom=ptMin;if(this.ChartFrame.CoordinateType==1){if(ptMin.Y>ptMax.Y)ptBottom=ptMax;this.Canvas.textBaseline='bottom';}else{if(ptMax.Y>ptMin.Y)ptTop=ptMin;this.Canvas.textBaseline='top';}this.Canvas.textAlign=ptBottom.Align;var left=ptBottom.Align=='left'?ptBottom.X:ptBottom.X;if(IFrameSplitOperator.IsNumber(lowYOffset))ptBottom.Y+=lowYOffset;var text=ptMin.Value.toFixed(defaultfloatPrecision);if(ptBottom.Align=='left')text=leftArrow+text;else text=text+rightArrow;if(ptBottom.Y<bottom+1){this.Canvas.fillText(text,left,ptBottom.Y);this.ChartFrame.ChartKLine.Min={X:left,Y:ptBottom.Y,Text:{BaseLine:'top'}};}};this.HScreenDrawMaxMinPrice=function(ptMax,ptMin)//横屏模式下显示最大最小值
2969
2997
  {if(ptMax.X==null||ptMax.Y==null||ptMax.Value==null)return;if(ptMin.X==null||ptMin.Y==null||ptMin.Value==null)return;var leftArrow=g_JSChartResource.KLine.MaxMin.LeftArrow;var rightArrow=g_JSChartResource.KLine.MaxMin.RightArrow;var highYOffset=g_JSChartResource.KLine.MaxMin.HighYOffset;var lowYOffset=g_JSChartResource.KLine.MaxMin.LowYOffset;var defaultfloatPrecision=GetfloatPrecision(this.Symbol);var xText=ptMax.Y;var yText=ptMax.X;if(IFrameSplitOperator.IsNumber(highYOffset))xText+=highYOffset;this.Canvas.save();this.Canvas.translate(xText,yText);this.Canvas.rotate(90*Math.PI/180);this.Canvas.font=this.TextFont;this.Canvas.fillStyle=this.TextColor;this.Canvas.textAlign=ptMax.Align;this.Canvas.textBaseline='bottom';var text=ptMax.Value.toFixed(defaultfloatPrecision);if(ptMax.Align=='left')text=leftArrow+text;else text=text+rightArrow;this.Canvas.fillText(text,0,0);this.Canvas.restore();var xText=ptMin.Y;var yText=ptMin.X;if(IFrameSplitOperator.IsNumber(lowYOffset))xText+=lowYOffset;this.Canvas.save();this.Canvas.translate(xText,yText);this.Canvas.rotate(90*Math.PI/180);this.Canvas.font=this.TextFont;this.Canvas.fillStyle=this.TextColor;this.Canvas.textAlign=ptMin.Align;this.Canvas.textBaseline='top';var text=ptMin.Value.toFixed(defaultfloatPrecision);if(ptMin.Align=='left')text=leftArrow+text;else text=text+rightArrow;this.Canvas.fillText(text,0,0);this.Canvas.restore();};//画某一天的信息地雷
@@ -3112,7 +3140,9 @@ if(isHScreen){this.Canvas.moveTo(ToFixedPoint(yOpen),left);this.Canvas.lineTo(To
3112
3140
  if(isHScreen){this.Canvas.moveTo(ToFixedPoint(yClose),right);this.Canvas.lineTo(ToFixedPoint(yClose),x);}else{this.Canvas.moveTo(right,ToFixedPoint(yClose));this.Canvas.lineTo(x,ToFixedPoint(yClose));}this.Canvas.stroke();}}};this.DrawCloseLine=function(firstOpen)//收盘价线
3113
3141
  {var isHScreen=this.ChartFrame.IsHScreen===true;var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var xOffset=this.ChartBorder.GetLeft()+distanceWidth/2.0+2.0;if(isHScreen)xOffset=this.ChartBorder.GetTop()+distanceWidth/2.0+2.0;var chartright=this.ChartBorder.GetRight();if(isHScreen)chartright=this.ChartBorder.GetBottom();var xPointCount=this.ChartFrame.XPointCount;var firstOverlayOpen=null;var bFirstPoint=true;this.Canvas.strokeStyle=this.Color;if(IFrameSplitOperator.IsNumber(this.CloseLineWidth))this.Canvas.lineWidth=this.CloseLineWidth;this.ShowRange.Start=this.Data.DataOffset;this.ShowRange.End=this.ShowRange.Start;this.ShowRange.DataCount=0;this.ShowRange.ShowCount=xPointCount;this.ShowRange.FirstOpen=firstOpen;this.DrawKRange.Start=this.Data.DataOffset;this.Canvas.beginPath();for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j,xOffset+=dataWidth+distanceWidth,++this.ShowRange.DataCount){var data=this.Data.Data[i];if(data.Open==null||data.High==null||data.Low==null||data.Close==null)continue;if(firstOverlayOpen==null){firstOverlayOpen=data.Open;this.ShowRange.FirstOverlayOpen=data.Open;}var left=xOffset;var right=xOffset+dataWidth;if(right>chartright)break;var x=left+(right-left)/2;var yClose=this.GetYFromData(data.Close/firstOverlayOpen*firstOpen,false);this.DrawKRange.End=i;if(bFirstPoint){if(isHScreen)this.Canvas.moveTo(yClose,x);else this.Canvas.moveTo(x,yClose);bFirstPoint=false;}else{if(isHScreen)this.Canvas.lineTo(yClose,x);else this.Canvas.lineTo(x,yClose);}}if(bFirstPoint==false)this.Canvas.stroke();};this.GetFirstOpen=function(){if(!this.MainData||!this.Data)return null;var xPointCount=this.ChartFrame.XPointCount;for(var i=this.Data.DataOffset,j=0;i<this.MainData.Data.length&&j<xPointCount;++i,++j){var data=this.MainData.Data[i];if(data.Open==null||data.High==null||data.Low==null||data.Close==null)continue;return data.Open;}return null;};this.Draw=function(){this.TooltipRect=[];this.InfoTooltipRect=[];this.DrawKRange={Start:null,End:null};if(!this.MainData||!this.Data)return;var xPointCount=this.ChartFrame.XPointCount;var firstOpen=this.GetFirstOpen();//主线数据第1个开盘价
3114
3142
  if(firstOpen==null)return;var drawType=this.DrawType;if(this.CustomDrawType!=null)drawType=this.CustomDrawType;this.Canvas.save();this.ClipClient(this.ChartFrame.IsHScreen);if(drawType==1)this.DrawCloseLine(firstOpen);else if(drawType==2)this.DrawAKLine(firstOpen);else this.DrawKBar(firstOpen);this.Canvas.restore();};this.GetMaxMin=function(){var xPointCount=this.ChartFrame.XPointCount;var range={};range.Max=null;range.Min=null;if(!this.MainData||!this.Data)return range;var firstOpen=null;//主线数据第1个收盘价
3115
- for(var i=this.Data.DataOffset,j=0;i<this.MainData.Data.length&&j<xPointCount;++i,++j){var data=this.MainData.Data[i];if(data.Open==null||data.High==null||data.Low==null||data.Close==null)continue;firstOpen=data.Close;break;}if(firstOpen==null)return range;var firstOverlayOpen=null;var high,low;for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j){var data=this.Data.Data[i];if(!data||data.Open==null||data.High==null||data.Low==null||data.Close==null)continue;if(firstOverlayOpen==null)firstOverlayOpen=data.Open;high=data.High/firstOverlayOpen*firstOpen;low=data.Low/firstOverlayOpen*firstOpen;if(range.Max==null)range.Max=high;if(range.Min==null)range.Min=low;if(range.Max<high)range.Max=high;if(range.Min>low)range.Min=low;}return range;};this.GetTooltipData=function(x,y,tooltip){for(var i in this.TooltipRect){var rect=this.TooltipRect[i][1];this.Canvas.beginPath();this.Canvas.rect(rect.X,rect.Y,rect.Width,rect.Height);if(this.Canvas.isPointInPath(x,y)){var index=this.TooltipRect[i][0];tooltip.Data=this.Data.Data[index];tooltip.ChartPaint=this;return true;}}return false;};this.PtInChart=function(x,y){if(this.DrawType==1||this.DrawType==4){return null;return this.PtInLine(x,y,{KLineClose:true});}return this.PtInKBar(x,y,{OverlayKLine:true});};this.DrawSelectedStatus=function(){this.DrawLinePoint({OverlayKLine:true});};}//K线表格
3143
+ for(var i=this.Data.DataOffset,j=0;i<this.MainData.Data.length&&j<xPointCount;++i,++j){var data=this.MainData.Data[i];if(data.Open==null||data.High==null||data.Low==null||data.Close==null)continue;firstOpen=data.Close;break;}if(firstOpen==null)return range;var firstOverlayOpen=null;var high,low;for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j){var data=this.Data.Data[i];if(!data||data.Open==null||data.High==null||data.Low==null||data.Close==null)continue;if(firstOverlayOpen==null)firstOverlayOpen=data.Open;high=data.High/firstOverlayOpen*firstOpen;low=data.Low/firstOverlayOpen*firstOpen;if(range.Max==null)range.Max=high;if(range.Min==null)range.Min=low;if(range.Max<high)range.Max=high;if(range.Min>low)range.Min=low;}return range;};this.GetTooltipData=function(x,y,tooltip){for(var i in this.TooltipRect){var rect=this.TooltipRect[i][1];this.Canvas.beginPath();this.Canvas.rect(rect.X,rect.Y,rect.Width,rect.Height);if(this.Canvas.isPointInPath(x,y)){var index=this.TooltipRect[i][0];tooltip.Data=this.Data.Data[index];tooltip.ChartPaint=this;return true;}}return false;};this.PtInChart=function(x,y){var drawType=this.DrawType;if(IFrameSplitOperator.IsNumber(this.CustomDrawType))drawType=this.CustomDrawType;if(drawType==1||drawType==4)//线段,面积不支持选中
3144
+ {return null;//return this.PtInLine(x,y, {KLineClose:true});
3145
+ }return this.PtInKBar(x,y,{OverlayKLine:true});};this.DrawSelectedStatus=function(){this.DrawLinePoint({OverlayKLine:true});};}//K线表格
3116
3146
  function ChartKLineTable(){this.newMethod=IChartPainting;//派生
3117
3147
  this.newMethod();delete this.newMethod;this.ClassName='ChartKlineTable';//类名
3118
3148
  this.Data;this.RowName;this.IsShowRowName=false;this.BGColor;//背景色
@@ -3498,7 +3528,7 @@ this.BarPosition=1;//柱子方向 0=左边 1=右边
3498
3528
  this.BarWidthRate=0.3;this.VolFont;this.HQChart;this.IsDestroy=false;this.Data=null;this.MaxVol;this.MaxVolPrice;this.VolLineColor=g_JSChartResource.ChartVolProfileVisibleRange.VolLineColor;this.VolLineFont=g_JSChartResource.ChartVolProfileVisibleRange.VolLineFont;this.VolLineTextColor=g_JSChartResource.ChartVolProfileVisibleRange.VolLineTextColor;//value Area
3499
3529
  this.VAHLineColor=g_JSChartResource.ChartVolProfileVisibleRange.VAHLineColor;this.VAHTextColor=g_JSChartResource.ChartVolProfileVisibleRange.VAHTextColor;this.VALLineColor=g_JSChartResource.ChartVolProfileVisibleRange.VALLineColor;this.VALTextColor=g_JSChartResource.ChartVolProfileVisibleRange.VALTextColor;this.VAFont=g_JSChartResource.ChartVolProfileVisibleRange.VAFont;this.TextConfig=(0,_defineProperty3.default)({Color:g_JSChartResource.ChartVolProfileVisibleRange.Text.Color,Family:g_JSChartResource.ChartVolProfileVisibleRange.Text.Family,FontMaxSize:g_JSChartResource.ChartVolProfileVisibleRange.Text.FontMaxSize,FontMinSize:g_JSChartResource.ChartVolProfileVisibleRange.Text.FontMinSize},'Color',g_JSChartResource.ChartVolProfileVisibleRange.Text.Color);this.BarColor=[g_JSChartResource.ChartVolProfileVisibleRange.UpVolColor,g_JSChartResource.ChartVolProfileVisibleRange.DownVolColor,g_JSChartResource.ChartVolProfileVisibleRange.AreaUpColor,g_JSChartResource.ChartVolProfileVisibleRange.AreaDonwColor];this.MaxVolLine;this.OnDestroy=function(){this.IsDestroy=true;};this.SetOption=function(option){if(!option)return;if(IFrameSplitOperator.IsBool(option.IsShowText))this.IsShowText=option.IsShowText;if(IFrameSplitOperator.IsNumber(option.VolType))this.IsShowText=option.VolType;if(IFrameSplitOperator.IsNumber(option.BarPosition))this.BarPosition=option.BarPosition;if(IFrameSplitOperator.IsNumber(option.BarWidthRate))this.IsShowText=option.BarWidthRate;};this.PtInChart=function(x,y){if(this.MaxVolLine){if(x>=this.MaxVolLine.Start.X&&x<=this.MaxVolLine.End.X&&y>=this.MaxVolLine.Start.Y-5&&y<this.MaxVolLine.Start.Y+5)return{Identify:this.Identify,Chart:this};}return null;};this.SetSelectedStatus=function(status){if(status==0)this.IsDrawFirst=true;else this.IsDrawFirst=false;};this.DrawSelectedStatus=function(){var radius=this.SelectedRadius;var pixelRatio=GetDevicePixelRatio();this.Canvas.save();if(this.MaxVolLine){this.Canvas.lineWidth=this.SelectedLineWidth*pixelRatio;this.Canvas.strokeStyle=this.SelectedLineColor;if(this.SelectedBGColor)this.Canvas.fillStyle=this.SelectedBGColor;var space=(this.MaxVolLine.End.X-this.MaxVolLine.Start.X)/6;var aryPoint=[];for(var x=this.MaxVolLine.Start.X+space;x<this.MaxVolLine.End.X;x+=space){aryPoint.push({X:x,Y:this.MaxVolLine.Start.Y});}for(var i=0;i<aryPoint.length;++i){var item=aryPoint[i];this.Canvas.beginPath();this.Canvas.arc(item.X,item.Y,radius,0,360,false);this.Canvas.closePath();if(this.SelectedBGColor)this.Canvas.fill();this.Canvas.stroke();}}this.Canvas.restore();};this.Draw=function(){this.VolFont=null;this.MaxVolLine=null;this.IsHScreen=this.ChartFrame.IsHScreen===true;if(this.ChartFrame.IsMinSize)return;if(this.NotSupportMessage){this.DrawNotSupportmessage();return;}if(!this.Data||!this.Data.Data)return;this.Canvas.save();this.DrawVolBar();this.Canvas.restore();};this.DrawPriceLine=function(){var left=this.ChartBorder.GetLeft();var right=this.ChartBorder.GetRight();var pixelTatio=GetDevicePixelRatio();var aryPrice=[];var maxVolPrice=this.MaxVolPrice;if(IFrameSplitOperator.IsNumber(this.Data.MaxVolPrice))maxVolPrice=this.Data.MaxVolPrice;if(maxVolPrice>=this.ChartFrame.HorizontalMin&&maxVolPrice<=this.ChartFrame.HorizontalMax)aryPrice.push({Price:maxVolPrice,Font:this.VolLineFont,LineColor:this.VolLineColor,LineWidth:2,TextColor:this.VolLineTextColor,Type:1});if(IFrameSplitOperator.IsNumber(this.Data.VAHPrice)&&this.Data.VAHPrice>=this.ChartFrame.HorizontalMin&&this.Data.VAHPrice<=this.ChartFrame.HorizontalMax)aryPrice.push({Price:this.Data.VAHPrice,Font:this.VAFont,LineColor:this.VAHLineColor,LineWidth:2,TextColor:this.VAHTextColor,Type:2});if(IFrameSplitOperator.IsNumber(this.Data.VALPrice)&&this.Data.VALPrice>=this.ChartFrame.HorizontalMin&&this.Data.VALPrice<=this.ChartFrame.HorizontalMax)aryPrice.push({Price:this.Data.VALPrice,Font:this.VAFont,LineColor:this.VALLineColor,LineWidth:2,TextColor:this.VALTextColor,Type:3});for(var i=0;i<aryPrice.length;++i){var item=aryPrice[i];var yLine=ToFixedPoint2(item.LineWidth,this.ChartFrame.GetYFromData(item.Price,false));this.Canvas.lineWidth=item.LineWidth;this.Canvas.strokeStyle=item.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(left,yLine);this.Canvas.lineTo(right,yLine);this.Canvas.stroke();if(item.Type==1)this.MaxVolLine={Start:{X:left,Y:yLine},End:{X:right,Y:yLine}};if(this.ChartBorder.Right>10)//刻度文字
3500
3530
  {var defaultfloatPrecision=GetfloatPrecision(this.HQChart.Symbol);//价格小数位数
3501
- var text=item.Price.toFixed(defaultfloatPrecision);this.Canvas.font=item.Font;this.Canvas.textAlign="left";this.Canvas.textBaseline="middle";var fontHeight=this.GetFontHeight();var textWidth=this.Canvas.measureText(text).width+2*pixelTatio;this.Canvas.fillStyle=item.LineColor;this.Canvas.fillRect(right,yLine-fontHeight/2,textWidth,fontHeight);this.Canvas.fillStyle=item.TextColor;this.Canvas.fillText(text,right+1*pixelTatio,yLine);}}};this.DrawVolBar=function(){var cellHeight=this.GetPriceYOffset(this.Data.PriceOffset);var left=this.ChartBorder.GetLeft();var right=this.ChartBorder.GetRight();var top=this.ChartFrame.GetYFromData(this.Data.MaxPrice)-cellHeight/2;var bottom=this.ChartFrame.GetYFromData(this.Data.MinPrice)+cellHeight/2;var width=right-left;var height=bottom-top;var maxBarWidth=width*this.BarWidthRate;if(this.IsShowText){this.VolFont=this.GetDynamicVolTextFont(cellHeight,maxBarWidth);if(this.VolFont)this.Canvas.font=this.VolFont;}for(var i=0,j=0;i<this.Data.Data.length;++i){var item=this.Data.Data[i];if(item.Price<this.ChartFrame.HorizontalMin||item.Price>this.ChartFrame.HorizontalMax)continue;this.DrawVolBarItem(item,left,right,maxBarWidth,cellHeight);}this.DrawPriceLine();};this.DrawVolBarItem=function(item,left,right,maxBarWidth,cellHeight){var barLeft=left;var barRight=right;var barTop=this.ChartFrame.GetYFromData(item.Price)-cellHeight/2;if(this.VolType==1){if(!item.TotalVol)return;if(!IFrameSplitOperator.IsNumber(item.TotalVol.Value))return;var barWidth=item.TotalVol.Value*maxBarWidth/this.MaxVol;var color;if(IFrameSplitOperator.IsNumber(item.TotalVol.ColorID))color=this.BarColor[item.TotalVol.ColorID];else if(item.TotalVol.Color)color=item.TotalVol.Color;this.Canvas.fillStyle=color;if(this.BarPosition==1){this.Canvas.fillRect(barRight,ToFixedRect(barTop),-barWidth,ToFixedRect(cellHeight-1));}else{this.Canvas.fillRect(barLeft,ToFixedRect(barTop),barWidth,ToFixedRect(cellHeight-1));}if(this.IsShowText&&this.VolFont){var text=IFrameSplitOperator.FormatVolString(item.TotalVol.Value,this.HQChart.LanguageID);this.Canvas.textBaseline='middle';this.Canvas.fillStyle=this.TextConfig.Color;if(this.BarPosition==1){this.Canvas.textAlign='right';this.Canvas.fillText(text,right-5,barTop+cellHeight/2);}else{this.Canvas.textAlign='left';this.Canvas.fillText(text,left+5,barTop+cellHeight/2);}}}else{var text="";for(var i=0;i<item.Vol.length;++i){var volItem=item.Vol[i];if(!IFrameSplitOperator.IsNumber(volItem.Value))continue;var color;if(IFrameSplitOperator.IsNumber(volItem.ColorID))color=this.BarColor[volItem.ColorID];else if(volItem.Color)color=volItem.Color;if(!color)continue;var barWidth=volItem.Value*maxBarWidth/this.MaxVol;this.Canvas.fillStyle=color;if(this.BarPosition==1){this.Canvas.fillRect(barRight,ToFixedRect(barTop),-barWidth,ToFixedRect(cellHeight-1));barRight-=barWidth;}else{this.Canvas.fillRect(barLeft,ToFixedRect(barTop),barWidth,ToFixedRect(cellHeight-1));barLeft+=barWidth;}var volText=IFrameSplitOperator.FormatVolString(volItem.Value,this.HQChart.LanguageID);if(text.length>0)text+="x";text+=volText;}if(this.IsShowText&&this.VolFont){this.Canvas.textBaseline='middle';this.Canvas.fillStyle=this.TextConfig.Color;if(this.BarPosition==1){this.Canvas.textAlign='right';this.Canvas.fillText(text,right-5,barTop+cellHeight/2);}else{this.Canvas.textAlign='left';this.Canvas.fillText(text,left+5,barTop+cellHeight/2);}}}};this.GetPriceYOffset=function(value){var frame=this.ChartFrame;var y=frame.ChartBorder.GetHeightEx()*value/(frame.HorizontalMax-frame.HorizontalMin);return y;};this.GetDynamicVolTextFont=function(cellHeight,width,fontOption){var fontSize=parseInt(cellHeight)-2;if(cellHeight<5)fontSize=parseInt(cellHeight);//高度太小了就不要上下间距了
3531
+ var text=item.Price.toFixed(defaultfloatPrecision);this.Canvas.font=item.Font;this.Canvas.textAlign="left";this.Canvas.textBaseline="middle";var fontHeight=this.GetFontHeight();var textWidth=this.Canvas.measureText(text).width+2*pixelTatio;this.Canvas.fillStyle=item.LineColor;this.Canvas.fillRect(right,yLine-fontHeight/2,textWidth,fontHeight);this.Canvas.fillStyle=item.TextColor;this.Canvas.fillText(text,right+1*pixelTatio,yLine);}}};this.DrawVolBar=function(){var cellHeight=this.GetPriceYOffset(this.Data.PriceOffset);var left=this.ChartBorder.GetLeft();var right=this.ChartBorder.GetRight();var top=this.ChartFrame.GetYFromData(this.Data.MaxPrice)-cellHeight/2;var bottom=this.ChartFrame.GetYFromData(this.Data.MinPrice)+cellHeight/2;var width=right-left;var height=bottom-top;var maxBarWidth=width*this.BarWidthRate;if(this.IsShowText){this.VolFont=this.GetDynamicVolTextFont(cellHeight,maxBarWidth);if(this.VolFont)this.Canvas.font=this.VolFont;}for(var i=0,j=0;i<this.Data.Data.length;++i){var item=this.Data.Data[i];if(item.Price<this.ChartFrame.HorizontalMin||item.Price>this.ChartFrame.HorizontalMax)continue;this.DrawVolBarItem(item,left,right,maxBarWidth,cellHeight);}this.DrawPriceLine();};this.DrawVolBarItem=function(item,left,right,maxBarWidth,cellHeight){var barLeft=left;var barRight=right;var barTop=this.ChartFrame.GetYFromData(item.Price)-cellHeight/2;var barHeight=cellHeight-1;if(barHeight<1)barHeight=1;if(this.VolType==1){if(!item.TotalVol)return;if(!IFrameSplitOperator.IsNumber(item.TotalVol.Value))return;var barWidth=item.TotalVol.Value*maxBarWidth/this.MaxVol;var color;if(IFrameSplitOperator.IsNumber(item.TotalVol.ColorID))color=this.BarColor[item.TotalVol.ColorID];else if(item.TotalVol.Color)color=item.TotalVol.Color;this.Canvas.fillStyle=color;if(this.BarPosition==1){this.Canvas.fillRect(barRight,ToFixedRect(barTop),-barWidth,ToFixedRect(barHeight));}else{this.Canvas.fillRect(barLeft,ToFixedRect(barTop),barWidth,ToFixedRect(barHeight));}if(this.IsShowText&&this.VolFont){var text=IFrameSplitOperator.FormatVolString(item.TotalVol.Value,this.HQChart.LanguageID);this.Canvas.textBaseline='middle';this.Canvas.fillStyle=this.TextConfig.Color;if(this.BarPosition==1){this.Canvas.textAlign='right';this.Canvas.fillText(text,right-5,barTop+cellHeight/2);}else{this.Canvas.textAlign='left';this.Canvas.fillText(text,left+5,barTop+cellHeight/2);}}}else{var text="";for(var i=0;i<item.Vol.length;++i){var volItem=item.Vol[i];if(!IFrameSplitOperator.IsNumber(volItem.Value))continue;var color;if(IFrameSplitOperator.IsNumber(volItem.ColorID))color=this.BarColor[volItem.ColorID];else if(volItem.Color)color=volItem.Color;if(!color)continue;var barWidth=volItem.Value*maxBarWidth/this.MaxVol;this.Canvas.fillStyle=color;if(this.BarPosition==1){this.Canvas.fillRect(barRight,ToFixedRect(barTop),-barWidth,ToFixedRect(barHeight));barRight-=barWidth;}else{this.Canvas.fillRect(barLeft,ToFixedRect(barTop),barWidth,ToFixedRect(barHeight));barLeft+=barWidth;}var volText=IFrameSplitOperator.FormatVolString(volItem.Value,this.HQChart.LanguageID);if(text.length>0)text+="x";text+=volText;}if(this.IsShowText&&this.VolFont){this.Canvas.textBaseline='middle';this.Canvas.fillStyle=this.TextConfig.Color;if(this.BarPosition==1){this.Canvas.textAlign='right';this.Canvas.fillText(text,right-5,barTop+cellHeight/2);}else{this.Canvas.textAlign='left';this.Canvas.fillText(text,left+5,barTop+cellHeight/2);}}}};this.GetPriceYOffset=function(value){var frame=this.ChartFrame;var y=frame.ChartBorder.GetHeightEx()*value/(frame.HorizontalMax-frame.HorizontalMin);return y;};this.GetDynamicVolTextFont=function(cellHeight,width,fontOption){var fontSize=parseInt(cellHeight)-2;if(cellHeight<5)fontSize=parseInt(cellHeight);//高度太小了就不要上下间距了
3502
3532
  if(fontSize>this.TextConfig.FontMaxSize)fontSize=this.TextConfig.FontMaxSize;else if(fontSize<=0)fontSize=1;if(fontSize<this.TextConfig.FontMinSize)return null;var font=this.FormatFontString(fontSize,this.TextConfig.Family,fontOption);return font;};this.FormatFontString=function(fontSize,family,option){var font;if(!option){font=fontSize+'px '+family;}else{if(option.Weight)font=option.Weight+' '+fontSize+'px '+family;}return font;};this.GetMaxMin=function(){var range={Min:null,Max:null};return range;};}//堆积柱状图
3503
3533
  function ChartStackedBar(){this.newMethod=IChartPainting;//派生
3504
3534
  this.newMethod();delete this.newMethod;this.ClassName="ChartStackedBar";this.Data;//{ Data:[ [bar1, bar2], [bar1,bar2 ] ] };
@@ -4337,7 +4367,7 @@ var right=this.Frame.ChartBorder.GetRight();if(this.Frame.IsHScreen===true){bott
4337
4367
  drawLeft=left;left+=textWidth;if(left>right)break;this.Canvas.fillText(text,drawLeft,bottom,textWidth);}if(left>right)break;}}catch(err){_didIteratorError9=true;_iteratorError9=err;}finally{try{if(!_iteratorNormalCompletion9&&_iterator9.return){_iterator9.return();}}finally{if(_didIteratorError9){throw _iteratorError9;}}}};this.HScreenDraw=function(){var border=this.Frame.ChartBorder.GetHScreenBorder();var xText=this.Frame.ChartBorder.GetRightTitle();var yText=border.TopEx;this.Canvas.translate(xText,yText);this.Canvas.rotate(90*Math.PI/180);var left=1;var bottom=-this.Frame.ChartBorder.TitleHeight/2;//上下居中显示
4338
4368
  var right=this.Frame.ChartBorder.GetHeight();this.Canvas.textAlign="left";this.Canvas.textBaseline="middle";this.Canvas.font=this.Font;if(this.Title&&this.IsShowIndexName){var textWidth=this.Canvas.measureText(this.Title).width+2;if(this.IsDrawTitleBG){var spaceSize=GetDevicePixelRatio()*2;this.Canvas.fillStyle=this.BGColor;this.TitleRect={Left:this.Frame.ChartBorder.GetRightTitle(),Top:border.TopEx,Width:this.Frame.ChartBorder.TitleHeight,Height:textWidth};//保存下标题的坐标
4339
4369
  var drawRect={Left:left,Top:-this.Frame.ChartBorder.TitleHeight+spaceSize,Width:textWidth,Height:this.Frame.ChartBorder.TitleHeight-spaceSize*2};this.Canvas.fillRect(drawRect.Left,drawRect.Top,drawRect.Width,drawRect.Height);}this.Canvas.fillStyle=this.TitleColor;this.Canvas.fillText(this.Title,left,bottom,textWidth);left+=textWidth;left+=this.TitleSpace;}var isShowLastData=this.IsShowLastData();var lockRect=this.Frame.GetLockRect();if(lockRect)//指标上锁区域不显示动态标题
4340
- {var index=Math.abs(this.CursorIndex-0.5);if(this.IsKLineFrame)index=this.CursorIndex;var x=this.Frame.GetXFromIndex(index.toFixed(0));if(x>=lockRect.Top)return;if(isShowLastData)return;}for(var i in this.Data){var item=this.Data[i];var outText=this.GetTitleItem(item,isShowLastData);if(!outText)continue;var valueText=outText.Text;var aryText=outText.ArrayText;if(aryText){var text;for(var k=0;k<aryText.length;++k){var titleItem=aryText[k];if(titleItem.Name)text=titleItem.Name+":"+titleItem.Text;else text=titleItem.Text;var space=this.ParamSpace*GetDevicePixelRatio();var textWidth=this.Canvas.measureText(text).width+space;if(left+textWidth>right)break;this.Canvas.fillStyle=titleItem.Color;this.Canvas.fillText(text,left,bottom,textWidth);left+=textWidth;}}else{this.Canvas.fillStyle=item.Color;var text=item.Name+":"+valueText;var space=this.ParamSpace*GetDevicePixelRatio();var textWidth=this.Canvas.measureText(text).width+space;//后空2个像素
4370
+ {var index=Math.abs(this.CursorIndex-0.5);if(this.IsKLineFrame)index=this.CursorIndex;var x=this.Frame.GetXFromIndex(index.toFixed(0));if(x>=lockRect.Top)return;if(isShowLastData)return;}for(var i in this.Data){var item=this.Data[i];var outText=this.GetTitleItem(item,isShowLastData);if(!outText)continue;var valueText=outText.Text;var aryText=outText.ArrayText;if(aryText){var text;for(var k=0;k<aryText.length;++k){var titleItem=aryText[k];if(titleItem.Name)text=titleItem.Name+":"+titleItem.Text;else text=titleItem.Text;var space=this.ParamSpace*GetDevicePixelRatio();var textWidth=this.Canvas.measureText(text).width+space;if(left+textWidth>right)break;this.Canvas.fillStyle=titleItem.Color;this.Canvas.fillText(text,left,bottom,textWidth);left+=textWidth;}}else{this.Canvas.fillStyle=item.Color;var text=valueText;if(item.Name){var dyTitle=this.GetDynamicOutName(item.Name);if(dyTitle)text=dyTitle+":"+valueText;else text=item.Name+":"+valueText;}var space=this.ParamSpace*GetDevicePixelRatio();var textWidth=this.Canvas.measureText(text).width+space;//后空2个像素
4341
4371
  if(left+textWidth>right)break;this.Canvas.fillText(text,left,bottom,textWidth);left+=textWidth;}}if(this.Explain)//说明信息
4342
4372
  {this.Canvas.fillStyle=this.TitleColor;var text="说明:"+this.Explain;var textWidth=this.Canvas.measureText(text).width+2;if(left+textWidth<right){this.Canvas.fillText(text,left,bottom,textWidth);left+=textWidth;}}if(this.OverlayIndexType.Position==1)this.DrawOverlayIndexSingleLine();else this.DrawOverlayIndex(left+5*GetDevicePixelRatio());//间距都空点 和主指标区分开
4343
4373
  };this.OnDrawEventCallback=function(drawData){if(!this.OnDrawEvent||!this.OnDrawEvent.Callback)return;var data={Draw:drawData,Name:'DynamicChartTitlePainting'};this.OnDrawEvent.Callback(this.OnDrawEvent,data,this);};this.GetFontHeight=function(font){return GetFontHeight(this.Canvas,font,"擎");};}//画图工具
@@ -4722,7 +4752,7 @@ if(this.Status==10){if(this.DataStatus==0)this.DrawLineBorder(ptStart,ptEnd);}el
4722
4752
  this.Canvas.restore();};this.MainDraw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(this.DataStatus!=1)return;if(this.Status!=10)return;this.ClipFrame();var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:true});this.DrawVolBar();this.Canvas.restore();};this.DrawLineBorder=function(ptStart,ptEnd){this.Canvas.strokeStyle=this.LineColor;var top=this.ChartBorder.GetTopEx();var bottom=this.ChartBorder.GetBottomEx();this.Canvas.beginPath();this.Canvas.moveTo(ptStart.X,ptStart.Y);this.Canvas.lineTo(ptEnd.X,ptEnd.Y);this.Canvas.moveTo(ptStart.X,top);this.Canvas.lineTo(ptStart.X,bottom);this.Canvas.moveTo(ptEnd.X,top);this.Canvas.lineTo(ptEnd.X,bottom);this.Canvas.stroke();};this.DrawVolBar=function(){var start=this.Value[0],end=this.Value[1];if(start.XValue>end.XValue){start=this.Value[1];end=this.Value[0];}var dataOffset=this.GetKDataOffset();var cellHeight=this.GetPriceYOffset(this.Data.PriceOffset);var left=this.Frame.GetXFromIndex(start.XValue-dataOffset,false);var right=this.Frame.GetXFromIndex(end.XValue-dataOffset,false);var top=this.Frame.GetYFromData(this.Data.MaxPrice)-cellHeight/2;var bottom=this.Frame.GetYFromData(this.Data.MinPrice)+cellHeight/2;var width=right-left;var height=bottom-top;var maxBarWidth=width*this.BarWidthRate;this.Canvas.fillStyle=this.BGColor;//JSConsole.Chart.Log('[ChartDrawVolProfile::DrawVolBar] BGColor ', this.BGColor);
4723
4753
  this.Canvas.fillRect(left,top,width,height);//背景
4724
4754
  if(this.MaxVolPrice>=this.Frame.HorizontalMin&&this.MaxVolPrice<=this.Frame.HorizontalMax){var lineWidth=2;var yLine=ToFixedPoint2(lineWidth,this.Frame.GetYFromData(this.MaxVolPrice,false));this.Canvas.lineWidth=lineWidth;this.Canvas.strokeStyle=this.VolLineColor;this.Canvas.beginPath();this.Canvas.moveTo(left,yLine);this.Canvas.lineTo(right,yLine);this.Canvas.stroke();var linePoint={Start:{X:left,Y:yLine},End:{X:right,Y:yLine}};this.LinePoint.push(linePoint);}if(this.IsShowText){this.VolFont=this.GetDynamicVolTextFont(cellHeight,maxBarWidth);if(this.VolFont)this.Canvas.font=this.VolFont;}//this.Canvas.lineWidth=1;
4725
- for(var i=0;i<this.Data.Data.length;++i){var item=this.Data.Data[i];if(item.Price<this.Frame.HorizontalMin||item.Price>this.Frame.HorizontalMax)continue;this.DrawVolBarItem(item,left,right,maxBarWidth,cellHeight);}};this.DrawVolBarItem=function(item,left,right,maxBarWidth,cellHeight){var barLeft=left;var barRight=right;var barTop=this.Frame.GetYFromData(item.Price)-cellHeight/2;if(this.VolType==1){if(!item.TotalVol)return;if(!IFrameSplitOperator.IsNumber(item.TotalVol.Value))return;var barWidth=item.TotalVol.Value*maxBarWidth/this.MaxVol;var color;if(IFrameSplitOperator.IsNumber(item.TotalVol.ColorID))color=this.BarColor[item.TotalVol.ColorID];else if(item.TotalVol.Color)color=item.TotalVol.Color;this.Canvas.fillStyle=color;if(this.BarPosition==1){this.Canvas.fillRect(barRight,ToFixedRect(barTop),-barWidth,ToFixedRect(cellHeight-1));}else{this.Canvas.fillRect(barLeft,ToFixedRect(barTop),barWidth,ToFixedRect(cellHeight-1));}if(this.IsShowText&&this.VolFont){var text=IFrameSplitOperator.FormatVolString(item.TotalVol.Value,this.HQChart.LanguageID);this.Canvas.textBaseline='middle';this.Canvas.fillStyle=this.TextConfig.Color;if(this.BarPosition==1){this.Canvas.textAlign='right';this.Canvas.fillText(text,right-5,barTop+cellHeight/2);}else{this.Canvas.textAlign='left';this.Canvas.fillText(text,left+5,barTop+cellHeight/2);}}}else{var text="";for(var i=0;i<item.Vol.length;++i){var volItem=item.Vol[i];if(!IFrameSplitOperator.IsNumber(volItem.Value))continue;var color;if(IFrameSplitOperator.IsNumber(volItem.ColorID))color=this.BarColor[volItem.ColorID];else if(volItem.Color)color=volItem.Color;if(!color)continue;var barWidth=volItem.Value*maxBarWidth/this.MaxVol;this.Canvas.fillStyle=color;if(this.BarPosition==1){this.Canvas.fillRect(barRight,ToFixedRect(barTop),-barWidth,ToFixedRect(cellHeight-1));barRight-=barWidth;}else{this.Canvas.fillRect(barLeft,ToFixedRect(barTop),barWidth,ToFixedRect(cellHeight-1));barLeft+=barWidth;}var volText=IFrameSplitOperator.FormatVolString(volItem.Value,this.HQChart.LanguageID);if(text.length>0)text+="x";text+=volText;}if(this.IsShowText&&this.VolFont){this.Canvas.textBaseline='middle';this.Canvas.fillStyle=this.TextConfig.Color;if(this.BarPosition==1){this.Canvas.textAlign='right';this.Canvas.fillText(text,right-5,barTop+cellHeight/2);}else{this.Canvas.textAlign='left';this.Canvas.fillText(text,left+5,barTop+cellHeight/2);}}}};this.GetKDataOffset=function(){var kData=this.HQChart.ChartPaint[0].Data;return kData.DataOffset;};this.GetPriceYOffset=function(value){var frame=this.Frame;var y=frame.ChartBorder.GetHeightEx()*value/(frame.HorizontalMax-frame.HorizontalMin);return y;};this.GetDynamicVolTextFont=function(cellHeight,width,fontOption){var fontSize=parseInt(cellHeight)-2;if(cellHeight<5)fontSize=parseInt(cellHeight);//高度太小了就不要上下间距了
4755
+ for(var i=0;i<this.Data.Data.length;++i){var item=this.Data.Data[i];if(item.Price<this.Frame.HorizontalMin||item.Price>this.Frame.HorizontalMax)continue;this.DrawVolBarItem(item,left,right,maxBarWidth,cellHeight);}};this.DrawVolBarItem=function(item,left,right,maxBarWidth,cellHeight){var barLeft=left;var barRight=right;var barTop=this.Frame.GetYFromData(item.Price)-cellHeight/2;var barHeight=cellHeight-1;if(barHeight<1)barHeight=1;if(this.VolType==1){if(!item.TotalVol)return;if(!IFrameSplitOperator.IsNumber(item.TotalVol.Value))return;var barWidth=item.TotalVol.Value*maxBarWidth/this.MaxVol;var color;if(IFrameSplitOperator.IsNumber(item.TotalVol.ColorID))color=this.BarColor[item.TotalVol.ColorID];else if(item.TotalVol.Color)color=item.TotalVol.Color;this.Canvas.fillStyle=color;if(this.BarPosition==1){this.Canvas.fillRect(barRight,ToFixedRect(barTop),-barWidth,ToFixedRect(barHeight));}else{this.Canvas.fillRect(barLeft,ToFixedRect(barTop),barWidth,ToFixedRect(barHeight));}if(this.IsShowText&&this.VolFont){var text=IFrameSplitOperator.FormatVolString(item.TotalVol.Value,this.HQChart.LanguageID);this.Canvas.textBaseline='middle';this.Canvas.fillStyle=this.TextConfig.Color;if(this.BarPosition==1){this.Canvas.textAlign='right';this.Canvas.fillText(text,right-5,barTop+cellHeight/2);}else{this.Canvas.textAlign='left';this.Canvas.fillText(text,left+5,barTop+cellHeight/2);}}}else{var text="";for(var i=0;i<item.Vol.length;++i){var volItem=item.Vol[i];if(!IFrameSplitOperator.IsNumber(volItem.Value))continue;var color;if(IFrameSplitOperator.IsNumber(volItem.ColorID))color=this.BarColor[volItem.ColorID];else if(volItem.Color)color=volItem.Color;if(!color)continue;var barWidth=volItem.Value*maxBarWidth/this.MaxVol;this.Canvas.fillStyle=color;if(this.BarPosition==1){this.Canvas.fillRect(barRight,ToFixedRect(barTop),-barWidth,ToFixedRect(barHeight));barRight-=barWidth;}else{this.Canvas.fillRect(barLeft,ToFixedRect(barTop),barWidth,ToFixedRect(barHeight));barLeft+=barWidth;}var volText=IFrameSplitOperator.FormatVolString(volItem.Value,this.HQChart.LanguageID);if(text.length>0)text+="x";text+=volText;}if(this.IsShowText&&this.VolFont){this.Canvas.textBaseline='middle';this.Canvas.fillStyle=this.TextConfig.Color;if(this.BarPosition==1){this.Canvas.textAlign='right';this.Canvas.fillText(text,right-5,barTop+cellHeight/2);}else{this.Canvas.textAlign='left';this.Canvas.fillText(text,left+5,barTop+cellHeight/2);}}}};this.GetKDataOffset=function(){var kData=this.HQChart.ChartPaint[0].Data;return kData.DataOffset;};this.GetPriceYOffset=function(value){var frame=this.Frame;var y=frame.ChartBorder.GetHeightEx()*value/(frame.HorizontalMax-frame.HorizontalMin);return y;};this.GetDynamicVolTextFont=function(cellHeight,width,fontOption){var fontSize=parseInt(cellHeight)-2;if(cellHeight<5)fontSize=parseInt(cellHeight);//高度太小了就不要上下间距了
4726
4756
  if(fontSize>this.TextConfig.FontMaxSize)fontSize=this.TextConfig.FontMaxSize;else if(fontSize<=0)fontSize=1;if(fontSize<this.TextConfig.FontMinSize)return null;var font=this.FormatFontString(fontSize,this.TextConfig.Family,fontOption);return font;};this.FormatFontString=function(fontSize,family,option){var font;if(!option){font=fontSize+'px '+family;}else{if(option.Weight)font=option.Weight+' '+fontSize+'px '+family;}return font;};}function ChartDrawStorage(){this.DrawData=new _map2.default();//画图工具数据 key=symbol-Period, value=Map() Key:Guid, Value:{Guid, Symbol, Period, ClassName, Value}
4727
4757
  this.StorageKey;this.GetEventCallback;//事件回调
4728
4758
  this.Load=function(key)//从本地读取画图工具
@@ -5755,17 +5785,18 @@ Explain:'成交量分布图下载',Request:{Period:this.Period,Right:this.Right,
5755
5785
  KLineChartContainer.JsonDataToHistoryData=function(data){var aryDayData=[];if(!data.data)return aryDayData;var upperSymbol=null;if(data.symbol)upperSymbol=data.symbol.toUpperCase();var isFutures=false;//是否是期货
5756
5786
  if(upperSymbol)isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol);var list=data.data;var date=0,yclose=1,open=2,high=3,low=4,close=5,vol=6,amount=7,position=8;var fclose=9,yfclose=10;//结算价, 前结算价
5757
5787
  var bfactor=11,afactor=12;//前, 后复权因子
5758
- var orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;for(var i=0;i<list.length;++i){var item=new HistoryData();var jsData=list[i];item.Date=jsData[date];item.Open=jsData[open];item.YClose=jsData[yclose];item.Close=jsData[close];item.High=jsData[high];item.Low=jsData[low];item.Vol=jsData[vol];//原始单位股
5788
+ var orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;var colorData=JSCHART_DATA_FIELD_ID.KLINE_COLOR_DATA;for(var i=0;i<list.length;++i){var item=new HistoryData();var jsData=list[i];item.Date=jsData[date];item.Open=jsData[open];item.YClose=jsData[yclose];item.Close=jsData[close];item.High=jsData[high];item.Low=jsData[low];item.Vol=jsData[vol];//原始单位股
5759
5789
  item.Amount=jsData[amount];if(IFrameSplitOperator.IsNumber(jsData[position]))item.Position=jsData[position];//期货持仓
5760
5790
  if(IFrameSplitOperator.IsNumber(jsData[fclose]))item.FClose=jsData[fclose];//期货结算价
5761
5791
  if(IFrameSplitOperator.IsNumber(jsData[yfclose]))item.YFClose=jsData[yfclose];//期货前结算价
5762
5792
  if(IFrameSplitOperator.IsNumber(jsData[bfactor]))item.BFactor=jsData[bfactor];//前复权因子
5763
5793
  if(IFrameSplitOperator.IsNumber(jsData[afactor]))item.AFactor=jsData[afactor];//后复权因子
5764
- if(!IFrameSplitOperator.IsNumber(item.Open))continue;if(jsData[orderFlow])item.OrderFlow=jsData[orderFlow];aryDayData.push(item);}return aryDayData;};KLineChartContainer.JsonDataToRealtimeData=function(data,symbol){if(!data.stock)return null;var stock;for(var i in data.stock)//查找对应的股票数据
5794
+ if(!IFrameSplitOperator.IsNumber(item.Open))continue;if(jsData[orderFlow])item.OrderFlow=jsData[orderFlow];if(jsData[colorData])item.ColorData=jsData[colorData];aryDayData.push(item);}return aryDayData;};KLineChartContainer.JsonDataToRealtimeData=function(data,symbol){if(!data.stock)return null;var stock;for(var i in data.stock)//查找对应的股票数据
5765
5795
  {var stockItem=data.stock[i];if(stockItem&&stockItem.symbol==symbol){stock=stockItem;break;}}if(!stock)return null;var upperSymbol=symbol.toUpperCase();var isSHSZ=MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol);var item=new HistoryData();item.Date=stock.date;item.Open=stock.open;item.YClose=stock.yclose;item.High=stock.high;item.Low=stock.low;item.Vol=stock.vol;//股
5766
5796
  item.Amount=stock.amount;item.Close=stock.price;if(IFrameSplitOperator.IsNumber(stock.position))item.Position=stock.position;//持仓量
5767
5797
  if(IFrameSplitOperator.IsNumber(stock.bfactor))item.BFactor=stock.bfactor;//前复权因子
5768
5798
  if(IFrameSplitOperator.IsNumber(stock.afactor))item.AFactor=stock.afactor;//后复权因子
5799
+ if(stock.colordata)item.ColorData=stock.colordata;//自定义颜色
5769
5800
  return item;};KLineChartContainer.JsonDataToMinuteRealtimeData=function(data,symbol){if(!data.stock)return null;var stock;for(var i in data.stock)//查找对应的股票数据
5770
5801
  {var stockItem=data.stock[i];if(stockItem&&stockItem.symbol==symbol){stock=stockItem;break;}}if(!stock)return null;var upperSymbol=symbol.toUpperCase();var isSHSZ=MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol);var isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol);var aryMinuteData=new Array();var preClose=stock.yclose;//前一个数据价格
5771
5802
  var date=stock.date;if(isFutures&&stock.yclearing)preClose=stock.yclearing;//期货使用昨结算价
@@ -5777,13 +5808,13 @@ if(!IFrameSplitOperator.IsNumber(item.Open))item.Open=null;if(!IFrameSplitOperat
5777
5808
  if(IFrameSplitOperator.IsNumber(jsData.price))preClose=jsData.price;aryMinuteData[i]=item;}return aryMinuteData;};//分钟K线叠加数据增量更新v2版本
5778
5809
  KLineChartContainer.JsonDataToMinuteRealtimeDataV2=function(data,symbol){if(!data||!data.overlay||!symbol)return null;var overlayData=null;for(var i=0;i<data.overlay.length;++i)//overlay={ symbol:, name:, data:[] }
5779
5810
  {var item=data.overlay[i];if(item.symbol==symbol){overlayData=item;break;}}if(!overlayData)return null;var upperSymbol=symbol.toUpperCase();var isSHSZ=MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol);var isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol);//是否是期货
5780
- var date=0,yclose=1,open=2,high=3,low=4,close=5,vol=6,amount=7,time=8,position=9,orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;;var yClose=null;for(var i=0;i<overlayData.data.length;++i){var item=new HistoryData();var jsData=overlayData.data[i];item.Date=jsData[date];item.Open=jsData[open];item.YClose=jsData[yclose];item.Close=jsData[close];item.High=jsData[high];item.Low=jsData[low];item.Vol=jsData[vol];//股
5811
+ var date=0,yclose=1,open=2,high=3,low=4,close=5,vol=6,amount=7,time=8,position=9;var orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;var yClose=null;for(var i=0;i<overlayData.data.length;++i){var item=new HistoryData();var jsData=overlayData.data[i];item.Date=jsData[date];item.Open=jsData[open];item.YClose=jsData[yclose];item.Close=jsData[close];item.High=jsData[high];item.Low=jsData[low];item.Vol=jsData[vol];//股
5781
5812
  item.Amount=jsData[amount];item.Time=jsData[time];if(IFrameSplitOperator.IsNumber(jsData[position]))item.Position=jsData[position];//期货持仓
5782
5813
  if(!IFrameSplitOperator.IsNumber(item.YClose)){if(IFrameSplitOperator.IsNumber(yClose))item.YClose=yClose;}if(IFrameSplitOperator.IsNumber(item.Close))yClose=item.Close;if(jsData[orderFlow])item.OrderFlow=jsData[orderFlow];aryMinuteData.push(item);}return aryMinuteData;};//API 返回数据 转化为array[]
5783
5814
  KLineChartContainer.JsonDataToMinuteHistoryData=function(data){var upperSymbol=null;if(data.symbol)upperSymbol=data.symbol.toUpperCase();var isSHSZ=false;if(upperSymbol)isSHSZ=MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol);var isFutures=false;//是否是期货
5784
- if(upperSymbol)isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol);var list=data.data;var aryDayData=new Array();var date=0,yclose=1,open=2,high=3,low=4,close=5,vol=6,amount=7,time=8,position=9,orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;;var yClose=null;for(var i=0;i<list.length;++i){var item=new HistoryData();var jsData=list[i];item.Date=jsData[date];item.Open=jsData[open];item.YClose=jsData[yclose];item.Close=jsData[close];item.High=jsData[high];item.Low=jsData[low];item.Vol=jsData[vol];//股
5815
+ if(upperSymbol)isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol);var list=data.data;var aryDayData=new Array();var date=0,yclose=1,open=2,high=3,low=4,close=5,vol=6,amount=7,time=8,position=9;var orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;var colorData=JSCHART_DATA_FIELD_ID.KLINE_COLOR_DATA;var yClose=null;for(var i=0;i<list.length;++i){var item=new HistoryData();var jsData=list[i];item.Date=jsData[date];item.Open=jsData[open];item.YClose=jsData[yclose];item.Close=jsData[close];item.High=jsData[high];item.Low=jsData[low];item.Vol=jsData[vol];//股
5785
5816
  item.Amount=jsData[amount];item.Time=jsData[time];if(IFrameSplitOperator.IsNumber(jsData[position]))item.Position=jsData[position];//期货持仓
5786
- if(!IFrameSplitOperator.IsNumber(item.YClose)){if(IFrameSplitOperator.IsNumber(yClose))item.YClose=yClose;}if(IFrameSplitOperator.IsNumber(item.Close))yClose=item.Close;if(jsData[orderFlow])item.OrderFlow=jsData[orderFlow];aryDayData.push(item);}/* 内部不处理无效数据, 确保外部传过来的数据是对的.
5817
+ if(!IFrameSplitOperator.IsNumber(item.YClose)){if(IFrameSplitOperator.IsNumber(yClose))item.YClose=yClose;}if(IFrameSplitOperator.IsNumber(item.Close))yClose=item.Close;if(jsData[orderFlow])item.OrderFlow=jsData[orderFlow];if(jsData[colorData])item.ColorData=jsData[colorData];aryDayData.push(item);}/* 内部不处理无效数据, 确保外部传过来的数据是对的.
5787
5818
  // 无效数据处理
5788
5819
  for(var i = 0; i < aryDayData.length; ++i)
5789
5820
  {
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "hqchart",
3
3
  "description": "stock chart",
4
4
  "author": "jones2000",
5
- "version": "1.1.11276",
5
+ "version": "1.1.11287",
6
6
  "main": "lib/main.js",
7
7
  "private": false,
8
8
  "license": "Apache License 2.0",
@@ -6262,6 +6262,7 @@ var JSCHART_DATA_FIELD_ID=
6262
6262
  {
6263
6263
  KLINE_ORDERFLOW:99,
6264
6264
  MINUTE_MULTI_DAY_EXTENDDATA:21, //多日分时图扩展数据序号
6265
+ KLINE_COLOR_DATA:66, //K线自定义颜色数据
6265
6266
  }
6266
6267
 
6267
6268
 
@@ -8840,7 +8841,15 @@ function JSChartContainer(uielement, OffscreenElement)
8840
8841
  var bDrawPicture=false; //是否正在画图
8841
8842
  if (this.CurrentChartDrawPicture)
8842
8843
  {
8843
- if (this.CurrentChartDrawPicture.Status!=20) mouseStatus={ Cursor:"crosshair", Name:"CurrentChartDrawPicture"};
8844
+ var index=this.Frame.PtInChartFrame(x,y);
8845
+ if (this.CurrentChartDrawPicture.Status!=20)
8846
+ {
8847
+ if (index>=0)
8848
+ mouseStatus={ Cursor:"crosshair", Name:"CurrentChartDrawPicture"};
8849
+ else
8850
+ mouseStatus={ Cursor:"not-allowed", Name:"CurrentChartDrawPicture"}; //不在画图区域
8851
+ }
8852
+
8844
8853
  if (this.CurrentChartDrawPicture.SetLastPoint) this.CurrentChartDrawPicture.SetLastPoint({X:x,Y:y});
8845
8854
  bDrawPicture=true;
8846
8855
  }
@@ -18054,6 +18063,27 @@ function HQTradeFrame()
18054
18063
  return -1;
18055
18064
  }
18056
18065
 
18066
+ this.PtInChartFrame=function(x,y) //鼠标在图形区域, 取出上下空白
18067
+ {
18068
+ for(var i=0; i<this.SubFrame.length; ++i)
18069
+ {
18070
+ var item=this.SubFrame[i];
18071
+ var left=item.Frame.ChartBorder.GetLeft();
18072
+ var top=item.Frame.ChartBorder.GetTopEx();
18073
+ var width=item.Frame.ChartBorder.GetWidth();
18074
+ var height=item.Frame.ChartBorder.GetHeightEx();
18075
+
18076
+ item.Frame.Canvas.beginPath();
18077
+ item.Frame.Canvas.rect(left,top,width,height);
18078
+ if (item.Frame.Canvas.isPointInPath(x,y))
18079
+ {
18080
+ return i; //转成整形
18081
+ }
18082
+ }
18083
+
18084
+ return -1;
18085
+ }
18086
+
18057
18087
  this.PtInButtons=function(x,y)
18058
18088
  {
18059
18089
  for(var i=0; i<this.SubFrame.length; ++i)
@@ -18794,6 +18824,7 @@ HistoryData.Copy=function(data)
18794
18824
  if (IFrameSplitOperator.IsNumber(data.AFactor)) newData.AFactor=data.AFactor;
18795
18825
 
18796
18826
  if (data.OrderFlow) newData.OrderFlow=data.OrderFlow;
18827
+ if (data.ColorData) newData.ColorData=data.ColorData;
18797
18828
 
18798
18829
  return newData;
18799
18830
  }
@@ -18824,6 +18855,9 @@ HistoryData.CopyTo=function(dest,src)
18824
18855
 
18825
18856
  if (IFrameSplitOperator.IsNumber(src.BFactor)) dest.BFactor=src.BFactor;
18826
18857
  if (IFrameSplitOperator.IsNumber(src.AFactor)) dest.AFactor=src.AFactor;
18858
+
18859
+ if (src.OrderFlow) dest.OrderFlow=src.OrderFlow;
18860
+ if (src.ColorData) dest.ColorData=src.ColorData;
18827
18861
  }
18828
18862
 
18829
18863
  //数据复权拷贝
@@ -22105,7 +22139,7 @@ function ChartKLine()
22105
22139
 
22106
22140
  this.ClassName='ChartKLine'; //类名
22107
22141
  this.Symbol; //股票代码
22108
- this.DrawType=0; // 0=实心K线柱子 1=收盘价线 2=美国线 3=空心K线柱子 4=收盘价面积图 5=订单流 6=空心K线柱子2(全部空心) 7=订单流样式2 8=订单流样式3
22142
+ this.DrawType=0; // 0=实心K线柱子 1=收盘价线 2=美国线 3=空心K线柱子 4=收盘价面积图 5=订单流 6=空心K线柱子2(全部空心) 7=订单流样式2 8=订单流样式3 9=自定义颜色K线
22109
22143
  this.CloseLineColor=g_JSChartResource.CloseLineColor;
22110
22144
  this.CloseLineAreaColor=g_JSChartResource.CloseLineAreaColor;
22111
22145
  this.CloseLineWidth=g_JSChartResource.CloseLineWidth;
@@ -22646,6 +22680,10 @@ function ChartKLine()
22646
22680
 
22647
22681
  this.DrawKBar_Custom(data, dataWidth, barColor, drawType, kLineOption, x, y, left, right, yLow, yHigh, yOpen, yClose, border, isHScreen);
22648
22682
  }
22683
+ else if (this.DrawType==9 && data.ColorData)
22684
+ {
22685
+ this.DrawKBarV2(data, data.ColorData, dataWidth, x, y, left, right, yLow, yHigh, yOpen, yClose, isHScreen);
22686
+ }
22649
22687
  else if (data.Open<data.Close) //阳线
22650
22688
  {
22651
22689
  this.DrawKBar_Up(data, dataWidth, upColor, this.DrawType, x, y, left, right, yLow, yHigh, yOpen, yClose, isHScreen);
@@ -23131,6 +23169,171 @@ function ChartKLine()
23131
23169
  }
23132
23170
  }
23133
23171
 
23172
+ this.DrawKBarV2=function(data, colorData, dataWidth, x, y, left, right, yLow, yHigh, yOpen, yClose, isHScreen)
23173
+ {
23174
+ var isDrawBorder=false;
23175
+ var isEmptyBar=false;
23176
+ if (colorData.border) isDrawBorder=true;
23177
+ if (colorData.Type===0) isEmptyBar=true;
23178
+
23179
+ if (dataWidth>=4)
23180
+ {
23181
+ if (isDrawBorder)
23182
+ {
23183
+ if ((dataWidth%2)!=0) dataWidth-=1;
23184
+ }
23185
+
23186
+ if (data.High>data.Close) //上影线
23187
+ {
23188
+ if (colorData.Line)
23189
+ {
23190
+ this.Canvas.strokeStyle=colorData.Line.Color;
23191
+ this.Canvas.beginPath();
23192
+ if (isHScreen)
23193
+ {
23194
+ this.Canvas.moveTo(ToFixedPoint(y),ToFixedPoint(x));
23195
+ this.Canvas.lineTo(ToFixedPoint(isEmptyBar?Math.max(yClose,yOpen):yClose),ToFixedPoint(x));
23196
+ }
23197
+ else
23198
+ {
23199
+ if (isDrawBorder)
23200
+ {
23201
+ var xFixed=left+dataWidth/2;
23202
+ this.Canvas.moveTo(ToFixedPoint(xFixed),ToFixedPoint(y));
23203
+ this.Canvas.lineTo(ToFixedPoint(xFixed),ToFixedPoint(Math.min(yClose,yOpen)));
23204
+ }
23205
+ else
23206
+ {
23207
+ this.Canvas.moveTo(ToFixedPoint(x),ToFixedPoint(y));
23208
+ this.Canvas.lineTo(ToFixedPoint(x),ToFixedPoint(Math.min(yClose,yOpen)));
23209
+ }
23210
+ }
23211
+ this.Canvas.stroke();
23212
+ }
23213
+
23214
+ y=yClose;
23215
+ }
23216
+ else
23217
+ {
23218
+ y=yClose;
23219
+ }
23220
+
23221
+ if (isHScreen)
23222
+ {
23223
+ /*
23224
+ if (Math.abs(yOpen-y)<1)
23225
+ {
23226
+ this.Canvas.fillRect(ToFixedRect(y),ToFixedRect(left),1,ToFixedRect(dataWidth)); //高度小于1,统一使用高度1
23227
+ }
23228
+ else
23229
+ {
23230
+ if (drawType==3) //空心柱
23231
+ {
23232
+ this.Canvas.beginPath();
23233
+ this.Canvas.rect(ToFixedPoint(y),ToFixedPoint(left),ToFixedRect(yOpen-y),ToFixedRect(dataWidth));
23234
+ this.Canvas.stroke();
23235
+ }
23236
+ else
23237
+ {
23238
+ this.Canvas.fillRect(ToFixedRect(y),ToFixedRect(left),ToFixedRect(yOpen-y),ToFixedRect(dataWidth));
23239
+ }
23240
+ }
23241
+ */
23242
+ }
23243
+ else
23244
+ {
23245
+
23246
+ //实心
23247
+ if (!isEmptyBar && colorData.BarColor)
23248
+ {
23249
+ this.Canvas.fillStyle=colorData.BarColor;
23250
+ if (Math.abs(yOpen-y)<1)
23251
+ {
23252
+ this.Canvas.fillRect(ToFixedRect(left),ToFixedRect(y),ToFixedRect(dataWidth),1); //高度小于1,统一使用高度1
23253
+ }
23254
+ else
23255
+ {
23256
+ this.Canvas.fillRect(ToFixedRect(left),ToFixedRect(Math.min(y,yOpen)),ToFixedRect(dataWidth),ToFixedRect(Math.abs(yOpen-y)));
23257
+ }
23258
+ }
23259
+
23260
+ if (colorData.Border) //空心
23261
+ {
23262
+ if (Math.abs(yOpen-y)<1)
23263
+ {
23264
+ this.Canvas.fillStyle=colorData.Border.Color;
23265
+ this.Canvas.fillRect(ToFixedRect(left),ToFixedRect(y),ToFixedRect(dataWidth),1); //高度小于1,统一使用高度1
23266
+ }
23267
+ else
23268
+ {
23269
+ this.Canvas.strokeStyle=colorData.Border.Color;
23270
+ this.Canvas.beginPath();
23271
+ this.Canvas.rect(ToFixedPoint(left),ToFixedPoint(y),ToFixedRect(dataWidth),ToFixedRect(yOpen-y));
23272
+ this.Canvas.stroke();
23273
+ }
23274
+ }
23275
+ }
23276
+
23277
+ if (data.Open>data.Low) //下影线
23278
+ {
23279
+ if (colorData.Line)
23280
+ {
23281
+ this.Canvas.strokeStyle=colorData.Line.Color;
23282
+ this.Canvas.beginPath();
23283
+ if (isHScreen)
23284
+ {
23285
+ this.Canvas.moveTo(ToFixedPoint(isEmptyBar?Math.min(yClose,yOpen):y),ToFixedPoint(x));
23286
+ this.Canvas.lineTo(ToFixedPoint(yLow),ToFixedPoint(x));
23287
+ }
23288
+ else
23289
+ {
23290
+ if (isDrawBorder)
23291
+ {
23292
+ var xFixed=left+dataWidth/2;
23293
+ this.Canvas.moveTo(ToFixedPoint(xFixed),ToFixedPoint(Math.max(yClose,yOpen)));
23294
+ this.Canvas.lineTo(ToFixedPoint(xFixed),ToFixedPoint(yLow));
23295
+ }
23296
+ else
23297
+ {
23298
+ this.Canvas.moveTo(ToFixedPoint(x),ToFixedPoint(Math.max(yClose,yOpen)));
23299
+ this.Canvas.lineTo(ToFixedPoint(x),ToFixedPoint(yLow));
23300
+ }
23301
+ }
23302
+ this.Canvas.stroke();
23303
+ }
23304
+ }
23305
+ }
23306
+ else
23307
+ {
23308
+ var lineColor;
23309
+ if (isEmptyBar && colorData.Border)
23310
+ {
23311
+ lineColor=colorData.Border.Color;
23312
+ }
23313
+ else if (!isEmptyBar && colorData.BarColor)
23314
+ {
23315
+ lineColor=colorData.BarColor;
23316
+ }
23317
+
23318
+ if (lineColor)
23319
+ {
23320
+ this.Canvas.strokeStyle=lineColor;
23321
+ this.Canvas.beginPath();
23322
+ if (isHScreen)
23323
+ {
23324
+ this.Canvas.moveTo(yHigh,ToFixedPoint(x));
23325
+ this.Canvas.lineTo(yLow,ToFixedPoint(x));
23326
+ }
23327
+ else
23328
+ {
23329
+ this.Canvas.moveTo(ToFixedPoint(x),yHigh);
23330
+ this.Canvas.lineTo(ToFixedPoint(x),yLow);
23331
+ }
23332
+ this.Canvas.stroke();
23333
+ }
23334
+ }
23335
+ }
23336
+
23134
23337
  this.DrawTrade=function() //交易系统
23135
23338
  {
23136
23339
  if (!this.TradeData) return;
@@ -23392,6 +23595,10 @@ function ChartKLine()
23392
23595
  {
23393
23596
  this.DrawOrderFlow_Style3();
23394
23597
  }
23598
+ else if (this.DrawType==9)
23599
+ {
23600
+ this.DrawKBar();
23601
+ }
23395
23602
  else
23396
23603
  {
23397
23604
  this.DrawKBar();
@@ -25946,10 +26153,13 @@ function ChartOverlayKLine()
25946
26153
 
25947
26154
  this.PtInChart=function(x,y)
25948
26155
  {
25949
- if (this.DrawType==1 || this.DrawType==4)
26156
+ var drawType=this.DrawType;
26157
+ if (IFrameSplitOperator.IsNumber(this.CustomDrawType)) drawType=this.CustomDrawType;
26158
+
26159
+ if (drawType==1 || drawType==4) //线段,面积不支持选中
25950
26160
  {
25951
26161
  return null;
25952
- return this.PtInLine(x,y, {KLineClose:true});
26162
+ //return this.PtInLine(x,y, {KLineClose:true});
25953
26163
  }
25954
26164
 
25955
26165
  return this.PtInKBar(x,y, {OverlayKLine:true});
@@ -33449,6 +33659,8 @@ function ChartVolProfileVisibleRange()
33449
33659
  var barLeft=left;
33450
33660
  var barRight=right;
33451
33661
  var barTop=this.ChartFrame.GetYFromData(item.Price)-cellHeight/2;
33662
+ var barHeight=cellHeight-1;
33663
+ if (barHeight<1) barHeight=1;
33452
33664
 
33453
33665
  if (this.VolType==1)
33454
33666
  {
@@ -33463,11 +33675,11 @@ function ChartVolProfileVisibleRange()
33463
33675
  this.Canvas.fillStyle=color;
33464
33676
  if (this.BarPosition==1)
33465
33677
  {
33466
- this.Canvas.fillRect(barRight,ToFixedRect(barTop),-barWidth,ToFixedRect(cellHeight-1));
33678
+ this.Canvas.fillRect(barRight,ToFixedRect(barTop),-barWidth,ToFixedRect(barHeight));
33467
33679
  }
33468
33680
  else
33469
33681
  {
33470
- this.Canvas.fillRect(barLeft,ToFixedRect(barTop),barWidth,ToFixedRect(cellHeight-1));
33682
+ this.Canvas.fillRect(barLeft,ToFixedRect(barTop),barWidth,ToFixedRect(barHeight));
33471
33683
  }
33472
33684
 
33473
33685
  if (this.IsShowText && this.VolFont)
@@ -33505,15 +33717,14 @@ function ChartVolProfileVisibleRange()
33505
33717
 
33506
33718
  var barWidth=volItem.Value*maxBarWidth/this.MaxVol;
33507
33719
  this.Canvas.fillStyle=color;
33508
-
33509
33720
  if (this.BarPosition==1)
33510
33721
  {
33511
- this.Canvas.fillRect(barRight,ToFixedRect(barTop),-barWidth,ToFixedRect(cellHeight-1));
33722
+ this.Canvas.fillRect(barRight,ToFixedRect(barTop),-barWidth,ToFixedRect(barHeight));
33512
33723
  barRight-=barWidth;
33513
33724
  }
33514
33725
  else
33515
33726
  {
33516
- this.Canvas.fillRect(barLeft,ToFixedRect(barTop),barWidth,ToFixedRect(cellHeight-1));
33727
+ this.Canvas.fillRect(barLeft,ToFixedRect(barTop),barWidth,ToFixedRect(barHeight));
33517
33728
  barLeft+=barWidth;
33518
33729
  }
33519
33730
 
@@ -44799,7 +45010,14 @@ function DynamicChartTitlePainting()
44799
45010
  else
44800
45011
  {
44801
45012
  this.Canvas.fillStyle=item.Color;
44802
- var text=item.Name+":"+valueText;
45013
+ var text=valueText;
45014
+ if (item.Name)
45015
+ {
45016
+ var dyTitle=this.GetDynamicOutName(item.Name);
45017
+ if (dyTitle) text=dyTitle+":"+valueText;
45018
+ else text=item.Name+":"+valueText;
45019
+ }
45020
+
44803
45021
  var space=this.ParamSpace*GetDevicePixelRatio();
44804
45022
  var textWidth=this.Canvas.measureText(text).width+space; //后空2个像素
44805
45023
  if ((left+textWidth)>right) break;
@@ -50590,6 +50808,8 @@ function ChartDrawVolProfile()
50590
50808
  var barLeft=left;
50591
50809
  var barRight=right;
50592
50810
  var barTop=this.Frame.GetYFromData(item.Price)-cellHeight/2;
50811
+ var barHeight=cellHeight-1;
50812
+ if (barHeight<1) barHeight=1;
50593
50813
 
50594
50814
  if (this.VolType==1)
50595
50815
  {
@@ -50604,11 +50824,11 @@ function ChartDrawVolProfile()
50604
50824
  this.Canvas.fillStyle=color;
50605
50825
  if (this.BarPosition==1)
50606
50826
  {
50607
- this.Canvas.fillRect(barRight,ToFixedRect(barTop),-barWidth,ToFixedRect(cellHeight-1));
50827
+ this.Canvas.fillRect(barRight,ToFixedRect(barTop),-barWidth,ToFixedRect(barHeight));
50608
50828
  }
50609
50829
  else
50610
50830
  {
50611
- this.Canvas.fillRect(barLeft,ToFixedRect(barTop),barWidth,ToFixedRect(cellHeight-1));
50831
+ this.Canvas.fillRect(barLeft,ToFixedRect(barTop),barWidth,ToFixedRect(barHeight));
50612
50832
  }
50613
50833
 
50614
50834
  if (this.IsShowText && this.VolFont)
@@ -50649,12 +50869,12 @@ function ChartDrawVolProfile()
50649
50869
 
50650
50870
  if (this.BarPosition==1)
50651
50871
  {
50652
- this.Canvas.fillRect(barRight,ToFixedRect(barTop),-barWidth,ToFixedRect(cellHeight-1));
50872
+ this.Canvas.fillRect(barRight,ToFixedRect(barTop),-barWidth,ToFixedRect(barHeight));
50653
50873
  barRight-=barWidth;
50654
50874
  }
50655
50875
  else
50656
50876
  {
50657
- this.Canvas.fillRect(barLeft,ToFixedRect(barTop),barWidth,ToFixedRect(cellHeight-1));
50877
+ this.Canvas.fillRect(barLeft,ToFixedRect(barTop),barWidth,ToFixedRect(barHeight));
50658
50878
  barLeft+=barWidth;
50659
50879
  }
50660
50880
 
@@ -59449,6 +59669,7 @@ KLineChartContainer.JsonDataToHistoryData=function(data)
59449
59669
  var fclose=9, yfclose=10; //结算价, 前结算价
59450
59670
  var bfactor=11, afactor=12; //前, 后复权因子
59451
59671
  var orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;
59672
+ var colorData=JSCHART_DATA_FIELD_ID.KLINE_COLOR_DATA;
59452
59673
  for (var i = 0; i < list.length; ++i)
59453
59674
  {
59454
59675
  var item = new HistoryData();
@@ -59472,6 +59693,7 @@ KLineChartContainer.JsonDataToHistoryData=function(data)
59472
59693
  if (!IFrameSplitOperator.IsNumber(item.Open)) continue;
59473
59694
 
59474
59695
  if (jsData[orderFlow]) item.OrderFlow=jsData[orderFlow];
59696
+ if (jsData[colorData]) item.ColorData=jsData[colorData];
59475
59697
 
59476
59698
  aryDayData.push(item);
59477
59699
  }
@@ -59511,6 +59733,7 @@ KLineChartContainer.JsonDataToRealtimeData=function(data, symbol)
59511
59733
 
59512
59734
  if (IFrameSplitOperator.IsNumber(stock.bfactor)) item.BFactor=stock.bfactor; //前复权因子
59513
59735
  if (IFrameSplitOperator.IsNumber(stock.afactor)) item.AFactor=stock.afactor; //后复权因子
59736
+ if (stock.colordata) item.ColorData=stock.colordata; //自定义颜色
59514
59737
  return item;
59515
59738
  }
59516
59739
 
@@ -59598,7 +59821,8 @@ KLineChartContainer.JsonDataToMinuteRealtimeDataV2=function(data,symbol)
59598
59821
  var isSHSZ=MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol);
59599
59822
  var isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol); //是否是期货
59600
59823
 
59601
- var date = 0, yclose = 1, open = 2, high = 3, low = 4, close = 5, vol = 6, amount = 7, time = 8, position=9, orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;;
59824
+ var date = 0, yclose = 1, open = 2, high = 3, low = 4, close = 5, vol = 6, amount = 7, time = 8, position=9;
59825
+ var orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;
59602
59826
  var yClose=null;
59603
59827
 
59604
59828
  for (var i = 0; i < overlayData.data.length; ++i)
@@ -59642,7 +59866,9 @@ KLineChartContainer.JsonDataToMinuteHistoryData=function(data)
59642
59866
  if (upperSymbol) isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol);
59643
59867
  var list = data.data;
59644
59868
  var aryDayData=new Array();
59645
- var date = 0, yclose = 1, open = 2, high = 3, low = 4, close = 5, vol = 6, amount = 7, time = 8, position=9, orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;;
59869
+ var date = 0, yclose = 1, open = 2, high = 3, low = 4, close = 5, vol = 6, amount = 7, time = 8, position=9;
59870
+ var orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;
59871
+ var colorData=JSCHART_DATA_FIELD_ID.KLINE_COLOR_DATA;
59646
59872
  var yClose=null;
59647
59873
  for (var i = 0; i < list.length; ++i)
59648
59874
  {
@@ -59667,6 +59893,7 @@ KLineChartContainer.JsonDataToMinuteHistoryData=function(data)
59667
59893
  if (IFrameSplitOperator.IsNumber(item.Close)) yClose=item.Close;
59668
59894
 
59669
59895
  if (jsData[orderFlow]) item.OrderFlow=jsData[orderFlow];
59896
+ if (jsData[colorData]) item.ColorData=jsData[colorData];
59670
59897
 
59671
59898
  aryDayData.push(item);
59672
59899
  }
@@ -6306,6 +6306,7 @@ var JSCHART_DATA_FIELD_ID=
6306
6306
  {
6307
6307
  KLINE_ORDERFLOW:99,
6308
6308
  MINUTE_MULTI_DAY_EXTENDDATA:21, //多日分时图扩展数据序号
6309
+ KLINE_COLOR_DATA:66, //K线自定义颜色数据
6309
6310
  }
6310
6311
 
6311
6312
 
@@ -8884,7 +8885,15 @@ function JSChartContainer(uielement, OffscreenElement)
8884
8885
  var bDrawPicture=false; //是否正在画图
8885
8886
  if (this.CurrentChartDrawPicture)
8886
8887
  {
8887
- if (this.CurrentChartDrawPicture.Status!=20) mouseStatus={ Cursor:"crosshair", Name:"CurrentChartDrawPicture"};
8888
+ var index=this.Frame.PtInChartFrame(x,y);
8889
+ if (this.CurrentChartDrawPicture.Status!=20)
8890
+ {
8891
+ if (index>=0)
8892
+ mouseStatus={ Cursor:"crosshair", Name:"CurrentChartDrawPicture"};
8893
+ else
8894
+ mouseStatus={ Cursor:"not-allowed", Name:"CurrentChartDrawPicture"}; //不在画图区域
8895
+ }
8896
+
8888
8897
  if (this.CurrentChartDrawPicture.SetLastPoint) this.CurrentChartDrawPicture.SetLastPoint({X:x,Y:y});
8889
8898
  bDrawPicture=true;
8890
8899
  }
@@ -18098,6 +18107,27 @@ function HQTradeFrame()
18098
18107
  return -1;
18099
18108
  }
18100
18109
 
18110
+ this.PtInChartFrame=function(x,y) //鼠标在图形区域, 取出上下空白
18111
+ {
18112
+ for(var i=0; i<this.SubFrame.length; ++i)
18113
+ {
18114
+ var item=this.SubFrame[i];
18115
+ var left=item.Frame.ChartBorder.GetLeft();
18116
+ var top=item.Frame.ChartBorder.GetTopEx();
18117
+ var width=item.Frame.ChartBorder.GetWidth();
18118
+ var height=item.Frame.ChartBorder.GetHeightEx();
18119
+
18120
+ item.Frame.Canvas.beginPath();
18121
+ item.Frame.Canvas.rect(left,top,width,height);
18122
+ if (item.Frame.Canvas.isPointInPath(x,y))
18123
+ {
18124
+ return i; //转成整形
18125
+ }
18126
+ }
18127
+
18128
+ return -1;
18129
+ }
18130
+
18101
18131
  this.PtInButtons=function(x,y)
18102
18132
  {
18103
18133
  for(var i=0; i<this.SubFrame.length; ++i)
@@ -18838,6 +18868,7 @@ HistoryData.Copy=function(data)
18838
18868
  if (IFrameSplitOperator.IsNumber(data.AFactor)) newData.AFactor=data.AFactor;
18839
18869
 
18840
18870
  if (data.OrderFlow) newData.OrderFlow=data.OrderFlow;
18871
+ if (data.ColorData) newData.ColorData=data.ColorData;
18841
18872
 
18842
18873
  return newData;
18843
18874
  }
@@ -18868,6 +18899,9 @@ HistoryData.CopyTo=function(dest,src)
18868
18899
 
18869
18900
  if (IFrameSplitOperator.IsNumber(src.BFactor)) dest.BFactor=src.BFactor;
18870
18901
  if (IFrameSplitOperator.IsNumber(src.AFactor)) dest.AFactor=src.AFactor;
18902
+
18903
+ if (src.OrderFlow) dest.OrderFlow=src.OrderFlow;
18904
+ if (src.ColorData) dest.ColorData=src.ColorData;
18871
18905
  }
18872
18906
 
18873
18907
  //数据复权拷贝
@@ -22149,7 +22183,7 @@ function ChartKLine()
22149
22183
 
22150
22184
  this.ClassName='ChartKLine'; //类名
22151
22185
  this.Symbol; //股票代码
22152
- this.DrawType=0; // 0=实心K线柱子 1=收盘价线 2=美国线 3=空心K线柱子 4=收盘价面积图 5=订单流 6=空心K线柱子2(全部空心) 7=订单流样式2 8=订单流样式3
22186
+ this.DrawType=0; // 0=实心K线柱子 1=收盘价线 2=美国线 3=空心K线柱子 4=收盘价面积图 5=订单流 6=空心K线柱子2(全部空心) 7=订单流样式2 8=订单流样式3 9=自定义颜色K线
22153
22187
  this.CloseLineColor=g_JSChartResource.CloseLineColor;
22154
22188
  this.CloseLineAreaColor=g_JSChartResource.CloseLineAreaColor;
22155
22189
  this.CloseLineWidth=g_JSChartResource.CloseLineWidth;
@@ -22690,6 +22724,10 @@ function ChartKLine()
22690
22724
 
22691
22725
  this.DrawKBar_Custom(data, dataWidth, barColor, drawType, kLineOption, x, y, left, right, yLow, yHigh, yOpen, yClose, border, isHScreen);
22692
22726
  }
22727
+ else if (this.DrawType==9 && data.ColorData)
22728
+ {
22729
+ this.DrawKBarV2(data, data.ColorData, dataWidth, x, y, left, right, yLow, yHigh, yOpen, yClose, isHScreen);
22730
+ }
22693
22731
  else if (data.Open<data.Close) //阳线
22694
22732
  {
22695
22733
  this.DrawKBar_Up(data, dataWidth, upColor, this.DrawType, x, y, left, right, yLow, yHigh, yOpen, yClose, isHScreen);
@@ -23175,6 +23213,171 @@ function ChartKLine()
23175
23213
  }
23176
23214
  }
23177
23215
 
23216
+ this.DrawKBarV2=function(data, colorData, dataWidth, x, y, left, right, yLow, yHigh, yOpen, yClose, isHScreen)
23217
+ {
23218
+ var isDrawBorder=false;
23219
+ var isEmptyBar=false;
23220
+ if (colorData.border) isDrawBorder=true;
23221
+ if (colorData.Type===0) isEmptyBar=true;
23222
+
23223
+ if (dataWidth>=4)
23224
+ {
23225
+ if (isDrawBorder)
23226
+ {
23227
+ if ((dataWidth%2)!=0) dataWidth-=1;
23228
+ }
23229
+
23230
+ if (data.High>data.Close) //上影线
23231
+ {
23232
+ if (colorData.Line)
23233
+ {
23234
+ this.Canvas.strokeStyle=colorData.Line.Color;
23235
+ this.Canvas.beginPath();
23236
+ if (isHScreen)
23237
+ {
23238
+ this.Canvas.moveTo(ToFixedPoint(y),ToFixedPoint(x));
23239
+ this.Canvas.lineTo(ToFixedPoint(isEmptyBar?Math.max(yClose,yOpen):yClose),ToFixedPoint(x));
23240
+ }
23241
+ else
23242
+ {
23243
+ if (isDrawBorder)
23244
+ {
23245
+ var xFixed=left+dataWidth/2;
23246
+ this.Canvas.moveTo(ToFixedPoint(xFixed),ToFixedPoint(y));
23247
+ this.Canvas.lineTo(ToFixedPoint(xFixed),ToFixedPoint(Math.min(yClose,yOpen)));
23248
+ }
23249
+ else
23250
+ {
23251
+ this.Canvas.moveTo(ToFixedPoint(x),ToFixedPoint(y));
23252
+ this.Canvas.lineTo(ToFixedPoint(x),ToFixedPoint(Math.min(yClose,yOpen)));
23253
+ }
23254
+ }
23255
+ this.Canvas.stroke();
23256
+ }
23257
+
23258
+ y=yClose;
23259
+ }
23260
+ else
23261
+ {
23262
+ y=yClose;
23263
+ }
23264
+
23265
+ if (isHScreen)
23266
+ {
23267
+ /*
23268
+ if (Math.abs(yOpen-y)<1)
23269
+ {
23270
+ this.Canvas.fillRect(ToFixedRect(y),ToFixedRect(left),1,ToFixedRect(dataWidth)); //高度小于1,统一使用高度1
23271
+ }
23272
+ else
23273
+ {
23274
+ if (drawType==3) //空心柱
23275
+ {
23276
+ this.Canvas.beginPath();
23277
+ this.Canvas.rect(ToFixedPoint(y),ToFixedPoint(left),ToFixedRect(yOpen-y),ToFixedRect(dataWidth));
23278
+ this.Canvas.stroke();
23279
+ }
23280
+ else
23281
+ {
23282
+ this.Canvas.fillRect(ToFixedRect(y),ToFixedRect(left),ToFixedRect(yOpen-y),ToFixedRect(dataWidth));
23283
+ }
23284
+ }
23285
+ */
23286
+ }
23287
+ else
23288
+ {
23289
+
23290
+ //实心
23291
+ if (!isEmptyBar && colorData.BarColor)
23292
+ {
23293
+ this.Canvas.fillStyle=colorData.BarColor;
23294
+ if (Math.abs(yOpen-y)<1)
23295
+ {
23296
+ this.Canvas.fillRect(ToFixedRect(left),ToFixedRect(y),ToFixedRect(dataWidth),1); //高度小于1,统一使用高度1
23297
+ }
23298
+ else
23299
+ {
23300
+ this.Canvas.fillRect(ToFixedRect(left),ToFixedRect(Math.min(y,yOpen)),ToFixedRect(dataWidth),ToFixedRect(Math.abs(yOpen-y)));
23301
+ }
23302
+ }
23303
+
23304
+ if (colorData.Border) //空心
23305
+ {
23306
+ if (Math.abs(yOpen-y)<1)
23307
+ {
23308
+ this.Canvas.fillStyle=colorData.Border.Color;
23309
+ this.Canvas.fillRect(ToFixedRect(left),ToFixedRect(y),ToFixedRect(dataWidth),1); //高度小于1,统一使用高度1
23310
+ }
23311
+ else
23312
+ {
23313
+ this.Canvas.strokeStyle=colorData.Border.Color;
23314
+ this.Canvas.beginPath();
23315
+ this.Canvas.rect(ToFixedPoint(left),ToFixedPoint(y),ToFixedRect(dataWidth),ToFixedRect(yOpen-y));
23316
+ this.Canvas.stroke();
23317
+ }
23318
+ }
23319
+ }
23320
+
23321
+ if (data.Open>data.Low) //下影线
23322
+ {
23323
+ if (colorData.Line)
23324
+ {
23325
+ this.Canvas.strokeStyle=colorData.Line.Color;
23326
+ this.Canvas.beginPath();
23327
+ if (isHScreen)
23328
+ {
23329
+ this.Canvas.moveTo(ToFixedPoint(isEmptyBar?Math.min(yClose,yOpen):y),ToFixedPoint(x));
23330
+ this.Canvas.lineTo(ToFixedPoint(yLow),ToFixedPoint(x));
23331
+ }
23332
+ else
23333
+ {
23334
+ if (isDrawBorder)
23335
+ {
23336
+ var xFixed=left+dataWidth/2;
23337
+ this.Canvas.moveTo(ToFixedPoint(xFixed),ToFixedPoint(Math.max(yClose,yOpen)));
23338
+ this.Canvas.lineTo(ToFixedPoint(xFixed),ToFixedPoint(yLow));
23339
+ }
23340
+ else
23341
+ {
23342
+ this.Canvas.moveTo(ToFixedPoint(x),ToFixedPoint(Math.max(yClose,yOpen)));
23343
+ this.Canvas.lineTo(ToFixedPoint(x),ToFixedPoint(yLow));
23344
+ }
23345
+ }
23346
+ this.Canvas.stroke();
23347
+ }
23348
+ }
23349
+ }
23350
+ else
23351
+ {
23352
+ var lineColor;
23353
+ if (isEmptyBar && colorData.Border)
23354
+ {
23355
+ lineColor=colorData.Border.Color;
23356
+ }
23357
+ else if (!isEmptyBar && colorData.BarColor)
23358
+ {
23359
+ lineColor=colorData.BarColor;
23360
+ }
23361
+
23362
+ if (lineColor)
23363
+ {
23364
+ this.Canvas.strokeStyle=lineColor;
23365
+ this.Canvas.beginPath();
23366
+ if (isHScreen)
23367
+ {
23368
+ this.Canvas.moveTo(yHigh,ToFixedPoint(x));
23369
+ this.Canvas.lineTo(yLow,ToFixedPoint(x));
23370
+ }
23371
+ else
23372
+ {
23373
+ this.Canvas.moveTo(ToFixedPoint(x),yHigh);
23374
+ this.Canvas.lineTo(ToFixedPoint(x),yLow);
23375
+ }
23376
+ this.Canvas.stroke();
23377
+ }
23378
+ }
23379
+ }
23380
+
23178
23381
  this.DrawTrade=function() //交易系统
23179
23382
  {
23180
23383
  if (!this.TradeData) return;
@@ -23436,6 +23639,10 @@ function ChartKLine()
23436
23639
  {
23437
23640
  this.DrawOrderFlow_Style3();
23438
23641
  }
23642
+ else if (this.DrawType==9)
23643
+ {
23644
+ this.DrawKBar();
23645
+ }
23439
23646
  else
23440
23647
  {
23441
23648
  this.DrawKBar();
@@ -25990,10 +26197,13 @@ function ChartOverlayKLine()
25990
26197
 
25991
26198
  this.PtInChart=function(x,y)
25992
26199
  {
25993
- if (this.DrawType==1 || this.DrawType==4)
26200
+ var drawType=this.DrawType;
26201
+ if (IFrameSplitOperator.IsNumber(this.CustomDrawType)) drawType=this.CustomDrawType;
26202
+
26203
+ if (drawType==1 || drawType==4) //线段,面积不支持选中
25994
26204
  {
25995
26205
  return null;
25996
- return this.PtInLine(x,y, {KLineClose:true});
26206
+ //return this.PtInLine(x,y, {KLineClose:true});
25997
26207
  }
25998
26208
 
25999
26209
  return this.PtInKBar(x,y, {OverlayKLine:true});
@@ -33493,6 +33703,8 @@ function ChartVolProfileVisibleRange()
33493
33703
  var barLeft=left;
33494
33704
  var barRight=right;
33495
33705
  var barTop=this.ChartFrame.GetYFromData(item.Price)-cellHeight/2;
33706
+ var barHeight=cellHeight-1;
33707
+ if (barHeight<1) barHeight=1;
33496
33708
 
33497
33709
  if (this.VolType==1)
33498
33710
  {
@@ -33507,11 +33719,11 @@ function ChartVolProfileVisibleRange()
33507
33719
  this.Canvas.fillStyle=color;
33508
33720
  if (this.BarPosition==1)
33509
33721
  {
33510
- this.Canvas.fillRect(barRight,ToFixedRect(barTop),-barWidth,ToFixedRect(cellHeight-1));
33722
+ this.Canvas.fillRect(barRight,ToFixedRect(barTop),-barWidth,ToFixedRect(barHeight));
33511
33723
  }
33512
33724
  else
33513
33725
  {
33514
- this.Canvas.fillRect(barLeft,ToFixedRect(barTop),barWidth,ToFixedRect(cellHeight-1));
33726
+ this.Canvas.fillRect(barLeft,ToFixedRect(barTop),barWidth,ToFixedRect(barHeight));
33515
33727
  }
33516
33728
 
33517
33729
  if (this.IsShowText && this.VolFont)
@@ -33549,15 +33761,14 @@ function ChartVolProfileVisibleRange()
33549
33761
 
33550
33762
  var barWidth=volItem.Value*maxBarWidth/this.MaxVol;
33551
33763
  this.Canvas.fillStyle=color;
33552
-
33553
33764
  if (this.BarPosition==1)
33554
33765
  {
33555
- this.Canvas.fillRect(barRight,ToFixedRect(barTop),-barWidth,ToFixedRect(cellHeight-1));
33766
+ this.Canvas.fillRect(barRight,ToFixedRect(barTop),-barWidth,ToFixedRect(barHeight));
33556
33767
  barRight-=barWidth;
33557
33768
  }
33558
33769
  else
33559
33770
  {
33560
- this.Canvas.fillRect(barLeft,ToFixedRect(barTop),barWidth,ToFixedRect(cellHeight-1));
33771
+ this.Canvas.fillRect(barLeft,ToFixedRect(barTop),barWidth,ToFixedRect(barHeight));
33561
33772
  barLeft+=barWidth;
33562
33773
  }
33563
33774
 
@@ -44843,7 +45054,14 @@ function DynamicChartTitlePainting()
44843
45054
  else
44844
45055
  {
44845
45056
  this.Canvas.fillStyle=item.Color;
44846
- var text=item.Name+":"+valueText;
45057
+ var text=valueText;
45058
+ if (item.Name)
45059
+ {
45060
+ var dyTitle=this.GetDynamicOutName(item.Name);
45061
+ if (dyTitle) text=dyTitle+":"+valueText;
45062
+ else text=item.Name+":"+valueText;
45063
+ }
45064
+
44847
45065
  var space=this.ParamSpace*GetDevicePixelRatio();
44848
45066
  var textWidth=this.Canvas.measureText(text).width+space; //后空2个像素
44849
45067
  if ((left+textWidth)>right) break;
@@ -50634,6 +50852,8 @@ function ChartDrawVolProfile()
50634
50852
  var barLeft=left;
50635
50853
  var barRight=right;
50636
50854
  var barTop=this.Frame.GetYFromData(item.Price)-cellHeight/2;
50855
+ var barHeight=cellHeight-1;
50856
+ if (barHeight<1) barHeight=1;
50637
50857
 
50638
50858
  if (this.VolType==1)
50639
50859
  {
@@ -50648,11 +50868,11 @@ function ChartDrawVolProfile()
50648
50868
  this.Canvas.fillStyle=color;
50649
50869
  if (this.BarPosition==1)
50650
50870
  {
50651
- this.Canvas.fillRect(barRight,ToFixedRect(barTop),-barWidth,ToFixedRect(cellHeight-1));
50871
+ this.Canvas.fillRect(barRight,ToFixedRect(barTop),-barWidth,ToFixedRect(barHeight));
50652
50872
  }
50653
50873
  else
50654
50874
  {
50655
- this.Canvas.fillRect(barLeft,ToFixedRect(barTop),barWidth,ToFixedRect(cellHeight-1));
50875
+ this.Canvas.fillRect(barLeft,ToFixedRect(barTop),barWidth,ToFixedRect(barHeight));
50656
50876
  }
50657
50877
 
50658
50878
  if (this.IsShowText && this.VolFont)
@@ -50693,12 +50913,12 @@ function ChartDrawVolProfile()
50693
50913
 
50694
50914
  if (this.BarPosition==1)
50695
50915
  {
50696
- this.Canvas.fillRect(barRight,ToFixedRect(barTop),-barWidth,ToFixedRect(cellHeight-1));
50916
+ this.Canvas.fillRect(barRight,ToFixedRect(barTop),-barWidth,ToFixedRect(barHeight));
50697
50917
  barRight-=barWidth;
50698
50918
  }
50699
50919
  else
50700
50920
  {
50701
- this.Canvas.fillRect(barLeft,ToFixedRect(barTop),barWidth,ToFixedRect(cellHeight-1));
50921
+ this.Canvas.fillRect(barLeft,ToFixedRect(barTop),barWidth,ToFixedRect(barHeight));
50702
50922
  barLeft+=barWidth;
50703
50923
  }
50704
50924
 
@@ -59493,6 +59713,7 @@ KLineChartContainer.JsonDataToHistoryData=function(data)
59493
59713
  var fclose=9, yfclose=10; //结算价, 前结算价
59494
59714
  var bfactor=11, afactor=12; //前, 后复权因子
59495
59715
  var orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;
59716
+ var colorData=JSCHART_DATA_FIELD_ID.KLINE_COLOR_DATA;
59496
59717
  for (var i = 0; i < list.length; ++i)
59497
59718
  {
59498
59719
  var item = new HistoryData();
@@ -59516,6 +59737,7 @@ KLineChartContainer.JsonDataToHistoryData=function(data)
59516
59737
  if (!IFrameSplitOperator.IsNumber(item.Open)) continue;
59517
59738
 
59518
59739
  if (jsData[orderFlow]) item.OrderFlow=jsData[orderFlow];
59740
+ if (jsData[colorData]) item.ColorData=jsData[colorData];
59519
59741
 
59520
59742
  aryDayData.push(item);
59521
59743
  }
@@ -59555,6 +59777,7 @@ KLineChartContainer.JsonDataToRealtimeData=function(data, symbol)
59555
59777
 
59556
59778
  if (IFrameSplitOperator.IsNumber(stock.bfactor)) item.BFactor=stock.bfactor; //前复权因子
59557
59779
  if (IFrameSplitOperator.IsNumber(stock.afactor)) item.AFactor=stock.afactor; //后复权因子
59780
+ if (stock.colordata) item.ColorData=stock.colordata; //自定义颜色
59558
59781
  return item;
59559
59782
  }
59560
59783
 
@@ -59642,7 +59865,8 @@ KLineChartContainer.JsonDataToMinuteRealtimeDataV2=function(data,symbol)
59642
59865
  var isSHSZ=MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol);
59643
59866
  var isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol); //是否是期货
59644
59867
 
59645
- var date = 0, yclose = 1, open = 2, high = 3, low = 4, close = 5, vol = 6, amount = 7, time = 8, position=9, orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;;
59868
+ var date = 0, yclose = 1, open = 2, high = 3, low = 4, close = 5, vol = 6, amount = 7, time = 8, position=9;
59869
+ var orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;
59646
59870
  var yClose=null;
59647
59871
 
59648
59872
  for (var i = 0; i < overlayData.data.length; ++i)
@@ -59686,7 +59910,9 @@ KLineChartContainer.JsonDataToMinuteHistoryData=function(data)
59686
59910
  if (upperSymbol) isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol);
59687
59911
  var list = data.data;
59688
59912
  var aryDayData=new Array();
59689
- var date = 0, yclose = 1, open = 2, high = 3, low = 4, close = 5, vol = 6, amount = 7, time = 8, position=9, orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;;
59913
+ var date = 0, yclose = 1, open = 2, high = 3, low = 4, close = 5, vol = 6, amount = 7, time = 8, position=9;
59914
+ var orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;
59915
+ var colorData=JSCHART_DATA_FIELD_ID.KLINE_COLOR_DATA;
59690
59916
  var yClose=null;
59691
59917
  for (var i = 0; i < list.length; ++i)
59692
59918
  {
@@ -59711,6 +59937,7 @@ KLineChartContainer.JsonDataToMinuteHistoryData=function(data)
59711
59937
  if (IFrameSplitOperator.IsNumber(item.Close)) yClose=item.Close;
59712
59938
 
59713
59939
  if (jsData[orderFlow]) item.OrderFlow=jsData[orderFlow];
59940
+ if (jsData[colorData]) item.ColorData=jsData[colorData];
59714
59941
 
59715
59942
  aryDayData.push(item);
59716
59943
  }