hqchart 1.1.13144 → 1.1.13155
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 +246 -199
- package/package.json +1 -1
- package/src/jscommon/umychart.js +412 -32
- package/src/jscommon/umychart.scrollbar.js +19 -4
- package/src/jscommon/umychart.uniapp.h5/umychart.uniapp.h5.js +432 -37
- package/src/jscommon/umychart.version.js +1 -1
- package/src/jscommon/umychart.vue/umychart.vue.js +432 -37
package/package.json
CHANGED
package/src/jscommon/umychart.js
CHANGED
|
@@ -18590,7 +18590,34 @@ function HQTradeHScreenFrame()
|
|
|
18590
18590
|
}
|
|
18591
18591
|
}
|
|
18592
18592
|
|
|
18593
|
-
if (frame!=null)
|
|
18593
|
+
if (frame!=null)
|
|
18594
|
+
{
|
|
18595
|
+
var xValue= frame.GetYData(x);
|
|
18596
|
+
|
|
18597
|
+
if (frame.GetMainOverlayFrame)
|
|
18598
|
+
{
|
|
18599
|
+
var aryOverlayFrame=frame.GetMainOverlayFrame();
|
|
18600
|
+
if (aryOverlayFrame)
|
|
18601
|
+
{
|
|
18602
|
+
if (aryOverlayFrame[0]) //左侧
|
|
18603
|
+
{
|
|
18604
|
+
var leftFrame=aryOverlayFrame[0];
|
|
18605
|
+
var value=leftFrame.GetYData(x);
|
|
18606
|
+
outObject.RightYValue=xValue;
|
|
18607
|
+
xValue=value;
|
|
18608
|
+
}
|
|
18609
|
+
|
|
18610
|
+
if (aryOverlayFrame[1]) //右侧
|
|
18611
|
+
{
|
|
18612
|
+
var rightFrame=aryOverlayFrame[1];
|
|
18613
|
+
var value=rightFrame.GetYData(x);
|
|
18614
|
+
outObject.RightYValue=value;
|
|
18615
|
+
}
|
|
18616
|
+
}
|
|
18617
|
+
}
|
|
18618
|
+
|
|
18619
|
+
return xValue;
|
|
18620
|
+
}
|
|
18594
18621
|
}
|
|
18595
18622
|
}
|
|
18596
18623
|
|
|
@@ -24713,6 +24740,198 @@ function ChartKLine()
|
|
|
24713
24740
|
this.PtMin=ptMin;
|
|
24714
24741
|
}
|
|
24715
24742
|
|
|
24743
|
+
this.DrawKagi=function() //卡吉图
|
|
24744
|
+
{
|
|
24745
|
+
var isHScreen=(this.ChartFrame.IsHScreen===true);
|
|
24746
|
+
var dataWidth=this.ChartFrame.DataWidth;
|
|
24747
|
+
var distanceWidth=this.ChartFrame.DistanceWidth;
|
|
24748
|
+
var xPointCount=this.ChartFrame.XPointCount;
|
|
24749
|
+
|
|
24750
|
+
if (isHScreen)
|
|
24751
|
+
{
|
|
24752
|
+
var border=this.ChartBorder.GetHScreenBorder();
|
|
24753
|
+
var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
24754
|
+
var chartright=border.BottomEx;
|
|
24755
|
+
var left=border.TopEx+g_JSChartResource.FrameLeftMargin;
|
|
24756
|
+
}
|
|
24757
|
+
else
|
|
24758
|
+
{
|
|
24759
|
+
var border=this.ChartBorder.GetBorder();
|
|
24760
|
+
var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
24761
|
+
var chartright=border.RightEx;
|
|
24762
|
+
var left=border.Left+g_JSChartResource.FrameLeftMargin;
|
|
24763
|
+
}
|
|
24764
|
+
|
|
24765
|
+
var ptMax={X:null,Y:null,Value:null,Align:'left'};
|
|
24766
|
+
var ptMin={X:null,Y:null,Value:null,Align:'left'};
|
|
24767
|
+
this.ShowRange.Start=this.Data.DataOffset;
|
|
24768
|
+
this.ShowRange.End=this.ShowRange.Start;
|
|
24769
|
+
this.ShowRange.DataCount=0;
|
|
24770
|
+
this.ShowRange.ShowCount=xPointCount;
|
|
24771
|
+
this.DrawKRange.Start=this.Data.DataOffset;
|
|
24772
|
+
|
|
24773
|
+
var lineWidth=2*GetDevicePixelRatio();
|
|
24774
|
+
this.Canvas.lineWidth=lineWidth;
|
|
24775
|
+
var preItem={ Item:null, X:left, Y:null };
|
|
24776
|
+
var index=this.Data.DataOffset-1;
|
|
24777
|
+
if (index>=0 && index<this.Data.Data.length)
|
|
24778
|
+
{
|
|
24779
|
+
var item=this.Data.Data[index];
|
|
24780
|
+
preItem.Item=item;
|
|
24781
|
+
if (item.Direction==1) //上
|
|
24782
|
+
{
|
|
24783
|
+
preItem.Y=this.GetYFromData(item.High,false);
|
|
24784
|
+
}
|
|
24785
|
+
else if (item.Direction==2)
|
|
24786
|
+
{
|
|
24787
|
+
preItem.Y=this.GetYFromData(item.Low,false);
|
|
24788
|
+
}
|
|
24789
|
+
}
|
|
24790
|
+
|
|
24791
|
+
|
|
24792
|
+
for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth),++this.ShowRange.DataCount)
|
|
24793
|
+
{
|
|
24794
|
+
var data=this.Data.Data[i];
|
|
24795
|
+
this.ShowRange.End=i;
|
|
24796
|
+
if (data.Open==null || data.High==null || data.Low==null || data.Close==null) continue;
|
|
24797
|
+
|
|
24798
|
+
var left=xOffset;
|
|
24799
|
+
var right=xOffset+dataWidth;
|
|
24800
|
+
if (right>chartright) break;
|
|
24801
|
+
var x=left+(right-left)/2;
|
|
24802
|
+
var yLow=this.GetYFromData(data.Low,false);
|
|
24803
|
+
var yHigh=this.GetYFromData(data.High,false);
|
|
24804
|
+
this.DrawKRange.End=i;
|
|
24805
|
+
|
|
24806
|
+
if (ptMax.Value==null || ptMax.Value<data.High) //求最大值
|
|
24807
|
+
{
|
|
24808
|
+
ptMax.X=x;
|
|
24809
|
+
ptMax.Y=yHigh;
|
|
24810
|
+
ptMax.Value=data.High;
|
|
24811
|
+
ptMax.Align=j<xPointCount/2?'left':'right';
|
|
24812
|
+
}
|
|
24813
|
+
|
|
24814
|
+
if (ptMin.Value==null || ptMin.Value>data.Low) //求最小值
|
|
24815
|
+
{
|
|
24816
|
+
ptMin.X=x;
|
|
24817
|
+
ptMin.Y=yLow;
|
|
24818
|
+
ptMin.Value=data.Low;
|
|
24819
|
+
ptMin.Align=j<xPointCount/2?'left':'right';
|
|
24820
|
+
}
|
|
24821
|
+
|
|
24822
|
+
var xFixed=ToFixedPoint2(lineWidth,x);
|
|
24823
|
+
|
|
24824
|
+
if (preItem.Item)
|
|
24825
|
+
{
|
|
24826
|
+
this.Canvas.beginPath();
|
|
24827
|
+
var yFixed=ToFixedPoint2(lineWidth,preItem.Y);
|
|
24828
|
+
|
|
24829
|
+
this.Canvas.moveTo(preItem.X, yFixed);
|
|
24830
|
+
this.Canvas.lineTo(xFixed, yFixed);
|
|
24831
|
+
var prePrice=null;
|
|
24832
|
+
if (preItem.Item.Direction==1) prePrice=preItem.Item.Low;
|
|
24833
|
+
else if (preItem.Item.Direction==2) prePrice=preItem.Item.High;
|
|
24834
|
+
|
|
24835
|
+
if (data.Direction==1)
|
|
24836
|
+
{
|
|
24837
|
+
if (data.High<prePrice)
|
|
24838
|
+
{
|
|
24839
|
+
this.Canvas.lineTo(xFixed, yHigh);
|
|
24840
|
+
this.Canvas.strokeStyle=this.DownColor;
|
|
24841
|
+
this.Canvas.stroke();
|
|
24842
|
+
}
|
|
24843
|
+
else
|
|
24844
|
+
{
|
|
24845
|
+
var yPrePrice=this.GetYFromData(prePrice,false);
|
|
24846
|
+
this.Canvas.lineTo(xFixed, yPrePrice);
|
|
24847
|
+
this.Canvas.strokeStyle=this.DownColor;
|
|
24848
|
+
this.Canvas.stroke();
|
|
24849
|
+
|
|
24850
|
+
this.Canvas.beginPath();
|
|
24851
|
+
this.Canvas.moveTo(xFixed, yPrePrice);
|
|
24852
|
+
this.Canvas.lineTo(xFixed, yHigh);
|
|
24853
|
+
this.Canvas.strokeStyle=this.UpColor;
|
|
24854
|
+
this.Canvas.stroke();
|
|
24855
|
+
}
|
|
24856
|
+
|
|
24857
|
+
}
|
|
24858
|
+
else if (data.Direction==2)
|
|
24859
|
+
{
|
|
24860
|
+
if (data.Low>prePrice)
|
|
24861
|
+
{
|
|
24862
|
+
this.Canvas.lineTo(xFixed, yLow);
|
|
24863
|
+
this.Canvas.strokeStyle=this.DownColor; //阳线
|
|
24864
|
+
this.Canvas.stroke();
|
|
24865
|
+
}
|
|
24866
|
+
else
|
|
24867
|
+
{
|
|
24868
|
+
var yPrePrice=this.GetYFromData(prePrice,false);
|
|
24869
|
+
this.Canvas.lineTo(xFixed, yPrePrice);
|
|
24870
|
+
this.Canvas.strokeStyle=this.DownColor; //阳线
|
|
24871
|
+
this.Canvas.stroke();
|
|
24872
|
+
|
|
24873
|
+
this.Canvas.beginPath();
|
|
24874
|
+
this.Canvas.moveTo(xFixed, yPrePrice);
|
|
24875
|
+
this.Canvas.lineTo(xFixed, yLow);
|
|
24876
|
+
this.Canvas.strokeStyle=this.UpColor;
|
|
24877
|
+
this.Canvas.stroke();
|
|
24878
|
+
}
|
|
24879
|
+
}
|
|
24880
|
+
|
|
24881
|
+
}
|
|
24882
|
+
else
|
|
24883
|
+
{
|
|
24884
|
+
this.Canvas.beginPath();
|
|
24885
|
+
if (data.Direction==1)
|
|
24886
|
+
{
|
|
24887
|
+
this.Canvas.moveTo(xFixed, yLow);
|
|
24888
|
+
this.Canvas.lineTo(xFixed, yHigh);
|
|
24889
|
+
}
|
|
24890
|
+
else if (data.Direction==2)
|
|
24891
|
+
{
|
|
24892
|
+
this.Canvas.moveTo(xFixed, yHigh);
|
|
24893
|
+
this.Canvas.lineTo(xFixed, yLow);
|
|
24894
|
+
}
|
|
24895
|
+
this.Canvas.stroke();
|
|
24896
|
+
}
|
|
24897
|
+
|
|
24898
|
+
/*
|
|
24899
|
+
if (data.YClose<data.Close)
|
|
24900
|
+
{
|
|
24901
|
+
this.Canvas.strokeStyle=this.UpColor; //阳线
|
|
24902
|
+
this.Canvas.fillStyle=this.UpColor;
|
|
24903
|
+
}
|
|
24904
|
+
else if (data.YClose>data.Close)
|
|
24905
|
+
{
|
|
24906
|
+
this.Canvas.strokeStyle=this.DownColor; //阴线
|
|
24907
|
+
this.Canvas.fillStyle=this.DownColor;
|
|
24908
|
+
}
|
|
24909
|
+
|
|
24910
|
+
this.Canvas.beginPath();
|
|
24911
|
+
if (isHScreen)
|
|
24912
|
+
{
|
|
24913
|
+
this.Canvas.moveTo(yHigh,ToFixedPoint(x));
|
|
24914
|
+
this.Canvas.lineTo(yLow,ToFixedPoint(x));
|
|
24915
|
+
}
|
|
24916
|
+
else
|
|
24917
|
+
{
|
|
24918
|
+
this.Canvas.moveTo(ToFixedPoint2(lineWidth,x),yHigh);
|
|
24919
|
+
this.Canvas.lineTo(ToFixedPoint2(lineWidth,x),yLow);
|
|
24920
|
+
}
|
|
24921
|
+
this.Canvas.stroke();
|
|
24922
|
+
*/
|
|
24923
|
+
|
|
24924
|
+
preItem.Item=data;
|
|
24925
|
+
preItem.X=x;
|
|
24926
|
+
|
|
24927
|
+
if (data.Direction==1) preItem.Y=yHigh; //上
|
|
24928
|
+
else if (data.Direction==2) preItem.Y=yLow //下
|
|
24929
|
+
}
|
|
24930
|
+
|
|
24931
|
+
this.PtMax=ptMax;
|
|
24932
|
+
this.PtMin=ptMin;
|
|
24933
|
+
}
|
|
24934
|
+
|
|
24716
24935
|
this.DrawTrade=function() //交易系统
|
|
24717
24936
|
{
|
|
24718
24937
|
if (!this.TradeData) return;
|
|
@@ -25220,6 +25439,10 @@ function ChartKLine()
|
|
|
25220
25439
|
{
|
|
25221
25440
|
this.DrawHLCArea();
|
|
25222
25441
|
}
|
|
25442
|
+
else if (this.DrawType==16)
|
|
25443
|
+
{
|
|
25444
|
+
this.DrawKagi();
|
|
25445
|
+
}
|
|
25223
25446
|
else if (this.DrawType==17)
|
|
25224
25447
|
{
|
|
25225
25448
|
this.DrawOrderFlow_Style4();
|
|
@@ -48319,6 +48542,7 @@ function ChartCorssCursor()
|
|
|
48319
48542
|
|
|
48320
48543
|
this.StringFormatY.Value=yValue;
|
|
48321
48544
|
this.StringFormatY.FrameID=yValueExtend.FrameID;
|
|
48545
|
+
this.StringFormatY.RValue=yValueExtend.RightYValue; //右侧子坐标
|
|
48322
48546
|
this.StringFormatY.Point={X:x, Y:y};
|
|
48323
48547
|
this.StringFormatY.ClientPos=this.ClientPos;
|
|
48324
48548
|
|
|
@@ -49123,6 +49347,7 @@ function HQPriceStringFormat()
|
|
|
49123
49347
|
{
|
|
49124
49348
|
if (this.DataFormatType==1) this.Text=IFrameSplitOperator.FormatValueThousandsString(this.Value,defaultfloatPrecision);
|
|
49125
49349
|
else this.Text=IFrameSplitOperator.FormatValueString(this.Value,defaultfloatPrecision,this.LanguageID);
|
|
49350
|
+
if (IFrameSplitOperator.IsNumber(this.RValue)) this.RText=IFrameSplitOperator.FormatValueString(this.RValue,defaultfloatPrecision,this.LanguageID);
|
|
49126
49351
|
}
|
|
49127
49352
|
|
|
49128
49353
|
if (this.GetEventCallback)
|
|
@@ -64368,7 +64593,11 @@ function JSChartResource()
|
|
|
64368
64593
|
DateFont:`${14*GetDevicePixelRatio()}px 微软雅黑`,
|
|
64369
64594
|
DateColor:'rgb(0,0,0)',
|
|
64370
64595
|
BarColor:"rgb(207,207,207)",
|
|
64371
|
-
BarAreaColor:"rgba(232,232,232,0.65)"
|
|
64596
|
+
BarAreaColor:"rgba(232,232,232,0.65)",
|
|
64597
|
+
|
|
64598
|
+
BarWidth:10,
|
|
64599
|
+
BarPadding:15, //上下留白
|
|
64600
|
+
MinCenterWidth:15
|
|
64372
64601
|
}
|
|
64373
64602
|
},
|
|
64374
64603
|
|
|
@@ -65013,6 +65242,9 @@ function JSChartResource()
|
|
|
65013
65242
|
if (subItem.DateColor) this.ScrollBar.Slider.DateColor=subItem.DateColor;
|
|
65014
65243
|
if (subItem.BarColor) this.ScrollBar.Slider.BarColor=subItem.BarColor;
|
|
65015
65244
|
if (subItem.BarAreaColor) this.ScrollBar.Slider.BarAreaColor=subItem.BarAreaColor;
|
|
65245
|
+
if (IFrameSplitOperator.IsNumber(subItem.BarWidth)) this.ScrollBar.Slider.BarWidth=subItem.BarWidth;
|
|
65246
|
+
if (IFrameSplitOperator.IsNumber(subItem.BarPadding)) this.ScrollBar.Slider.BarPadding=subItem.BarPadding;
|
|
65247
|
+
if (IFrameSplitOperator.IsNumber(subItem.MinCenterWidth)) this.ScrollBar.Slider.MinCenterWidth=subItem.MinCenterWidth;
|
|
65016
65248
|
}
|
|
65017
65249
|
|
|
65018
65250
|
if (item.BGChart)
|
|
@@ -65760,20 +65992,24 @@ function RenkoCalculate()
|
|
|
65760
65992
|
//
|
|
65761
65993
|
function KagiCalculate()
|
|
65762
65994
|
{
|
|
65763
|
-
this.
|
|
65764
|
-
this.
|
|
65765
|
-
this.
|
|
65766
|
-
|
|
65995
|
+
this.newMethod=RenkoCalculate; //派生
|
|
65996
|
+
this.newMethod();
|
|
65997
|
+
delete this.newMethod;
|
|
65998
|
+
|
|
65999
|
+
this.ClassName="KagiCalculate";
|
|
66000
|
+
this.BrickSizeType=0;
|
|
66001
|
+
this.BrickSize=0.5; //固定大小
|
|
65767
66002
|
|
|
65768
66003
|
this.RecvHistoryData=function(sourceData, option) //历史日线数据
|
|
65769
66004
|
{
|
|
65770
66005
|
this.Symbol=option.Symbol;
|
|
65771
66006
|
this.SourceData=sourceData;
|
|
65772
66007
|
this.FloatPrecision=GetfloatPrecision(this.Symbol);
|
|
65773
|
-
|
|
66008
|
+
if (this.BrickSizeType==1) this.CalculateATR();
|
|
66009
|
+
return this.CalculateByClose(sourceData);
|
|
65774
66010
|
}
|
|
65775
66011
|
|
|
65776
|
-
this.
|
|
66012
|
+
this.CalculateByClose=function(sourceData)
|
|
65777
66013
|
{
|
|
65778
66014
|
var bindData=new ChartData();
|
|
65779
66015
|
bindData.Data=[]
|
|
@@ -65784,13 +66020,139 @@ function KagiCalculate()
|
|
|
65784
66020
|
|
|
65785
66021
|
if (!IFrameSplitOperator.IsNonEmptyArray(sourceData.Data)) return bindData;
|
|
65786
66022
|
|
|
65787
|
-
var
|
|
66023
|
+
var brickSize=this.BrickSize;
|
|
66024
|
+
if (this.BrickSizeType==1) brickSize=this.ATR.BrickSize;
|
|
65788
66025
|
|
|
65789
66026
|
var kItem=sourceData.Data[0];
|
|
65790
|
-
|
|
65791
|
-
|
|
66027
|
+
var kagiItem=HistoryData.Copy(kItem);
|
|
66028
|
+
|
|
66029
|
+
kagiItem.High=kagiItem.Low=kItem.Close;
|
|
66030
|
+
kagiItem.StartItem=kItem;
|
|
66031
|
+
kagiItem.Direction=0; //1 上 2=下
|
|
66032
|
+
|
|
66033
|
+
var T_MergeKData=function(dest, src)
|
|
66034
|
+
{
|
|
66035
|
+
dest.Vol+=src.Vol;
|
|
66036
|
+
dest.Amount+=src.Amount;
|
|
66037
|
+
}
|
|
66038
|
+
|
|
66039
|
+
var index=1;
|
|
66040
|
+
for( ;index<sourceData.Data.length;++index) //确定好方向
|
|
66041
|
+
{
|
|
66042
|
+
var kItem=sourceData.Data[index];
|
|
66043
|
+
if (kItem.Close>kagiItem.Close)
|
|
66044
|
+
{
|
|
66045
|
+
kagiItem.Direction=1;
|
|
66046
|
+
kagiItem.Close=kItem.Close;
|
|
66047
|
+
kagiItem.EndItem=kItem;
|
|
66048
|
+
kagiItem.High=kItem.Close;
|
|
66049
|
+
break;
|
|
66050
|
+
}
|
|
66051
|
+
else if (kItem.Close<kagiItem.Close)
|
|
66052
|
+
{
|
|
66053
|
+
kagiItem.Direction=2;
|
|
66054
|
+
kagiItem.Close=kItem.Close;
|
|
66055
|
+
kagiItem.EndItem=kItem;
|
|
66056
|
+
kagiItem.Low=kItem.Close;
|
|
66057
|
+
break;
|
|
66058
|
+
}
|
|
66059
|
+
}
|
|
66060
|
+
|
|
66061
|
+
var changeItem=null;
|
|
66062
|
+
for(++index; index<sourceData.Data.length;++index )
|
|
66063
|
+
{
|
|
66064
|
+
var kItem=sourceData.Data[index];
|
|
66065
|
+
if (kagiItem.Direction==1) //上
|
|
66066
|
+
{
|
|
66067
|
+
if (kItem.Close>=kagiItem.High)
|
|
66068
|
+
{
|
|
66069
|
+
kagiItem.Close=kItem.Close;
|
|
66070
|
+
kagiItem.High=kItem.Close;
|
|
66071
|
+
kagiItem.EndItem=kItem;
|
|
66072
|
+
changeItem=null;
|
|
66073
|
+
}
|
|
66074
|
+
else
|
|
66075
|
+
{
|
|
66076
|
+
if (!changeItem)
|
|
66077
|
+
{
|
|
66078
|
+
changeItem=HistoryData.Copy(kItem);
|
|
66079
|
+
changeItem.High=changeItem.Low=kItem.Close;
|
|
66080
|
+
}
|
|
66081
|
+
else
|
|
66082
|
+
{
|
|
66083
|
+
changeItem.Close=kItem.Close;
|
|
66084
|
+
if (changeItem.Low>kItem.Close) changeItem.Low=kItem.Close;
|
|
66085
|
+
}
|
|
66086
|
+
|
|
66087
|
+
if (Math.abs(changeItem.Low-kagiItem.High)>brickSize) //达到变盘点
|
|
66088
|
+
{
|
|
66089
|
+
bindData.Data.push(kagiItem);
|
|
66090
|
+
|
|
66091
|
+
var newItem=HistoryData.Copy(kItem);
|
|
66092
|
+
newItem.High=kagiItem.High;
|
|
66093
|
+
newItem.Low=kItem.Close;
|
|
66094
|
+
newItem.Direction=2; //1 上 2=下
|
|
66095
|
+
newItem.StartItem=kItem;
|
|
66096
|
+
|
|
66097
|
+
kagiItem=newItem;
|
|
66098
|
+
changeItem=null;
|
|
66099
|
+
}
|
|
66100
|
+
}
|
|
66101
|
+
}
|
|
66102
|
+
else if (kagiItem.Direction==2) //下
|
|
66103
|
+
{
|
|
66104
|
+
if (kItem.Close<=kagiItem.Low)
|
|
66105
|
+
{
|
|
66106
|
+
kagiItem.Close=kItem.Close;
|
|
66107
|
+
kagiItem.Low=kItem.Close;
|
|
66108
|
+
kagiItem.EndItem=kItem;
|
|
66109
|
+
}
|
|
66110
|
+
else
|
|
66111
|
+
{
|
|
66112
|
+
if (!changeItem)
|
|
66113
|
+
{
|
|
66114
|
+
changeItem=HistoryData.Copy(kItem);
|
|
66115
|
+
changeItem.High=changeItem.Low=kItem.Close;
|
|
66116
|
+
}
|
|
66117
|
+
else
|
|
66118
|
+
{
|
|
66119
|
+
changeItem.Close=kItem.Close;
|
|
66120
|
+
if (changeItem.High<kItem.Close) changeItem.High=kItem.Close;
|
|
66121
|
+
}
|
|
66122
|
+
|
|
66123
|
+
if (Math.abs(changeItem.High-kagiItem.Low)>brickSize) //达到变盘点
|
|
66124
|
+
{
|
|
66125
|
+
bindData.Data.push(kagiItem);
|
|
66126
|
+
|
|
66127
|
+
var newItem=HistoryData.Copy(kItem);
|
|
66128
|
+
newItem.High=kItem.Close;
|
|
66129
|
+
newItem.Low=kagiItem.Low;
|
|
66130
|
+
newItem.Direction=1; //1 上 2=下
|
|
66131
|
+
newItem.StartItem=kItem;
|
|
66132
|
+
|
|
66133
|
+
kagiItem=newItem;
|
|
66134
|
+
changeItem=null;
|
|
66135
|
+
}
|
|
66136
|
+
}
|
|
66137
|
+
}
|
|
66138
|
+
}
|
|
66139
|
+
|
|
66140
|
+
return bindData;
|
|
66141
|
+
}
|
|
66142
|
+
|
|
66143
|
+
//获取配置信息
|
|
66144
|
+
this.GetTitle=function()
|
|
66145
|
+
{
|
|
66146
|
+
if (this.BrickSizeType==1)
|
|
66147
|
+
{
|
|
66148
|
+
var text=`Kagi [ATR(${this.ATR.Count}), ${this.ATR.BrickSize}]`;
|
|
66149
|
+
}
|
|
66150
|
+
else
|
|
65792
66151
|
{
|
|
66152
|
+
var text=`Kagi [Traditional]`;
|
|
65793
66153
|
}
|
|
66154
|
+
|
|
66155
|
+
return text;
|
|
65794
66156
|
}
|
|
65795
66157
|
}
|
|
65796
66158
|
|
|
@@ -66118,8 +66480,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
66118
66480
|
this.KLineCalculate=null; //K线定制指标计算
|
|
66119
66481
|
this.KLineCalcOption=new Map(); //K线定制指标配置
|
|
66120
66482
|
|
|
66121
|
-
this.ScrollBar=null;
|
|
66122
|
-
|
|
66483
|
+
this.ScrollBar=null; //横向滚动条
|
|
66484
|
+
this.IsAutoSyncDataOffset=true; //增量更新时,是否移动当前屏数据
|
|
66123
66485
|
|
|
66124
66486
|
this.GetKLineCalulate=function()
|
|
66125
66487
|
{
|
|
@@ -67346,15 +67708,18 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
67346
67708
|
var xPointCount=this.Frame.SubFrame[0].Frame.XPointCount; //当前一屏能显示的数据个数
|
|
67347
67709
|
|
|
67348
67710
|
var newDataCount=0;
|
|
67349
|
-
if (
|
|
67711
|
+
if (IFrameSplitOperator.IsNumber(lastDataCount))
|
|
67350
67712
|
{
|
|
67351
|
-
|
|
67352
|
-
|
|
67353
|
-
|
|
67354
|
-
|
|
67355
|
-
|
|
67356
|
-
|
|
67357
|
-
|
|
67713
|
+
if (lastDataCount>0 && hisData.Data.length>lastDataCount)
|
|
67714
|
+
{
|
|
67715
|
+
newDataCount=hisData.Data.length-lastDataCount;
|
|
67716
|
+
JSConsole.Chart.Log(`[KLineChartContainer::UpdateMainData] [count=${lastDataCount}->${hisData.Data.length}], [newDataCount=${newDataCount}], [Pagesize=${xPointCount}]`);
|
|
67717
|
+
}
|
|
67718
|
+
else if (lastDataCount==0 && hisData.Data.length>xPointCount) //历史数据为空,当前收到数据大于一屏的数据,显示最新数据
|
|
67719
|
+
{
|
|
67720
|
+
newDataCount=hisData.Data.length-xPointCount;
|
|
67721
|
+
JSConsole.Chart.Log(`[KLineChartContainer::UpdateMainData] history data is empty. [count=${lastDataCount}->${hisData.Data.length}], [newDataCount=${newDataCount}], [Pagesize=${xPointCount}]`);
|
|
67722
|
+
}
|
|
67358
67723
|
}
|
|
67359
67724
|
|
|
67360
67725
|
this.ChartPaint[0].Data=hisData;
|
|
@@ -68746,7 +69111,9 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
68746
69111
|
if (!this.SourceData) return;
|
|
68747
69112
|
if (!this.SourceData.MergeMinuteData(aryMinuteData)) return;
|
|
68748
69113
|
|
|
68749
|
-
JSConsole.Chart.Log(`[KLineChartContainer::RecvMinuteRealtimeDataV2] update kline by 1 minute data [${lastDataCount}->${this.SourceData.Data.length}]`);
|
|
69114
|
+
JSConsole.Chart.Log(`[KLineChartContainer::RecvMinuteRealtimeDataV2] update kline by 1 minute data [${lastDataCount}->${this.SourceData.Data.length}], IsAutoSyncDataOffset=${this.IsAutoSyncDataOffset}`);
|
|
69115
|
+
|
|
69116
|
+
if (this.IsAutoSyncDataOffset===false) lastDataCount=null; //维持当前的屏位置
|
|
68750
69117
|
|
|
68751
69118
|
var bindData=new ChartData();
|
|
68752
69119
|
bindData.Data=this.SourceData.Data;
|
|
@@ -69398,12 +69765,17 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
69398
69765
|
//删除某一个窗口的指标, bCallDestory=是否调用图形销毁函数
|
|
69399
69766
|
this.DeleteIndexPaint=function(windowIndex, bCallDestroy)
|
|
69400
69767
|
{
|
|
69401
|
-
|
|
69402
|
-
|
|
69768
|
+
if (!this.Frame.SubFrame[windowIndex]) return;
|
|
69769
|
+
var subFrame=this.Frame.SubFrame[windowIndex].Frame;
|
|
69770
|
+
if (!subFrame) return;
|
|
69771
|
+
|
|
69772
|
+
var paint=[]; //踢出当前窗口的指标画法
|
|
69773
|
+
for(var i=0;i<this.ChartPaint.length; ++i)
|
|
69403
69774
|
{
|
|
69404
|
-
|
|
69775
|
+
var item=this.ChartPaint[i];
|
|
69776
|
+
var bFind=(item.ChartFrame.Guid==subFrame.Guid || item.ChartFrame==subFrame);
|
|
69405
69777
|
|
|
69406
|
-
if (i==0 ||
|
|
69778
|
+
if (i==0 || !bFind)
|
|
69407
69779
|
{
|
|
69408
69780
|
paint.push(item);
|
|
69409
69781
|
}
|
|
@@ -69416,7 +69788,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
69416
69788
|
}
|
|
69417
69789
|
}
|
|
69418
69790
|
|
|
69419
|
-
|
|
69791
|
+
|
|
69420
69792
|
subFrame.YSpecificMaxMin=null; //清空指定最大最小值
|
|
69421
69793
|
subFrame.IsLocked=false; //解除上锁
|
|
69422
69794
|
subFrame.YSplitScale = null; //清空固定刻度
|
|
@@ -75150,6 +75522,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
75150
75522
|
}
|
|
75151
75523
|
|
|
75152
75524
|
var subFrame=new SubFrameItem();
|
|
75525
|
+
frame.FrameData.SubFrameItem=subFrame;
|
|
75153
75526
|
subFrame.Frame=frame;
|
|
75154
75527
|
if (i==0)
|
|
75155
75528
|
subFrame.Height=20;
|
|
@@ -75236,6 +75609,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
75236
75609
|
}
|
|
75237
75610
|
|
|
75238
75611
|
var subFrame=new SubFrameItem();
|
|
75612
|
+
frame.FrameData.SubFrameItem=subFrame;
|
|
75239
75613
|
subFrame.Frame=frame;
|
|
75240
75614
|
subFrame.Height=10;
|
|
75241
75615
|
|
|
@@ -75307,12 +75681,16 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
75307
75681
|
//删除某一个窗口的指标
|
|
75308
75682
|
this.DeleteIndexPaint=function(windowIndex,bCallDestroy)
|
|
75309
75683
|
{
|
|
75310
|
-
|
|
75311
|
-
|
|
75684
|
+
var subFrame=this.Frame.SubFrame[windowIndex].Frame;
|
|
75685
|
+
if (!subFrame) return;
|
|
75686
|
+
|
|
75687
|
+
var paint=[]; //踢出当前窗口的指标画法
|
|
75688
|
+
for(var i=0;i<this.ChartPaint.length;++i)
|
|
75312
75689
|
{
|
|
75313
|
-
|
|
75690
|
+
var item=this.ChartPaint[i];
|
|
75691
|
+
var bFind=(item.ChartFrame.Guid==subFrame.Guid || item.ChartFrame==subFrame);
|
|
75314
75692
|
|
|
75315
|
-
if (i==0 ||
|
|
75693
|
+
if (i==0 || !bFind)
|
|
75316
75694
|
{
|
|
75317
75695
|
paint.push(item);
|
|
75318
75696
|
}
|
|
@@ -75326,7 +75704,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
75326
75704
|
}
|
|
75327
75705
|
|
|
75328
75706
|
//清空指定最大最小值
|
|
75329
|
-
|
|
75707
|
+
|
|
75330
75708
|
subFrame.YSpecificMaxMin=null;
|
|
75331
75709
|
subFrame.IsLocked=false; //解除上锁
|
|
75332
75710
|
subFrame.YSplitOperator.SplitType=subFrame.YSplitOperator.DefaultSplitType; //还原Y坐标分割模式
|
|
@@ -80649,6 +81027,7 @@ function KLineChartHScreenContainer(uielement)
|
|
|
80649
81027
|
}
|
|
80650
81028
|
|
|
80651
81029
|
var subFrame=new SubFrameItem();
|
|
81030
|
+
frame.FrameData.SubFrameItem=subFrame;
|
|
80652
81031
|
subFrame.Frame=frame;
|
|
80653
81032
|
if (i==0)
|
|
80654
81033
|
subFrame.Height=20;
|
|
@@ -80793,6 +81172,7 @@ function MinuteChartHScreenContainer(uielement)
|
|
|
80793
81172
|
}
|
|
80794
81173
|
|
|
80795
81174
|
var subFrame=new SubFrameItem();
|
|
81175
|
+
frame.FrameData.SubFrameItem=subFrame;
|
|
80796
81176
|
subFrame.Frame=frame;
|
|
80797
81177
|
if (i==0)
|
|
80798
81178
|
subFrame.Height=20;
|
|
@@ -462,11 +462,11 @@ function JSScrollBarChartContainer(uielement)
|
|
|
462
462
|
switch(item.Data.Type)
|
|
463
463
|
{
|
|
464
464
|
case 0:
|
|
465
|
-
mouseStatus={ Cursor:"
|
|
465
|
+
mouseStatus={ Cursor:"grab", Name:"SliderChart"};
|
|
466
466
|
break;
|
|
467
467
|
case 1:
|
|
468
468
|
case 2:
|
|
469
|
-
mouseStatus={ Cursor:"
|
|
469
|
+
mouseStatus={ Cursor:"col-resize", Name:"SliderChart"};
|
|
470
470
|
break;
|
|
471
471
|
}
|
|
472
472
|
}
|
|
@@ -536,6 +536,10 @@ function JSScrollBarChartContainer(uielement)
|
|
|
536
536
|
{
|
|
537
537
|
xStart=pageRange.First.XStart;
|
|
538
538
|
}
|
|
539
|
+
else if (xStart>=right)
|
|
540
|
+
{
|
|
541
|
+
xStart=pageRange.Last.XEnd;
|
|
542
|
+
}
|
|
539
543
|
|
|
540
544
|
this.SliderChart.XStart=xStart;
|
|
541
545
|
}
|
|
@@ -545,6 +549,10 @@ function JSScrollBarChartContainer(uielement)
|
|
|
545
549
|
{
|
|
546
550
|
xEnd=pageRange.Last.XEnd;
|
|
547
551
|
}
|
|
552
|
+
else if (xEnd<=left)
|
|
553
|
+
{
|
|
554
|
+
xEnd=pageRange.First.XStart;
|
|
555
|
+
}
|
|
548
556
|
|
|
549
557
|
this.SliderChart.XEnd=xEnd;
|
|
550
558
|
}
|
|
@@ -1089,8 +1097,9 @@ function SliderChart()
|
|
|
1089
1097
|
this.Color=g_JSChartResource.ScrollBar.Slider.BarAreaColor;
|
|
1090
1098
|
|
|
1091
1099
|
this.BarColor=g_JSChartResource.ScrollBar.Slider.BarColor;
|
|
1092
|
-
this.BarWidth=
|
|
1093
|
-
this.BarPadding=
|
|
1100
|
+
this.BarWidth=g_JSChartResource.ScrollBar.Slider.BarWidth;
|
|
1101
|
+
this.BarPadding=g_JSChartResource.ScrollBar.Slider.BarPadding; //上下留白
|
|
1102
|
+
this.MinCenterWidth=g_JSChartResource.ScrollBar.Slider.MinCenterWidth;
|
|
1094
1103
|
|
|
1095
1104
|
this.DateFont=g_JSChartResource.ScrollBar.Slider.DateFont;
|
|
1096
1105
|
this.DateColor=g_JSChartResource.ScrollBar.Slider.DateColor;
|
|
@@ -1150,6 +1159,12 @@ function SliderChart()
|
|
|
1150
1159
|
var rtBar={ Left:Math.min(xStart,xEnd), Top:top, Width:Math.abs(xEnd-xStart), Height: bottom-top};
|
|
1151
1160
|
rtBar.Right=rtBar.Left+rtBar.Width;
|
|
1152
1161
|
rtBar.Bottom=rtBar.Top+rtBar.Height;
|
|
1162
|
+
if (rtBar.Width<this.MinCenterWidth)
|
|
1163
|
+
{
|
|
1164
|
+
rtBar.Left-=(this.MinCenterWidth-rtBar.Width)/2;
|
|
1165
|
+
rtBar.Width=this.MinCenterWidth;
|
|
1166
|
+
rtBar.Right=rtBar.Left+rtBar.Width;
|
|
1167
|
+
}
|
|
1153
1168
|
this.Canvas.fillRect(rtBar.Left, rtBar.Top, rtBar.Width, rtBar.Height);
|
|
1154
1169
|
this.AryRect.push({ Rect:rtBar, Type:0});
|
|
1155
1170
|
|