hqchart 1.1.15375 → 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.15375",
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);
@@ -7076,7 +7076,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7076
7076
  {
7077
7077
  var item=this.OverlayChartPaint[i];
7078
7078
  if (!item) continue;
7079
- if (item.YInfoType!=4) continue;
7079
+ if (item.YInfoConfig.Type===0) continue;
7080
7080
  var data=item.Data;
7081
7081
  if (!data || !IFrameSplitOperator.IsNonEmptyArray(data.Data)) continue;
7082
7082
  if (!IFrameSplitOperator.IsNumber(item.DrawKRange.Start) || !IFrameSplitOperator.IsNumber(item.DrawKRange.End)) continue;
@@ -7096,15 +7096,29 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7096
7096
 
7097
7097
  var endKLine=data.Data[item.DrawKRange.End];
7098
7098
  var value=(endKLine.Close-startKLine.Close)/startKLine.Close*100;
7099
-
7099
+ var text="";
7100
+ if (item.YInfoConfig.Type===3)
7101
+ {
7102
+ var dec=GetfloatPrecision(item.Symbol); //小数位数
7103
+ text=endKLine.Close.toFixed(dec);
7104
+ }
7105
+ else if (item.YInfoConfig.Type===4)
7106
+ {
7107
+ text=value.toFixed(2)+"%";
7108
+ }
7109
+ else
7110
+ {
7111
+ continue;
7112
+ }
7113
+
7100
7114
  var info=new CoordinateInfo();
7101
7115
  info.Value=endKLine.Close/item.ShowRange.FirstOverlayOpen*item.ShowRange.FirstOpen;
7102
- info.Message[1]=value.toFixed(2)+"%";
7116
+ info.Message[1]=text
7103
7117
  info.LineType=-1;
7104
- info.Type=item.YInfoType; //叠加股票
7118
+ info.Type=4; //叠加股票
7105
7119
  info.LineColor=item.Color;
7106
7120
  info.TextColor=g_JSChartResource.FrameLatestPrice.OverlayTextColor;
7107
- if (item.Title) info.Title=item.Title;
7121
+ if (item.Title && item.YInfoConfig.IsShowName) info.Title=item.Title;
7108
7122
  frame.CustomHorizontalInfo.push(info);
7109
7123
  }
7110
7124
  }
@@ -8578,6 +8592,13 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8578
8592
  return false;
8579
8593
  }
8580
8594
 
8595
+ this.IsHScreenModel=function()
8596
+ {
8597
+ if (this.ClassName=="KLineChartHScreenContainer" || this.ClassName=="MinuteChartHScreenContainer") return true;
8598
+
8599
+ return false;
8600
+ }
8601
+
8581
8602
  this.UpdatePointByCursorIndex=function(type) //type 1=根据十字光标更新 2=强制取消十字光标
8582
8603
  {
8583
8604
  if (type==1) //根据十字光标更新
@@ -8598,8 +8619,18 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8598
8619
  pt.X=null;
8599
8620
  }
8600
8621
  }
8601
- this.LastPoint.X=pt.X;
8602
- 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
+
8603
8634
  }
8604
8635
  else if (type==2)
8605
8636
  {
@@ -8619,8 +8650,18 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8619
8650
  pt.Y=this.Frame.GetYFromData(close);
8620
8651
  this.LastPoint.FrameID=0;
8621
8652
  }
8622
- this.LastPoint.X=pt.X;
8623
- 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
+
8624
8665
  }
8625
8666
  }
8626
8667
 
@@ -27590,6 +27631,7 @@ function IChartPainting()
27590
27631
  var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
27591
27632
  var chartright=border.RightEx;
27592
27633
  var xPointCount=this.ChartFrame.XPointCount;
27634
+ if (!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return null;
27593
27635
 
27594
27636
  if (isHScreen)
27595
27637
  {
@@ -33926,13 +33968,19 @@ function ChartOverlayKLine()
33926
33968
  this.CloseLineWidth=g_JSChartResource.CloseLineWidth;
33927
33969
  this.ShowRange={ }; //K线显示范围 { Start:, End:, DataCount:, ShowCount: }
33928
33970
  this.DrawKRange={ Start:null, End:null }; //当前屏K线的索引{ Start: , End:}
33929
- this.YInfoType=4;
33971
+ this.YInfoConfig={ Type:0, IsShowName:false } //右侧Y轴自定刻度设置 0不显示 3=名字|最新价 4=名字|涨幅
33930
33972
 
33931
33973
  this.SetOption=function(option)
33932
33974
  {
33933
33975
  if (!option) return;
33934
33976
  if (IFrameSplitOperator.IsNumber(option.DrawType)) this.CustomDrawType=option.DrawType;
33935
- if (IFrameSplitOperator.IsNumber(option.YInfoType)) this.YInfoType=option.YInfoType;
33977
+ if (IFrameSplitOperator.IsNumber(option.YInfoType)) this.YInfoConfig.Type=option.YInfoType;
33978
+ if (option.YInfo)
33979
+ {
33980
+ var item=option.YInfo;
33981
+ if (IFrameSplitOperator.IsNumber(item.Type)) this.YInfoConfig.Type=item.Type;
33982
+ if (IFrameSplitOperator.IsBool(item.IsShowName)) this.YInfoConfig.IsShowName=item.IsShowName;
33983
+ }
33936
33984
  }
33937
33985
 
33938
33986
  this.DrawKBar=function(firstOpen) //firstOpen 当前屏第1个显示数据
@@ -79450,6 +79498,13 @@ function JSChartResource()
79450
79498
  CloseColor:"rgb(30,144,255)",
79451
79499
  YCloseColor:"rgba(105,105,105,0.5)", //昨收线
79452
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)',
79453
79508
  },
79454
79509
 
79455
79510
  KLine:
@@ -80848,6 +80903,13 @@ function JSChartResource()
80848
80903
  if (closeLine.CloseColor) this.Report.CloseLine.CloseColor=closeLine.CloseColor;
80849
80904
  if (closeLine.YCloseColor) this.Report.CloseLine.YCloseColor=closeLine.YCloseColor;
80850
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;
80851
80913
  }
80852
80914
 
80853
80915
  if (item.KLine)
@@ -88046,8 +88108,15 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
88046
88108
  {
88047
88109
  Name:'KLineChartContainer::RequestOverlayHistoryData', //类名::
88048
88110
  Explain:'叠加股票日K线数据',
88049
- Request:{ Url:self.KLineApiUrl, Data: { symbol: symbol, count: dataCount.MaxRequestDataCount,"first":{ date: firstDate },
88050
- field:["name","symbol","yclose","open","price","high",'vol','amount'] }, Type:'POST' },
88111
+ Request:
88112
+ {
88113
+ Url:self.KLineApiUrl,
88114
+ Data:
88115
+ {
88116
+ symbol: symbol, period:this.Period, count: dataCount.MaxRequestDataCount, first:{ date: firstDate },
88117
+ Main:{ Symbol:this.Symbol, Period:this.Period, Right:this.Right }
88118
+ },
88119
+ },
88051
88120
  Self:this,
88052
88121
  PreventDefault:false
88053
88122
  };
@@ -88139,8 +88208,15 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
88139
88208
  {
88140
88209
  Name:'KLineChartContainer::RequestOverlayHistoryMinuteData', //类名::
88141
88210
  Explain:'叠加股票分钟K线数据',
88142
- Request:{ Url:self.MinuteKLineApiUrl, Data: { symbol: symbol, count: dataCount.MaxRequestMinuteDayCount,"first":{ date: firstDate, time:firstTime },
88143
- field:["name","symbol","yclose","open","price","high",'vol','amount'] }, Type:'POST' },
88211
+ Request:
88212
+ {
88213
+ Url:self.MinuteKLineApiUrl,
88214
+ Data:
88215
+ {
88216
+ symbol: symbol, period:this.Period, count: dataCount.MaxRequestMinuteDayCount, first:{ date: firstDate, time:firstTime },
88217
+ Main:{ Symbol:this.Symbol, Period:this.Period, Right:this.Right }
88218
+ },
88219
+ },
88144
88220
  Self:this,
88145
88221
  PreventDefault:false
88146
88222
  };
@@ -93582,21 +93658,31 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
93582
93658
 
93583
93659
  this.UpdatePointByCursorIndex=function()
93584
93660
  {
93585
- this.LastPoint.X=this.Frame.GetXFromIndex(this.CursorIndex);
93661
+ var x=null, y=null;
93662
+ x=this.Frame.GetXFromIndex(this.CursorIndex);
93586
93663
 
93587
93664
  var index=this.CursorIndex;
93588
93665
  index=parseInt(index.toFixed(0));
93589
93666
  var data=this.GetKData();
93590
- if (data.DataOffset+index>=data.Data.length)
93667
+ if (data.DataOffset+index<data.Data.length)
93591
93668
  {
93592
- 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);
93593
93674
  }
93594
- var item=data.Data[data.DataOffset+index];
93595
- var close=null;
93596
- if (item.Before) close=item.Before.Close;
93597
- else close=item.Close
93598
93675
 
93599
- 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
+ }
93600
93686
  this.LastPoint.FrameID=0;
93601
93687
  }
93602
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