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.
@@ -155,7 +155,7 @@ function JSIndexScript()
155
155
  ['VRSI',this.VRSI],['HSCOL',this.HSCOL],['DBQRV',this.DBQRV],['DBLB',this.DBLB],
156
156
  ['ACD',this.ACD],['EXPMA',this.EXPMA],['EXPMA_S',this.EXPMA_S],['HMA',this.HMA],
157
157
  ['LMA',this.LMA],['VMA',this.VMA],['AMV',this.AMV],['BBIBOLL',this.BBIBOLL],
158
- ['ALLIGAT',this.ALLIGAT],['ZX',this.ZX],['XS',this.XS],['XS2',this.XS2],
158
+ ['ALLIGAT',this.ALLIGAT],["GMMA",this.GMMA],['ZX',this.ZX],['XS',this.XS],['XS2',this.XS2],
159
159
  ['SG-XDT',this.SG_XDT],['SG-SMX',this.SG_SMX],['SG-LB',this.SG_LB],['SG-PF',this.SG_PF],
160
160
  ['RAD',this.RAD],['SHT',this.SHT],['ZLJC',this.ZLJC],['ZLMM',this.ZLMM],['SLZT',this.SLZT],
161
161
  ['ADVOL',this.ADVOL],['CYC',this.CYC],['CYS',this.CYS],['CYQKL',this.CYQKL],
@@ -167,7 +167,8 @@ function JSIndexScript()
167
167
  ['神奇九转', this.NineTurns],
168
168
  ['EMA', this.EMA3], ['EMA4', this.EMA4], ['EMA5', this.EMA5],['EMA6', this.EMA6],
169
169
  ["ICHIMOKU",this.ICHIMOKU],["CDP-STD", this.CDP_STD],["TBP-STD",this.TBP_STD],
170
- ["ADX", this.ADX],
170
+ ["ADX", this.ADX],["SMACD", this.SMACD],["ACCER",this.ACCER],["AMO-TDX", this.AMO_TDX],
171
+ ["WSBVOL",this.WSBVOL], ["CCYD",this.CCYD], ["CCL",this.CCL],["ABI", this.ABI],
171
172
 
172
173
  ["持仓量", this.VOL_POSITION], //成交量+持仓量
173
174
 
@@ -187,11 +188,11 @@ function JSIndexScript()
187
188
 
188
189
  ["两融余额", this.Margin2],["两融余额2", this.Margin3],
189
190
 
190
- //外包指标
191
- ['放心股-操盘BS点',this.FXG_BSPoint],
192
- ['放心股-涨停多空线',this.FXG_INDEX],
193
- ['放心股-涨停吸筹区',this.FXG_INDEX2],
194
- ['放心股-量能黄金点',this.FXG_INDEX3],
191
+ //特色指标
192
+ ['特色指标-操盘BS点',this.FXG_BSPoint],
193
+ ['特色指标-涨停多空线',this.FXG_INDEX],
194
+ ['特色指标-涨停吸筹区',this.FXG_INDEX2],
195
+ ['特色指标-量能黄金点',this.FXG_INDEX3],
195
196
 
196
197
  //五彩K线(函数COLOR_开头)
197
198
  ['五彩K线-十字星',this.COLOR_KSTAR1],['五彩K线-早晨之星',this.COLOR_KSTAR2],['五彩K线-黄昏之星',this.COLOR_KSTAR3],['五彩K线-长十字',this.COLOR_SHI1],
@@ -752,6 +753,28 @@ MAVOL2:MA(VOLUME,M2);'
752
753
  return data;
753
754
  }
754
755
 
756
+
757
+ JSIndexScript.prototype.AMO_TDX=function()
758
+ {
759
+ let data=
760
+ {
761
+ Name:'AMO-TDX', Description:'成交金额(虚拟)', IsMainIndex:false,FloatPrecision:0,
762
+ Args:[ { Name:'M1', Value:5}, { Name:'M2', Value:10} ],
763
+ Script: //脚本
764
+ 'TOTAL:=IF(PERIOD=1,5,IF(PERIOD=2,15,IF(PERIOD=3,30,IF(PERIOD=4,60,IF(PERIOD=5,TOTALFZNUM,1)))));\n\
765
+ MTIME:=MOD(FROMOPEN,TOTAL);\n\
766
+ CTIME:=IF(MTIME<0.5,TOTAL,MTIME);\n\
767
+ VAMO:=IF((CURRBARSCOUNT=1 AND DYNAINFO(8)>1),AMOUNT/10000.0*TOTAL/CTIME,DRAWNULL);\n\
768
+ STICKLINE((CURRBARSCOUNT=1 AND DYNAINFO(8)>1),VAMO,0,-1,-1),COLOR00C0C0;\n\
769
+ AMOW:AMOUNT/10000.0,VOLSTICK;\n\
770
+ AMO1:MA(AMOW,M1);\n\
771
+ AMO2:MA(AMOW,M2);'
772
+
773
+ };
774
+
775
+ return data;
776
+ }
777
+
755
778
  JSIndexScript.prototype.RSI=function()
756
779
  {
757
780
  let data=
@@ -1489,6 +1512,40 @@ MACD:DIF-DEA,COLORSTICK;'
1489
1512
  return data;
1490
1513
  }
1491
1514
 
1515
+ JSIndexScript.prototype.SMACD = function ()
1516
+ {
1517
+ let data =
1518
+ {
1519
+ Name: 'SMACD', Description: '单线平滑异同平均线', IsMainIndex: false,
1520
+ Args: [{ Name: 'SHORT', Value: 12 },{ Name: 'LONG', Value: 26 },{ Name: 'MID', Value: 9 }],
1521
+ Script: //脚本
1522
+ 'DIF:=EMA(CLOSE,SHORT)-EMA(CLOSE,LONG);\n\
1523
+ DEA:EMA(DIF,MID);\n\
1524
+ MACD:DIF,COLORSTICK;'
1525
+
1526
+ };
1527
+
1528
+ return data;
1529
+ }
1530
+
1531
+
1532
+ JSIndexScript.prototype.ACCER = function ()
1533
+ {
1534
+ let data =
1535
+ {
1536
+ Name: 'ACCER', Description: '幅度涨速', IsMainIndex: false,
1537
+ Args: [{ Name: 'N', Value: 8 }],
1538
+ Script: //脚本
1539
+ 'ACCER:SLOPE(CLOSE,N)/CLOSE;'
1540
+
1541
+ };
1542
+
1543
+ return data;
1544
+ }
1545
+
1546
+
1547
+
1548
+
1492
1549
  JSIndexScript.prototype.QACD = function ()
1493
1550
  {
1494
1551
  let data =
@@ -1913,6 +1970,32 @@ JSIndexScript.prototype.ALLIGAT = function ()
1913
1970
  return data;
1914
1971
  }
1915
1972
 
1973
+
1974
+ JSIndexScript.prototype.GMMA = function ()
1975
+ {
1976
+ let data =
1977
+ {
1978
+ Name: 'GMMA', Description: '顾比均线', IsMainIndex: true,
1979
+ Args: [],
1980
+ Script: //脚本
1981
+ 'MA3:EMA(CLOSE,3),COLORC08080;\n\
1982
+ MA5:EMA(CLOSE,5),COLORC08080;\n\
1983
+ MA8:EMA(CLOSE,8),COLORC08080;\n\
1984
+ MA10:EMA(CLOSE,10),COLORC08080;\n\
1985
+ MA12:EMA(CLOSE,12),COLORC08080;\n\
1986
+ MA15:EMA(CLOSE,15),COLORC08080;\n\
1987
+ MA30:EMA(CLOSE,30),COLOR0080FF;\n\
1988
+ MA35:EMA(CLOSE,35),COLOR0080FF;\n\
1989
+ MA40:EMA(CLOSE,40),COLOR0080FF;\n\
1990
+ MA45:EMA(CLOSE,45),COLOR0080FF;\n\
1991
+ MA50:EMA(CLOSE,50),COLOR0080FF;\n\
1992
+ MA60:EMA(CLOSE,60),COLOR0080FF;'
1993
+
1994
+ };
1995
+
1996
+ return data;
1997
+ }
1998
+
1916
1999
  JSIndexScript.prototype.ZX = function ()
1917
2000
  {
1918
2001
  let data =
@@ -3949,6 +4032,94 @@ B:=REF(LLV(CLOSE,N),1);
3949
4032
  }
3950
4033
 
3951
4034
 
4035
+ JSIndexScript.prototype.WSBVOL = function()
4036
+ {
4037
+ let data =
4038
+ {
4039
+ Name: 'WSBVOL', Description: '维斯波成交量', IsMainIndex: false,
4040
+ Script: //脚本
4041
+ `UPTJ1:=CLOSE>REF(CLOSE,1);
4042
+ UPTJ2:=(CLOSE==REF(CLOSE,1) && REF(CLOSE,1)>REF(CLOSE,2));
4043
+ UPTJ3:=MAX(OPEN,CLOSE)<REF(C,BARSLAST(CLOSE>REF(CLOSE,1))) AND MIN(OPEN,CLOSE)>REF(O,BARSLAST(CLOSE>REF(CLOSE,1)));
4044
+ UPTJ4:=NOT (H<REF(H,1) AND L<REF(L,1));
4045
+ UP:=(UPTJ1 || UPTJ2 || UPTJ3) AND UPTJ4;
4046
+ DOWN:=NOT(UP);
4047
+ M1:=BARSLASTCOUNT(UP);
4048
+ N1:=BARSLASTCOUNT(DOWN);
4049
+ CZB:=IF(M1=1 OR N1=1,2*INTPART(VOL*100/10000),INTPART(VOL*100/10000));
4050
+ SZ:=IF(M1>0,SUM(CZB,M1),-1*SUM(CZB,N1));
4051
+ GY:=IF(N1>0,SUM(CZB,N1),0);
4052
+ XQ:=IF(M1>0,SUM(CZB,M1),0);
4053
+ NOTEXT1:STICKLINE(M1>0,0,XQ,1,0),COLORRED;
4054
+ NOTEXT2:STICKLINE(N1>0,0,GY,1,0),COLORGREEN;
4055
+ WSB:SZ,NODRAW;`
4056
+ };
4057
+
4058
+ return data;
4059
+ }
4060
+
4061
+
4062
+ JSIndexScript.prototype.CCL = function()
4063
+ {
4064
+ let data =
4065
+ {
4066
+ Name: 'CCL', Description: '持仓量(适用于期货)', IsMainIndex: false,
4067
+ Script: //脚本
4068
+ `持仓量:VOLINSTK;
4069
+ 成交:VOL,COLORLIRED;
4070
+ 仓差:VOLINSTK-REF(VOLINSTK,1),NODRAW;
4071
+ STICKLINE(仓差>0 AND C>REF(C,1),0,仓差,2,3),COLORRED;
4072
+ STICKLINE(仓差>0 AND C<REF(C,1),0,仓差,2,3),COLORCYAN;
4073
+ STICKLINE(仓差>0 AND C=REF(C,1),0,仓差,2,3),COLORGRAY;
4074
+ STICKLINE(仓差<0 AND C>REF(C,1),0,仓差,2,3),COLORRED;
4075
+ STICKLINE(仓差<0 AND C<REF(C,1),0,仓差,2,3),COLORCYAN;
4076
+ STICKLINE(仓差<0 AND C=REF(C,1),0,仓差,2,3),COLORGRAY;`
4077
+ };
4078
+
4079
+ return data;
4080
+ }
4081
+
4082
+ JSIndexScript.prototype.CCYD = function()
4083
+ {
4084
+ let data =
4085
+ {
4086
+ Name: 'CCYD', Description: '持仓异动(适用于期货)', IsMainIndex: false,
4087
+ Script: //脚本
4088
+ `CCYD:=VOLINSTK-REF(VOLINSTK,1);
4089
+ SPYD:=C-REF(C,1);
4090
+ 多头增仓:IF(SPYD>=0 AND CCYD>=0,ABS(CCYD),DRAWNULL),COLOR3232FF,NODRAW;
4091
+ 空头减仓:IF(SPYD>0 AND CCYD<0,ABS(CCYD),DRAWNULL),COLOR3232FF,NODRAW;
4092
+ 空头增仓:IF(SPYD<0 AND CCYD>=0,ABS(CCYD),DRAWNULL),COLORFFFF54,NODRAW;
4093
+ 多头减仓:IF(SPYD<0 AND CCYD<0,ABS(CCYD),DRAWNULL),COLORFFFF54,NODRAW;
4094
+ STICKLINE(SPYD>=0 AND CCYD>=0,0,CCYD,3,1),COLOR3232FF;
4095
+ STICKLINE(SPYD>0 AND CCYD<0,CCYD,0,3,1),COLOR3232FF;
4096
+ STICKLINE(SPYD<0 AND CCYD>=0,CCYD,0,3,0),COLORFFFF54;
4097
+ STICKLINE(SPYD<0 AND CCYD<0,CCYD,0,3,0),COLORFFFF54;`
4098
+ };
4099
+
4100
+ return data;
4101
+ }
4102
+
4103
+ JSIndexScript.prototype.ABI = function()
4104
+ {
4105
+ let data =
4106
+ {
4107
+ Name: 'ABI', Description: '绝对广量指标', IsMainIndex: false,
4108
+ Args: [{ Name: 'N', Value: 10 }],
4109
+ Condition:
4110
+ {
4111
+ Period:[CONDITION_PERIOD.KLINE_DAY_ID, CONDITION_PERIOD.KLINE_WEEK_ID, CONDITION_PERIOD.KLINE_TWOWEEK_ID,
4112
+ CONDITION_PERIOD.KLINE_MONTH_ID, CONDITION_PERIOD.KLINE_QUARTER_ID ,CONDITION_PERIOD.KLINE_YEAR_ID ],
4113
+ Include:["000001.SH", "000003.SH", "000016.SH", "000300.SH", "000905.SH", "399001.SZ", " 399005.SZ", "399006.SZ"]
4114
+ },
4115
+ Script: //脚本
4116
+ `ABI:100*ABS(ADVANCE-DECLINE)/(ADVANCE+DECLINE);
4117
+ MAABI:EMA(ABI,M);`
4118
+ };
4119
+
4120
+ return data;
4121
+ }
4122
+
3952
4123
 
3953
4124
 
3954
4125
 
@@ -4410,6 +4581,12 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4410
4581
  if (IFrameSplitOperator.IsNumber(item.ZIndex)) zindex=item.ZIndex;
4411
4582
  if (item.Enable) this.CreateExtraCanvasElement(JSChart.RectDragCanvasKey, { ZIndex:zindex }); //创建独立的区间选择画布
4412
4583
  }
4584
+
4585
+ if (option.DragKLine)
4586
+ {
4587
+ var item=option.DragKLine;
4588
+ if (IFrameSplitOperator.IsBool(item.EnableShfit)) chart.KLineDragConfig.EnableShfit=item.EnableShfit;
4589
+ }
4413
4590
  }
4414
4591
 
4415
4592
  //创建子窗口
@@ -4461,6 +4638,7 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4461
4638
  if (IFrameSplitOperator.IsNumber(item.PriceFormatType)) chart.ChartCorssCursor.StringFormatY.PriceFormatType=item.PriceFormatType;
4462
4639
  if (IFrameSplitOperator.IsNumber(item.DataFormatType)) chart.ChartCorssCursor.StringFormatY.DataFormatType=item.DataFormatType;
4463
4640
  if (IFrameSplitOperator.IsBool(item.EnableKeyboard)) chart.ChartCorssCursor.EnableKeyboard=item.EnableKeyboard;
4641
+ if (IFrameSplitOperator.IsBool(item.EnableDBClick)) chart.ChartCorssCursor.EnableDBClick=item.EnableDBClick;
4464
4642
 
4465
4643
  if (IFrameSplitOperator.IsBool(item.IsShowCorssPoint)) chart.ChartCorssCursor.CorssPointConfig.Enable=item.IsShowCorssPoint;
4466
4644
 
@@ -4966,6 +5144,7 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4966
5144
  if (IFrameSplitOperator.IsNumber(item.HPenType)) chart.ChartCorssCursor.HPenType=item.HPenType;
4967
5145
  if (IFrameSplitOperator.IsNumber(item.VPenType)) chart.ChartCorssCursor.VPenType=item.VPenType;
4968
5146
  if (IFrameSplitOperator.IsBool(item.EnableKeyboard)) chart.ChartCorssCursor.EnableKeyboard=item.EnableKeyboard;
5147
+ if (IFrameSplitOperator.IsBool(item.EnableDBClick)) chart.ChartCorssCursor.EnableDBClick=item.EnableDBClick;
4969
5148
  if (IFrameSplitOperator.IsBool(item.IsShowCorssPoint)) chart.ChartCorssCursor.CorssPointConfig.Enable=item.IsShowCorssPoint;
4970
5149
  if (IFrameSplitOperator.IsNumber(item.VLineType)) chart.ChartCorssCursor.VLineType=item.VLineType;
4971
5150
  }
@@ -6864,12 +7043,14 @@ var JSCHART_MENU_ID=
6864
7043
  CMD_CORSS_ON_VAILD_TIME_ID:50, //超出当前时间的,X轴调整到当前最后的时间(分时图)
6865
7044
  CMD_CORSS_ON_KLINE_ID:51, //十字光标只能画在K线上
6866
7045
  CMD_CORSS_POINT_ID:52, //十字光标圆点
7046
+
6867
7047
 
6868
7048
  CMD_RBUTTON_SELECT_RECT_ID:53, //右键区间选择
6869
7049
  CMD_LBUTTON_SELECT_RECT_ID:54, //左键区间选择
6870
7050
  CMD_ENABLE_XDRAG_BOTTOM_ID:55, //X轴拖动缩放
6871
7051
 
6872
7052
  CMD_FULLSCREEN_SUMMARY_ID:56, //当前屏区间统计
7053
+ CMD_CORSS_DBCLICK_ID:57, //双击显示隐藏十字光标
6873
7054
 
6874
7055
 
6875
7056
 
@@ -8163,6 +8344,17 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8163
8344
  document.oncontextmenu=(e)=> { this.DocContextMenu(e); }
8164
8345
  }
8165
8346
 
8347
+
8348
+ this.IsShfitDragKLine=function(e)
8349
+ {
8350
+ if (this.DragMode!=1) return false;
8351
+ if (!this.KLineDragConfig) return false;
8352
+ if (!this.KLineDragConfig.EnableShfit) return false;
8353
+ if (!e.shiftKey) return false;
8354
+
8355
+ return true;
8356
+ }
8357
+
8166
8358
  this.DocOnMouseMove=function(e)
8167
8359
  {
8168
8360
  //加载数据中,禁用鼠标事件
@@ -8178,6 +8370,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8178
8370
  var moveSetpY=Math.abs(drag.LastMove.Y-e.clientY);
8179
8371
  var isDragSelectRect=(this.RectSelectDrag && this.RectSelectDrag.Index>=0);
8180
8372
  var isDragSubSelectRect=(this.RectSelectDrag && this.RectSelectDrag.Type==4);
8373
+ var bShfitDragKLine=this.IsShfitDragKLine(e); //shift+鼠标移动K线
8181
8374
  if (drag.CurrentMove)
8182
8375
  {
8183
8376
  drag.CurrentMove.X=e.clientX;
@@ -8285,7 +8478,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8285
8478
  {
8286
8479
  this.OnDragXCoordinateZoom(drag, {X:moveSetp, Y:moveSetpY}, e);
8287
8480
  }
8288
- else if ((bLButtonSelectRect || bRButtonSelectRect) && !isDragSelectRect && !isDragSubSelectRect) //左右键区间选择
8481
+ else if ((bLButtonSelectRect || bRButtonSelectRect) && !isDragSelectRect && !isDragSubSelectRect && !bShfitDragKLine) //左右键区间选择
8289
8482
  {
8290
8483
  var yMoveSetp=Math.abs(drag.LastMove.Y-e.clientY);
8291
8484
 
@@ -8397,6 +8590,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8397
8590
  var isLeft=true;
8398
8591
  if (drag.LastMove.X<e.clientX) isLeft=false;//右移数据
8399
8592
 
8593
+ //按住shift才能移动K线
8594
+ if (this.KLineDragConfig && this.KLineDragConfig.EnableShfit && !e.shiftKey) return;
8595
+
8400
8596
  var cursorStatus="pointer";
8401
8597
  var oneStepWidth=this.GetMoveOneStepWidth();
8402
8598
  if (moveSetp<oneStepWidth)
@@ -8494,6 +8690,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8494
8690
  var isDragSelectRect=(this.RectSelectDrag && this.RectSelectDrag.Index>=0);
8495
8691
  var isDragSubSelectRect=(this.RectSelectDrag && this.RectSelectDrag.Type==4);
8496
8692
  var bClearDrawPicture=true;
8693
+ var bShfitDragKLine=this.IsShfitDragKLine(e);
8497
8694
  if (this.CurrentChartDrawPicture)
8498
8695
  {
8499
8696
  var drawPicture=this.CurrentChartDrawPicture;
@@ -8536,7 +8733,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8536
8733
  {
8537
8734
  if (this.OnMinuteSelectRectMouseUp) this.OnMinuteSelectRectMouseUp(e); //分时图区间选择
8538
8735
  }
8539
- else if (bLButtonSelectRect || bRButtonSelectRect) //K线图区间选择
8736
+ else if ((bLButtonSelectRect || bRButtonSelectRect) && !bShfitDragKLine) //K线图区间选择
8540
8737
  {
8541
8738
  var drag=this.MouseDrag;
8542
8739
  drag.LastMove.X=e.clientX;
@@ -9825,6 +10022,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9825
10022
  item.Draw();
9826
10023
  }
9827
10024
 
10025
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_5);
10026
+
9828
10027
  if (this.Frame.DrawOveraly)
9829
10028
  this.Frame.DrawOveraly(true); //画叠加指标
9830
10029
 
@@ -9848,9 +10047,14 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9848
10047
  item.Draw();
9849
10048
  }
9850
10049
 
10050
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_8);
10051
+
9851
10052
  if (this.Frame.DrawOveraly)
9852
10053
  this.Frame.DrawOveraly(false); //画叠加指标
9853
10054
 
10055
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_10);
10056
+
10057
+ /*
9854
10058
  //固定扩展图形
9855
10059
  for(var i=0;i<this.ExtendChartPaint.length;++i)
9856
10060
  {
@@ -9859,6 +10063,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9859
10063
  if (item.DrawAfterPicture) continue;
9860
10064
  if (!item.IsDynamic && item.IsAnimation==false) item.Draw();
9861
10065
  }
10066
+ */
9862
10067
 
9863
10068
  if (this.Frame.DrawInsideHorizontal) this.Frame.DrawInsideHorizontal();
9864
10069
  this.KLineIncreaseCustomHorizontal();
@@ -9887,6 +10092,10 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9887
10092
 
9888
10093
  var moveonPoint=null;
9889
10094
  if (this.LastMouseStatus && this.LastMouseStatus.MoveOnPoint) moveonPoint=this.LastMouseStatus.MoveOnPoint;
10095
+
10096
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_20, { MoveonPoint:moveonPoint} );
10097
+
10098
+ /*
9890
10099
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动态扩展图形
9891
10100
  {
9892
10101
  var item=this.ExtendChartPaint[i];
@@ -9898,6 +10107,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9898
10107
  if (item.DrawToolbar) item.DrawToolbar(moveonPoint);
9899
10108
  }
9900
10109
  }
10110
+ */
9901
10111
 
9902
10112
  for(var i=0;i<this.ChartDrawPicture.length;++i)
9903
10113
  {
@@ -9987,6 +10197,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9987
10197
  item.Draw(moveonPoint, this.LastMouseStatus);
9988
10198
  }
9989
10199
 
10200
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25);
10201
+ /*
9990
10202
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动态扩展图形
9991
10203
  {
9992
10204
  var item=this.ExtendChartPaint[i];
@@ -9994,7 +10206,11 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9994
10206
  if (item.DrawAfterPicture) continue;
9995
10207
  if (item.IsDynamic && item.DrawAfterTitle===true && item.IsAnimation==false) item.Draw();
9996
10208
  }
10209
+ */
10210
+
10211
+ if (this.EnableAnimation) this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_30);
9997
10212
 
10213
+ /*
9998
10214
  if (this.EnableAnimation)
9999
10215
  {
10000
10216
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动画
@@ -10003,6 +10219,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10003
10219
  if (item.IsAnimation===true) item.Draw();
10004
10220
  }
10005
10221
  }
10222
+ */
10006
10223
 
10007
10224
  for(var i=0;i<this.ChartDrawPicture.length;++i)
10008
10225
  {
@@ -10021,12 +10238,15 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10021
10238
  this.CurrentChartDrawPicture.Draw();
10022
10239
  }
10023
10240
 
10241
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_50);
10242
+ /*
10024
10243
  for(var i=0;i<this.ExtendChartPaint.length;++i) //画图工具绘制完成以后 动态扩展图形
10025
10244
  {
10026
10245
  var item=this.ExtendChartPaint[i];
10027
10246
  if (item.DrawAfterPicture)
10028
10247
  item.Draw();
10029
10248
  }
10249
+ */
10030
10250
 
10031
10251
  this.OffscreenToShowCanvas();
10032
10252
 
@@ -10055,6 +10275,45 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10055
10275
  ++this.TouchDrawCount;
10056
10276
  }
10057
10277
 
10278
+ this.DrawExtendChartPaint=function(level, option)
10279
+ {
10280
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.ExtendChartPaint)) return;
10281
+
10282
+ //扩展图形
10283
+ for(var i=0;i<this.ExtendChartPaint.length;++i)
10284
+ {
10285
+ var item=this.ExtendChartPaint[i];
10286
+ if (item.IsCallbackDraw) continue;
10287
+
10288
+ var value=item.GetPriority(); //绘图优先级
10289
+ if (value!=level) continue;
10290
+
10291
+ if (level==IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_20)
10292
+ {
10293
+ item.Draw();
10294
+ if (item.DrawToolbar && option) item.DrawToolbar(option.MoveonPoint, option.LastMouseStatus);
10295
+ }
10296
+ else if (level==IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25 && option)
10297
+ {
10298
+ if (item.ClassName=='KLineTooltipPaint' && option)
10299
+ {
10300
+ if (option.Tooltip==false) continue;
10301
+ if (option.Point) item.LatestPoint=option.Point;
10302
+ }
10303
+ else if (item.ClassName=="MinuteTooltipPaint" && option)
10304
+ {
10305
+ if (option.Point) item.LatestPoint=option.Point;
10306
+ }
10307
+
10308
+ item.Draw(option.MoveonPoint, option.LastMouseStatus);
10309
+ }
10310
+ else
10311
+ {
10312
+ item.Draw();
10313
+ }
10314
+ }
10315
+ }
10316
+
10058
10317
  this.PtInButton=function(x, y)
10059
10318
  {
10060
10319
  var button=this.Frame.PtInButtons(x,y);
@@ -10367,6 +10626,10 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10367
10626
 
10368
10627
  var moveonPoint=null;
10369
10628
  if (this.LastMouseStatus && this.LastMouseStatus.MoveOnPoint) moveonPoint=this.LastMouseStatus.MoveOnPoint;
10629
+
10630
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_20, { MoveonPoint:moveonPoint, LastMouseStatus:this.LastMouseStatus } );
10631
+
10632
+ /*
10370
10633
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动态扩展图形
10371
10634
  {
10372
10635
  var item=this.ExtendChartPaint[i];
@@ -10378,6 +10641,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10378
10641
  if (item.DrawToolbar) item.DrawToolbar(moveonPoint, this.LastMouseStatus);
10379
10642
  }
10380
10643
  }
10644
+ */
10381
10645
 
10382
10646
  for(var i=0;i<this.ChartDrawPicture.length;++i)
10383
10647
  {
@@ -10476,6 +10740,15 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10476
10740
  item.Draw(moveonPoint, this.LastMouseStatus);
10477
10741
  }
10478
10742
 
10743
+
10744
+ var exChartOption={ MoveonPoint:moveonPoint, LastMouseStatus:this.LastMouseStatus };
10745
+ if (option)
10746
+ {
10747
+ exChartOption.Tooltip=option.Tooltip;
10748
+ exChartOption.Point=option.Point;
10749
+ }
10750
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25,exChartOption);
10751
+ /*
10479
10752
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动态扩展图形 在动态标题以后画
10480
10753
  {
10481
10754
  var item=this.ExtendChartPaint[i];
@@ -10493,7 +10766,10 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10493
10766
 
10494
10767
  if (item.IsDynamic && item.DrawAfterTitle===true) item.Draw(moveonPoint, this.LastMouseStatus);
10495
10768
  }
10769
+ */
10496
10770
 
10771
+ if (this.EnableAnimation) this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_30);
10772
+ /*
10497
10773
  if (this.EnableAnimation)
10498
10774
  {
10499
10775
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动画
@@ -10502,6 +10778,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10502
10778
  if (item.IsAnimation===true) item.Draw();
10503
10779
  }
10504
10780
  }
10781
+ */
10505
10782
 
10506
10783
  for(var i=0;i<this.ChartDrawPicture.length;++i)
10507
10784
  {
@@ -10523,12 +10800,15 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10523
10800
  this.CurrentChartDrawPicture.Draw();
10524
10801
  }
10525
10802
 
10803
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_50);
10804
+ /*
10526
10805
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动态扩展图形
10527
10806
  {
10528
10807
  var item=this.ExtendChartPaint[i];
10529
10808
  if (item.DrawAfterPicture)
10530
10809
  item.Draw();
10531
10810
  }
10811
+ */
10532
10812
 
10533
10813
  if (this.LastMouseStatus.MouseOnToolbar) //工具栏按钮提示信息
10534
10814
  {
@@ -11005,7 +11285,12 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11005
11285
  }
11006
11286
 
11007
11287
  var draw=false;
11008
- if (this.ChartCorssCursor && this.ChartCorssCursor.OnKeyDown) //十字光标 隐藏显示
11288
+ if (keyID==27 && this.PopMinuteChart && this.PopMinuteChart.IsShow())
11289
+ {
11290
+ this.PopMinuteChart.Close();
11291
+ draw=true;
11292
+ }
11293
+ else if (this.ChartCorssCursor && this.ChartCorssCursor.OnKeyDown) //十字光标 隐藏显示
11009
11294
  {
11010
11295
  var sendData={ e:e, KeyID:keyID, Draw:false, PreventDefault:false };
11011
11296
  this.ChartCorssCursor.OnKeyDown(sendData);
@@ -11169,6 +11454,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11169
11454
  this.CurrentChartDrawPicture=null;
11170
11455
  }
11171
11456
  break;
11457
+ case 13: //回车
11458
+ if (this.OnCustomKeyDown) this.OnCustomKeyDown(keyID, e);
11459
+ break;
11172
11460
  default:
11173
11461
  return;
11174
11462
  }
@@ -11182,7 +11470,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11182
11470
 
11183
11471
  this.OnDoubleClick=function(x,y,e)
11184
11472
  {
11185
- //JSConsole.Chart.Log(e);
11473
+
11186
11474
  }
11187
11475
 
11188
11476
  this.ZoomIndexWindow=function(frameID, option) //最大化/最小化指标窗口
@@ -14538,6 +14826,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
14538
14826
  case JSCHART_MENU_ID.CMD_CORSS_POINT_ID:
14539
14827
  if (IFrameSplitOperator.IsBool(srcParam) && this.ChartCorssCursor) this.ChartCorssCursor.CorssPointConfig.Enable=srcParam;
14540
14828
  break;
14829
+ case JSCHART_MENU_ID.CMD_CORSS_DBCLICK_ID:
14830
+ if (IFrameSplitOperator.IsBool(srcParam) && this.ChartCorssCursor) this.ChartCorssCursor.EnableDBClick=srcParam;
14831
+ break;
14541
14832
  case JSCHART_MENU_ID.CMD_RBUTTON_SELECT_RECT_ID:
14542
14833
  if (IFrameSplitOperator.IsBool(srcParam) && this.ChartDragSelectRect) this.ChartDragSelectRect.EnableRButton=srcParam;
14543
14834
  break;
@@ -49220,12 +49511,34 @@ function IExtendChartPainting()
49220
49511
  this.IsCallbackDraw=false; //在回调函数里绘制, 不在Draw()中绘制
49221
49512
  this.ID=Guid();
49222
49513
 
49514
+ this.DrawPriority=null; //绘图优先级
49515
+
49223
49516
  //上下左右间距
49224
49517
  this.Left=5;
49225
49518
  this.Right=5;
49226
49519
  this.Top=5;
49227
49520
  this.Bottom=5;
49228
49521
 
49522
+
49523
+ this.GetPriority=function()
49524
+ {
49525
+ if (IFrameSplitOperator.IsNumber(this.DrawPriority)) return this.DrawPriority; //新版本
49526
+
49527
+ //老版本转换
49528
+
49529
+ if (!this.IsDynamic && !this.DrawAfterPicture) return IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_10;
49530
+
49531
+ if (this.DrawAfterTitle===false && this.IsAnimation==false) return IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_20;
49532
+
49533
+ if (this.DrawAfterTitle===true) return IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;
49534
+
49535
+ if (this.IsAnimation===true) return IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_35;
49536
+
49537
+ if (this.DrawAfterPicture===true) IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_50;
49538
+
49539
+ return IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_50
49540
+ }
49541
+
49229
49542
  this.Draw=function()
49230
49543
  {
49231
49544
 
@@ -49262,6 +49575,23 @@ function IExtendChartPainting()
49262
49575
  }
49263
49576
  }
49264
49577
 
49578
+ //绘图优先级
49579
+ IExtendChartPainting.DRAW_PRIORITY_ID=
49580
+ {
49581
+ LEVEL_1:1,
49582
+ LEVEL_5:5, // 叠加指数图形前面 指标图形 IsDrawFirst=true
49583
+ LEVEL_8:8, // 叠加指数图形前面 指标图形 IsDrawFirst=false
49584
+ LEVEL_10:10, // IsDynamic=false
49585
+
49586
+ LEVEL_20:20, // IsDynamic=true
49587
+
49588
+ LEVEL_25:25, // DrawAfterTitle=true 标题栏绘制完成以后
49589
+
49590
+ LEVEL_35:35, // IsAnimation=true
49591
+
49592
+ LEVEL_50:50, // DrawAfterPicture=true; 是否在画图工具以后绘制
49593
+ }
49594
+
49265
49595
  //K线Tooltip, 显示在左边或右边
49266
49596
  function KLineTooltipPaint()
49267
49597
  {
@@ -49281,6 +49611,7 @@ function KLineTooltipPaint()
49281
49611
  this.AmountColor=g_JSChartResource.TooltipPaint.AmountColor; //成交金额
49282
49612
  this.LatestPoint; //手势位置
49283
49613
  this.ShowPosition=0; //显示位置 0=左 1=右
49614
+ this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;
49284
49615
 
49285
49616
  this.Left=1*GetDevicePixelRatio();
49286
49617
  this.Top=5*GetDevicePixelRatio();
@@ -50024,6 +50355,7 @@ function MinuteLeftTooltipPaint()
50024
50355
  this.IsDynamic=true;
50025
50356
  this.IsEraseBG=true;
50026
50357
  this.DrawAfterTitle=true;
50358
+ this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;
50027
50359
  this.ClassName='MinuteLeftTooltipPaint';
50028
50360
  this.BorderColor=g_JSChartResource.PCTooltipPaint.BorderColor; //边框颜色
50029
50361
  this.BGColor=g_JSChartResource.PCTooltipPaint.BGColor; //背景色
@@ -50434,6 +50766,7 @@ function StockChip()
50434
50766
  this.PixelRatio=GetDevicePixelRatio();
50435
50767
  this.ShowType=0; //0=所有筹码 1=周期前 2=周期内
50436
50768
  this.IsDynamic=true;
50769
+ this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_20;
50437
50770
  this.ClientRect={};
50438
50771
  this.Font=g_JSChartResource.StockChip.Font;
50439
50772
  this.InfoColor=g_JSChartResource.StockChip.InfoColor;
@@ -54113,6 +54446,7 @@ function FrameButtomToolbarPaint()
54113
54446
  this.FrameGuid=null;
54114
54447
  this.IsDynamic=true;
54115
54448
  this.DrawAfterTitle=true;
54449
+ this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;
54116
54450
 
54117
54451
  this.AryButton=[]; // { Title:, ID:, Data:数据, TooltipText:提示信息 }
54118
54452
  this.SelectedID=null; // 选中按钮ID
@@ -58258,6 +58592,7 @@ function ChartCorssCursor()
58258
58592
  this.CallAcutionXOperator;
58259
58593
 
58260
58594
  this.EnableKeyboard=false; //是否支持键盘隐藏显示
58595
+ this.EnableDBClick=false; //是否允许双击显示|隐藏十字光标
58261
58596
  this.OnChangeStatusCallback; //状态切换以后回调
58262
58597
 
58263
58598
 
@@ -59486,6 +59821,27 @@ function ChartCorssCursor()
59486
59821
  }
59487
59822
  }
59488
59823
 
59824
+ this.OnDBClick=function(data)
59825
+ {
59826
+ if (!this.EnableDBClick) return;
59827
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.Frame.SubFrame)) return;
59828
+
59829
+ //在主图框架内
59830
+ var frame=this.Frame.SubFrame[0].Frame;
59831
+ if (!frame) return;
59832
+
59833
+ var border=frame.GetBorder();
59834
+ var rtClient={ Left:border.Left, Top:border.Top, Bottom:border.Bottom, Right:border.Right };
59835
+ var x=data.X, y=data.Y;
59836
+ if (x>=rtClient.Left && x<=rtClient.Right && y>=rtClient.Top && y<=rtClient.Bottom)
59837
+ {
59838
+ this.IsShowCorss=!this.IsShowCorss
59839
+ data.Draw=true;
59840
+
59841
+ if (this.OnChangeStatusCallback) this.OnChangeStatusCallback({ Type:1, IsShowCorss:this.IsShowCorss }, this);
59842
+ }
59843
+ }
59844
+
59489
59845
 
59490
59846
  this.DrawCorssPoint=function(x,y)
59491
59847
  {
@@ -80307,6 +80663,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
80307
80663
  { KeyID:87, SecondKeyID:3, CMD:JSCHART_MENU_ID.CMD_FULLSCREEN_SUMMARY_ID, Args:null, Description:"Alt+W 全屏区间统计" },
80308
80664
  ]
80309
80665
 
80666
+ this.KLineDragConfig={ EnableShfit:false }; //是否启动Shift+鼠标拖动K线
80667
+
80310
80668
  this.GetKLineCalulate=function()
80311
80669
  {
80312
80670
  var kLineDrawType=this.GetKLineDrawType();
@@ -81379,6 +81737,10 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
81379
81737
  this.MoveCorssCursorDown(this.ShiftUpDownStepPixel);
81380
81738
  return true;
81381
81739
  }
81740
+ else if (keyID==13) //回车显示分时图
81741
+ {
81742
+ this.OnEnterKeyDown();
81743
+ }
81382
81744
  else
81383
81745
  {
81384
81746
  return false;
@@ -81518,6 +81880,30 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
81518
81880
  this.ShowTooltipByKeyDown();
81519
81881
  }
81520
81882
 
81883
+ this.OnEnterKeyDown=function()
81884
+ {
81885
+ if (!this.PopMinuteChart) return false;
81886
+ if (!ChartData.IsDayPeriod(this.Period,true)) return false; //只支持日K
81887
+ if (!this.ChartCorssCursor || !this.ChartCorssCursor.IsShowCorss || this.ChartCorssCursor.ClientPos<0) return false;
81888
+ var index=this.ChartCorssCursor.CursorIndex;
81889
+ index=parseInt(index.toFixed(0));
81890
+ var kData=this.GetKData();
81891
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false;
81892
+ var dataIndex=kData.DataOffset+index;
81893
+ if (dataIndex<0 || dataIndex>=kData.Data.length) return false;
81894
+
81895
+ var kItem = kData.Data[dataIndex];
81896
+ if (!kItem) return false;
81897
+
81898
+ var frame=this.Frame.SubFrame[0].Frame;
81899
+ var x=frame.GetXFromIndex(index);
81900
+ var y=frame.GetYFromData(kItem.Close);
81901
+
81902
+ var data={ Chart:this, Tooltip:{ ChartPaint:this.ChartPaint[0], Data:kItem } };
81903
+
81904
+ this.ShowMinuteChartDialog(data, x, y);
81905
+ }
81906
+
81521
81907
  //获取K线图实例
81522
81908
  this.GetKLineChart=function()
81523
81909
  {
@@ -86275,12 +86661,14 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
86275
86661
  var bCorssDrawKLine=false;
86276
86662
  var bCorssDrawVaildTime=false;
86277
86663
  var bCorssDrawPoint=false;
86664
+ var bCorssBCClick=false;
86278
86665
  if (this.ChartCorssCursor)
86279
86666
  {
86280
86667
  bShowCorss=this.ChartCorssCursor.IsShowCorss;
86281
86668
  bCorssDrawKLine=this.ChartCorssCursor.IsOnlyDrawKLine && this.ChartCorssCursor.IsShowClose;
86282
86669
  bCorssDrawVaildTime=this.ChartCorssCursor.IsFixXLastTime;
86283
86670
  bCorssDrawPoint=this.ChartCorssCursor.CorssPointConfig.Enable;
86671
+ bCorssBCClick=this.ChartCorssCursor.EnableDBClick;
86284
86672
  }
86285
86673
 
86286
86674
  var bPopMinuteChart=false;
@@ -86466,6 +86854,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
86466
86854
  { Name:"显示在K线上", Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_ON_KLINE_ID, Args:[!bCorssDrawKLine]}, Checked:bCorssDrawKLine },
86467
86855
  { Name:"画在有效X轴上",Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_ON_VAILD_TIME_ID, Args:[!bCorssDrawVaildTime]}, Checked:bCorssDrawVaildTime },
86468
86856
  { Name:"画圆点",Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_POINT_ID, Args:[!bCorssDrawPoint]}, Checked:bCorssDrawPoint },
86857
+ { Name:"双击显示/隐藏", Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_DBCLICK_ID, Args:[!bCorssBCClick]}, Checked:bCorssBCClick },
86469
86858
  ]
86470
86859
  },
86471
86860
  {
@@ -86939,6 +87328,14 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
86939
87328
 
86940
87329
  this.OnDoubleClick=function(x,y,e)
86941
87330
  {
87331
+ var bDraw=false;
87332
+ if (this.ChartCorssCursor)
87333
+ {
87334
+ var data={ e:e, X:x, Y:y, Draw:false };
87335
+ this.ChartCorssCursor.OnDBClick(data);
87336
+ bDraw=data.Draw
87337
+ }
87338
+
86942
87339
  if (this.EnableYDrag && (this.EnableYDrag.Left || this.EnableYDrag.Right) && this.Frame && this.Frame.PtInFrameY)
86943
87340
  {
86944
87341
  var pixelTatio = GetDevicePixelRatio();
@@ -86975,6 +87372,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
86975
87372
  }
86976
87373
  }
86977
87374
 
87375
+ if (bDraw) this.Draw();
87376
+
86978
87377
  var tooltip=new TooltipData();
86979
87378
  if (!this.PtInChartPaintTooltip(x,y,tooltip))
86980
87379
  {
@@ -90536,12 +90935,14 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90536
90935
  var bCorssDrawCloseLine=false; //十字光标只能画在走势图价格线上
90537
90936
  var bCorssDrawVaildTime=false;
90538
90937
  var bCorssDrawPoint=false;
90938
+ var bCorssBCClick=false;
90539
90939
  if (this.ChartCorssCursor)
90540
90940
  {
90541
90941
  bShowCorss=this.ChartCorssCursor.IsShowCorss;
90542
90942
  bCorssDrawCloseLine=this.ChartCorssCursor.IsOnlyDrawMinute;
90543
90943
  bCorssDrawVaildTime=this.ChartCorssCursor.IsFixXLastTime;
90544
90944
  bCorssDrawPoint=this.ChartCorssCursor.CorssPointConfig.Enable;
90945
+ bCorssBCClick=this.ChartCorssCursor.EnableDBClick;
90545
90946
  }
90546
90947
 
90547
90948
  var bRButtonSelectRect=false,bLButtonSelectRect=false;
@@ -90638,6 +91039,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90638
91039
  { Name:"画在价格线上", Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_ON_CLOSE_LINE_ID, Args:[!bCorssDrawCloseLine]}, Checked:bCorssDrawCloseLine },
90639
91040
  { Name:"画在有效X轴上",Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_ON_VAILD_TIME_ID, Args:[!bCorssDrawVaildTime]}, Checked:bCorssDrawVaildTime },
90640
91041
  { Name:"画圆点",Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_POINT_ID, Args:[!bCorssDrawPoint]}, Checked:bCorssDrawPoint },
91042
+ { Name:"双击显示/隐藏", Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_DBCLICK_ID, Args:[!bCorssBCClick]}, Checked:bCorssBCClick },
90641
91043
  ]
90642
91044
  },
90643
91045
 
@@ -90778,6 +91180,14 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90778
91180
  {
90779
91181
  JSConsole.Chart.Log("[MinuteChartContainer::OnDoubleClick]", e);
90780
91182
 
91183
+ var bDraw=false;
91184
+ if (this.ChartCorssCursor)
91185
+ {
91186
+ var data={ e:e, X:x, Y:y, Draw:false };
91187
+ this.ChartCorssCursor.OnDBClick(data);
91188
+ bDraw=data.Draw
91189
+ }
91190
+
90781
91191
  if (this.EnableYDrag && (this.EnableYDrag.Left || this.EnableYDrag.Right) && this.Frame && this.Frame.PtInFrameY)
90782
91192
  {
90783
91193
  var pixelTatio = GetDevicePixelRatio();
@@ -90815,10 +91225,12 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90815
91225
  if (this.ZoomIndexWindow(frameId, {X:x, Y:y}))
90816
91226
  {
90817
91227
  this.Frame.SetSizeChage(true);
90818
- this.Draw();
91228
+ bDraw=true;
90819
91229
  }
90820
91230
  }
90821
91231
  }
91232
+
91233
+ if (bDraw) this.Draw();
90822
91234
  }
90823
91235
 
90824
91236
  this.GetDataItem=function(pointInfo)
@@ -104474,7 +104886,7 @@ function Node(ErrorHandler)
104474
104886
  //CAPITAL流通股本(手), EXCHANGE 换手率, TOTALCAPITAL 总股本(手)
104475
104887
  let setVariantName=new Set(
104476
104888
  [
104477
- "CAPITAL","TOTALCAPITAL","EXCHANGE",
104889
+ "CAPITAL","TOTALCAPITAL","EXCHANGE","HSL",
104478
104890
  "HYBLOCK","DYBLOCK","GNBLOCK","FGBLOCK","ZSBLOCK","ZHBLOCK","ZDBLOCK","HYZSCODE",
104479
104891
  "GNBLOCKNUM","FGBLOCKNUM","ZSBLOCKNUM","ZHBLOCKNUM","ZDBLOCKNUM",
104480
104892
  "HYSYL","HYSJL","FROMOPEN",
@@ -118018,7 +118430,7 @@ function JSSymbolData(ast,option,jsExecute)
118018
118430
  {
118019
118431
  var dataType=0;
118020
118432
  if (IFrameSplitOperator.IsNumber(recvData.DataType)) dataType=recvData.DataType;
118021
- self.RecvStockValue(recvData.Data,jobItem,key,dataType);
118433
+ self.RecvStockValue(recvData.Data,jobItem,key,dataType,recvData);
118022
118434
  }
118023
118435
 
118024
118436
  self.Execute.RunNextJob();
@@ -118033,7 +118445,7 @@ function JSSymbolData(ast,option,jsExecute)
118033
118445
  };
118034
118446
 
118035
118447
  var apiDownload;
118036
- if (jobItem.VariantName=="CAPITAL" || jobItem.VariantName=="TOTALCAPITAL" || jobItem.VariantName=="EXCHANGE")
118448
+ if (jobItem.VariantName=="CAPITAL" || jobItem.VariantName=="TOTALCAPITAL" || jobItem.VariantName=="EXCHANGE" || jobItem.VariantName=="HSL")
118037
118449
  {
118038
118450
  var callback=function(recvData, jobItem, key)
118039
118451
  {
@@ -118228,7 +118640,7 @@ function JSSymbolData(ast,option,jsExecute)
118228
118640
  }
118229
118641
  }
118230
118642
 
118231
- this.RecvStockValue=function(recvData,jobItem,key,dataType)
118643
+ this.RecvStockValue=function(recvData,jobItem,key,dataType, srcData)
118232
118644
  {
118233
118645
  if (!recvData)
118234
118646
  {
@@ -118259,8 +118671,9 @@ function JSSymbolData(ast,option,jsExecute)
118259
118671
  var bindData=new ChartData();
118260
118672
  bindData.Data=aryFittingData;
118261
118673
  var result=bindData.GetValue();
118674
+ var bVersion2=srcData && srcData.Ver==2; //2.0 版本
118262
118675
 
118263
- if (key=="EXCHANGE") //计算换手率=成交量/流通股本*100
118676
+ if (!bVersion2 && (key=="EXCHANGE" || key=="HSL")) //计算换手率=成交量/流通股本*100
118264
118677
  {
118265
118678
  for(var i in result)
118266
118679
  {
@@ -120280,7 +120693,7 @@ function JSExecute(ast,option)
120280
120693
 
120281
120694
  ['CAPITAL',null], //流通股本(手)
120282
120695
  ["TOTALCAPITAL",null], //TOTALCAPITAL 当前总股本 手
120283
- ['EXCHANGE',null], //换手率
120696
+ ['EXCHANGE',null], ["HSL",null], //换手率
120284
120697
  ['SETCODE', null], //市场类型
120285
120698
  ['CODE',null], //品种代码
120286
120699
  ['STKNAME',null], //品种名称
@@ -120530,6 +120943,7 @@ function JSExecute(ast,option)
120530
120943
  case "TOTALCAPITAL":
120531
120944
  case 'CAPITAL':
120532
120945
  case 'EXCHANGE':
120946
+ case "HSL":
120533
120947
 
120534
120948
  case "HYBLOCK":
120535
120949
  case "DYBLOCK":
@@ -122197,7 +122611,7 @@ function JSExplainer(ast,option)
122197
122611
  ['BARSTATUS',"数据位置状态"], //BARSTATUS返回数据位置信息,1表示第一根K线,2表示最后一个数据,0表示中间位置.
122198
122612
 
122199
122613
  ['CAPITAL',"当前流通股本(手)"], ["TOTALCAPITAL","当前总股本(手)"],
122200
- ['EXCHANGE',"换手率"], //换手率
122614
+ ['EXCHANGE',"换手率"], ['HSL',"换手线"],
122201
122615
  ['SETCODE', "市场类型"], //市场类型
122202
122616
  ['CODE',"品种代码"], //品种代码
122203
122617
  ['STKNAME',"品种名称"], //品种名称
@@ -129455,6 +129869,7 @@ function DownloadFinanceData(obj)
129455
129869
  case 1: //FINANCE(1) 总股本(随时间可能有变化) 股
129456
129870
  case 7: //FINANCE(7) 流通股本(随时间可能有变化) 股
129457
129871
  case "EXCHANGE": //换手率
129872
+ case "HSL"://换手率
129458
129873
  this.DownloadHistoryData(id);
129459
129874
  break;
129460
129875
  case 3:
@@ -129581,6 +129996,7 @@ function DownloadFinanceData(obj)
129581
129996
  return ["capital.total", "capital.date"];
129582
129997
  case 7:
129583
129998
  return ["capital.a", "capital.date"];
129999
+ case "HSL":
129584
130000
  case "EXCHANGE":
129585
130001
  return ["capital.a", "capital.date"];
129586
130002
 
@@ -129714,6 +130130,7 @@ function DownloadFinanceData(obj)
129714
130130
  if (!item.capital) return null;
129715
130131
  return { Date:date, Value:item.capital.total };
129716
130132
  case 7:
130133
+ case "HSL": //换手率
129717
130134
  case "EXCHANGE": //换手率 历史流通股本
129718
130135
  if (!item.capital) return null;
129719
130136
  return { Date:date, Value:item.capital.a };
@@ -155134,7 +155551,17 @@ JSDialogSearchIndex.GetDefaultIndexData=function()
155134
155551
  {Name:"OSC 变动速率线", ID:"OSC", Type:0},
155135
155552
  {Name:"RSI 相对强弱指标", ID:"RSI", Type:0},
155136
155553
  {Name:"ROC 变动率指标", ID:"ROC", Type:0},
155137
- {Name:"WR 威廉指标", ID:"WR", Type:0}
155554
+ {Name:"WR 威廉指标", ID:"WR", Type:0},
155555
+ {Name:"UDL 引力线", ID:"UDL", Type:0},
155556
+ {Name:"LWR 威廉指标", ID:"LWR", Type:0},
155557
+ {Name:"MARSI 相对强弱平均线", ID:"MARSI", Type:0},
155558
+ {Name:"ACCER 幅度涨速", ID:"ACCER", Type:0},
155559
+ {Name:"CYD 承接因子", ID:"CYD", Type:0},
155560
+ {Name:"CYF 市场能量", ID:"CYF", Type:0},
155561
+ {Name:"ADTM 动态买卖气指标", ID:"ADTM", Type:0},
155562
+ {Name:"ATR 真实波幅", ID:"ATR", Type:0},
155563
+ {Name:"DKX 多空线", ID:"DKX", Type:0},
155564
+ {Name:"TAPI 加权指数成交值", ID:"TAPI", Type:0},
155138
155565
  ]
155139
155566
  },
155140
155567
 
@@ -155149,7 +155576,22 @@ JSDialogSearchIndex.GetDefaultIndexData=function()
155149
155576
  {Name:"MACD 平滑异同平均", ID:"MACD", Type:0 },
155150
155577
  {Name:"TRIX 三重指数平均线", ID:"TRIX", Type:0 },
155151
155578
  {Name:"UOS 终极指标", ID:"UOS", Type:0 },
155152
- {Name:"TRIX 三重指数平均线", ID:"TRIX", Type:0 }
155579
+ {Name:"TRIX 三重指数平均线", ID:"TRIX", Type:0 },
155580
+ {Name:"VMACD 量平滑异同平均", ID:"VMACD", Type:0 },
155581
+
155582
+ {Name:"VMACD 量平滑异同平均", ID:"VMACD", Type:0 },
155583
+ {Name:"SMACD 单线平滑异同平均线", ID:"SMACD", Type:0 },
155584
+ {Name:"QACD 快速异同平均", ID:"QACD", Type:0 },
155585
+ {Name:"VPT 量价曲线", ID:"VPT", Type:0 },
155586
+ {Name:"WVAD 威廉变异离散量", ID:"WVAD", Type:0 },
155587
+
155588
+ {Name:"DBQR 对比强弱", ID:"DBQR", Type:0 },
155589
+ {Name:"WVAD 威廉变异离散量", ID:"WVAD", Type:0 },
155590
+ {Name:"JS 加速线", ID:"JS", Type:0 },
155591
+ {Name:"CYE 市场趋势", ID:"CYE", Type:0 },
155592
+ {Name:"QR 强弱指标", ID:"QR", Type:0 },
155593
+ {Name:"GDX 轨道线", ID:"GDX", Type:0 },
155594
+ {Name:"JLHB 绝路航标", ID:"JLHB", Type:0 },
155153
155595
  ]
155154
155596
  },
155155
155597
 
@@ -155161,7 +155603,18 @@ JSDialogSearchIndex.GetDefaultIndexData=function()
155161
155603
  {Name:"OBV 累积能量线", ID:"OBV", Type:0},
155162
155604
  {Name:"NVI 负成交量", ID:"NVI", Type:0},
155163
155605
  {Name:"PVI 正成交量", ID:"PVI", Type:0},
155164
- {Name:"VOL 成交量", ID:"VOL", Type:0}
155606
+ {Name:"VOL 成交量", ID:"VOL", Type:0},
155607
+ {Name:"VOL-TDX 成交量(虚拟)", ID:"VOL-TDX", Type:0},
155608
+ {Name:"AMO 成交金额", ID:"AMO", Type:0},
155609
+ {Name:"AMO-TDX 成交金额(虚拟)", ID:"AMO-TDX", Type:0},
155610
+ {Name:"VRSI 相对强弱量", ID:"VRSI", Type:0},
155611
+ {Name:"HSCOL 换手柱", ID:"HSCOL", Type:0},
155612
+ {Name:"DBQRV 对比强弱量", ID:"DBQRV", Type:0},
155613
+ {Name:"DBLB 对比量比", ID:"DBLB", Type:0},
155614
+ {Name:"WSBVOL 维斯波成交量", ID:"WSBVOL", Type:0},
155615
+
155616
+ {Name:"CCYD 持仓异动(适用于期货)", ID:"CCYD", Type:0},
155617
+ {Name:"CCL 持仓量(适用于期货)", ID:"CCL", Type:0},
155165
155618
  ]
155166
155619
  },
155167
155620
  {
@@ -155169,7 +155622,22 @@ JSDialogSearchIndex.GetDefaultIndexData=function()
155169
155622
  AryIndex:
155170
155623
  [
155171
155624
  {Name:"MA 均线", ID:"MA", Type:0},
155172
- {Name:"BBI 多空线", ID:"BBI", Type:0}
155625
+ {Name:"MA4 4根均线", ID:"MA4", Type:0},
155626
+ {Name:"MA5 5根均线", ID:"MA5", Type:0},
155627
+ {Name:"MA7 6根均线", ID:"MA6", Type:0},
155628
+ {Name:"MA7 7根均线", ID:"MA7", Type:0},
155629
+ {Name:"MA8 8根均线", ID:"MA8", Type:0},
155630
+ {Name:"BBI 多空线", ID:"BBI", Type:0},
155631
+ {Name:"ACD 升降线", ID:"ACD", Type:0},
155632
+ {Name:"EXPMA 指数平均线", ID:"EXPMA", Type:0},
155633
+ {Name:"EXPMA_S 指数平均线-副图", ID:"EXPMA_S", Type:0},
155634
+ {Name:"HMA 高价平均线", ID:"HMA", Type:0},
155635
+ {Name:"LMA 低价平均线", ID:"LMA", Type:0},
155636
+ {Name:"VMA 变异平均线", ID:"VMA", Type:0},
155637
+ {Name:"AMV 成本价均线", ID:"AMV", Type:0},
155638
+ {Name:"BBIBOLL 多空布林线", ID:"BBIBOLL", Type:0},
155639
+ {Name:"ALLIGAT 鳄鱼线", ID:"ALLIGAT", Type:0},
155640
+ {Name:"GMMA 顾比均线", ID:"GMMA", Type:0},
155173
155641
  ]
155174
155642
  },
155175
155643
  {
@@ -155177,9 +155645,13 @@ JSDialogSearchIndex.GetDefaultIndexData=function()
155177
155645
  AryIndex:
155178
155646
  [
155179
155647
  {Name:"BOLL 布林线", ID:"BOLL", Type:0},
155180
- {Name:"BOLL副图 布林线", ID:"BOLL副图", Type:0},
155648
+ {Name:"BOLL 布林线-副图", ID:"BOLL副图", Type:0},
155181
155649
  {Name:"MIKE 麦克支撑压力", ID:"MIKE", Type:0},
155182
- {Name:"ENE 轨道线", ID:"ENE", Type:0}
155650
+ {Name:"ENE 轨道线", ID:"ENE", Type:0},
155651
+ {Name:"PBX 瀑布线", ID:"PBX", Type:0},
155652
+ {Name:"XS 薛斯通道", ID:"XS", Type:0},
155653
+ {Name:"XS2 薛斯通道II", ID:"XS2", Type:0},
155654
+ {Name:"DC 唐奇安通道", ID:"DC", Type:0}
155183
155655
  ]
155184
155656
  },
155185
155657
  {
@@ -155192,9 +155664,19 @@ JSDialogSearchIndex.GetDefaultIndexData=function()
155192
155664
  {Name:"PSY 心理线", ID:"PSY", Type:0},
155193
155665
  {Name:"CR 带状能量线", ID:"CR", Type:0},
155194
155666
  {Name:"VR 成交量变异率", ID:"VR", Type:0},
155195
- {Name:"WAD 威廉多空力度线", ID:"WAD", Type:0}
155667
+ {Name:"WAD 威廉多空力度线", ID:"WAD", Type:0},
155668
+ {Name:"PCNT 幅度比", ID:"PCNT", Type:0}
155196
155669
  ]
155197
155670
  },
155671
+ {
155672
+ Group:{ ID:"大势型", Name:"大势型"},
155673
+ AryIndex:
155674
+ [
155675
+ {Name:"ABI 绝对广量指标", ID:"ABI", Type:0 },
155676
+ {Name:"ADL 腾落指标", ID:"ADL", Type:0 },
155677
+ ]
155678
+ },
155679
+
155198
155680
  {
155199
155681
  Group:{ ID:"五彩K线", Name:"五彩K线"} ,
155200
155682
  AryIndex:
@@ -155874,7 +156356,7 @@ function HQChartScriptWorker()
155874
156356
 
155875
156357
 
155876
156358
 
155877
- var HQCHART_VERSION="1.1.14575";
156359
+ var HQCHART_VERSION="1.1.14590";
155878
156360
 
155879
156361
  function PrintHQChartVersion()
155880
156362
  {