hqchart 1.1.14576 → 1.1.14593

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.
@@ -111,7 +111,7 @@ function JSIndexScript()
111
111
  ['VRSI',this.VRSI],['HSCOL',this.HSCOL],['DBQRV',this.DBQRV],['DBLB',this.DBLB],
112
112
  ['ACD',this.ACD],['EXPMA',this.EXPMA],['EXPMA_S',this.EXPMA_S],['HMA',this.HMA],
113
113
  ['LMA',this.LMA],['VMA',this.VMA],['AMV',this.AMV],['BBIBOLL',this.BBIBOLL],
114
- ['ALLIGAT',this.ALLIGAT],['ZX',this.ZX],['XS',this.XS],['XS2',this.XS2],
114
+ ['ALLIGAT',this.ALLIGAT],["GMMA",this.GMMA],['ZX',this.ZX],['XS',this.XS],['XS2',this.XS2],
115
115
  ['SG-XDT',this.SG_XDT],['SG-SMX',this.SG_SMX],['SG-LB',this.SG_LB],['SG-PF',this.SG_PF],
116
116
  ['RAD',this.RAD],['SHT',this.SHT],['ZLJC',this.ZLJC],['ZLMM',this.ZLMM],['SLZT',this.SLZT],
117
117
  ['ADVOL',this.ADVOL],['CYC',this.CYC],['CYS',this.CYS],['CYQKL',this.CYQKL],
@@ -123,7 +123,8 @@ function JSIndexScript()
123
123
  ['神奇九转', this.NineTurns],
124
124
  ['EMA', this.EMA3], ['EMA4', this.EMA4], ['EMA5', this.EMA5],['EMA6', this.EMA6],
125
125
  ["ICHIMOKU",this.ICHIMOKU],["CDP-STD", this.CDP_STD],["TBP-STD",this.TBP_STD],
126
- ["ADX", this.ADX],
126
+ ["ADX", this.ADX],["SMACD", this.SMACD],["ACCER",this.ACCER],["AMO-TDX", this.AMO_TDX],
127
+ ["WSBVOL",this.WSBVOL], ["CCYD",this.CCYD], ["CCL",this.CCL],["ABI", this.ABI],
127
128
 
128
129
  ["持仓量", this.VOL_POSITION], //成交量+持仓量
129
130
 
@@ -143,11 +144,11 @@ function JSIndexScript()
143
144
 
144
145
  ["两融余额", this.Margin2],["两融余额2", this.Margin3],
145
146
 
146
- //外包指标
147
- ['放心股-操盘BS点',this.FXG_BSPoint],
148
- ['放心股-涨停多空线',this.FXG_INDEX],
149
- ['放心股-涨停吸筹区',this.FXG_INDEX2],
150
- ['放心股-量能黄金点',this.FXG_INDEX3],
147
+ //特色指标
148
+ ['特色指标-操盘BS点',this.FXG_BSPoint],
149
+ ['特色指标-涨停多空线',this.FXG_INDEX],
150
+ ['特色指标-涨停吸筹区',this.FXG_INDEX2],
151
+ ['特色指标-量能黄金点',this.FXG_INDEX3],
151
152
 
152
153
  //五彩K线(函数COLOR_开头)
153
154
  ['五彩K线-十字星',this.COLOR_KSTAR1],['五彩K线-早晨之星',this.COLOR_KSTAR2],['五彩K线-黄昏之星',this.COLOR_KSTAR3],['五彩K线-长十字',this.COLOR_SHI1],
@@ -708,6 +709,28 @@ MAVOL2:MA(VOLUME,M2);'
708
709
  return data;
709
710
  }
710
711
 
712
+
713
+ JSIndexScript.prototype.AMO_TDX=function()
714
+ {
715
+ let data=
716
+ {
717
+ Name:'AMO-TDX', Description:'成交金额(虚拟)', IsMainIndex:false,FloatPrecision:0,
718
+ Args:[ { Name:'M1', Value:5}, { Name:'M2', Value:10} ],
719
+ Script: //脚本
720
+ 'TOTAL:=IF(PERIOD=1,5,IF(PERIOD=2,15,IF(PERIOD=3,30,IF(PERIOD=4,60,IF(PERIOD=5,TOTALFZNUM,1)))));\n\
721
+ MTIME:=MOD(FROMOPEN,TOTAL);\n\
722
+ CTIME:=IF(MTIME<0.5,TOTAL,MTIME);\n\
723
+ VAMO:=IF((CURRBARSCOUNT=1 AND DYNAINFO(8)>1),AMOUNT/10000.0*TOTAL/CTIME,DRAWNULL);\n\
724
+ STICKLINE((CURRBARSCOUNT=1 AND DYNAINFO(8)>1),VAMO,0,-1,-1),COLOR00C0C0;\n\
725
+ AMOW:AMOUNT/10000.0,VOLSTICK;\n\
726
+ AMO1:MA(AMOW,M1);\n\
727
+ AMO2:MA(AMOW,M2);'
728
+
729
+ };
730
+
731
+ return data;
732
+ }
733
+
711
734
  JSIndexScript.prototype.RSI=function()
712
735
  {
713
736
  let data=
@@ -1445,6 +1468,40 @@ MACD:DIF-DEA,COLORSTICK;'
1445
1468
  return data;
1446
1469
  }
1447
1470
 
1471
+ JSIndexScript.prototype.SMACD = function ()
1472
+ {
1473
+ let data =
1474
+ {
1475
+ Name: 'SMACD', Description: '单线平滑异同平均线', IsMainIndex: false,
1476
+ Args: [{ Name: 'SHORT', Value: 12 },{ Name: 'LONG', Value: 26 },{ Name: 'MID', Value: 9 }],
1477
+ Script: //脚本
1478
+ 'DIF:=EMA(CLOSE,SHORT)-EMA(CLOSE,LONG);\n\
1479
+ DEA:EMA(DIF,MID);\n\
1480
+ MACD:DIF,COLORSTICK;'
1481
+
1482
+ };
1483
+
1484
+ return data;
1485
+ }
1486
+
1487
+
1488
+ JSIndexScript.prototype.ACCER = function ()
1489
+ {
1490
+ let data =
1491
+ {
1492
+ Name: 'ACCER', Description: '幅度涨速', IsMainIndex: false,
1493
+ Args: [{ Name: 'N', Value: 8 }],
1494
+ Script: //脚本
1495
+ 'ACCER:SLOPE(CLOSE,N)/CLOSE;'
1496
+
1497
+ };
1498
+
1499
+ return data;
1500
+ }
1501
+
1502
+
1503
+
1504
+
1448
1505
  JSIndexScript.prototype.QACD = function ()
1449
1506
  {
1450
1507
  let data =
@@ -1869,6 +1926,32 @@ JSIndexScript.prototype.ALLIGAT = function ()
1869
1926
  return data;
1870
1927
  }
1871
1928
 
1929
+
1930
+ JSIndexScript.prototype.GMMA = function ()
1931
+ {
1932
+ let data =
1933
+ {
1934
+ Name: 'GMMA', Description: '顾比均线', IsMainIndex: true,
1935
+ Args: [],
1936
+ Script: //脚本
1937
+ 'MA3:EMA(CLOSE,3),COLORC08080;\n\
1938
+ MA5:EMA(CLOSE,5),COLORC08080;\n\
1939
+ MA8:EMA(CLOSE,8),COLORC08080;\n\
1940
+ MA10:EMA(CLOSE,10),COLORC08080;\n\
1941
+ MA12:EMA(CLOSE,12),COLORC08080;\n\
1942
+ MA15:EMA(CLOSE,15),COLORC08080;\n\
1943
+ MA30:EMA(CLOSE,30),COLOR0080FF;\n\
1944
+ MA35:EMA(CLOSE,35),COLOR0080FF;\n\
1945
+ MA40:EMA(CLOSE,40),COLOR0080FF;\n\
1946
+ MA45:EMA(CLOSE,45),COLOR0080FF;\n\
1947
+ MA50:EMA(CLOSE,50),COLOR0080FF;\n\
1948
+ MA60:EMA(CLOSE,60),COLOR0080FF;'
1949
+
1950
+ };
1951
+
1952
+ return data;
1953
+ }
1954
+
1872
1955
  JSIndexScript.prototype.ZX = function ()
1873
1956
  {
1874
1957
  let data =
@@ -3905,6 +3988,94 @@ B:=REF(LLV(CLOSE,N),1);
3905
3988
  }
3906
3989
 
3907
3990
 
3991
+ JSIndexScript.prototype.WSBVOL = function()
3992
+ {
3993
+ let data =
3994
+ {
3995
+ Name: 'WSBVOL', Description: '维斯波成交量', IsMainIndex: false,
3996
+ Script: //脚本
3997
+ `UPTJ1:=CLOSE>REF(CLOSE,1);
3998
+ UPTJ2:=(CLOSE==REF(CLOSE,1) && REF(CLOSE,1)>REF(CLOSE,2));
3999
+ UPTJ3:=MAX(OPEN,CLOSE)<REF(C,BARSLAST(CLOSE>REF(CLOSE,1))) AND MIN(OPEN,CLOSE)>REF(O,BARSLAST(CLOSE>REF(CLOSE,1)));
4000
+ UPTJ4:=NOT (H<REF(H,1) AND L<REF(L,1));
4001
+ UP:=(UPTJ1 || UPTJ2 || UPTJ3) AND UPTJ4;
4002
+ DOWN:=NOT(UP);
4003
+ M1:=BARSLASTCOUNT(UP);
4004
+ N1:=BARSLASTCOUNT(DOWN);
4005
+ CZB:=IF(M1=1 OR N1=1,2*INTPART(VOL*100/10000),INTPART(VOL*100/10000));
4006
+ SZ:=IF(M1>0,SUM(CZB,M1),-1*SUM(CZB,N1));
4007
+ GY:=IF(N1>0,SUM(CZB,N1),0);
4008
+ XQ:=IF(M1>0,SUM(CZB,M1),0);
4009
+ NOTEXT1:STICKLINE(M1>0,0,XQ,1,0),COLORRED;
4010
+ NOTEXT2:STICKLINE(N1>0,0,GY,1,0),COLORGREEN;
4011
+ WSB:SZ,NODRAW;`
4012
+ };
4013
+
4014
+ return data;
4015
+ }
4016
+
4017
+
4018
+ JSIndexScript.prototype.CCL = function()
4019
+ {
4020
+ let data =
4021
+ {
4022
+ Name: 'CCL', Description: '持仓量(适用于期货)', IsMainIndex: false,
4023
+ Script: //脚本
4024
+ `持仓量:VOLINSTK;
4025
+ 成交:VOL,COLORLIRED;
4026
+ 仓差:VOLINSTK-REF(VOLINSTK,1),NODRAW;
4027
+ STICKLINE(仓差>0 AND C>REF(C,1),0,仓差,2,3),COLORRED;
4028
+ STICKLINE(仓差>0 AND C<REF(C,1),0,仓差,2,3),COLORCYAN;
4029
+ STICKLINE(仓差>0 AND C=REF(C,1),0,仓差,2,3),COLORGRAY;
4030
+ STICKLINE(仓差<0 AND C>REF(C,1),0,仓差,2,3),COLORRED;
4031
+ STICKLINE(仓差<0 AND C<REF(C,1),0,仓差,2,3),COLORCYAN;
4032
+ STICKLINE(仓差<0 AND C=REF(C,1),0,仓差,2,3),COLORGRAY;`
4033
+ };
4034
+
4035
+ return data;
4036
+ }
4037
+
4038
+ JSIndexScript.prototype.CCYD = function()
4039
+ {
4040
+ let data =
4041
+ {
4042
+ Name: 'CCYD', Description: '持仓异动(适用于期货)', IsMainIndex: false,
4043
+ Script: //脚本
4044
+ `CCYD:=VOLINSTK-REF(VOLINSTK,1);
4045
+ SPYD:=C-REF(C,1);
4046
+ 多头增仓:IF(SPYD>=0 AND CCYD>=0,ABS(CCYD),DRAWNULL),COLOR3232FF,NODRAW;
4047
+ 空头减仓:IF(SPYD>0 AND CCYD<0,ABS(CCYD),DRAWNULL),COLOR3232FF,NODRAW;
4048
+ 空头增仓:IF(SPYD<0 AND CCYD>=0,ABS(CCYD),DRAWNULL),COLORFFFF54,NODRAW;
4049
+ 多头减仓:IF(SPYD<0 AND CCYD<0,ABS(CCYD),DRAWNULL),COLORFFFF54,NODRAW;
4050
+ STICKLINE(SPYD>=0 AND CCYD>=0,0,CCYD,3,1),COLOR3232FF;
4051
+ STICKLINE(SPYD>0 AND CCYD<0,CCYD,0,3,1),COLOR3232FF;
4052
+ STICKLINE(SPYD<0 AND CCYD>=0,CCYD,0,3,0),COLORFFFF54;
4053
+ STICKLINE(SPYD<0 AND CCYD<0,CCYD,0,3,0),COLORFFFF54;`
4054
+ };
4055
+
4056
+ return data;
4057
+ }
4058
+
4059
+ JSIndexScript.prototype.ABI = function()
4060
+ {
4061
+ let data =
4062
+ {
4063
+ Name: 'ABI', Description: '绝对广量指标', IsMainIndex: false,
4064
+ Args: [{ Name: 'N', Value: 10 }],
4065
+ Condition:
4066
+ {
4067
+ Period:[CONDITION_PERIOD.KLINE_DAY_ID, CONDITION_PERIOD.KLINE_WEEK_ID, CONDITION_PERIOD.KLINE_TWOWEEK_ID,
4068
+ CONDITION_PERIOD.KLINE_MONTH_ID, CONDITION_PERIOD.KLINE_QUARTER_ID ,CONDITION_PERIOD.KLINE_YEAR_ID ],
4069
+ Include:["000001.SH", "000003.SH", "000016.SH", "000300.SH", "000905.SH", "399001.SZ", " 399005.SZ", "399006.SZ"]
4070
+ },
4071
+ Script: //脚本
4072
+ `ABI:100*ABS(ADVANCE-DECLINE)/(ADVANCE+DECLINE);
4073
+ MAABI:EMA(ABI,M);`
4074
+ };
4075
+
4076
+ return data;
4077
+ }
4078
+
3908
4079
 
3909
4080
 
3910
4081
 
@@ -4366,6 +4537,12 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4366
4537
  if (IFrameSplitOperator.IsNumber(item.ZIndex)) zindex=item.ZIndex;
4367
4538
  if (item.Enable) this.CreateExtraCanvasElement(JSChart.RectDragCanvasKey, { ZIndex:zindex }); //创建独立的区间选择画布
4368
4539
  }
4540
+
4541
+ if (option.DragKLine)
4542
+ {
4543
+ var item=option.DragKLine;
4544
+ if (IFrameSplitOperator.IsBool(item.EnableShfit)) chart.KLineDragConfig.EnableShfit=item.EnableShfit;
4545
+ }
4369
4546
  }
4370
4547
 
4371
4548
  //创建子窗口
@@ -4417,6 +4594,7 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4417
4594
  if (IFrameSplitOperator.IsNumber(item.PriceFormatType)) chart.ChartCorssCursor.StringFormatY.PriceFormatType=item.PriceFormatType;
4418
4595
  if (IFrameSplitOperator.IsNumber(item.DataFormatType)) chart.ChartCorssCursor.StringFormatY.DataFormatType=item.DataFormatType;
4419
4596
  if (IFrameSplitOperator.IsBool(item.EnableKeyboard)) chart.ChartCorssCursor.EnableKeyboard=item.EnableKeyboard;
4597
+ if (IFrameSplitOperator.IsBool(item.EnableDBClick)) chart.ChartCorssCursor.EnableDBClick=item.EnableDBClick;
4420
4598
 
4421
4599
  if (IFrameSplitOperator.IsBool(item.IsShowCorssPoint)) chart.ChartCorssCursor.CorssPointConfig.Enable=item.IsShowCorssPoint;
4422
4600
 
@@ -4922,6 +5100,7 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4922
5100
  if (IFrameSplitOperator.IsNumber(item.HPenType)) chart.ChartCorssCursor.HPenType=item.HPenType;
4923
5101
  if (IFrameSplitOperator.IsNumber(item.VPenType)) chart.ChartCorssCursor.VPenType=item.VPenType;
4924
5102
  if (IFrameSplitOperator.IsBool(item.EnableKeyboard)) chart.ChartCorssCursor.EnableKeyboard=item.EnableKeyboard;
5103
+ if (IFrameSplitOperator.IsBool(item.EnableDBClick)) chart.ChartCorssCursor.EnableDBClick=item.EnableDBClick;
4925
5104
  if (IFrameSplitOperator.IsBool(item.IsShowCorssPoint)) chart.ChartCorssCursor.CorssPointConfig.Enable=item.IsShowCorssPoint;
4926
5105
  if (IFrameSplitOperator.IsNumber(item.VLineType)) chart.ChartCorssCursor.VLineType=item.VLineType;
4927
5106
  }
@@ -6820,12 +6999,14 @@ var JSCHART_MENU_ID=
6820
6999
  CMD_CORSS_ON_VAILD_TIME_ID:50, //超出当前时间的,X轴调整到当前最后的时间(分时图)
6821
7000
  CMD_CORSS_ON_KLINE_ID:51, //十字光标只能画在K线上
6822
7001
  CMD_CORSS_POINT_ID:52, //十字光标圆点
7002
+
6823
7003
 
6824
7004
  CMD_RBUTTON_SELECT_RECT_ID:53, //右键区间选择
6825
7005
  CMD_LBUTTON_SELECT_RECT_ID:54, //左键区间选择
6826
7006
  CMD_ENABLE_XDRAG_BOTTOM_ID:55, //X轴拖动缩放
6827
7007
 
6828
7008
  CMD_FULLSCREEN_SUMMARY_ID:56, //当前屏区间统计
7009
+ CMD_CORSS_DBCLICK_ID:57, //双击显示隐藏十字光标
6829
7010
 
6830
7011
 
6831
7012
 
@@ -8119,6 +8300,17 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8119
8300
  document.oncontextmenu=(e)=> { this.DocContextMenu(e); }
8120
8301
  }
8121
8302
 
8303
+
8304
+ this.IsShfitDragKLine=function(e)
8305
+ {
8306
+ if (this.DragMode!=1) return false;
8307
+ if (!this.KLineDragConfig) return false;
8308
+ if (!this.KLineDragConfig.EnableShfit) return false;
8309
+ if (!e.shiftKey) return false;
8310
+
8311
+ return true;
8312
+ }
8313
+
8122
8314
  this.DocOnMouseMove=function(e)
8123
8315
  {
8124
8316
  //加载数据中,禁用鼠标事件
@@ -8134,6 +8326,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8134
8326
  var moveSetpY=Math.abs(drag.LastMove.Y-e.clientY);
8135
8327
  var isDragSelectRect=(this.RectSelectDrag && this.RectSelectDrag.Index>=0);
8136
8328
  var isDragSubSelectRect=(this.RectSelectDrag && this.RectSelectDrag.Type==4);
8329
+ var bShfitDragKLine=this.IsShfitDragKLine(e); //shift+鼠标移动K线
8137
8330
  if (drag.CurrentMove)
8138
8331
  {
8139
8332
  drag.CurrentMove.X=e.clientX;
@@ -8241,7 +8434,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8241
8434
  {
8242
8435
  this.OnDragXCoordinateZoom(drag, {X:moveSetp, Y:moveSetpY}, e);
8243
8436
  }
8244
- else if ((bLButtonSelectRect || bRButtonSelectRect) && !isDragSelectRect && !isDragSubSelectRect) //左右键区间选择
8437
+ else if ((bLButtonSelectRect || bRButtonSelectRect) && !isDragSelectRect && !isDragSubSelectRect && !bShfitDragKLine) //左右键区间选择
8245
8438
  {
8246
8439
  var yMoveSetp=Math.abs(drag.LastMove.Y-e.clientY);
8247
8440
 
@@ -8353,6 +8546,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8353
8546
  var isLeft=true;
8354
8547
  if (drag.LastMove.X<e.clientX) isLeft=false;//右移数据
8355
8548
 
8549
+ //按住shift才能移动K线
8550
+ if (this.KLineDragConfig && this.KLineDragConfig.EnableShfit && !e.shiftKey) return;
8551
+
8356
8552
  var cursorStatus="pointer";
8357
8553
  var oneStepWidth=this.GetMoveOneStepWidth();
8358
8554
  if (moveSetp<oneStepWidth)
@@ -8450,6 +8646,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8450
8646
  var isDragSelectRect=(this.RectSelectDrag && this.RectSelectDrag.Index>=0);
8451
8647
  var isDragSubSelectRect=(this.RectSelectDrag && this.RectSelectDrag.Type==4);
8452
8648
  var bClearDrawPicture=true;
8649
+ var bShfitDragKLine=this.IsShfitDragKLine(e);
8453
8650
  if (this.CurrentChartDrawPicture)
8454
8651
  {
8455
8652
  var drawPicture=this.CurrentChartDrawPicture;
@@ -8492,7 +8689,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8492
8689
  {
8493
8690
  if (this.OnMinuteSelectRectMouseUp) this.OnMinuteSelectRectMouseUp(e); //分时图区间选择
8494
8691
  }
8495
- else if (bLButtonSelectRect || bRButtonSelectRect) //K线图区间选择
8692
+ else if ((bLButtonSelectRect || bRButtonSelectRect) && !bShfitDragKLine) //K线图区间选择
8496
8693
  {
8497
8694
  var drag=this.MouseDrag;
8498
8695
  drag.LastMove.X=e.clientX;
@@ -9781,6 +9978,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9781
9978
  item.Draw();
9782
9979
  }
9783
9980
 
9981
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_5);
9982
+
9784
9983
  if (this.Frame.DrawOveraly)
9785
9984
  this.Frame.DrawOveraly(true); //画叠加指标
9786
9985
 
@@ -9804,9 +10003,14 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9804
10003
  item.Draw();
9805
10004
  }
9806
10005
 
10006
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_8);
10007
+
9807
10008
  if (this.Frame.DrawOveraly)
9808
10009
  this.Frame.DrawOveraly(false); //画叠加指标
9809
10010
 
10011
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_10);
10012
+
10013
+ /*
9810
10014
  //固定扩展图形
9811
10015
  for(var i=0;i<this.ExtendChartPaint.length;++i)
9812
10016
  {
@@ -9815,6 +10019,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9815
10019
  if (item.DrawAfterPicture) continue;
9816
10020
  if (!item.IsDynamic && item.IsAnimation==false) item.Draw();
9817
10021
  }
10022
+ */
9818
10023
 
9819
10024
  if (this.Frame.DrawInsideHorizontal) this.Frame.DrawInsideHorizontal();
9820
10025
  this.KLineIncreaseCustomHorizontal();
@@ -9843,6 +10048,10 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9843
10048
 
9844
10049
  var moveonPoint=null;
9845
10050
  if (this.LastMouseStatus && this.LastMouseStatus.MoveOnPoint) moveonPoint=this.LastMouseStatus.MoveOnPoint;
10051
+
10052
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_20, { MoveonPoint:moveonPoint} );
10053
+
10054
+ /*
9846
10055
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动态扩展图形
9847
10056
  {
9848
10057
  var item=this.ExtendChartPaint[i];
@@ -9854,6 +10063,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9854
10063
  if (item.DrawToolbar) item.DrawToolbar(moveonPoint);
9855
10064
  }
9856
10065
  }
10066
+ */
9857
10067
 
9858
10068
  for(var i=0;i<this.ChartDrawPicture.length;++i)
9859
10069
  {
@@ -9943,6 +10153,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9943
10153
  item.Draw(moveonPoint, this.LastMouseStatus);
9944
10154
  }
9945
10155
 
10156
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25);
10157
+ /*
9946
10158
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动态扩展图形
9947
10159
  {
9948
10160
  var item=this.ExtendChartPaint[i];
@@ -9950,7 +10162,11 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9950
10162
  if (item.DrawAfterPicture) continue;
9951
10163
  if (item.IsDynamic && item.DrawAfterTitle===true && item.IsAnimation==false) item.Draw();
9952
10164
  }
10165
+ */
10166
+
10167
+ if (this.EnableAnimation) this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_30);
9953
10168
 
10169
+ /*
9954
10170
  if (this.EnableAnimation)
9955
10171
  {
9956
10172
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动画
@@ -9959,6 +10175,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9959
10175
  if (item.IsAnimation===true) item.Draw();
9960
10176
  }
9961
10177
  }
10178
+ */
9962
10179
 
9963
10180
  for(var i=0;i<this.ChartDrawPicture.length;++i)
9964
10181
  {
@@ -9977,12 +10194,15 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9977
10194
  this.CurrentChartDrawPicture.Draw();
9978
10195
  }
9979
10196
 
10197
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_50);
10198
+ /*
9980
10199
  for(var i=0;i<this.ExtendChartPaint.length;++i) //画图工具绘制完成以后 动态扩展图形
9981
10200
  {
9982
10201
  var item=this.ExtendChartPaint[i];
9983
10202
  if (item.DrawAfterPicture)
9984
10203
  item.Draw();
9985
10204
  }
10205
+ */
9986
10206
 
9987
10207
  this.OffscreenToShowCanvas();
9988
10208
 
@@ -10011,6 +10231,45 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10011
10231
  ++this.TouchDrawCount;
10012
10232
  }
10013
10233
 
10234
+ this.DrawExtendChartPaint=function(level, option)
10235
+ {
10236
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.ExtendChartPaint)) return;
10237
+
10238
+ //扩展图形
10239
+ for(var i=0;i<this.ExtendChartPaint.length;++i)
10240
+ {
10241
+ var item=this.ExtendChartPaint[i];
10242
+ if (item.IsCallbackDraw) continue;
10243
+
10244
+ var value=item.GetPriority(); //绘图优先级
10245
+ if (value!=level) continue;
10246
+
10247
+ if (level==IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_20)
10248
+ {
10249
+ item.Draw();
10250
+ if (item.DrawToolbar && option) item.DrawToolbar(option.MoveonPoint, option.LastMouseStatus);
10251
+ }
10252
+ else if (level==IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25 && option)
10253
+ {
10254
+ if (item.ClassName=='KLineTooltipPaint' && option)
10255
+ {
10256
+ if (option.Tooltip==false) continue;
10257
+ if (option.Point) item.LatestPoint=option.Point;
10258
+ }
10259
+ else if (item.ClassName=="MinuteTooltipPaint" && option)
10260
+ {
10261
+ if (option.Point) item.LatestPoint=option.Point;
10262
+ }
10263
+
10264
+ item.Draw(option.MoveonPoint, option.LastMouseStatus);
10265
+ }
10266
+ else
10267
+ {
10268
+ item.Draw();
10269
+ }
10270
+ }
10271
+ }
10272
+
10014
10273
  this.PtInButton=function(x, y)
10015
10274
  {
10016
10275
  var button=this.Frame.PtInButtons(x,y);
@@ -10323,6 +10582,10 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10323
10582
 
10324
10583
  var moveonPoint=null;
10325
10584
  if (this.LastMouseStatus && this.LastMouseStatus.MoveOnPoint) moveonPoint=this.LastMouseStatus.MoveOnPoint;
10585
+
10586
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_20, { MoveonPoint:moveonPoint, LastMouseStatus:this.LastMouseStatus } );
10587
+
10588
+ /*
10326
10589
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动态扩展图形
10327
10590
  {
10328
10591
  var item=this.ExtendChartPaint[i];
@@ -10334,6 +10597,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10334
10597
  if (item.DrawToolbar) item.DrawToolbar(moveonPoint, this.LastMouseStatus);
10335
10598
  }
10336
10599
  }
10600
+ */
10337
10601
 
10338
10602
  for(var i=0;i<this.ChartDrawPicture.length;++i)
10339
10603
  {
@@ -10432,6 +10696,15 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10432
10696
  item.Draw(moveonPoint, this.LastMouseStatus);
10433
10697
  }
10434
10698
 
10699
+
10700
+ var exChartOption={ MoveonPoint:moveonPoint, LastMouseStatus:this.LastMouseStatus };
10701
+ if (option)
10702
+ {
10703
+ exChartOption.Tooltip=option.Tooltip;
10704
+ exChartOption.Point=option.Point;
10705
+ }
10706
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25,exChartOption);
10707
+ /*
10435
10708
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动态扩展图形 在动态标题以后画
10436
10709
  {
10437
10710
  var item=this.ExtendChartPaint[i];
@@ -10449,7 +10722,10 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10449
10722
 
10450
10723
  if (item.IsDynamic && item.DrawAfterTitle===true) item.Draw(moveonPoint, this.LastMouseStatus);
10451
10724
  }
10725
+ */
10452
10726
 
10727
+ if (this.EnableAnimation) this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_30);
10728
+ /*
10453
10729
  if (this.EnableAnimation)
10454
10730
  {
10455
10731
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动画
@@ -10458,6 +10734,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10458
10734
  if (item.IsAnimation===true) item.Draw();
10459
10735
  }
10460
10736
  }
10737
+ */
10461
10738
 
10462
10739
  for(var i=0;i<this.ChartDrawPicture.length;++i)
10463
10740
  {
@@ -10479,12 +10756,15 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10479
10756
  this.CurrentChartDrawPicture.Draw();
10480
10757
  }
10481
10758
 
10759
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_50);
10760
+ /*
10482
10761
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动态扩展图形
10483
10762
  {
10484
10763
  var item=this.ExtendChartPaint[i];
10485
10764
  if (item.DrawAfterPicture)
10486
10765
  item.Draw();
10487
10766
  }
10767
+ */
10488
10768
 
10489
10769
  if (this.LastMouseStatus.MouseOnToolbar) //工具栏按钮提示信息
10490
10770
  {
@@ -10961,7 +11241,12 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10961
11241
  }
10962
11242
 
10963
11243
  var draw=false;
10964
- if (this.ChartCorssCursor && this.ChartCorssCursor.OnKeyDown) //十字光标 隐藏显示
11244
+ if (keyID==27 && this.PopMinuteChart && this.PopMinuteChart.IsShow())
11245
+ {
11246
+ this.PopMinuteChart.Close();
11247
+ draw=true;
11248
+ }
11249
+ else if (this.ChartCorssCursor && this.ChartCorssCursor.OnKeyDown) //十字光标 隐藏显示
10965
11250
  {
10966
11251
  var sendData={ e:e, KeyID:keyID, Draw:false, PreventDefault:false };
10967
11252
  this.ChartCorssCursor.OnKeyDown(sendData);
@@ -10984,6 +11269,15 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10984
11269
  if (this.OnCustomKeyDown(keyID, e))
10985
11270
  break;
10986
11271
  }
11272
+
11273
+ //K线 如果超出K线数据了 调整到最后一个数据
11274
+ if (this.FixCursorIndexValid && this.FixCursorIndexValid())
11275
+ {
11276
+ this.UpdatePointByCursorIndex();
11277
+ this.DrawDynamicInfo();
11278
+ this.ShowTooltipByKeyDown();
11279
+ break;
11280
+ }
10987
11281
 
10988
11282
  if (this.CursorIndex<=0.99999)
10989
11283
  {
@@ -11015,6 +11309,15 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11015
11309
  break;
11016
11310
  }
11017
11311
 
11312
+ //K线 如果超出K线数据了 调整到最后一个数据
11313
+ if (this.FixCursorIndexValid && this.FixCursorIndexValid())
11314
+ {
11315
+ this.UpdatePointByCursorIndex();
11316
+ this.DrawDynamicInfo();
11317
+ this.ShowTooltipByKeyDown();
11318
+ break;
11319
+ }
11320
+
11018
11321
  var xPointcount=0;
11019
11322
  if (this.Frame.XPointCount) xPointcount=this.Frame.XPointCount;
11020
11323
  else xPointcount=this.Frame.SubFrame[0].Frame.XPointCount;
@@ -11125,6 +11428,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11125
11428
  this.CurrentChartDrawPicture=null;
11126
11429
  }
11127
11430
  break;
11431
+ case 13: //回车
11432
+ if (this.OnCustomKeyDown) this.OnCustomKeyDown(keyID, e);
11433
+ break;
11128
11434
  default:
11129
11435
  return;
11130
11436
  }
@@ -11138,7 +11444,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11138
11444
 
11139
11445
  this.OnDoubleClick=function(x,y,e)
11140
11446
  {
11141
- //JSConsole.Chart.Log(e);
11447
+
11142
11448
  }
11143
11449
 
11144
11450
  this.ZoomIndexWindow=function(frameID, option) //最大化/最小化指标窗口
@@ -11432,13 +11738,21 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11432
11738
  return;
11433
11739
  }
11434
11740
 
11741
+ var kData=this.GetKData();
11742
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return;
11743
+
11435
11744
  var index=Math.abs(this.CursorIndex-0.5);
11436
11745
  index=parseInt(index.toFixed(0));
11437
11746
  if (this.ClassName=='KLineChartContainer' || this.ClassName=='KLineTrainChartContainer') index=this.CursorIndex;
11438
11747
 
11748
+ var dataIndex=kData.DataOffset+index;
11749
+ if (dataIndex<0 || dataIndex>=kData.Data.length) return;
11750
+ var kItem=kData.Data[dataIndex];
11751
+ if (!kItem) return;
11752
+
11439
11753
  var data=this.Frame.Data;
11440
11754
  var toolTip=new TooltipData();
11441
- toolTip.Data=data.Data[data.DataOffset+index];
11755
+ toolTip.Data=kItem;
11442
11756
  toolTip.ChartPaint=this.ChartPaint[0];
11443
11757
 
11444
11758
  var pixelTatio = GetDevicePixelRatio();
@@ -14494,6 +14808,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
14494
14808
  case JSCHART_MENU_ID.CMD_CORSS_POINT_ID:
14495
14809
  if (IFrameSplitOperator.IsBool(srcParam) && this.ChartCorssCursor) this.ChartCorssCursor.CorssPointConfig.Enable=srcParam;
14496
14810
  break;
14811
+ case JSCHART_MENU_ID.CMD_CORSS_DBCLICK_ID:
14812
+ if (IFrameSplitOperator.IsBool(srcParam) && this.ChartCorssCursor) this.ChartCorssCursor.EnableDBClick=srcParam;
14813
+ break;
14497
14814
  case JSCHART_MENU_ID.CMD_RBUTTON_SELECT_RECT_ID:
14498
14815
  if (IFrameSplitOperator.IsBool(srcParam) && this.ChartDragSelectRect) this.ChartDragSelectRect.EnableRButton=srcParam;
14499
14816
  break;
@@ -49176,12 +49493,34 @@ function IExtendChartPainting()
49176
49493
  this.IsCallbackDraw=false; //在回调函数里绘制, 不在Draw()中绘制
49177
49494
  this.ID=Guid();
49178
49495
 
49496
+ this.DrawPriority=null; //绘图优先级
49497
+
49179
49498
  //上下左右间距
49180
49499
  this.Left=5;
49181
49500
  this.Right=5;
49182
49501
  this.Top=5;
49183
49502
  this.Bottom=5;
49184
49503
 
49504
+
49505
+ this.GetPriority=function()
49506
+ {
49507
+ if (IFrameSplitOperator.IsNumber(this.DrawPriority)) return this.DrawPriority; //新版本
49508
+
49509
+ //老版本转换
49510
+
49511
+ if (!this.IsDynamic && !this.DrawAfterPicture) return IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_10;
49512
+
49513
+ if (this.DrawAfterTitle===false && this.IsAnimation==false) return IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_20;
49514
+
49515
+ if (this.DrawAfterTitle===true) return IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;
49516
+
49517
+ if (this.IsAnimation===true) return IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_35;
49518
+
49519
+ if (this.DrawAfterPicture===true) IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_50;
49520
+
49521
+ return IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_50
49522
+ }
49523
+
49185
49524
  this.Draw=function()
49186
49525
  {
49187
49526
 
@@ -49218,6 +49557,23 @@ function IExtendChartPainting()
49218
49557
  }
49219
49558
  }
49220
49559
 
49560
+ //绘图优先级
49561
+ IExtendChartPainting.DRAW_PRIORITY_ID=
49562
+ {
49563
+ LEVEL_1:1,
49564
+ LEVEL_5:5, // 叠加指数图形前面 指标图形 IsDrawFirst=true
49565
+ LEVEL_8:8, // 叠加指数图形前面 指标图形 IsDrawFirst=false
49566
+ LEVEL_10:10, // IsDynamic=false
49567
+
49568
+ LEVEL_20:20, // IsDynamic=true
49569
+
49570
+ LEVEL_25:25, // DrawAfterTitle=true 标题栏绘制完成以后
49571
+
49572
+ LEVEL_35:35, // IsAnimation=true
49573
+
49574
+ LEVEL_50:50, // DrawAfterPicture=true; 是否在画图工具以后绘制
49575
+ }
49576
+
49221
49577
  //K线Tooltip, 显示在左边或右边
49222
49578
  function KLineTooltipPaint()
49223
49579
  {
@@ -49237,6 +49593,7 @@ function KLineTooltipPaint()
49237
49593
  this.AmountColor=g_JSChartResource.TooltipPaint.AmountColor; //成交金额
49238
49594
  this.LatestPoint; //手势位置
49239
49595
  this.ShowPosition=0; //显示位置 0=左 1=右
49596
+ this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;
49240
49597
 
49241
49598
  this.Left=1*GetDevicePixelRatio();
49242
49599
  this.Top=5*GetDevicePixelRatio();
@@ -49980,6 +50337,7 @@ function MinuteLeftTooltipPaint()
49980
50337
  this.IsDynamic=true;
49981
50338
  this.IsEraseBG=true;
49982
50339
  this.DrawAfterTitle=true;
50340
+ this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;
49983
50341
  this.ClassName='MinuteLeftTooltipPaint';
49984
50342
  this.BorderColor=g_JSChartResource.PCTooltipPaint.BorderColor; //边框颜色
49985
50343
  this.BGColor=g_JSChartResource.PCTooltipPaint.BGColor; //背景色
@@ -50390,6 +50748,7 @@ function StockChip()
50390
50748
  this.PixelRatio=GetDevicePixelRatio();
50391
50749
  this.ShowType=0; //0=所有筹码 1=周期前 2=周期内
50392
50750
  this.IsDynamic=true;
50751
+ this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_20;
50393
50752
  this.ClientRect={};
50394
50753
  this.Font=g_JSChartResource.StockChip.Font;
50395
50754
  this.InfoColor=g_JSChartResource.StockChip.InfoColor;
@@ -54069,6 +54428,7 @@ function FrameButtomToolbarPaint()
54069
54428
  this.FrameGuid=null;
54070
54429
  this.IsDynamic=true;
54071
54430
  this.DrawAfterTitle=true;
54431
+ this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;
54072
54432
 
54073
54433
  this.AryButton=[]; // { Title:, ID:, Data:数据, TooltipText:提示信息 }
54074
54434
  this.SelectedID=null; // 选中按钮ID
@@ -58214,6 +58574,7 @@ function ChartCorssCursor()
58214
58574
  this.CallAcutionXOperator;
58215
58575
 
58216
58576
  this.EnableKeyboard=false; //是否支持键盘隐藏显示
58577
+ this.EnableDBClick=false; //是否允许双击显示|隐藏十字光标
58217
58578
  this.OnChangeStatusCallback; //状态切换以后回调
58218
58579
 
58219
58580
 
@@ -59442,6 +59803,27 @@ function ChartCorssCursor()
59442
59803
  }
59443
59804
  }
59444
59805
 
59806
+ this.OnDBClick=function(data)
59807
+ {
59808
+ if (!this.EnableDBClick) return;
59809
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.Frame.SubFrame)) return;
59810
+
59811
+ //在主图框架内
59812
+ var frame=this.Frame.SubFrame[0].Frame;
59813
+ if (!frame) return;
59814
+
59815
+ var border=frame.GetBorder();
59816
+ var rtClient={ Left:border.Left, Top:border.Top, Bottom:border.Bottom, Right:border.Right };
59817
+ var x=data.X, y=data.Y;
59818
+ if (x>=rtClient.Left && x<=rtClient.Right && y>=rtClient.Top && y<=rtClient.Bottom)
59819
+ {
59820
+ this.IsShowCorss=!this.IsShowCorss
59821
+ data.Draw=true;
59822
+
59823
+ if (this.OnChangeStatusCallback) this.OnChangeStatusCallback({ Type:1, IsShowCorss:this.IsShowCorss }, this);
59824
+ }
59825
+ }
59826
+
59445
59827
 
59446
59828
  this.DrawCorssPoint=function(x,y)
59447
59829
  {
@@ -80263,6 +80645,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
80263
80645
  { KeyID:87, SecondKeyID:3, CMD:JSCHART_MENU_ID.CMD_FULLSCREEN_SUMMARY_ID, Args:null, Description:"Alt+W 全屏区间统计" },
80264
80646
  ]
80265
80647
 
80648
+ this.KLineDragConfig={ EnableShfit:false }; //是否启动Shift+鼠标拖动K线
80649
+
80266
80650
  this.GetKLineCalulate=function()
80267
80651
  {
80268
80652
  var kLineDrawType=this.GetKLineDrawType();
@@ -81335,6 +81719,10 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
81335
81719
  this.MoveCorssCursorDown(this.ShiftUpDownStepPixel);
81336
81720
  return true;
81337
81721
  }
81722
+ else if (keyID==13) //回车显示分时图
81723
+ {
81724
+ this.OnEnterKeyDown();
81725
+ }
81338
81726
  else
81339
81727
  {
81340
81728
  return false;
@@ -81474,6 +81862,30 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
81474
81862
  this.ShowTooltipByKeyDown();
81475
81863
  }
81476
81864
 
81865
+ this.OnEnterKeyDown=function()
81866
+ {
81867
+ if (!this.PopMinuteChart) return false;
81868
+ if (!ChartData.IsDayPeriod(this.Period,true)) return false; //只支持日K
81869
+ if (!this.ChartCorssCursor || !this.ChartCorssCursor.IsShowCorss || this.ChartCorssCursor.ClientPos<0) return false;
81870
+ var index=this.ChartCorssCursor.CursorIndex;
81871
+ index=parseInt(index.toFixed(0));
81872
+ var kData=this.GetKData();
81873
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false;
81874
+ var dataIndex=kData.DataOffset+index;
81875
+ if (dataIndex<0 || dataIndex>=kData.Data.length) return false;
81876
+
81877
+ var kItem = kData.Data[dataIndex];
81878
+ if (!kItem) return false;
81879
+
81880
+ var frame=this.Frame.SubFrame[0].Frame;
81881
+ var x=frame.GetXFromIndex(index);
81882
+ var y=frame.GetYFromData(kItem.Close);
81883
+
81884
+ var data={ Chart:this, Tooltip:{ ChartPaint:this.ChartPaint[0], Data:kItem } };
81885
+
81886
+ this.ShowMinuteChartDialog(data, x, y);
81887
+ }
81888
+
81477
81889
  //获取K线图实例
81478
81890
  this.GetKLineChart=function()
81479
81891
  {
@@ -86231,12 +86643,14 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
86231
86643
  var bCorssDrawKLine=false;
86232
86644
  var bCorssDrawVaildTime=false;
86233
86645
  var bCorssDrawPoint=false;
86646
+ var bCorssBCClick=false;
86234
86647
  if (this.ChartCorssCursor)
86235
86648
  {
86236
86649
  bShowCorss=this.ChartCorssCursor.IsShowCorss;
86237
86650
  bCorssDrawKLine=this.ChartCorssCursor.IsOnlyDrawKLine && this.ChartCorssCursor.IsShowClose;
86238
86651
  bCorssDrawVaildTime=this.ChartCorssCursor.IsFixXLastTime;
86239
86652
  bCorssDrawPoint=this.ChartCorssCursor.CorssPointConfig.Enable;
86653
+ bCorssBCClick=this.ChartCorssCursor.EnableDBClick;
86240
86654
  }
86241
86655
 
86242
86656
  var bPopMinuteChart=false;
@@ -86422,6 +86836,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
86422
86836
  { Name:"显示在K线上", Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_ON_KLINE_ID, Args:[!bCorssDrawKLine]}, Checked:bCorssDrawKLine },
86423
86837
  { Name:"画在有效X轴上",Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_ON_VAILD_TIME_ID, Args:[!bCorssDrawVaildTime]}, Checked:bCorssDrawVaildTime },
86424
86838
  { Name:"画圆点",Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_POINT_ID, Args:[!bCorssDrawPoint]}, Checked:bCorssDrawPoint },
86839
+ { Name:"双击显示/隐藏", Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_DBCLICK_ID, Args:[!bCorssBCClick]}, Checked:bCorssBCClick },
86425
86840
  ]
86426
86841
  },
86427
86842
  {
@@ -86895,6 +87310,14 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
86895
87310
 
86896
87311
  this.OnDoubleClick=function(x,y,e)
86897
87312
  {
87313
+ var bDraw=false;
87314
+ if (this.ChartCorssCursor)
87315
+ {
87316
+ var data={ e:e, X:x, Y:y, Draw:false };
87317
+ this.ChartCorssCursor.OnDBClick(data);
87318
+ bDraw=data.Draw
87319
+ }
87320
+
86898
87321
  if (this.EnableYDrag && (this.EnableYDrag.Left || this.EnableYDrag.Right) && this.Frame && this.Frame.PtInFrameY)
86899
87322
  {
86900
87323
  var pixelTatio = GetDevicePixelRatio();
@@ -86931,6 +87354,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
86931
87354
  }
86932
87355
  }
86933
87356
 
87357
+ if (bDraw) this.Draw();
87358
+
86934
87359
  var tooltip=new TooltipData();
86935
87360
  if (!this.PtInChartPaintTooltip(x,y,tooltip))
86936
87361
  {
@@ -88255,6 +88680,22 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
88255
88680
 
88256
88681
  return result;
88257
88682
  }
88683
+
88684
+ //修正十字光标位置有效的K线
88685
+ this.FixCursorIndexValid=function()
88686
+ {
88687
+ var kData=this.GetKData();
88688
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false;
88689
+
88690
+ var dataIndex=this.CursorIndex+kData.DataOffset;
88691
+ if (dataIndex>=kData.Data.length)
88692
+ {
88693
+ this.CursorIndex=kData.Data.length-kData.DataOffset-1;
88694
+ return true;
88695
+ }
88696
+
88697
+ return false;
88698
+ }
88258
88699
  }
88259
88700
 
88260
88701
  //API 返回数据 转化为array[]
@@ -90492,12 +90933,14 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90492
90933
  var bCorssDrawCloseLine=false; //十字光标只能画在走势图价格线上
90493
90934
  var bCorssDrawVaildTime=false;
90494
90935
  var bCorssDrawPoint=false;
90936
+ var bCorssBCClick=false;
90495
90937
  if (this.ChartCorssCursor)
90496
90938
  {
90497
90939
  bShowCorss=this.ChartCorssCursor.IsShowCorss;
90498
90940
  bCorssDrawCloseLine=this.ChartCorssCursor.IsOnlyDrawMinute;
90499
90941
  bCorssDrawVaildTime=this.ChartCorssCursor.IsFixXLastTime;
90500
90942
  bCorssDrawPoint=this.ChartCorssCursor.CorssPointConfig.Enable;
90943
+ bCorssBCClick=this.ChartCorssCursor.EnableDBClick;
90501
90944
  }
90502
90945
 
90503
90946
  var bRButtonSelectRect=false,bLButtonSelectRect=false;
@@ -90594,6 +91037,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90594
91037
  { Name:"画在价格线上", Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_ON_CLOSE_LINE_ID, Args:[!bCorssDrawCloseLine]}, Checked:bCorssDrawCloseLine },
90595
91038
  { Name:"画在有效X轴上",Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_ON_VAILD_TIME_ID, Args:[!bCorssDrawVaildTime]}, Checked:bCorssDrawVaildTime },
90596
91039
  { Name:"画圆点",Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_POINT_ID, Args:[!bCorssDrawPoint]}, Checked:bCorssDrawPoint },
91040
+ { Name:"双击显示/隐藏", Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_DBCLICK_ID, Args:[!bCorssBCClick]}, Checked:bCorssBCClick },
90597
91041
  ]
90598
91042
  },
90599
91043
 
@@ -90734,6 +91178,14 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90734
91178
  {
90735
91179
  JSConsole.Chart.Log("[MinuteChartContainer::OnDoubleClick]", e);
90736
91180
 
91181
+ var bDraw=false;
91182
+ if (this.ChartCorssCursor)
91183
+ {
91184
+ var data={ e:e, X:x, Y:y, Draw:false };
91185
+ this.ChartCorssCursor.OnDBClick(data);
91186
+ bDraw=data.Draw
91187
+ }
91188
+
90737
91189
  if (this.EnableYDrag && (this.EnableYDrag.Left || this.EnableYDrag.Right) && this.Frame && this.Frame.PtInFrameY)
90738
91190
  {
90739
91191
  var pixelTatio = GetDevicePixelRatio();
@@ -90771,10 +91223,12 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90771
91223
  if (this.ZoomIndexWindow(frameId, {X:x, Y:y}))
90772
91224
  {
90773
91225
  this.Frame.SetSizeChage(true);
90774
- this.Draw();
91226
+ bDraw=true;
90775
91227
  }
90776
91228
  }
90777
91229
  }
91230
+
91231
+ if (bDraw) this.Draw();
90778
91232
  }
90779
91233
 
90780
91234
  this.GetDataItem=function(pointInfo)
@@ -104430,7 +104884,7 @@ function Node(ErrorHandler)
104430
104884
  //CAPITAL流通股本(手), EXCHANGE 换手率, TOTALCAPITAL 总股本(手)
104431
104885
  let setVariantName=new Set(
104432
104886
  [
104433
- "CAPITAL","TOTALCAPITAL","EXCHANGE",
104887
+ "CAPITAL","TOTALCAPITAL","EXCHANGE","HSL",
104434
104888
  "HYBLOCK","DYBLOCK","GNBLOCK","FGBLOCK","ZSBLOCK","ZHBLOCK","ZDBLOCK","HYZSCODE",
104435
104889
  "GNBLOCKNUM","FGBLOCKNUM","ZSBLOCKNUM","ZHBLOCKNUM","ZDBLOCKNUM",
104436
104890
  "HYSYL","HYSJL","FROMOPEN",
@@ -117974,7 +118428,7 @@ function JSSymbolData(ast,option,jsExecute)
117974
118428
  {
117975
118429
  var dataType=0;
117976
118430
  if (IFrameSplitOperator.IsNumber(recvData.DataType)) dataType=recvData.DataType;
117977
- self.RecvStockValue(recvData.Data,jobItem,key,dataType);
118431
+ self.RecvStockValue(recvData.Data,jobItem,key,dataType,recvData);
117978
118432
  }
117979
118433
 
117980
118434
  self.Execute.RunNextJob();
@@ -117989,7 +118443,7 @@ function JSSymbolData(ast,option,jsExecute)
117989
118443
  };
117990
118444
 
117991
118445
  var apiDownload;
117992
- if (jobItem.VariantName=="CAPITAL" || jobItem.VariantName=="TOTALCAPITAL" || jobItem.VariantName=="EXCHANGE")
118446
+ if (jobItem.VariantName=="CAPITAL" || jobItem.VariantName=="TOTALCAPITAL" || jobItem.VariantName=="EXCHANGE" || jobItem.VariantName=="HSL")
117993
118447
  {
117994
118448
  var callback=function(recvData, jobItem, key)
117995
118449
  {
@@ -118184,7 +118638,7 @@ function JSSymbolData(ast,option,jsExecute)
118184
118638
  }
118185
118639
  }
118186
118640
 
118187
- this.RecvStockValue=function(recvData,jobItem,key,dataType)
118641
+ this.RecvStockValue=function(recvData,jobItem,key,dataType, srcData)
118188
118642
  {
118189
118643
  if (!recvData)
118190
118644
  {
@@ -118215,8 +118669,9 @@ function JSSymbolData(ast,option,jsExecute)
118215
118669
  var bindData=new ChartData();
118216
118670
  bindData.Data=aryFittingData;
118217
118671
  var result=bindData.GetValue();
118672
+ var bVersion2=srcData && srcData.Ver==2; //2.0 版本
118218
118673
 
118219
- if (key=="EXCHANGE") //计算换手率=成交量/流通股本*100
118674
+ if (!bVersion2 && (key=="EXCHANGE" || key=="HSL")) //计算换手率=成交量/流通股本*100
118220
118675
  {
118221
118676
  for(var i in result)
118222
118677
  {
@@ -120236,7 +120691,7 @@ function JSExecute(ast,option)
120236
120691
 
120237
120692
  ['CAPITAL',null], //流通股本(手)
120238
120693
  ["TOTALCAPITAL",null], //TOTALCAPITAL 当前总股本 手
120239
- ['EXCHANGE',null], //换手率
120694
+ ['EXCHANGE',null], ["HSL",null], //换手率
120240
120695
  ['SETCODE', null], //市场类型
120241
120696
  ['CODE',null], //品种代码
120242
120697
  ['STKNAME',null], //品种名称
@@ -120486,6 +120941,7 @@ function JSExecute(ast,option)
120486
120941
  case "TOTALCAPITAL":
120487
120942
  case 'CAPITAL':
120488
120943
  case 'EXCHANGE':
120944
+ case "HSL":
120489
120945
 
120490
120946
  case "HYBLOCK":
120491
120947
  case "DYBLOCK":
@@ -122153,7 +122609,7 @@ function JSExplainer(ast,option)
122153
122609
  ['BARSTATUS',"数据位置状态"], //BARSTATUS返回数据位置信息,1表示第一根K线,2表示最后一个数据,0表示中间位置.
122154
122610
 
122155
122611
  ['CAPITAL',"当前流通股本(手)"], ["TOTALCAPITAL","当前总股本(手)"],
122156
- ['EXCHANGE',"换手率"], //换手率
122612
+ ['EXCHANGE',"换手率"], ['HSL',"换手线"],
122157
122613
  ['SETCODE', "市场类型"], //市场类型
122158
122614
  ['CODE',"品种代码"], //品种代码
122159
122615
  ['STKNAME',"品种名称"], //品种名称
@@ -129411,6 +129867,7 @@ function DownloadFinanceData(obj)
129411
129867
  case 1: //FINANCE(1) 总股本(随时间可能有变化) 股
129412
129868
  case 7: //FINANCE(7) 流通股本(随时间可能有变化) 股
129413
129869
  case "EXCHANGE": //换手率
129870
+ case "HSL"://换手率
129414
129871
  this.DownloadHistoryData(id);
129415
129872
  break;
129416
129873
  case 3:
@@ -129537,6 +129994,7 @@ function DownloadFinanceData(obj)
129537
129994
  return ["capital.total", "capital.date"];
129538
129995
  case 7:
129539
129996
  return ["capital.a", "capital.date"];
129997
+ case "HSL":
129540
129998
  case "EXCHANGE":
129541
129999
  return ["capital.a", "capital.date"];
129542
130000
 
@@ -129670,6 +130128,7 @@ function DownloadFinanceData(obj)
129670
130128
  if (!item.capital) return null;
129671
130129
  return { Date:date, Value:item.capital.total };
129672
130130
  case 7:
130131
+ case "HSL": //换手率
129673
130132
  case "EXCHANGE": //换手率 历史流通股本
129674
130133
  if (!item.capital) return null;
129675
130134
  return { Date:date, Value:item.capital.a };
@@ -145239,7 +145698,7 @@ function ScrollBarBGChart()
145239
145698
 
145240
145699
 
145241
145700
 
145242
- var HQCHART_VERSION="1.1.14575";
145701
+ var HQCHART_VERSION="1.1.14592";
145243
145702
 
145244
145703
  function PrintHQChartVersion()
145245
145704
  {