hqchart 1.1.14576 → 1.1.14591

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
+ */
9953
10166
 
10167
+ if (this.EnableAnimation) this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_30);
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);
@@ -11125,6 +11410,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11125
11410
  this.CurrentChartDrawPicture=null;
11126
11411
  }
11127
11412
  break;
11413
+ case 13: //回车
11414
+ if (this.OnCustomKeyDown) this.OnCustomKeyDown(keyID, e);
11415
+ break;
11128
11416
  default:
11129
11417
  return;
11130
11418
  }
@@ -11138,7 +11426,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11138
11426
 
11139
11427
  this.OnDoubleClick=function(x,y,e)
11140
11428
  {
11141
- //JSConsole.Chart.Log(e);
11429
+
11142
11430
  }
11143
11431
 
11144
11432
  this.ZoomIndexWindow=function(frameID, option) //最大化/最小化指标窗口
@@ -14494,6 +14782,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
14494
14782
  case JSCHART_MENU_ID.CMD_CORSS_POINT_ID:
14495
14783
  if (IFrameSplitOperator.IsBool(srcParam) && this.ChartCorssCursor) this.ChartCorssCursor.CorssPointConfig.Enable=srcParam;
14496
14784
  break;
14785
+ case JSCHART_MENU_ID.CMD_CORSS_DBCLICK_ID:
14786
+ if (IFrameSplitOperator.IsBool(srcParam) && this.ChartCorssCursor) this.ChartCorssCursor.EnableDBClick=srcParam;
14787
+ break;
14497
14788
  case JSCHART_MENU_ID.CMD_RBUTTON_SELECT_RECT_ID:
14498
14789
  if (IFrameSplitOperator.IsBool(srcParam) && this.ChartDragSelectRect) this.ChartDragSelectRect.EnableRButton=srcParam;
14499
14790
  break;
@@ -49176,12 +49467,34 @@ function IExtendChartPainting()
49176
49467
  this.IsCallbackDraw=false; //在回调函数里绘制, 不在Draw()中绘制
49177
49468
  this.ID=Guid();
49178
49469
 
49470
+ this.DrawPriority=null; //绘图优先级
49471
+
49179
49472
  //上下左右间距
49180
49473
  this.Left=5;
49181
49474
  this.Right=5;
49182
49475
  this.Top=5;
49183
49476
  this.Bottom=5;
49184
49477
 
49478
+
49479
+ this.GetPriority=function()
49480
+ {
49481
+ if (IFrameSplitOperator.IsNumber(this.DrawPriority)) return this.DrawPriority; //新版本
49482
+
49483
+ //老版本转换
49484
+
49485
+ if (!this.IsDynamic && !this.DrawAfterPicture) return IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_10;
49486
+
49487
+ if (this.DrawAfterTitle===false && this.IsAnimation==false) return IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_20;
49488
+
49489
+ if (this.DrawAfterTitle===true) return IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;
49490
+
49491
+ if (this.IsAnimation===true) return IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_35;
49492
+
49493
+ if (this.DrawAfterPicture===true) IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_50;
49494
+
49495
+ return IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_50
49496
+ }
49497
+
49185
49498
  this.Draw=function()
49186
49499
  {
49187
49500
 
@@ -49218,6 +49531,23 @@ function IExtendChartPainting()
49218
49531
  }
49219
49532
  }
49220
49533
 
49534
+ //绘图优先级
49535
+ IExtendChartPainting.DRAW_PRIORITY_ID=
49536
+ {
49537
+ LEVEL_1:1,
49538
+ LEVEL_5:5, // 叠加指数图形前面 指标图形 IsDrawFirst=true
49539
+ LEVEL_8:8, // 叠加指数图形前面 指标图形 IsDrawFirst=false
49540
+ LEVEL_10:10, // IsDynamic=false
49541
+
49542
+ LEVEL_20:20, // IsDynamic=true
49543
+
49544
+ LEVEL_25:25, // DrawAfterTitle=true 标题栏绘制完成以后
49545
+
49546
+ LEVEL_35:35, // IsAnimation=true
49547
+
49548
+ LEVEL_50:50, // DrawAfterPicture=true; 是否在画图工具以后绘制
49549
+ }
49550
+
49221
49551
  //K线Tooltip, 显示在左边或右边
49222
49552
  function KLineTooltipPaint()
49223
49553
  {
@@ -49237,6 +49567,7 @@ function KLineTooltipPaint()
49237
49567
  this.AmountColor=g_JSChartResource.TooltipPaint.AmountColor; //成交金额
49238
49568
  this.LatestPoint; //手势位置
49239
49569
  this.ShowPosition=0; //显示位置 0=左 1=右
49570
+ this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;
49240
49571
 
49241
49572
  this.Left=1*GetDevicePixelRatio();
49242
49573
  this.Top=5*GetDevicePixelRatio();
@@ -49980,6 +50311,7 @@ function MinuteLeftTooltipPaint()
49980
50311
  this.IsDynamic=true;
49981
50312
  this.IsEraseBG=true;
49982
50313
  this.DrawAfterTitle=true;
50314
+ this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;
49983
50315
  this.ClassName='MinuteLeftTooltipPaint';
49984
50316
  this.BorderColor=g_JSChartResource.PCTooltipPaint.BorderColor; //边框颜色
49985
50317
  this.BGColor=g_JSChartResource.PCTooltipPaint.BGColor; //背景色
@@ -50390,6 +50722,7 @@ function StockChip()
50390
50722
  this.PixelRatio=GetDevicePixelRatio();
50391
50723
  this.ShowType=0; //0=所有筹码 1=周期前 2=周期内
50392
50724
  this.IsDynamic=true;
50725
+ this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_20;
50393
50726
  this.ClientRect={};
50394
50727
  this.Font=g_JSChartResource.StockChip.Font;
50395
50728
  this.InfoColor=g_JSChartResource.StockChip.InfoColor;
@@ -54069,6 +54402,7 @@ function FrameButtomToolbarPaint()
54069
54402
  this.FrameGuid=null;
54070
54403
  this.IsDynamic=true;
54071
54404
  this.DrawAfterTitle=true;
54405
+ this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;
54072
54406
 
54073
54407
  this.AryButton=[]; // { Title:, ID:, Data:数据, TooltipText:提示信息 }
54074
54408
  this.SelectedID=null; // 选中按钮ID
@@ -58214,6 +58548,7 @@ function ChartCorssCursor()
58214
58548
  this.CallAcutionXOperator;
58215
58549
 
58216
58550
  this.EnableKeyboard=false; //是否支持键盘隐藏显示
58551
+ this.EnableDBClick=false; //是否允许双击显示|隐藏十字光标
58217
58552
  this.OnChangeStatusCallback; //状态切换以后回调
58218
58553
 
58219
58554
 
@@ -59442,6 +59777,27 @@ function ChartCorssCursor()
59442
59777
  }
59443
59778
  }
59444
59779
 
59780
+ this.OnDBClick=function(data)
59781
+ {
59782
+ if (!this.EnableDBClick) return;
59783
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.Frame.SubFrame)) return;
59784
+
59785
+ //在主图框架内
59786
+ var frame=this.Frame.SubFrame[0].Frame;
59787
+ if (!frame) return;
59788
+
59789
+ var border=frame.GetBorder();
59790
+ var rtClient={ Left:border.Left, Top:border.Top, Bottom:border.Bottom, Right:border.Right };
59791
+ var x=data.X, y=data.Y;
59792
+ if (x>=rtClient.Left && x<=rtClient.Right && y>=rtClient.Top && y<=rtClient.Bottom)
59793
+ {
59794
+ this.IsShowCorss=!this.IsShowCorss
59795
+ data.Draw=true;
59796
+
59797
+ if (this.OnChangeStatusCallback) this.OnChangeStatusCallback({ Type:1, IsShowCorss:this.IsShowCorss }, this);
59798
+ }
59799
+ }
59800
+
59445
59801
 
59446
59802
  this.DrawCorssPoint=function(x,y)
59447
59803
  {
@@ -80263,6 +80619,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
80263
80619
  { KeyID:87, SecondKeyID:3, CMD:JSCHART_MENU_ID.CMD_FULLSCREEN_SUMMARY_ID, Args:null, Description:"Alt+W 全屏区间统计" },
80264
80620
  ]
80265
80621
 
80622
+ this.KLineDragConfig={ EnableShfit:false }; //是否启动Shift+鼠标拖动K线
80623
+
80266
80624
  this.GetKLineCalulate=function()
80267
80625
  {
80268
80626
  var kLineDrawType=this.GetKLineDrawType();
@@ -81335,6 +81693,10 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
81335
81693
  this.MoveCorssCursorDown(this.ShiftUpDownStepPixel);
81336
81694
  return true;
81337
81695
  }
81696
+ else if (keyID==13) //回车显示分时图
81697
+ {
81698
+ this.OnEnterKeyDown();
81699
+ }
81338
81700
  else
81339
81701
  {
81340
81702
  return false;
@@ -81474,6 +81836,30 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
81474
81836
  this.ShowTooltipByKeyDown();
81475
81837
  }
81476
81838
 
81839
+ this.OnEnterKeyDown=function()
81840
+ {
81841
+ if (!this.PopMinuteChart) return false;
81842
+ if (!ChartData.IsDayPeriod(this.Period,true)) return false; //只支持日K
81843
+ if (!this.ChartCorssCursor || !this.ChartCorssCursor.IsShowCorss || this.ChartCorssCursor.ClientPos<0) return false;
81844
+ var index=this.ChartCorssCursor.CursorIndex;
81845
+ index=parseInt(index.toFixed(0));
81846
+ var kData=this.GetKData();
81847
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false;
81848
+ var dataIndex=kData.DataOffset+index;
81849
+ if (dataIndex<0 || dataIndex>=kData.Data.length) return false;
81850
+
81851
+ var kItem = kData.Data[dataIndex];
81852
+ if (!kItem) return false;
81853
+
81854
+ var frame=this.Frame.SubFrame[0].Frame;
81855
+ var x=frame.GetXFromIndex(index);
81856
+ var y=frame.GetYFromData(kItem.Close);
81857
+
81858
+ var data={ Chart:this, Tooltip:{ ChartPaint:this.ChartPaint[0], Data:kItem } };
81859
+
81860
+ this.ShowMinuteChartDialog(data, x, y);
81861
+ }
81862
+
81477
81863
  //获取K线图实例
81478
81864
  this.GetKLineChart=function()
81479
81865
  {
@@ -86231,12 +86617,14 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
86231
86617
  var bCorssDrawKLine=false;
86232
86618
  var bCorssDrawVaildTime=false;
86233
86619
  var bCorssDrawPoint=false;
86620
+ var bCorssBCClick=false;
86234
86621
  if (this.ChartCorssCursor)
86235
86622
  {
86236
86623
  bShowCorss=this.ChartCorssCursor.IsShowCorss;
86237
86624
  bCorssDrawKLine=this.ChartCorssCursor.IsOnlyDrawKLine && this.ChartCorssCursor.IsShowClose;
86238
86625
  bCorssDrawVaildTime=this.ChartCorssCursor.IsFixXLastTime;
86239
86626
  bCorssDrawPoint=this.ChartCorssCursor.CorssPointConfig.Enable;
86627
+ bCorssBCClick=this.ChartCorssCursor.EnableDBClick;
86240
86628
  }
86241
86629
 
86242
86630
  var bPopMinuteChart=false;
@@ -86422,6 +86810,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
86422
86810
  { Name:"显示在K线上", Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_ON_KLINE_ID, Args:[!bCorssDrawKLine]}, Checked:bCorssDrawKLine },
86423
86811
  { Name:"画在有效X轴上",Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_ON_VAILD_TIME_ID, Args:[!bCorssDrawVaildTime]}, Checked:bCorssDrawVaildTime },
86424
86812
  { Name:"画圆点",Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_POINT_ID, Args:[!bCorssDrawPoint]}, Checked:bCorssDrawPoint },
86813
+ { Name:"双击显示/隐藏", Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_DBCLICK_ID, Args:[!bCorssBCClick]}, Checked:bCorssBCClick },
86425
86814
  ]
86426
86815
  },
86427
86816
  {
@@ -86895,6 +87284,14 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
86895
87284
 
86896
87285
  this.OnDoubleClick=function(x,y,e)
86897
87286
  {
87287
+ var bDraw=false;
87288
+ if (this.ChartCorssCursor)
87289
+ {
87290
+ var data={ e:e, X:x, Y:y, Draw:false };
87291
+ this.ChartCorssCursor.OnDBClick(data);
87292
+ bDraw=data.Draw
87293
+ }
87294
+
86898
87295
  if (this.EnableYDrag && (this.EnableYDrag.Left || this.EnableYDrag.Right) && this.Frame && this.Frame.PtInFrameY)
86899
87296
  {
86900
87297
  var pixelTatio = GetDevicePixelRatio();
@@ -86931,6 +87328,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
86931
87328
  }
86932
87329
  }
86933
87330
 
87331
+ if (bDraw) this.Draw();
87332
+
86934
87333
  var tooltip=new TooltipData();
86935
87334
  if (!this.PtInChartPaintTooltip(x,y,tooltip))
86936
87335
  {
@@ -90492,12 +90891,14 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90492
90891
  var bCorssDrawCloseLine=false; //十字光标只能画在走势图价格线上
90493
90892
  var bCorssDrawVaildTime=false;
90494
90893
  var bCorssDrawPoint=false;
90894
+ var bCorssBCClick=false;
90495
90895
  if (this.ChartCorssCursor)
90496
90896
  {
90497
90897
  bShowCorss=this.ChartCorssCursor.IsShowCorss;
90498
90898
  bCorssDrawCloseLine=this.ChartCorssCursor.IsOnlyDrawMinute;
90499
90899
  bCorssDrawVaildTime=this.ChartCorssCursor.IsFixXLastTime;
90500
90900
  bCorssDrawPoint=this.ChartCorssCursor.CorssPointConfig.Enable;
90901
+ bCorssBCClick=this.ChartCorssCursor.EnableDBClick;
90501
90902
  }
90502
90903
 
90503
90904
  var bRButtonSelectRect=false,bLButtonSelectRect=false;
@@ -90594,6 +90995,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90594
90995
  { Name:"画在价格线上", Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_ON_CLOSE_LINE_ID, Args:[!bCorssDrawCloseLine]}, Checked:bCorssDrawCloseLine },
90595
90996
  { Name:"画在有效X轴上",Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_ON_VAILD_TIME_ID, Args:[!bCorssDrawVaildTime]}, Checked:bCorssDrawVaildTime },
90596
90997
  { Name:"画圆点",Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_POINT_ID, Args:[!bCorssDrawPoint]}, Checked:bCorssDrawPoint },
90998
+ { Name:"双击显示/隐藏", Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_DBCLICK_ID, Args:[!bCorssBCClick]}, Checked:bCorssBCClick },
90597
90999
  ]
90598
91000
  },
90599
91001
 
@@ -90734,6 +91136,14 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90734
91136
  {
90735
91137
  JSConsole.Chart.Log("[MinuteChartContainer::OnDoubleClick]", e);
90736
91138
 
91139
+ var bDraw=false;
91140
+ if (this.ChartCorssCursor)
91141
+ {
91142
+ var data={ e:e, X:x, Y:y, Draw:false };
91143
+ this.ChartCorssCursor.OnDBClick(data);
91144
+ bDraw=data.Draw
91145
+ }
91146
+
90737
91147
  if (this.EnableYDrag && (this.EnableYDrag.Left || this.EnableYDrag.Right) && this.Frame && this.Frame.PtInFrameY)
90738
91148
  {
90739
91149
  var pixelTatio = GetDevicePixelRatio();
@@ -90771,10 +91181,12 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90771
91181
  if (this.ZoomIndexWindow(frameId, {X:x, Y:y}))
90772
91182
  {
90773
91183
  this.Frame.SetSizeChage(true);
90774
- this.Draw();
91184
+ bDraw=true;
90775
91185
  }
90776
91186
  }
90777
91187
  }
91188
+
91189
+ if (bDraw) this.Draw();
90778
91190
  }
90779
91191
 
90780
91192
  this.GetDataItem=function(pointInfo)
@@ -104430,7 +104842,7 @@ function Node(ErrorHandler)
104430
104842
  //CAPITAL流通股本(手), EXCHANGE 换手率, TOTALCAPITAL 总股本(手)
104431
104843
  let setVariantName=new Set(
104432
104844
  [
104433
- "CAPITAL","TOTALCAPITAL","EXCHANGE",
104845
+ "CAPITAL","TOTALCAPITAL","EXCHANGE","HSL",
104434
104846
  "HYBLOCK","DYBLOCK","GNBLOCK","FGBLOCK","ZSBLOCK","ZHBLOCK","ZDBLOCK","HYZSCODE",
104435
104847
  "GNBLOCKNUM","FGBLOCKNUM","ZSBLOCKNUM","ZHBLOCKNUM","ZDBLOCKNUM",
104436
104848
  "HYSYL","HYSJL","FROMOPEN",
@@ -117974,7 +118386,7 @@ function JSSymbolData(ast,option,jsExecute)
117974
118386
  {
117975
118387
  var dataType=0;
117976
118388
  if (IFrameSplitOperator.IsNumber(recvData.DataType)) dataType=recvData.DataType;
117977
- self.RecvStockValue(recvData.Data,jobItem,key,dataType);
118389
+ self.RecvStockValue(recvData.Data,jobItem,key,dataType,recvData);
117978
118390
  }
117979
118391
 
117980
118392
  self.Execute.RunNextJob();
@@ -117989,7 +118401,7 @@ function JSSymbolData(ast,option,jsExecute)
117989
118401
  };
117990
118402
 
117991
118403
  var apiDownload;
117992
- if (jobItem.VariantName=="CAPITAL" || jobItem.VariantName=="TOTALCAPITAL" || jobItem.VariantName=="EXCHANGE")
118404
+ if (jobItem.VariantName=="CAPITAL" || jobItem.VariantName=="TOTALCAPITAL" || jobItem.VariantName=="EXCHANGE" || jobItem.VariantName=="HSL")
117993
118405
  {
117994
118406
  var callback=function(recvData, jobItem, key)
117995
118407
  {
@@ -118184,7 +118596,7 @@ function JSSymbolData(ast,option,jsExecute)
118184
118596
  }
118185
118597
  }
118186
118598
 
118187
- this.RecvStockValue=function(recvData,jobItem,key,dataType)
118599
+ this.RecvStockValue=function(recvData,jobItem,key,dataType, srcData)
118188
118600
  {
118189
118601
  if (!recvData)
118190
118602
  {
@@ -118215,8 +118627,9 @@ function JSSymbolData(ast,option,jsExecute)
118215
118627
  var bindData=new ChartData();
118216
118628
  bindData.Data=aryFittingData;
118217
118629
  var result=bindData.GetValue();
118630
+ var bVersion2=srcData && srcData.Ver==2; //2.0 版本
118218
118631
 
118219
- if (key=="EXCHANGE") //计算换手率=成交量/流通股本*100
118632
+ if (!bVersion2 && (key=="EXCHANGE" || key=="HSL")) //计算换手率=成交量/流通股本*100
118220
118633
  {
118221
118634
  for(var i in result)
118222
118635
  {
@@ -120236,7 +120649,7 @@ function JSExecute(ast,option)
120236
120649
 
120237
120650
  ['CAPITAL',null], //流通股本(手)
120238
120651
  ["TOTALCAPITAL",null], //TOTALCAPITAL 当前总股本 手
120239
- ['EXCHANGE',null], //换手率
120652
+ ['EXCHANGE',null], ["HSL",null], //换手率
120240
120653
  ['SETCODE', null], //市场类型
120241
120654
  ['CODE',null], //品种代码
120242
120655
  ['STKNAME',null], //品种名称
@@ -120486,6 +120899,7 @@ function JSExecute(ast,option)
120486
120899
  case "TOTALCAPITAL":
120487
120900
  case 'CAPITAL':
120488
120901
  case 'EXCHANGE':
120902
+ case "HSL":
120489
120903
 
120490
120904
  case "HYBLOCK":
120491
120905
  case "DYBLOCK":
@@ -122153,7 +122567,7 @@ function JSExplainer(ast,option)
122153
122567
  ['BARSTATUS',"数据位置状态"], //BARSTATUS返回数据位置信息,1表示第一根K线,2表示最后一个数据,0表示中间位置.
122154
122568
 
122155
122569
  ['CAPITAL',"当前流通股本(手)"], ["TOTALCAPITAL","当前总股本(手)"],
122156
- ['EXCHANGE',"换手率"], //换手率
122570
+ ['EXCHANGE',"换手率"], ['HSL',"换手线"],
122157
122571
  ['SETCODE', "市场类型"], //市场类型
122158
122572
  ['CODE',"品种代码"], //品种代码
122159
122573
  ['STKNAME',"品种名称"], //品种名称
@@ -129411,6 +129825,7 @@ function DownloadFinanceData(obj)
129411
129825
  case 1: //FINANCE(1) 总股本(随时间可能有变化) 股
129412
129826
  case 7: //FINANCE(7) 流通股本(随时间可能有变化) 股
129413
129827
  case "EXCHANGE": //换手率
129828
+ case "HSL"://换手率
129414
129829
  this.DownloadHistoryData(id);
129415
129830
  break;
129416
129831
  case 3:
@@ -129537,6 +129952,7 @@ function DownloadFinanceData(obj)
129537
129952
  return ["capital.total", "capital.date"];
129538
129953
  case 7:
129539
129954
  return ["capital.a", "capital.date"];
129955
+ case "HSL":
129540
129956
  case "EXCHANGE":
129541
129957
  return ["capital.a", "capital.date"];
129542
129958
 
@@ -129670,6 +130086,7 @@ function DownloadFinanceData(obj)
129670
130086
  if (!item.capital) return null;
129671
130087
  return { Date:date, Value:item.capital.total };
129672
130088
  case 7:
130089
+ case "HSL": //换手率
129673
130090
  case "EXCHANGE": //换手率 历史流通股本
129674
130091
  if (!item.capital) return null;
129675
130092
  return { Date:date, Value:item.capital.a };
@@ -145239,7 +145656,7 @@ function ScrollBarBGChart()
145239
145656
 
145240
145657
 
145241
145658
 
145242
- var HQCHART_VERSION="1.1.14575";
145659
+ var HQCHART_VERSION="1.1.14590";
145243
145660
 
145244
145661
  function PrintHQChartVersion()
145245
145662
  {