hqchart 1.1.11279 → 1.1.11285

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1565,7 +1565,8 @@ CHANGE_INDEX:4,//换指标
1565
1565
  CLOSE_INDEX_WINDOW:5,//关闭指标窗口
1566
1566
  OVERLAY_INDEX:6,//叠加指标
1567
1567
  MODIFY_OVERLAY_INDEX_PARAM:7,//改叠加指标参数
1568
- CHIP_DEFULT:8,CHIP_LONG:9,CHIP_RECENT:10};var JSCHART_DATA_FIELD_ID={KLINE_ORDERFLOW:99,MINUTE_MULTI_DAY_EXTENDDATA:21//多日分时图扩展数据序号
1568
+ CHIP_DEFULT:8,CHIP_LONG:9,CHIP_RECENT:10};var JSCHART_DATA_FIELD_ID={KLINE_ORDERFLOW:99,MINUTE_MULTI_DAY_EXTENDDATA:21,//多日分时图扩展数据序号
1569
+ KLINE_COLOR_DATA:66//K线自定义颜色数据
1569
1570
  };function PhoneDBClick(){this.Start=[];this.Clear=function(){this.Start=[];};this.AddTouchStart=function(x,y,time){if(this.Start.length>0){var item=this.Start[this.Start.length-1];var spanTime=time-item.Time;if(spanTime>0&&spanTime<300){this.Start.push({X:x,Y:y,Time:time});}else{this.Start=[];}}else{this.Start.push({X:x,Y:y,Time:time});}};this.IsVaildDBClick=function(){if(this.Start.length==2)return true;return false;};this.AddTouchEnd=function(time){if(this.Start.length<=0)return;var item=this.Start[this.Start.length-1];var spanTime=time-item.Time;if(spanTime>=0&&spanTime<150){}else{this.Start=[];}};}/*
1570
1571
  图形控件
1571
1572
  */function JSChartContainer(uielement,OffscreenElement){var _this3=this;this.ClassName='JSChartContainer';var _self=this;this.Frame;//框架画法
@@ -2635,8 +2636,8 @@ this.AFactor;//后复权
2635
2636
  }//数据复制
2636
2637
  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
2638
  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;};//数据复权拷贝
2639
+ 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中
2640
+ 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
2641
  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
2642
  this.Amount;//金额
2642
2643
  this.DateTime;this.Increase;//涨幅
@@ -2868,7 +2869,7 @@ var ZOOM_SEED=
2868
2869
  function ChartKLine(){this.newMethod=IChartPainting;//派生
2869
2870
  this.newMethod();delete this.newMethod;this.ClassName='ChartKLine';//类名
2870
2871
  this.Symbol;//股票代码
2871
- this.DrawType=0;// 0=实心K线柱子 1=收盘价线 2=美国线 3=空心K线柱子 4=收盘价面积图 5=订单流 6=空心K线柱子2(全部空心) 7=订单流样式2 8=订单流样式3
2872
+ this.DrawType=0;// 0=实心K线柱子 1=收盘价线 2=美国线 3=空心K线柱子 4=收盘价面积图 5=订单流 6=空心K线柱子2(全部空心) 7=订单流样式2 8=订单流样式3 9=自定义颜色K线
2872
2873
  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
2874
  this.ColorData;//五彩K线颜色 >0:g_JSChartResource.UpBarColor 其他:g_JSChartResource.DownBarColor
2874
2875
  this.TradeData;//交易系统 包含买卖数据{Buy:, Sell:, Name:指标名称 }
@@ -2919,7 +2920,7 @@ if(bFirstPoint)return;this.Canvas.stroke();if(isHScreen){this.Canvas.lineTo(bord
2919
2920
  {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
2921
  {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
2922
  {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)//阳线
2923
+ {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
2924
  {this.DrawKBar_Up(data,dataWidth,upColor,this.DrawType,x,y,left,right,yLow,yHigh,yOpen,yClose,isHScreen);}else if(data.Open>data.Close)//阴线
2924
2925
  {this.DrawKBar_Down(data,dataWidth,downColor,this.DrawType,x,y,left,right,yLow,yHigh,yOpen,yClose,isHScreen);}else// 平线
2925
2926
  {this.DrawKBar_Unchagne(data,dataWidth,unchagneColor,this.DrawType,x,y,left,right,yLow,yHigh,yOpen,yClose,isHScreen);}if(this.IsShowKTooltip&&!isHScreen)//添加tooltip区域
@@ -2951,7 +2952,31 @@ else this.Canvas.fillRect(ToFixedRect(y),ToFixedRect(left),ToFixedRect(yClose-y)
2951
2952
  {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
2953
  }else{if(drawType==3)//空心柱
2953
2954
  {this.Canvas.beginPath();this.Canvas.rect(ToFixedPoint(left),ToFixedPoint(y),ToFixedRect(dataWidth),ToFixedRect(yOpen-y));this.Canvas.stroke();}else{this.Canvas.fillRect(ToFixedRect(left),ToFixedRect(Math.min(y,yOpen)),ToFixedRect(dataWidth),ToFixedRect(Math.abs(yOpen-y)));}}}if(data.Open>data.Low)//下影线
2954
- {this.Canvas.beginPath();if(isHScreen){this.Canvas.moveTo(ToFixedPoint(drawType==3?Math.min(yClose,yOpen):y),ToFixedPoint(x));this.Canvas.lineTo(ToFixedPoint(yLow),ToFixedPoint(x));}else{this.Canvas.moveTo(ToFixedPoint(x),ToFixedPoint(drawType==3?Math.max(yClose,yOpen):y));this.Canvas.lineTo(ToFixedPoint(x),ToFixedPoint(yLow));}this.Canvas.stroke();}}else{this.Canvas.beginPath();if(isHScreen){this.Canvas.moveTo(yHigh,ToFixedPoint(x));this.Canvas.lineTo(yLow,ToFixedPoint(x));}else{this.Canvas.moveTo(ToFixedPoint(x),yHigh);this.Canvas.lineTo(ToFixedPoint(x),yLow);}this.Canvas.strokeStyle=barColor;this.Canvas.stroke();}};this.DrawTrade=function()//交易系统
2955
+ {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)//上影线
2956
+ {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){/*
2957
+ if (Math.abs(yOpen-y)<1)
2958
+ {
2959
+ this.Canvas.fillRect(ToFixedRect(y),ToFixedRect(left),1,ToFixedRect(dataWidth)); //高度小于1,统一使用高度1
2960
+ }
2961
+ else
2962
+ {
2963
+ if (drawType==3) //空心柱
2964
+ {
2965
+ this.Canvas.beginPath();
2966
+ this.Canvas.rect(ToFixedPoint(y),ToFixedPoint(left),ToFixedRect(yOpen-y),ToFixedRect(dataWidth));
2967
+ this.Canvas.stroke();
2968
+ }
2969
+ else
2970
+ {
2971
+ this.Canvas.fillRect(ToFixedRect(y),ToFixedRect(left),ToFixedRect(yOpen-y),ToFixedRect(dataWidth));
2972
+ }
2973
+ }
2974
+ */}else{//实心
2975
+ 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
2976
+ }else{this.Canvas.fillRect(ToFixedRect(left),ToFixedRect(Math.min(y,yOpen)),ToFixedRect(dataWidth),ToFixedRect(Math.abs(yOpen-y)));}}if(colorData.Border)//空心
2977
+ {if(Math.abs(yOpen-y)<1){this.Canvas.fillStyle=colorData.Border.Color;this.Canvas.fillRect(ToFixedRect(left),ToFixedRect(y),ToFixedRect(dataWidth),1);//高度小于1,统一使用高度1
2978
+ }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)//下影线
2979
+ {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
2980
  {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
2981
  {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
2982
  {var rect=new Rect(x-textSize/2,yClose-textSize/2,textSize,textSize);//this.Canvas.fillStyle="rgb(0,0,100)";
@@ -2963,7 +2988,7 @@ this.Canvas.clip();};this.Draw=function(){this.IsShowOrderText=false;this.Toolti
2963
2988
  this.PtMin={X:null,Y:null,Value:null,Align:'left'};//清空最小
2964
2989
  this.DrawKRange={Start:null,End:null};this.ChartFrame.ChartKLine={Max:null,Min:null};//保存K线上 显示最大最小值坐标
2965
2990
  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)//标注最大值最小值
2991
+ {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
2992
  {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
2993
  {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
2994
  {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 +3137,9 @@ if(isHScreen){this.Canvas.moveTo(ToFixedPoint(yOpen),left);this.Canvas.lineTo(To
3112
3137
  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
3138
  {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
3139
  if(firstOpen==null)return;var drawType=this.DrawType;if(this.CustomDrawType!=null)drawType=this.CustomDrawType;this.Canvas.save();this.ClipClient(this.ChartFrame.IsHScreen);if(drawType==1)this.DrawCloseLine(firstOpen);else if(drawType==2)this.DrawAKLine(firstOpen);else this.DrawKBar(firstOpen);this.Canvas.restore();};this.GetMaxMin=function(){var xPointCount=this.ChartFrame.XPointCount;var range={};range.Max=null;range.Min=null;if(!this.MainData||!this.Data)return range;var firstOpen=null;//主线数据第1个收盘价
3115
- for(var i=this.Data.DataOffset,j=0;i<this.MainData.Data.length&&j<xPointCount;++i,++j){var data=this.MainData.Data[i];if(data.Open==null||data.High==null||data.Low==null||data.Close==null)continue;firstOpen=data.Close;break;}if(firstOpen==null)return range;var firstOverlayOpen=null;var high,low;for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j){var data=this.Data.Data[i];if(!data||data.Open==null||data.High==null||data.Low==null||data.Close==null)continue;if(firstOverlayOpen==null)firstOverlayOpen=data.Open;high=data.High/firstOverlayOpen*firstOpen;low=data.Low/firstOverlayOpen*firstOpen;if(range.Max==null)range.Max=high;if(range.Min==null)range.Min=low;if(range.Max<high)range.Max=high;if(range.Min>low)range.Min=low;}return range;};this.GetTooltipData=function(x,y,tooltip){for(var i in this.TooltipRect){var rect=this.TooltipRect[i][1];this.Canvas.beginPath();this.Canvas.rect(rect.X,rect.Y,rect.Width,rect.Height);if(this.Canvas.isPointInPath(x,y)){var index=this.TooltipRect[i][0];tooltip.Data=this.Data.Data[index];tooltip.ChartPaint=this;return true;}}return false;};this.PtInChart=function(x,y){if(this.DrawType==1||this.DrawType==4){return null;return this.PtInLine(x,y,{KLineClose:true});}return this.PtInKBar(x,y,{OverlayKLine:true});};this.DrawSelectedStatus=function(){this.DrawLinePoint({OverlayKLine:true});};}//K线表格
3140
+ 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)//线段,面积不支持选中
3141
+ {return null;//return this.PtInLine(x,y, {KLineClose:true});
3142
+ }return this.PtInKBar(x,y,{OverlayKLine:true});};this.DrawSelectedStatus=function(){this.DrawLinePoint({OverlayKLine:true});};}//K线表格
3116
3143
  function ChartKLineTable(){this.newMethod=IChartPainting;//派生
3117
3144
  this.newMethod();delete this.newMethod;this.ClassName='ChartKlineTable';//类名
3118
3145
  this.Data;this.RowName;this.IsShowRowName=false;this.BGColor;//背景色
@@ -4337,7 +4364,7 @@ var right=this.Frame.ChartBorder.GetRight();if(this.Frame.IsHScreen===true){bott
4337
4364
  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
4365
  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
4366
  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个像素
4367
+ {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
4368
  if(left+textWidth>right)break;this.Canvas.fillText(text,left,bottom,textWidth);left+=textWidth;}}if(this.Explain)//说明信息
4342
4369
  {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
4370
  };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,"擎");};}//画图工具
@@ -5755,17 +5782,18 @@ Explain:'成交量分布图下载',Request:{Period:this.Period,Right:this.Right,
5755
5782
  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
5783
  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
5784
  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];//原始单位股
5785
+ 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
5786
  item.Amount=jsData[amount];if(IFrameSplitOperator.IsNumber(jsData[position]))item.Position=jsData[position];//期货持仓
5760
5787
  if(IFrameSplitOperator.IsNumber(jsData[fclose]))item.FClose=jsData[fclose];//期货结算价
5761
5788
  if(IFrameSplitOperator.IsNumber(jsData[yfclose]))item.YFClose=jsData[yfclose];//期货前结算价
5762
5789
  if(IFrameSplitOperator.IsNumber(jsData[bfactor]))item.BFactor=jsData[bfactor];//前复权因子
5763
5790
  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)//查找对应的股票数据
5791
+ 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
5792
  {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
5793
  item.Amount=stock.amount;item.Close=stock.price;if(IFrameSplitOperator.IsNumber(stock.position))item.Position=stock.position;//持仓量
5767
5794
  if(IFrameSplitOperator.IsNumber(stock.bfactor))item.BFactor=stock.bfactor;//前复权因子
5768
5795
  if(IFrameSplitOperator.IsNumber(stock.afactor))item.AFactor=stock.afactor;//后复权因子
5796
+ if(stock.colordata)item.ColorData=stock.colordata;//自定义颜色
5769
5797
  return item;};KLineChartContainer.JsonDataToMinuteRealtimeData=function(data,symbol){if(!data.stock)return null;var stock;for(var i in data.stock)//查找对应的股票数据
5770
5798
  {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
5799
  var date=stock.date;if(isFutures&&stock.yclearing)preClose=stock.yclearing;//期货使用昨结算价
@@ -5777,13 +5805,13 @@ if(!IFrameSplitOperator.IsNumber(item.Open))item.Open=null;if(!IFrameSplitOperat
5777
5805
  if(IFrameSplitOperator.IsNumber(jsData.price))preClose=jsData.price;aryMinuteData[i]=item;}return aryMinuteData;};//分钟K线叠加数据增量更新v2版本
5778
5806
  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
5807
  {var item=data.overlay[i];if(item.symbol==symbol){overlayData=item;break;}}if(!overlayData)return null;var upperSymbol=symbol.toUpperCase();var isSHSZ=MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol);var isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol);//是否是期货
5780
- var date=0,yclose=1,open=2,high=3,low=4,close=5,vol=6,amount=7,time=8,position=9,orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;;var yClose=null;for(var i=0;i<overlayData.data.length;++i){var item=new HistoryData();var jsData=overlayData.data[i];item.Date=jsData[date];item.Open=jsData[open];item.YClose=jsData[yclose];item.Close=jsData[close];item.High=jsData[high];item.Low=jsData[low];item.Vol=jsData[vol];//股
5808
+ 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
5809
  item.Amount=jsData[amount];item.Time=jsData[time];if(IFrameSplitOperator.IsNumber(jsData[position]))item.Position=jsData[position];//期货持仓
5782
5810
  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
5811
  KLineChartContainer.JsonDataToMinuteHistoryData=function(data){var upperSymbol=null;if(data.symbol)upperSymbol=data.symbol.toUpperCase();var isSHSZ=false;if(upperSymbol)isSHSZ=MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol);var isFutures=false;//是否是期货
5784
- if(upperSymbol)isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol);var list=data.data;var aryDayData=new Array();var date=0,yclose=1,open=2,high=3,low=4,close=5,vol=6,amount=7,time=8,position=9,orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;;var yClose=null;for(var i=0;i<list.length;++i){var item=new HistoryData();var jsData=list[i];item.Date=jsData[date];item.Open=jsData[open];item.YClose=jsData[yclose];item.Close=jsData[close];item.High=jsData[high];item.Low=jsData[low];item.Vol=jsData[vol];//股
5812
+ 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
5813
  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);}/* 内部不处理无效数据, 确保外部传过来的数据是对的.
5814
+ 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
5815
  // 无效数据处理
5788
5816
  for(var i = 0; i < aryDayData.length; ++i)
5789
5817
  {
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "hqchart",
3
3
  "description": "stock chart",
4
4
  "author": "jones2000",
5
- "version": "1.1.11279",
5
+ "version": "1.1.11285",
6
6
  "main": "lib/main.js",
7
7
  "private": false,
8
8
  "license": "Apache License 2.0",
@@ -6262,6 +6262,7 @@ var JSCHART_DATA_FIELD_ID=
6262
6262
  {
6263
6263
  KLINE_ORDERFLOW:99,
6264
6264
  MINUTE_MULTI_DAY_EXTENDDATA:21, //多日分时图扩展数据序号
6265
+ KLINE_COLOR_DATA:66, //K线自定义颜色数据
6265
6266
  }
6266
6267
 
6267
6268
 
@@ -18794,6 +18795,7 @@ HistoryData.Copy=function(data)
18794
18795
  if (IFrameSplitOperator.IsNumber(data.AFactor)) newData.AFactor=data.AFactor;
18795
18796
 
18796
18797
  if (data.OrderFlow) newData.OrderFlow=data.OrderFlow;
18798
+ if (data.ColorData) newData.ColorData=data.ColorData;
18797
18799
 
18798
18800
  return newData;
18799
18801
  }
@@ -18824,6 +18826,9 @@ HistoryData.CopyTo=function(dest,src)
18824
18826
 
18825
18827
  if (IFrameSplitOperator.IsNumber(src.BFactor)) dest.BFactor=src.BFactor;
18826
18828
  if (IFrameSplitOperator.IsNumber(src.AFactor)) dest.AFactor=src.AFactor;
18829
+
18830
+ if (src.OrderFlow) dest.OrderFlow=src.OrderFlow;
18831
+ if (src.ColorData) dest.ColorData=src.ColorData;
18827
18832
  }
18828
18833
 
18829
18834
  //数据复权拷贝
@@ -22105,7 +22110,7 @@ function ChartKLine()
22105
22110
 
22106
22111
  this.ClassName='ChartKLine'; //类名
22107
22112
  this.Symbol; //股票代码
22108
- this.DrawType=0; // 0=实心K线柱子 1=收盘价线 2=美国线 3=空心K线柱子 4=收盘价面积图 5=订单流 6=空心K线柱子2(全部空心) 7=订单流样式2 8=订单流样式3
22113
+ this.DrawType=0; // 0=实心K线柱子 1=收盘价线 2=美国线 3=空心K线柱子 4=收盘价面积图 5=订单流 6=空心K线柱子2(全部空心) 7=订单流样式2 8=订单流样式3 9=自定义颜色K线
22109
22114
  this.CloseLineColor=g_JSChartResource.CloseLineColor;
22110
22115
  this.CloseLineAreaColor=g_JSChartResource.CloseLineAreaColor;
22111
22116
  this.CloseLineWidth=g_JSChartResource.CloseLineWidth;
@@ -22646,6 +22651,10 @@ function ChartKLine()
22646
22651
 
22647
22652
  this.DrawKBar_Custom(data, dataWidth, barColor, drawType, kLineOption, x, y, left, right, yLow, yHigh, yOpen, yClose, border, isHScreen);
22648
22653
  }
22654
+ else if (this.DrawType==9 && data.ColorData)
22655
+ {
22656
+ this.DrawKBarV2(data, data.ColorData, dataWidth, x, y, left, right, yLow, yHigh, yOpen, yClose, isHScreen);
22657
+ }
22649
22658
  else if (data.Open<data.Close) //阳线
22650
22659
  {
22651
22660
  this.DrawKBar_Up(data, dataWidth, upColor, this.DrawType, x, y, left, right, yLow, yHigh, yOpen, yClose, isHScreen);
@@ -23131,6 +23140,171 @@ function ChartKLine()
23131
23140
  }
23132
23141
  }
23133
23142
 
23143
+ this.DrawKBarV2=function(data, colorData, dataWidth, x, y, left, right, yLow, yHigh, yOpen, yClose, isHScreen)
23144
+ {
23145
+ var isDrawBorder=false;
23146
+ var isEmptyBar=false;
23147
+ if (colorData.border) isDrawBorder=true;
23148
+ if (colorData.Type===0) isEmptyBar=true;
23149
+
23150
+ if (dataWidth>=4)
23151
+ {
23152
+ if (isDrawBorder)
23153
+ {
23154
+ if ((dataWidth%2)!=0) dataWidth-=1;
23155
+ }
23156
+
23157
+ if (data.High>data.Close) //上影线
23158
+ {
23159
+ if (colorData.Line)
23160
+ {
23161
+ this.Canvas.strokeStyle=colorData.Line.Color;
23162
+ this.Canvas.beginPath();
23163
+ if (isHScreen)
23164
+ {
23165
+ this.Canvas.moveTo(ToFixedPoint(y),ToFixedPoint(x));
23166
+ this.Canvas.lineTo(ToFixedPoint(isEmptyBar?Math.max(yClose,yOpen):yClose),ToFixedPoint(x));
23167
+ }
23168
+ else
23169
+ {
23170
+ if (isDrawBorder)
23171
+ {
23172
+ var xFixed=left+dataWidth/2;
23173
+ this.Canvas.moveTo(ToFixedPoint(xFixed),ToFixedPoint(y));
23174
+ this.Canvas.lineTo(ToFixedPoint(xFixed),ToFixedPoint(Math.min(yClose,yOpen)));
23175
+ }
23176
+ else
23177
+ {
23178
+ this.Canvas.moveTo(ToFixedPoint(x),ToFixedPoint(y));
23179
+ this.Canvas.lineTo(ToFixedPoint(x),ToFixedPoint(Math.min(yClose,yOpen)));
23180
+ }
23181
+ }
23182
+ this.Canvas.stroke();
23183
+ }
23184
+
23185
+ y=yClose;
23186
+ }
23187
+ else
23188
+ {
23189
+ y=yClose;
23190
+ }
23191
+
23192
+ if (isHScreen)
23193
+ {
23194
+ /*
23195
+ if (Math.abs(yOpen-y)<1)
23196
+ {
23197
+ this.Canvas.fillRect(ToFixedRect(y),ToFixedRect(left),1,ToFixedRect(dataWidth)); //高度小于1,统一使用高度1
23198
+ }
23199
+ else
23200
+ {
23201
+ if (drawType==3) //空心柱
23202
+ {
23203
+ this.Canvas.beginPath();
23204
+ this.Canvas.rect(ToFixedPoint(y),ToFixedPoint(left),ToFixedRect(yOpen-y),ToFixedRect(dataWidth));
23205
+ this.Canvas.stroke();
23206
+ }
23207
+ else
23208
+ {
23209
+ this.Canvas.fillRect(ToFixedRect(y),ToFixedRect(left),ToFixedRect(yOpen-y),ToFixedRect(dataWidth));
23210
+ }
23211
+ }
23212
+ */
23213
+ }
23214
+ else
23215
+ {
23216
+
23217
+ //实心
23218
+ if (!isEmptyBar && colorData.BarColor)
23219
+ {
23220
+ this.Canvas.fillStyle=colorData.BarColor;
23221
+ if (Math.abs(yOpen-y)<1)
23222
+ {
23223
+ this.Canvas.fillRect(ToFixedRect(left),ToFixedRect(y),ToFixedRect(dataWidth),1); //高度小于1,统一使用高度1
23224
+ }
23225
+ else
23226
+ {
23227
+ this.Canvas.fillRect(ToFixedRect(left),ToFixedRect(Math.min(y,yOpen)),ToFixedRect(dataWidth),ToFixedRect(Math.abs(yOpen-y)));
23228
+ }
23229
+ }
23230
+
23231
+ if (colorData.Border) //空心
23232
+ {
23233
+ if (Math.abs(yOpen-y)<1)
23234
+ {
23235
+ this.Canvas.fillStyle=colorData.Border.Color;
23236
+ this.Canvas.fillRect(ToFixedRect(left),ToFixedRect(y),ToFixedRect(dataWidth),1); //高度小于1,统一使用高度1
23237
+ }
23238
+ else
23239
+ {
23240
+ this.Canvas.strokeStyle=colorData.Border.Color;
23241
+ this.Canvas.beginPath();
23242
+ this.Canvas.rect(ToFixedPoint(left),ToFixedPoint(y),ToFixedRect(dataWidth),ToFixedRect(yOpen-y));
23243
+ this.Canvas.stroke();
23244
+ }
23245
+ }
23246
+ }
23247
+
23248
+ if (data.Open>data.Low) //下影线
23249
+ {
23250
+ if (colorData.Line)
23251
+ {
23252
+ this.Canvas.strokeStyle=colorData.Line.Color;
23253
+ this.Canvas.beginPath();
23254
+ if (isHScreen)
23255
+ {
23256
+ this.Canvas.moveTo(ToFixedPoint(isEmptyBar?Math.min(yClose,yOpen):y),ToFixedPoint(x));
23257
+ this.Canvas.lineTo(ToFixedPoint(yLow),ToFixedPoint(x));
23258
+ }
23259
+ else
23260
+ {
23261
+ if (isDrawBorder)
23262
+ {
23263
+ var xFixed=left+dataWidth/2;
23264
+ this.Canvas.moveTo(ToFixedPoint(xFixed),ToFixedPoint(Math.max(yClose,yOpen)));
23265
+ this.Canvas.lineTo(ToFixedPoint(xFixed),ToFixedPoint(yLow));
23266
+ }
23267
+ else
23268
+ {
23269
+ this.Canvas.moveTo(ToFixedPoint(x),ToFixedPoint(Math.max(yClose,yOpen)));
23270
+ this.Canvas.lineTo(ToFixedPoint(x),ToFixedPoint(yLow));
23271
+ }
23272
+ }
23273
+ this.Canvas.stroke();
23274
+ }
23275
+ }
23276
+ }
23277
+ else
23278
+ {
23279
+ var lineColor;
23280
+ if (isEmptyBar && colorData.Border)
23281
+ {
23282
+ lineColor=colorData.Border.Color;
23283
+ }
23284
+ else if (!isEmptyBar && colorData.BarColor)
23285
+ {
23286
+ lineColor=colorData.BarColor;
23287
+ }
23288
+
23289
+ if (lineColor)
23290
+ {
23291
+ this.Canvas.strokeStyle=lineColor;
23292
+ this.Canvas.beginPath();
23293
+ if (isHScreen)
23294
+ {
23295
+ this.Canvas.moveTo(yHigh,ToFixedPoint(x));
23296
+ this.Canvas.lineTo(yLow,ToFixedPoint(x));
23297
+ }
23298
+ else
23299
+ {
23300
+ this.Canvas.moveTo(ToFixedPoint(x),yHigh);
23301
+ this.Canvas.lineTo(ToFixedPoint(x),yLow);
23302
+ }
23303
+ this.Canvas.stroke();
23304
+ }
23305
+ }
23306
+ }
23307
+
23134
23308
  this.DrawTrade=function() //交易系统
23135
23309
  {
23136
23310
  if (!this.TradeData) return;
@@ -23392,6 +23566,10 @@ function ChartKLine()
23392
23566
  {
23393
23567
  this.DrawOrderFlow_Style3();
23394
23568
  }
23569
+ else if (this.DrawType==9)
23570
+ {
23571
+ this.DrawKBar();
23572
+ }
23395
23573
  else
23396
23574
  {
23397
23575
  this.DrawKBar();
@@ -25946,10 +26124,13 @@ function ChartOverlayKLine()
25946
26124
 
25947
26125
  this.PtInChart=function(x,y)
25948
26126
  {
25949
- if (this.DrawType==1 || this.DrawType==4)
26127
+ var drawType=this.DrawType;
26128
+ if (IFrameSplitOperator.IsNumber(this.CustomDrawType)) drawType=this.CustomDrawType;
26129
+
26130
+ if (drawType==1 || drawType==4) //线段,面积不支持选中
25950
26131
  {
25951
26132
  return null;
25952
- return this.PtInLine(x,y, {KLineClose:true});
26133
+ //return this.PtInLine(x,y, {KLineClose:true});
25953
26134
  }
25954
26135
 
25955
26136
  return this.PtInKBar(x,y, {OverlayKLine:true});
@@ -44800,7 +44981,14 @@ function DynamicChartTitlePainting()
44800
44981
  else
44801
44982
  {
44802
44983
  this.Canvas.fillStyle=item.Color;
44803
- var text=item.Name+":"+valueText;
44984
+ var text=valueText;
44985
+ if (item.Name)
44986
+ {
44987
+ var dyTitle=this.GetDynamicOutName(item.Name);
44988
+ if (dyTitle) text=dyTitle+":"+valueText;
44989
+ else text=item.Name+":"+valueText;
44990
+ }
44991
+
44804
44992
  var space=this.ParamSpace*GetDevicePixelRatio();
44805
44993
  var textWidth=this.Canvas.measureText(text).width+space; //后空2个像素
44806
44994
  if ((left+textWidth)>right) break;
@@ -59452,6 +59640,7 @@ KLineChartContainer.JsonDataToHistoryData=function(data)
59452
59640
  var fclose=9, yfclose=10; //结算价, 前结算价
59453
59641
  var bfactor=11, afactor=12; //前, 后复权因子
59454
59642
  var orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;
59643
+ var colorData=JSCHART_DATA_FIELD_ID.KLINE_COLOR_DATA;
59455
59644
  for (var i = 0; i < list.length; ++i)
59456
59645
  {
59457
59646
  var item = new HistoryData();
@@ -59475,6 +59664,7 @@ KLineChartContainer.JsonDataToHistoryData=function(data)
59475
59664
  if (!IFrameSplitOperator.IsNumber(item.Open)) continue;
59476
59665
 
59477
59666
  if (jsData[orderFlow]) item.OrderFlow=jsData[orderFlow];
59667
+ if (jsData[colorData]) item.ColorData=jsData[colorData];
59478
59668
 
59479
59669
  aryDayData.push(item);
59480
59670
  }
@@ -59514,6 +59704,7 @@ KLineChartContainer.JsonDataToRealtimeData=function(data, symbol)
59514
59704
 
59515
59705
  if (IFrameSplitOperator.IsNumber(stock.bfactor)) item.BFactor=stock.bfactor; //前复权因子
59516
59706
  if (IFrameSplitOperator.IsNumber(stock.afactor)) item.AFactor=stock.afactor; //后复权因子
59707
+ if (stock.colordata) item.ColorData=stock.colordata; //自定义颜色
59517
59708
  return item;
59518
59709
  }
59519
59710
 
@@ -59601,7 +59792,8 @@ KLineChartContainer.JsonDataToMinuteRealtimeDataV2=function(data,symbol)
59601
59792
  var isSHSZ=MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol);
59602
59793
  var isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol); //是否是期货
59603
59794
 
59604
- var date = 0, yclose = 1, open = 2, high = 3, low = 4, close = 5, vol = 6, amount = 7, time = 8, position=9, orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;;
59795
+ var date = 0, yclose = 1, open = 2, high = 3, low = 4, close = 5, vol = 6, amount = 7, time = 8, position=9;
59796
+ var orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;
59605
59797
  var yClose=null;
59606
59798
 
59607
59799
  for (var i = 0; i < overlayData.data.length; ++i)
@@ -59645,7 +59837,9 @@ KLineChartContainer.JsonDataToMinuteHistoryData=function(data)
59645
59837
  if (upperSymbol) isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol);
59646
59838
  var list = data.data;
59647
59839
  var aryDayData=new Array();
59648
- var date = 0, yclose = 1, open = 2, high = 3, low = 4, close = 5, vol = 6, amount = 7, time = 8, position=9, orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;;
59840
+ var date = 0, yclose = 1, open = 2, high = 3, low = 4, close = 5, vol = 6, amount = 7, time = 8, position=9;
59841
+ var orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;
59842
+ var colorData=JSCHART_DATA_FIELD_ID.KLINE_COLOR_DATA;
59649
59843
  var yClose=null;
59650
59844
  for (var i = 0; i < list.length; ++i)
59651
59845
  {
@@ -59670,6 +59864,7 @@ KLineChartContainer.JsonDataToMinuteHistoryData=function(data)
59670
59864
  if (IFrameSplitOperator.IsNumber(item.Close)) yClose=item.Close;
59671
59865
 
59672
59866
  if (jsData[orderFlow]) item.OrderFlow=jsData[orderFlow];
59867
+ if (jsData[colorData]) item.ColorData=jsData[colorData];
59673
59868
 
59674
59869
  aryDayData.push(item);
59675
59870
  }
@@ -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
 
@@ -18838,6 +18839,7 @@ HistoryData.Copy=function(data)
18838
18839
  if (IFrameSplitOperator.IsNumber(data.AFactor)) newData.AFactor=data.AFactor;
18839
18840
 
18840
18841
  if (data.OrderFlow) newData.OrderFlow=data.OrderFlow;
18842
+ if (data.ColorData) newData.ColorData=data.ColorData;
18841
18843
 
18842
18844
  return newData;
18843
18845
  }
@@ -18868,6 +18870,9 @@ HistoryData.CopyTo=function(dest,src)
18868
18870
 
18869
18871
  if (IFrameSplitOperator.IsNumber(src.BFactor)) dest.BFactor=src.BFactor;
18870
18872
  if (IFrameSplitOperator.IsNumber(src.AFactor)) dest.AFactor=src.AFactor;
18873
+
18874
+ if (src.OrderFlow) dest.OrderFlow=src.OrderFlow;
18875
+ if (src.ColorData) dest.ColorData=src.ColorData;
18871
18876
  }
18872
18877
 
18873
18878
  //数据复权拷贝
@@ -22149,7 +22154,7 @@ function ChartKLine()
22149
22154
 
22150
22155
  this.ClassName='ChartKLine'; //类名
22151
22156
  this.Symbol; //股票代码
22152
- this.DrawType=0; // 0=实心K线柱子 1=收盘价线 2=美国线 3=空心K线柱子 4=收盘价面积图 5=订单流 6=空心K线柱子2(全部空心) 7=订单流样式2 8=订单流样式3
22157
+ this.DrawType=0; // 0=实心K线柱子 1=收盘价线 2=美国线 3=空心K线柱子 4=收盘价面积图 5=订单流 6=空心K线柱子2(全部空心) 7=订单流样式2 8=订单流样式3 9=自定义颜色K线
22153
22158
  this.CloseLineColor=g_JSChartResource.CloseLineColor;
22154
22159
  this.CloseLineAreaColor=g_JSChartResource.CloseLineAreaColor;
22155
22160
  this.CloseLineWidth=g_JSChartResource.CloseLineWidth;
@@ -22690,6 +22695,10 @@ function ChartKLine()
22690
22695
 
22691
22696
  this.DrawKBar_Custom(data, dataWidth, barColor, drawType, kLineOption, x, y, left, right, yLow, yHigh, yOpen, yClose, border, isHScreen);
22692
22697
  }
22698
+ else if (this.DrawType==9 && data.ColorData)
22699
+ {
22700
+ this.DrawKBarV2(data, data.ColorData, dataWidth, x, y, left, right, yLow, yHigh, yOpen, yClose, isHScreen);
22701
+ }
22693
22702
  else if (data.Open<data.Close) //阳线
22694
22703
  {
22695
22704
  this.DrawKBar_Up(data, dataWidth, upColor, this.DrawType, x, y, left, right, yLow, yHigh, yOpen, yClose, isHScreen);
@@ -23175,6 +23184,171 @@ function ChartKLine()
23175
23184
  }
23176
23185
  }
23177
23186
 
23187
+ this.DrawKBarV2=function(data, colorData, dataWidth, x, y, left, right, yLow, yHigh, yOpen, yClose, isHScreen)
23188
+ {
23189
+ var isDrawBorder=false;
23190
+ var isEmptyBar=false;
23191
+ if (colorData.border) isDrawBorder=true;
23192
+ if (colorData.Type===0) isEmptyBar=true;
23193
+
23194
+ if (dataWidth>=4)
23195
+ {
23196
+ if (isDrawBorder)
23197
+ {
23198
+ if ((dataWidth%2)!=0) dataWidth-=1;
23199
+ }
23200
+
23201
+ if (data.High>data.Close) //上影线
23202
+ {
23203
+ if (colorData.Line)
23204
+ {
23205
+ this.Canvas.strokeStyle=colorData.Line.Color;
23206
+ this.Canvas.beginPath();
23207
+ if (isHScreen)
23208
+ {
23209
+ this.Canvas.moveTo(ToFixedPoint(y),ToFixedPoint(x));
23210
+ this.Canvas.lineTo(ToFixedPoint(isEmptyBar?Math.max(yClose,yOpen):yClose),ToFixedPoint(x));
23211
+ }
23212
+ else
23213
+ {
23214
+ if (isDrawBorder)
23215
+ {
23216
+ var xFixed=left+dataWidth/2;
23217
+ this.Canvas.moveTo(ToFixedPoint(xFixed),ToFixedPoint(y));
23218
+ this.Canvas.lineTo(ToFixedPoint(xFixed),ToFixedPoint(Math.min(yClose,yOpen)));
23219
+ }
23220
+ else
23221
+ {
23222
+ this.Canvas.moveTo(ToFixedPoint(x),ToFixedPoint(y));
23223
+ this.Canvas.lineTo(ToFixedPoint(x),ToFixedPoint(Math.min(yClose,yOpen)));
23224
+ }
23225
+ }
23226
+ this.Canvas.stroke();
23227
+ }
23228
+
23229
+ y=yClose;
23230
+ }
23231
+ else
23232
+ {
23233
+ y=yClose;
23234
+ }
23235
+
23236
+ if (isHScreen)
23237
+ {
23238
+ /*
23239
+ if (Math.abs(yOpen-y)<1)
23240
+ {
23241
+ this.Canvas.fillRect(ToFixedRect(y),ToFixedRect(left),1,ToFixedRect(dataWidth)); //高度小于1,统一使用高度1
23242
+ }
23243
+ else
23244
+ {
23245
+ if (drawType==3) //空心柱
23246
+ {
23247
+ this.Canvas.beginPath();
23248
+ this.Canvas.rect(ToFixedPoint(y),ToFixedPoint(left),ToFixedRect(yOpen-y),ToFixedRect(dataWidth));
23249
+ this.Canvas.stroke();
23250
+ }
23251
+ else
23252
+ {
23253
+ this.Canvas.fillRect(ToFixedRect(y),ToFixedRect(left),ToFixedRect(yOpen-y),ToFixedRect(dataWidth));
23254
+ }
23255
+ }
23256
+ */
23257
+ }
23258
+ else
23259
+ {
23260
+
23261
+ //实心
23262
+ if (!isEmptyBar && colorData.BarColor)
23263
+ {
23264
+ this.Canvas.fillStyle=colorData.BarColor;
23265
+ if (Math.abs(yOpen-y)<1)
23266
+ {
23267
+ this.Canvas.fillRect(ToFixedRect(left),ToFixedRect(y),ToFixedRect(dataWidth),1); //高度小于1,统一使用高度1
23268
+ }
23269
+ else
23270
+ {
23271
+ this.Canvas.fillRect(ToFixedRect(left),ToFixedRect(Math.min(y,yOpen)),ToFixedRect(dataWidth),ToFixedRect(Math.abs(yOpen-y)));
23272
+ }
23273
+ }
23274
+
23275
+ if (colorData.Border) //空心
23276
+ {
23277
+ if (Math.abs(yOpen-y)<1)
23278
+ {
23279
+ this.Canvas.fillStyle=colorData.Border.Color;
23280
+ this.Canvas.fillRect(ToFixedRect(left),ToFixedRect(y),ToFixedRect(dataWidth),1); //高度小于1,统一使用高度1
23281
+ }
23282
+ else
23283
+ {
23284
+ this.Canvas.strokeStyle=colorData.Border.Color;
23285
+ this.Canvas.beginPath();
23286
+ this.Canvas.rect(ToFixedPoint(left),ToFixedPoint(y),ToFixedRect(dataWidth),ToFixedRect(yOpen-y));
23287
+ this.Canvas.stroke();
23288
+ }
23289
+ }
23290
+ }
23291
+
23292
+ if (data.Open>data.Low) //下影线
23293
+ {
23294
+ if (colorData.Line)
23295
+ {
23296
+ this.Canvas.strokeStyle=colorData.Line.Color;
23297
+ this.Canvas.beginPath();
23298
+ if (isHScreen)
23299
+ {
23300
+ this.Canvas.moveTo(ToFixedPoint(isEmptyBar?Math.min(yClose,yOpen):y),ToFixedPoint(x));
23301
+ this.Canvas.lineTo(ToFixedPoint(yLow),ToFixedPoint(x));
23302
+ }
23303
+ else
23304
+ {
23305
+ if (isDrawBorder)
23306
+ {
23307
+ var xFixed=left+dataWidth/2;
23308
+ this.Canvas.moveTo(ToFixedPoint(xFixed),ToFixedPoint(Math.max(yClose,yOpen)));
23309
+ this.Canvas.lineTo(ToFixedPoint(xFixed),ToFixedPoint(yLow));
23310
+ }
23311
+ else
23312
+ {
23313
+ this.Canvas.moveTo(ToFixedPoint(x),ToFixedPoint(Math.max(yClose,yOpen)));
23314
+ this.Canvas.lineTo(ToFixedPoint(x),ToFixedPoint(yLow));
23315
+ }
23316
+ }
23317
+ this.Canvas.stroke();
23318
+ }
23319
+ }
23320
+ }
23321
+ else
23322
+ {
23323
+ var lineColor;
23324
+ if (isEmptyBar && colorData.Border)
23325
+ {
23326
+ lineColor=colorData.Border.Color;
23327
+ }
23328
+ else if (!isEmptyBar && colorData.BarColor)
23329
+ {
23330
+ lineColor=colorData.BarColor;
23331
+ }
23332
+
23333
+ if (lineColor)
23334
+ {
23335
+ this.Canvas.strokeStyle=lineColor;
23336
+ this.Canvas.beginPath();
23337
+ if (isHScreen)
23338
+ {
23339
+ this.Canvas.moveTo(yHigh,ToFixedPoint(x));
23340
+ this.Canvas.lineTo(yLow,ToFixedPoint(x));
23341
+ }
23342
+ else
23343
+ {
23344
+ this.Canvas.moveTo(ToFixedPoint(x),yHigh);
23345
+ this.Canvas.lineTo(ToFixedPoint(x),yLow);
23346
+ }
23347
+ this.Canvas.stroke();
23348
+ }
23349
+ }
23350
+ }
23351
+
23178
23352
  this.DrawTrade=function() //交易系统
23179
23353
  {
23180
23354
  if (!this.TradeData) return;
@@ -23436,6 +23610,10 @@ function ChartKLine()
23436
23610
  {
23437
23611
  this.DrawOrderFlow_Style3();
23438
23612
  }
23613
+ else if (this.DrawType==9)
23614
+ {
23615
+ this.DrawKBar();
23616
+ }
23439
23617
  else
23440
23618
  {
23441
23619
  this.DrawKBar();
@@ -25990,10 +26168,13 @@ function ChartOverlayKLine()
25990
26168
 
25991
26169
  this.PtInChart=function(x,y)
25992
26170
  {
25993
- if (this.DrawType==1 || this.DrawType==4)
26171
+ var drawType=this.DrawType;
26172
+ if (IFrameSplitOperator.IsNumber(this.CustomDrawType)) drawType=this.CustomDrawType;
26173
+
26174
+ if (drawType==1 || drawType==4) //线段,面积不支持选中
25994
26175
  {
25995
26176
  return null;
25996
- return this.PtInLine(x,y, {KLineClose:true});
26177
+ //return this.PtInLine(x,y, {KLineClose:true});
25997
26178
  }
25998
26179
 
25999
26180
  return this.PtInKBar(x,y, {OverlayKLine:true});
@@ -44844,7 +45025,14 @@ function DynamicChartTitlePainting()
44844
45025
  else
44845
45026
  {
44846
45027
  this.Canvas.fillStyle=item.Color;
44847
- var text=item.Name+":"+valueText;
45028
+ var text=valueText;
45029
+ if (item.Name)
45030
+ {
45031
+ var dyTitle=this.GetDynamicOutName(item.Name);
45032
+ if (dyTitle) text=dyTitle+":"+valueText;
45033
+ else text=item.Name+":"+valueText;
45034
+ }
45035
+
44848
45036
  var space=this.ParamSpace*GetDevicePixelRatio();
44849
45037
  var textWidth=this.Canvas.measureText(text).width+space; //后空2个像素
44850
45038
  if ((left+textWidth)>right) break;
@@ -59496,6 +59684,7 @@ KLineChartContainer.JsonDataToHistoryData=function(data)
59496
59684
  var fclose=9, yfclose=10; //结算价, 前结算价
59497
59685
  var bfactor=11, afactor=12; //前, 后复权因子
59498
59686
  var orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;
59687
+ var colorData=JSCHART_DATA_FIELD_ID.KLINE_COLOR_DATA;
59499
59688
  for (var i = 0; i < list.length; ++i)
59500
59689
  {
59501
59690
  var item = new HistoryData();
@@ -59519,6 +59708,7 @@ KLineChartContainer.JsonDataToHistoryData=function(data)
59519
59708
  if (!IFrameSplitOperator.IsNumber(item.Open)) continue;
59520
59709
 
59521
59710
  if (jsData[orderFlow]) item.OrderFlow=jsData[orderFlow];
59711
+ if (jsData[colorData]) item.ColorData=jsData[colorData];
59522
59712
 
59523
59713
  aryDayData.push(item);
59524
59714
  }
@@ -59558,6 +59748,7 @@ KLineChartContainer.JsonDataToRealtimeData=function(data, symbol)
59558
59748
 
59559
59749
  if (IFrameSplitOperator.IsNumber(stock.bfactor)) item.BFactor=stock.bfactor; //前复权因子
59560
59750
  if (IFrameSplitOperator.IsNumber(stock.afactor)) item.AFactor=stock.afactor; //后复权因子
59751
+ if (stock.colordata) item.ColorData=stock.colordata; //自定义颜色
59561
59752
  return item;
59562
59753
  }
59563
59754
 
@@ -59645,7 +59836,8 @@ KLineChartContainer.JsonDataToMinuteRealtimeDataV2=function(data,symbol)
59645
59836
  var isSHSZ=MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol);
59646
59837
  var isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol); //是否是期货
59647
59838
 
59648
- var date = 0, yclose = 1, open = 2, high = 3, low = 4, close = 5, vol = 6, amount = 7, time = 8, position=9, orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;;
59839
+ var date = 0, yclose = 1, open = 2, high = 3, low = 4, close = 5, vol = 6, amount = 7, time = 8, position=9;
59840
+ var orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;
59649
59841
  var yClose=null;
59650
59842
 
59651
59843
  for (var i = 0; i < overlayData.data.length; ++i)
@@ -59689,7 +59881,9 @@ KLineChartContainer.JsonDataToMinuteHistoryData=function(data)
59689
59881
  if (upperSymbol) isFutures=MARKET_SUFFIX_NAME.IsFutures(upperSymbol);
59690
59882
  var list = data.data;
59691
59883
  var aryDayData=new Array();
59692
- var date = 0, yclose = 1, open = 2, high = 3, low = 4, close = 5, vol = 6, amount = 7, time = 8, position=9, orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;;
59884
+ var date = 0, yclose = 1, open = 2, high = 3, low = 4, close = 5, vol = 6, amount = 7, time = 8, position=9;
59885
+ var orderFlow=JSCHART_DATA_FIELD_ID.KLINE_ORDERFLOW;
59886
+ var colorData=JSCHART_DATA_FIELD_ID.KLINE_COLOR_DATA;
59693
59887
  var yClose=null;
59694
59888
  for (var i = 0; i < list.length; ++i)
59695
59889
  {
@@ -59714,6 +59908,7 @@ KLineChartContainer.JsonDataToMinuteHistoryData=function(data)
59714
59908
  if (IFrameSplitOperator.IsNumber(item.Close)) yClose=item.Close;
59715
59909
 
59716
59910
  if (jsData[orderFlow]) item.OrderFlow=jsData[orderFlow];
59911
+ if (jsData[colorData]) item.ColorData=jsData[colorData];
59717
59912
 
59718
59913
  aryDayData.push(item);
59719
59914
  }