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
|
@@ -5011,6 +5011,9 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
|
|
|
5011
5011
|
|
|
5012
5012
|
if (item.TopSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.TopSpace=item.TopSpace;
|
|
5013
5013
|
if (item.BottomSpace>=0) chart.Frame.SubFrame[i].Frame.ChartBorder.BottomSpace=item.BottomSpace;
|
|
5014
|
+
|
|
5015
|
+
//是否显示关闭集合竞价按钮
|
|
5016
|
+
if (IFrameSplitOperator.IsNumber(item.CloseBeforeButton)) chart.Frame.SubFrame[i].Frame.IsShowCloseButton=item.CloseBeforeButton;
|
|
5014
5017
|
}
|
|
5015
5018
|
|
|
5016
5019
|
chart.UpdateXShowText();
|
|
@@ -24420,7 +24423,7 @@ function ChartData()
|
|
|
24420
24423
|
|
|
24421
24424
|
var result=[ {Name:"Date", Data:aryDate} ];
|
|
24422
24425
|
|
|
24423
|
-
if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period))
|
|
24426
|
+
if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period) || ChartData.IsMilliSecondPeriod(this.Period))
|
|
24424
24427
|
result.push({ Name:"Time", Data:aryTime} );
|
|
24425
24428
|
|
|
24426
24429
|
result.push
|
|
@@ -24587,6 +24590,14 @@ ChartData.IsSecondPeriod=function(period)
|
|
|
24587
24590
|
return false;
|
|
24588
24591
|
}
|
|
24589
24592
|
|
|
24593
|
+
var CUSTOM_MILLISECOND_PERIOD_START=50000, CUSTOM_MILLISECOND_PERIOD_END=60000;
|
|
24594
|
+
ChartData.IsMilliSecondPeriod=function(period)
|
|
24595
|
+
{
|
|
24596
|
+
if (period>CUSTOM_MILLISECOND_PERIOD_START && period<=CUSTOM_MILLISECOND_PERIOD_END) return true;
|
|
24597
|
+
return false;
|
|
24598
|
+
}
|
|
24599
|
+
|
|
24600
|
+
|
|
24590
24601
|
|
|
24591
24602
|
//是否是分笔图 10=分笔
|
|
24592
24603
|
ChartData.IsTickPeriod=function(period)
|
|
@@ -41843,6 +41854,11 @@ function KLineTooltipPaint()
|
|
|
41843
41854
|
text=IFrameSplitOperator.FormatTimeString(item.Time,'HH:MM:SS');
|
|
41844
41855
|
aryText.push({ Text:text, Color:this.DateTimeColor });
|
|
41845
41856
|
}
|
|
41857
|
+
else if (ChartData.IsMilliSecondPeriod(period) && IFrameSplitOperator.IsNumber(item.Time))
|
|
41858
|
+
{
|
|
41859
|
+
text=IFrameSplitOperator.FormatTimeString(item.Time,'HH:MM:SS.fff');
|
|
41860
|
+
aryText.push({ Text:text, Color:this.DateTimeColor });
|
|
41861
|
+
}
|
|
41846
41862
|
|
|
41847
41863
|
if (IFrameSplitOperator.IsNumber(item.Open)) //开盘
|
|
41848
41864
|
{
|
|
@@ -44123,6 +44139,7 @@ function RectSelectPaint()
|
|
|
44123
44139
|
if (ChartData.IsDayPeriod(period, true)) return value.Date; //YYYYMMDD
|
|
44124
44140
|
else if (ChartData.IsMinutePeriod(period, true)) return value.Date*10000+value.Time; //YYYYMMDDHHMM
|
|
44125
44141
|
else if (ChartData.IsSecondPeriod(period) || ChartData.IsTickPeriod(period)) return value.Date*1000000+value.Time; //YYYYMMDDHHMMSS
|
|
44142
|
+
else if (ChartData.IsMilliSecondPeriod(period) ) return value.Date*1000000000+value.Time; //YYYYMMDDHHMMSSFFF
|
|
44126
44143
|
}
|
|
44127
44144
|
|
|
44128
44145
|
return null;
|
|
@@ -48103,6 +48120,44 @@ function FrameSplitKLineX()
|
|
|
48103
48120
|
}
|
|
48104
48121
|
}
|
|
48105
48122
|
|
|
48123
|
+
this.SplitMilliSecond=function()
|
|
48124
|
+
{
|
|
48125
|
+
this.Frame.VerticalInfo=[];
|
|
48126
|
+
var itemWidth=this.Frame.DistanceWidth+this.Frame.DataWidth;
|
|
48127
|
+
var xOffset=this.Frame.Data.DataOffset;
|
|
48128
|
+
var xPointCount=this.Frame.XPointCount;
|
|
48129
|
+
var textDistance=0;
|
|
48130
|
+
var barDistance=0;
|
|
48131
|
+
|
|
48132
|
+
for(var i=0, index=xOffset; i<xPointCount && index<this.Frame.Data.Data.length; ++i,++index)
|
|
48133
|
+
{
|
|
48134
|
+
textDistance+=itemWidth;
|
|
48135
|
+
++barDistance;
|
|
48136
|
+
var infoData=null;
|
|
48137
|
+
if (i==0)
|
|
48138
|
+
{
|
|
48139
|
+
var date=IFrameSplitOperator.FormatDateString(this.Frame.Data.Data[index].Date,'HH:MM:SS.fff');
|
|
48140
|
+
infoData={Value:index-xOffset, Text:date};
|
|
48141
|
+
}
|
|
48142
|
+
else if (textDistance>this.MinTextDistance && barDistance>=this.MinBarDistance)
|
|
48143
|
+
{
|
|
48144
|
+
var time=IFrameSplitOperator.FormatTimeString(this.Frame.Data.Data[index].Time,"HH:MM:SS.fff");
|
|
48145
|
+
infoData={Value:index-xOffset, Text:time};
|
|
48146
|
+
}
|
|
48147
|
+
|
|
48148
|
+
if (infoData)
|
|
48149
|
+
{
|
|
48150
|
+
var info= new CoordinateInfo();
|
|
48151
|
+
info.Value=infoData.Value;
|
|
48152
|
+
if (this.ShowText) info.Message[0]=infoData.Text;
|
|
48153
|
+
this.Frame.VerticalInfo.push(info);
|
|
48154
|
+
textDistance=0;
|
|
48155
|
+
barDistance=0;
|
|
48156
|
+
if (i==0) textDistance=-(this.MinTextDistance/2);
|
|
48157
|
+
}
|
|
48158
|
+
}
|
|
48159
|
+
}
|
|
48160
|
+
|
|
48106
48161
|
this.SplitDate=function() //根据日期分割
|
|
48107
48162
|
{
|
|
48108
48163
|
this.Frame.VerticalInfo=[];
|
|
@@ -48210,6 +48265,7 @@ function FrameSplitKLineX()
|
|
|
48210
48265
|
else if (ChartData.IsMinutePeriod(this.Period, true)) this.SplitDateTime();
|
|
48211
48266
|
else if (ChartData.IsSecondPeriod(this.Period)) this.SplitSecond();
|
|
48212
48267
|
else if (ChartData.IsTickPeriod(this.Period)) this.SplitSecond();
|
|
48268
|
+
else if (ChartData.IsMilliSecondPeriod(this.Period)) this.SplitMilliSecond();
|
|
48213
48269
|
else this.SplitDate();
|
|
48214
48270
|
|
|
48215
48271
|
if (this.GetEventCallback)
|
|
@@ -51027,6 +51083,11 @@ function HQDateStringFormat()
|
|
|
51027
51083
|
var time = IFrameSplitOperator.FormatTimeString(currentData.Time,'HH:MM:SS');
|
|
51028
51084
|
this.Text = this.Text + " " + time;
|
|
51029
51085
|
}
|
|
51086
|
+
else if (ChartData.IsMilliSecondPeriod(this.Data.Period))
|
|
51087
|
+
{
|
|
51088
|
+
var time = IFrameSplitOperator.FormatTimeString(currentData.Time,'HH:MM:SS.fff');
|
|
51089
|
+
this.Text = this.Text + " " + time;
|
|
51090
|
+
}
|
|
51030
51091
|
else if (ChartData.IsTickPeriod(this.Data.Period)) //分笔
|
|
51031
51092
|
{
|
|
51032
51093
|
var time = IFrameSplitOperator.FormatTimeString(currentData.Time);
|
|
@@ -52100,6 +52161,8 @@ function DynamicKLineTitlePainting()
|
|
|
52100
52161
|
periodName=(this.Data.Period-CUSTOM_DAY_PERIOD_START)+g_JSChartLocalization.GetText('自定义日线',this.LanguageID);
|
|
52101
52162
|
else if (this.Data.Period>CUSTOM_SECOND_PERIOD_START && this.Data.Period<=CUSTOM_SECOND_PERIOD_END)
|
|
52102
52163
|
periodName=(this.Data.Period-CUSTOM_SECOND_PERIOD_START)+g_JSChartLocalization.GetText('自定义秒',this.LanguageID);
|
|
52164
|
+
else if (this.Data.Period>CUSTOM_MILLISECOND_PERIOD_START&& this.Data.Period<=CUSTOM_MILLISECOND_PERIOD_END)
|
|
52165
|
+
periodName=(this.Data.Period-CUSTOM_MILLISECOND_PERIOD_START)+g_JSChartLocalization.GetText('自定义毫秒',this.LanguageID);
|
|
52103
52166
|
else
|
|
52104
52167
|
periodName=g_JSChartLocalization.GetText(ChartData.GetPeriodName(this.Data.Period),this.LanguageID);
|
|
52105
52168
|
var rightName=g_JSChartLocalization.GetText(RIGHT_NAME[this.Data.Right],this.LanguageID);
|
|
@@ -52129,6 +52192,11 @@ function DynamicKLineTitlePainting()
|
|
|
52129
52192
|
var text=IFrameSplitOperator.FormatTimeString(item.Time, "HH:MM:SS");
|
|
52130
52193
|
aryText.push({ Text:text, Color:this.DateTimeColor });
|
|
52131
52194
|
}
|
|
52195
|
+
else if (ChartData.IsMilliSecondPeriod(this.Period) && IFrameSplitOperator.IsNumber(item.Time))
|
|
52196
|
+
{
|
|
52197
|
+
var text=IFrameSplitOperator.FormatTimeString(item.Time, "HH:MM:SS.fff");
|
|
52198
|
+
aryText.push({ Text:text, Color:this.DateTimeColor });
|
|
52199
|
+
}
|
|
52132
52200
|
else if (isTickPeriod)
|
|
52133
52201
|
{
|
|
52134
52202
|
var text=IFrameSplitOperator.FormatTimeString(item.Time, "HH:MM:SS");
|
|
@@ -55404,6 +55472,32 @@ function IChartDrawPicture()
|
|
|
55404
55472
|
this.Canvas.restore();
|
|
55405
55473
|
}
|
|
55406
55474
|
|
|
55475
|
+
this.DrawArrow=function(ptStart,ptEnd)
|
|
55476
|
+
{
|
|
55477
|
+
//计算箭头
|
|
55478
|
+
var theta=35; //三角斜边一直线夹角
|
|
55479
|
+
var headlen=10; //三角斜边长度
|
|
55480
|
+
var angle = Math.atan2(ptStart.Y - ptEnd.Y, ptStart.X - ptEnd.X) * 180 / Math.PI,
|
|
55481
|
+
angle1 = (angle + theta) * Math.PI / 180,
|
|
55482
|
+
angle2 = (angle - theta) * Math.PI / 180,
|
|
55483
|
+
topX = headlen * Math.cos(angle1),
|
|
55484
|
+
topY = headlen * Math.sin(angle1),
|
|
55485
|
+
botX = headlen * Math.cos(angle2),
|
|
55486
|
+
botY = headlen * Math.sin(angle2);
|
|
55487
|
+
|
|
55488
|
+
this.Canvas.beginPath();
|
|
55489
|
+
var arrowX = ptEnd.X + topX;
|
|
55490
|
+
var arrowY = ptEnd.Y + topY;
|
|
55491
|
+
this.Canvas.moveTo(arrowX,arrowY);
|
|
55492
|
+
|
|
55493
|
+
this.Canvas.lineTo(ptEnd.X, ptEnd.Y);
|
|
55494
|
+
|
|
55495
|
+
arrowX = ptEnd.X + botX;
|
|
55496
|
+
arrowY = ptEnd.Y + botY;
|
|
55497
|
+
this.Canvas.lineTo(arrowX,arrowY);
|
|
55498
|
+
this.Canvas.stroke();
|
|
55499
|
+
}
|
|
55500
|
+
|
|
55407
55501
|
//计算2个点线的,左右的延长线的点
|
|
55408
55502
|
this.CalculateExtendLinePoint=function(ptStart,ptEnd)
|
|
55409
55503
|
{
|
|
@@ -56118,7 +56212,9 @@ IChartDrawPicture.ArrayDrawPricture=
|
|
|
56118
56212
|
{ Name:"PriceNote", ClassName:"ChartDrawPriceNote", Create:function() { return new ChartDrawPriceNote();} },
|
|
56119
56213
|
{ Name:"FibWedge", ClassName:"ChartDrawFibWedge", Create:function(){ return new ChartDrawFibWedge(); }},
|
|
56120
56214
|
{ Name:"FibRetracement", ClassName:"ChartFibRetracement", Create:function() { return new ChartFibRetracement(); }}, //斐波那契回测
|
|
56121
|
-
{ Name:"FibSpeedResistanceFan", ClassName:"ChartFibSpeedResistanceFan", Create:function() { return new ChartFibSpeedResistanceFan(); }} //斐波那契扇形
|
|
56215
|
+
{ Name:"FibSpeedResistanceFan", ClassName:"ChartFibSpeedResistanceFan", Create:function() { return new ChartFibSpeedResistanceFan(); }}, //斐波那契扇形
|
|
56216
|
+
{ Name:"PriceRange", ClassName:"ChartPriceRange", Create:function() { return new ChartPriceRange(); }},
|
|
56217
|
+
{ Name:"DateRange", ClassName:"ChartDateRange", Create:function() { return new ChartDateRange(); }}
|
|
56122
56218
|
];
|
|
56123
56219
|
|
|
56124
56220
|
IChartDrawPicture.MapIonFont=new Map(
|
|
@@ -64127,6 +64223,239 @@ function ChartFibSpeedResistanceFan()
|
|
|
64127
64223
|
|
|
64128
64224
|
}
|
|
64129
64225
|
|
|
64226
|
+
|
|
64227
|
+
function ChartPriceRange()
|
|
64228
|
+
{
|
|
64229
|
+
this.newMethod=IChartDrawPicture; //派生
|
|
64230
|
+
this.newMethod();
|
|
64231
|
+
delete this.newMethod;
|
|
64232
|
+
|
|
64233
|
+
this.ClassName='ChartPriceRange';
|
|
64234
|
+
this.PointCount=2;
|
|
64235
|
+
this.Font=12*GetDevicePixelRatio() +"px 微软雅黑";
|
|
64236
|
+
this.TextColor=this.LineColor;
|
|
64237
|
+
this.IsPointIn=this.IsPointIn_XYValue_Line;
|
|
64238
|
+
this.GetXYCoordinate=this.GetXYCoordinate_default;
|
|
64239
|
+
this.PointToValue_Default=this.PointToValue;
|
|
64240
|
+
this.OnlyMoveXIndex=true;
|
|
64241
|
+
this.IsSupportMagnet=true;
|
|
64242
|
+
this.LineWidth=1;
|
|
64243
|
+
this.EnableBGColor=true;
|
|
64244
|
+
this.BGColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.15);
|
|
64245
|
+
this.ExtendLine={ Left:false, Right: false }; //延长线
|
|
64246
|
+
|
|
64247
|
+
this.Label={ TextColor:"rgb(0,0,0)", BGColor:"rgb(211,211,211)", EnableBGColor:true, LeftMargin:5, RightMargin:5 };
|
|
64248
|
+
|
|
64249
|
+
this.Draw=function()
|
|
64250
|
+
{
|
|
64251
|
+
this.LinePoint=[];
|
|
64252
|
+
if (this.IsFrameMinSize()) return;
|
|
64253
|
+
var bCheckXY=true;
|
|
64254
|
+
if (this.ExtendLine.Left || this.ExtendLine.Right) bCheckXY=false;
|
|
64255
|
+
var drawPoint=this.CalculateDrawPoint( {IsCheckX:bCheckXY, IsCheckY:bCheckXY} );
|
|
64256
|
+
if (!drawPoint) return;
|
|
64257
|
+
if (drawPoint.length!=2) return;
|
|
64258
|
+
|
|
64259
|
+
this.ClipFrame();
|
|
64260
|
+
|
|
64261
|
+
var ptStart=drawPoint[0];
|
|
64262
|
+
var ptEnd=drawPoint[1];
|
|
64263
|
+
|
|
64264
|
+
this.SetLineWidth();
|
|
64265
|
+
this.DrawRange(ptStart,ptEnd);
|
|
64266
|
+
this.RestoreLineWidth();
|
|
64267
|
+
|
|
64268
|
+
this.DrawPoint(drawPoint); //画点
|
|
64269
|
+
this.Canvas.restore();
|
|
64270
|
+
}
|
|
64271
|
+
|
|
64272
|
+
this.DrawRange=function(ptStart, ptEnd)
|
|
64273
|
+
{
|
|
64274
|
+
var yTop=Math.min(ptStart.Y, ptEnd.Y);
|
|
64275
|
+
var yBottom=Math.max(ptStart.Y, ptEnd.Y);
|
|
64276
|
+
var xLeft=Math.min(ptStart.X, ptEnd.X);
|
|
64277
|
+
var xRight=Math.max(ptStart.X, ptEnd.X);
|
|
64278
|
+
var height=yBottom-yTop;
|
|
64279
|
+
var xCenter=ptStart.X+(ptEnd.X-ptStart.X)/2;
|
|
64280
|
+
|
|
64281
|
+
if (this.ExtendLine.Right) xRight=this.Frame.ChartBorder.GetRight();
|
|
64282
|
+
if (this.ExtendLine.Left) xLeft=this.Frame.ChartBorder.GetLeft();
|
|
64283
|
+
|
|
64284
|
+
if (this.EnableBGColor)
|
|
64285
|
+
{
|
|
64286
|
+
var rtBG={ Left:xLeft, Top:yTop, Right:xRight, Bottom:yBottom };
|
|
64287
|
+
rtBG.Width=rtBG.Right-rtBG.Left;
|
|
64288
|
+
rtBG.Height=rtBG.Bottom-rtBG.Top;
|
|
64289
|
+
this.Canvas.fillStyle=this.BGColor;
|
|
64290
|
+
this.Canvas.fillRect(rtBG.Left, rtBG.Top, rtBG.Width, rtBG.Height);
|
|
64291
|
+
}
|
|
64292
|
+
|
|
64293
|
+
|
|
64294
|
+
this.Canvas.strokeStyle=this.LineColor;
|
|
64295
|
+
this.Canvas.beginPath();
|
|
64296
|
+
this.Canvas.moveTo(xLeft,ToFixedPoint(yTop));
|
|
64297
|
+
this.Canvas.lineTo(xRight,ToFixedPoint(yTop));
|
|
64298
|
+
|
|
64299
|
+
this.Canvas.moveTo(xLeft,ToFixedPoint(yBottom));
|
|
64300
|
+
this.Canvas.lineTo(xRight,ToFixedPoint(yBottom));
|
|
64301
|
+
|
|
64302
|
+
this.Canvas.moveTo(ToFixedPoint(xCenter),ToFixedPoint(yTop));
|
|
64303
|
+
this.Canvas.lineTo(ToFixedPoint(xCenter),ToFixedPoint(yBottom));
|
|
64304
|
+
this.Canvas.stroke();
|
|
64305
|
+
|
|
64306
|
+
this.LinePoint.push({ Start:{X:xLeft, Y:yTop}, End:{X:xRight, Y:yTop} });
|
|
64307
|
+
this.LinePoint.push({ Start:{X:xLeft, Y:yBottom}, End:{X:xRight, Y:yBottom} });
|
|
64308
|
+
this.LinePoint.push({ Start:{X:xCenter, Y:yTop}, End:{X:xCenter, Y:yBottom} });
|
|
64309
|
+
|
|
64310
|
+
this.DrawArrow({X:ToFixedPoint(xCenter), Y:ptStart.Y}, {X:ToFixedPoint(xCenter), Y:ptEnd.Y});
|
|
64311
|
+
|
|
64312
|
+
//文字输出
|
|
64313
|
+
var startValue=this.Frame.GetYData(ptStart.Y,false);
|
|
64314
|
+
var endValue=this.Frame.GetYData(ptEnd.Y,false);
|
|
64315
|
+
var diffValue=endValue-startValue;
|
|
64316
|
+
var rate=(diffValue/startValue)*100;
|
|
64317
|
+
var text=`${diffValue.toFixed(2)} (${rate.toFixed(2)}%)`;
|
|
64318
|
+
|
|
64319
|
+
this.Canvas.font=this.Font;
|
|
64320
|
+
var textHeight=this.GetFontHeight();
|
|
64321
|
+
var textWidth=this.Canvas.measureText(text).width+4+(this.Label.LeftMargin+this.Label.RightMargin);
|
|
64322
|
+
var rtTextBG={ Left:xCenter-textWidth/2, Width:textWidth, Height:textHeight+2 };
|
|
64323
|
+
if (diffValue>0) rtTextBG.Top=ptEnd.Y-rtTextBG.Height-4;
|
|
64324
|
+
else rtTextBG.Top=ptEnd.Y+4;
|
|
64325
|
+
rtTextBG.Bottom=rtTextBG.Top+rtTextBG.Height;
|
|
64326
|
+
|
|
64327
|
+
if (this.Label.EnableBGColor)
|
|
64328
|
+
{
|
|
64329
|
+
var path=new Path2D();
|
|
64330
|
+
path.roundRect(ToFixedPoint(rtTextBG.Left), ToFixedPoint(rtTextBG.Top), ToFixedRect(rtTextBG.Width), ToFixedRect(rtTextBG.Height), [3]);
|
|
64331
|
+
this.Canvas.fillStyle=this.Label.BGColor;
|
|
64332
|
+
this.Canvas.fill(path);
|
|
64333
|
+
}
|
|
64334
|
+
|
|
64335
|
+
this.Canvas.fillStyle=this.Label.TextColor;
|
|
64336
|
+
this.Canvas.textAlign="left";
|
|
64337
|
+
this.Canvas.textBaseline="bottom";
|
|
64338
|
+
this.Canvas.fillText(text,rtTextBG.Left+2+this.Label.LeftMargin,rtTextBG.Bottom-2);
|
|
64339
|
+
}
|
|
64340
|
+
|
|
64341
|
+
}
|
|
64342
|
+
|
|
64343
|
+
|
|
64344
|
+
function ChartDateRange()
|
|
64345
|
+
{
|
|
64346
|
+
this.newMethod=IChartDrawPicture; //派生
|
|
64347
|
+
this.newMethod();
|
|
64348
|
+
delete this.newMethod;
|
|
64349
|
+
|
|
64350
|
+
this.ClassName='ChartDateRange';
|
|
64351
|
+
this.PointCount=2;
|
|
64352
|
+
this.Font=12*GetDevicePixelRatio() +"px 微软雅黑";
|
|
64353
|
+
this.TextColor=this.LineColor;
|
|
64354
|
+
this.IsPointIn=this.IsPointIn_XYValue_Line;
|
|
64355
|
+
this.GetXYCoordinate=this.GetXYCoordinate_default;
|
|
64356
|
+
this.PointToValue_Default=this.PointToValue;
|
|
64357
|
+
this.OnlyMoveXIndex=true;
|
|
64358
|
+
this.IsSupportMagnet=true;
|
|
64359
|
+
this.LineWidth=1;
|
|
64360
|
+
this.EnableBGColor=true;
|
|
64361
|
+
this.BGColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.15);
|
|
64362
|
+
this.ExtendLine={ Top:false, Bottom: false }; //延长线
|
|
64363
|
+
|
|
64364
|
+
this.Label={ TextColor:"rgb(0,0,0)", BGColor:"rgb(211,211,211)", EnableBGColor:true, LeftMargin:5, RightMargin:5 };
|
|
64365
|
+
|
|
64366
|
+
this.Draw=function()
|
|
64367
|
+
{
|
|
64368
|
+
this.LinePoint=[];
|
|
64369
|
+
if (this.IsFrameMinSize()) return;
|
|
64370
|
+
var bCheckXY=true;
|
|
64371
|
+
var drawPoint=this.CalculateDrawPoint( {IsCheckX:bCheckXY, IsCheckY:bCheckXY} );
|
|
64372
|
+
if (!drawPoint) return;
|
|
64373
|
+
if (drawPoint.length!=2) return;
|
|
64374
|
+
|
|
64375
|
+
this.ClipFrame();
|
|
64376
|
+
|
|
64377
|
+
var ptStart=drawPoint[0];
|
|
64378
|
+
var ptEnd=drawPoint[1];
|
|
64379
|
+
|
|
64380
|
+
this.SetLineWidth();
|
|
64381
|
+
this.DrawRange(ptStart,ptEnd);
|
|
64382
|
+
this.RestoreLineWidth();
|
|
64383
|
+
|
|
64384
|
+
this.DrawPoint(drawPoint); //画点
|
|
64385
|
+
this.Canvas.restore();
|
|
64386
|
+
}
|
|
64387
|
+
|
|
64388
|
+
this.DrawRange=function(ptStart, ptEnd)
|
|
64389
|
+
{
|
|
64390
|
+
var yTop=Math.min(ptStart.Y, ptEnd.Y);
|
|
64391
|
+
var yBottom=Math.max(ptStart.Y, ptEnd.Y);
|
|
64392
|
+
var xLeft=Math.min(ptStart.X, ptEnd.X);
|
|
64393
|
+
var xRight=Math.max(ptStart.X, ptEnd.X);
|
|
64394
|
+
var height=yBottom-yTop;
|
|
64395
|
+
var width=xRight-xLeft;
|
|
64396
|
+
var yCenter=ptStart.Y+(ptEnd.Y-ptStart.Y)/2;
|
|
64397
|
+
var xCenter=ptStart.X+(ptEnd.X-ptStart.X)/2;
|
|
64398
|
+
|
|
64399
|
+
if (this.ExtendLine.Top) yTop=this.Frame.ChartBorder.GetTopEx();
|
|
64400
|
+
if (this.ExtendLine.Bottom) yBottom=this.Frame.ChartBorder.GetBottomEx();
|
|
64401
|
+
|
|
64402
|
+
if (this.EnableBGColor)
|
|
64403
|
+
{
|
|
64404
|
+
var rtBG={ Left:xLeft, Top:yTop, Right:xRight, Bottom:yBottom };
|
|
64405
|
+
rtBG.Width=rtBG.Right-rtBG.Left;
|
|
64406
|
+
rtBG.Height=rtBG.Bottom-rtBG.Top;
|
|
64407
|
+
this.Canvas.fillStyle=this.BGColor;
|
|
64408
|
+
this.Canvas.fillRect(rtBG.Left, rtBG.Top, rtBG.Width, rtBG.Height);
|
|
64409
|
+
}
|
|
64410
|
+
|
|
64411
|
+
this.Canvas.strokeStyle=this.LineColor;
|
|
64412
|
+
this.Canvas.beginPath();
|
|
64413
|
+
this.Canvas.moveTo(ToFixedPoint(xLeft),yTop);
|
|
64414
|
+
this.Canvas.lineTo(ToFixedPoint(xLeft),yBottom);
|
|
64415
|
+
|
|
64416
|
+
this.Canvas.moveTo(ToFixedPoint(xRight),yTop);
|
|
64417
|
+
this.Canvas.lineTo(ToFixedPoint(xRight),yBottom);
|
|
64418
|
+
|
|
64419
|
+
this.Canvas.moveTo(ToFixedPoint(xLeft),ToFixedPoint(yCenter));
|
|
64420
|
+
this.Canvas.lineTo(ToFixedPoint(xRight),ToFixedPoint(yCenter));
|
|
64421
|
+
this.Canvas.stroke();
|
|
64422
|
+
|
|
64423
|
+
this.LinePoint.push({ Start:{X:xLeft, Y:yTop}, End:{X:xLeft, Y:yBottom} });
|
|
64424
|
+
this.LinePoint.push({ Start:{X:xRight, Y:yTop}, End:{X:xRight, Y:yBottom} });
|
|
64425
|
+
this.LinePoint.push({ Start:{X:xLeft, Y:yCenter}, End:{X:xRight, Y:yCenter} });
|
|
64426
|
+
|
|
64427
|
+
this.DrawArrow({X:ptStart.X, Y:ToFixedPoint(yCenter)}, {X:ptEnd.X, Y:ToFixedPoint(yCenter)});
|
|
64428
|
+
|
|
64429
|
+
|
|
64430
|
+
//文字输出
|
|
64431
|
+
var startIndex=this.Frame.GetXData(ptStart.X,false);
|
|
64432
|
+
var endIndex=this.Frame.GetXData(ptEnd.X,false);
|
|
64433
|
+
var barCount=endIndex-startIndex+1;
|
|
64434
|
+
var text=`${barCount} bars`;
|
|
64435
|
+
|
|
64436
|
+
this.Canvas.font=this.Font;
|
|
64437
|
+
var textHeight=this.GetFontHeight();
|
|
64438
|
+
var textWidth=this.Canvas.measureText(text).width+4+(this.Label.LeftMargin+this.Label.RightMargin);
|
|
64439
|
+
var rtTextBG={ Left:xCenter-textWidth/2, Top:ptEnd.Y+4, Width:textWidth, Height:textHeight+2 };
|
|
64440
|
+
rtTextBG.Bottom=rtTextBG.Top+rtTextBG.Height;
|
|
64441
|
+
|
|
64442
|
+
if (this.Label.EnableBGColor)
|
|
64443
|
+
{
|
|
64444
|
+
var path=new Path2D();
|
|
64445
|
+
path.roundRect(ToFixedPoint(rtTextBG.Left), ToFixedPoint(rtTextBG.Top), ToFixedRect(rtTextBG.Width), ToFixedRect(rtTextBG.Height), [3]);
|
|
64446
|
+
this.Canvas.fillStyle=this.Label.BGColor;
|
|
64447
|
+
this.Canvas.fill(path);
|
|
64448
|
+
}
|
|
64449
|
+
|
|
64450
|
+
this.Canvas.fillStyle=this.Label.TextColor;
|
|
64451
|
+
this.Canvas.textAlign="left";
|
|
64452
|
+
this.Canvas.textBaseline="bottom";
|
|
64453
|
+
this.Canvas.fillText(text,rtTextBG.Left+2+this.Label.LeftMargin,rtTextBG.Bottom-2);
|
|
64454
|
+
|
|
64455
|
+
}
|
|
64456
|
+
}
|
|
64457
|
+
|
|
64458
|
+
|
|
64130
64459
|
function ChartDrawStorage()
|
|
64131
64460
|
{
|
|
64132
64461
|
this.DrawData=new Map(); //画图工具数据 key=symbol-Period, value=Map() Key:Guid, Value:{Guid, Symbol, Period, ClassName, Value}
|
|
@@ -66456,6 +66785,7 @@ function JSChartLocalization()
|
|
|
66456
66785
|
['自定义分钟', {CN:'分', EN:'Min', TC:'分'}],
|
|
66457
66786
|
['自定义日线', {CN:'日', EN:'D', TC:'日'}],
|
|
66458
66787
|
['自定义秒', {CN:'秒', EN:'S', TC:'秒'}],
|
|
66788
|
+
['自定义毫秒', {CN:'毫秒', EN:'MS', TC:'毫秒'}],
|
|
66459
66789
|
|
|
66460
66790
|
["MVol-Vol", {CN:"成交量", EN:"Volume", TC:'成交量'} ],
|
|
66461
66791
|
["MVol-Position", {CN:"持仓量", EN:"Position", TC:'持倉量'} ],
|
|
@@ -69542,6 +69872,7 @@ function KLineChartContainer(uielement,OffscreenElement)
|
|
|
69542
69872
|
if (ChartData.IsDayPeriod(self.Period,true)) self.RecvRealtimeData(data);
|
|
69543
69873
|
else if (ChartData.IsMinutePeriod(self.Period,true)) self.RecvMinuteRealtimeData(data);
|
|
69544
69874
|
else if (ChartData.IsSecondPeriod(self.Period)) self.RecvMinuteRealtimeData(data);
|
|
69875
|
+
else if (ChartData.IsMilliSecondPeriod(self.Period)) self.RecvMinuteRealtimeData(data);
|
|
69545
69876
|
}
|
|
69546
69877
|
}
|
|
69547
69878
|
event.Callback(event,data,this);
|
|
@@ -71046,10 +71377,12 @@ function KLineChartContainer(uielement,OffscreenElement)
|
|
|
71046
71377
|
if (this.SourceData.DataType!=0) isDataTypeChange=true;
|
|
71047
71378
|
}
|
|
71048
71379
|
else if ((period>CUSTOM_MINUTE_PERIOD_START && period<=CUSTOM_MINUTE_PERIOD_END) ||
|
|
71049
|
-
(period>CUSTOM_SECOND_PERIOD_START && period<=CUSTOM_SECOND_PERIOD_END)
|
|
71380
|
+
(period>CUSTOM_SECOND_PERIOD_START && period<=CUSTOM_SECOND_PERIOD_END) ||
|
|
71381
|
+
(period>CUSTOM_MILLISECOND_PERIOD_START && period<=CUSTOM_MILLISECOND_PERIOD_END) )
|
|
71050
71382
|
{
|
|
71051
71383
|
if (this.SourceData.DataType!=1) isDataTypeChange=true;
|
|
71052
71384
|
else if (ChartData.IsSecondPeriod(period)) isDataTypeChange=true;
|
|
71385
|
+
else if (ChartData.IsMilliSecondPeriod(period)) isDataTypeChange=true;
|
|
71053
71386
|
}
|
|
71054
71387
|
else
|
|
71055
71388
|
{
|
|
@@ -71126,7 +71459,7 @@ function KLineChartContainer(uielement,OffscreenElement)
|
|
|
71126
71459
|
this.RequestHistoryData(); //请求日线数据
|
|
71127
71460
|
//this.ReqeustKLineInfoData();
|
|
71128
71461
|
}
|
|
71129
|
-
else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period))
|
|
71462
|
+
else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period) || ChartData.IsMilliSecondPeriod(this.Period))
|
|
71130
71463
|
{
|
|
71131
71464
|
this.CancelAutoUpdate(); //先停止定时器
|
|
71132
71465
|
this.AutoUpdateEvent(false,'KLineChartContainer::ChangePeriod'); //切换周期先停止更新
|
|
@@ -71175,7 +71508,7 @@ function KLineChartContainer(uielement,OffscreenElement)
|
|
|
71175
71508
|
this.ResetScrollBar();
|
|
71176
71509
|
this.RequestHistoryData(); //请求日线数据
|
|
71177
71510
|
}
|
|
71178
|
-
else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period))
|
|
71511
|
+
else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period) || ChartData.IsMilliSecondPeriod(this.Period))
|
|
71179
71512
|
{
|
|
71180
71513
|
this.CancelAutoUpdate(); //先停止定时器
|
|
71181
71514
|
this.AutoUpdateEvent(false,'KLineChartContainer::ChangeRight'); //切换复权先停止更新
|
|
@@ -71661,7 +71994,7 @@ function KLineChartContainer(uielement,OffscreenElement)
|
|
|
71661
71994
|
this.ResetOverlaySymbolStatus();
|
|
71662
71995
|
this.RequestHistoryData(); //请求日线数据
|
|
71663
71996
|
}
|
|
71664
|
-
else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period))
|
|
71997
|
+
else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period) || ChartData.IsMilliSecondPeriod(this.Period))
|
|
71665
71998
|
{
|
|
71666
71999
|
this.ResetOverlaySymbolStatus();
|
|
71667
72000
|
this.ReqeustHistoryMinuteData(); //请求分钟数据
|
|
@@ -72508,7 +72841,7 @@ function KLineChartContainer(uielement,OffscreenElement)
|
|
|
72508
72841
|
this.RequestHistoryData(); //请求日线数据
|
|
72509
72842
|
//this.ReqeustKLineInfoData();
|
|
72510
72843
|
}
|
|
72511
|
-
else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period))
|
|
72844
|
+
else if (ChartData.IsMinutePeriod(this.Period,true) || ChartData.IsSecondPeriod(this.Period) || ChartData.IsMilliSecondPeriod(this.Period))
|
|
72512
72845
|
{
|
|
72513
72846
|
this.ReqeustHistoryMinuteData(); //请求分钟数据
|
|
72514
72847
|
}
|
|
@@ -75165,6 +75498,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
75165
75498
|
|
|
75166
75499
|
this.DayOffset={ Offset:0, ShowDayCount:-1, DataOffset:0, DayCount:1, }; //Offset 日期偏移 , DataOffset数据偏移
|
|
75167
75500
|
this.PageInfo={ Enable:false, Offset:-8888, ShowDayCount:4 }; //分页配置
|
|
75501
|
+
this.DataStatus={ MultiDay:false, LatestDay:false }; //MultiDay=多日 LatestDay:当天
|
|
75168
75502
|
|
|
75169
75503
|
this.ZoomStepPixel=50;
|
|
75170
75504
|
|
|
@@ -77532,6 +77866,12 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
77532
77866
|
this.DayOffset.PageInfo=null;
|
|
77533
77867
|
}
|
|
77534
77868
|
|
|
77869
|
+
this.ResetDataStatus=function()
|
|
77870
|
+
{
|
|
77871
|
+
this.DataStatus.MultiDay=false;
|
|
77872
|
+
this.DataStatus.LatestDay=false;
|
|
77873
|
+
}
|
|
77874
|
+
|
|
77535
77875
|
//切换股票代码
|
|
77536
77876
|
this.ChangeSymbol=function(symbol,option)
|
|
77537
77877
|
{
|
|
@@ -77540,6 +77880,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
77540
77880
|
this.AutoUpdateEvent(false, "MinuteChartContainer::ChangeSymbol");
|
|
77541
77881
|
this.Symbol=symbol;
|
|
77542
77882
|
this.ResetDayOffset();
|
|
77883
|
+
this.ResetDataStatus();
|
|
77543
77884
|
this.ClearIndexPaint(); //清空指标
|
|
77544
77885
|
this.ResetOverlaySymbolStatus();
|
|
77545
77886
|
this.ReloadChartDrawPicture();
|
|
@@ -77641,6 +77982,8 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
77641
77982
|
{
|
|
77642
77983
|
this.ReloadChartDrawPicture();
|
|
77643
77984
|
}
|
|
77985
|
+
|
|
77986
|
+
this.ResetDataStatus();
|
|
77644
77987
|
this.ClearIndexPaint(); //清空指标
|
|
77645
77988
|
this.ResetOverlaySymbolStatus();
|
|
77646
77989
|
this.RequestData();
|
|
@@ -77921,6 +78264,9 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
77921
78264
|
this.MultiDayBeforeOpenData=MinuteChartContainer.JosnDataToBeforeOpenDataArray(data);
|
|
77922
78265
|
this.MultiDayAfterCloseData=MinuteChartContainer.JosnDataToAfterCloseDataArray(data);
|
|
77923
78266
|
var updateTime=MinuteChartContainer.JsonDataToHistoryMinuteLastUpdateTime(data);
|
|
78267
|
+
|
|
78268
|
+
this.DataStatus.MultiDay=true;
|
|
78269
|
+
|
|
77924
78270
|
this.CaclutateCallCationYRange();
|
|
77925
78271
|
this.Symbol=data.symbol;
|
|
77926
78272
|
this.Name=data.name;
|
|
@@ -78498,6 +78844,8 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
78498
78844
|
|
|
78499
78845
|
if (this.IsBeforeData) this.BeforeOpenData=beforeOpenData;
|
|
78500
78846
|
if (this.IsAfterData) this.AfterCloseData=afterCloseData;
|
|
78847
|
+
|
|
78848
|
+
this.DataStatus.LatestDay=true;
|
|
78501
78849
|
|
|
78502
78850
|
if (this.DayCount>1) //多日走势图
|
|
78503
78851
|
{
|