hqchart 1.1.14564 → 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
 
@@ -4258,6 +4429,7 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4258
4429
  if (IFrameSplitOperator.IsBool(option.EnableZoomIndexWindow)) chart.EnableZoomIndexWindow=option.EnableZoomIndexWindow;
4259
4430
  if (IFrameSplitOperator.IsBool(option.IsDrawPictureXY)) chart.IsDrawPictureXY=option.IsDrawPictureXY;
4260
4431
  if (IFrameSplitOperator.IsNumber(option.CtrlMoveStep)) chart.CtrlMoveStep=option.CtrlMoveStep;
4432
+ if (IFrameSplitOperator.IsNumber(option.ShiftMoveStep)) chart.ShiftMoveStep=option.ShiftMoveStep;
4261
4433
  if (IFrameSplitOperator.IsBool(option.EnableIndexChartDrag)) chart.EnableIndexChartDrag=option.EnableIndexChartDrag;
4262
4434
  if (IFrameSplitOperator.IsBool(option.EnableVerifyRecvData)) chart.EnableVerifyRecvData=option.EnableVerifyRecvData;
4263
4435
 
@@ -4409,6 +4581,12 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4409
4581
  if (IFrameSplitOperator.IsNumber(item.ZIndex)) zindex=item.ZIndex;
4410
4582
  if (item.Enable) this.CreateExtraCanvasElement(JSChart.RectDragCanvasKey, { ZIndex:zindex }); //创建独立的区间选择画布
4411
4583
  }
4584
+
4585
+ if (option.DragKLine)
4586
+ {
4587
+ var item=option.DragKLine;
4588
+ if (IFrameSplitOperator.IsBool(item.EnableShfit)) chart.KLineDragConfig.EnableShfit=item.EnableShfit;
4589
+ }
4412
4590
  }
4413
4591
 
4414
4592
  //创建子窗口
@@ -4460,6 +4638,7 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4460
4638
  if (IFrameSplitOperator.IsNumber(item.PriceFormatType)) chart.ChartCorssCursor.StringFormatY.PriceFormatType=item.PriceFormatType;
4461
4639
  if (IFrameSplitOperator.IsNumber(item.DataFormatType)) chart.ChartCorssCursor.StringFormatY.DataFormatType=item.DataFormatType;
4462
4640
  if (IFrameSplitOperator.IsBool(item.EnableKeyboard)) chart.ChartCorssCursor.EnableKeyboard=item.EnableKeyboard;
4641
+ if (IFrameSplitOperator.IsBool(item.EnableDBClick)) chart.ChartCorssCursor.EnableDBClick=item.EnableDBClick;
4463
4642
 
4464
4643
  if (IFrameSplitOperator.IsBool(item.IsShowCorssPoint)) chart.ChartCorssCursor.CorssPointConfig.Enable=item.IsShowCorssPoint;
4465
4644
 
@@ -4965,6 +5144,7 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4965
5144
  if (IFrameSplitOperator.IsNumber(item.HPenType)) chart.ChartCorssCursor.HPenType=item.HPenType;
4966
5145
  if (IFrameSplitOperator.IsNumber(item.VPenType)) chart.ChartCorssCursor.VPenType=item.VPenType;
4967
5146
  if (IFrameSplitOperator.IsBool(item.EnableKeyboard)) chart.ChartCorssCursor.EnableKeyboard=item.EnableKeyboard;
5147
+ if (IFrameSplitOperator.IsBool(item.EnableDBClick)) chart.ChartCorssCursor.EnableDBClick=item.EnableDBClick;
4968
5148
  if (IFrameSplitOperator.IsBool(item.IsShowCorssPoint)) chart.ChartCorssCursor.CorssPointConfig.Enable=item.IsShowCorssPoint;
4969
5149
  if (IFrameSplitOperator.IsNumber(item.VLineType)) chart.ChartCorssCursor.VLineType=item.VLineType;
4970
5150
  }
@@ -6468,9 +6648,6 @@ JSChart.GetfloatPrecision=function(symbol)
6468
6648
  return GetfloatPrecision(symbol);
6469
6649
  }
6470
6650
 
6471
-
6472
-
6473
-
6474
6651
  var JSCHART_EVENT_ID=
6475
6652
  {
6476
6653
  //RECV_KLINE_MATCH:1, //接收到形态匹配
@@ -6866,10 +7043,14 @@ var JSCHART_MENU_ID=
6866
7043
  CMD_CORSS_ON_VAILD_TIME_ID:50, //超出当前时间的,X轴调整到当前最后的时间(分时图)
6867
7044
  CMD_CORSS_ON_KLINE_ID:51, //十字光标只能画在K线上
6868
7045
  CMD_CORSS_POINT_ID:52, //十字光标圆点
7046
+
6869
7047
 
6870
7048
  CMD_RBUTTON_SELECT_RECT_ID:53, //右键区间选择
6871
7049
  CMD_LBUTTON_SELECT_RECT_ID:54, //左键区间选择
6872
- CMD_ENABLE_XDRAG_BOTTOM_ID:55, //X轴拖动缩放
7050
+ CMD_ENABLE_XDRAG_BOTTOM_ID:55, //X轴拖动缩放
7051
+
7052
+ CMD_FULLSCREEN_SUMMARY_ID:56, //当前屏区间统计
7053
+ CMD_CORSS_DBCLICK_ID:57, //双击显示隐藏十字光标
6873
7054
 
6874
7055
 
6875
7056
 
@@ -7024,6 +7205,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7024
7205
  this.ZoomStepPixel=5; //放大缩小手势需要的最小像素
7025
7206
  this.TouchMoveMinAngle=70; //左右移动最小角度
7026
7207
  this.EnableAnimation=false; //是否开启动画
7208
+ this.ShiftUpDownStepPixel=1*GetDevicePixelRatio(); //Shift+(up/down) 移动十字光标
7027
7209
 
7028
7210
  //tooltip提示信息
7029
7211
  this.Tooltip=document.createElement("div");
@@ -7124,7 +7306,10 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7124
7306
 
7125
7307
  this.RestoreFocusTimer=null; //恢复焦点定时器
7126
7308
  this.PreventRightMenu={ Timer:null, Enable:false, Delay:2000 }; //阻止右键菜单
7127
-
7309
+
7310
+ //SecondKeyID 1=shiftKey 2=ctrlKey 3=altKey
7311
+ this.AryHotKey=[]; //热键 { KeyID:87, SecondKeyID:1, CMD:JSCHART_MENU_ID.CMD_FULLSCREEN_SUMMARY_ID, Args:null, Description:"Alt+W 全屏区间统计" },
7312
+
7128
7313
  this.RestoreFocus=function(delay)
7129
7314
  {
7130
7315
  var value=1000;
@@ -8159,6 +8344,17 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8159
8344
  document.oncontextmenu=(e)=> { this.DocContextMenu(e); }
8160
8345
  }
8161
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
+
8162
8358
  this.DocOnMouseMove=function(e)
8163
8359
  {
8164
8360
  //加载数据中,禁用鼠标事件
@@ -8174,6 +8370,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8174
8370
  var moveSetpY=Math.abs(drag.LastMove.Y-e.clientY);
8175
8371
  var isDragSelectRect=(this.RectSelectDrag && this.RectSelectDrag.Index>=0);
8176
8372
  var isDragSubSelectRect=(this.RectSelectDrag && this.RectSelectDrag.Type==4);
8373
+ var bShfitDragKLine=this.IsShfitDragKLine(e); //shift+鼠标移动K线
8177
8374
  if (drag.CurrentMove)
8178
8375
  {
8179
8376
  drag.CurrentMove.X=e.clientX;
@@ -8281,7 +8478,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8281
8478
  {
8282
8479
  this.OnDragXCoordinateZoom(drag, {X:moveSetp, Y:moveSetpY}, e);
8283
8480
  }
8284
- else if ((bLButtonSelectRect || bRButtonSelectRect) && !isDragSelectRect && !isDragSubSelectRect) //左右键区间选择
8481
+ else if ((bLButtonSelectRect || bRButtonSelectRect) && !isDragSelectRect && !isDragSubSelectRect && !bShfitDragKLine) //左右键区间选择
8285
8482
  {
8286
8483
  var yMoveSetp=Math.abs(drag.LastMove.Y-e.clientY);
8287
8484
 
@@ -8393,6 +8590,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8393
8590
  var isLeft=true;
8394
8591
  if (drag.LastMove.X<e.clientX) isLeft=false;//右移数据
8395
8592
 
8593
+ //按住shift才能移动K线
8594
+ if (this.KLineDragConfig && this.KLineDragConfig.EnableShfit && !e.shiftKey) return;
8595
+
8396
8596
  var cursorStatus="pointer";
8397
8597
  var oneStepWidth=this.GetMoveOneStepWidth();
8398
8598
  if (moveSetp<oneStepWidth)
@@ -8490,6 +8690,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8490
8690
  var isDragSelectRect=(this.RectSelectDrag && this.RectSelectDrag.Index>=0);
8491
8691
  var isDragSubSelectRect=(this.RectSelectDrag && this.RectSelectDrag.Type==4);
8492
8692
  var bClearDrawPicture=true;
8693
+ var bShfitDragKLine=this.IsShfitDragKLine(e);
8493
8694
  if (this.CurrentChartDrawPicture)
8494
8695
  {
8495
8696
  var drawPicture=this.CurrentChartDrawPicture;
@@ -8532,7 +8733,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8532
8733
  {
8533
8734
  if (this.OnMinuteSelectRectMouseUp) this.OnMinuteSelectRectMouseUp(e); //分时图区间选择
8534
8735
  }
8535
- else if (bLButtonSelectRect || bRButtonSelectRect) //K线图区间选择
8736
+ else if ((bLButtonSelectRect || bRButtonSelectRect) && !bShfitDragKLine) //K线图区间选择
8536
8737
  {
8537
8738
  var drag=this.MouseDrag;
8538
8739
  drag.LastMove.X=e.clientX;
@@ -9821,6 +10022,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9821
10022
  item.Draw();
9822
10023
  }
9823
10024
 
10025
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_5);
10026
+
9824
10027
  if (this.Frame.DrawOveraly)
9825
10028
  this.Frame.DrawOveraly(true); //画叠加指标
9826
10029
 
@@ -9844,9 +10047,14 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9844
10047
  item.Draw();
9845
10048
  }
9846
10049
 
10050
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_8);
10051
+
9847
10052
  if (this.Frame.DrawOveraly)
9848
10053
  this.Frame.DrawOveraly(false); //画叠加指标
9849
10054
 
10055
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_10);
10056
+
10057
+ /*
9850
10058
  //固定扩展图形
9851
10059
  for(var i=0;i<this.ExtendChartPaint.length;++i)
9852
10060
  {
@@ -9855,6 +10063,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9855
10063
  if (item.DrawAfterPicture) continue;
9856
10064
  if (!item.IsDynamic && item.IsAnimation==false) item.Draw();
9857
10065
  }
10066
+ */
9858
10067
 
9859
10068
  if (this.Frame.DrawInsideHorizontal) this.Frame.DrawInsideHorizontal();
9860
10069
  this.KLineIncreaseCustomHorizontal();
@@ -9883,6 +10092,10 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9883
10092
 
9884
10093
  var moveonPoint=null;
9885
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
+ /*
9886
10099
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动态扩展图形
9887
10100
  {
9888
10101
  var item=this.ExtendChartPaint[i];
@@ -9894,6 +10107,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9894
10107
  if (item.DrawToolbar) item.DrawToolbar(moveonPoint);
9895
10108
  }
9896
10109
  }
10110
+ */
9897
10111
 
9898
10112
  for(var i=0;i<this.ChartDrawPicture.length;++i)
9899
10113
  {
@@ -9983,6 +10197,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9983
10197
  item.Draw(moveonPoint, this.LastMouseStatus);
9984
10198
  }
9985
10199
 
10200
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25);
10201
+ /*
9986
10202
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动态扩展图形
9987
10203
  {
9988
10204
  var item=this.ExtendChartPaint[i];
@@ -9990,7 +10206,11 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9990
10206
  if (item.DrawAfterPicture) continue;
9991
10207
  if (item.IsDynamic && item.DrawAfterTitle===true && item.IsAnimation==false) item.Draw();
9992
10208
  }
10209
+ */
9993
10210
 
10211
+ if (this.EnableAnimation) this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_30);
10212
+
10213
+ /*
9994
10214
  if (this.EnableAnimation)
9995
10215
  {
9996
10216
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动画
@@ -9999,6 +10219,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9999
10219
  if (item.IsAnimation===true) item.Draw();
10000
10220
  }
10001
10221
  }
10222
+ */
10002
10223
 
10003
10224
  for(var i=0;i<this.ChartDrawPicture.length;++i)
10004
10225
  {
@@ -10017,12 +10238,15 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10017
10238
  this.CurrentChartDrawPicture.Draw();
10018
10239
  }
10019
10240
 
10241
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_50);
10242
+ /*
10020
10243
  for(var i=0;i<this.ExtendChartPaint.length;++i) //画图工具绘制完成以后 动态扩展图形
10021
10244
  {
10022
10245
  var item=this.ExtendChartPaint[i];
10023
10246
  if (item.DrawAfterPicture)
10024
10247
  item.Draw();
10025
10248
  }
10249
+ */
10026
10250
 
10027
10251
  this.OffscreenToShowCanvas();
10028
10252
 
@@ -10051,6 +10275,45 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10051
10275
  ++this.TouchDrawCount;
10052
10276
  }
10053
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
+
10054
10317
  this.PtInButton=function(x, y)
10055
10318
  {
10056
10319
  var button=this.Frame.PtInButtons(x,y);
@@ -10363,6 +10626,10 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10363
10626
 
10364
10627
  var moveonPoint=null;
10365
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
+ /*
10366
10633
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动态扩展图形
10367
10634
  {
10368
10635
  var item=this.ExtendChartPaint[i];
@@ -10374,6 +10641,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10374
10641
  if (item.DrawToolbar) item.DrawToolbar(moveonPoint, this.LastMouseStatus);
10375
10642
  }
10376
10643
  }
10644
+ */
10377
10645
 
10378
10646
  for(var i=0;i<this.ChartDrawPicture.length;++i)
10379
10647
  {
@@ -10472,6 +10740,15 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10472
10740
  item.Draw(moveonPoint, this.LastMouseStatus);
10473
10741
  }
10474
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
+ /*
10475
10752
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动态扩展图形 在动态标题以后画
10476
10753
  {
10477
10754
  var item=this.ExtendChartPaint[i];
@@ -10489,7 +10766,10 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10489
10766
 
10490
10767
  if (item.IsDynamic && item.DrawAfterTitle===true) item.Draw(moveonPoint, this.LastMouseStatus);
10491
10768
  }
10769
+ */
10492
10770
 
10771
+ if (this.EnableAnimation) this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_30);
10772
+ /*
10493
10773
  if (this.EnableAnimation)
10494
10774
  {
10495
10775
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动画
@@ -10498,6 +10778,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10498
10778
  if (item.IsAnimation===true) item.Draw();
10499
10779
  }
10500
10780
  }
10781
+ */
10501
10782
 
10502
10783
  for(var i=0;i<this.ChartDrawPicture.length;++i)
10503
10784
  {
@@ -10519,12 +10800,15 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10519
10800
  this.CurrentChartDrawPicture.Draw();
10520
10801
  }
10521
10802
 
10803
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_50);
10804
+ /*
10522
10805
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动态扩展图形
10523
10806
  {
10524
10807
  var item=this.ExtendChartPaint[i];
10525
10808
  if (item.DrawAfterPicture)
10526
10809
  item.Draw();
10527
10810
  }
10811
+ */
10528
10812
 
10529
10813
  if (this.LastMouseStatus.MouseOnToolbar) //工具栏按钮提示信息
10530
10814
  {
@@ -10951,6 +11235,40 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10951
11235
  this.UIElement.style.cursor=obj.Cursor;
10952
11236
  }
10953
11237
 
11238
+ this.OnHotKeyDown=function(keyID, e) //热键触发
11239
+ {
11240
+ var item=this.FindHotKey(keyID,e);
11241
+ if (!item) return false;
11242
+
11243
+ this.ExecuteMenuCommand(item.CMD, item.Args);
11244
+ return true;
11245
+ }
11246
+
11247
+ this.FindHotKey=function(keyID, e)
11248
+ {
11249
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.AryHotKey)) return null;
11250
+
11251
+ for(var i=0;i<this.AryHotKey.length;++i)
11252
+ {
11253
+ var item=this.AryHotKey[i];
11254
+ if (keyID==item.KeyID)
11255
+ {
11256
+ //SecondKeyID 1=shiftKey 2=ctrlKey 3=altKey
11257
+ if ((item.SecondKeyID==1 && e.shiftKey) || (item.SecondKeyID==2 && e.ctrlKey) || (item.SecondKeyID==3 && e.altKey))
11258
+ return item;
11259
+ }
11260
+ }
11261
+
11262
+ return null;
11263
+ }
11264
+
11265
+ this.IsHotKey=function(keyID, e)
11266
+ {
11267
+ var item=this.FindHotKey(keyID,e);
11268
+ if (!item) return false;
11269
+ return true;
11270
+ }
11271
+
10954
11272
  this.OnKeyDown=function(e)
10955
11273
  {
10956
11274
  if (this.ChartSplashPaint && this.ChartSplashPaint.IsEnableSplash == true) return;
@@ -10967,22 +11285,35 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10967
11285
  }
10968
11286
 
10969
11287
  var draw=false;
10970
- 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) //十字光标 隐藏显示
10971
11294
  {
10972
11295
  var sendData={ e:e, KeyID:keyID, Draw:false, PreventDefault:false };
10973
11296
  this.ChartCorssCursor.OnKeyDown(sendData);
10974
11297
  draw=sendData.Draw;
10975
11298
  }
10976
11299
 
11300
+ if (this.OnHotKeyDown(keyID, e))
11301
+ {
11302
+ //不让滚动条滚动
11303
+ if(e.preventDefault) e.preventDefault();
11304
+ else e.returnValue = false;
11305
+ return;
11306
+ }
11307
+
10977
11308
  switch(keyID)
10978
11309
  {
10979
11310
  case 37: //left
10980
- if (e.ctrlKey && this.OnCustomKeyDown)
11311
+ if ((e.ctrlKey||e.shiftKey) && this.OnCustomKeyDown)
10981
11312
  {
10982
11313
  if (this.OnCustomKeyDown(keyID, e))
10983
11314
  break;
10984
11315
  }
10985
-
11316
+
10986
11317
  if (this.CursorIndex<=0.99999)
10987
11318
  {
10988
11319
  if (!this.DataMoveLeft())
@@ -11007,7 +11338,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11007
11338
  }
11008
11339
  break;
11009
11340
  case 39: //right
11010
- if (e.ctrlKey && this.OnCustomKeyDown)
11341
+ if ((e.ctrlKey|| e.shiftKey) && this.OnCustomKeyDown)
11011
11342
  {
11012
11343
  if (this.OnCustomKeyDown(keyID, e))
11013
11344
  break;
@@ -11043,8 +11374,14 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11043
11374
  }
11044
11375
  break;
11045
11376
  case 38: //up
11377
+ if ((e.ctrlKey||e.shiftKey) && this.OnCustomKeyDown)
11378
+ {
11379
+ if (this.OnCustomKeyDown(keyID, e))
11380
+ break;
11381
+ }
11046
11382
  if (this.EnableZoomUpDown && this.EnableZoomUpDown.Keyboard===false) break;
11047
11383
  var cursorIndex={ ZoomType:this.ZoomType, IsLockRight:this.IsZoomLockRight };
11384
+ if (e.ctrlKey) cursorIndex.ZoomType=1; //ctrl 十字中心缩放
11048
11385
  cursorIndex.Index=parseInt(Math.abs(this.CursorIndex-0.5).toFixed(0));
11049
11386
  if (!this.Frame.ZoomUp(cursorIndex)) break;
11050
11387
  this.CursorIndex=cursorIndex.Index;
@@ -11057,8 +11394,14 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11057
11394
  this.OnKLinePageChange("keydown");
11058
11395
  break;
11059
11396
  case 40: //down
11397
+ if ((e.ctrlKey||e.shiftKey) && this.OnCustomKeyDown)
11398
+ {
11399
+ if (this.OnCustomKeyDown(keyID, e))
11400
+ break;
11401
+ }
11060
11402
  if (this.EnableZoomUpDown && this.EnableZoomUpDown.Keyboard===false) break;
11061
11403
  var cursorIndex={ ZoomType:this.ZoomType ,IsLockRight:this.IsZoomLockRight };
11404
+ if (e.ctrlKey) cursorIndex.ZoomType=1; //ctrl 十字中心缩放
11062
11405
  cursorIndex.Index=parseInt(Math.abs(this.CursorIndex-0.5).toFixed(0));
11063
11406
  if (!this.Frame.ZoomDown(cursorIndex, { ZoomDownloadDataCallback:(requestData)=>{ this.ZoomDownloadData(requestData) } })) break;
11064
11407
 
@@ -11111,6 +11454,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11111
11454
  this.CurrentChartDrawPicture=null;
11112
11455
  }
11113
11456
  break;
11457
+ case 13: //回车
11458
+ if (this.OnCustomKeyDown) this.OnCustomKeyDown(keyID, e);
11459
+ break;
11114
11460
  default:
11115
11461
  return;
11116
11462
  }
@@ -11124,7 +11470,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
11124
11470
 
11125
11471
  this.OnDoubleClick=function(x,y,e)
11126
11472
  {
11127
- //JSConsole.Chart.Log(e);
11473
+
11128
11474
  }
11129
11475
 
11130
11476
  this.ZoomIndexWindow=function(frameID, option) //最大化/最小化指标窗口
@@ -13069,6 +13415,43 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
13069
13415
  return width;
13070
13416
  }
13071
13417
 
13418
+ this.GetChartPaintByClassName=function(name)
13419
+ {
13420
+ var aryData=[];
13421
+ for(var i=0;i<this.ChartPaint.length;++i)
13422
+ {
13423
+ var item=this.ChartPaint[i];
13424
+ if (item.ClassName==name)
13425
+ {
13426
+ var frameID=null;
13427
+ if (item.ChartFrame) frameID=item.ChartFrame.Identify;
13428
+ aryData.push({ IsOverlay:false, Chart:item, FrameID:frameID });
13429
+ }
13430
+ }
13431
+
13432
+ for(var i=0;i<this.Frame.SubFrame.length;++i)
13433
+ {
13434
+ var subItem=this.Frame.SubFrame[i];
13435
+ if (!subItem) continue;
13436
+ if (!IFrameSplitOperator.IsNonEmptyArray(subItem.OverlayIndex)) continue;
13437
+
13438
+ for(var j=0;j<subItem.OverlayIndex.length;++j)
13439
+ {
13440
+ var item=subItem.OverlayIndex[j];
13441
+ for(var k=0;k<item.ChartPaint.length;++k)
13442
+ {
13443
+ var chartItem=item.ChartPaint[k];
13444
+ if (chartItem.ClassName==name)
13445
+ {
13446
+ aryData.push({ IsOverlay:true, Chart:chartItem, FrameID:subItem.Frame.Identify, SubFrameID:j });
13447
+ }
13448
+ }
13449
+ }
13450
+ }
13451
+
13452
+ return aryData;
13453
+ }
13454
+
13072
13455
  //删除扩展画法
13073
13456
  this.DeleteExtendChart=function(data)
13074
13457
  {
@@ -14443,6 +14826,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
14443
14826
  case JSCHART_MENU_ID.CMD_CORSS_POINT_ID:
14444
14827
  if (IFrameSplitOperator.IsBool(srcParam) && this.ChartCorssCursor) this.ChartCorssCursor.CorssPointConfig.Enable=srcParam;
14445
14828
  break;
14829
+ case JSCHART_MENU_ID.CMD_CORSS_DBCLICK_ID:
14830
+ if (IFrameSplitOperator.IsBool(srcParam) && this.ChartCorssCursor) this.ChartCorssCursor.EnableDBClick=srcParam;
14831
+ break;
14446
14832
  case JSCHART_MENU_ID.CMD_RBUTTON_SELECT_RECT_ID:
14447
14833
  if (IFrameSplitOperator.IsBool(srcParam) && this.ChartDragSelectRect) this.ChartDragSelectRect.EnableRButton=srcParam;
14448
14834
  break;
@@ -14452,6 +14838,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
14452
14838
  case JSCHART_MENU_ID.CMD_ENABLE_XDRAG_BOTTOM_ID:
14453
14839
  if (IFrameSplitOperator.IsBool(srcParam)) this.EnableXDrag.Bottom=srcParam;
14454
14840
  break;
14841
+ case JSCHART_MENU_ID.CMD_FULLSCREEN_SUMMARY_ID:
14842
+ this.FullScreenSummary();
14843
+ break;
14455
14844
  }
14456
14845
  }
14457
14846
 
@@ -15008,6 +15397,63 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
15008
15397
  this.Draw();
15009
15398
  }
15010
15399
  }
15400
+
15401
+ this.MoveCorssCursorUp=function(step)
15402
+ {
15403
+ if (!IFrameSplitOperator.IsNumber(this.LastPoint.Y)) return;
15404
+ var border=this.Frame.ChartBorder.GetBorder();
15405
+ var top=border.TopEx;
15406
+ if (this.LastPoint.Y-step<=top) return;
15407
+
15408
+ this.LastPoint.Y-=step;
15409
+ this.DrawDynamicInfo();
15410
+ }
15411
+
15412
+ this.MoveCorssCursorDown=function(step)
15413
+ {
15414
+ if (!IFrameSplitOperator.IsNumber(this.LastPoint.Y)) return;
15415
+ var border=this.Frame.ChartBorder.GetBorder();
15416
+ var border=this.Frame.ChartBorder.GetBorder();
15417
+ var bottom=border.BottomEx;
15418
+ if (this.LastPoint.Y+step>=bottom) return;
15419
+
15420
+ this.LastPoint.Y+=step;
15421
+ this.DrawDynamicInfo();
15422
+ }
15423
+
15424
+ //整屏区间统计
15425
+ this.FullScreenSummary=function()
15426
+ {
15427
+ var kData=this.GetKData();
15428
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false;
15429
+
15430
+ var paint=this.GetRectSelectPaint();
15431
+ if (!paint) return false;
15432
+
15433
+ var xPointcount=0;
15434
+ if (this.Frame.XPointCount) xPointcount=this.Frame.XPointCount;
15435
+ else xPointcount=this.Frame.SubFrame[0].Frame.XPointCount;
15436
+ if (!IFrameSplitOperator.IsPlusNumber(xPointcount)) return false;
15437
+
15438
+ var startIndex=kData.DataOffset;
15439
+ var endIndex=startIndex+xPointcount;
15440
+ this.UpdateSelectRect(startIndex, endIndex);
15441
+
15442
+ var selectData=paint.GetSelectRectData();
15443
+ var border=this.Frame.SubFrame[0].Frame.GetBorder();
15444
+
15445
+ var data=
15446
+ {
15447
+ X:border.ChartWidth/2, Y:border.ChartHeight/2,
15448
+ SelectData:selectData, //区间选择的数据
15449
+ RectSelectPaint:paint //区间选择背景
15450
+ }
15451
+
15452
+ var e={ data:data };
15453
+ if (this.DialogSelectRect) this.DrawSelectRectDialog(e);
15454
+
15455
+ return true;
15456
+ }
15011
15457
  }
15012
15458
 
15013
15459
  function GetDevicePixelRatio()
@@ -46655,7 +47101,7 @@ function ChartMultiSVGIconV2()
46655
47101
  if (IFrameSplitOperator.IsString(item.Value)) value=this.GetKValue(kItem,item.Value);
46656
47102
  if (!IFrameSplitOperator.IsNumber(value)) continue;
46657
47103
 
46658
- var y=this.ChartFrame.GetYFromData(item.Value,false);
47104
+ var y=this.ChartFrame.GetYFromData(value,false);
46659
47105
 
46660
47106
  if (item.Image)
46661
47107
  {
@@ -49065,12 +49511,34 @@ function IExtendChartPainting()
49065
49511
  this.IsCallbackDraw=false; //在回调函数里绘制, 不在Draw()中绘制
49066
49512
  this.ID=Guid();
49067
49513
 
49514
+ this.DrawPriority=null; //绘图优先级
49515
+
49068
49516
  //上下左右间距
49069
49517
  this.Left=5;
49070
49518
  this.Right=5;
49071
49519
  this.Top=5;
49072
49520
  this.Bottom=5;
49073
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
+
49074
49542
  this.Draw=function()
49075
49543
  {
49076
49544
 
@@ -49107,6 +49575,23 @@ function IExtendChartPainting()
49107
49575
  }
49108
49576
  }
49109
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
+
49110
49595
  //K线Tooltip, 显示在左边或右边
49111
49596
  function KLineTooltipPaint()
49112
49597
  {
@@ -49126,6 +49611,7 @@ function KLineTooltipPaint()
49126
49611
  this.AmountColor=g_JSChartResource.TooltipPaint.AmountColor; //成交金额
49127
49612
  this.LatestPoint; //手势位置
49128
49613
  this.ShowPosition=0; //显示位置 0=左 1=右
49614
+ this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;
49129
49615
 
49130
49616
  this.Left=1*GetDevicePixelRatio();
49131
49617
  this.Top=5*GetDevicePixelRatio();
@@ -49869,6 +50355,7 @@ function MinuteLeftTooltipPaint()
49869
50355
  this.IsDynamic=true;
49870
50356
  this.IsEraseBG=true;
49871
50357
  this.DrawAfterTitle=true;
50358
+ this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;
49872
50359
  this.ClassName='MinuteLeftTooltipPaint';
49873
50360
  this.BorderColor=g_JSChartResource.PCTooltipPaint.BorderColor; //边框颜色
49874
50361
  this.BGColor=g_JSChartResource.PCTooltipPaint.BGColor; //背景色
@@ -50279,6 +50766,7 @@ function StockChip()
50279
50766
  this.PixelRatio=GetDevicePixelRatio();
50280
50767
  this.ShowType=0; //0=所有筹码 1=周期前 2=周期内
50281
50768
  this.IsDynamic=true;
50769
+ this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_20;
50282
50770
  this.ClientRect={};
50283
50771
  this.Font=g_JSChartResource.StockChip.Font;
50284
50772
  this.InfoColor=g_JSChartResource.StockChip.InfoColor;
@@ -53958,6 +54446,7 @@ function FrameButtomToolbarPaint()
53958
54446
  this.FrameGuid=null;
53959
54447
  this.IsDynamic=true;
53960
54448
  this.DrawAfterTitle=true;
54449
+ this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;
53961
54450
 
53962
54451
  this.AryButton=[]; // { Title:, ID:, Data:数据, TooltipText:提示信息 }
53963
54452
  this.SelectedID=null; // 选中按钮ID
@@ -58103,6 +58592,7 @@ function ChartCorssCursor()
58103
58592
  this.CallAcutionXOperator;
58104
58593
 
58105
58594
  this.EnableKeyboard=false; //是否支持键盘隐藏显示
58595
+ this.EnableDBClick=false; //是否允许双击显示|隐藏十字光标
58106
58596
  this.OnChangeStatusCallback; //状态切换以后回调
58107
58597
 
58108
58598
 
@@ -59331,6 +59821,27 @@ function ChartCorssCursor()
59331
59821
  }
59332
59822
  }
59333
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
+
59334
59845
 
59335
59846
  this.DrawCorssPoint=function(x,y)
59336
59847
  {
@@ -80090,7 +80601,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
80090
80601
  this.ChartDrawStorageCache=null; //首次需要创建的画图工具数据
80091
80602
  this.RightSpaceCount=0; //右侧空白个数
80092
80603
  this.SourceDataLimit=new Map(); //每个周期缓存数据最大个数 key=周期 value=最大个数
80093
- this.CtrlMoveStep=5; //Ctrl+(Left/Right) 移动数据个数
80604
+ this.CtrlMoveStep=5; //Ctrl+(Left/Right) 移动数据个数
80605
+ this.ShiftMoveStep=1; //Shift+(Left/Right) 移动K线
80094
80606
 
80095
80607
  this.CustomShow=null; //首先显示的K线的起始日期 { Date:日期, Time:时间, PageSize:, Callback:, Position:0=left 1=center }
80096
80608
  this.ZoomType=0; //缩放模式 0=最右边固定缩放, 1=十字光标两边缩放
@@ -80144,6 +80656,15 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
80144
80656
  this.ScrollBar=null; //横向滚动条
80145
80657
  this.IsAutoSyncDataOffset=true; //增量更新时,是否移动当前屏数据
80146
80658
 
80659
+ //热键
80660
+ this.AryHotKey=
80661
+ [
80662
+ //SecondKeyID 1=shiftKey 2=ctrlKey 3=altKey
80663
+ { KeyID:87, SecondKeyID:3, CMD:JSCHART_MENU_ID.CMD_FULLSCREEN_SUMMARY_ID, Args:null, Description:"Alt+W 全屏区间统计" },
80664
+ ]
80665
+
80666
+ this.KLineDragConfig={ EnableShfit:false }; //是否启动Shift+鼠标拖动K线
80667
+
80147
80668
  this.GetKLineCalulate=function()
80148
80669
  {
80149
80670
  var kLineDrawType=this.GetKLineDrawType();
@@ -81181,7 +81702,9 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
81181
81702
  this.PopMinuteChart.Show({ Date:date, Symbol:symbol, Data:data.Tooltip.Data, Chart:data.Tooltip.ChartPaint }, x/pixelRatio,y/pixelRatio);
81182
81703
  }
81183
81704
 
81184
-
81705
+ //Alt+W 区间统计
81706
+ //Alt+数字 切换多个窗口
81707
+ //Ctrl+I
81185
81708
  this.OnCustomKeyDown=function(keyID, e) //自定义键盘事件
81186
81709
  {
81187
81710
  if (keyID==37 && e.ctrlKey) //Ctrl+Left
@@ -81194,12 +81717,93 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
81194
81717
  this.MoveCorssCursorRight(this.CtrlMoveStep);
81195
81718
  return true;
81196
81719
  }
81720
+ else if (keyID==37 && e.shiftKey) //shift+Left 移动K线
81721
+ {
81722
+ this.MoveKLineLeft(this.ShiftMoveStep);
81723
+ return true;
81724
+ }
81725
+ else if (keyID==39 && e.shiftKey) //shift+Right 移动K线
81726
+ {
81727
+ this.MoveKLineRight(this.ShiftMoveStep);
81728
+ return true;
81729
+ }
81730
+ else if (keyID==38 && e.shiftKey) //shift+up 上移十字光标
81731
+ {
81732
+ this.MoveCorssCursorUp(this.ShiftUpDownStepPixel);
81733
+ return true;
81734
+ }
81735
+ else if (keyID==40 && e.shiftKey) //shift+down 下移十字光标
81736
+ {
81737
+ this.MoveCorssCursorDown(this.ShiftUpDownStepPixel);
81738
+ return true;
81739
+ }
81740
+ else if (keyID==13) //回车显示分时图
81741
+ {
81742
+ this.OnEnterKeyDown();
81743
+ }
81197
81744
  else
81198
81745
  {
81199
81746
  return false;
81200
81747
  }
81201
81748
  }
81202
81749
 
81750
+ this.MoveKLineLeft=function(value)
81751
+ {
81752
+ return this.MoveKLine(-value);
81753
+ }
81754
+
81755
+ this.MoveKLineRight=function(value)
81756
+ {
81757
+ return this.MoveKLine(value);
81758
+ }
81759
+
81760
+ this.MoveKLine=function(step)
81761
+ {
81762
+ if (step==0) return;
81763
+
81764
+ var oneStepWidth=this.GetMoveOneStepWidth();
81765
+ var moveSetp=step*oneStepWidth;
81766
+ var bLeft=true;
81767
+ if (step<0)
81768
+ {
81769
+ moveSetp=Math.abs(step)*oneStepWidth;
81770
+ bLeft=false;
81771
+ }
81772
+
81773
+ if(!this.DataMove(moveSetp,bLeft)) return;
81774
+
81775
+ this.UpdataDataoffset();
81776
+ this.RepairCursorIndex();
81777
+ this.UpdatePointByCursorIndex(); //推拽数据的时候不需要把鼠标位置更新到K线上
81778
+ this.UpdateFrameMaxMin();
81779
+ this.ResetFrameXYSplit();
81780
+ this.Draw();
81781
+ this.ShowTooltipByKeyDown();
81782
+ this.OnKLinePageChange("datamove");
81783
+ }
81784
+
81785
+ //修复 当前数据索引大于数据个数的请求
81786
+ this.RepairCursorIndex=function()
81787
+ {
81788
+ var kData=this.GetKData();
81789
+ if (!kData) return;
81790
+
81791
+ var xPointcount=0;
81792
+ if (this.Frame.XPointCount) xPointcount=this.Frame.XPointCount;
81793
+ else xPointcount=this.Frame.SubFrame[0].Frame.XPointCount;
81794
+ if (!IFrameSplitOperator.IsPlusNumber(xPointcount)) return;
81795
+
81796
+ if (this.CursorIndex<0) this.CursorIndex=0;
81797
+
81798
+ var index=this.CursorIndex;
81799
+ index=parseInt(index.toFixed(0));
81800
+
81801
+ if (index+kData.DataOffset>=kData.Data.length)
81802
+ {
81803
+ this.CursorIndex=kData.Data.length-1-kData.DataOffset;
81804
+ }
81805
+ }
81806
+
81203
81807
  this.MoveCorssCursorLeft=function(step)
81204
81808
  {
81205
81809
  var data=null;
@@ -81276,6 +81880,30 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
81276
81880
  this.ShowTooltipByKeyDown();
81277
81881
  }
81278
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
+
81279
81907
  //获取K线图实例
81280
81908
  this.GetKLineChart=function()
81281
81909
  {
@@ -86033,12 +86661,14 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
86033
86661
  var bCorssDrawKLine=false;
86034
86662
  var bCorssDrawVaildTime=false;
86035
86663
  var bCorssDrawPoint=false;
86664
+ var bCorssBCClick=false;
86036
86665
  if (this.ChartCorssCursor)
86037
86666
  {
86038
86667
  bShowCorss=this.ChartCorssCursor.IsShowCorss;
86039
86668
  bCorssDrawKLine=this.ChartCorssCursor.IsOnlyDrawKLine && this.ChartCorssCursor.IsShowClose;
86040
86669
  bCorssDrawVaildTime=this.ChartCorssCursor.IsFixXLastTime;
86041
86670
  bCorssDrawPoint=this.ChartCorssCursor.CorssPointConfig.Enable;
86671
+ bCorssBCClick=this.ChartCorssCursor.EnableDBClick;
86042
86672
  }
86043
86673
 
86044
86674
  var bPopMinuteChart=false;
@@ -86224,6 +86854,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
86224
86854
  { Name:"显示在K线上", Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_ON_KLINE_ID, Args:[!bCorssDrawKLine]}, Checked:bCorssDrawKLine },
86225
86855
  { Name:"画在有效X轴上",Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_ON_VAILD_TIME_ID, Args:[!bCorssDrawVaildTime]}, Checked:bCorssDrawVaildTime },
86226
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 },
86227
86858
  ]
86228
86859
  },
86229
86860
  {
@@ -86697,6 +87328,14 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
86697
87328
 
86698
87329
  this.OnDoubleClick=function(x,y,e)
86699
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
+
86700
87339
  if (this.EnableYDrag && (this.EnableYDrag.Left || this.EnableYDrag.Right) && this.Frame && this.Frame.PtInFrameY)
86701
87340
  {
86702
87341
  var pixelTatio = GetDevicePixelRatio();
@@ -86733,6 +87372,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
86733
87372
  }
86734
87373
  }
86735
87374
 
87375
+ if (bDraw) this.Draw();
87376
+
86736
87377
  var tooltip=new TooltipData();
86737
87378
  if (!this.PtInChartPaintTooltip(x,y,tooltip))
86738
87379
  {
@@ -88519,6 +89160,13 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
88519
89160
  this.BaselineType=0; //基准线类型 0=最新昨收盘 1=多日前昨收盘
88520
89161
  this.EnableNightDayBG=false; //是否启动夜盘背景色
88521
89162
 
89163
+ //热键
89164
+ this.AryHotKey=
89165
+ [
89166
+ //SecondKeyID 1=shiftKey 2=ctrlKey 3=altKey
89167
+ { KeyID:87, SecondKeyID:3, CMD:JSCHART_MENU_ID.CMD_FULLSCREEN_SUMMARY_ID, Args:null, Description:"Alt+W 全屏区间统计" },
89168
+ ]
89169
+
88522
89170
  //集合竞价设置 obj={ Left:true/false, Right:true/false, MultiDay:{Left:, Right:} }
88523
89171
  this.SetCallCationDataBorder=function(obj)
88524
89172
  {
@@ -90023,6 +90671,14 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90023
90671
  draw=sendData.Draw;
90024
90672
  }
90025
90673
 
90674
+ if (this.OnHotKeyDown(keyID, e))
90675
+ {
90676
+ //不让滚动条滚动
90677
+ if(e.preventDefault) e.preventDefault();
90678
+ else e.returnValue = false;
90679
+ return;
90680
+ }
90681
+
90026
90682
  switch(keyID)
90027
90683
  {
90028
90684
  case 37: //left
@@ -90136,6 +90792,11 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90136
90792
  this.CurrentChartDrawPicture=null;
90137
90793
  }
90138
90794
  break;
90795
+ case 38:
90796
+ case 40:
90797
+ if ((e.ctrlKey||e.shiftKey) && this.OnCustomKeyDown)
90798
+ this.OnCustomKeyDown(keyID, e)
90799
+ break;
90139
90800
  default:
90140
90801
  return;
90141
90802
  }
@@ -90147,6 +90808,24 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90147
90808
  else e.returnValue = false;
90148
90809
  }
90149
90810
 
90811
+ this.OnCustomKeyDown=function(keyID, e) //自定义键盘事件
90812
+ {
90813
+ if (keyID==38 && e.shiftKey) //shift+up 上移十字光标
90814
+ {
90815
+ this.MoveCorssCursorUp(this.ShiftUpDownStepPixel);
90816
+ return true;
90817
+ }
90818
+ else if (keyID==40 && e.shiftKey) //shift+down 下移十字光标
90819
+ {
90820
+ this.MoveCorssCursorDown(this.ShiftUpDownStepPixel);
90821
+ return true;
90822
+ }
90823
+ else
90824
+ {
90825
+ return false;
90826
+ }
90827
+ }
90828
+
90150
90829
  /*
90151
90830
  this.OnMarkRectSelect=function(e)
90152
90831
  {
@@ -90256,12 +90935,14 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90256
90935
  var bCorssDrawCloseLine=false; //十字光标只能画在走势图价格线上
90257
90936
  var bCorssDrawVaildTime=false;
90258
90937
  var bCorssDrawPoint=false;
90938
+ var bCorssBCClick=false;
90259
90939
  if (this.ChartCorssCursor)
90260
90940
  {
90261
90941
  bShowCorss=this.ChartCorssCursor.IsShowCorss;
90262
90942
  bCorssDrawCloseLine=this.ChartCorssCursor.IsOnlyDrawMinute;
90263
90943
  bCorssDrawVaildTime=this.ChartCorssCursor.IsFixXLastTime;
90264
90944
  bCorssDrawPoint=this.ChartCorssCursor.CorssPointConfig.Enable;
90945
+ bCorssBCClick=this.ChartCorssCursor.EnableDBClick;
90265
90946
  }
90266
90947
 
90267
90948
  var bRButtonSelectRect=false,bLButtonSelectRect=false;
@@ -90358,6 +91039,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90358
91039
  { Name:"画在价格线上", Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_ON_CLOSE_LINE_ID, Args:[!bCorssDrawCloseLine]}, Checked:bCorssDrawCloseLine },
90359
91040
  { Name:"画在有效X轴上",Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_ON_VAILD_TIME_ID, Args:[!bCorssDrawVaildTime]}, Checked:bCorssDrawVaildTime },
90360
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 },
90361
91043
  ]
90362
91044
  },
90363
91045
 
@@ -90498,6 +91180,14 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90498
91180
  {
90499
91181
  JSConsole.Chart.Log("[MinuteChartContainer::OnDoubleClick]", e);
90500
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
+
90501
91191
  if (this.EnableYDrag && (this.EnableYDrag.Left || this.EnableYDrag.Right) && this.Frame && this.Frame.PtInFrameY)
90502
91192
  {
90503
91193
  var pixelTatio = GetDevicePixelRatio();
@@ -90535,10 +91225,12 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
90535
91225
  if (this.ZoomIndexWindow(frameId, {X:x, Y:y}))
90536
91226
  {
90537
91227
  this.Frame.SetSizeChage(true);
90538
- this.Draw();
91228
+ bDraw=true;
90539
91229
  }
90540
91230
  }
90541
91231
  }
91232
+
91233
+ if (bDraw) this.Draw();
90542
91234
  }
90543
91235
 
90544
91236
  this.GetDataItem=function(pointInfo)
@@ -104194,7 +104886,7 @@ function Node(ErrorHandler)
104194
104886
  //CAPITAL流通股本(手), EXCHANGE 换手率, TOTALCAPITAL 总股本(手)
104195
104887
  let setVariantName=new Set(
104196
104888
  [
104197
- "CAPITAL","TOTALCAPITAL","EXCHANGE",
104889
+ "CAPITAL","TOTALCAPITAL","EXCHANGE","HSL",
104198
104890
  "HYBLOCK","DYBLOCK","GNBLOCK","FGBLOCK","ZSBLOCK","ZHBLOCK","ZDBLOCK","HYZSCODE",
104199
104891
  "GNBLOCKNUM","FGBLOCKNUM","ZSBLOCKNUM","ZHBLOCKNUM","ZDBLOCKNUM",
104200
104892
  "HYSYL","HYSJL","FROMOPEN",
@@ -117738,7 +118430,7 @@ function JSSymbolData(ast,option,jsExecute)
117738
118430
  {
117739
118431
  var dataType=0;
117740
118432
  if (IFrameSplitOperator.IsNumber(recvData.DataType)) dataType=recvData.DataType;
117741
- self.RecvStockValue(recvData.Data,jobItem,key,dataType);
118433
+ self.RecvStockValue(recvData.Data,jobItem,key,dataType,recvData);
117742
118434
  }
117743
118435
 
117744
118436
  self.Execute.RunNextJob();
@@ -117753,7 +118445,7 @@ function JSSymbolData(ast,option,jsExecute)
117753
118445
  };
117754
118446
 
117755
118447
  var apiDownload;
117756
- if (jobItem.VariantName=="CAPITAL" || jobItem.VariantName=="TOTALCAPITAL" || jobItem.VariantName=="EXCHANGE")
118448
+ if (jobItem.VariantName=="CAPITAL" || jobItem.VariantName=="TOTALCAPITAL" || jobItem.VariantName=="EXCHANGE" || jobItem.VariantName=="HSL")
117757
118449
  {
117758
118450
  var callback=function(recvData, jobItem, key)
117759
118451
  {
@@ -117948,7 +118640,7 @@ function JSSymbolData(ast,option,jsExecute)
117948
118640
  }
117949
118641
  }
117950
118642
 
117951
- this.RecvStockValue=function(recvData,jobItem,key,dataType)
118643
+ this.RecvStockValue=function(recvData,jobItem,key,dataType, srcData)
117952
118644
  {
117953
118645
  if (!recvData)
117954
118646
  {
@@ -117979,8 +118671,9 @@ function JSSymbolData(ast,option,jsExecute)
117979
118671
  var bindData=new ChartData();
117980
118672
  bindData.Data=aryFittingData;
117981
118673
  var result=bindData.GetValue();
118674
+ var bVersion2=srcData && srcData.Ver==2; //2.0 版本
117982
118675
 
117983
- if (key=="EXCHANGE") //计算换手率=成交量/流通股本*100
118676
+ if (!bVersion2 && (key=="EXCHANGE" || key=="HSL")) //计算换手率=成交量/流通股本*100
117984
118677
  {
117985
118678
  for(var i in result)
117986
118679
  {
@@ -120000,7 +120693,7 @@ function JSExecute(ast,option)
120000
120693
 
120001
120694
  ['CAPITAL',null], //流通股本(手)
120002
120695
  ["TOTALCAPITAL",null], //TOTALCAPITAL 当前总股本 手
120003
- ['EXCHANGE',null], //换手率
120696
+ ['EXCHANGE',null], ["HSL",null], //换手率
120004
120697
  ['SETCODE', null], //市场类型
120005
120698
  ['CODE',null], //品种代码
120006
120699
  ['STKNAME',null], //品种名称
@@ -120250,6 +120943,7 @@ function JSExecute(ast,option)
120250
120943
  case "TOTALCAPITAL":
120251
120944
  case 'CAPITAL':
120252
120945
  case 'EXCHANGE':
120946
+ case "HSL":
120253
120947
 
120254
120948
  case "HYBLOCK":
120255
120949
  case "DYBLOCK":
@@ -121917,7 +122611,7 @@ function JSExplainer(ast,option)
121917
122611
  ['BARSTATUS',"数据位置状态"], //BARSTATUS返回数据位置信息,1表示第一根K线,2表示最后一个数据,0表示中间位置.
121918
122612
 
121919
122613
  ['CAPITAL',"当前流通股本(手)"], ["TOTALCAPITAL","当前总股本(手)"],
121920
- ['EXCHANGE',"换手率"], //换手率
122614
+ ['EXCHANGE',"换手率"], ['HSL',"换手线"],
121921
122615
  ['SETCODE', "市场类型"], //市场类型
121922
122616
  ['CODE',"品种代码"], //品种代码
121923
122617
  ['STKNAME',"品种名称"], //品种名称
@@ -128857,6 +129551,19 @@ function APIScriptIndex(name,script,args,option, isOverlay)
128857
129551
 
128858
129552
  result.push(outVarItem);
128859
129553
  }
129554
+ else if (draw.DrawType=="DRAWTEXT_LINE")
129555
+ {
129556
+ drawItem.Name=draw.Name;
129557
+ drawItem.Type=draw.Type;
129558
+
129559
+ drawItem.DrawType=draw.DrawType;
129560
+ drawItem.DrawData=draw.DrawData; //{ Price:, Text:{ Title:text, Color:textcolor }, Line:{ Type:linetype, Color:linecolor } };
129561
+
129562
+ outVarItem.Draw=drawItem;
129563
+ if (draw.Font) outVarItem.Font=draw.Font;
129564
+
129565
+ result.push(outVarItem);
129566
+ }
128860
129567
  else
128861
129568
  {
128862
129569
  var find=g_ScriptIndexChartFactory.Get(draw.DrawType); //外部挂接
@@ -129162,6 +129869,7 @@ function DownloadFinanceData(obj)
129162
129869
  case 1: //FINANCE(1) 总股本(随时间可能有变化) 股
129163
129870
  case 7: //FINANCE(7) 流通股本(随时间可能有变化) 股
129164
129871
  case "EXCHANGE": //换手率
129872
+ case "HSL"://换手率
129165
129873
  this.DownloadHistoryData(id);
129166
129874
  break;
129167
129875
  case 3:
@@ -129288,6 +129996,7 @@ function DownloadFinanceData(obj)
129288
129996
  return ["capital.total", "capital.date"];
129289
129997
  case 7:
129290
129998
  return ["capital.a", "capital.date"];
129999
+ case "HSL":
129291
130000
  case "EXCHANGE":
129292
130001
  return ["capital.a", "capital.date"];
129293
130002
 
@@ -129421,6 +130130,7 @@ function DownloadFinanceData(obj)
129421
130130
  if (!item.capital) return null;
129422
130131
  return { Date:date, Value:item.capital.total };
129423
130132
  case 7:
130133
+ case "HSL": //换手率
129424
130134
  case "EXCHANGE": //换手率 历史流通股本
129425
130135
  if (!item.capital) return null;
129426
130136
  return { Date:date, Value:item.capital.a };
@@ -150495,6 +151205,7 @@ function MarkPopMinutePaint()
150495
151205
  this.LineColor=g_JSChartResource.PopMinuteChart.Mark.LineColor;
150496
151206
  this.SubFrame;
150497
151207
  this.IsDynamic=true;
151208
+ this.IsShow=true;
150498
151209
 
150499
151210
 
150500
151211
  this.ReloadResource=function(resource)
@@ -150524,6 +151235,7 @@ function MarkPopMinutePaint()
150524
151235
  this.Draw=function()
150525
151236
  {
150526
151237
  this.SubFrame=null;
151238
+ if (!this.IsShow) return;
150527
151239
  if (!this.HQChart) return;
150528
151240
  if (!this.ChartFrame || !IFrameSplitOperator.IsNonEmptyArray(this.ChartFrame.SubFrame)) return;
150529
151241
  if (!this.MapDate || this.MapDate.size<=0) return;
@@ -150578,9 +151290,10 @@ function MarkPopMinutePaint()
150578
151290
 
150579
151291
  this.Canvas.lineWidth=lineWidth;
150580
151292
  this.Canvas.strokeStyle=this.LineColor;
151293
+ var x=ToFixedPoint2(lineWidth,item.XCenter);
150581
151294
  this.Canvas.beginPath();
150582
- this.Canvas.moveTo(item.XCenter,border.TopEx);
150583
- this.Canvas.lineTo(item.XCenter,border.BottomEx);
151295
+ this.Canvas.moveTo(x,border.TopEx);
151296
+ this.Canvas.lineTo(x,border.BottomEx);
150584
151297
  this.Canvas.stroke();
150585
151298
  }
150586
151299
  }
@@ -154554,10 +155267,14 @@ function JSDialogSearchIndex()
154554
155267
  {
154555
155268
  if (!IFrameSplitOperator.IsNumber(this.OpData.WindowIndex)) return;
154556
155269
  var indexItem=cellItem.IndexItem;
154557
- if (indexItem.Type==0) //系统指标
155270
+ if (indexItem.Type==0 ) //系统指标
154558
155271
  {
154559
155272
  this.HQChart.ChangeIndex(this.OpData.WindowIndex, indexItem.ID );
154560
155273
  }
155274
+ else if(indexItem.Type==4 || indexItem.Type==5) //五彩K线
155275
+ {
155276
+ this.HQChart.ChangeInstructionIndex(indexItem.ID);
155277
+ }
154561
155278
  else if (indexItem.Type==1) //自定义脚本指标
154562
155279
  {
154563
155280
  var indexData={ ID:indexItem.ID, Name:indexItem.Name, Script:indexItem.Script, Args:indexItem.Args };
@@ -154597,6 +155314,10 @@ function JSDialogSearchIndex()
154597
155314
  {
154598
155315
  this.HQChart.ChangeIndexTemplate(indexItem.TemplateData)
154599
155316
  }
155317
+ else if(indexItem.Type==4 || indexItem.Type==5) //五彩K线
155318
+ {
155319
+ this.HQChart.ChangeInstructionIndex(indexItem.ID);
155320
+ }
154600
155321
  }
154601
155322
  else if (this.OpData.OpType==3) //新增加指标窗口
154602
155323
  {
@@ -154819,7 +155540,7 @@ JSDialogSearchIndex.GetDefaultIndexData=function()
154819
155540
  Group:{ ID:"超买超卖型", Name:"超买超卖型"} ,
154820
155541
  AryIndex:
154821
155542
  [
154822
- {Name:"ADTM 动态买卖气指标", ID:"ADTM", Type:0 }, //Type:0=系统指标 1=自定义通达信脚本 2=api指标
155543
+ {Name:"ADTM 动态买卖气指标", ID:"ADTM", Type:0 }, //Type:0=系统指标 1=自定义通达信脚本 2=api指标 3=指标模板 4=交易系统 5=五彩K线
154823
155544
  {Name:"BIAS 乖离率", ID:"BIAS", Type:0},
154824
155545
  {Name:"BIAS36 三六乖离", ID:"BIAS36", Type:0 },
154825
155546
  {Name:"BIAS_QL 乖离率-传统版", ID:"BIAS_QL", Type:0 },
@@ -154830,7 +155551,17 @@ JSDialogSearchIndex.GetDefaultIndexData=function()
154830
155551
  {Name:"OSC 变动速率线", ID:"OSC", Type:0},
154831
155552
  {Name:"RSI 相对强弱指标", ID:"RSI", Type:0},
154832
155553
  {Name:"ROC 变动率指标", ID:"ROC", Type:0},
154833
- {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},
154834
155565
  ]
154835
155566
  },
154836
155567
 
@@ -154845,7 +155576,22 @@ JSDialogSearchIndex.GetDefaultIndexData=function()
154845
155576
  {Name:"MACD 平滑异同平均", ID:"MACD", Type:0 },
154846
155577
  {Name:"TRIX 三重指数平均线", ID:"TRIX", Type:0 },
154847
155578
  {Name:"UOS 终极指标", ID:"UOS", Type:0 },
154848
- {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 },
154849
155595
  ]
154850
155596
  },
154851
155597
 
@@ -154857,7 +155603,18 @@ JSDialogSearchIndex.GetDefaultIndexData=function()
154857
155603
  {Name:"OBV 累积能量线", ID:"OBV", Type:0},
154858
155604
  {Name:"NVI 负成交量", ID:"NVI", Type:0},
154859
155605
  {Name:"PVI 正成交量", ID:"PVI", Type:0},
154860
- {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},
154861
155618
  ]
154862
155619
  },
154863
155620
  {
@@ -154865,7 +155622,22 @@ JSDialogSearchIndex.GetDefaultIndexData=function()
154865
155622
  AryIndex:
154866
155623
  [
154867
155624
  {Name:"MA 均线", ID:"MA", Type:0},
154868
- {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},
154869
155641
  ]
154870
155642
  },
154871
155643
  {
@@ -154873,9 +155645,13 @@ JSDialogSearchIndex.GetDefaultIndexData=function()
154873
155645
  AryIndex:
154874
155646
  [
154875
155647
  {Name:"BOLL 布林线", ID:"BOLL", Type:0},
154876
- {Name:"BOLL副图 布林线", ID:"BOLL副图", Type:0},
155648
+ {Name:"BOLL 布林线-副图", ID:"BOLL副图", Type:0},
154877
155649
  {Name:"MIKE 麦克支撑压力", ID:"MIKE", Type:0},
154878
- {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}
154879
155655
  ]
154880
155656
  },
154881
155657
  {
@@ -154888,7 +155664,91 @@ JSDialogSearchIndex.GetDefaultIndexData=function()
154888
155664
  {Name:"PSY 心理线", ID:"PSY", Type:0},
154889
155665
  {Name:"CR 带状能量线", ID:"CR", Type:0},
154890
155666
  {Name:"VR 成交量变异率", ID:"VR", Type:0},
154891
- {Name:"WAD 威廉多空力度线", ID:"WAD", Type:0}
155667
+ {Name:"WAD 威廉多空力度线", ID:"WAD", Type:0},
155668
+ {Name:"PCNT 幅度比", ID:"PCNT", Type:0}
155669
+ ]
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
+
155680
+ {
155681
+ Group:{ ID:"五彩K线", Name:"五彩K线"} ,
155682
+ AryIndex:
155683
+ [
155684
+ {Name:"五彩K线-十字星", ID:"五彩K线-十字星", Type:5},
155685
+ {Name:"五彩K线-早晨之星", ID:"五彩K线-早晨之星", Type:5},
155686
+ {Name:"五彩K线-黄昏之星", ID:"五彩K线-黄昏之星", Type:5},
155687
+ {Name:"五彩K线-长十字", ID:"五彩K线-长十字", Type:5},
155688
+
155689
+ {Name:"五彩K线-身怀六甲", ID:"五彩K线-身怀六甲", Type:5},
155690
+ {Name:"五彩K线-三个白武士", ID:"五彩K线-三个白武士", Type:5},
155691
+ {Name:"五彩K线-三只乌鸦", ID:"五彩K线-三只乌鸦", Type:5},
155692
+ {Name:"五彩K线-光头阳线", ID:"五彩K线-光头阳线", Type:5},
155693
+
155694
+ {Name:"五彩K线-光脚阴线", ID:"五彩K线-光脚阴线线", Type:5},
155695
+ {Name:"五彩K线-垂死十字", ID:"五彩K线-垂死十字", Type:5},
155696
+ {Name:"五彩K线-早晨十字星", ID:"五彩K线-早晨十字星", Type:5},
155697
+ {Name:"五彩K线-黄昏十字星", ID:"五彩K线-黄昏十字星", Type:5},
155698
+
155699
+ {Name:"五彩K线-射击之星", ID:"五彩K线-射击之星", Type:5},
155700
+ {Name:"五彩K线-倒转锤头", ID:"五彩K线-倒转锤头", Type:5},
155701
+ {Name:"五彩K线-锤头", ID:"五彩K线-锤头", Type:5},
155702
+ {Name:"五彩K线-吊颈", ID:"五彩K线-吊颈星", Type:5},
155703
+
155704
+ {Name:"五彩K线-穿头破脚", ID:"五彩K线-穿头破脚", Type:5},
155705
+ {Name:"五彩K线-出水芙蓉", ID:"五彩K线-出水芙蓉", Type:5},
155706
+ {Name:"五彩K线-乌云盖顶", ID:"五彩K线-乌云盖顶", Type:5},
155707
+ {Name:"五彩K线-曙光初现", ID:"五彩K线-曙光初现", Type:5},
155708
+
155709
+ {Name:"五彩K线-十字胎", ID:"五彩K线-十字胎", Type:5},
155710
+ {Name:"五彩K线-剑", ID:"五彩K线-剑", Type:5},
155711
+ {Name:"五彩K线-平顶", ID:"五彩K线-平顶", Type:5},
155712
+ {Name:"五彩K线-平底", ID:"五彩K线-平底", Type:5},
155713
+
155714
+ {Name:"五彩K线-大阳烛", ID:"五彩K线-大阳烛", Type:5},
155715
+ {Name:"五彩K线-大阴烛", ID:"五彩K线-大阴烛", Type:5},
155716
+
155717
+ {Name:"五彩K线-好友反攻", ID:"五彩K线-好友反攻", Type:5},
155718
+ {Name:"五彩K线-跳空缺口", ID:"五彩K线-跳空缺口", Type:5},
155719
+
155720
+ {Name:"五彩K线-双飞乌鸦", ID:"五彩K线-双飞乌鸦", Type:5},
155721
+ {Name:"五彩K线-上升三部曲", ID:"五彩K线-上升三部曲", Type:5},
155722
+ {Name:"五彩K线-下跌三部曲", ID:"五彩K线-下跌三部曲", Type:5},
155723
+ {Name:"五彩K线-长下影", ID:"五彩K线-长下影", Type:5},
155724
+
155725
+ {Name:"五彩K线-长上影", ID:"五彩K线-长上影", Type:5},
155726
+ {Name:"五彩K线-分离", ID:"五彩K线-分离", Type:5},
155727
+
155728
+ ]
155729
+ },
155730
+ {
155731
+ Group:{ ID:"交易系统", Name:"交易系统"} ,
155732
+ AryIndex:
155733
+ [
155734
+ {Name:"交易系统-BIAS", ID:"交易系统-BIAS", Type:4},
155735
+ {Name:"交易系统-CCI", ID:"交易系统-CCI", Type:4},
155736
+ {Name:"交易系统-DMI", ID:"交易系统-DMI", Type:4},
155737
+ {Name:"交易系统-KD", ID:"交易系统-KD", Type:4},
155738
+
155739
+ {Name:"交易系统-BOLL", ID:"交易系统-BOLL", Type:4},
155740
+ {Name:"交易系统-KDJ", ID:"交易系统-KDJ", Type:4},
155741
+ {Name:"交易系统-MACD", ID:"交易系统-MACD", Type:4},
155742
+ {Name:"交易系统-KD", ID:"交易系统-KD", Type:4},
155743
+
155744
+ {Name:"交易系统-MTM", ID:"交易系统-MTM", Type:4},
155745
+ {Name:"交易系统-PSY", ID:"交易系统-PSY", Type:4},
155746
+ {Name:"交易系统-ROC", ID:"交易系统-ROC", Type:4},
155747
+ {Name:"交易系统-RSI", ID:"交易系统-RSI", Type:4},
155748
+
155749
+ {Name:"交易系统-VR", ID:"交易系统-VR", Type:4},
155750
+ {Name:"交易系统-DPSJ", ID:"交易系统-DPSJ", Type:4},
155751
+
154892
155752
  ]
154893
155753
  },
154894
155754
 
@@ -155496,7 +156356,7 @@ function HQChartScriptWorker()
155496
156356
 
155497
156357
 
155498
156358
 
155499
- var HQCHART_VERSION="1.1.14563";
156359
+ var HQCHART_VERSION="1.1.14590";
155500
156360
 
155501
156361
  function PrintHQChartVersion()
155502
156362
  {