hqchart 1.1.12542 → 1.1.12553
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 +39 -25
- package/package.json +1 -1
- package/src/jscommon/umychart.js +355 -7
- package/src/jscommon/umychart.uniapp.h5/umychart.uniapp.h5.js +355 -7
- package/src/jscommon/umychart.vue/umychart.vue.js +355 -7
- package/src/jscommon/umychart.wechat/umychart.index.data.wechat.js +1 -1
- package/src/jscommon/umychart.wechat/umychart.version.wechat.js +1 -1
- package/src/jscommon/umychart.wechat/umychart.wechat.3.0.js +13 -1
package/src/jscommon/umychart.js
CHANGED
|
@@ -931,6 +931,9 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
|
|
|
931
931
|
|
|
932
932
|
if (item.TopSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.TopSpace=item.TopSpace;
|
|
933
933
|
if (item.BottomSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.BottomSpace=item.BottomSpace;
|
|
934
|
+
|
|
935
|
+
//是否显示关闭集合竞价按钮
|
|
936
|
+
if (IFrameSplitOperator.IsNumber(item.CloseBeforeButton)) chart.Frame.SubFrame[i].Frame.IsShowCloseButton=item.CloseBeforeButton;
|
|
934
937
|
}
|
|
935
938
|
|
|
936
939
|
chart.UpdateXShowText();
|
|
@@ -20340,7 +20343,7 @@ function ChartData()
|
|
|
20340
20343
|
|
|
20341
20344
|
var result=[ {Name:"Date", Data:aryDate} ];
|
|
20342
20345
|
|
|
20343
|
-
if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period))
|
|
20346
|
+
if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period) || ChartData.IsMilliSecondPeriod(this.Period))
|
|
20344
20347
|
result.push({ Name:"Time", Data:aryTime} );
|
|
20345
20348
|
|
|
20346
20349
|
result.push
|
|
@@ -20507,6 +20510,14 @@ ChartData.IsSecondPeriod=function(period)
|
|
|
20507
20510
|
return false;
|
|
20508
20511
|
}
|
|
20509
20512
|
|
|
20513
|
+
var CUSTOM_MILLISECOND_PERIOD_START=50000, CUSTOM_MILLISECOND_PERIOD_END=60000;
|
|
20514
|
+
ChartData.IsMilliSecondPeriod=function(period)
|
|
20515
|
+
{
|
|
20516
|
+
if (period>CUSTOM_MILLISECOND_PERIOD_START && period<=CUSTOM_MILLISECOND_PERIOD_END) return true;
|
|
20517
|
+
return false;
|
|
20518
|
+
}
|
|
20519
|
+
|
|
20520
|
+
|
|
20510
20521
|
|
|
20511
20522
|
//是否是分笔图 10=分笔
|
|
20512
20523
|
ChartData.IsTickPeriod=function(period)
|
|
@@ -37763,6 +37774,11 @@ function KLineTooltipPaint()
|
|
|
37763
37774
|
text=IFrameSplitOperator.FormatTimeString(item.Time,'HH:MM:SS');
|
|
37764
37775
|
aryText.push({ Text:text, Color:this.DateTimeColor });
|
|
37765
37776
|
}
|
|
37777
|
+
else if (ChartData.IsMilliSecondPeriod(period) && IFrameSplitOperator.IsNumber(item.Time))
|
|
37778
|
+
{
|
|
37779
|
+
text=IFrameSplitOperator.FormatTimeString(item.Time,'HH:MM:SS.fff');
|
|
37780
|
+
aryText.push({ Text:text, Color:this.DateTimeColor });
|
|
37781
|
+
}
|
|
37766
37782
|
|
|
37767
37783
|
if (IFrameSplitOperator.IsNumber(item.Open)) //开盘
|
|
37768
37784
|
{
|
|
@@ -40043,6 +40059,7 @@ function RectSelectPaint()
|
|
|
40043
40059
|
if (ChartData.IsDayPeriod(period, true)) return value.Date; //YYYYMMDD
|
|
40044
40060
|
else if (ChartData.IsMinutePeriod(period, true)) return value.Date*10000+value.Time; //YYYYMMDDHHMM
|
|
40045
40061
|
else if (ChartData.IsSecondPeriod(period) || ChartData.IsTickPeriod(period)) return value.Date*1000000+value.Time; //YYYYMMDDHHMMSS
|
|
40062
|
+
else if (ChartData.IsMilliSecondPeriod(period) ) return value.Date*1000000000+value.Time; //YYYYMMDDHHMMSSFFF
|
|
40046
40063
|
}
|
|
40047
40064
|
|
|
40048
40065
|
return null;
|
|
@@ -44023,6 +44040,44 @@ function FrameSplitKLineX()
|
|
|
44023
44040
|
}
|
|
44024
44041
|
}
|
|
44025
44042
|
|
|
44043
|
+
this.SplitMilliSecond=function()
|
|
44044
|
+
{
|
|
44045
|
+
this.Frame.VerticalInfo=[];
|
|
44046
|
+
var itemWidth=this.Frame.DistanceWidth+this.Frame.DataWidth;
|
|
44047
|
+
var xOffset=this.Frame.Data.DataOffset;
|
|
44048
|
+
var xPointCount=this.Frame.XPointCount;
|
|
44049
|
+
var textDistance=0;
|
|
44050
|
+
var barDistance=0;
|
|
44051
|
+
|
|
44052
|
+
for(var i=0, index=xOffset; i<xPointCount && index<this.Frame.Data.Data.length; ++i,++index)
|
|
44053
|
+
{
|
|
44054
|
+
textDistance+=itemWidth;
|
|
44055
|
+
++barDistance;
|
|
44056
|
+
var infoData=null;
|
|
44057
|
+
if (i==0)
|
|
44058
|
+
{
|
|
44059
|
+
var date=IFrameSplitOperator.FormatDateString(this.Frame.Data.Data[index].Date,'HH:MM:SS.fff');
|
|
44060
|
+
infoData={Value:index-xOffset, Text:date};
|
|
44061
|
+
}
|
|
44062
|
+
else if (textDistance>this.MinTextDistance && barDistance>=this.MinBarDistance)
|
|
44063
|
+
{
|
|
44064
|
+
var time=IFrameSplitOperator.FormatTimeString(this.Frame.Data.Data[index].Time,"HH:MM:SS.fff");
|
|
44065
|
+
infoData={Value:index-xOffset, Text:time};
|
|
44066
|
+
}
|
|
44067
|
+
|
|
44068
|
+
if (infoData)
|
|
44069
|
+
{
|
|
44070
|
+
var info= new CoordinateInfo();
|
|
44071
|
+
info.Value=infoData.Value;
|
|
44072
|
+
if (this.ShowText) info.Message[0]=infoData.Text;
|
|
44073
|
+
this.Frame.VerticalInfo.push(info);
|
|
44074
|
+
textDistance=0;
|
|
44075
|
+
barDistance=0;
|
|
44076
|
+
if (i==0) textDistance=-(this.MinTextDistance/2);
|
|
44077
|
+
}
|
|
44078
|
+
}
|
|
44079
|
+
}
|
|
44080
|
+
|
|
44026
44081
|
this.SplitDate=function() //根据日期分割
|
|
44027
44082
|
{
|
|
44028
44083
|
this.Frame.VerticalInfo=[];
|
|
@@ -44130,6 +44185,7 @@ function FrameSplitKLineX()
|
|
|
44130
44185
|
else if (ChartData.IsMinutePeriod(this.Period, true)) this.SplitDateTime();
|
|
44131
44186
|
else if (ChartData.IsSecondPeriod(this.Period)) this.SplitSecond();
|
|
44132
44187
|
else if (ChartData.IsTickPeriod(this.Period)) this.SplitSecond();
|
|
44188
|
+
else if (ChartData.IsMilliSecondPeriod(this.Period)) this.SplitMilliSecond();
|
|
44133
44189
|
else this.SplitDate();
|
|
44134
44190
|
|
|
44135
44191
|
if (this.GetEventCallback)
|
|
@@ -46947,6 +47003,11 @@ function HQDateStringFormat()
|
|
|
46947
47003
|
var time = IFrameSplitOperator.FormatTimeString(currentData.Time,'HH:MM:SS');
|
|
46948
47004
|
this.Text = this.Text + " " + time;
|
|
46949
47005
|
}
|
|
47006
|
+
else if (ChartData.IsMilliSecondPeriod(this.Data.Period))
|
|
47007
|
+
{
|
|
47008
|
+
var time = IFrameSplitOperator.FormatTimeString(currentData.Time,'HH:MM:SS.fff');
|
|
47009
|
+
this.Text = this.Text + " " + time;
|
|
47010
|
+
}
|
|
46950
47011
|
else if (ChartData.IsTickPeriod(this.Data.Period)) //分笔
|
|
46951
47012
|
{
|
|
46952
47013
|
var time = IFrameSplitOperator.FormatTimeString(currentData.Time);
|
|
@@ -48020,6 +48081,8 @@ function DynamicKLineTitlePainting()
|
|
|
48020
48081
|
periodName=(this.Data.Period-CUSTOM_DAY_PERIOD_START)+g_JSChartLocalization.GetText('自定义日线',this.LanguageID);
|
|
48021
48082
|
else if (this.Data.Period>CUSTOM_SECOND_PERIOD_START && this.Data.Period<=CUSTOM_SECOND_PERIOD_END)
|
|
48022
48083
|
periodName=(this.Data.Period-CUSTOM_SECOND_PERIOD_START)+g_JSChartLocalization.GetText('自定义秒',this.LanguageID);
|
|
48084
|
+
else if (this.Data.Period>CUSTOM_MILLISECOND_PERIOD_START&& this.Data.Period<=CUSTOM_MILLISECOND_PERIOD_END)
|
|
48085
|
+
periodName=(this.Data.Period-CUSTOM_MILLISECOND_PERIOD_START)+g_JSChartLocalization.GetText('自定义毫秒',this.LanguageID);
|
|
48023
48086
|
else
|
|
48024
48087
|
periodName=g_JSChartLocalization.GetText(ChartData.GetPeriodName(this.Data.Period),this.LanguageID);
|
|
48025
48088
|
var rightName=g_JSChartLocalization.GetText(RIGHT_NAME[this.Data.Right],this.LanguageID);
|
|
@@ -48049,6 +48112,11 @@ function DynamicKLineTitlePainting()
|
|
|
48049
48112
|
var text=IFrameSplitOperator.FormatTimeString(item.Time, "HH:MM:SS");
|
|
48050
48113
|
aryText.push({ Text:text, Color:this.DateTimeColor });
|
|
48051
48114
|
}
|
|
48115
|
+
else if (ChartData.IsMilliSecondPeriod(this.Period) && IFrameSplitOperator.IsNumber(item.Time))
|
|
48116
|
+
{
|
|
48117
|
+
var text=IFrameSplitOperator.FormatTimeString(item.Time, "HH:MM:SS.fff");
|
|
48118
|
+
aryText.push({ Text:text, Color:this.DateTimeColor });
|
|
48119
|
+
}
|
|
48052
48120
|
else if (isTickPeriod)
|
|
48053
48121
|
{
|
|
48054
48122
|
var text=IFrameSplitOperator.FormatTimeString(item.Time, "HH:MM:SS");
|
|
@@ -51324,6 +51392,32 @@ function IChartDrawPicture()
|
|
|
51324
51392
|
this.Canvas.restore();
|
|
51325
51393
|
}
|
|
51326
51394
|
|
|
51395
|
+
this.DrawArrow=function(ptStart,ptEnd)
|
|
51396
|
+
{
|
|
51397
|
+
//计算箭头
|
|
51398
|
+
var theta=35; //三角斜边一直线夹角
|
|
51399
|
+
var headlen=10; //三角斜边长度
|
|
51400
|
+
var angle = Math.atan2(ptStart.Y - ptEnd.Y, ptStart.X - ptEnd.X) * 180 / Math.PI,
|
|
51401
|
+
angle1 = (angle + theta) * Math.PI / 180,
|
|
51402
|
+
angle2 = (angle - theta) * Math.PI / 180,
|
|
51403
|
+
topX = headlen * Math.cos(angle1),
|
|
51404
|
+
topY = headlen * Math.sin(angle1),
|
|
51405
|
+
botX = headlen * Math.cos(angle2),
|
|
51406
|
+
botY = headlen * Math.sin(angle2);
|
|
51407
|
+
|
|
51408
|
+
this.Canvas.beginPath();
|
|
51409
|
+
var arrowX = ptEnd.X + topX;
|
|
51410
|
+
var arrowY = ptEnd.Y + topY;
|
|
51411
|
+
this.Canvas.moveTo(arrowX,arrowY);
|
|
51412
|
+
|
|
51413
|
+
this.Canvas.lineTo(ptEnd.X, ptEnd.Y);
|
|
51414
|
+
|
|
51415
|
+
arrowX = ptEnd.X + botX;
|
|
51416
|
+
arrowY = ptEnd.Y + botY;
|
|
51417
|
+
this.Canvas.lineTo(arrowX,arrowY);
|
|
51418
|
+
this.Canvas.stroke();
|
|
51419
|
+
}
|
|
51420
|
+
|
|
51327
51421
|
//计算2个点线的,左右的延长线的点
|
|
51328
51422
|
this.CalculateExtendLinePoint=function(ptStart,ptEnd)
|
|
51329
51423
|
{
|
|
@@ -52038,7 +52132,9 @@ IChartDrawPicture.ArrayDrawPricture=
|
|
|
52038
52132
|
{ Name:"PriceNote", ClassName:"ChartDrawPriceNote", Create:function() { return new ChartDrawPriceNote();} },
|
|
52039
52133
|
{ Name:"FibWedge", ClassName:"ChartDrawFibWedge", Create:function(){ return new ChartDrawFibWedge(); }},
|
|
52040
52134
|
{ Name:"FibRetracement", ClassName:"ChartFibRetracement", Create:function() { return new ChartFibRetracement(); }}, //斐波那契回测
|
|
52041
|
-
{ Name:"FibSpeedResistanceFan", ClassName:"ChartFibSpeedResistanceFan", Create:function() { return new ChartFibSpeedResistanceFan(); }} //斐波那契扇形
|
|
52135
|
+
{ Name:"FibSpeedResistanceFan", ClassName:"ChartFibSpeedResistanceFan", Create:function() { return new ChartFibSpeedResistanceFan(); }}, //斐波那契扇形
|
|
52136
|
+
{ Name:"PriceRange", ClassName:"ChartPriceRange", Create:function() { return new ChartPriceRange(); }},
|
|
52137
|
+
{ Name:"DateRange", ClassName:"ChartDateRange", Create:function() { return new ChartDateRange(); }}
|
|
52042
52138
|
];
|
|
52043
52139
|
|
|
52044
52140
|
IChartDrawPicture.MapIonFont=new Map(
|
|
@@ -60047,6 +60143,239 @@ function ChartFibSpeedResistanceFan()
|
|
|
60047
60143
|
|
|
60048
60144
|
}
|
|
60049
60145
|
|
|
60146
|
+
|
|
60147
|
+
function ChartPriceRange()
|
|
60148
|
+
{
|
|
60149
|
+
this.newMethod=IChartDrawPicture; //派生
|
|
60150
|
+
this.newMethod();
|
|
60151
|
+
delete this.newMethod;
|
|
60152
|
+
|
|
60153
|
+
this.ClassName='ChartPriceRange';
|
|
60154
|
+
this.PointCount=2;
|
|
60155
|
+
this.Font=12*GetDevicePixelRatio() +"px 微软雅黑";
|
|
60156
|
+
this.TextColor=this.LineColor;
|
|
60157
|
+
this.IsPointIn=this.IsPointIn_XYValue_Line;
|
|
60158
|
+
this.GetXYCoordinate=this.GetXYCoordinate_default;
|
|
60159
|
+
this.PointToValue_Default=this.PointToValue;
|
|
60160
|
+
this.OnlyMoveXIndex=true;
|
|
60161
|
+
this.IsSupportMagnet=true;
|
|
60162
|
+
this.LineWidth=1;
|
|
60163
|
+
this.EnableBGColor=true;
|
|
60164
|
+
this.BGColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.15);
|
|
60165
|
+
this.ExtendLine={ Left:false, Right: false }; //延长线
|
|
60166
|
+
|
|
60167
|
+
this.Label={ TextColor:"rgb(0,0,0)", BGColor:"rgb(211,211,211)", EnableBGColor:true, LeftMargin:5, RightMargin:5 };
|
|
60168
|
+
|
|
60169
|
+
this.Draw=function()
|
|
60170
|
+
{
|
|
60171
|
+
this.LinePoint=[];
|
|
60172
|
+
if (this.IsFrameMinSize()) return;
|
|
60173
|
+
var bCheckXY=true;
|
|
60174
|
+
if (this.ExtendLine.Left || this.ExtendLine.Right) bCheckXY=false;
|
|
60175
|
+
var drawPoint=this.CalculateDrawPoint( {IsCheckX:bCheckXY, IsCheckY:bCheckXY} );
|
|
60176
|
+
if (!drawPoint) return;
|
|
60177
|
+
if (drawPoint.length!=2) return;
|
|
60178
|
+
|
|
60179
|
+
this.ClipFrame();
|
|
60180
|
+
|
|
60181
|
+
var ptStart=drawPoint[0];
|
|
60182
|
+
var ptEnd=drawPoint[1];
|
|
60183
|
+
|
|
60184
|
+
this.SetLineWidth();
|
|
60185
|
+
this.DrawRange(ptStart,ptEnd);
|
|
60186
|
+
this.RestoreLineWidth();
|
|
60187
|
+
|
|
60188
|
+
this.DrawPoint(drawPoint); //画点
|
|
60189
|
+
this.Canvas.restore();
|
|
60190
|
+
}
|
|
60191
|
+
|
|
60192
|
+
this.DrawRange=function(ptStart, ptEnd)
|
|
60193
|
+
{
|
|
60194
|
+
var yTop=Math.min(ptStart.Y, ptEnd.Y);
|
|
60195
|
+
var yBottom=Math.max(ptStart.Y, ptEnd.Y);
|
|
60196
|
+
var xLeft=Math.min(ptStart.X, ptEnd.X);
|
|
60197
|
+
var xRight=Math.max(ptStart.X, ptEnd.X);
|
|
60198
|
+
var height=yBottom-yTop;
|
|
60199
|
+
var xCenter=ptStart.X+(ptEnd.X-ptStart.X)/2;
|
|
60200
|
+
|
|
60201
|
+
if (this.ExtendLine.Right) xRight=this.Frame.ChartBorder.GetRight();
|
|
60202
|
+
if (this.ExtendLine.Left) xLeft=this.Frame.ChartBorder.GetLeft();
|
|
60203
|
+
|
|
60204
|
+
if (this.EnableBGColor)
|
|
60205
|
+
{
|
|
60206
|
+
var rtBG={ Left:xLeft, Top:yTop, Right:xRight, Bottom:yBottom };
|
|
60207
|
+
rtBG.Width=rtBG.Right-rtBG.Left;
|
|
60208
|
+
rtBG.Height=rtBG.Bottom-rtBG.Top;
|
|
60209
|
+
this.Canvas.fillStyle=this.BGColor;
|
|
60210
|
+
this.Canvas.fillRect(rtBG.Left, rtBG.Top, rtBG.Width, rtBG.Height);
|
|
60211
|
+
}
|
|
60212
|
+
|
|
60213
|
+
|
|
60214
|
+
this.Canvas.strokeStyle=this.LineColor;
|
|
60215
|
+
this.Canvas.beginPath();
|
|
60216
|
+
this.Canvas.moveTo(xLeft,ToFixedPoint(yTop));
|
|
60217
|
+
this.Canvas.lineTo(xRight,ToFixedPoint(yTop));
|
|
60218
|
+
|
|
60219
|
+
this.Canvas.moveTo(xLeft,ToFixedPoint(yBottom));
|
|
60220
|
+
this.Canvas.lineTo(xRight,ToFixedPoint(yBottom));
|
|
60221
|
+
|
|
60222
|
+
this.Canvas.moveTo(ToFixedPoint(xCenter),ToFixedPoint(yTop));
|
|
60223
|
+
this.Canvas.lineTo(ToFixedPoint(xCenter),ToFixedPoint(yBottom));
|
|
60224
|
+
this.Canvas.stroke();
|
|
60225
|
+
|
|
60226
|
+
this.LinePoint.push({ Start:{X:xLeft, Y:yTop}, End:{X:xRight, Y:yTop} });
|
|
60227
|
+
this.LinePoint.push({ Start:{X:xLeft, Y:yBottom}, End:{X:xRight, Y:yBottom} });
|
|
60228
|
+
this.LinePoint.push({ Start:{X:xCenter, Y:yTop}, End:{X:xCenter, Y:yBottom} });
|
|
60229
|
+
|
|
60230
|
+
this.DrawArrow({X:ToFixedPoint(xCenter), Y:ptStart.Y}, {X:ToFixedPoint(xCenter), Y:ptEnd.Y});
|
|
60231
|
+
|
|
60232
|
+
//文字输出
|
|
60233
|
+
var startValue=this.Frame.GetYData(ptStart.Y,false);
|
|
60234
|
+
var endValue=this.Frame.GetYData(ptEnd.Y,false);
|
|
60235
|
+
var diffValue=endValue-startValue;
|
|
60236
|
+
var rate=(diffValue/startValue)*100;
|
|
60237
|
+
var text=`${diffValue.toFixed(2)} (${rate.toFixed(2)}%)`;
|
|
60238
|
+
|
|
60239
|
+
this.Canvas.font=this.Font;
|
|
60240
|
+
var textHeight=this.GetFontHeight();
|
|
60241
|
+
var textWidth=this.Canvas.measureText(text).width+4+(this.Label.LeftMargin+this.Label.RightMargin);
|
|
60242
|
+
var rtTextBG={ Left:xCenter-textWidth/2, Width:textWidth, Height:textHeight+2 };
|
|
60243
|
+
if (diffValue>0) rtTextBG.Top=ptEnd.Y-rtTextBG.Height-4;
|
|
60244
|
+
else rtTextBG.Top=ptEnd.Y+4;
|
|
60245
|
+
rtTextBG.Bottom=rtTextBG.Top+rtTextBG.Height;
|
|
60246
|
+
|
|
60247
|
+
if (this.Label.EnableBGColor)
|
|
60248
|
+
{
|
|
60249
|
+
var path=new Path2D();
|
|
60250
|
+
path.roundRect(ToFixedPoint(rtTextBG.Left), ToFixedPoint(rtTextBG.Top), ToFixedRect(rtTextBG.Width), ToFixedRect(rtTextBG.Height), [3]);
|
|
60251
|
+
this.Canvas.fillStyle=this.Label.BGColor;
|
|
60252
|
+
this.Canvas.fill(path);
|
|
60253
|
+
}
|
|
60254
|
+
|
|
60255
|
+
this.Canvas.fillStyle=this.Label.TextColor;
|
|
60256
|
+
this.Canvas.textAlign="left";
|
|
60257
|
+
this.Canvas.textBaseline="bottom";
|
|
60258
|
+
this.Canvas.fillText(text,rtTextBG.Left+2+this.Label.LeftMargin,rtTextBG.Bottom-2);
|
|
60259
|
+
}
|
|
60260
|
+
|
|
60261
|
+
}
|
|
60262
|
+
|
|
60263
|
+
|
|
60264
|
+
function ChartDateRange()
|
|
60265
|
+
{
|
|
60266
|
+
this.newMethod=IChartDrawPicture; //派生
|
|
60267
|
+
this.newMethod();
|
|
60268
|
+
delete this.newMethod;
|
|
60269
|
+
|
|
60270
|
+
this.ClassName='ChartDateRange';
|
|
60271
|
+
this.PointCount=2;
|
|
60272
|
+
this.Font=12*GetDevicePixelRatio() +"px 微软雅黑";
|
|
60273
|
+
this.TextColor=this.LineColor;
|
|
60274
|
+
this.IsPointIn=this.IsPointIn_XYValue_Line;
|
|
60275
|
+
this.GetXYCoordinate=this.GetXYCoordinate_default;
|
|
60276
|
+
this.PointToValue_Default=this.PointToValue;
|
|
60277
|
+
this.OnlyMoveXIndex=true;
|
|
60278
|
+
this.IsSupportMagnet=true;
|
|
60279
|
+
this.LineWidth=1;
|
|
60280
|
+
this.EnableBGColor=true;
|
|
60281
|
+
this.BGColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.15);
|
|
60282
|
+
this.ExtendLine={ Top:false, Bottom: false }; //延长线
|
|
60283
|
+
|
|
60284
|
+
this.Label={ TextColor:"rgb(0,0,0)", BGColor:"rgb(211,211,211)", EnableBGColor:true, LeftMargin:5, RightMargin:5 };
|
|
60285
|
+
|
|
60286
|
+
this.Draw=function()
|
|
60287
|
+
{
|
|
60288
|
+
this.LinePoint=[];
|
|
60289
|
+
if (this.IsFrameMinSize()) return;
|
|
60290
|
+
var bCheckXY=true;
|
|
60291
|
+
var drawPoint=this.CalculateDrawPoint( {IsCheckX:bCheckXY, IsCheckY:bCheckXY} );
|
|
60292
|
+
if (!drawPoint) return;
|
|
60293
|
+
if (drawPoint.length!=2) return;
|
|
60294
|
+
|
|
60295
|
+
this.ClipFrame();
|
|
60296
|
+
|
|
60297
|
+
var ptStart=drawPoint[0];
|
|
60298
|
+
var ptEnd=drawPoint[1];
|
|
60299
|
+
|
|
60300
|
+
this.SetLineWidth();
|
|
60301
|
+
this.DrawRange(ptStart,ptEnd);
|
|
60302
|
+
this.RestoreLineWidth();
|
|
60303
|
+
|
|
60304
|
+
this.DrawPoint(drawPoint); //画点
|
|
60305
|
+
this.Canvas.restore();
|
|
60306
|
+
}
|
|
60307
|
+
|
|
60308
|
+
this.DrawRange=function(ptStart, ptEnd)
|
|
60309
|
+
{
|
|
60310
|
+
var yTop=Math.min(ptStart.Y, ptEnd.Y);
|
|
60311
|
+
var yBottom=Math.max(ptStart.Y, ptEnd.Y);
|
|
60312
|
+
var xLeft=Math.min(ptStart.X, ptEnd.X);
|
|
60313
|
+
var xRight=Math.max(ptStart.X, ptEnd.X);
|
|
60314
|
+
var height=yBottom-yTop;
|
|
60315
|
+
var width=xRight-xLeft;
|
|
60316
|
+
var yCenter=ptStart.Y+(ptEnd.Y-ptStart.Y)/2;
|
|
60317
|
+
var xCenter=ptStart.X+(ptEnd.X-ptStart.X)/2;
|
|
60318
|
+
|
|
60319
|
+
if (this.ExtendLine.Top) yTop=this.Frame.ChartBorder.GetTopEx();
|
|
60320
|
+
if (this.ExtendLine.Bottom) yBottom=this.Frame.ChartBorder.GetBottomEx();
|
|
60321
|
+
|
|
60322
|
+
if (this.EnableBGColor)
|
|
60323
|
+
{
|
|
60324
|
+
var rtBG={ Left:xLeft, Top:yTop, Right:xRight, Bottom:yBottom };
|
|
60325
|
+
rtBG.Width=rtBG.Right-rtBG.Left;
|
|
60326
|
+
rtBG.Height=rtBG.Bottom-rtBG.Top;
|
|
60327
|
+
this.Canvas.fillStyle=this.BGColor;
|
|
60328
|
+
this.Canvas.fillRect(rtBG.Left, rtBG.Top, rtBG.Width, rtBG.Height);
|
|
60329
|
+
}
|
|
60330
|
+
|
|
60331
|
+
this.Canvas.strokeStyle=this.LineColor;
|
|
60332
|
+
this.Canvas.beginPath();
|
|
60333
|
+
this.Canvas.moveTo(ToFixedPoint(xLeft),yTop);
|
|
60334
|
+
this.Canvas.lineTo(ToFixedPoint(xLeft),yBottom);
|
|
60335
|
+
|
|
60336
|
+
this.Canvas.moveTo(ToFixedPoint(xRight),yTop);
|
|
60337
|
+
this.Canvas.lineTo(ToFixedPoint(xRight),yBottom);
|
|
60338
|
+
|
|
60339
|
+
this.Canvas.moveTo(ToFixedPoint(xLeft),ToFixedPoint(yCenter));
|
|
60340
|
+
this.Canvas.lineTo(ToFixedPoint(xRight),ToFixedPoint(yCenter));
|
|
60341
|
+
this.Canvas.stroke();
|
|
60342
|
+
|
|
60343
|
+
this.LinePoint.push({ Start:{X:xLeft, Y:yTop}, End:{X:xLeft, Y:yBottom} });
|
|
60344
|
+
this.LinePoint.push({ Start:{X:xRight, Y:yTop}, End:{X:xRight, Y:yBottom} });
|
|
60345
|
+
this.LinePoint.push({ Start:{X:xLeft, Y:yCenter}, End:{X:xRight, Y:yCenter} });
|
|
60346
|
+
|
|
60347
|
+
this.DrawArrow({X:ptStart.X, Y:ToFixedPoint(yCenter)}, {X:ptEnd.X, Y:ToFixedPoint(yCenter)});
|
|
60348
|
+
|
|
60349
|
+
|
|
60350
|
+
//文字输出
|
|
60351
|
+
var startIndex=this.Frame.GetXData(ptStart.X,false);
|
|
60352
|
+
var endIndex=this.Frame.GetXData(ptEnd.X,false);
|
|
60353
|
+
var barCount=endIndex-startIndex+1;
|
|
60354
|
+
var text=`${barCount} bars`;
|
|
60355
|
+
|
|
60356
|
+
this.Canvas.font=this.Font;
|
|
60357
|
+
var textHeight=this.GetFontHeight();
|
|
60358
|
+
var textWidth=this.Canvas.measureText(text).width+4+(this.Label.LeftMargin+this.Label.RightMargin);
|
|
60359
|
+
var rtTextBG={ Left:xCenter-textWidth/2, Top:ptEnd.Y+4, Width:textWidth, Height:textHeight+2 };
|
|
60360
|
+
rtTextBG.Bottom=rtTextBG.Top+rtTextBG.Height;
|
|
60361
|
+
|
|
60362
|
+
if (this.Label.EnableBGColor)
|
|
60363
|
+
{
|
|
60364
|
+
var path=new Path2D();
|
|
60365
|
+
path.roundRect(ToFixedPoint(rtTextBG.Left), ToFixedPoint(rtTextBG.Top), ToFixedRect(rtTextBG.Width), ToFixedRect(rtTextBG.Height), [3]);
|
|
60366
|
+
this.Canvas.fillStyle=this.Label.BGColor;
|
|
60367
|
+
this.Canvas.fill(path);
|
|
60368
|
+
}
|
|
60369
|
+
|
|
60370
|
+
this.Canvas.fillStyle=this.Label.TextColor;
|
|
60371
|
+
this.Canvas.textAlign="left";
|
|
60372
|
+
this.Canvas.textBaseline="bottom";
|
|
60373
|
+
this.Canvas.fillText(text,rtTextBG.Left+2+this.Label.LeftMargin,rtTextBG.Bottom-2);
|
|
60374
|
+
|
|
60375
|
+
}
|
|
60376
|
+
}
|
|
60377
|
+
|
|
60378
|
+
|
|
60050
60379
|
function ChartDrawStorage()
|
|
60051
60380
|
{
|
|
60052
60381
|
this.DrawData=new Map(); //画图工具数据 key=symbol-Period, value=Map() Key:Guid, Value:{Guid, Symbol, Period, ClassName, Value}
|
|
@@ -62376,6 +62705,7 @@ function JSChartLocalization()
|
|
|
62376
62705
|
['自定义分钟', {CN:'分', EN:'Min', TC:'分'}],
|
|
62377
62706
|
['自定义日线', {CN:'日', EN:'D', TC:'日'}],
|
|
62378
62707
|
['自定义秒', {CN:'秒', EN:'S', TC:'秒'}],
|
|
62708
|
+
['自定义毫秒', {CN:'毫秒', EN:'MS', TC:'毫秒'}],
|
|
62379
62709
|
|
|
62380
62710
|
["MVol-Vol", {CN:"成交量", EN:"Volume", TC:'成交量'} ],
|
|
62381
62711
|
["MVol-Position", {CN:"持仓量", EN:"Position", TC:'持倉量'} ],
|
|
@@ -65462,6 +65792,7 @@ function KLineChartContainer(uielement,OffscreenElement)
|
|
|
65462
65792
|
if (ChartData.IsDayPeriod(self.Period,true)) self.RecvRealtimeData(data);
|
|
65463
65793
|
else if (ChartData.IsMinutePeriod(self.Period,true)) self.RecvMinuteRealtimeData(data);
|
|
65464
65794
|
else if (ChartData.IsSecondPeriod(self.Period)) self.RecvMinuteRealtimeData(data);
|
|
65795
|
+
else if (ChartData.IsMilliSecondPeriod(self.Period)) self.RecvMinuteRealtimeData(data);
|
|
65465
65796
|
}
|
|
65466
65797
|
}
|
|
65467
65798
|
event.Callback(event,data,this);
|
|
@@ -66966,10 +67297,12 @@ function KLineChartContainer(uielement,OffscreenElement)
|
|
|
66966
67297
|
if (this.SourceData.DataType!=0) isDataTypeChange=true;
|
|
66967
67298
|
}
|
|
66968
67299
|
else if ((period>CUSTOM_MINUTE_PERIOD_START && period<=CUSTOM_MINUTE_PERIOD_END) ||
|
|
66969
|
-
(period>CUSTOM_SECOND_PERIOD_START && period<=CUSTOM_SECOND_PERIOD_END)
|
|
67300
|
+
(period>CUSTOM_SECOND_PERIOD_START && period<=CUSTOM_SECOND_PERIOD_END) ||
|
|
67301
|
+
(period>CUSTOM_MILLISECOND_PERIOD_START && period<=CUSTOM_MILLISECOND_PERIOD_END) )
|
|
66970
67302
|
{
|
|
66971
67303
|
if (this.SourceData.DataType!=1) isDataTypeChange=true;
|
|
66972
67304
|
else if (ChartData.IsSecondPeriod(period)) isDataTypeChange=true;
|
|
67305
|
+
else if (ChartData.IsMilliSecondPeriod(period)) isDataTypeChange=true;
|
|
66973
67306
|
}
|
|
66974
67307
|
else
|
|
66975
67308
|
{
|
|
@@ -67046,7 +67379,7 @@ function KLineChartContainer(uielement,OffscreenElement)
|
|
|
67046
67379
|
this.RequestHistoryData(); //请求日线数据
|
|
67047
67380
|
//this.ReqeustKLineInfoData();
|
|
67048
67381
|
}
|
|
67049
|
-
else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period))
|
|
67382
|
+
else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period) || ChartData.IsMilliSecondPeriod(this.Period))
|
|
67050
67383
|
{
|
|
67051
67384
|
this.CancelAutoUpdate(); //先停止定时器
|
|
67052
67385
|
this.AutoUpdateEvent(false,'KLineChartContainer::ChangePeriod'); //切换周期先停止更新
|
|
@@ -67095,7 +67428,7 @@ function KLineChartContainer(uielement,OffscreenElement)
|
|
|
67095
67428
|
this.ResetScrollBar();
|
|
67096
67429
|
this.RequestHistoryData(); //请求日线数据
|
|
67097
67430
|
}
|
|
67098
|
-
else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period))
|
|
67431
|
+
else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period) || ChartData.IsMilliSecondPeriod(this.Period))
|
|
67099
67432
|
{
|
|
67100
67433
|
this.CancelAutoUpdate(); //先停止定时器
|
|
67101
67434
|
this.AutoUpdateEvent(false,'KLineChartContainer::ChangeRight'); //切换复权先停止更新
|
|
@@ -67581,7 +67914,7 @@ function KLineChartContainer(uielement,OffscreenElement)
|
|
|
67581
67914
|
this.ResetOverlaySymbolStatus();
|
|
67582
67915
|
this.RequestHistoryData(); //请求日线数据
|
|
67583
67916
|
}
|
|
67584
|
-
else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period))
|
|
67917
|
+
else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period) || ChartData.IsMilliSecondPeriod(this.Period))
|
|
67585
67918
|
{
|
|
67586
67919
|
this.ResetOverlaySymbolStatus();
|
|
67587
67920
|
this.ReqeustHistoryMinuteData(); //请求分钟数据
|
|
@@ -68428,7 +68761,7 @@ function KLineChartContainer(uielement,OffscreenElement)
|
|
|
68428
68761
|
this.RequestHistoryData(); //请求日线数据
|
|
68429
68762
|
//this.ReqeustKLineInfoData();
|
|
68430
68763
|
}
|
|
68431
|
-
else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period))
|
|
68764
|
+
else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period) || ChartData.IsMilliSecondPeriod(this.Period))
|
|
68432
68765
|
{
|
|
68433
68766
|
this.ReqeustHistoryMinuteData(); //请求分钟数据
|
|
68434
68767
|
}
|
|
@@ -71085,6 +71418,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
71085
71418
|
|
|
71086
71419
|
this.DayOffset={ Offset:0, ShowDayCount:-1, DataOffset:0, DayCount:1, }; //Offset 日期偏移 , DataOffset数据偏移
|
|
71087
71420
|
this.PageInfo={ Enable:false, Offset:-8888, ShowDayCount:4 }; //分页配置
|
|
71421
|
+
this.DataStatus={ MultiDay:false, LatestDay:false }; //MultiDay=多日 LatestDay:当天
|
|
71088
71422
|
|
|
71089
71423
|
this.ZoomStepPixel=50;
|
|
71090
71424
|
|
|
@@ -73452,6 +73786,12 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
73452
73786
|
this.DayOffset.PageInfo=null;
|
|
73453
73787
|
}
|
|
73454
73788
|
|
|
73789
|
+
this.ResetDataStatus=function()
|
|
73790
|
+
{
|
|
73791
|
+
this.DataStatus.MultiDay=false;
|
|
73792
|
+
this.DataStatus.LatestDay=false;
|
|
73793
|
+
}
|
|
73794
|
+
|
|
73455
73795
|
//切换股票代码
|
|
73456
73796
|
this.ChangeSymbol=function(symbol,option)
|
|
73457
73797
|
{
|
|
@@ -73460,6 +73800,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
73460
73800
|
this.AutoUpdateEvent(false, "MinuteChartContainer::ChangeSymbol");
|
|
73461
73801
|
this.Symbol=symbol;
|
|
73462
73802
|
this.ResetDayOffset();
|
|
73803
|
+
this.ResetDataStatus();
|
|
73463
73804
|
this.ClearIndexPaint(); //清空指标
|
|
73464
73805
|
this.ResetOverlaySymbolStatus();
|
|
73465
73806
|
this.ReloadChartDrawPicture();
|
|
@@ -73561,6 +73902,8 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
73561
73902
|
{
|
|
73562
73903
|
this.ReloadChartDrawPicture();
|
|
73563
73904
|
}
|
|
73905
|
+
|
|
73906
|
+
this.ResetDataStatus();
|
|
73564
73907
|
this.ClearIndexPaint(); //清空指标
|
|
73565
73908
|
this.ResetOverlaySymbolStatus();
|
|
73566
73909
|
this.RequestData();
|
|
@@ -73841,6 +74184,9 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
73841
74184
|
this.MultiDayBeforeOpenData=MinuteChartContainer.JosnDataToBeforeOpenDataArray(data);
|
|
73842
74185
|
this.MultiDayAfterCloseData=MinuteChartContainer.JosnDataToAfterCloseDataArray(data);
|
|
73843
74186
|
var updateTime=MinuteChartContainer.JsonDataToHistoryMinuteLastUpdateTime(data);
|
|
74187
|
+
|
|
74188
|
+
this.DataStatus.MultiDay=true;
|
|
74189
|
+
|
|
73844
74190
|
this.CaclutateCallCationYRange();
|
|
73845
74191
|
this.Symbol=data.symbol;
|
|
73846
74192
|
this.Name=data.name;
|
|
@@ -74418,6 +74764,8 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
74418
74764
|
|
|
74419
74765
|
if (this.IsBeforeData) this.BeforeOpenData=beforeOpenData;
|
|
74420
74766
|
if (this.IsAfterData) this.AfterCloseData=afterCloseData;
|
|
74767
|
+
|
|
74768
|
+
this.DataStatus.LatestDay=true;
|
|
74421
74769
|
|
|
74422
74770
|
if (this.DayCount>1) //多日走势图
|
|
74423
74771
|
{
|