hqchart 1.1.14533 → 1.1.14542
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 +73 -39
- package/package.json +1 -1
- package/src/jscommon/umychart.DialogDrawTool.js +4 -0
- package/src/jscommon/umychart.PopKLineChart.js +6 -4
- package/src/jscommon/umychart.PopMinuteChart.js +6 -3
- package/src/jscommon/umychart.js +381 -17
- package/src/jscommon/umychart.style.js +17 -0
- package/src/jscommon/umychart.uniapp.h5/umychart.uniapp.h5.js +399 -18
- package/src/jscommon/umychart.version.js +1 -1
- package/src/jscommon/umychart.vue/umychart.vue.js +415 -25
|
@@ -4545,6 +4545,8 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
|
|
|
4545
4545
|
if (IFrameSplitOperator.IsBool(item.PriceGap.Enable)) klineChart.PriceGap.Enable=item.PriceGap.Enable;
|
|
4546
4546
|
if (IFrameSplitOperator.IsNumber(item.PriceGap.Count)) klineChart.PriceGap.Count=item.PriceGap.Count;
|
|
4547
4547
|
}
|
|
4548
|
+
|
|
4549
|
+
if (IFrameSplitOperator.IsBool(item.EnablePrediction)) klineChart.PredictionConfig.Enable=item.EnablePrediction;
|
|
4548
4550
|
}
|
|
4549
4551
|
|
|
4550
4552
|
if(option.KLineTitle)
|
|
@@ -27829,7 +27831,7 @@ function ChartData()
|
|
|
27829
27831
|
return result;
|
|
27830
27832
|
}
|
|
27831
27833
|
|
|
27832
|
-
this.MergeMinuteData=function(data) //合并数据
|
|
27834
|
+
this.MergeMinuteData=function(data, period) //合并数据
|
|
27833
27835
|
{
|
|
27834
27836
|
if (!this.Data || this.Data.length<=0)
|
|
27835
27837
|
{
|
|
@@ -27837,6 +27839,7 @@ function ChartData()
|
|
|
27837
27839
|
return true;
|
|
27838
27840
|
}
|
|
27839
27841
|
|
|
27842
|
+
var bDayPeriod=ChartData.IsDayPeriod(period, true);
|
|
27840
27843
|
var sourceFirstItem=this.Data[0];
|
|
27841
27844
|
var firstItemID=0;
|
|
27842
27845
|
var firstItem=null;
|
|
@@ -27850,11 +27853,23 @@ function ChartData()
|
|
|
27850
27853
|
break;
|
|
27851
27854
|
}
|
|
27852
27855
|
|
|
27853
|
-
if (
|
|
27856
|
+
if (bDayPeriod)
|
|
27854
27857
|
{
|
|
27855
|
-
|
|
27856
|
-
|
|
27857
|
-
|
|
27858
|
+
if (item.Date==sourceFirstItem.Date)
|
|
27859
|
+
{
|
|
27860
|
+
firstItemID=i;
|
|
27861
|
+
firstItem=item;
|
|
27862
|
+
break;
|
|
27863
|
+
}
|
|
27864
|
+
}
|
|
27865
|
+
else
|
|
27866
|
+
{
|
|
27867
|
+
if (item.Date==sourceFirstItem.Date && item.Time>=sourceFirstItem.Time)
|
|
27868
|
+
{
|
|
27869
|
+
firstItemID=i;
|
|
27870
|
+
firstItem=item;
|
|
27871
|
+
break;
|
|
27872
|
+
}
|
|
27858
27873
|
}
|
|
27859
27874
|
}
|
|
27860
27875
|
|
|
@@ -27867,11 +27882,23 @@ function ChartData()
|
|
|
27867
27882
|
var date=this.Data[i].Date;
|
|
27868
27883
|
var time=this.Data[i].Time;
|
|
27869
27884
|
|
|
27870
|
-
if (
|
|
27885
|
+
if (bDayPeriod)
|
|
27871
27886
|
{
|
|
27872
|
-
|
|
27873
|
-
|
|
27874
|
-
|
|
27887
|
+
if (firstItem.Date>date || firstItem.Date==date)
|
|
27888
|
+
{
|
|
27889
|
+
index=i;
|
|
27890
|
+
if (firstItem.Date==date) bFind=true;
|
|
27891
|
+
break;
|
|
27892
|
+
}
|
|
27893
|
+
}
|
|
27894
|
+
else
|
|
27895
|
+
{
|
|
27896
|
+
if (firstItem.Date>date || (firstItem.Date==date && firstItem.Time>=time) )
|
|
27897
|
+
{
|
|
27898
|
+
index=i;
|
|
27899
|
+
if (firstItem.Date==date && firstItem.Time==time) bFind=true;
|
|
27900
|
+
break;
|
|
27901
|
+
}
|
|
27875
27902
|
}
|
|
27876
27903
|
}
|
|
27877
27904
|
|
|
@@ -29785,9 +29812,30 @@ function ChartKLine()
|
|
|
29785
29812
|
DownAreaColor:g_JSChartResource.HLCArea.DownAreaColor,
|
|
29786
29813
|
}
|
|
29787
29814
|
|
|
29788
|
-
//虚线柱子
|
|
29815
|
+
//虚线柱子 (非交易日)
|
|
29789
29816
|
this.VirtualBarConfig={ Color:g_JSChartResource.VirtualKLine.Color, LineDash:g_JSChartResource.VirtualKLine.LineDash };
|
|
29790
29817
|
|
|
29818
|
+
//预测线配置
|
|
29819
|
+
this.PredictionConfig=
|
|
29820
|
+
{
|
|
29821
|
+
Line:
|
|
29822
|
+
{
|
|
29823
|
+
Color:g_JSChartResource.PredictionKLine.Line.Color,
|
|
29824
|
+
LineDash:g_JSChartResource.PredictionKLine.Line.LineDash,
|
|
29825
|
+
LineWidth:g_JSChartResource.PredictionKLine.Line.LineWidth
|
|
29826
|
+
},
|
|
29827
|
+
|
|
29828
|
+
Bar:
|
|
29829
|
+
{
|
|
29830
|
+
UpColor:g_JSChartResource.PredictionKLine.Bar.UpColor,
|
|
29831
|
+
DownColor:g_JSChartResource.PredictionKLine.Bar.DownColor,
|
|
29832
|
+
UnchangeColor:g_JSChartResource.PredictionKLine.Bar.UnchangeColor ,
|
|
29833
|
+
DrawType:g_JSChartResource.PredictionKLine.Bar.DrawType
|
|
29834
|
+
},
|
|
29835
|
+
Enable:false, //是否启动
|
|
29836
|
+
};
|
|
29837
|
+
this.AryPredictionCache=[]; //预测数据
|
|
29838
|
+
|
|
29791
29839
|
//DrawType==14 自定义图形
|
|
29792
29840
|
this.FFKChart;
|
|
29793
29841
|
|
|
@@ -29925,6 +29973,22 @@ function ChartKLine()
|
|
|
29925
29973
|
this.OrderFlow.UnchagneColor= { BG:g_JSChartResource.OrderFlow.UnchagneColor.BG, Border:g_JSChartResource.OrderFlow.UnchagneColor.Border };
|
|
29926
29974
|
this.OrderFlow.Text={ Color: g_JSChartResource.OrderFlow.Text.Color , Family:g_JSChartResource.OrderFlow.Text.Family, FontMaxSize:g_JSChartResource.OrderFlow.Text.FontMaxSize, MaxValue:g_JSChartResource.OrderFlow.Text.MaxValue };
|
|
29927
29975
|
this.OrderFlow.Line={ UpDownColor: g_JSChartResource.OrderFlow.Line.UpDownColor, MiddleColor:g_JSChartResource.OrderFlow.Line.MiddleColor };
|
|
29976
|
+
|
|
29977
|
+
this.PredictionConfig.Line=
|
|
29978
|
+
{
|
|
29979
|
+
Color:g_JSChartResource.PredictionKLine.Line.Color,
|
|
29980
|
+
LineDash:g_JSChartResource.PredictionKLine.Line.LineDash,
|
|
29981
|
+
LineWidth:g_JSChartResource.PredictionKLine.Line.LineWidth
|
|
29982
|
+
};
|
|
29983
|
+
|
|
29984
|
+
this.PredictionConfig.Bar=
|
|
29985
|
+
{
|
|
29986
|
+
UpColor:g_JSChartResource.PredictionKLine.Bar.UpColor,
|
|
29987
|
+
DownColor:g_JSChartResource.PredictionKLine.Bar.DownColor,
|
|
29988
|
+
UnchangeColor:g_JSChartResource.PredictionKLine.Bar.UnchangeColor,
|
|
29989
|
+
DrawType:g_JSChartResource.PredictionKLine.Bar.DrawType
|
|
29990
|
+
};
|
|
29991
|
+
|
|
29928
29992
|
}
|
|
29929
29993
|
|
|
29930
29994
|
this.ClearCustomKLine=function()
|
|
@@ -30295,6 +30359,8 @@ function ChartKLine()
|
|
|
30295
30359
|
this.DrawKRange.Start=this.Data.DataOffset;
|
|
30296
30360
|
|
|
30297
30361
|
var preKItemInfo=null;
|
|
30362
|
+
var prePoint=null;
|
|
30363
|
+
var xEnd=null; //最后一个点
|
|
30298
30364
|
for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth),++this.ShowRange.DataCount)
|
|
30299
30365
|
{
|
|
30300
30366
|
var data=this.Data.Data[i];
|
|
@@ -30308,6 +30374,13 @@ function ChartKLine()
|
|
|
30308
30374
|
var yClose=this.GetYFromData(data.Close,false);
|
|
30309
30375
|
this.DrawKRange.End=i;
|
|
30310
30376
|
|
|
30377
|
+
if (data.IsVirtual && this.PredictionConfig.Enable) //预测数据|虚拟数据
|
|
30378
|
+
{
|
|
30379
|
+
this.AryPredictionCache.push({ PrePoint:prePoint, Point:{ X:x, Y:yClose }});
|
|
30380
|
+
prePoint={ X:x, Y:yClose};
|
|
30381
|
+
continue;
|
|
30382
|
+
}
|
|
30383
|
+
|
|
30311
30384
|
if (bFirstPoint)
|
|
30312
30385
|
{
|
|
30313
30386
|
if (isHScreen)
|
|
@@ -30328,6 +30401,9 @@ function ChartKLine()
|
|
|
30328
30401
|
else this.Canvas.lineTo(x,yClose);
|
|
30329
30402
|
}
|
|
30330
30403
|
|
|
30404
|
+
xEnd=x;
|
|
30405
|
+
prePoint={ X:x, Y:yClose};
|
|
30406
|
+
|
|
30331
30407
|
if (i==this.Data.Data.length-1)
|
|
30332
30408
|
{
|
|
30333
30409
|
ptLast={ X:x, Y:yClose, XLeft:left, XRight:right, KItem:data, ChartRight:chartright };
|
|
@@ -30359,12 +30435,12 @@ function ChartKLine()
|
|
|
30359
30435
|
this.Canvas.stroke();
|
|
30360
30436
|
if (isHScreen)
|
|
30361
30437
|
{
|
|
30362
|
-
this.Canvas.lineTo(border.Left,
|
|
30438
|
+
this.Canvas.lineTo(border.Left,xEnd);
|
|
30363
30439
|
this.Canvas.lineTo(border.Left,firstPoint.Y);
|
|
30364
30440
|
}
|
|
30365
30441
|
else
|
|
30366
30442
|
{
|
|
30367
|
-
this.Canvas.lineTo(
|
|
30443
|
+
this.Canvas.lineTo(xEnd,border.Bottom);
|
|
30368
30444
|
this.Canvas.lineTo(firstPoint.X,border.Bottom);
|
|
30369
30445
|
}
|
|
30370
30446
|
this.Canvas.closePath();
|
|
@@ -30427,11 +30503,12 @@ function ChartKLine()
|
|
|
30427
30503
|
var mapBreakPoint=this.BuildBreakPoint(); //断点
|
|
30428
30504
|
|
|
30429
30505
|
var preKItemInfo=null;
|
|
30506
|
+
var prePoint=null;
|
|
30430
30507
|
for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth),++this.ShowRange.DataCount)
|
|
30431
30508
|
{
|
|
30432
30509
|
var data=this.Data.Data[i];
|
|
30433
30510
|
this.ShowRange.End=i;
|
|
30434
|
-
if (data.Open==null || data.High==null || data.Low==null || data.Close==null) continue;
|
|
30511
|
+
if (!data || data.Open==null || data.High==null || data.Low==null || data.Close==null) continue;
|
|
30435
30512
|
|
|
30436
30513
|
var left=xOffset;
|
|
30437
30514
|
var right=xOffset+dataWidth;
|
|
@@ -30440,6 +30517,13 @@ function ChartKLine()
|
|
|
30440
30517
|
var yClose=this.GetYFromData(data.Close,false);
|
|
30441
30518
|
this.DrawKRange.End=i;
|
|
30442
30519
|
|
|
30520
|
+
if (data.IsVirtual && this.PredictionConfig.Enable) //预测数据|虚拟数据
|
|
30521
|
+
{
|
|
30522
|
+
this.AryPredictionCache.push({ PrePoint:prePoint, Point:{ X:x, Y:yClose }});
|
|
30523
|
+
prePoint={ X:x, Y:yClose};
|
|
30524
|
+
continue;
|
|
30525
|
+
}
|
|
30526
|
+
|
|
30443
30527
|
if (bFirstPoint)
|
|
30444
30528
|
{
|
|
30445
30529
|
if (isHScreen) this.Canvas.moveTo(yClose,x);
|
|
@@ -30453,6 +30537,8 @@ function ChartKLine()
|
|
|
30453
30537
|
}
|
|
30454
30538
|
++drawCount;
|
|
30455
30539
|
|
|
30540
|
+
prePoint={ X:x, Y:yClose};
|
|
30541
|
+
|
|
30456
30542
|
if (this.PriceGap.Enable)
|
|
30457
30543
|
{
|
|
30458
30544
|
var yLow=this.GetYFromData(data.Low, false);
|
|
@@ -30527,6 +30613,7 @@ function ChartKLine()
|
|
|
30527
30613
|
}
|
|
30528
30614
|
|
|
30529
30615
|
var preKItemInfo=null;
|
|
30616
|
+
var prePoint=null; //上一个点的位置
|
|
30530
30617
|
for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth),++this.ShowRange.DataCount)
|
|
30531
30618
|
{
|
|
30532
30619
|
var data=this.Data.Data[i];
|
|
@@ -30576,6 +30663,10 @@ function ChartKLine()
|
|
|
30576
30663
|
{
|
|
30577
30664
|
this.DrawVirtualBar(data, dataWidth, x, y, left, right, yLow, yHigh, yOpen, yClose, isHScreen);
|
|
30578
30665
|
}
|
|
30666
|
+
else if (data.IsVirtual && this.PredictionConfig.Enable)
|
|
30667
|
+
{
|
|
30668
|
+
this.DrawPredictionBar(data, dataWidth, x, y, left, right, yLow, yHigh, yOpen, yClose, isHScreen);
|
|
30669
|
+
}
|
|
30579
30670
|
else if (kLineOption)
|
|
30580
30671
|
{
|
|
30581
30672
|
var barColor=kLineOption.Color;
|
|
@@ -30657,6 +30748,8 @@ function ChartKLine()
|
|
|
30657
30748
|
if (value>0)
|
|
30658
30749
|
this.AryPriceGapCache.push({ Data:[preKItemInfo, kItemInfo], Type:value });
|
|
30659
30750
|
}
|
|
30751
|
+
|
|
30752
|
+
prePoint={ X:x, Y:yClose }; //上一个点
|
|
30660
30753
|
|
|
30661
30754
|
preKItemInfo=kItemInfo;
|
|
30662
30755
|
}
|
|
@@ -31528,6 +31621,82 @@ function ChartKLine()
|
|
|
31528
31621
|
this.Canvas.setLineDash([]);
|
|
31529
31622
|
}
|
|
31530
31623
|
|
|
31624
|
+
this.DrawPredictionBar=function(data, dataWidth, x, y, left, right, yLow, yHigh, yOpen, yClose, isHScreen)
|
|
31625
|
+
{
|
|
31626
|
+
var config=this.PredictionConfig.Bar;
|
|
31627
|
+
var drawType=this.DrawType;
|
|
31628
|
+
if (IFrameSplitOperator.IsNumber(config.DrawType)) drawType=config.DrawType;
|
|
31629
|
+
|
|
31630
|
+
if (data.Open<data.Close) //阳线
|
|
31631
|
+
{
|
|
31632
|
+
this.DrawKBar_Up(data, dataWidth, config.UpColor, drawType, x, y, left, right, yLow, yHigh, yOpen, yClose, isHScreen);
|
|
31633
|
+
}
|
|
31634
|
+
else if (data.Open>data.Close) //阴线
|
|
31635
|
+
{
|
|
31636
|
+
this.DrawKBar_Down(data, dataWidth, config.DownColor, drawType, x, y, left, right, yLow, yHigh, yOpen, yClose, isHScreen);
|
|
31637
|
+
}
|
|
31638
|
+
else
|
|
31639
|
+
{
|
|
31640
|
+
this.DrawKBar_Unchagne(data, dataWidth, config.UnchangeColor, drawType, x, y, left, right, yLow, yHigh, yOpen, yClose, isHScreen);
|
|
31641
|
+
}
|
|
31642
|
+
}
|
|
31643
|
+
|
|
31644
|
+
this.DrawPredictionLine=function()
|
|
31645
|
+
{
|
|
31646
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(this.AryPredictionCache)) return;
|
|
31647
|
+
|
|
31648
|
+
this.Canvas.save();
|
|
31649
|
+
|
|
31650
|
+
var bHScreen=(this.ChartFrame.IsHScreen===true);
|
|
31651
|
+
var bFirstPoint=true;
|
|
31652
|
+
var drawCount=0;
|
|
31653
|
+
for(var i=0;i<this.AryPredictionCache.length;++i)
|
|
31654
|
+
{
|
|
31655
|
+
var item=this.AryPredictionCache[i];
|
|
31656
|
+
if (bFirstPoint)
|
|
31657
|
+
{
|
|
31658
|
+
bFirstPoint=false;
|
|
31659
|
+
this.Canvas.beginPath();
|
|
31660
|
+
if (item.PrePoint)
|
|
31661
|
+
{
|
|
31662
|
+
var pt=item.PrePoint;
|
|
31663
|
+
if (bHScreen) this.Canvas.moveTo(pt.Y,pt.X); //横屏坐标轴对调
|
|
31664
|
+
else this.Canvas.moveTo(pt.X,pt.Y);
|
|
31665
|
+
|
|
31666
|
+
var pt=item.Point;
|
|
31667
|
+
if (bHScreen) this.Canvas.lineTo(pt.Y,pt.X);
|
|
31668
|
+
else this.Canvas.lineTo(pt.X,pt.Y);
|
|
31669
|
+
}
|
|
31670
|
+
else if (item.Point)
|
|
31671
|
+
{
|
|
31672
|
+
var pt=item.Point;
|
|
31673
|
+
if (bHScreen) this.Canvas.moveTo(pt.Y,pt.X); //横屏坐标轴对调
|
|
31674
|
+
else this.Canvas.moveTo(pt.X,pt.Y);
|
|
31675
|
+
}
|
|
31676
|
+
}
|
|
31677
|
+
else
|
|
31678
|
+
{
|
|
31679
|
+
var pt=item.Point;
|
|
31680
|
+
if (bHScreen) this.Canvas.lineTo(pt.Y,pt.X);
|
|
31681
|
+
else this.Canvas.lineTo(pt.X,pt.Y);
|
|
31682
|
+
}
|
|
31683
|
+
|
|
31684
|
+
++drawCount;
|
|
31685
|
+
}
|
|
31686
|
+
|
|
31687
|
+
if (drawCount>0)
|
|
31688
|
+
{
|
|
31689
|
+
var pixelRatio=GetDevicePixelRatio();
|
|
31690
|
+
var config=this.PredictionConfig.Line;
|
|
31691
|
+
this.Canvas.strokeStyle=config.Color;
|
|
31692
|
+
if (IFrameSplitOperator.IsNumber(config.LineWidth)) this.Canvas.lineWidth=config.LineWidth*pixelRatio;
|
|
31693
|
+
if (IFrameSplitOperator.IsNonEmptyArray(config.LineDash)) this.Canvas.setLineDash(config.LineDash)
|
|
31694
|
+
this.Canvas.stroke();
|
|
31695
|
+
}
|
|
31696
|
+
|
|
31697
|
+
this.Canvas.restore();
|
|
31698
|
+
}
|
|
31699
|
+
|
|
31531
31700
|
this.DrawRenkoCandle=function() //砖型K线
|
|
31532
31701
|
{
|
|
31533
31702
|
var isHScreen=(this.ChartFrame.IsHScreen===true);
|
|
@@ -32344,6 +32513,7 @@ function ChartKLine()
|
|
|
32344
32513
|
this.PtMin={X:null,Y:null,Value:null,Align:'left'}; //清空最小
|
|
32345
32514
|
this.DrawKRange={ Start:null, End:null };
|
|
32346
32515
|
this.AryPriceGapCache=[];
|
|
32516
|
+
this.AryPredictionCache=[];
|
|
32347
32517
|
|
|
32348
32518
|
this.ChartFrame.ChartKLine={Max:null, Min:null }; //保存K线上 显示最大最小值坐标
|
|
32349
32519
|
|
|
@@ -32384,6 +32554,7 @@ function ChartKLine()
|
|
|
32384
32554
|
{
|
|
32385
32555
|
this.DrawCloseLine();
|
|
32386
32556
|
this.Canvas.restore();
|
|
32557
|
+
this.DrawPredictionLine();
|
|
32387
32558
|
if (this.PriceGap.Enable) this.DrawPriceGap();
|
|
32388
32559
|
return;
|
|
32389
32560
|
}
|
|
@@ -32456,6 +32627,7 @@ function ChartKLine()
|
|
|
32456
32627
|
|
|
32457
32628
|
this.Canvas.restore();
|
|
32458
32629
|
|
|
32630
|
+
this.DrawPredictionLine();
|
|
32459
32631
|
if (this.PriceGap.Enable) this.DrawPriceGap();
|
|
32460
32632
|
|
|
32461
32633
|
if (this.IsShowMaxMinPrice) //标注最大值最小值
|
|
@@ -39235,6 +39407,7 @@ function ChartVolStick()
|
|
|
39235
39407
|
var value=this.Data.Data[i];
|
|
39236
39408
|
var kItem=this.HistoryData.Data[i];
|
|
39237
39409
|
if (value==null || kItem==null) continue;
|
|
39410
|
+
if (!IFrameSplitOperator.IsNumber(value)) continue;
|
|
39238
39411
|
if (value==0) continue;
|
|
39239
39412
|
|
|
39240
39413
|
var left=xOffset;
|
|
@@ -76172,6 +76345,24 @@ function JSChartResource()
|
|
|
76172
76345
|
LineDash:[2,2]
|
|
76173
76346
|
};
|
|
76174
76347
|
|
|
76348
|
+
this.PredictionKLine=
|
|
76349
|
+
{
|
|
76350
|
+
Line:
|
|
76351
|
+
{
|
|
76352
|
+
Color:"rgb(100,100,100)",
|
|
76353
|
+
LineDash:[3,5],
|
|
76354
|
+
LineWidth:2,
|
|
76355
|
+
},
|
|
76356
|
+
|
|
76357
|
+
Bar:
|
|
76358
|
+
{
|
|
76359
|
+
UpColor:"rgb(65,105,225)",
|
|
76360
|
+
DownColor:"rgb(65,105,225)",
|
|
76361
|
+
UnchangeColor:"rgb(65,105,225s)" ,
|
|
76362
|
+
DrawType:3
|
|
76363
|
+
}
|
|
76364
|
+
};
|
|
76365
|
+
|
|
76175
76366
|
this.PriceGapStyple=
|
|
76176
76367
|
{
|
|
76177
76368
|
Line:{ Color:"rgb(186,186,186)" },
|
|
@@ -77572,6 +77763,28 @@ function JSChartResource()
|
|
|
77572
77763
|
if (item.LineDash) this.VirtualKLine.LineDash=item.LineDash;
|
|
77573
77764
|
}
|
|
77574
77765
|
|
|
77766
|
+
if (style.PredictionKLine)
|
|
77767
|
+
{
|
|
77768
|
+
if (style.PredictionKLine.Line)
|
|
77769
|
+
{
|
|
77770
|
+
var item=style.PredictionKLine.Line;
|
|
77771
|
+
var dest=this.PredictionKLine.Line;
|
|
77772
|
+
if (item.Color) dest.Color=item.Color;
|
|
77773
|
+
if (item.LineDash) dest.LineDash=item.LineDash;
|
|
77774
|
+
if (IFrameSplitOperator.IsNumber(item.LineWidth)) dest.LineWidth=item.LineWidth;
|
|
77775
|
+
}
|
|
77776
|
+
|
|
77777
|
+
if (style.PredictionKLine.Bar)
|
|
77778
|
+
{
|
|
77779
|
+
var item=style.PredictionKLine.Bar;
|
|
77780
|
+
var dest=this.PredictionKLine.Bar;
|
|
77781
|
+
if (item.UpColor) dest.UpColor=item.UpColor;
|
|
77782
|
+
if (item.DownColor) dest.DownColor=item.DownColor;
|
|
77783
|
+
if (item.UnchangeColor) dest.UnchangeColor=item.UnchangeColor;
|
|
77784
|
+
if (IFrameSplitOperator.IsNumber(item.DrawType) || item.DrawType===null) dest.DrawType=item.DrawType;
|
|
77785
|
+
}
|
|
77786
|
+
}
|
|
77787
|
+
|
|
77575
77788
|
if (style.PriceGapStyple)
|
|
77576
77789
|
{
|
|
77577
77790
|
var item=style.PriceGapStyple;
|
|
@@ -81883,7 +82096,15 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
81883
82096
|
this.Symbol=data.symbol;
|
|
81884
82097
|
this.Name=data.name;
|
|
81885
82098
|
|
|
81886
|
-
|
|
82099
|
+
var chartOperator=null; //额外的图形控制
|
|
82100
|
+
if (data && data.ChartOperator)
|
|
82101
|
+
{
|
|
82102
|
+
var item=data.ChartOperator;
|
|
82103
|
+
chartOperator={ };
|
|
82104
|
+
if (item.IsShowAll===true) chartOperator.IsShowAll=true; //全部显示
|
|
82105
|
+
}
|
|
82106
|
+
|
|
82107
|
+
this.BindMainData(bindData,this.PageSize,chartOperator);
|
|
81887
82108
|
if (this.AfterBindMainData) this.AfterBindMainData("RecvHistoryData");
|
|
81888
82109
|
this.Frame.SetSizeChage(true);
|
|
81889
82110
|
|
|
@@ -82443,9 +82664,90 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
82443
82664
|
});
|
|
82444
82665
|
}
|
|
82445
82666
|
|
|
82667
|
+
|
|
82668
|
+
this.RecvRealtimeDataV2=function(data)
|
|
82669
|
+
{
|
|
82670
|
+
var aryRealtimeData=KLineChartContainer.JsonDataToRealtimeDataV2(data,this.Symbol);
|
|
82671
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(aryRealtimeData)) return;
|
|
82672
|
+
|
|
82673
|
+
var lastDataCount=this.GetHistoryDataCount(); //保存下上一次的数据个数
|
|
82674
|
+
var lastSourceDataCount=this.SourceData.Data.length;
|
|
82675
|
+
if (!this.SourceData.MergeMinuteData(aryRealtimeData, this.Period)) return;
|
|
82676
|
+
|
|
82677
|
+
var bindData=new ChartData();
|
|
82678
|
+
bindData.Data=this.SourceData.Data;
|
|
82679
|
+
bindData.Period=this.Period;
|
|
82680
|
+
bindData.Right=this.Right;
|
|
82681
|
+
bindData.DataType=this.SourceData.DataType;
|
|
82682
|
+
bindData.Symbol=this.Symbol;
|
|
82683
|
+
|
|
82684
|
+
//if (bindData.Right>0 && ChartData.IsDayPeriod(bindData.Period,true) && MARKET_SUFFIX_NAME.IsSHSZStockA(this.Symbol) && !this.IsApiPeriod) //复权(A股日线数据才复权)
|
|
82685
|
+
if (bindData.Right>0 && MARKET_SUFFIX_NAME.IsEnableRight(bindData.Period,this.Symbol,this.RightFormula) && !this.IsApiPeriod && ChartData.IsDayPeriod(bindData.Period,true)) //复权
|
|
82686
|
+
{
|
|
82687
|
+
var rightData=bindData.GetRightData(bindData.Right,{ AlgorithmType: this.RightFormula });
|
|
82688
|
+
bindData.Data=rightData;
|
|
82689
|
+
}
|
|
82690
|
+
|
|
82691
|
+
if (!this.IsApiPeriod)
|
|
82692
|
+
{
|
|
82693
|
+
if (ChartData.IsDayPeriod(bindData.Period,false) || ChartData.IsMinutePeriod(bindData.Period,false)) //周期数据 (0= 日线,4=1分钟线 不需要处理)
|
|
82694
|
+
{
|
|
82695
|
+
var periodData=bindData.GetPeriodData(bindData.Period);
|
|
82696
|
+
bindData.Data=periodData;
|
|
82697
|
+
}
|
|
82698
|
+
}
|
|
82699
|
+
|
|
82700
|
+
var kLineCalculate=this.GetKLineCalulate();
|
|
82701
|
+
if (kLineCalculate) //额外的K线图形计算
|
|
82702
|
+
{
|
|
82703
|
+
var newBindData=kLineCalculate.RecvHistoryData(bindData, { Symbol:this.Symbol, Function:"RecvRealtimeData" });
|
|
82704
|
+
bindData=newBindData;
|
|
82705
|
+
this.FlowCapitalReady=true;
|
|
82706
|
+
}
|
|
82707
|
+
|
|
82708
|
+
this.UpdateMainData(bindData,lastDataCount);//更新主图数据
|
|
82709
|
+
this.UpdateOverlayRealtimeDataV2(data); //更新叠加股票数据
|
|
82710
|
+
this.BindInstructionIndexData(bindData); //执行指示脚本
|
|
82711
|
+
|
|
82712
|
+
for(var i=0; i<this.Frame.SubFrame.length; ++i)
|
|
82713
|
+
{
|
|
82714
|
+
this.BindIndexData(i,bindData, { CheckRunCount:true });
|
|
82715
|
+
}
|
|
82716
|
+
|
|
82717
|
+
this.BindAllOverlayIndexData(bindData, { CheckRunCount:true, SyncExecute:true }); //同步模式叠加指标
|
|
82718
|
+
|
|
82719
|
+
//刷新画图
|
|
82720
|
+
this.UpdataDataoffset(); //更新数据偏移
|
|
82721
|
+
this.UpdatePointByCursorIndex(1); //更新十字光标位子
|
|
82722
|
+
this.UpdateFrameMaxMin(); //调整坐标最大 最小值
|
|
82723
|
+
this.Frame.SetSizeChage(true);
|
|
82724
|
+
this.Draw();
|
|
82725
|
+
|
|
82726
|
+
this.SendKLineUpdateEvent(bindData);
|
|
82727
|
+
this.UpdateDOMTooltip(0, bindData);
|
|
82728
|
+
this.UpdateHQFloatTooltip(bindData);
|
|
82729
|
+
|
|
82730
|
+
//叠加指标计算
|
|
82731
|
+
this.BindAllOverlayIndexData(bindData, { CheckRunCount:true,SyncExecute:false }); //异步模式叠加指标
|
|
82732
|
+
|
|
82733
|
+
if (this.mapEvent.has(JSCHART_EVENT_ID.ON_RECV_REALTIME_DATA))
|
|
82734
|
+
{
|
|
82735
|
+
var event=this.mapEvent.get(JSCHART_EVENT_ID.ON_RECV_REALTIME_DATA);
|
|
82736
|
+
var data={ HistoryData:bindData, Stock:{Symbol:this.Symbol, Name:this.Name } }
|
|
82737
|
+
event.Callback(event,data,this);
|
|
82738
|
+
}
|
|
82739
|
+
}
|
|
82740
|
+
|
|
82446
82741
|
this.RecvRealtimeData=function(data)
|
|
82447
82742
|
{
|
|
82448
82743
|
if (this.IsOnTouch==true) return; //正在操作中不更新数据
|
|
82744
|
+
|
|
82745
|
+
if (data.Ver==3.0)
|
|
82746
|
+
{
|
|
82747
|
+
this.RecvRealtimeDataV2(data);
|
|
82748
|
+
return;
|
|
82749
|
+
}
|
|
82750
|
+
|
|
82449
82751
|
var realtimeData=KLineChartContainer.JsonDataToRealtimeData(data,this.Symbol);
|
|
82450
82752
|
if (!realtimeData) return;
|
|
82451
82753
|
|
|
@@ -82626,6 +82928,47 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
82626
82928
|
}
|
|
82627
82929
|
}
|
|
82628
82930
|
|
|
82931
|
+
this.UpdateOverlayRealtimeDataV2=function(data)
|
|
82932
|
+
{
|
|
82933
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(this.OverlayChartPaint)) return;
|
|
82934
|
+
|
|
82935
|
+
for(var i=0; i<this.OverlayChartPaint.length; ++i)
|
|
82936
|
+
{
|
|
82937
|
+
var item=this.OverlayChartPaint[i];
|
|
82938
|
+
if (!item.Symbol) continue;
|
|
82939
|
+
if (!item.MainData) continue; //等待主图股票数据未下载完
|
|
82940
|
+
if (item.Status!=OVERLAY_STATUS_ID.STATUS_FINISHED_ID) continue;
|
|
82941
|
+
var aryRealtimeData=KLineChartContainer.JsonDataToRealtimeDataV2(data,item.Symbol); //获取叠加股票的最新数据
|
|
82942
|
+
if (!aryRealtimeData) continue;
|
|
82943
|
+
var sourceData=item.SourceData; //叠加股票的所有数据
|
|
82944
|
+
sourceData.MergeMinuteData(aryRealtimeData, this.Period);
|
|
82945
|
+
|
|
82946
|
+
var bindData=new ChartData();
|
|
82947
|
+
bindData.Data=sourceData.Data;
|
|
82948
|
+
bindData.Period=this.Period;
|
|
82949
|
+
bindData.Right=this.Right;
|
|
82950
|
+
bindData.DataType=0;
|
|
82951
|
+
|
|
82952
|
+
//if (bindData.Right>0 && MARKET_SUFFIX_NAME.IsSHSZStockA(data.symbol) && !this.IsApiPeriod) //复权数据 ,A股才有有复权
|
|
82953
|
+
if (bindData.Right>0 && MARKET_SUFFIX_NAME.IsEnableRight(bindData.Right, data.Symbol) && !this.IsApiPeriod)
|
|
82954
|
+
{
|
|
82955
|
+
var rightData=bindData.GetRightData(bindData.Right, { AlgorithmType: this.RightFormula });
|
|
82956
|
+
bindData.Data=rightData;
|
|
82957
|
+
}
|
|
82958
|
+
|
|
82959
|
+
var aryOverlayData=this.SourceData.GetOverlayData(bindData.Data, this.IsApiPeriod); //和主图数据拟合以后的数据
|
|
82960
|
+
bindData.Data=aryOverlayData;
|
|
82961
|
+
|
|
82962
|
+
if (ChartData.IsDayPeriod(bindData.Period,false) && !this.IsApiPeriod) //周期数据
|
|
82963
|
+
{
|
|
82964
|
+
var periodData=bindData.GetPeriodData(bindData.Period);
|
|
82965
|
+
bindData.Data=periodData;
|
|
82966
|
+
}
|
|
82967
|
+
|
|
82968
|
+
item.Data=bindData;
|
|
82969
|
+
}
|
|
82970
|
+
}
|
|
82971
|
+
|
|
82629
82972
|
this.RequestMinuteRealtimeData=function()
|
|
82630
82973
|
{
|
|
82631
82974
|
var self=this;
|
|
@@ -82747,7 +83090,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
82747
83090
|
if (this.IsApiPeriod) this.ReduceSourceData(); //减少数据
|
|
82748
83091
|
var lastDataCount=this.GetHistoryDataCount(); //保存下上一次的数据个数
|
|
82749
83092
|
if (!this.SourceData) return;
|
|
82750
|
-
if (!this.SourceData.MergeMinuteData(aryMinuteData)) return;
|
|
83093
|
+
if (!this.SourceData.MergeMinuteData(aryMinuteData, this.Period)) return;
|
|
82751
83094
|
|
|
82752
83095
|
JSConsole.Chart.Log(`[KLineChartContainer::RecvMinuteRealtimeDataV2] update kline by 1 minute data [${lastDataCount}->${this.SourceData.Data.length}], IsAutoSyncDataOffset=${this.IsAutoSyncDataOffset}`);
|
|
82753
83096
|
|
|
@@ -82830,7 +83173,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
82830
83173
|
if (this.IsApiPeriod) this.ReduceSourceData(); //减少数据
|
|
82831
83174
|
var lastDataCount=this.GetHistoryDataCount(); //保存下上一次的数据个数
|
|
82832
83175
|
var lastSourceDataCount=this.SourceData.Data.length;
|
|
82833
|
-
if (!this.SourceData.MergeMinuteData(realtimeData)) return;
|
|
83176
|
+
if (!this.SourceData.MergeMinuteData(realtimeData, this.Period)) return;
|
|
82834
83177
|
|
|
82835
83178
|
JSConsole.Chart.Log(`[KLineChartContainer::RecvMinuteRealtimeData] update kline by 1 minute data [${lastSourceDataCount}->${this.SourceData.Data.length}]`);
|
|
82836
83179
|
|
|
@@ -82901,7 +83244,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
82901
83244
|
var realtimeData=KLineChartContainer.JsonDataToMinuteRealtimeData(data,item.Symbol); //获取叠加股票的最新数据
|
|
82902
83245
|
if (!realtimeData) continue;
|
|
82903
83246
|
var sourceData=item.SourceData; //叠加股票的所有数据
|
|
82904
|
-
if (!sourceData.MergeMinuteData(realtimeData)) return;
|
|
83247
|
+
if (!sourceData.MergeMinuteData(realtimeData,this.Period)) return;
|
|
82905
83248
|
|
|
82906
83249
|
var bindData=new ChartData();
|
|
82907
83250
|
bindData.Data=sourceData.Data;
|
|
@@ -87732,6 +88075,27 @@ KLineChartContainer.JsonDataToHistoryData=function(data)
|
|
|
87732
88075
|
return aryDayData;
|
|
87733
88076
|
}
|
|
87734
88077
|
|
|
88078
|
+
|
|
88079
|
+
KLineChartContainer.JsonDataToRealtimeDataV2=function(data, symbol)
|
|
88080
|
+
{
|
|
88081
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(data.stock)) return null;
|
|
88082
|
+
|
|
88083
|
+
var finder=null;
|
|
88084
|
+
for(var i=0;i<data.stock.length;++i)
|
|
88085
|
+
{
|
|
88086
|
+
var item=data.stock[i];
|
|
88087
|
+
if (item.symbol==symbol)
|
|
88088
|
+
{
|
|
88089
|
+
finder=item;
|
|
88090
|
+
break;
|
|
88091
|
+
}
|
|
88092
|
+
}
|
|
88093
|
+
|
|
88094
|
+
if (!finder) return null;
|
|
88095
|
+
|
|
88096
|
+
return KLineChartContainer.JsonDataToHistoryData(finder);
|
|
88097
|
+
}
|
|
88098
|
+
|
|
87735
88099
|
KLineChartContainer.JsonDataToRealtimeData=function(data, symbol)
|
|
87736
88100
|
{
|
|
87737
88101
|
if (!data.stock) return null;
|
|
@@ -129412,6 +129776,23 @@ function GetBlackStyle()
|
|
|
129412
129776
|
LineDash:[2,2]
|
|
129413
129777
|
},
|
|
129414
129778
|
|
|
129779
|
+
PredictionKLine:
|
|
129780
|
+
{
|
|
129781
|
+
Line:
|
|
129782
|
+
{
|
|
129783
|
+
Color:"rgb(220,220,220)",
|
|
129784
|
+
LineDash:[3*GetDevicePixelRatio(),3*GetDevicePixelRatio()]
|
|
129785
|
+
},
|
|
129786
|
+
|
|
129787
|
+
Bar:
|
|
129788
|
+
{
|
|
129789
|
+
UpColor:"rgb(30,144,255)",
|
|
129790
|
+
DownColor:"rgb(30,144,255)",
|
|
129791
|
+
UnchangeColor:"rgb(30,144,255)" ,
|
|
129792
|
+
DrawType:3
|
|
129793
|
+
}
|
|
129794
|
+
},
|
|
129795
|
+
|
|
129415
129796
|
PriceGapStyple:
|
|
129416
129797
|
{
|
|
129417
129798
|
Line:{ Color:"rgb(128,128,128)" },
|
|
@@ -149185,6 +149566,10 @@ function JSDialogModifyDraw()
|
|
|
149185
149566
|
bShowLineColor=false;
|
|
149186
149567
|
bAdvanced=true;
|
|
149187
149568
|
}
|
|
149569
|
+
else if (chart.ClassName=="ChartDrawPictureIconFont")
|
|
149570
|
+
{
|
|
149571
|
+
bShowFontZoom=true;
|
|
149572
|
+
}
|
|
149188
149573
|
|
|
149189
149574
|
if (this.ColorButton)
|
|
149190
149575
|
{
|
|
@@ -149630,7 +150015,7 @@ function JSTooltipMinuteChart()
|
|
|
149630
150015
|
|
|
149631
150016
|
this.BGColor=g_JSChartResource.PopMinuteChart.BGColor;
|
|
149632
150017
|
this.BorderColor=g_JSChartResource.PopMinuteChart.BorderColor;
|
|
149633
|
-
this.
|
|
150018
|
+
this.OnCreatedCallback;
|
|
149634
150019
|
|
|
149635
150020
|
this.Minute=
|
|
149636
150021
|
{
|
|
@@ -149650,8 +150035,11 @@ function JSTooltipMinuteChart()
|
|
|
149650
150035
|
{
|
|
149651
150036
|
var item=CloneData(option.Option); //复制一份出来
|
|
149652
150037
|
this.Minute.Option=Object.assign(this.Minute.Option,item);
|
|
150038
|
+
|
|
150039
|
+
if (IFrameSplitOperator.IsNonEmptyArray(option.Option.EventCallback)) this.Minute.Option.EventCallback=option.Option.EventCallback;
|
|
149653
150040
|
}
|
|
149654
|
-
if (option.
|
|
150041
|
+
if (option.OnCreatedCallback) this.OnCreatedCallback=option.OnCreatedCallback;
|
|
150042
|
+
|
|
149655
150043
|
}
|
|
149656
150044
|
}
|
|
149657
150045
|
|
|
@@ -149709,7 +150097,7 @@ function JSTooltipMinuteChart()
|
|
|
149709
150097
|
|
|
149710
150098
|
this.OnCreateHQChart=function(chart)
|
|
149711
150099
|
{
|
|
149712
|
-
if (this.
|
|
150100
|
+
if (this.OnCreatedCallback) this.OnCreatedCallback(chart);
|
|
149713
150101
|
}
|
|
149714
150102
|
|
|
149715
150103
|
this.Destroy=function()
|
|
@@ -149901,7 +150289,7 @@ function JSTooltipKLineChart()
|
|
|
149901
150289
|
|
|
149902
150290
|
this.BGColor=g_JSChartResource.PopMinuteChart.BGColor;
|
|
149903
150291
|
this.BorderColor=g_JSChartResource.PopMinuteChart.BorderColor;
|
|
149904
|
-
this.
|
|
150292
|
+
this.OnCreatedCallback=null;
|
|
149905
150293
|
|
|
149906
150294
|
this.KLine=
|
|
149907
150295
|
{
|
|
@@ -149920,8 +150308,10 @@ function JSTooltipKLineChart()
|
|
|
149920
150308
|
{
|
|
149921
150309
|
var item=CloneData(option.Option); //复制一份出来
|
|
149922
150310
|
this.KLine.Option=Object.assign(this.KLine.Option,item);
|
|
150311
|
+
|
|
150312
|
+
if (IFrameSplitOperator.IsNonEmptyArray(option.Option.EventCallback)) this.KLine.Option.EventCallback=option.Option.EventCallback;
|
|
149923
150313
|
}
|
|
149924
|
-
if (option.
|
|
150314
|
+
if (option.OnCreatedCallback) this.OnCreatedCallback=option.OnCreatedCallback;
|
|
149925
150315
|
}
|
|
149926
150316
|
}
|
|
149927
150317
|
|
|
@@ -149968,7 +150358,7 @@ function JSTooltipKLineChart()
|
|
|
149968
150358
|
|
|
149969
150359
|
this.OnCreateHQChart=function(chart)
|
|
149970
150360
|
{
|
|
149971
|
-
if (this.
|
|
150361
|
+
if (this.OnCreatedCallback) this.OnCreatedCallback(chart);
|
|
149972
150362
|
}
|
|
149973
150363
|
|
|
149974
150364
|
this.Destroy=function()
|
|
@@ -150109,7 +150499,7 @@ JSTooltipKLineChart.GetKLineOption=function()
|
|
|
150109
150499
|
{
|
|
150110
150500
|
IsShowName:true, //不显示股票名称
|
|
150111
150501
|
IsShowSettingInfo:true, //不显示周期/复权
|
|
150112
|
-
|
|
150502
|
+
IsTitleShowLatestData:true,
|
|
150113
150503
|
},
|
|
150114
150504
|
|
|
150115
150505
|
Border: //边框
|
|
@@ -154773,7 +155163,7 @@ function HQChartScriptWorker()
|
|
|
154773
155163
|
|
|
154774
155164
|
|
|
154775
155165
|
|
|
154776
|
-
var HQCHART_VERSION="1.1.
|
|
155166
|
+
var HQCHART_VERSION="1.1.14541";
|
|
154777
155167
|
|
|
154778
155168
|
function PrintHQChartVersion()
|
|
154779
155169
|
{
|