hqchart 1.1.15341 → 1.1.15347

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.15341",
3
+ "version": "1.1.15347",
4
4
  "description": "HQChart - H5, 微信小程序 沪深/港股/数字货币/期货/美股 K线图(kline),走势图,缩放,拖拽,十字光标,画图工具,截图,筹码图. 分析家语法,通达信语法,(麦语法),第3方数据对接",
5
5
  "main": "lib/main.js",
6
6
  "scripts": {
@@ -1212,6 +1212,7 @@ var Syntax = {
1212
1212
  function Node(ErrorHandler)
1213
1213
  {
1214
1214
  this.IsNeedIndexData=false; //是否需要大盘数据
1215
+ this.IsNeedIndustryData=false; //行业数据下载
1215
1216
  this.IsNeedLatestIndexData=false; //是否需要下载最新大盘数据
1216
1217
  this.IsNeedSymbolData=false; //是否需要下载股票数据
1217
1218
  this.IsNeedMarginData=new Set();
@@ -1239,6 +1240,7 @@ function Node(ErrorHandler)
1239
1240
  if (this.IsNeedSymbolData) jobs.push({ID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_SYMBOL_DATA});
1240
1241
  if (this.IsNeedIndexData) jobs.push({ID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_INDEX_DATA});
1241
1242
  if (this.IsNeedLatestIndexData) jobs.push({ID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_LATEST_INDEX_DATA});
1243
+ if (this.IsNeedIndustryData) jobs.push({ID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_INDUSTRY_DATA});
1242
1244
 
1243
1245
  //最新的个股行情数据
1244
1246
  for(var i=0;i<this.Dynainfo.length;++i)
@@ -1325,6 +1327,13 @@ function Node(ErrorHandler)
1325
1327
  return;
1326
1328
  }
1327
1329
 
1330
+ let setIndustryName=new Set(['HY_INDEXA','HY_INDEXC','HY_INDEXH','HY_INDEXL',"HY_INDEXO","HY_INDEXV",'HY_INDEXADV','HY_INDEXDEC']);
1331
+ if (setIndustryName.has(varName))
1332
+ {
1333
+ this.IsNeedIndustryData=true;
1334
+ return;
1335
+ }
1336
+
1328
1337
  let setSymbolDataName=new Set(['CLOSE','C','VOL','V','OPEN','O','HIGH','H','LOW','L','AMOUNT','AMO','VOLINSTK']);
1329
1338
  if (setSymbolDataName.has(varName))
1330
1339
  {
@@ -7449,9 +7458,26 @@ function JSAlgorithm(errorHandler,symbolData)
7449
7458
  //用法: STRCAT('多头','开仓')将两个字符串'多头','开仓'相加成一个字符串'多头开仓'
7450
7459
  this.STRCAT=function(str1, str2)
7451
7460
  {
7452
- var result=[];
7453
- if (IFrameSplitOperator.IsString(str1) && IFrameSplitOperator.IsString(str2))
7454
- result=str1+str2;
7461
+ var result="";
7462
+
7463
+ if (IFrameSplitOperator.IsString(str1)) result+=str1;
7464
+ if (IFrameSplitOperator.IsString(str2)) result+=str2;
7465
+
7466
+ return result;
7467
+ }
7468
+
7469
+ //STRCAT6(A,B,C,D,E,F):将六个字符串A,B,C,D,E,F(非序列化)相加成一个字符串.
7470
+ //用法: STRCAT6('多头','开仓','或者','空头','平仓','')将六个字符串相加成一个字符串
7471
+ this.STRCAT6=function(str1, str2,str3, str4,str5, str6)
7472
+ {
7473
+ var result="";
7474
+ if (IFrameSplitOperator.IsString(str1)) result+=str1;
7475
+ if (IFrameSplitOperator.IsString(str2)) result+=str2;
7476
+ if (IFrameSplitOperator.IsString(str3)) result+=str3;
7477
+ if (IFrameSplitOperator.IsString(str4)) result+=str4;
7478
+ if (IFrameSplitOperator.IsString(str5)) result+=str5;
7479
+ if (IFrameSplitOperator.IsString(str6)) result+=str6;
7480
+
7455
7481
  return result;
7456
7482
  }
7457
7483
 
@@ -7615,7 +7641,9 @@ function JSAlgorithm(errorHandler,symbolData)
7615
7641
  //用法: CON2STR(FINANCE(20),3)表示取营业收入,以3位小数转为字符串
7616
7642
  this.CON2STR=function(data,n)
7617
7643
  {
7618
- var result=[];
7644
+ var result="";
7645
+ var dec=0;
7646
+ if (IFrameSplitOperator.IsNumber(n)) dec=n;
7619
7647
  if (Array.isArray(data))
7620
7648
  {
7621
7649
  for(var i=data.length-1 ; i>=0; --i)
@@ -7623,7 +7651,7 @@ function JSAlgorithm(errorHandler,symbolData)
7623
7651
  var item=data[i];
7624
7652
  if (this.IsNumber(item))
7625
7653
  {
7626
- result=item.toFixed(n);
7654
+ result=item.toFixed(dec);
7627
7655
  return result;
7628
7656
  }
7629
7657
  }
@@ -7631,7 +7659,7 @@ function JSAlgorithm(errorHandler,symbolData)
7631
7659
  else
7632
7660
  {
7633
7661
  if (this.IsNumber(data))
7634
- result=data.toFixed(n);
7662
+ result=data.toFixed(dec);
7635
7663
  }
7636
7664
 
7637
7665
  return result;
@@ -9359,6 +9387,8 @@ function JSAlgorithm(errorHandler,symbolData)
9359
9387
  return this.BETWEEN(args[0], args[1], args[2]);
9360
9388
  case 'STRCAT':
9361
9389
  return this.STRCAT(args[0], args[1]);
9390
+ case "STRCAT6":
9391
+ return this.STRCAT6(args[0], args[1],args[2], args[3],args[4], args[5]);
9362
9392
  case 'CON2STR':
9363
9393
  return this.CON2STR(args[0], args[1]);
9364
9394
  case "VAR2STR":
@@ -12112,6 +12142,7 @@ function JSSymbolData(ast,option,jsExecute)
12112
12142
 
12113
12143
  this.LatestData=new Map(); //最新行情 key=id value=数据
12114
12144
  this.IndexData; //大盘指数
12145
+ this.IndustryData; //行业数据
12115
12146
  this.LatestIndexData; //最新大盘数据
12116
12147
  this.MarginData=new Map(); //融资融券
12117
12148
  this.HKToSHSZData=new Map(); //北上资金
@@ -12504,168 +12535,130 @@ function JSSymbolData(ast,option,jsExecute)
12504
12535
  this.GetIndexData=function()
12505
12536
  {
12506
12537
  if (this.IndexData) return this.Execute.RunNextJob();
12538
+ if (!this.NetworkFilter) return this.Execute.RunNextJob();
12507
12539
 
12508
- var self=this;
12509
- if (ChartData.IsDayPeriod(this.Period,true)) //请求日线数据 9=季线
12540
+ var dateRange=this.Data.GetDateRange();
12541
+ var period=this.Period;
12542
+ var obj=
12510
12543
  {
12511
- if (this.NetworkFilter)
12512
- {
12513
- var dateRange=this.Data.GetDateRange();
12514
- var obj=
12515
- {
12516
- Name:'JSSymbolData::GetIndexData', //类名::
12517
- Explain:'大盘数据',
12518
- Period:self.Period,
12519
- Request:
12520
- {
12521
- Url:self.KLineApiUrl, Type:'POST' ,
12522
- Data:
12523
- {
12524
- field:[ "name", "symbol","yclose","open","price","high","low","vol",'up','down','stop','unchanged'],
12525
- indexSymbol:"000001.sh", symbol: this.Symbol, period:this.Period,
12526
- dateRange:dateRange
12527
- }
12528
- },
12529
- Self:this,
12530
- PreventDefault:false
12531
- };
12532
- this.NetworkFilter(obj, function(data)
12544
+ Name:'JSSymbolData::GetIndexData', //类名::
12545
+ Explain:'大盘数据',
12546
+ Period:period,
12547
+ Request:
12548
+ {
12549
+ Type:'POST' ,
12550
+ Data:
12533
12551
  {
12534
- self.RecvIndexHistroyData(data);
12535
- self.Execute.RunNextJob();
12536
- });
12552
+ field:[ "name", "symbol","yclose","open","price","high","low","vol",'up','down','stop','unchanged'],
12553
+ indexSymbol:"000001.sh", symbol: this.Symbol, period:period,
12554
+ dateRange:dateRange
12555
+ }
12556
+ },
12557
+ Self:this,
12558
+ PreventDefault:false
12559
+ };
12537
12560
 
12538
- if (obj.PreventDefault==true) return; //已被上层替换,不调用默认的网络请求
12539
- }
12561
+ this.NetworkFilter(obj, (data)=>
12562
+ {
12563
+ JSConsole.Complier.Log('[JSSymbolData::GetIndexData] recv data' , data);
12540
12564
 
12541
- JSNetwork.HttpRequest({
12542
- url: self.KLineApiUrl,
12543
- data:
12544
- {
12545
- "field": [ "name", "symbol","yclose","open","price","high","low","vol",'up','down','stop','unchanged'],
12546
- "symbol": '000001.sh',
12547
- "start": -1,
12548
- "count": self.MaxRequestDataCount+500 //多请求2年的数据 确保股票剔除停牌日期以后可以对上
12549
- },
12550
- type:"post",
12551
- dataType: "json",
12552
- async:true,
12553
- success: function (recvData)
12554
- {
12555
- self.RecvIndexHistroyData(recvData);
12556
- self.Execute.RunNextJob();
12557
- },
12558
- error: function(request)
12565
+ this.IndexData=this.APIKDataToChartData(data, period);
12566
+ this.Execute.RunNextJob();
12567
+ });
12568
+
12569
+ }
12570
+
12571
+
12572
+ this.APIKDataToChartData=function(data, period)
12573
+ {
12574
+ var result=null;
12575
+ if (ChartData.IsDayPeriod(period,true)) //请求日线数据
12576
+ {
12577
+ var hisData=this.JsonDataToHistoryData(data);
12578
+ result=new ChartData();
12579
+ result.DataType=0; /*日线数据 */
12580
+ result.Data=hisData;
12581
+
12582
+ if (this.IsApiPeriod==true)
12583
+ {
12584
+ result.Period=period;
12585
+ result.Data=this.Data.FixKData(hisData,period);
12586
+ }
12587
+ else
12588
+ {
12589
+ var aryOverlayData=this.SourceData.GetOverlayData(result.Data); //和主图数据拟合以后的数据
12590
+ result.Data=aryOverlayData;
12591
+
12592
+ if (ChartData.IsDayPeriod(period,false)) //周期数据
12559
12593
  {
12560
- self.RecvError(request);
12594
+ var periodData=result.GetPeriodData(period);
12595
+ result.Data=periodData;
12561
12596
  }
12562
- });
12597
+ }
12563
12598
  }
12564
- else if (ChartData.IsMinutePeriod(this.Period, true)) //请求分钟数据
12599
+ else if (ChartData.IsMinutePeriod(period, true))
12565
12600
  {
12566
- if (this.NetworkFilter)
12567
- {
12568
- var dateRange=this.Data.GetDateRange();
12569
- var obj=
12570
- {
12571
- Name:'JSSymbolData::GetIndexData', //类名::
12572
- Explain:'大盘数据',
12573
- Period:self.Period,
12574
- Request:{ Url:self.MinuteKLineApiUrl, Type:'POST' ,
12575
- Data:
12576
- {
12577
- field:["name","symbol","yclose","open","price","high","low","vol"],
12578
- indexSymbol:"000001.sh", symbol: this.Symbol, period:this.Period,
12579
- dateRange:dateRange
12580
- }
12581
- },
12582
- Self:this,
12583
- PreventDefault:false
12584
- };
12585
- this.NetworkFilter(obj, function(data)
12586
- {
12587
- self.RecvIndexMinuteHistroyData(data);
12588
- self.Execute.RunNextJob();
12589
- });
12601
+ var hisData=this.JsonDataToMinuteHistoryData(data);
12602
+ result=new ChartData();
12603
+ result.DataType=1; /*分钟线数据 */
12604
+ result.Data=hisData;
12590
12605
 
12591
- if (obj.PreventDefault==true) return; //已被上层替换,不调用默认的网络请求
12606
+ if (this.IsApiPeriod==true)
12607
+ {
12608
+ result.Period=this.Period;
12609
+ result.Data=this.Data.FixKData(hisData,period);
12592
12610
  }
12611
+ else
12612
+ {
12613
+ var aryOverlayData=this.SourceData.GetOverlayMinuteData(result.Data); //和主图数据拟合以后的数据
12614
+ result.Data=aryOverlayData;
12593
12615
 
12594
- JSNetwork.HttpRequest({
12595
- url: self.MinuteKLineApiUrl,
12596
- data:
12597
- {
12598
- "field": ["name","symbol","yclose","open","price","high","low","vol"],
12599
- "symbol": '000001.sh',
12600
- "start": -1,
12601
- "count": self.MaxRequestMinuteDayCount+5
12602
- },
12603
- type:"post",
12604
- dataType: "json",
12605
- async:true,
12606
- success: function (data)
12607
- {
12608
- self.RecvIndexMinuteHistroyData(data);
12609
- self.Execute.RunNextJob();
12610
- },
12611
- error: function(request)
12616
+ if (ChartData.IsMinutePeriod(period,false)) //周期数据
12612
12617
  {
12613
- self.RecvError(request);
12618
+ var periodData=result.GetPeriodData(period);
12619
+ result.Data=periodData;
12614
12620
  }
12615
- });
12621
+ }
12616
12622
  }
12617
12623
 
12624
+ return result;
12618
12625
  }
12619
12626
 
12620
- this.RecvIndexHistroyData=function(data)
12627
+ //获取行业数据
12628
+ this.GetIndustryData=function()
12621
12629
  {
12622
- JSConsole.Complier.Log('[JSSymbolData::RecvIndexHistroyData] recv data' , data);
12623
-
12624
- let hisData=this.JsonDataToHistoryData(data);
12625
- this.IndexData=new ChartData();
12626
- this.IndexData.DataType=0; /*日线数据 */
12627
- this.IndexData.Data=hisData;
12630
+ if (this.IndustryData) return this.Execute.RunNextJob();
12631
+ if (!this.NetworkFilter) return this.Execute.RunNextJob();
12628
12632
 
12629
- if (this.IsApiPeriod==true)
12630
- {
12631
- this.IndexData.Period=this.Period;
12632
- this.IndexData.Data=this.Data.FixKData(hisData,this.Period);
12633
- }
12634
- else
12633
+ var dateRange=this.Data.GetDateRange();
12634
+ var period=this.Period;
12635
+ var obj=
12635
12636
  {
12636
- var aryOverlayData=this.SourceData.GetOverlayData(this.IndexData.Data); //和主图数据拟合以后的数据
12637
- this.IndexData.Data=aryOverlayData;
12638
-
12639
- if (ChartData.IsDayPeriod(this.Period,false)) //周期数据
12640
- {
12641
- let periodData=this.IndexData.GetPeriodData(this.Period);
12642
- this.IndexData.Data=periodData;
12643
- }
12644
- }
12645
- }
12646
-
12647
- this.RecvIndexMinuteHistroyData=function(data)
12648
- {
12649
- JSConsole.Complier.Log('[JSSymbolData::RecvIndexMinuteHistroyData] recv data' , data);
12637
+ Name:'JSSymbolData::GetIndustryData', //类名::
12638
+ Explain:'行业数据',
12639
+ Period:period,
12640
+ Request:
12641
+ {
12642
+ Url:self.KLineApiUrl, Type:'POST' ,
12643
+ Data:
12644
+ {
12645
+ field:[ "name", "symbol","yclose","open","price","high","low","vol",'up','down','stop','unchanged'],
12646
+ symbol: this.Symbol, period:period,
12647
+ dateRange:dateRange
12648
+ }
12649
+ },
12650
+ Self:this,
12651
+ PreventDefault:false
12652
+ };
12650
12653
 
12651
- let hisData=this.JsonDataToMinuteHistoryData(data);
12652
- this.IndexData=new ChartData();
12653
- this.IndexData.DataType=1; /*分钟线数据 */
12654
- this.IndexData.Data=hisData;
12654
+
12655
+ this.NetworkFilter(obj, (data)=>
12656
+ {
12657
+ JSConsole.Complier.Log('[JSSymbolData::GetIndustryData] recv data' , data);
12655
12658
 
12656
- if (this.IsApiPeriod==true)
12657
- {
12658
- this.IndexData.Period=this.Period;
12659
- this.IndexData.Data=this.Data.FixKData(hisData,this.Period);
12660
- }
12661
- else
12662
- {
12663
- if (ChartData.IsMinutePeriod(this.Period,false)) //周期数据
12664
- {
12665
- let periodData=this.IndexData.GetPeriodData(this.Period);
12666
- this.IndexData.Data=periodData;
12667
- }
12668
- }
12659
+ this.IndustryData=this.APIKDataToChartData(data, period);
12660
+ this.Execute.RunNextJob();
12661
+ });
12669
12662
  }
12670
12663
 
12671
12664
  this.GetOtherSymbolParam=function(name)
@@ -13009,6 +13002,32 @@ function JSSymbolData(ast,option,jsExecute)
13009
13002
  }
13010
13003
  }
13011
13004
 
13005
+ //获取大盘指数缓存数据
13006
+ this.GetIndustryCacheData=function(dataName)
13007
+ {
13008
+ if (!this.IndustryData) return [];
13009
+
13010
+ switch(dataName)
13011
+ {
13012
+ case 'HY_INDEXA':
13013
+ return this.IndustryData.GetAmount();
13014
+ case 'HY_INDEXC':
13015
+ return this.IndustryData.GetClose();
13016
+ case 'HY_INDEXH':
13017
+ return this.IndustryData.GetHigh();
13018
+ case 'HY_INDEXL':
13019
+ return this.IndustryData.GetLow();
13020
+ case 'HY_INDEXO':
13021
+ return this.IndustryData.GetOpen();
13022
+ case 'HY_INDEXV':
13023
+ return this.IndustryData.GetVol();
13024
+ case 'HY_INDEXADV':
13025
+ return this.IndustryData.GetUp();
13026
+ case 'HY_INDEXDEC':
13027
+ return this.IndustryData.GetDown();
13028
+ }
13029
+ }
13030
+
13012
13031
  //指数转成对应的板块
13013
13032
  this.GetBlockSymbol=function(symbol)
13014
13033
  {
@@ -16951,6 +16970,7 @@ var JS_EXECUTE_JOB_ID=
16951
16970
  JOB_DOWNLOAD_LATEST_INDEX_DATA:8, //下载最新大盘数据
16952
16971
  JOB_DOWNLOAD_OTHER_SYMBOL_DATA:9, //下载其他股票的K线数据
16953
16972
  JOB_DOWNLOAD_SYMBOL_PERIOD_DATA:10, //下载周期数据
16973
+ JOB_DOWNLOAD_INDUSTRY_DATA:11, //行业数据
16954
16974
 
16955
16975
  JOB_DOWNLOAD_FINVALUE:301, //引用专业财务数据 FINVALUE(ID),ID为数据编号
16956
16976
  JOB_DOWNLOAD_FINONE:302, //引用指定年和月日的某类型的财务数据 FINONE(ID,Y,MMDD),ID为数据编号,Y和MMDD表示年和月日.
@@ -17237,6 +17257,10 @@ function JSExecute(ast,option)
17237
17257
  ['INDEXA',null],['INDEXC',null],['INDEXH',null],['INDEXL',null],['INDEXO',null],['INDEXV',null],
17238
17258
  ['INDEXADV',null],['INDEXDEC',null],
17239
17259
 
17260
+ //行业数据
17261
+ ["HY_INDEXA",null],["HY_INDEXC",null],["HY_INDEXH",null],["HY_INDEXL",null],["HY_INDEXO",null],["HY_INDEXV",null],
17262
+ ["HY_INDEXADV",null],["HY_INDEXDEC",null],
17263
+
17240
17264
  ["ADVANCE",null],['DECLINE', null],
17241
17265
 
17242
17266
  ['FROMOPEN',null], //已开盘有多长分钟
@@ -17361,6 +17385,8 @@ function JSExecute(ast,option)
17361
17385
  return this.SymbolData.GetSymbolPeriodData(jobItem);
17362
17386
  case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_INDEX_DATA:
17363
17387
  return this.SymbolData.GetIndexData();
17388
+ case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_INDUSTRY_DATA:
17389
+ return this.SymbolData.GetIndustryData();
17364
17390
  case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_LATEST_INDEX_DATA:
17365
17391
  return this.SymbolData.GetLatestIndexData();
17366
17392
  case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_INDEX_INCREASE_DATA:
@@ -17485,6 +17511,16 @@ function JSExecute(ast,option)
17485
17511
  case 'INDEXADV':
17486
17512
  case 'INDEXDEC':
17487
17513
  return this.SymbolData.GetIndexCacheData(name);
17514
+ //行业数据
17515
+ case 'HY_INDEXA':
17516
+ case 'HY_INDEXC':
17517
+ case 'HY_INDEXH':
17518
+ case 'HY_INDEXL':
17519
+ case 'HY_INDEXO':
17520
+ case 'HY_INDEXV':
17521
+ case 'HY_INDEXADV':
17522
+ case 'HY_INDEXDEC':
17523
+ return this.SymbolData.GetIndustryCacheData(name);
17488
17524
  case 'CURRBARSCOUNT':
17489
17525
  return this.SymbolData.GetCurrBarsCount();
17490
17526
  case "BARPOS":
@@ -19800,6 +19836,7 @@ function JSExplainer(ast,option)
19800
19836
  ["STR2CON", { Name:"STR2CON", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}转为数字`; } } ],
19801
19837
  ["STRLEN", { Name:"STRLEN", Param:{ Count:1 }, ToString:function(args) { return `得到${args[0]}字符串长度`; } } ],
19802
19838
  ["STRCAT", { Name:"STRCAT", Param:{ Count:2 }, ToString:function(args) { return `字符串相加`; } } ],
19839
+ ["STRCAT6",{ Name:"STRCAT6", Param:{ Dynamic:true }, ToString:function(args) { return `字符串相加`; } } ],
19803
19840
  ["VARCAT", { Name:"VARCAT", Param:{ Count:2 }, ToString:function(args) { return `字符串相加`; } } ],
19804
19841
  ["STRSPACE", { Name:"STRSPACE", Param:{ Count:1 }, ToString:function(args) { return `字符串${args[0]}加一空格`; } } ],
19805
19842
  ["SUBSTR", { Name:"SUBSTR", Param:{ Count:3 }, ToString:function(args) { return `字符串${args[0]}中取一部分`; } } ],
@@ -19917,6 +19954,8 @@ function JSExplainer(ast,option)
19917
19954
  return `当满足条件${args[0]}时,在${args[1]}位置画${args[2]}号图标`;
19918
19955
  case "DRAWTEXT":
19919
19956
  return `当满足条件${args[0]}时,在${args[1]}位置书写文字`;
19957
+ case "DRAWFLAGTEXT":
19958
+ return `当满足条件${args[0]}时,在${args[1]}位置书写文字`;
19920
19959
  case "DRAWTEXT_FIX":
19921
19960
  return `当满足条件${args[0]}时,在横轴${args[1]}纵轴${args[2]}位置书写文字`;
19922
19961
  case "DRAWNUMBER":
@@ -20115,7 +20154,7 @@ function JSExplainer(ast,option)
20115
20154
  "STICKLINE","DRAWTEXT",'SUPERDRAWTEXT','DRAWLINE','DRAWBAND','DRAWKLINE',"DRAWKLINE1",'DRAWKLINE_IF','PLOYLINE',
20116
20155
  'POLYLINE','DRAWNUMBER',"DRAWNUMBER_FIX",'DRAWICON','DRAWCHANNEL','PARTLINE','DRAWTEXT_FIX','DRAWGBK','DRAWTEXT_LINE','DRAWRECTREL',"DRAWTEXTABS",
20117
20156
  'DRAWOVERLAYLINE',"FILLRGN", "FILLRGN2","FILLTOPRGN", "FILLBOTTOMRGN", "FILLVERTICALRGN","FLOATRGN","DRAWSL", "DRAWGBK2",
20118
- "BUY","BUYSHORT","SELL","SELLSHORT",
20157
+ "BUY","BUYSHORT","SELL","SELLSHORT","DRAWFLAGTEXT",
20119
20158
  ]);
20120
20159
  if (setFunctionName.has(name)) return true;
20121
20160