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.
package/lib/umychart.vue.js
CHANGED
|
@@ -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"};
|
|
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.
|
|
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.
|
|
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){
|
|
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(
|
|
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(
|
|
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
|
|
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
|
|
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
|
@@ -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
|
-
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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=
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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=
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
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
|
|
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
|
}
|