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.
@@ -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);
@@ -11028,6 +11313,15 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11028
11313
  if (this.OnCustomKeyDown(keyID, e))
11029
11314
  break;
11030
11315
  }
11316
+
11317
+ //K线 如果超出K线数据了 调整到最后一个数据
11318
+ if (this.FixCursorIndexValid && this.FixCursorIndexValid())
11319
+ {
11320
+ this.UpdatePointByCursorIndex();
11321
+ this.DrawDynamicInfo();
11322
+ this.ShowTooltipByKeyDown();
11323
+ break;
11324
+ }
11031
11325
 
11032
11326
  if (this.CursorIndex<=0.99999)
11033
11327
  {
@@ -11059,6 +11353,15 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11059
11353
  break;
11060
11354
  }
11061
11355
 
11356
+ //K线 如果超出K线数据了 调整到最后一个数据
11357
+ if (this.FixCursorIndexValid && this.FixCursorIndexValid())
11358
+ {
11359
+ this.UpdatePointByCursorIndex();
11360
+ this.DrawDynamicInfo();
11361
+ this.ShowTooltipByKeyDown();
11362
+ break;
11363
+ }
11364
+
11062
11365
  var xPointcount=0;
11063
11366
  if (this.Frame.XPointCount) xPointcount=this.Frame.XPointCount;
11064
11367
  else xPointcount=this.Frame.SubFrame[0].Frame.XPointCount;
@@ -11169,6 +11472,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11169
11472
  this.CurrentChartDrawPicture=null;
11170
11473
  }
11171
11474
  break;
11475
+ case 13: //回车
11476
+ if (this.OnCustomKeyDown) this.OnCustomKeyDown(keyID, e);
11477
+ break;
11172
11478
  default:
11173
11479
  return;
11174
11480
  }
@@ -11182,7 +11488,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11182
11488
 
11183
11489
  this.OnDoubleClick=function(x,y,e)
11184
11490
  {
11185
- //JSConsole.Chart.Log(e);
11491
+
11186
11492
  }
11187
11493
 
11188
11494
  this.ZoomIndexWindow=function(frameID, option) //最大化/最小化指标窗口
@@ -11476,13 +11782,21 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11476
11782
  return;
11477
11783
  }
11478
11784
 
11785
+ var kData=this.GetKData();
11786
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return;
11787
+
11479
11788
  var index=Math.abs(this.CursorIndex-0.5);
11480
11789
  index=parseInt(index.toFixed(0));
11481
11790
  if (this.ClassName=='KLineChartContainer' || this.ClassName=='KLineTrainChartContainer') index=this.CursorIndex;
11482
11791
 
11792
+ var dataIndex=kData.DataOffset+index;
11793
+ if (dataIndex<0 || dataIndex>=kData.Data.length) return;
11794
+ var kItem=kData.Data[dataIndex];
11795
+ if (!kItem) return;
11796
+
11483
11797
  var data=this.Frame.Data;
11484
11798
  var toolTip=new TooltipData();
11485
- toolTip.Data=data.Data[data.DataOffset+index];
11799
+ toolTip.Data=kItem;
11486
11800
  toolTip.ChartPaint=this.ChartPaint[0];
11487
11801
 
11488
11802
  var pixelTatio = GetDevicePixelRatio();
@@ -14538,6 +14852,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
14538
14852
  case JSCHART_MENU_ID.CMD_CORSS_POINT_ID:
14539
14853
  if (IFrameSplitOperator.IsBool(srcParam) && this.ChartCorssCursor) this.ChartCorssCursor.CorssPointConfig.Enable=srcParam;
14540
14854
  break;
14855
+ case JSCHART_MENU_ID.CMD_CORSS_DBCLICK_ID:
14856
+ if (IFrameSplitOperator.IsBool(srcParam) && this.ChartCorssCursor) this.ChartCorssCursor.EnableDBClick=srcParam;
14857
+ break;
14541
14858
  case JSCHART_MENU_ID.CMD_RBUTTON_SELECT_RECT_ID:
14542
14859
  if (IFrameSplitOperator.IsBool(srcParam) && this.ChartDragSelectRect) this.ChartDragSelectRect.EnableRButton=srcParam;
14543
14860
  break;
@@ -49220,12 +49537,34 @@ function IExtendChartPainting()
49220
49537
  this.IsCallbackDraw=false; //在回调函数里绘制, 不在Draw()中绘制
49221
49538
  this.ID=Guid();
49222
49539
 
49540
+ this.DrawPriority=null; //绘图优先级
49541
+
49223
49542
  //上下左右间距
49224
49543
  this.Left=5;
49225
49544
  this.Right=5;
49226
49545
  this.Top=5;
49227
49546
  this.Bottom=5;
49228
49547
 
49548
+
49549
+ this.GetPriority=function()
49550
+ {
49551
+ if (IFrameSplitOperator.IsNumber(this.DrawPriority)) return this.DrawPriority; //新版本
49552
+
49553
+ //老版本转换
49554
+
49555
+ if (!this.IsDynamic && !this.DrawAfterPicture) return IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_10;
49556
+
49557
+ if (this.DrawAfterTitle===false && this.IsAnimation==false) return IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_20;
49558
+
49559
+ if (this.DrawAfterTitle===true) return IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;
49560
+
49561
+ if (this.IsAnimation===true) return IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_35;
49562
+
49563
+ if (this.DrawAfterPicture===true) IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_50;
49564
+
49565
+ return IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_50
49566
+ }
49567
+
49229
49568
  this.Draw=function()
49230
49569
  {
49231
49570
 
@@ -49262,6 +49601,23 @@ function IExtendChartPainting()
49262
49601
  }
49263
49602
  }
49264
49603
 
49604
+ //绘图优先级
49605
+ IExtendChartPainting.DRAW_PRIORITY_ID=
49606
+ {
49607
+ LEVEL_1:1,
49608
+ LEVEL_5:5, // 叠加指数图形前面 指标图形 IsDrawFirst=true
49609
+ LEVEL_8:8, // 叠加指数图形前面 指标图形 IsDrawFirst=false
49610
+ LEVEL_10:10, // IsDynamic=false
49611
+
49612
+ LEVEL_20:20, // IsDynamic=true
49613
+
49614
+ LEVEL_25:25, // DrawAfterTitle=true 标题栏绘制完成以后
49615
+
49616
+ LEVEL_35:35, // IsAnimation=true
49617
+
49618
+ LEVEL_50:50, // DrawAfterPicture=true; 是否在画图工具以后绘制
49619
+ }
49620
+
49265
49621
  //K线Tooltip, 显示在左边或右边
49266
49622
  function KLineTooltipPaint()
49267
49623
  {
@@ -49281,6 +49637,7 @@ function KLineTooltipPaint()
49281
49637
  this.AmountColor=g_JSChartResource.TooltipPaint.AmountColor; //成交金额
49282
49638
  this.LatestPoint; //手势位置
49283
49639
  this.ShowPosition=0; //显示位置 0=左 1=右
49640
+ this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;
49284
49641
 
49285
49642
  this.Left=1*GetDevicePixelRatio();
49286
49643
  this.Top=5*GetDevicePixelRatio();
@@ -50024,6 +50381,7 @@ function MinuteLeftTooltipPaint()
50024
50381
  this.IsDynamic=true;
50025
50382
  this.IsEraseBG=true;
50026
50383
  this.DrawAfterTitle=true;
50384
+ this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;
50027
50385
  this.ClassName='MinuteLeftTooltipPaint';
50028
50386
  this.BorderColor=g_JSChartResource.PCTooltipPaint.BorderColor; //边框颜色
50029
50387
  this.BGColor=g_JSChartResource.PCTooltipPaint.BGColor; //背景色
@@ -50434,6 +50792,7 @@ function StockChip()
50434
50792
  this.PixelRatio=GetDevicePixelRatio();
50435
50793
  this.ShowType=0; //0=所有筹码 1=周期前 2=周期内
50436
50794
  this.IsDynamic=true;
50795
+ this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_20;
50437
50796
  this.ClientRect={};
50438
50797
  this.Font=g_JSChartResource.StockChip.Font;
50439
50798
  this.InfoColor=g_JSChartResource.StockChip.InfoColor;
@@ -54113,6 +54472,7 @@ function FrameButtomToolbarPaint()
54113
54472
  this.FrameGuid=null;
54114
54473
  this.IsDynamic=true;
54115
54474
  this.DrawAfterTitle=true;
54475
+ this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;
54116
54476
 
54117
54477
  this.AryButton=[]; // { Title:, ID:, Data:数据, TooltipText:提示信息 }
54118
54478
  this.SelectedID=null; // 选中按钮ID
@@ -58258,6 +58618,7 @@ function ChartCorssCursor()
58258
58618
  this.CallAcutionXOperator;
58259
58619
 
58260
58620
  this.EnableKeyboard=false; //是否支持键盘隐藏显示
58621
+ this.EnableDBClick=false; //是否允许双击显示|隐藏十字光标
58261
58622
  this.OnChangeStatusCallback; //状态切换以后回调
58262
58623
 
58263
58624
 
@@ -59486,6 +59847,27 @@ function ChartCorssCursor()
59486
59847
  }
59487
59848
  }
59488
59849
 
59850
+ this.OnDBClick=function(data)
59851
+ {
59852
+ if (!this.EnableDBClick) return;
59853
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.Frame.SubFrame)) return;
59854
+
59855
+ //在主图框架内
59856
+ var frame=this.Frame.SubFrame[0].Frame;
59857
+ if (!frame) return;
59858
+
59859
+ var border=frame.GetBorder();
59860
+ var rtClient={ Left:border.Left, Top:border.Top, Bottom:border.Bottom, Right:border.Right };
59861
+ var x=data.X, y=data.Y;
59862
+ if (x>=rtClient.Left && x<=rtClient.Right && y>=rtClient.Top && y<=rtClient.Bottom)
59863
+ {
59864
+ this.IsShowCorss=!this.IsShowCorss
59865
+ data.Draw=true;
59866
+
59867
+ if (this.OnChangeStatusCallback) this.OnChangeStatusCallback({ Type:1, IsShowCorss:this.IsShowCorss }, this);
59868
+ }
59869
+ }
59870
+
59489
59871
 
59490
59872
  this.DrawCorssPoint=function(x,y)
59491
59873
  {
@@ -80307,6 +80689,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
80307
80689
  { KeyID:87, SecondKeyID:3, CMD:JSCHART_MENU_ID.CMD_FULLSCREEN_SUMMARY_ID, Args:null, Description:"Alt+W 全屏区间统计" },
80308
80690
  ]
80309
80691
 
80692
+ this.KLineDragConfig={ EnableShfit:false }; //是否启动Shift+鼠标拖动K线
80693
+
80310
80694
  this.GetKLineCalulate=function()
80311
80695
  {
80312
80696
  var kLineDrawType=this.GetKLineDrawType();
@@ -81379,6 +81763,10 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
81379
81763
  this.MoveCorssCursorDown(this.ShiftUpDownStepPixel);
81380
81764
  return true;
81381
81765
  }
81766
+ else if (keyID==13) //回车显示分时图
81767
+ {
81768
+ this.OnEnterKeyDown();
81769
+ }
81382
81770
  else
81383
81771
  {
81384
81772
  return false;
@@ -81518,6 +81906,30 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
81518
81906
  this.ShowTooltipByKeyDown();
81519
81907
  }
81520
81908
 
81909
+ this.OnEnterKeyDown=function()
81910
+ {
81911
+ if (!this.PopMinuteChart) return false;
81912
+ if (!ChartData.IsDayPeriod(this.Period,true)) return false; //只支持日K
81913
+ if (!this.ChartCorssCursor || !this.ChartCorssCursor.IsShowCorss || this.ChartCorssCursor.ClientPos<0) return false;
81914
+ var index=this.ChartCorssCursor.CursorIndex;
81915
+ index=parseInt(index.toFixed(0));
81916
+ var kData=this.GetKData();
81917
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false;
81918
+ var dataIndex=kData.DataOffset+index;
81919
+ if (dataIndex<0 || dataIndex>=kData.Data.length) return false;
81920
+
81921
+ var kItem = kData.Data[dataIndex];
81922
+ if (!kItem) return false;
81923
+
81924
+ var frame=this.Frame.SubFrame[0].Frame;
81925
+ var x=frame.GetXFromIndex(index);
81926
+ var y=frame.GetYFromData(kItem.Close);
81927
+
81928
+ var data={ Chart:this, Tooltip:{ ChartPaint:this.ChartPaint[0], Data:kItem } };
81929
+
81930
+ this.ShowMinuteChartDialog(data, x, y);
81931
+ }
81932
+
81521
81933
  //获取K线图实例
81522
81934
  this.GetKLineChart=function()
81523
81935
  {
@@ -86275,12 +86687,14 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
86275
86687
  var bCorssDrawKLine=false;
86276
86688
  var bCorssDrawVaildTime=false;
86277
86689
  var bCorssDrawPoint=false;
86690
+ var bCorssBCClick=false;
86278
86691
  if (this.ChartCorssCursor)
86279
86692
  {
86280
86693
  bShowCorss=this.ChartCorssCursor.IsShowCorss;
86281
86694
  bCorssDrawKLine=this.ChartCorssCursor.IsOnlyDrawKLine && this.ChartCorssCursor.IsShowClose;
86282
86695
  bCorssDrawVaildTime=this.ChartCorssCursor.IsFixXLastTime;
86283
86696
  bCorssDrawPoint=this.ChartCorssCursor.CorssPointConfig.Enable;
86697
+ bCorssBCClick=this.ChartCorssCursor.EnableDBClick;
86284
86698
  }
86285
86699
 
86286
86700
  var bPopMinuteChart=false;
@@ -86466,6 +86880,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
86466
86880
  { Name:"显示在K线上", Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_ON_KLINE_ID, Args:[!bCorssDrawKLine]}, Checked:bCorssDrawKLine },
86467
86881
  { Name:"画在有效X轴上",Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_ON_VAILD_TIME_ID, Args:[!bCorssDrawVaildTime]}, Checked:bCorssDrawVaildTime },
86468
86882
  { Name:"画圆点",Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_POINT_ID, Args:[!bCorssDrawPoint]}, Checked:bCorssDrawPoint },
86883
+ { Name:"双击显示/隐藏", Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_DBCLICK_ID, Args:[!bCorssBCClick]}, Checked:bCorssBCClick },
86469
86884
  ]
86470
86885
  },
86471
86886
  {
@@ -86939,6 +87354,14 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
86939
87354
 
86940
87355
  this.OnDoubleClick=function(x,y,e)
86941
87356
  {
87357
+ var bDraw=false;
87358
+ if (this.ChartCorssCursor)
87359
+ {
87360
+ var data={ e:e, X:x, Y:y, Draw:false };
87361
+ this.ChartCorssCursor.OnDBClick(data);
87362
+ bDraw=data.Draw
87363
+ }
87364
+
86942
87365
  if (this.EnableYDrag && (this.EnableYDrag.Left || this.EnableYDrag.Right) && this.Frame && this.Frame.PtInFrameY)
86943
87366
  {
86944
87367
  var pixelTatio = GetDevicePixelRatio();
@@ -86975,6 +87398,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
86975
87398
  }
86976
87399
  }
86977
87400
 
87401
+ if (bDraw) this.Draw();
87402
+
86978
87403
  var tooltip=new TooltipData();
86979
87404
  if (!this.PtInChartPaintTooltip(x,y,tooltip))
86980
87405
  {
@@ -88299,6 +88724,22 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
88299
88724
 
88300
88725
  return result;
88301
88726
  }
88727
+
88728
+ //修正十字光标位置有效的K线
88729
+ this.FixCursorIndexValid=function()
88730
+ {
88731
+ var kData=this.GetKData();
88732
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false;
88733
+
88734
+ var dataIndex=this.CursorIndex+kData.DataOffset;
88735
+ if (dataIndex>=kData.Data.length)
88736
+ {
88737
+ this.CursorIndex=kData.Data.length-kData.DataOffset-1;
88738
+ return true;
88739
+ }
88740
+
88741
+ return false;
88742
+ }
88302
88743
  }
88303
88744
 
88304
88745
  //API 返回数据 转化为array[]
@@ -90536,12 +90977,14 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90536
90977
  var bCorssDrawCloseLine=false; //十字光标只能画在走势图价格线上
90537
90978
  var bCorssDrawVaildTime=false;
90538
90979
  var bCorssDrawPoint=false;
90980
+ var bCorssBCClick=false;
90539
90981
  if (this.ChartCorssCursor)
90540
90982
  {
90541
90983
  bShowCorss=this.ChartCorssCursor.IsShowCorss;
90542
90984
  bCorssDrawCloseLine=this.ChartCorssCursor.IsOnlyDrawMinute;
90543
90985
  bCorssDrawVaildTime=this.ChartCorssCursor.IsFixXLastTime;
90544
90986
  bCorssDrawPoint=this.ChartCorssCursor.CorssPointConfig.Enable;
90987
+ bCorssBCClick=this.ChartCorssCursor.EnableDBClick;
90545
90988
  }
90546
90989
 
90547
90990
  var bRButtonSelectRect=false,bLButtonSelectRect=false;
@@ -90638,6 +91081,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90638
91081
  { Name:"画在价格线上", Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_ON_CLOSE_LINE_ID, Args:[!bCorssDrawCloseLine]}, Checked:bCorssDrawCloseLine },
90639
91082
  { Name:"画在有效X轴上",Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_ON_VAILD_TIME_ID, Args:[!bCorssDrawVaildTime]}, Checked:bCorssDrawVaildTime },
90640
91083
  { Name:"画圆点",Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_POINT_ID, Args:[!bCorssDrawPoint]}, Checked:bCorssDrawPoint },
91084
+ { Name:"双击显示/隐藏", Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_DBCLICK_ID, Args:[!bCorssBCClick]}, Checked:bCorssBCClick },
90641
91085
  ]
90642
91086
  },
90643
91087
 
@@ -90778,6 +91222,14 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90778
91222
  {
90779
91223
  JSConsole.Chart.Log("[MinuteChartContainer::OnDoubleClick]", e);
90780
91224
 
91225
+ var bDraw=false;
91226
+ if (this.ChartCorssCursor)
91227
+ {
91228
+ var data={ e:e, X:x, Y:y, Draw:false };
91229
+ this.ChartCorssCursor.OnDBClick(data);
91230
+ bDraw=data.Draw
91231
+ }
91232
+
90781
91233
  if (this.EnableYDrag && (this.EnableYDrag.Left || this.EnableYDrag.Right) && this.Frame && this.Frame.PtInFrameY)
90782
91234
  {
90783
91235
  var pixelTatio = GetDevicePixelRatio();
@@ -90815,10 +91267,12 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90815
91267
  if (this.ZoomIndexWindow(frameId, {X:x, Y:y}))
90816
91268
  {
90817
91269
  this.Frame.SetSizeChage(true);
90818
- this.Draw();
91270
+ bDraw=true;
90819
91271
  }
90820
91272
  }
90821
91273
  }
91274
+
91275
+ if (bDraw) this.Draw();
90822
91276
  }
90823
91277
 
90824
91278
  this.GetDataItem=function(pointInfo)
@@ -104474,7 +104928,7 @@ function Node(ErrorHandler)
104474
104928
  //CAPITAL流通股本(手), EXCHANGE 换手率, TOTALCAPITAL 总股本(手)
104475
104929
  let setVariantName=new Set(
104476
104930
  [
104477
- "CAPITAL","TOTALCAPITAL","EXCHANGE",
104931
+ "CAPITAL","TOTALCAPITAL","EXCHANGE","HSL",
104478
104932
  "HYBLOCK","DYBLOCK","GNBLOCK","FGBLOCK","ZSBLOCK","ZHBLOCK","ZDBLOCK","HYZSCODE",
104479
104933
  "GNBLOCKNUM","FGBLOCKNUM","ZSBLOCKNUM","ZHBLOCKNUM","ZDBLOCKNUM",
104480
104934
  "HYSYL","HYSJL","FROMOPEN",
@@ -118018,7 +118472,7 @@ function JSSymbolData(ast,option,jsExecute)
118018
118472
  {
118019
118473
  var dataType=0;
118020
118474
  if (IFrameSplitOperator.IsNumber(recvData.DataType)) dataType=recvData.DataType;
118021
- self.RecvStockValue(recvData.Data,jobItem,key,dataType);
118475
+ self.RecvStockValue(recvData.Data,jobItem,key,dataType,recvData);
118022
118476
  }
118023
118477
 
118024
118478
  self.Execute.RunNextJob();
@@ -118033,7 +118487,7 @@ function JSSymbolData(ast,option,jsExecute)
118033
118487
  };
118034
118488
 
118035
118489
  var apiDownload;
118036
- if (jobItem.VariantName=="CAPITAL" || jobItem.VariantName=="TOTALCAPITAL" || jobItem.VariantName=="EXCHANGE")
118490
+ if (jobItem.VariantName=="CAPITAL" || jobItem.VariantName=="TOTALCAPITAL" || jobItem.VariantName=="EXCHANGE" || jobItem.VariantName=="HSL")
118037
118491
  {
118038
118492
  var callback=function(recvData, jobItem, key)
118039
118493
  {
@@ -118228,7 +118682,7 @@ function JSSymbolData(ast,option,jsExecute)
118228
118682
  }
118229
118683
  }
118230
118684
 
118231
- this.RecvStockValue=function(recvData,jobItem,key,dataType)
118685
+ this.RecvStockValue=function(recvData,jobItem,key,dataType, srcData)
118232
118686
  {
118233
118687
  if (!recvData)
118234
118688
  {
@@ -118259,8 +118713,9 @@ function JSSymbolData(ast,option,jsExecute)
118259
118713
  var bindData=new ChartData();
118260
118714
  bindData.Data=aryFittingData;
118261
118715
  var result=bindData.GetValue();
118716
+ var bVersion2=srcData && srcData.Ver==2; //2.0 版本
118262
118717
 
118263
- if (key=="EXCHANGE") //计算换手率=成交量/流通股本*100
118718
+ if (!bVersion2 && (key=="EXCHANGE" || key=="HSL")) //计算换手率=成交量/流通股本*100
118264
118719
  {
118265
118720
  for(var i in result)
118266
118721
  {
@@ -120280,7 +120735,7 @@ function JSExecute(ast,option)
120280
120735
 
120281
120736
  ['CAPITAL',null], //流通股本(手)
120282
120737
  ["TOTALCAPITAL",null], //TOTALCAPITAL 当前总股本 手
120283
- ['EXCHANGE',null], //换手率
120738
+ ['EXCHANGE',null], ["HSL",null], //换手率
120284
120739
  ['SETCODE', null], //市场类型
120285
120740
  ['CODE',null], //品种代码
120286
120741
  ['STKNAME',null], //品种名称
@@ -120530,6 +120985,7 @@ function JSExecute(ast,option)
120530
120985
  case "TOTALCAPITAL":
120531
120986
  case 'CAPITAL':
120532
120987
  case 'EXCHANGE':
120988
+ case "HSL":
120533
120989
 
120534
120990
  case "HYBLOCK":
120535
120991
  case "DYBLOCK":
@@ -122197,7 +122653,7 @@ function JSExplainer(ast,option)
122197
122653
  ['BARSTATUS',"数据位置状态"], //BARSTATUS返回数据位置信息,1表示第一根K线,2表示最后一个数据,0表示中间位置.
122198
122654
 
122199
122655
  ['CAPITAL',"当前流通股本(手)"], ["TOTALCAPITAL","当前总股本(手)"],
122200
- ['EXCHANGE',"换手率"], //换手率
122656
+ ['EXCHANGE',"换手率"], ['HSL',"换手线"],
122201
122657
  ['SETCODE', "市场类型"], //市场类型
122202
122658
  ['CODE',"品种代码"], //品种代码
122203
122659
  ['STKNAME',"品种名称"], //品种名称
@@ -129455,6 +129911,7 @@ function DownloadFinanceData(obj)
129455
129911
  case 1: //FINANCE(1) 总股本(随时间可能有变化) 股
129456
129912
  case 7: //FINANCE(7) 流通股本(随时间可能有变化) 股
129457
129913
  case "EXCHANGE": //换手率
129914
+ case "HSL"://换手率
129458
129915
  this.DownloadHistoryData(id);
129459
129916
  break;
129460
129917
  case 3:
@@ -129581,6 +130038,7 @@ function DownloadFinanceData(obj)
129581
130038
  return ["capital.total", "capital.date"];
129582
130039
  case 7:
129583
130040
  return ["capital.a", "capital.date"];
130041
+ case "HSL":
129584
130042
  case "EXCHANGE":
129585
130043
  return ["capital.a", "capital.date"];
129586
130044
 
@@ -129714,6 +130172,7 @@ function DownloadFinanceData(obj)
129714
130172
  if (!item.capital) return null;
129715
130173
  return { Date:date, Value:item.capital.total };
129716
130174
  case 7:
130175
+ case "HSL": //换手率
129717
130176
  case "EXCHANGE": //换手率 历史流通股本
129718
130177
  if (!item.capital) return null;
129719
130178
  return { Date:date, Value:item.capital.a };
@@ -155134,7 +155593,17 @@ JSDialogSearchIndex.GetDefaultIndexData=function()
155134
155593
  {Name:"OSC 变动速率线", ID:"OSC", Type:0},
155135
155594
  {Name:"RSI 相对强弱指标", ID:"RSI", Type:0},
155136
155595
  {Name:"ROC 变动率指标", ID:"ROC", Type:0},
155137
- {Name:"WR 威廉指标", ID:"WR", Type:0}
155596
+ {Name:"WR 威廉指标", ID:"WR", Type:0},
155597
+ {Name:"UDL 引力线", ID:"UDL", Type:0},
155598
+ {Name:"LWR 威廉指标", ID:"LWR", Type:0},
155599
+ {Name:"MARSI 相对强弱平均线", ID:"MARSI", Type:0},
155600
+ {Name:"ACCER 幅度涨速", ID:"ACCER", Type:0},
155601
+ {Name:"CYD 承接因子", ID:"CYD", Type:0},
155602
+ {Name:"CYF 市场能量", ID:"CYF", Type:0},
155603
+ {Name:"ADTM 动态买卖气指标", ID:"ADTM", Type:0},
155604
+ {Name:"ATR 真实波幅", ID:"ATR", Type:0},
155605
+ {Name:"DKX 多空线", ID:"DKX", Type:0},
155606
+ {Name:"TAPI 加权指数成交值", ID:"TAPI", Type:0},
155138
155607
  ]
155139
155608
  },
155140
155609
 
@@ -155149,7 +155618,22 @@ JSDialogSearchIndex.GetDefaultIndexData=function()
155149
155618
  {Name:"MACD 平滑异同平均", ID:"MACD", Type:0 },
155150
155619
  {Name:"TRIX 三重指数平均线", ID:"TRIX", Type:0 },
155151
155620
  {Name:"UOS 终极指标", ID:"UOS", Type:0 },
155152
- {Name:"TRIX 三重指数平均线", ID:"TRIX", Type:0 }
155621
+ {Name:"TRIX 三重指数平均线", ID:"TRIX", Type:0 },
155622
+ {Name:"VMACD 量平滑异同平均", ID:"VMACD", Type:0 },
155623
+
155624
+ {Name:"VMACD 量平滑异同平均", ID:"VMACD", Type:0 },
155625
+ {Name:"SMACD 单线平滑异同平均线", ID:"SMACD", Type:0 },
155626
+ {Name:"QACD 快速异同平均", ID:"QACD", Type:0 },
155627
+ {Name:"VPT 量价曲线", ID:"VPT", Type:0 },
155628
+ {Name:"WVAD 威廉变异离散量", ID:"WVAD", Type:0 },
155629
+
155630
+ {Name:"DBQR 对比强弱", ID:"DBQR", Type:0 },
155631
+ {Name:"WVAD 威廉变异离散量", ID:"WVAD", Type:0 },
155632
+ {Name:"JS 加速线", ID:"JS", Type:0 },
155633
+ {Name:"CYE 市场趋势", ID:"CYE", Type:0 },
155634
+ {Name:"QR 强弱指标", ID:"QR", Type:0 },
155635
+ {Name:"GDX 轨道线", ID:"GDX", Type:0 },
155636
+ {Name:"JLHB 绝路航标", ID:"JLHB", Type:0 },
155153
155637
  ]
155154
155638
  },
155155
155639
 
@@ -155161,7 +155645,18 @@ JSDialogSearchIndex.GetDefaultIndexData=function()
155161
155645
  {Name:"OBV 累积能量线", ID:"OBV", Type:0},
155162
155646
  {Name:"NVI 负成交量", ID:"NVI", Type:0},
155163
155647
  {Name:"PVI 正成交量", ID:"PVI", Type:0},
155164
- {Name:"VOL 成交量", ID:"VOL", Type:0}
155648
+ {Name:"VOL 成交量", ID:"VOL", Type:0},
155649
+ {Name:"VOL-TDX 成交量(虚拟)", ID:"VOL-TDX", Type:0},
155650
+ {Name:"AMO 成交金额", ID:"AMO", Type:0},
155651
+ {Name:"AMO-TDX 成交金额(虚拟)", ID:"AMO-TDX", Type:0},
155652
+ {Name:"VRSI 相对强弱量", ID:"VRSI", Type:0},
155653
+ {Name:"HSCOL 换手柱", ID:"HSCOL", Type:0},
155654
+ {Name:"DBQRV 对比强弱量", ID:"DBQRV", Type:0},
155655
+ {Name:"DBLB 对比量比", ID:"DBLB", Type:0},
155656
+ {Name:"WSBVOL 维斯波成交量", ID:"WSBVOL", Type:0},
155657
+
155658
+ {Name:"CCYD 持仓异动(适用于期货)", ID:"CCYD", Type:0},
155659
+ {Name:"CCL 持仓量(适用于期货)", ID:"CCL", Type:0},
155165
155660
  ]
155166
155661
  },
155167
155662
  {
@@ -155169,7 +155664,22 @@ JSDialogSearchIndex.GetDefaultIndexData=function()
155169
155664
  AryIndex:
155170
155665
  [
155171
155666
  {Name:"MA 均线", ID:"MA", Type:0},
155172
- {Name:"BBI 多空线", ID:"BBI", Type:0}
155667
+ {Name:"MA4 4根均线", ID:"MA4", Type:0},
155668
+ {Name:"MA5 5根均线", ID:"MA5", Type:0},
155669
+ {Name:"MA7 6根均线", ID:"MA6", Type:0},
155670
+ {Name:"MA7 7根均线", ID:"MA7", Type:0},
155671
+ {Name:"MA8 8根均线", ID:"MA8", Type:0},
155672
+ {Name:"BBI 多空线", ID:"BBI", Type:0},
155673
+ {Name:"ACD 升降线", ID:"ACD", Type:0},
155674
+ {Name:"EXPMA 指数平均线", ID:"EXPMA", Type:0},
155675
+ {Name:"EXPMA_S 指数平均线-副图", ID:"EXPMA_S", Type:0},
155676
+ {Name:"HMA 高价平均线", ID:"HMA", Type:0},
155677
+ {Name:"LMA 低价平均线", ID:"LMA", Type:0},
155678
+ {Name:"VMA 变异平均线", ID:"VMA", Type:0},
155679
+ {Name:"AMV 成本价均线", ID:"AMV", Type:0},
155680
+ {Name:"BBIBOLL 多空布林线", ID:"BBIBOLL", Type:0},
155681
+ {Name:"ALLIGAT 鳄鱼线", ID:"ALLIGAT", Type:0},
155682
+ {Name:"GMMA 顾比均线", ID:"GMMA", Type:0},
155173
155683
  ]
155174
155684
  },
155175
155685
  {
@@ -155177,9 +155687,13 @@ JSDialogSearchIndex.GetDefaultIndexData=function()
155177
155687
  AryIndex:
155178
155688
  [
155179
155689
  {Name:"BOLL 布林线", ID:"BOLL", Type:0},
155180
- {Name:"BOLL副图 布林线", ID:"BOLL副图", Type:0},
155690
+ {Name:"BOLL 布林线-副图", ID:"BOLL副图", Type:0},
155181
155691
  {Name:"MIKE 麦克支撑压力", ID:"MIKE", Type:0},
155182
- {Name:"ENE 轨道线", ID:"ENE", Type:0}
155692
+ {Name:"ENE 轨道线", ID:"ENE", Type:0},
155693
+ {Name:"PBX 瀑布线", ID:"PBX", Type:0},
155694
+ {Name:"XS 薛斯通道", ID:"XS", Type:0},
155695
+ {Name:"XS2 薛斯通道II", ID:"XS2", Type:0},
155696
+ {Name:"DC 唐奇安通道", ID:"DC", Type:0}
155183
155697
  ]
155184
155698
  },
155185
155699
  {
@@ -155192,9 +155706,19 @@ JSDialogSearchIndex.GetDefaultIndexData=function()
155192
155706
  {Name:"PSY 心理线", ID:"PSY", Type:0},
155193
155707
  {Name:"CR 带状能量线", ID:"CR", Type:0},
155194
155708
  {Name:"VR 成交量变异率", ID:"VR", Type:0},
155195
- {Name:"WAD 威廉多空力度线", ID:"WAD", Type:0}
155709
+ {Name:"WAD 威廉多空力度线", ID:"WAD", Type:0},
155710
+ {Name:"PCNT 幅度比", ID:"PCNT", Type:0}
155711
+ ]
155712
+ },
155713
+ {
155714
+ Group:{ ID:"大势型", Name:"大势型"},
155715
+ AryIndex:
155716
+ [
155717
+ {Name:"ABI 绝对广量指标", ID:"ABI", Type:0 },
155718
+ {Name:"ADL 腾落指标", ID:"ADL", Type:0 },
155196
155719
  ]
155197
155720
  },
155721
+
155198
155722
  {
155199
155723
  Group:{ ID:"五彩K线", Name:"五彩K线"} ,
155200
155724
  AryIndex:
@@ -155874,7 +156398,7 @@ function HQChartScriptWorker()
155874
156398
 
155875
156399
 
155876
156400
 
155877
- var HQCHART_VERSION="1.1.14575";
156401
+ var HQCHART_VERSION="1.1.14592";
155878
156402
 
155879
156403
  function PrintHQChartVersion()
155880
156404
  {