hqchart 1.1.15382 → 1.1.15390

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hqchart",
3
- "version": "1.1.15382",
3
+ "version": "1.1.15390",
4
4
  "description": "HQChart - H5, 微信小程序 沪深/港股/数字货币/期货/美股 K线图(kline),走势图,缩放,拖拽,十字光标,画图工具,截图,筹码图. 分析家语法,通达信语法,(麦语法),第3方数据对接",
5
5
  "main": "lib/main.js",
6
6
  "scripts": {
@@ -441,6 +441,24 @@ JSComplierHelper.GetConvertValueName=function(funcName)
441
441
 
442
442
  return valueName;
443
443
  }
444
+
445
+
446
+ //DYNAINFO() 转换
447
+ //["DYNA_NOW",null], //DYNA_NOW 现价 DYNAINFO(7) 即时行情数据 没有现价时(比如在开盘前),返回昨收盘价
448
+ //["DYNA_ZAF",null], //DYNA_ZAF 涨幅 DYNAINFO(14) 即时行情数据(沪深京早盘竞价期间使用匹配价的涨幅) 转换成幅度需要乘100
449
+ //["DYNA_LB", null], //DYNA_LB DYNAINFO(17) 量比 即时行情数据
450
+ //["DYNA_ZAS",null], //DYNA_ZAS DYNAINFO(24) 返回涨速 报价界面行情数据 转换成幅度需要乘100
451
+ //["SELLVOL", null], //返回内盘,即DYNAINFO(22) 即时行情数据
452
+ //["BUYVOL", null], //返回外盘,即DYNAINFO(21) 即时行情数据
453
+ const MAP_DYNAINFO_SHORTCUT=new Map(
454
+ [
455
+ ['DYNA_NOW', { Name:"DYNA_NOW", ID:7 } ],
456
+ ['DYNA_LB', { Name:"DYNA_LB", ID:17 } ],
457
+ ['DYNA_ZAS', { Name:"DYNA_ZAS", ID:24 } ],
458
+ ['SELLVOL', { Name:"SELLVOL", ID:22 }],
459
+ ['BUYVOL', { Name:"BUYVOL", ID:21 } ],
460
+ ]
461
+ );
444
462
 
445
463
 
446
464
 
@@ -1380,6 +1398,14 @@ function Node(ErrorHandler)
1380
1398
  return;
1381
1399
  }
1382
1400
 
1401
+ if (MAP_DYNAINFO_SHORTCUT.has(varName))
1402
+ {
1403
+ var item=MAP_DYNAINFO_SHORTCUT.get(varName);
1404
+ var item={ ID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_SYMBOL_LATEST_DATA, Args:[item.ID], FunctionName:varName };
1405
+ this.Dynainfo.push(item);
1406
+ return;
1407
+ }
1408
+
1383
1409
  if (varName.indexOf('#')>0)
1384
1410
  {
1385
1411
  var aryWrods = varName.split('#');
@@ -12135,8 +12161,10 @@ var DYNAINFO_ARGUMENT_ID=
12135
12161
  CLOSE:7,
12136
12162
  VOL:8,
12137
12163
  AMOUNT:10,
12164
+ UPDOWN:12, //DYNAINFO(12) 日涨跌 即时行情数据
12138
12165
  AMPLITUDE:13, //振幅
12139
12166
  INCREASE:14, //涨幅
12167
+
12140
12168
  EXCHANGERATE:37, //换手率
12141
12169
  };
12142
12170
 
@@ -12315,16 +12343,18 @@ function JSSymbolData(ast,option,jsExecute)
12315
12343
  let stock=data.stock[0];
12316
12344
  if (!stock) return;
12317
12345
 
12318
- if (IFrameSplitOperator.IsNumber(stock.yclose)) this.LatestData.set(DYNAINFO_ARGUMENT_ID.YCLOSE,stock.yclose);
12319
- if (IFrameSplitOperator.IsNumber(stock.open)) this.LatestData.set(DYNAINFO_ARGUMENT_ID.OPEN,stock.open);
12320
- if (IFrameSplitOperator.IsNumber(stock.high)) this.LatestData.set(DYNAINFO_ARGUMENT_ID.HIGH,stock.high);
12321
- if (IFrameSplitOperator.IsNumber(stock.low)) this.LatestData.set(DYNAINFO_ARGUMENT_ID.LOW,stock.low);
12322
- if (IFrameSplitOperator.IsNumber(stock.price)) this.LatestData.set(DYNAINFO_ARGUMENT_ID.CLOSE,stock.price);
12323
- if (IFrameSplitOperator.IsNumber(stock.vol)) this.LatestData.set(DYNAINFO_ARGUMENT_ID.VOL,stock.vol);
12324
- if (IFrameSplitOperator.IsNumber(stock.amount)) this.LatestData.set(DYNAINFO_ARGUMENT_ID.AMOUNT,stock.amount);
12325
- if (IFrameSplitOperator.IsNumber(stock.increase)) this.LatestData.set(DYNAINFO_ARGUMENT_ID.INCREASE,stock.increase);
12326
- if (IFrameSplitOperator.IsNumber(stock.exchangerate)) this.LatestData.set(DYNAINFO_ARGUMENT_ID.EXCHANGERATE,stock.exchangerate);
12327
- if (IFrameSplitOperator.IsNumber(stock.amplitude)) this.LatestData.set(DYNAINFO_ARGUMENT_ID.AMPLITUDE,stock.amplitude);
12346
+ if (IFrameSplitOperator.IsNumber(stock.yclose)) this.LatestData.set(this.GetLatestDataKey(DYNAINFO_ARGUMENT_ID.YCLOSE),stock.yclose);
12347
+ if (IFrameSplitOperator.IsNumber(stock.open)) this.LatestData.set(this.GetLatestDataKey(DYNAINFO_ARGUMENT_ID.OPEN),stock.open);
12348
+ if (IFrameSplitOperator.IsNumber(stock.high)) this.LatestData.set(this.GetLatestDataKey(DYNAINFO_ARGUMENT_ID.HIGH),stock.high);
12349
+ if (IFrameSplitOperator.IsNumber(stock.low)) this.LatestData.set(this.GetLatestDataKey(DYNAINFO_ARGUMENT_ID.LOW),stock.low);
12350
+ if (IFrameSplitOperator.IsNumber(stock.price)) this.LatestData.set(this.GetLatestDataKey(DYNAINFO_ARGUMENT_ID.CLOSE),stock.price);
12351
+ if (IFrameSplitOperator.IsNumber(stock.vol)) this.LatestData.set(this.GetLatestDataKey(DYNAINFO_ARGUMENT_ID.VOL),stock.vol);
12352
+ if (IFrameSplitOperator.IsNumber(stock.amount)) this.LatestData.set(this.GetLatestDataKey(DYNAINFO_ARGUMENT_ID.AMOUNT),stock.amount);
12353
+ if (IFrameSplitOperator.IsNumber(stock.increase)) this.LatestData.set(this.GetLatestDataKey(DYNAINFO_ARGUMENT_ID.INCREASE),stock.increase);
12354
+ if (IFrameSplitOperator.IsNumber(stock.exchangerate)) this.LatestData.set(this.GetLatestDataKey(DYNAINFO_ARGUMENT_ID.EXCHANGERATE),stock.exchangerate);
12355
+ if (IFrameSplitOperator.IsNumber(stock.amplitude)) this.LatestData.set(this.GetLatestDataKey(DYNAINFO_ARGUMENT_ID.AMPLITUDE),stock.amplitude);
12356
+ if (IFrameSplitOperator.IsNumber(stock.updown)) this.LatestData.set(this.GetLatestDataKey(DYNAINFO_ARGUMENT_ID.UPDOWN),stock.updown);
12357
+
12328
12358
 
12329
12359
  /*
12330
12360
  this.LatestData={ Symbol:stock.symbol, Name:stock.name, Date:stock.date, Time:stock.time,
@@ -12349,7 +12379,7 @@ function JSSymbolData(ast,option,jsExecute)
12349
12379
  if (IFrameSplitOperator.IsNumber(item.value) || IFrameSplitOperator.IsString(item.value))
12350
12380
  {
12351
12381
  JSConsole.Complier.Log(`[JSSymbolData::RecvLatestDataVer2] symbol=${symbol} DYNAINFO(${item.id})=${item.value}.`);
12352
- this.LatestData.set(item.id, item.value);
12382
+ this.LatestData.set(this.GetLatestDataKey(item.id), item.value);
12353
12383
  }
12354
12384
 
12355
12385
  }
@@ -12357,9 +12387,48 @@ function JSSymbolData(ast,option,jsExecute)
12357
12387
  JSConsole.Complier.Log('[JSSymbolData::RecvLatestDataVer2]', this.LatestData);
12358
12388
  }
12359
12389
 
12360
- this.GetLatestCacheData=function(dataname)
12390
+ this.GetLatestCacheData=function(dataID)
12391
+ {
12392
+ var key=this.GetLatestDataKey(dataID);
12393
+ if (!this.LatestData.has(key)) return null;
12394
+
12395
+ var data=this.LatestData.get(key);
12396
+
12397
+ //DYNAINFO(36) 自由流通换手率(序列数据,每个周期的数据不同,使用最新的自由流通股本) 转换成幅度需要乘100 比如DYNAINFO(36)>0.25表示换手超过25%
12398
+ //DYNAINFO(37) 换手率(序列数据,每个周期的数据不同,使用的流通股本为最近数据) 转换成幅度需要乘100 比如DYNAINFO(37)>0.1表示换手超过10%
12399
+ if (dataID==37 || dataID==36)
12400
+ {
12401
+ var value=null;
12402
+ if (IFrameSplitOperator.IsNumber(data)) value=data;
12403
+ else if (IFrameSplitOperator.IsNonEmptyArray(data) && IFrameSplitOperator.IsNumber(data[0])) value=data[0];
12404
+ else return null;
12405
+
12406
+ if (!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return null;
12407
+
12408
+ var aryData=[];
12409
+ for(var i=0;i<this.Data.Data.length;++i)
12410
+ {
12411
+ var kItem=this.Data.Data[i];
12412
+ aryData[i]=null;
12413
+ if (!kItem || !IFrameSplitOperator.IsNumber(kItem.Vol)) continue;
12414
+
12415
+ aryData[i]=kItem.Vol/value*100.0;// 换手率
12416
+ }
12417
+
12418
+ return aryData;
12419
+ }
12420
+
12421
+
12422
+ return data;
12423
+ }
12424
+
12425
+ this.GetDynaCacheData=function(name)
12361
12426
  {
12362
- if (this.LatestData.has(dataname)) return this.LatestData.get(dataname);
12427
+ if (MAP_DYNAINFO_SHORTCUT.has(name))
12428
+ {
12429
+ var item=MAP_DYNAINFO_SHORTCUT.get(name);
12430
+ return this.GetLatestCacheData(item.ID);
12431
+ }
12363
12432
 
12364
12433
  return null;
12365
12434
  }
@@ -17346,6 +17415,13 @@ function JSExecute(ast,option)
17346
17415
  ["TR", null], //真实波幅
17347
17416
  ["AUTOFILTER", null],
17348
17417
 
17418
+ ["DYNA_NOW",null], //DYNA_NOW 现价 DYNAINFO(7) 即时行情数据 没有现价时(比如在开盘前),返回昨收盘价
17419
+ ["DYNA_ZAF",null], //DYNA_ZAF 涨幅 DYNAINFO(14) 即时行情数据(沪深京早盘竞价期间使用匹配价的涨幅) 转换成幅度需要乘100
17420
+ ["DYNA_LB", null], //DYNA_LB DYNAINFO(17) 量比 即时行情数据
17421
+ ["DYNA_ZAS",null], //DYNA_ZAS DYNAINFO(24) 返回涨速 报价界面行情数据 转换成幅度需要乘100
17422
+ ["SELLVOL", null], //返回内盘,即DYNAINFO(22) 即时行情数据
17423
+ ["BUYVOL", null], //返回外盘,即DYNAINFO(21) 即时行情数据
17424
+
17349
17425
  ['LARGEINTRDVOL', null], //逐笔买入大单成交量,相当于L2_VOL(0,0)+L2_VOL(1,0),沪深京品种的资金流向,仅日线以上周期,用于特定版本
17350
17426
  ['LARGEOUTTRDVOL', null], //逐笔卖出大单成交量,相当于L2_VOL(0,1)+L2_VOL(1,1),沪深京品种的资金流向,仅日线以上周期,用于特定版本
17351
17427
  ["TRADENUM", null], //逐笔成交总单数,沪深京品种的资金流向,仅日线以上周期,用于特定版本
@@ -17678,6 +17754,14 @@ function JSExecute(ast,option)
17678
17754
  return this.SymbolData.WEEKOFYEAR();
17679
17755
  case "DAYSTOTODAY":
17680
17756
  return this.SymbolData.DAYSTOTODAY();
17757
+
17758
+ case "DYNA_NOW":
17759
+ case "DYNA_ZAF":
17760
+ case "DYNA_LB":
17761
+ case "DYNA_ZAS":
17762
+ case "SELLVOL":
17763
+ case "BUYVOL":
17764
+ return this.SymbolData.GetDynaCacheData(name);
17681
17765
  }
17682
17766
 
17683
17767
  this.ThrowUnexpectedNode(node, '变量'+name+'不存在', name);
@@ -8592,6 +8592,13 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8592
8592
  return false;
8593
8593
  }
8594
8594
 
8595
+ this.IsHScreenModel=function()
8596
+ {
8597
+ if (this.ClassName=="KLineChartHScreenContainer" || this.ClassName=="MinuteChartHScreenContainer") return true;
8598
+
8599
+ return false;
8600
+ }
8601
+
8595
8602
  this.UpdatePointByCursorIndex=function(type) //type 1=根据十字光标更新 2=强制取消十字光标
8596
8603
  {
8597
8604
  if (type==1) //根据十字光标更新
@@ -8612,8 +8619,18 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8612
8619
  pt.X=null;
8613
8620
  }
8614
8621
  }
8615
- this.LastPoint.X=pt.X;
8616
- this.LastPoint.Y=pt.Y;
8622
+
8623
+ if (this.IsHScreenModel())
8624
+ {
8625
+ this.LastPoint.X=pt.Y;
8626
+ this.LastPoint.Y=pt.X;
8627
+ }
8628
+ else
8629
+ {
8630
+ this.LastPoint.X=pt.X;
8631
+ this.LastPoint.Y=pt.Y;
8632
+ }
8633
+
8617
8634
  }
8618
8635
  else if (type==2)
8619
8636
  {
@@ -8633,8 +8650,18 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8633
8650
  pt.Y=this.Frame.GetYFromData(close);
8634
8651
  this.LastPoint.FrameID=0;
8635
8652
  }
8636
- this.LastPoint.X=pt.X;
8637
- this.LastPoint.Y=pt.Y;
8653
+
8654
+ if (this.IsHScreenModel())
8655
+ {
8656
+ this.LastPoint.X=pt.Y;
8657
+ this.LastPoint.Y=pt.X;
8658
+ }
8659
+ else
8660
+ {
8661
+ this.LastPoint.X=pt.X;
8662
+ this.LastPoint.Y=pt.Y;
8663
+ }
8664
+
8638
8665
  }
8639
8666
  }
8640
8667
 
@@ -79471,6 +79498,13 @@ function JSChartResource()
79471
79498
  CloseColor:"rgb(30,144,255)",
79472
79499
  YCloseColor:"rgba(105,105,105,0.5)", //昨收线
79473
79500
  AreaColor:'rgba(0,191,255,0.2)',
79501
+
79502
+ UpColor:"rgb(255,0,0)",
79503
+ UpAreaColor:"rgba(255,0,0,0.5)",
79504
+ DownColor:"rgb(0,128,0)",
79505
+ DownAreaColor:"rgba(0,128,0,0.5)",
79506
+ UnchangeColor:'rgb(90,90,90)',
79507
+ UnchangeAreaColor:'rgba(90,90,90,0.5)',
79474
79508
  },
79475
79509
 
79476
79510
  KLine:
@@ -80869,6 +80903,13 @@ function JSChartResource()
80869
80903
  if (closeLine.CloseColor) this.Report.CloseLine.CloseColor=closeLine.CloseColor;
80870
80904
  if (closeLine.YCloseColor) this.Report.CloseLine.YCloseColor=closeLine.YCloseColor;
80871
80905
  if (closeLine.AreaColor) this.Report.CloseLine.AreaColor=closeLine.AreaColor;
80906
+
80907
+ if (closeLine.UpColor) this.Report.CloseLine.UpColor=closeLine.UpColor;
80908
+ if (closeLine.UpAreaColor) this.Report.CloseLine.UpAreaColor=closeLine.UpAreaColor;
80909
+ if (closeLine.DownColor) this.Report.CloseLine.DownColor=closeLine.DownColor;
80910
+ if (closeLine.DownAreaColor) this.Report.CloseLine.DownAreaColor=closeLine.DownAreaColor;
80911
+ if (closeLine.UnchangeColor) this.Report.CloseLine.UnchangeColor=closeLine.UnchangeColor;
80912
+ if (closeLine.UnchangeAreaColor) this.Report.CloseLine.UnchangeAreaColor=closeLine.UnchangeAreaColor;
80872
80913
  }
80873
80914
 
80874
80915
  if (item.KLine)
@@ -93617,21 +93658,31 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
93617
93658
 
93618
93659
  this.UpdatePointByCursorIndex=function()
93619
93660
  {
93620
- this.LastPoint.X=this.Frame.GetXFromIndex(this.CursorIndex);
93661
+ var x=null, y=null;
93662
+ x=this.Frame.GetXFromIndex(this.CursorIndex);
93621
93663
 
93622
93664
  var index=this.CursorIndex;
93623
93665
  index=parseInt(index.toFixed(0));
93624
93666
  var data=this.GetKData();
93625
- if (data.DataOffset+index>=data.Data.length)
93667
+ if (data.DataOffset+index<data.Data.length)
93626
93668
  {
93627
- return;
93669
+ var item=data.Data[data.DataOffset+index];
93670
+ var close=null;
93671
+ if (item.Before) close=item.Before.Close;
93672
+ else close=item.Close;
93673
+ y=this.Frame.GetYFromData(close);
93628
93674
  }
93629
- var item=data.Data[data.DataOffset+index];
93630
- var close=null;
93631
- if (item.Before) close=item.Before.Close;
93632
- else close=item.Close
93633
93675
 
93634
- this.LastPoint.Y=this.Frame.GetYFromData(close);
93676
+ if (this.IsHScreenModel())
93677
+ {
93678
+ this.LastPoint.X=y;
93679
+ this.LastPoint.Y=x;
93680
+ }
93681
+ else
93682
+ {
93683
+ this.LastPoint.X=x;
93684
+ this.LastPoint.Y=y;
93685
+ }
93635
93686
  this.LastPoint.FrameID=0;
93636
93687
  }
93637
93688
 
@@ -5296,7 +5296,15 @@ function ChartReport()
5296
5296
  {
5297
5297
  CloseColor:g_JSChartResource.Report.CloseLine.CloseColor,
5298
5298
  YCloseColor:g_JSChartResource.Report.CloseLine.YCloseColor,
5299
- AreaColor:g_JSChartResource.Report.CloseLine.AreaColor
5299
+ AreaColor:g_JSChartResource.Report.CloseLine.AreaColor,
5300
+
5301
+ UpColor:g_JSChartResource.Report.CloseLine.UpColor,
5302
+ DownColor:g_JSChartResource.Report.CloseLine.DownColor,
5303
+ UnchangeColor:g_JSChartResource.Report.CloseLine.UnchangeColor,
5304
+
5305
+ UpAreaColor:g_JSChartResource.Report.CloseLine.UpAreaColor,
5306
+ DownAreaColor:g_JSChartResource.Report.CloseLine.DownAreaColor,
5307
+ UnchangeAreaColor:g_JSChartResource.Report.CloseLine.UnchangeAreaColor,
5300
5308
  }
5301
5309
 
5302
5310
  //K线配置
@@ -5607,6 +5615,7 @@ function ChartReport()
5607
5615
  else if (item.Type==REPORT_COLUMN_ID.CLOSE_LINE_ID)
5608
5616
  {
5609
5617
  if (IFrameSplitOperator.IsBool(item.IsDrawArea)) colItem.IsDrawArea=item.IsDrawArea;
5618
+ if (IFrameSplitOperator.IsNumber(item.LineColorType)) colItem.LineColorType=item.LineColorType;
5610
5619
  }
5611
5620
  else if(item.Type==REPORT_COLUMN_ID.TIME_ID)
5612
5621
  {
@@ -5735,7 +5744,7 @@ function ChartReport()
5735
5744
  { Type:REPORT_COLUMN_ID.VOL_IN_ID, Title:"内盘", TextAlign:"right", TextColor:g_JSChartResource.Report.DownTextColor, Width:null, MaxText:"8888.8擎" },
5736
5745
  { Type:REPORT_COLUMN_ID.VOL_OUT_ID, Title:"外盘", TextAlign:"right", TextColor:g_JSChartResource.Report.UpTextColor, Width:null, MaxText:"8888.8擎" },
5737
5746
 
5738
- { Type:REPORT_COLUMN_ID.CLOSE_LINE_ID, Title:"走势", TextAlign:"center", TextColor:g_JSChartResource.Report.CloseLineColor, Width:null, MaxText:"88888.88888" },
5747
+ { Type:REPORT_COLUMN_ID.CLOSE_LINE_ID, Title:"走势", TextAlign:"center", TextColor:g_JSChartResource.Report.CloseLineColor, Width:null, MaxText:"88888.88888", LineColorType:0 },
5739
5748
 
5740
5749
 
5741
5750
  { Type:REPORT_COLUMN_ID.BUY_VOL_ID, Title:"买量", TextAlign:"right", TextColor:g_JSChartResource.Report.FieldColor.Vol, Width:null, MaxText:"8888.8擎" },
@@ -8774,8 +8783,7 @@ function ChartReport()
8774
8783
  this.Canvas.setLineDash([]);
8775
8784
  }
8776
8785
 
8777
- if (lineData.Color) this.Canvas.strokeStyle=lineData.Color;
8778
- else this.Canvas.strokeStyle=this.CloseLineConfig.CloseColor;
8786
+ this.Canvas.strokeStyle=this.GetCloseLineColor(lineData, column);
8779
8787
 
8780
8788
  var bFirstPoint=true;
8781
8789
  var ptFirst={}; //第1个点
@@ -8813,8 +8821,7 @@ function ChartReport()
8813
8821
  this.Canvas.lineTo(x,yCenter);
8814
8822
  this.Canvas.lineTo(ptFirst.X,yCenter);
8815
8823
  this.Canvas.closePath();
8816
- var areaColor=this.CloseLineConfig.AreaColor;
8817
- if (lineData.AreaColor) areaColor=lineData.AreaColor;
8824
+ var areaColor=this.GetCloseAreaColor(lineData, column);
8818
8825
  this.SetFillStyle(areaColor,left,top, left,bottom);
8819
8826
  this.Canvas.fill();
8820
8827
  }
@@ -8823,6 +8830,48 @@ function ChartReport()
8823
8830
  this.Canvas.restore();
8824
8831
  }
8825
8832
 
8833
+ this.GetCloseLineColor=function(lineData, column)
8834
+ {
8835
+ var color=this.CloseLineConfig.CloseColor;
8836
+ if (lineData.Color)
8837
+ {
8838
+ color=lineData.Color;
8839
+ }
8840
+ else if (column.LineColorType==1)
8841
+ {
8842
+ var color= this.CloseLineConfig.UnchangeColor;
8843
+ if (IFrameSplitOperator.IsNumber(lineData.YClose) && IFrameSplitOperator.IsNonEmptyArray(lineData.Data) && IFrameSplitOperator.IsNumber(lineData.Data[ lineData.Data.length -1 ]))
8844
+ {
8845
+ var lastValue=lineData.Data[ lineData.Data.length -1 ];
8846
+ if (lastValue>lineData.YClose) color=this.CloseLineConfig.UpColor;
8847
+ else if (lastValue<lineData.YClose) color=this.CloseLineConfig.DownColor;
8848
+ }
8849
+ }
8850
+
8851
+ return color;
8852
+ }
8853
+
8854
+ this.GetCloseAreaColor=function(lineData, column)
8855
+ {
8856
+ var color=this.CloseLineConfig.AreaColor;
8857
+ if (lineData.AreaColor)
8858
+ {
8859
+ color=lineData.AreaColor;
8860
+ }
8861
+ else if (column.LineColorType==1)
8862
+ {
8863
+ var color= this.CloseLineConfig.UnchangeAreaColor;
8864
+ if (IFrameSplitOperator.IsNumber(lineData.YClose) && IFrameSplitOperator.IsNonEmptyArray(lineData.Data) && IFrameSplitOperator.IsNumber(lineData.Data[ lineData.Data.length -1 ]))
8865
+ {
8866
+ var lastValue=lineData.Data[ lineData.Data.length -1 ];
8867
+ if (lastValue>lineData.YClose) color=this.CloseLineConfig.UpAreaColor;
8868
+ else if (lastValue<lineData.YClose) color=this.CloseLineConfig.DownAreaColor;
8869
+ }
8870
+ }
8871
+
8872
+ return color;
8873
+ }
8874
+
8826
8875
  //klineData={ Data:[ open, high, low, close ] }
8827
8876
  this.DrawKLine=function(klineData, column, rtItem, data)
8828
8877
  {
@@ -8892,7 +8941,31 @@ function ChartReport()
8892
8941
  var distanceWidth=this.KLineConfig.DistanceWidth;
8893
8942
  var xOffset=left;
8894
8943
  var x, xLeft, xRight;
8944
+ var drawCount=0;
8895
8945
  for(var i=0;i<aryKLine.length;++i,xOffset+=(dataWidth+distanceWidth))
8946
+ {
8947
+ xLeft=xOffset;
8948
+ xRight=xOffset+dataWidth;
8949
+ x=xLeft+(xRight-xLeft)/2;
8950
+ if (xRight>right) break;
8951
+ drawCount++;
8952
+ }
8953
+
8954
+ var xOffset=left;
8955
+ var startIndex=0;
8956
+ if (aryKLine.length>drawCount)
8957
+ {
8958
+ high=null,low=null;
8959
+ startIndex=aryKLine.length-drawCount;
8960
+ for(var i=startIndex;i<aryKLine.length;++i)
8961
+ {
8962
+ var item=aryKLine[i];
8963
+ if (high==null || high<item.High) high=item.High;
8964
+ if (low==null || low>item.Low) low=item.Low;
8965
+ }
8966
+ }
8967
+
8968
+ for(var i=startIndex;i<aryKLine.length;++i,xOffset+=(dataWidth+distanceWidth))
8896
8969
  {
8897
8970
  var item=aryKLine[i];
8898
8971
  xLeft=xOffset;
@@ -8980,7 +9053,11 @@ function ChartReport()
8980
9053
  }
8981
9054
  else
8982
9055
  {
8983
-
9056
+ this.Canvas.beginPath();
9057
+ var xBar=x;
9058
+ this.Canvas.moveTo(ToFixedPoint(xBar),ToFixedPoint(yBarTop));
9059
+ this.Canvas.lineTo(ToFixedPoint(xBar),ToFixedPoint(yBarBottom));
9060
+ this.Canvas.stroke();
8984
9061
  }
8985
9062
  }
8986
9063