hqchart 1.1.13318 → 1.1.13327

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.
@@ -9975,7 +9975,16 @@ var result=[];var value;for(var _i79=0;_i79<data.length;++_i79){result[_i79]=nul
9975
9975
  用法:FILTER(X,N):X满足条件后,将其后N周期内的数据置为0,N为常量.
9976
9976
  例如:
9977
9977
  FILTER(CLOSE>OPEN,5)查找阳线,5天内再次出现的阳线不被记录在内
9978
- */this.FILTER=function(data,n){var result=[];for(var _i80=0,_j3=0;_i80<data.length;++_i80){if(data[_i80]){result[_i80]=1;for(_j3=0;_j3<n&&_j3+_i80+1<data.length;++_j3){result[_j3+_i80+1]=0;}_i80+=n;}else{result[_i80]=0;}}return result;};this.BARSLAST=function(data){var result=[];if(!data)return result;var day=null;for(var _i81=0;_i81<data.length;++_i81){result[_i81]=null;if(data[_i81]>0)day=0;else if(day!=null)++day;if(day!=null)result[_i81]=day;}return result;};/*
9978
+ */this.FILTER=function(data,n){var result=[];for(var _i80=0,_j3=0;_i80<data.length;++_i80){if(data[_i80]){result[_i80]=1;for(_j3=0;_j3<n&&_j3+_i80+1<data.length;++_j3){result[_j3+_i80+1]=0;}_i80+=n;}else{result[_i80]=0;}}return result;};//反向过滤连续出现的信号.
9979
+ //用法:FILTERX(X,N):X满足条件后,将其前N周期内的数据置为0,N为常量.
9980
+ //例如:FILTERX(CLOSE>OPEN,5)查找阳线,前5天内出现过的阳线不被记录在内
9981
+ this.FILTERX=function(data,n,node){var result=[];for(var _i81=0,_j4=0;_i81<data.length;++_i81){if(data[_i81]){result[_i81]=1;for(_j4=0;_j4<n&&_i81-_j4-1>=0;++_j4){result[_i81-_j4-1]=0;}_i81+=n;}else{result[_i81]=0;}}return result;};//上一次条件成立到当前的周期数.
9982
+ //用法:BARSLAST(X):上一次X不为0到现在的周期数
9983
+ //例如:BARSLAST(CLOSE/REF(CLOSE,1)>=1.1)表示上一个涨停板到当前的周期数
9984
+ this.BARSLAST=function(data){var result=[];if(!data)return result;var day=null;for(var _i82=0;_i82<data.length;++_i82){result[_i82]=null;if(data[_i82]>0)day=0;else if(day!=null)++day;if(day!=null)result[_i82]=day;}return result;};//倒数第N次成立时距今的周期数.
9985
+ //用法:BARSLASTS(X,N):X倒数第N满足到现在的周期数,N支持变量
9986
+ this.BARSLASTS=function(data,n,node){var result=[];if(!data)return result;if(n<=0)n=data.length;var day=null;var SingleValue=0;//单词数
9987
+ var periodCount=0;for(var _i83=0;_i83<data.length;++_i83){result[_i83]=null;var value=data[_i83];if(value>0){if(day==null){day=0;++periodCount;}else{++periodCount;if(periodCount>n)day-=SingleValue;}SingleValue=0;}else{if(day!=null){++day;++SingleValue;}}if(day!=null)result[_i83]=day;}return result;};/*
9979
9988
  N周期内第一个条件成立到当前的周期数.
9980
9989
  用法:
9981
9990
  BARSSINCEN(X,N):N周期内第一次X不为0到现在的天数,N为常量
@@ -9987,7 +9996,7 @@ var result=[];var value;for(var _i79=0;_i79<data.length;++_i79){result[_i79]=nul
9987
9996
  BARSSINCE(X):第一次X不为0到现在的天数
9988
9997
  例如:
9989
9998
  BARSSINCE(HIGH>10)表示股价超过10元时到当前的周期数
9990
- */this.BARSSINCE=function(data){var result=[];var day=null;for(var _i82=0;_i82<data.length;++_i82){result[_i82]=null;if(day==null){if(data[_i82])day=0;}else{++day;}if(day)result[_i82]=day;}return result;};/*三角函数调用 func 三角函数
9999
+ */this.BARSSINCE=function(data){var result=[];var day=null;for(var _i84=0;_i84<data.length;++_i84){result[_i84]=null;if(day==null){if(data[_i84])day=0;}else{++day;}if(day)result[_i84]=day;}return result;};/*三角函数调用 func 三角函数
9991
10000
  反正切值. 用法: ATAN(X)返回X的反正切值
9992
10001
  余弦值. 用法: COS(X)返回X的余弦值
9993
10002
  正弦值. 用法: SIN(X)返回X的正弦值
@@ -9997,9 +10006,9 @@ var result=[];var value;for(var _i79=0;_i79<data.length;++_i79){result[_i79]=nul
9997
10006
  求10为底的对数. 用法: LOG(X)取得X的对数 例如: LOG(100)等于2
9998
10007
  指数. 用法: EXP(X)为e的X次幂 例如: EXP(CLOSE)返回e的CLOSE次幂
9999
10008
  开平方. 用法: SQRT(X)为X的平方根 例如: SQRT(CLOSE)收盘价的平方根
10000
- */this.Trigonometric=function(data,func){if(!Array.isArray(data)){if(this.IsNumber(data))return func(data);return null;}else{var result=[];for(var _i83 in data){var item=data[_i83];if(this.IsNumber(item))result[_i83]=func(item);else result[_i83]=null;}return result;}};//反正弦值. 用法: ASIN(X)返回X的反正弦值
10001
- this.ASIN=function(data){if(!Array.isArray(data)){if(this.IsNumber(data))return Math.acos(data);return null;}else{var result=[];for(var _i84 in data){var item=data[_i84];result[_i84]=null;if(this.IsNumber(item)){if(item>=-1&&item<=1){result[_i84]=Math.asin(item);}else if(_i84-1>=0){var preItem=result[_i84-1];if(this.IsNumber(preItem))result[_i84]=preItem;}}}return result;}};//反余弦值. 用法: ACOS(X)返回X的反余弦值
10002
- this.ACOS=function(data){if(!Array.isArray(data)){if(this.IsNumber(data))return Math.acos(data);return null;}else{var result=[];for(var _i85 in data){var item=data[_i85];result[_i85]=null;if(this.IsNumber(item)){if(item>=-1&&item<=1){result[_i85]=Math.acos(item);}else if(_i85-1>=0){var preItem=result[_i85-1];if(this.IsNumber(preItem))result[_i85]=preItem;}}}return result;}};/*
10009
+ */this.Trigonometric=function(data,func){if(!Array.isArray(data)){if(this.IsNumber(data))return func(data);return null;}else{var result=[];for(var _i85 in data){var item=data[_i85];if(this.IsNumber(item))result[_i85]=func(item);else result[_i85]=null;}return result;}};//反正弦值. 用法: ASIN(X)返回X的反正弦值
10010
+ this.ASIN=function(data){if(!Array.isArray(data)){if(this.IsNumber(data))return Math.acos(data);return null;}else{var result=[];for(var _i86 in data){var item=data[_i86];result[_i86]=null;if(this.IsNumber(item)){if(item>=-1&&item<=1){result[_i86]=Math.asin(item);}else if(_i86-1>=0){var preItem=result[_i86-1];if(this.IsNumber(preItem))result[_i86]=preItem;}}}return result;}};//反余弦值. 用法: ACOS(X)返回X的反余弦值
10011
+ this.ACOS=function(data){if(!Array.isArray(data)){if(this.IsNumber(data))return Math.acos(data);return null;}else{var result=[];for(var _i87 in data){var item=data[_i87];result[_i87]=null;if(this.IsNumber(item)){if(item>=-1&&item<=1){result[_i87]=Math.acos(item);}else if(_i87-1>=0){var preItem=result[_i87-1];if(this.IsNumber(preItem))result[_i87]=preItem;}}}return result;}};/*
10003
10012
  LAST(X,A,B):持续存在.
10004
10013
  用法:
10005
10014
  LAST(CLOSE>OPEN,10,5)
@@ -10202,42 +10211,42 @@ for(var i=startDay,j=0;i<kData.length;++i){var start=i-startDay;if(start<0)conti
10202
10211
  */this.LWINNER=function(n,data,node){var startDay=n;if(startDay<=0)this.ThrowUnexpectedNode(node,'LWINNER() 第1个参数错误');var result=[];var kData=this.SymbolData.Data.Data;if(!kData||kData.length<=0)return result;var aryCapital=this.SymbolData.GetStockCacheData({FunctionName:"FINANCE",Args:[7],ArgCount:1,Node:node});//流通股本
10203
10212
  var dTotalVol=0,dVol=0;for(var i=startDay-1,j=0,k=0;i<kData.length;++i){var index=i-startDay+1;var dMaxPrice=kData[index].High,dMinPrice=kData[index].Low;for(var j=0;j<startDay;++j){var item=kData[index+j];dMinPrice=Math.min(dMinPrice,item.Low);dMaxPrice=Math.max(dMaxPrice,item.High);}if(dMinPrice>5000||dMinPrice<0||dMaxPrice>5000||dMinPrice<0)this.ThrowUnexpectedNode(node,'LWINNER() 历史K线最大最小值错误, 超出(0,5000)范围');var lMaxPrice=parseInt(dMaxPrice*100+1);var lMinPrice=parseInt(dMinPrice*100-1);var lLow=0,lHigh=0,lClose=0;dMaxPrice=lMaxPrice/100.0;dMinPrice=lMinPrice/100.0;var lSpeed=lMaxPrice-lMinPrice+1;if(lSpeed<1)return result;var aryVolPrice=[],aryPerVol=[];for(var j=0;j<lSpeed;++j){aryVolPrice[j]=0;aryPerVol[j]=0;}for(j=0;j<startDay;++j){var capital=aryCapital[index+j];if(capital<1)continue;var kItem=kData[index+j];var dHSL=kItem.Vol/capital;for(k=0;k<lSpeed;k++){aryVolPrice[k]*=1-dHSL;}lLow=parseInt(Math.min(lMaxPrice,Math.max(lMinPrice,kItem.Low*100)))-lMinPrice;lHigh=parseInt(Math.min(lMaxPrice,Math.max(lMinPrice,kItem.High*100)))-lMinPrice;lClose=parseInt(Math.min(lMaxPrice,Math.max(lMinPrice,kItem.Close*100)))-lMinPrice;for(var k=0;k<lSpeed;++k){aryPerVol[k]=0;}var lHalf=parseInt((lLow+lHigh+2*lClose)/4);if(lHalf==lHigh||lHalf==lLow){aryPerVol[lHalf]+=kItem.Vol;}else{var dVH=kItem.Vol/(lHalf-lLow);for(var _k=lLow;_k<lHalf;++_k){aryPerVol[_k]+=(_k-lLow)*(dVH/(lHalf-lLow));}for(var _k2;_k2<=lHigh;++_k2){aryPerVol[_k2]+=(_k2-lHigh)*(dVH/(lHalf-lHigh));}}dTotalVol=0;for(var k=lLow;k<=lHigh;k++){aryVolPrice[k]+=aryPerVol[k];}}for(var j=0;j<lSpeed;j++){dTotalVol+=aryVolPrice[j];}if(Array.isArray(data))lHigh=parseInt(Math.min(data[i]*100-lMinPrice,lSpeed-1));else lHigh=parseInt(Math.min(data*100-lMinPrice,lSpeed-1));dVol=0;for(k=0;k<=lHigh;k++){dVol+=aryVolPrice[k];}if(dTotalVol>0&&dVol>0&&dVol<=dTotalVol)result[i]=dVol/dTotalVol;else if(i-1>=0)result[i]=result[i-1];}return result;};this.PWINNER=function(n,data,node){var result=[];return result;};//计算截至到某一天的历史所有筹码
10204
10213
  this.CalculateChip=function(index,exchangeData,hisData,dRate){var result={Min:null,Max:null,Data:[]};var seed=1;//筹码历史衰减换手系数
10205
- var max=null,min=null;for(var _i86=index;_i86>=0;--_i86){var _item8={};//Vol:量 High:最高 Low:最低
10206
- var kData=hisData[_i86];if(_i86==index)_item8.Vol=kData.Vol*exchangeData[_i86];else _item8.Vol=kData.Vol*seed;_item8.Date=kData.Date;_item8.High=kData.High;_item8.Low=kData.Low;if(max==null)max=_item8.High;else if(max<_item8.High)max=_item8.High;if(min==null)min=_item8.Low;else if(min<_item8.Low)min=_item8.Low;result.Data[_i86]=_item8;seed*=1-exchangeData[_i86]/100*dRate;//换手率累乘
10214
+ var max=null,min=null;for(var _i88=index;_i88>=0;--_i88){var _item8={};//Vol:量 High:最高 Low:最低
10215
+ var kData=hisData[_i88];if(_i88==index)_item8.Vol=kData.Vol*exchangeData[_i88];else _item8.Vol=kData.Vol*seed;_item8.Date=kData.Date;_item8.High=kData.High;_item8.Low=kData.Low;if(max==null)max=_item8.High;else if(max<_item8.High)max=_item8.High;if(min==null)min=_item8.Low;else if(min<_item8.Low)min=_item8.Low;result.Data[_i88]=_item8;seed*=1-exchangeData[_i88]/100*dRate;//换手率累乘
10207
10216
  }result.Max=max;result.Min=min;return result;};/*
10208
10217
  返回是否连涨周期数.
10209
10218
  用法:
10210
10219
  UPNDAY(CLOSE,M)
10211
10220
  表示连涨M个周期,M为常量
10212
- */this.UPNDAY=function(data,n){var result=[];if(n<1)return result;if(data==null||n>data.length)return result;var days=0;for(var _i87=0;_i87<data.length;++_i87){result[_i87]=0;if(_i87-1<0)continue;if(!this.IsNumber(data[_i87])||!this.IsNumber(data[_i87-1]))//无效数都不算连涨
10213
- {days=0;continue;}if(data[_i87]>data[_i87-1])++days;else days=0;if(days==n){result[_i87]=1;--days;}}return result;};/*
10221
+ */this.UPNDAY=function(data,n){var result=[];if(n<1)return result;if(data==null||n>data.length)return result;var days=0;for(var _i89=0;_i89<data.length;++_i89){result[_i89]=0;if(_i89-1<0)continue;if(!this.IsNumber(data[_i89])||!this.IsNumber(data[_i89-1]))//无效数都不算连涨
10222
+ {days=0;continue;}if(data[_i89]>data[_i89-1])++days;else days=0;if(days==n){result[_i89]=1;--days;}}return result;};/*
10214
10223
  返回是否连跌周期.
10215
10224
  用法:
10216
10225
  DOWNNDAY(CLOSE,M)
10217
10226
  表示连跌M个周期,M为常量
10218
- */this.DOWNNDAY=function(data,n){var result=[];if(n<1)return result;if(data==null||n>data.length)return result;var days=0;for(var _i88=0;_i88<data.length;++_i88){result[_i88]=0;if(_i88-1<0)continue;if(!this.IsNumber(data[_i88])||!this.IsNumber(data[_i88-1]))//无效数都不算连涨
10219
- {days=0;continue;}if(data[_i88]<data[_i88-1])++days;else days=0;if(days==n){result[_i88]=1;--days;}}return result;};/*
10227
+ */this.DOWNNDAY=function(data,n){var result=[];if(n<1)return result;if(data==null||n>data.length)return result;var days=0;for(var _i90=0;_i90<data.length;++_i90){result[_i90]=0;if(_i90-1<0)continue;if(!this.IsNumber(data[_i90])||!this.IsNumber(data[_i90-1]))//无效数都不算连涨
10228
+ {days=0;continue;}if(data[_i90]<data[_i90-1])++days;else days=0;if(days==n){result[_i90]=1;--days;}}return result;};/*
10220
10229
  返回是否持续存在X>Y
10221
10230
  用法:
10222
10231
  NDAY(CLOSE,OPEN,3)
10223
10232
  表示连续3日收阳线
10224
- */this.NDAY=function(data,data2,n){var result=[];if(n<1)return result;if(!Array.isArray(data)&&!Array.isArray(data2))return result;if(data==null||data2==null)return result;if(Array.isArray(data)&&Array.isArray(data2)){if(n>=data.length||n>=data2.length)return result;var count=Math.max(data.length,data2.length);var days=0;for(var _i89=0;_i89<count;++_i89){result[_i89]=0;if(_i89>=data.length||_i89>=data2.length)continue;if(!this.IsNumber(data[_i89])||!this.IsNumber(data2[_i89])){days=0;continue;}if(data[_i89]>data2[_i89])++days;else days=0;if(days==n){result[_i89]=1;--days;}}}else if(Array.isArray(data)&&!Array.isArray(data2)){if(n>=data.length||!this.IsNumber(data2))return;var days=0;for(var _i90 in data){result[_i90]=0;if(!this.IsNumber(data[_i90])){days=0;continue;}if(data[_i90]>data2)++days;else days=0;if(days==n){result[_i90]=1;--days;}}}else if(!Array.isArray(data)&&Array.isArray(data2)){if(n>=data2.length||!this.IsNumber(data))return;var days=0;for(var _i91 in data2){result[_i91]=0;if(!this.IsNumber(data2[_i91])){days=0;continue;}if(data>data2[_i91])++days;else days=0;if(days==n){result[_i91]=1;--days;}}}return result;};/*
10233
+ */this.NDAY=function(data,data2,n){var result=[];if(n<1)return result;if(!Array.isArray(data)&&!Array.isArray(data2))return result;if(data==null||data2==null)return result;if(Array.isArray(data)&&Array.isArray(data2)){if(n>=data.length||n>=data2.length)return result;var count=Math.max(data.length,data2.length);var days=0;for(var _i91=0;_i91<count;++_i91){result[_i91]=0;if(_i91>=data.length||_i91>=data2.length)continue;if(!this.IsNumber(data[_i91])||!this.IsNumber(data2[_i91])){days=0;continue;}if(data[_i91]>data2[_i91])++days;else days=0;if(days==n){result[_i91]=1;--days;}}}else if(Array.isArray(data)&&!Array.isArray(data2)){if(n>=data.length||!this.IsNumber(data2))return;var days=0;for(var _i92 in data){result[_i92]=0;if(!this.IsNumber(data[_i92])){days=0;continue;}if(data[_i92]>data2)++days;else days=0;if(days==n){result[_i92]=1;--days;}}}else if(!Array.isArray(data)&&Array.isArray(data2)){if(n>=data2.length||!this.IsNumber(data))return;var days=0;for(var _i93 in data2){result[_i93]=0;if(!this.IsNumber(data2[_i93])){days=0;continue;}if(data>data2[_i93])++days;else days=0;if(days==n){result[_i93]=1;--days;}}}return result;};/*
10225
10234
  两条线维持一定周期后交叉.
10226
10235
  用法:LONGCROSS(A,B,N)表示A在N周期内都小于B,本周期从下方向上穿过B时返回1,否则返回0
10227
- */this.LONGCROSS=function(data,data2,n){var result=[];var count=Math.max(data.length,data2.length);for(var _i92=0;_i92<count;++_i92){result[_i92]=0;if(_i92-1<0)continue;if(_i92>=data.length||_i92>=data2.length)continue;if(!this.IsNumber(data[_i92])||!this.IsNumber(data2[_i92])||!this.IsNumber(data[_i92-1])||!this.IsNumber(data2[_i92-1]))continue;if(data[_i92]>data2[_i92]&&data[_i92-1]<data2[_i92-1])result[_i92]=1;}for(var _i93=0,_j4=0;_i93<count;++_i93){if(!result[_i93])continue;for(_j4=1;_j4<=n&&_i93-_j4>=0;++_j4){if(data[_i93-_j4]>=data2[_i93-_j4]){result[_i93]=0;break;}}}return result;};this.ISVALID=function(data){if(Array.isArray(data)){var result=[];for(var i=0;i<data.length;++i){var item=data[i];if(item)result[i]=1;else result[i]=0;}return result;}else{if(data)return 1;else return 0;}};/*
10236
+ */this.LONGCROSS=function(data,data2,n){var result=[];var count=Math.max(data.length,data2.length);for(var _i94=0;_i94<count;++_i94){result[_i94]=0;if(_i94-1<0)continue;if(_i94>=data.length||_i94>=data2.length)continue;if(!this.IsNumber(data[_i94])||!this.IsNumber(data2[_i94])||!this.IsNumber(data[_i94-1])||!this.IsNumber(data2[_i94-1]))continue;if(data[_i94]>data2[_i94]&&data[_i94-1]<data2[_i94-1])result[_i94]=1;}for(var _i95=0,_j5=0;_i95<count;++_i95){if(!result[_i95])continue;for(_j5=1;_j5<=n&&_i95-_j5>=0;++_j5){if(data[_i95-_j5]>=data2[_i95-_j5]){result[_i95]=0;break;}}}return result;};this.ISVALID=function(data){if(Array.isArray(data)){var result=[];for(var i=0;i<data.length;++i){var item=data[i];if(item)result[i]=1;else result[i]=0;}return result;}else{if(data)return 1;else return 0;}};/*
10228
10237
  EXISTR(X,A,B):是否存在(前几日到前几日间).
10229
10238
  例如: EXISTR(CLOSE>OPEN,10,5)
10230
10239
  表示从前10日内到前5日内存在着阳线
10231
10240
  若A为0,表示从第一天开始,B为0,表示到最后日止
10232
- */this.EXISTR=function(data,n,n2){var result=[];if(!Array.isArray(data))return result;n=parseInt(n);n2=parseInt(n2);if(n<=0)n=data.length;if(n2<=0)n2=1;if(n2>n)return result;var result=[];var value;for(var _i94=0,_j5=0;_i94<data.length;++_i94){result[_i94]=null;if(_i94-n<0||_i94-n2<0)continue;result[_i94]=0;for(_j5=n;_j5>=n2;--_j5){var value=data[_i94-_j5];if(this.IsNumber(value)&&value){result[_i94]=1;break;}}}return result;};/*
10241
+ */this.EXISTR=function(data,n,n2){var result=[];if(!Array.isArray(data))return result;n=parseInt(n);n2=parseInt(n2);if(n<=0)n=data.length;if(n2<=0)n2=1;if(n2>n)return result;var result=[];var value;for(var _i96=0,_j6=0;_i96<data.length;++_i96){result[_i96]=null;if(_i96-n<0||_i96-n2<0)continue;result[_i96]=0;for(_j6=n;_j6>=n2;--_j6){var value=data[_i96-_j6];if(this.IsNumber(value)&&value){result[_i96]=1;break;}}}return result;};/*
10233
10242
  RELATE(X,Y,N) 返回X和Y的N周期的相关系数
10234
10243
  RELATE(X,Y,N)=(∑[(Xi-Avg(X))(Yi-Avg(y))])/N ÷ √((∑(Xi-Avg(X))^2)/N * (∑(Yi-Avg(Y))^2)/N)
10235
10244
  其中 avg(x)表示x的N周期均值: avg(X) = (∑Xi)/N
10236
10245
  √(...)表示开平方
10237
- */this.RELATE=function(data,data2,n){var result=[];if(n<1)n=1;if(!Array.isArray(data)||!Array.isArray(data2))return result;var dataAverage=this.CalculateAverage(data,n);var data2Average=this.CalculateAverage(data2,n);var count=Math.max(data.length,data2.length);for(var _i95=0,_j6=0;_i95<count;++_i95){result[_i95]=null;if(_i95>=data.length||_i95>=data2.length||_i95>=dataAverage.length||_i95>=data2Average.length)continue;var average=dataAverage[_i95];var average2=data2Average[_i95];var total=0,total2=0,total3=0;for(_j6=_i95-n+1;_j6<=_i95;++_j6){total+=(data[_j6]-average)*(data2[_j6]-average2);//∑[(Xi-Avg(X))(Yi-Avg(y))])
10238
- total2+=Math.pow(data[_j6]-average,2);//∑(Xi-Avg(X))^2
10239
- total3+=Math.pow(data2[_j6]-average2,2);//∑(Yi-Avg(Y))^2)
10240
- }result[_i95]=total/n/(Math.sqrt(total2/n)*Math.sqrt(total3/n));}return result;};//计算数组n周期内的均值
10246
+ */this.RELATE=function(data,data2,n){var result=[];if(n<1)n=1;if(!Array.isArray(data)||!Array.isArray(data2))return result;var dataAverage=this.CalculateAverage(data,n);var data2Average=this.CalculateAverage(data2,n);var count=Math.max(data.length,data2.length);for(var _i97=0,_j7=0;_i97<count;++_i97){result[_i97]=null;if(_i97>=data.length||_i97>=data2.length||_i97>=dataAverage.length||_i97>=data2Average.length)continue;var average=dataAverage[_i97];var average2=data2Average[_i97];var total=0,total2=0,total3=0;for(_j7=_i97-n+1;_j7<=_i97;++_j7){total+=(data[_j7]-average)*(data2[_j7]-average2);//∑[(Xi-Avg(X))(Yi-Avg(y))])
10247
+ total2+=Math.pow(data[_j7]-average,2);//∑(Xi-Avg(X))^2
10248
+ total3+=Math.pow(data2[_j7]-average2,2);//∑(Yi-Avg(Y))^2)
10249
+ }result[_i97]=total/n/(Math.sqrt(total2/n)*Math.sqrt(total3/n));}return result;};//计算数组n周期内的均值
10241
10250
  this.CalculateAverage=function(data,n){var result=[];if(n<1)return result;var total=0;for(var i=0;i<data.length;++i)//去掉开始的无效数
10242
10251
  {if(this.IsNumber(data[i]))break;}for(;i<data.length&&i<n;++i)//计算第1个周期的数据
10243
10252
  {result[i]=null;var value=data[i];if(!this.IsNumber(value))continue;total+=value;}result[i-1]=total/n;for(;i<data.length;++i)//计算后面的周期数据
@@ -10245,7 +10254,7 @@ this.CalculateAverage=function(data,n){var result=[];if(n<1)return result;var to
10245
10254
  if(!this.IsNumber(value))value=0;if(!this.IsNumber(preValue))preValue=0;total=total-preValue+value;//当前周期的数据 等于上一个周期数据 去掉上一个周期的第1个数据 加上这个周期的最后1个数据
10246
10255
  result[i]=total/n;}return result;};/*
10247
10256
  COVAR(X,Y,N) 返回X和Y的N周期的协方差
10248
- */this.COVAR=function(data,data2,n){if(this.IsNumber(data)||this.IsNumber(data2))return 0;var result=[];if(n<1)n=1;if(!Array.isArray(data)||!Array.isArray(data2))return result;var dataAverage=this.CalculateAverage(data,n);var data2Average=this.CalculateAverage(data2,n);var count=Math.max(data.length,data2.length);var count=Math.max(data.length,data2.length);for(var _i96=0,_j7=0;_i96<count;++_i96){result[_i96]=null;if(_i96>=data.length||_i96>=data2.length||_i96>=dataAverage.length||_i96>=data2Average.length)continue;var average=dataAverage[_i96];var average2=data2Average[_i96];var total=0;for(_j7=_i96-n+1;_j7<=_i96;++_j7){total+=(data[_j7]-average)*(data2[_j7]-average2);}result[_i96]=total/n;}return result;};/*
10257
+ */this.COVAR=function(data,data2,n){if(this.IsNumber(data)||this.IsNumber(data2))return 0;var result=[];if(n<1)n=1;if(!Array.isArray(data)||!Array.isArray(data2))return result;var dataAverage=this.CalculateAverage(data,n);var data2Average=this.CalculateAverage(data2,n);var count=Math.max(data.length,data2.length);var count=Math.max(data.length,data2.length);for(var _i98=0,_j8=0;_i98<count;++_i98){result[_i98]=null;if(_i98>=data.length||_i98>=data2.length||_i98>=dataAverage.length||_i98>=data2Average.length)continue;var average=dataAverage[_i98];var average2=data2Average[_i98];var total=0;for(_j8=_i98-n+1;_j8<=_i98;++_j8){total+=(data[_j8]-average)*(data2[_j8]-average2);}result[_i98]=total/n;}return result;};/*
10249
10258
  求上一高点到当前的周期数.
10250
10259
  用法:
10251
10260
  HHVBARS(X,N):求N周期内X最高值到当前周期数,N=0表示从第一个有效值开始统计
@@ -10269,7 +10278,7 @@ for(var i=0;i<data.length;++i){result[i]=null;if(this.IsNumber(data[i])){nMin=i;
10269
10278
  公式=股票和指数协方差/指数方差
10270
10279
  */this.BETA=function(n){var result=[];var stockData=this.SymbolData.Data;var indexData=this.SymbolData.IndexData;if(n<=0)n=1;var stockProfit=[];//股票涨幅
10271
10280
  var indexProfit=[];//指数涨幅
10272
- for(var _i97=0;_i97<stockData.Data.length;++_i97){stockProfit[_i97]=0;indexProfit[_i97]=0;var stockItem=stockData.Data[_i97];var indexItem=indexData.Data[_i97];if(stockItem.Close>0&&stockItem.YClose>0)stockProfit[_i97]=(stockItem.Close-stockItem.YClose)/stockItem.YClose;if(indexItem.Close>0&&indexItem.YClose>0)indexProfit[_i97]=(indexItem.Close-indexItem.YClose)/indexItem.YClose;}//计算均值数组
10281
+ for(var _i99=0;_i99<stockData.Data.length;++_i99){stockProfit[_i99]=0;indexProfit[_i99]=0;var stockItem=stockData.Data[_i99];var indexItem=indexData.Data[_i99];if(stockItem.Close>0&&stockItem.YClose>0)stockProfit[_i99]=(stockItem.Close-stockItem.YClose)/stockItem.YClose;if(indexItem.Close>0&&indexItem.YClose>0)indexProfit[_i99]=(indexItem.Close-indexItem.YClose)/indexItem.YClose;}//计算均值数组
10273
10282
  var averageStockProfit=this.CalculateAverage(stockProfit,n);var averageIndexProfit=this.CalculateAverage(indexProfit,n);for(var i=0,j=0;i<stockData.Data.length;++i){result[i]=null;if(i>=stockProfit.length||i>=indexProfit.length||i>=averageStockProfit.length||i>=averageIndexProfit.length)continue;var averageStock=averageStockProfit[i];var averageIndex=averageIndexProfit[i];var covariance=0;//协方差
10274
10283
  var variance=0;//方差
10275
10284
  for(j=i-n+1;j<=i;++j){var value=indexProfit[j]-averageIndex;var value2=stockProfit[j]-averageStock;covariance+=value*value2;variance+=value*value;}if(this.IsDivideNumber(variance)&&this.IsNumber(covariance))result[i]=covariance/variance;//(covariance/n)/(variance/n)=covariance/variance;
@@ -10317,8 +10326,8 @@ this.CON2STR=function(data,n){var result=[];if(Array.isArray(data)){for(var i=da
10317
10326
  //用法: VAR2STR(C,3)表示取收盘价,以3位小数转为字符串
10318
10327
  this.VAR2STR=function(data,n){var result=[];if(Array.isArray(data)){for(var i=0;i<data.length;++i){result[i]=null;var item=data[i];if(this.IsNumber(item))result[i]=item.toFixed(n);}}else{if(this.IsNumber(data))result=data.toFixed(n);}return result;};this.MOD=function(data,data2){var result=[];var isNumber=typeof data=='number';var isNumber2=typeof data2=='number';//单数值
10319
10328
  if(isNumber&&isNumber2){return JSAlgorithm.MOD(data,data2);}else if(!isNumber&&!isNumber2)//都是数组相加
10320
- {var count=Math.max(data.length,data2.length);for(var _i98=0;_i98<count;++_i98){result[_i98]=null;//初始化
10321
- if(_i98<data.length&&_i98<data2.length){if(this.IsNumber(data[_i98])&&this.IsNumber(data2[_i98]))result[_i98]=JSAlgorithm.MOD(data[_i98],data2[_i98]);}}return result;}else if(isNumber&&!isNumber2)//单数字 数组
10329
+ {var count=Math.max(data.length,data2.length);for(var _i100=0;_i100<count;++_i100){result[_i100]=null;//初始化
10330
+ if(_i100<data.length&&_i100<data2.length){if(this.IsNumber(data[_i100])&&this.IsNumber(data2[_i100]))result[_i100]=JSAlgorithm.MOD(data[_i100],data2[_i100]);}}return result;}else if(isNumber&&!isNumber2)//单数字 数组
10322
10331
  {for(var i in data2){result[i]=null;if(this.IsNumber(data)&&this.IsNumber(data2[i]))result[i]=JSAlgorithm.MOD(data,data2[i]);}return result;}else if(!isNumber&&isNumber2)//数组 单数字
10323
10332
  {for(var i in data){result[i]=null;if(this.IsNumber(data[i])&&this.IsNumber(data2))result[i]=JSAlgorithm.MOD(data[i],data2);}return result;}return result;};this.POW=function(data,n){var result=[];if(Array.isArray(data)&&Array.isArray(n)){for(var i=0;i<data.length;++i){var value=data[i];var value2=n[i];if(this.IsNumber(value)&&this.IsNumber(value2))result[i]=Math.pow(value,value2);else result[i]=null;}}else if(IFrameSplitOperator.IsNumber(data)&&Array.isArray(n)){for(var i=0;i<n.length;++i){var item=n[i];if(this.IsNumber(item))result[i]=Math.pow(data,item);else result[i]=null;}}else if(IFrameSplitOperator.IsNumber(data)&&IFrameSplitOperator.IsNumber(n)){return Math.pow(data,n);}else if(Array.isArray(data)&&IFrameSplitOperator.IsNumber(n)){for(var i=0;i<data.length;++i){var item=data[i];if(this.IsNumber(item))result[i]=Math.pow(item,n);else result[i]=null;}}return result;};this.CEILING=function(data){var isNumber=typeof data=='number';if(isNumber)return parseInt(data);var result=[];for(var i in data){var item=data[i];if(this.IsNumber(item))result[i]=parseInt(item);else result[i]=null;}return result;};this.FLOOR=function(data){var isNumber=typeof data=='number';if(isNumber)return parseInt(data-1);var result=[];for(var i in data){var item=data[i];if(this.IsNumber(item))result[i]=parseInt(item-1);else result[i]=null;}return result;};this.ZTPRICE=function(data,rate){if(!this.IsNumber(rate))return null;if(Array.isArray(data)){var result=[];for(var i in data){var item=data[i];if(this.IsNumber(item))result[i]=(1+rate)*item;else result[i]=null;}return result;}else if(this.IsNumber(data)){var result=(1+rate)*data;return result;}};this.DTPRICE=function(data,rate){if(!this.IsNumber(rate))return null;if(Array.isArray(data)){var result=[];for(var i in data){var item=data[i];if(this.IsNumber(item))result[i]=(1-rate)*item;else result[i]=null;}return result;}else if(this.IsNumber(data)){var result=(1-rate)*data;return result;}};/*
10324
10333
  FRACPART(A) 取得小数部分
@@ -10454,7 +10463,8 @@ this.STRFORMAT=function(strFormat,args,node){var aryParam=strFormat.match(/{[0-9
10454
10463
  var maxIndex=-1;for(var i=0;i<aryParam.length;++i){var item=aryParam[i];if(item.length<3)continue;var value=item.slice(1,item.length-1);var index=-1,decimal=-1;if(value.indexOf(":")>0){var aryTemp=value.split(":");if(aryTemp){if(aryTemp[0])index=parseInt(aryTemp[0]);if(aryTemp[1]){if(aryTemp[1].indexOf(".")>=0){var zeroCount=0;var strTemp=aryTemp[1];for(var j=strTemp.length-1;j>=0;--j){if(strTemp[j]=="0")++zeroCount;else break;}if(zeroCount>0)decimal=zeroCount;}else if(aryTemp[1]=="0"){decimal=0;}}}}else{index=parseInt(value);}if(index<0)continue;var paramItem={Src:item,Index:index,Text:null,Decimal:null};if(decimal>=0)paramItem.Decimal=decimal;if(maxIndex<index)maxIndex=index;mapParam.set(index,paramItem);}var isArray=false;//是否输出数组字符串
10455
10464
  var maxCount=0;for(var i=1;i<args.length;++i){var item=args[i];if(Array.isArray(item)){isArray=true;if(maxCount<item.length)maxCount=item.length;}}if(isArray){var result=[];for(var i=0;i<maxCount;++i){var strItem=strFormat;var _iteratorNormalCompletion19=true;var _didIteratorError19=false;var _iteratorError19=undefined;try{for(var _iterator19=(0,_getIterator3.default)(mapParam),_step19;!(_iteratorNormalCompletion19=(_step19=_iterator19.next()).done);_iteratorNormalCompletion19=true){var item=_step19.value;var paramInfo=item[1];var paramItem=args[paramInfo.Index+1];var text="null";if(paramItem){if(Array.isArray(paramItem)){var value=paramItem[i];if(value){if(IFrameSplitOperator.IsNumber(paramInfo.Decimal))text=''+value.toFixed(paramInfo.Decimal);else text=''+value;}}else{text=''+paramItem;}}strItem=strItem.replace(paramInfo.Src,text);}}catch(err){_didIteratorError19=true;_iteratorError19=err;}finally{try{if(!_iteratorNormalCompletion19&&_iterator19.return){_iterator19.return();}}finally{if(_didIteratorError19){throw _iteratorError19;}}}result[i]=strItem;}return result;}else{var result=strFormat;var _iteratorNormalCompletion20=true;var _didIteratorError20=false;var _iteratorError20=undefined;try{for(var _iterator20=(0,_getIterator3.default)(mapParam),_step20;!(_iteratorNormalCompletion20=(_step20=_iterator20.next()).done);_iteratorNormalCompletion20=true){var item=_step20.value;var paramInfo=item[1];var paramItem=args[paramInfo.Index+1];var text="null";if(paramItem){text=''+paramItem;}result=result.replace(paramInfo.Src,text);}}catch(err){_didIteratorError20=true;_iteratorError20=err;}finally{try{if(!_iteratorNormalCompletion20&&_iterator20.return){_iterator20.return();}}finally{if(_didIteratorError20){throw _iteratorError20;}}}return result;}};//函数调用
10456
10465
  this.CallFunction=function(name,args,node,symbolData){switch(name){case'MAX':case"MAX6":return this.MAX(args,node);case'MIN':case"MIN6":return this.MIN(args,node);case'REF':return this.REF(args[0],args[1]);case"REFV":return this.REFV(args[0],args[1]);case'REFX':return this.REFX(args[0],args[1]);case"REFXV":return this.REFXV(args[0],args[1]);case"REFX1"://文华函数
10457
- return this.REFX(args[0],args[1]);case'ABS':return this.ABS(args[0]);case'MA':return this.MA(args[0],args[1]);case"EMA":return this.EMA(args[0],args[1]);case"SMA":return this.SMA(args[0],args[1],args[2]);case"DMA":return this.DMA(args[0],args[1]);case"XMA":return this.XMA(args[0],args[1]);case'EXPMA':return this.EXPMA(args[0],args[1]);case'EXPMEMA':return this.EXPMEMA(args[0],args[1]);case'COUNT':return this.COUNT(args[0],args[1]);case'LLV':return this.LLV(args[0],args[1]);case"LV":return this.LV(args[0],args[1]);case'LLVBARS':return this.LLVBARS(args[0],args[1]);case'HHV':return this.HHV(args[0],args[1]);case'HV':return this.HV(args[0],args[1]);case'HHVBARS':return this.HHVBARS(args[0],args[1]);case'MULAR':return this.MULAR(args[0],args[1]);case'CROSS':return this.CROSS(args[0],args[1]);case'LONGCROSS':return this.LONGCROSS(args[0],args[1],args[2]);case"ISVALID":return this.ISVALID(args[0]);case"CROSSDOWN":return this.CROSSDOWN(args[0],args[1]);case"CROSSUP":return this.CROSSUP(args[0],args[1]);case'AVEDEV':return this.AVEDEV(args[0],args[1]);case'STD':return this.STD(args[0],args[1]);case"STDDEV":return this.STDDEV(args[0],args[1]);case'IF':case'IFF':case"IFELSE":return this.IF(args[0],args[1],args[2]);case'IFN':return this.IFN(args[0],args[1],args[2]);case'NOT':return this.NOT(args[0]);case'SUM':return this.SUM(args[0],args[1]);case'RANGE':return this.RANGE(args[0],args[1],args[2]);case'EXIST':return this.EXIST(args[0],args[1]);case'EXISTR':return this.EXISTR(args[0],args[1],args[2]);case'FILTER':return this.FILTER(args[0],args[1]);case'TFILTER':return this.TFILTER(args[0],args[1],args[2]);case'SLOPE':return this.SLOPE(args[0],args[1]);case'BARSLAST':return this.BARSLAST(args[0]);case'BARSCOUNT':return this.BARSCOUNT(args[0]);case'BARSSINCEN':return this.BARSSINCEN(args[0],args[1]);case'BARSSINCE':return this.BARSSINCE(args[0]);case'LAST':return this.LAST(args[0],args[1],args[2]);case'EVERY':return this.EVERY(args[0],args[1]);case'DEVSQ':return this.DEVSQ(args[0],args[1]);case'ZIG':return this.ZIG(args[0],args[1]);case'TROUGHBARS':return this.TROUGHBARS(args[0],args[1],args[2]);case"TROUGH":return this.TROUGH(args[0],args[1],args[2]);case'PEAKBARS':return this.PEAKBARS(args[0],args[1],args[2]);case'PEAK':return this.PEAK(args[0],args[1],args[2]);case'COST':return this.COST(args[0]);case'WINNER':return this.WINNER(args[0],node);case'PPART':return this.PPART(args[0],node);case"COSTEX":return this.COSTEX(args[0],args[1],node);case"LWINNER":return this.LWINNER(args[0],args[1],node);case"PWINNER":return this.PWINNER(args[0],args[1],node);case'FORCAST':return this.FORCAST(args[0],args[1]);case"TSMA":return this.TSMA(args[0],args[1]);case'STDP':return this.STDP(args[0],args[1]);case'VAR':return this.VAR(args[0],args[1]);case'VARP':return this.VARP(args[0],args[1]);case'UPNDAY':return this.UPNDAY(args[0],args[1]);case'DOWNNDAY':return this.DOWNNDAY(args[0],args[1]);case'NDAY':return this.NDAY(args[0],args[1],args[2]);case'RELATE':return this.RELATE(args[0],args[1],args[2]);case'COVAR':return this.COVAR(args[0],args[1],args[2]);case'BETA':return this.BETA(args[0]);case'BETA2':return this.BETA2(args[0],args[1],args[2]);case'WMA':return this.WMA(args[0],args[1]);case'MEMA':return this.MEMA(args[0],args[1]);case'SUMBARS':return this.SUMBARS(args[0],args[1]);case'REVERSE':return this.REVERSE(args[0]);case'SAR':return this.SAR(args[0],args[1],args[2]);case'SARTURN':return this.SARTURN(args[0],args[1],args[2]);case'BACKSET':return this.BACKSET(args[0],args[1]);case'BETWEEN':return this.BETWEEN(args[0],args[1],args[2]);case'STRCAT':return this.STRCAT(args[0],args[1]);case'CON2STR':return this.CON2STR(args[0],args[1]);case"VAR2STR":return this.VAR2STR(args[0],args[1]);case"VARCAT":return this.VARCAT(args[0],args[1]);case"STRSPACE":return this.STRSPACE(args[0]);case"FINDSTR":return this.FINDSTR(args[0],args[1]);case"STRCMP":return this.STRCMP(args[0],args[1]);case"STRLEN":return this.STRLEN(args[0]);case"STRFORMAT":return this.STRFORMAT(args[0],args,node);case'DTPRICE':return this.DTPRICE(args[0],args[1]);case'ZTPRICE':return this.ZTPRICE(args[0],args[1]);case'MOD':return this.MOD(args[0],args[1]);case'POW':return this.POW(args[0],args[1]);case'CEILING':return this.CEILING(args[0]);case'FLOOR':return this.FLOOR(args[0]);case'FRACPART':return this.FRACPART(args[0]);case"SIGN":return this.SIGN(args[0]);case'BARSLASTCOUNT':return this.BARSLASTCOUNT(args[0]);case'INTPART':return this.INTPART(args[0]);case"CONST":return this.CONST(args[0]);case"TOPRANGE":return this.TOPRANGE(args[0]);case"LOWRANGE":return this.LOWRANGE(args[0]);case"FINDLOW":return this.FINDLOW(args[0],args[1],args[2],args[3]);case"FINDLOWBARS":return this.FINDLOWBARS(args[0],args[1],args[2],args[3]);case"FINDHIGH":return this.FINDHIGH(args[0],args[1],args[2],args[3]);case"FINDHIGHBARS":return this.FINDHIGHBARS(args[0],args[1],args[2],args[3]);case"BARSNEXT":return this.BARSNEXT(args[0]);case"HOD":return this.HOD(args[0],args[1]);case"LOD":return this.LOD(args[0],args[1]);case"AMA":return this.AMA(args[0],args[1]);case"TMA":return this.TMA(args[0],args[1],args[2]);case"ROUND":return this.ROUND(args[0]);case"ROUND2":return this.ROUND2(args[0],args[1]);case"TRMA":return this.TRMA(args[0],args[1]);case"VALUEWHEN":return this.VALUEWHEN(args[0],args[1]);case"HARMEAN":return this.HARMEAN(args[0],args[1]);case"DATETODAY":return this.DATETODAY(args[0]);case"DAYTODATE":return this.DAYTODATE(args[0]);case"TIMETOSEC":return this.TIMETOSEC(args[0]);case"SECTOTIME":return this.SECTOTIME(args[0]);case"ANY":return this.ANY(args[0],args[1]);case"ALL":return this.ALL(args[0],args[1]);case"TESTSKIP":return this.TESTSKIP(args[0],node);case"SUMBARS":return this.SUMBARS(args[0],args[1]);case"ALIGNRIGHT":return this.ALIGNRIGHT(args[0]);//三角函数
10466
+ return this.REFX(args[0],args[1]);case'ABS':return this.ABS(args[0]);case'MA':return this.MA(args[0],args[1]);case"EMA":return this.EMA(args[0],args[1]);case"SMA":return this.SMA(args[0],args[1],args[2]);case"DMA":return this.DMA(args[0],args[1]);case"XMA":return this.XMA(args[0],args[1]);case'EXPMA':return this.EXPMA(args[0],args[1]);case'EXPMEMA':return this.EXPMEMA(args[0],args[1]);case'COUNT':return this.COUNT(args[0],args[1]);case'LLV':return this.LLV(args[0],args[1]);case"LV":return this.LV(args[0],args[1]);case'LLVBARS':return this.LLVBARS(args[0],args[1]);case'HHV':return this.HHV(args[0],args[1]);case'HV':return this.HV(args[0],args[1]);case'HHVBARS':return this.HHVBARS(args[0],args[1]);case'MULAR':return this.MULAR(args[0],args[1]);case'CROSS':return this.CROSS(args[0],args[1]);case'LONGCROSS':return this.LONGCROSS(args[0],args[1],args[2]);case"ISVALID":return this.ISVALID(args[0]);case"CROSSDOWN":return this.CROSSDOWN(args[0],args[1]);case"CROSSUP":return this.CROSSUP(args[0],args[1]);case'AVEDEV':return this.AVEDEV(args[0],args[1]);case'STD':return this.STD(args[0],args[1]);case"STDDEV":return this.STDDEV(args[0],args[1]);case'IF':case'IFF':case"IFELSE":return this.IF(args[0],args[1],args[2]);case'IFN':return this.IFN(args[0],args[1],args[2]);case'NOT':return this.NOT(args[0]);case'SUM':return this.SUM(args[0],args[1]);case'RANGE':return this.RANGE(args[0],args[1],args[2]);case'EXIST':return this.EXIST(args[0],args[1]);case'EXISTR':return this.EXISTR(args[0],args[1],args[2]);case'FILTER':return this.FILTER(args[0],args[1]);case'TFILTER':return this.TFILTER(args[0],args[1],args[2]);case"FILTERX":return this.FILTERX(args[0],args[1],node);case'SLOPE':return this.SLOPE(args[0],args[1]);case'BARSLAST':return this.BARSLAST(args[0]);case"BARSLASTS"://this.ThrowUnexpectedNode(node,`函数'BARSLASTS'还在开发中`, name);
10467
+ return this.BARSLASTS(args[0],args[1],node);case'BARSCOUNT':return this.BARSCOUNT(args[0]);case'BARSSINCEN':return this.BARSSINCEN(args[0],args[1]);case'BARSSINCE':return this.BARSSINCE(args[0]);case'LAST':return this.LAST(args[0],args[1],args[2]);case'EVERY':return this.EVERY(args[0],args[1]);case'DEVSQ':return this.DEVSQ(args[0],args[1]);case'ZIG':return this.ZIG(args[0],args[1]);case'TROUGHBARS':return this.TROUGHBARS(args[0],args[1],args[2]);case"TROUGH":return this.TROUGH(args[0],args[1],args[2]);case'PEAKBARS':return this.PEAKBARS(args[0],args[1],args[2]);case'PEAK':return this.PEAK(args[0],args[1],args[2]);case'COST':return this.COST(args[0]);case'WINNER':return this.WINNER(args[0],node);case'PPART':return this.PPART(args[0],node);case"COSTEX":return this.COSTEX(args[0],args[1],node);case"LWINNER":return this.LWINNER(args[0],args[1],node);case"PWINNER":return this.PWINNER(args[0],args[1],node);case'FORCAST':return this.FORCAST(args[0],args[1]);case"TSMA":return this.TSMA(args[0],args[1]);case'STDP':return this.STDP(args[0],args[1]);case'VAR':return this.VAR(args[0],args[1]);case'VARP':return this.VARP(args[0],args[1]);case'UPNDAY':return this.UPNDAY(args[0],args[1]);case'DOWNNDAY':return this.DOWNNDAY(args[0],args[1]);case'NDAY':return this.NDAY(args[0],args[1],args[2]);case'RELATE':return this.RELATE(args[0],args[1],args[2]);case'COVAR':return this.COVAR(args[0],args[1],args[2]);case'BETA':return this.BETA(args[0]);case'BETA2':return this.BETA2(args[0],args[1],args[2]);case'WMA':return this.WMA(args[0],args[1]);case'MEMA':return this.MEMA(args[0],args[1]);case'SUMBARS':return this.SUMBARS(args[0],args[1]);case'REVERSE':return this.REVERSE(args[0]);case'SAR':return this.SAR(args[0],args[1],args[2]);case'SARTURN':return this.SARTURN(args[0],args[1],args[2]);case'BACKSET':return this.BACKSET(args[0],args[1]);case'BETWEEN':return this.BETWEEN(args[0],args[1],args[2]);case'STRCAT':return this.STRCAT(args[0],args[1]);case'CON2STR':return this.CON2STR(args[0],args[1]);case"VAR2STR":return this.VAR2STR(args[0],args[1]);case"VARCAT":return this.VARCAT(args[0],args[1]);case"STRSPACE":return this.STRSPACE(args[0]);case"FINDSTR":return this.FINDSTR(args[0],args[1]);case"STRCMP":return this.STRCMP(args[0],args[1]);case"STRLEN":return this.STRLEN(args[0]);case"STRFORMAT":return this.STRFORMAT(args[0],args,node);case'DTPRICE':return this.DTPRICE(args[0],args[1]);case'ZTPRICE':return this.ZTPRICE(args[0],args[1]);case'MOD':return this.MOD(args[0],args[1]);case'POW':return this.POW(args[0],args[1]);case'CEILING':return this.CEILING(args[0]);case'FLOOR':return this.FLOOR(args[0]);case'FRACPART':return this.FRACPART(args[0]);case"SIGN":return this.SIGN(args[0]);case'BARSLASTCOUNT':return this.BARSLASTCOUNT(args[0]);case'INTPART':return this.INTPART(args[0]);case"CONST":return this.CONST(args[0]);case"TOPRANGE":return this.TOPRANGE(args[0]);case"LOWRANGE":return this.LOWRANGE(args[0]);case"FINDLOW":return this.FINDLOW(args[0],args[1],args[2],args[3]);case"FINDLOWBARS":return this.FINDLOWBARS(args[0],args[1],args[2],args[3]);case"FINDHIGH":return this.FINDHIGH(args[0],args[1],args[2],args[3]);case"FINDHIGHBARS":return this.FINDHIGHBARS(args[0],args[1],args[2],args[3]);case"BARSNEXT":return this.BARSNEXT(args[0]);case"HOD":return this.HOD(args[0],args[1]);case"LOD":return this.LOD(args[0],args[1]);case"AMA":return this.AMA(args[0],args[1]);case"TMA":return this.TMA(args[0],args[1],args[2]);case"ROUND":return this.ROUND(args[0]);case"ROUND2":return this.ROUND2(args[0],args[1]);case"TRMA":return this.TRMA(args[0],args[1]);case"VALUEWHEN":return this.VALUEWHEN(args[0],args[1]);case"HARMEAN":return this.HARMEAN(args[0],args[1]);case"DATETODAY":return this.DATETODAY(args[0]);case"DAYTODATE":return this.DAYTODATE(args[0]);case"TIMETOSEC":return this.TIMETOSEC(args[0]);case"SECTOTIME":return this.SECTOTIME(args[0]);case"ANY":return this.ANY(args[0],args[1]);case"ALL":return this.ALL(args[0],args[1]);case"TESTSKIP":return this.TESTSKIP(args[0],node);case"SUMBARS":return this.SUMBARS(args[0],args[1]);case"ALIGNRIGHT":return this.ALIGNRIGHT(args[0]);//三角函数
10458
10468
  case'ATAN':return this.Trigonometric(args[0],Math.atan);case'ACOS':return this.ACOS(args[0]);case'ASIN':return this.ASIN(args[0]);case'COS':return this.Trigonometric(args[0],Math.cos);case'SIN':return this.Trigonometric(args[0],Math.sin);case'TAN':return this.Trigonometric(args[0],Math.tan);case'LN':return this.Trigonometric(args[0],Math.log);case'LOG':return this.Trigonometric(args[0],_log2.default);case'EXP':return this.Trigonometric(args[0],Math.exp);case'SQRT':return this.Trigonometric(args[0],Math.sqrt);case"RAND":return this.RAND(args[0]);default:this.ThrowUnexpectedNode(node,'函数'+name+'不存在',name);}};//调用自定义函数 返回数据格式{Out:输出数据, Draw:绘图数据(可选)}
10459
10469
  this.CallCustomFunction=function(name,args,symbolData,node){var functionInfo=g_JSComplierResource.CustomFunction.Data.get(name);var dwonloadData=symbolData.GetStockCacheData({CustomName:name,Node:node});if(!functionInfo.Invoke)return{Out:dwonloadData};JSConsole.Complier.Log('[JSAlgorithm::CallCustomFunction] call custom function functionInfo=',functionInfo);var self=this;var obj={Name:name,Args:args,Symbol:symbolData.Symbol,Period:symbolData.Period,Right:symbolData.Right,KData:symbolData.Data,//K线数据
10460
10470
  DownloadData:dwonloadData,ThrowError:function ThrowError(error){self.ThrowUnexpectedNode(node,error);}};return functionInfo.Invoke(obj);};this.ThrowUnexpectedNode=function(node,message,word){var marker=node.Marker;var msg=message||"执行异常";return this.ErrorHandler.ThrowError(marker.Index,marker.Line,marker.Column,msg,word);};}//是否有是有效的数字
@@ -10485,20 +10495,20 @@ var IsNumber=typeof data=="number";var IsNumber2=typeof data2=="number";if(Array
10485
10495
  用法: DRAWLINE(COND1,PRICE1,COND2,PRICE2,EXPAND)
10486
10496
  当COND1条件满足时,在PRICE1位置画直线起点,当COND2条件满足时,在PRICE2位置画直线终点,EXPAND为延长类型。
10487
10497
  例如: DRAWLINE(HIGH>=HHV(HIGH,20),HIGH,LOW<=LLV(LOW,20),LOW,1) 表示在创20天新高与创20天新低之间画直线并且向右延长。
10488
- */this.DRAWLINE=function(condition,data,condition2,data2,expand){var drawData=[];var result={DrawData:drawData,DrawType:'DRAWLINE',Expand:expand};if(condition.length<=0)return result;var count=Math.max(condition.length,condition2.length);var bFirstPoint=false;var bSecondPont=false;var lineCache={Start:{},End:{},List:new Array()};for(var _i99=0;_i99<count;++_i99){drawData[_i99]=null;if(_i99<condition.length&&_i99<condition2.length){if(bFirstPoint==false&&bSecondPont==false){if(condition[_i99]==null||!condition[_i99])continue;bFirstPoint=true;lineCache.Start={ID:_i99,Value:data[_i99]};//第1个点
10489
- }else if(bFirstPoint==true&&bSecondPont==false){var bCondition2=condition2[_i99]!=null&&condition2[_i99];//条件2
10490
- if(!bCondition2){if(condition[_i99])//条件1满足
10491
- lineCache.Start={ID:_i99,Value:data[_i99]};//移动第1个点
10492
- continue;}if(bCondition2){bSecondPont=true;lineCache.End={ID:_i99,Value:data2[_i99]};//第2个点
10493
- }}else if(bFirstPoint==true&&bSecondPont==true){var bCondition2=condition2[_i99]!=null&&condition2[_i99];//条件2
10498
+ */this.DRAWLINE=function(condition,data,condition2,data2,expand){var drawData=[];var result={DrawData:drawData,DrawType:'DRAWLINE',Expand:expand};if(condition.length<=0)return result;var count=Math.max(condition.length,condition2.length);var bFirstPoint=false;var bSecondPont=false;var lineCache={Start:{},End:{},List:new Array()};for(var _i101=0;_i101<count;++_i101){drawData[_i101]=null;if(_i101<condition.length&&_i101<condition2.length){if(bFirstPoint==false&&bSecondPont==false){if(condition[_i101]==null||!condition[_i101])continue;bFirstPoint=true;lineCache.Start={ID:_i101,Value:data[_i101]};//第1个点
10499
+ }else if(bFirstPoint==true&&bSecondPont==false){var bCondition2=condition2[_i101]!=null&&condition2[_i101];//条件2
10500
+ if(!bCondition2){if(condition[_i101])//条件1满足
10501
+ lineCache.Start={ID:_i101,Value:data[_i101]};//移动第1个点
10502
+ continue;}if(bCondition2){bSecondPont=true;lineCache.End={ID:_i101,Value:data2[_i101]};//第2个点
10503
+ }}else if(bFirstPoint==true&&bSecondPont==true){var bCondition2=condition2[_i101]!=null&&condition2[_i101];//条件2
10494
10504
  if(bCondition2)//条件2满足
10495
- {lineCache.End={ID:_i99,Value:data2[_i99]};//移动第2个点
10496
- }else if(condition[_i99])//条件1满足
10505
+ {lineCache.End={ID:_i101,Value:data2[_i101]};//移动第2个点
10506
+ }else if(condition[_i101])//条件1满足
10497
10507
  {var lineData=this.CalculateDrawLine(lineCache);//计算2个点的线上 其他点的数值
10498
- for(var _j8 in lineData){var _item9=lineData[_j8];drawData[_item9.ID]=_item9.Value;}if(expand==1)this.CalculateDrawDataExtendLine(drawData,lineCache.Start.ID-2);//右延长线
10499
- bFirstPoint=bSecondPont=false;lineCache={Start:{},End:{}};bFirstPoint=true;bSecondPont=false;lineCache.Start={ID:_i99,Value:data[_i99]};//第1个点
10508
+ for(var _j9 in lineData){var _item9=lineData[_j9];drawData[_item9.ID]=_item9.Value;}if(expand==1)this.CalculateDrawDataExtendLine(drawData,lineCache.Start.ID-2);//右延长线
10509
+ bFirstPoint=bSecondPont=false;lineCache={Start:{},End:{}};bFirstPoint=true;bSecondPont=false;lineCache.Start={ID:_i101,Value:data[_i101]};//第1个点
10500
10510
  }}}//最后一组线
10501
- if(bFirstPoint==true&&bSecondPont==true){var _lineData=this.CalculateDrawLine(lineCache);for(var _j9 in _lineData){var _item10=_lineData[_j9];drawData[_item10.ID]=_item10.Value;}}}if(expand==1)this.CalculateDrawDataExtendLine(drawData);//右延长线
10511
+ if(bFirstPoint==true&&bSecondPont==true){var _lineData=this.CalculateDrawLine(lineCache);for(var _j10 in _lineData){var _item10=_lineData[_j10];drawData[_item10.ID]=_item10.Value;}}}if(expand==1)this.CalculateDrawDataExtendLine(drawData);//右延长线
10502
10512
  return result;};/*
10503
10513
  画出带状线.
10504
10514
  用法: DRAWBAND(VAL1,COLOR1,VAL2,COLOR2),当VAL1>VAL2时,在VAL1和VAL2之间填充COLOR1;当VAL1<VAL2时,填充COLOR2,这里的颜色均使用RGB函数计算得到.
@@ -10511,8 +10521,8 @@ if(color)result.Color[0]=color.toLowerCase();if(color2)result.Color[1]=color2.to
10511
10521
  {for(var i in condition){drawData[i]=null;var condItem=condition[i];if(!condItem)continue;var value=this.GetDataByIndex(data,i);if(!value.Result)continue;var value2=this.GetDataByIndex(data2,i);if(!value2.Result)continue;var item={Value:value.Data,Value2:value2.Data};drawData[i]=item;}}else{if(condition){for(var i=0;i<this.SymbolData.Data.Data.length;++i)//以K线长度为数据长度
10512
10522
  {drawData[i]=null;var value=this.GetDataByIndex(data,i);if(!value.Result)continue;var value2=this.GetDataByIndex(data2,i);if(!value2.Result)continue;var item={Value:value.Data,Value2:value2.Data};drawData[i]=item;}}}return result;};//DRAWKLINE(HIGH,OPEN,LOW,CLOSE).
10513
10523
  //用法:以HIGH为最高价,OPEN为开盘价,LOW为最低,CLOSE收盘画K线
10514
- this.DRAWKLINE=function(high,open,low,close){var drawData=[];var result={DrawData:drawData,DrawType:'DRAWKLINE'};var count=Math.max(high.length,open.length,low.length,close.length);for(var _i100=0;_i100<count;++_i100){var _item11={Open:null,High:null,Low:null,Close:null};if(_i100<high.length&&_i100<open.length&&_i100<low.length&&_i100<close.length){_item11.Open=open[_i100];_item11.High=high[_i100];_item11.Low=low[_i100];_item11.Close=close[_i100];}drawData[_i100]=_item11;}return result;};//满足条件画一根K线
10515
- this.DRAWKLINE_IF=function(condition,high,open,low,close){var drawData=[];var result={DrawData:drawData,DrawType:'DRAWKLINE_IF'};var count=Math.max(condition.length,high.length,open.length,low.length,close.length);for(var _i101=0;_i101<count;++_i101){var _item12={Open:null,High:null,Low:null,Close:null};if(_i101<high.length&&_i101<open.length&&_i101<low.length&&_i101<close.length&&_i101<condition.length){if(condition[_i101]){_item12.Open=open[_i101];_item12.High=high[_i101];_item12.Low=low[_i101];_item12.Close=close[_i101];}}drawData[_i101]=_item12;}return result;};//叠加一个K线
10524
+ this.DRAWKLINE=function(high,open,low,close){var drawData=[];var result={DrawData:drawData,DrawType:'DRAWKLINE'};var count=Math.max(high.length,open.length,low.length,close.length);for(var _i102=0;_i102<count;++_i102){var _item11={Open:null,High:null,Low:null,Close:null};if(_i102<high.length&&_i102<open.length&&_i102<low.length&&_i102<close.length){_item11.Open=open[_i102];_item11.High=high[_i102];_item11.Low=low[_i102];_item11.Close=close[_i102];}drawData[_i102]=_item11;}return result;};//满足条件画一根K线
10525
+ this.DRAWKLINE_IF=function(condition,high,open,low,close){var drawData=[];var result={DrawData:drawData,DrawType:'DRAWKLINE_IF'};var count=Math.max(condition.length,high.length,open.length,low.length,close.length);for(var _i103=0;_i103<count;++_i103){var _item12={Open:null,High:null,Low:null,Close:null};if(_i103<high.length&&_i103<open.length&&_i103<low.length&&_i103<close.length&&_i103<condition.length){if(condition[_i103]){_item12.Open=open[_i103];_item12.High=high[_i103];_item12.Low=low[_i103];_item12.Close=close[_i103];}}drawData[_i103]=_item12;}return result;};//叠加一个K线
10516
10526
  this.DRAWOVERLAYKLINE=function(open,high,low,close){var drawData=[];var result={DrawData:drawData,DrawType:'DRAWOVERLAYKLINE'};var count=Math.max(high.length,open.length,low.length,close.length);var kData=this.SymbolData.Data.Data;for(var i=0;i<count;++i){var item={Open:null,High:null,Low:null,Close:null};var kItem=kData[i];if(i<high.length&&i<open.length&&i<low.length&&i<close.length&&IFrameSplitOperator.IsNumber(open[i])&&IFrameSplitOperator.IsNumber(high[i])&&IFrameSplitOperator.IsNumber(low[i])&&IFrameSplitOperator.IsNumber(low[i])){item.Open=open[i];item.High=high[i];item.Low=low[i];item.Close=close[i];item.Date=kItem.Date;if(IFrameSplitOperator.IsNumber(kItem.Time))item.Time=kItem.Time;}drawData[i]=item;}return result;};/*
10517
10527
  DRAWCOLORKLINE 绘制K线
10518
10528
  用法:
@@ -10536,11 +10546,11 @@ this.DRAWOVERLAYKLINE=function(open,high,low,close){var drawData=[];var result={
10536
10546
  }else if(bFirstPoint==true&&bSecondPont==false){if(!this.IsNumber(data[i]))continue;lineCache.End={ID:parseInt(i),Value:data[i]};//第2个点
10537
10547
  //根据起始点和结束点 计算中间各个点的数据
10538
10548
  var lineData=this.CalculateDrawLine(lineCache);//计算2个点的线上 其他点的数值
10539
- for(var _j10 in lineData){var _item13=lineData[_j10];drawData[_item13.ID]=_item13.Value;}var start={ID:lineCache.End.ID,Value:lineCache.End.Value};lineCache={Start:start,End:{}};}}this.CalculateDrawDataExtendLine(drawData);}else{var _lineCache={Start:{},End:{},List:[]};for(var _i102 in condition){drawData[_i102]=null;if(bFirstPoint==false&&bSecondPont==false){if(condition[_i102]==null||!condition[_i102])continue;if(_i102>=data.length||!this.IsNumber(data[_i102]))continue;bFirstPoint=true;_lineCache.Start={ID:parseInt(_i102),Value:data[_i102]};//第1个点
10540
- }else if(bFirstPoint==true&&bSecondPont==false){if(condition[_i102]==null||!condition[_i102])continue;if(_i102>=data.length||!this.IsNumber(data[_i102]))continue;_lineCache.End={ID:parseInt(_i102),Value:data[_i102]};//第2个点
10549
+ for(var _j11 in lineData){var _item13=lineData[_j11];drawData[_item13.ID]=_item13.Value;}var start={ID:lineCache.End.ID,Value:lineCache.End.Value};lineCache={Start:start,End:{}};}}this.CalculateDrawDataExtendLine(drawData);}else{var _lineCache={Start:{},End:{},List:[]};for(var _i104 in condition){drawData[_i104]=null;if(bFirstPoint==false&&bSecondPont==false){if(condition[_i104]==null||!condition[_i104])continue;if(_i104>=data.length||!this.IsNumber(data[_i104]))continue;bFirstPoint=true;_lineCache.Start={ID:parseInt(_i104),Value:data[_i104]};//第1个点
10550
+ }else if(bFirstPoint==true&&bSecondPont==false){if(condition[_i104]==null||!condition[_i104])continue;if(_i104>=data.length||!this.IsNumber(data[_i104]))continue;_lineCache.End={ID:parseInt(_i104),Value:data[_i104]};//第2个点
10541
10551
  //根据起始点和结束点 计算中间各个点的数据
10542
10552
  var _lineData2=this.CalculateDrawLine(_lineCache);//计算2个点的线上 其他点的数值
10543
- for(var _j11 in _lineData2){var _item14=_lineData2[_j11];drawData[_item14.ID]=_item14.Value;}var _start={ID:_lineCache.End.ID,Value:_lineCache.End.Value};_lineCache={Start:_start,End:{}};}}this.CalculateDrawDataExtendLine(drawData);}}return result;};this.CalculateDrawDataExtendLine=function(drawData,maxCount){if(maxCount<0)return;var x2=null;var count=drawData.length;if(this.IsNumber(maxCount)&&maxCount<count)count=maxCount;for(var i=count-1;i>=0;--i){if(this.IsNumber(drawData[i])){x2=i;break;}}//y3=(y1-y2)*(x3-x1)/(x2-x1)
10553
+ for(var _j12 in _lineData2){var _item14=_lineData2[_j12];drawData[_item14.ID]=_item14.Value;}var _start={ID:_lineCache.End.ID,Value:_lineCache.End.Value};_lineCache={Start:_start,End:{}};}}this.CalculateDrawDataExtendLine(drawData);}}return result;};this.CalculateDrawDataExtendLine=function(drawData,maxCount){if(maxCount<0)return;var x2=null;var count=drawData.length;if(this.IsNumber(maxCount)&&maxCount<count)count=maxCount;for(var i=count-1;i>=0;--i){if(this.IsNumber(drawData[i])){x2=i;break;}}//y3=(y1-y2)*(x3-x1)/(x2-x1)
10544
10554
  if(x2!=null&&x2-1>=0){var x1=x2-1;for(var i=x2+1;i<count;++i){var y1=drawData[x1];var y2=drawData[x2];var y3=(y1-y2)*(i-x1)/(x2-x1);if(y1-y3<0)break;drawData[i]=y1-y3;}}};/*
10545
10555
  画出数字.
10546
10556
  用法:
@@ -10702,8 +10712,8 @@ this.CKLINE=function(color,lineWidth,lineType,lineDotted){var drawData={Color:co
10702
10712
  this.BUY=function(condition,data,iconSymbol,color){var iconInfo={Color:"rgb(0,255,0)",Type:"SVG",Icon:'\uE660'};if(IFrameSplitOperator.IsString(iconSymbol))iconInfo.Icon=iconSymbol;if(color)iconInfo.Color=color;var result=this.CalculateTradeData(condition,data,iconInfo);result.DrawType='BUY';return result;};this.BUYSHORT=function(condition,data,iconSymbol,color){var iconInfo={Color:"rgb(0,255,0)",Type:"SVG",Icon:'\uE660'};if(IFrameSplitOperator.IsString(iconSymbol))iconInfo.Icon=iconSymbol;if(color)iconInfo.Color=color;var result=this.CalculateTradeData(condition,data,iconInfo);result.DrawType='BUYSHORT';return result;};//多头平仓(卖出平仓).
10703
10713
  //参数1为触发条件,参数2为标记放置位置.此函数只适用于特定版本交易模式下.
10704
10714
  //例如: SELL(CROSS(A,B),HIGH),当A上穿B时,在HIGH处画标记,同时突出提示或直接下单,如果HIGH改为DRAWNULL,就不画标记.(分时图上不支持)
10705
- this.SELL=function(condition,data,iconSymbol,color){var iconInfo={Color:"rgb(255,0,0)",Type:"SVG",Icon:'\uE661'};if(IFrameSplitOperator.IsString(iconSymbol))iconInfo.Icon=iconSymbol;if(color)iconInfo.Color=color;var result=this.CalculateTradeData(condition,data,iconInfo);result.DrawType='SELL';return result;};this.SELLSHORT=function(condition,data,iconSymbol,color){var iconInfo={Color:"rgb(255,0,0)",Type:"SVG",Icon:'\uE661'};if(IFrameSplitOperator.IsString(iconSymbol))iconInfo.Icon=iconSymbol;if(color)iconInfo.Color=color;var result=this.CalculateTradeData(condition,data,iconInfo);result.DrawType='SELLSHORT';return result;};this.CalculateTradeData=function(condition,data,IconInfo){var aryData=[];var aryIcon=[];var result={DrawData:{Data:aryData,Icons:aryIcon}};if(Array.isArray(condition)){var isAryPosition=Array.isArray(data);for(var i=0;i<condition.length;++i){aryData[i]=0;aryIcon[i]=null;if(!condition[i])continue;aryData[i]=1;if(isAryPosition)aryIcon[i]={Value:data[i],Type:IconInfo.Type,Color:IconInfo.Color,Icon:IconInfo.Icon};else aryIcon[i]={Value:data,Type:IconInfo.Type,Color:IconInfo.Color,Icon:IconInfo.Icon};}}else if(IFrameSplitOperator.IsNumber(condition)&&condition>0){}return result;};}JSDraw.prototype.CalculateDrawLine=function(lineCache){lineCache.List=[];for(var _i103=lineCache.Start.ID;_i103<=lineCache.End.ID;++_i103){lineCache.List.push(_i103);}var height=Math.abs(lineCache.Start.Value-lineCache.End.Value);var width=lineCache.List.length-1;var result=[];result.push({ID:lineCache.Start.ID,Value:lineCache.Start.Value});//第1个点
10706
- if(lineCache.Start.Value>lineCache.End.Value){for(var _i104=1;_i104<lineCache.List.length-1;++_i104){var value=height*(lineCache.List.length-1-_i104)/width+lineCache.End.Value;result.push({ID:lineCache.List[_i104],Value:value});}}else{for(var _i105=1;_i105<lineCache.List.length-1;++_i105){var value=height*_i105/width+lineCache.Start.Value;result.push({ID:lineCache.List[_i105],Value:value});}}result.push({ID:lineCache.End.ID,Value:lineCache.End.Value});//最后一个点
10715
+ this.SELL=function(condition,data,iconSymbol,color){var iconInfo={Color:"rgb(255,0,0)",Type:"SVG",Icon:'\uE661'};if(IFrameSplitOperator.IsString(iconSymbol))iconInfo.Icon=iconSymbol;if(color)iconInfo.Color=color;var result=this.CalculateTradeData(condition,data,iconInfo);result.DrawType='SELL';return result;};this.SELLSHORT=function(condition,data,iconSymbol,color){var iconInfo={Color:"rgb(255,0,0)",Type:"SVG",Icon:'\uE661'};if(IFrameSplitOperator.IsString(iconSymbol))iconInfo.Icon=iconSymbol;if(color)iconInfo.Color=color;var result=this.CalculateTradeData(condition,data,iconInfo);result.DrawType='SELLSHORT';return result;};this.CalculateTradeData=function(condition,data,IconInfo){var aryData=[];var aryIcon=[];var result={DrawData:{Data:aryData,Icons:aryIcon}};if(Array.isArray(condition)){var isAryPosition=Array.isArray(data);for(var i=0;i<condition.length;++i){aryData[i]=0;aryIcon[i]=null;if(!condition[i])continue;aryData[i]=1;if(isAryPosition)aryIcon[i]={Value:data[i],Type:IconInfo.Type,Color:IconInfo.Color,Icon:IconInfo.Icon};else aryIcon[i]={Value:data,Type:IconInfo.Type,Color:IconInfo.Color,Icon:IconInfo.Icon};}}else if(IFrameSplitOperator.IsNumber(condition)&&condition>0){}return result;};}JSDraw.prototype.CalculateDrawLine=function(lineCache){lineCache.List=[];for(var _i105=lineCache.Start.ID;_i105<=lineCache.End.ID;++_i105){lineCache.List.push(_i105);}var height=Math.abs(lineCache.Start.Value-lineCache.End.Value);var width=lineCache.List.length-1;var result=[];result.push({ID:lineCache.Start.ID,Value:lineCache.Start.Value});//第1个点
10716
+ if(lineCache.Start.Value>lineCache.End.Value){for(var _i106=1;_i106<lineCache.List.length-1;++_i106){var value=height*(lineCache.List.length-1-_i106)/width+lineCache.End.Value;result.push({ID:lineCache.List[_i106],Value:value});}}else{for(var _i107=1;_i107<lineCache.List.length-1;++_i107){var value=height*_i107/width+lineCache.Start.Value;result.push({ID:lineCache.List[_i107],Value:value});}}result.push({ID:lineCache.End.ID,Value:lineCache.End.Value});//最后一个点
10707
10717
  return result;};//是否有是有效的数字
10708
10718
  JSDraw.prototype.IsNumber=function(value){if(value==null)return false;if(isNaN(value))return false;return true;};JSDraw.prototype.IsDrawFunction=function(name){var setFunctionName=new _set2.default(["STICKLINE","DRAWTEXT",'SUPERDRAWTEXT','DRAWLINE','DRAWBAND','DRAWKLINE',"DRAWKLINE1",'DRAWKLINE_IF',"DRAWCOLORKLINE",'PLOYLINE',"DRAWOVERLAYKLINE",'POLYLINE','DRAWNUMBER',"DRAWNUMBER_FIX",'DRAWICON','DRAWCHANNEL','PARTLINE','DRAWTEXT_FIX','DRAWGBK','DRAWTEXT_LINE','DRAWRECTREL',"DRAWTEXTABS","DRAWTEXTREL",'DRAWOVERLAYLINE',"FILLRGN","FILLRGN2","FILLTOPRGN","FILLBOTTOMRGN","FILLVERTICALRGN","FLOATRGN","DRAWSL","DRAWGBK2","DRAWGBK_DIV","VERTLINE","HORLINE","TIPICON","BUY","SELL","SELLSHORT","BUYSHORT"]);if(setFunctionName.has(name))return true;return false;};JSDraw.prototype.RemoveZero=function(strValue){while(strValue.length>0){var index=strValue.length-1;var ch=strValue[index];if(ch=="0"){strValue=strValue.substr(0,index);}else if(ch=="."){strValue=strValue.substr(0,index);break;}else{break;}}return strValue;};//http://www.newone.com.cn/helpcontroller/index?code=zszy_pc
10709
10719
  var DYNAINFO_ARGUMENT_ID={YCLOSE:3,OPEN:4,HIGH:5,LOW:6,CLOSE:7,VOL:8,AMOUNT:10,AMPLITUDE:13,//振幅
@@ -10863,12 +10873,12 @@ if(periodInfo.Period==0)hisData=dayData.Data;else hisData=dayData.GetPeriodData(
10863
10873
  var result;if(curPeriodInfo.Period==periodInfo.Period){result=this.Data;}else{var hisData;if(this.IsApiPeriod){if(!this.PeriodData.has(periodName))return null;hisData=this.PeriodData.get(periodName);}else{if(ChartData.IsMinutePeriod(curPeriodInfo.Period,true)&&ChartData.IsDayPeriod(periodInfo.Period,true)){var dayData=this.PeriodData.get('DAY');//日线
10864
10874
  if(periodInfo.Period==0)hisData=dayData;else hisData=dayData.GetPeriodData(periodInfo.Period);//日线周期
10865
10875
  }else{var bindData=new ChartData();bindData.Data=this.SourceData.Data;bindData.Period=this.Period;bindData.Right=this.Right;if(ChartData.IsDayPeriod(periodInfo.Period,true)&&bindData.Right>0)//日线数据才复权
10866
- {var rightData=bindData.GetRightData(bindData.Right);bindData.Data=rightData;}hisData=bindData.GetPeriodData(periodInfo.Period);}}var data=this.Data.ConverPeriod(hisData,this.Period,periodInfo.Period);var result=new ChartData();result.Data=data;}if(IFrameSplitOperator.IsPlusNumber(n)){var refResult=new ChartData();var data=result.GetRef(n);refResult.Data=data;result=refResult;}var upperSymbol=this.Symbol.toUpperCase();switch(valueName){case'C':case"CLOSE":return result.GetClose();case'O':case"OPEN":return result.GetOpen();case'H':case"HIGH":return result.GetHigh();case'L':case"LOW":return result.GetLow();case'AMO':case"AMOUNT":return result.GetAmount();case'V':case"VOL":if(MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol))return result.GetVol(100);return result.GetVol();case"VOLINSTK":return result.GetPosition();default:return null;}};this.GetCurrBarsCount=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;var lCount=this.Data.Data.length;for(var _i106=lCount-1;_i106>=0;--_i106){result.push(_i106+1);}//数据从0开始
10876
+ {var rightData=bindData.GetRightData(bindData.Right);bindData.Data=rightData;}hisData=bindData.GetPeriodData(periodInfo.Period);}}var data=this.Data.ConverPeriod(hisData,this.Period,periodInfo.Period);var result=new ChartData();result.Data=data;}if(IFrameSplitOperator.IsPlusNumber(n)){var refResult=new ChartData();var data=result.GetRef(n);refResult.Data=data;result=refResult;}var upperSymbol=this.Symbol.toUpperCase();switch(valueName){case'C':case"CLOSE":return result.GetClose();case'O':case"OPEN":return result.GetOpen();case'H':case"HIGH":return result.GetHigh();case'L':case"LOW":return result.GetLow();case'AMO':case"AMOUNT":return result.GetAmount();case'V':case"VOL":if(MARKET_SUFFIX_NAME.IsSHSZ(upperSymbol))return result.GetVol(100);return result.GetVol();case"VOLINSTK":return result.GetPosition();default:return null;}};this.GetCurrBarsCount=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;var lCount=this.Data.Data.length;for(var _i108=lCount-1;_i108>=0;--_i108){result.push(_i108+1);}//数据从0开始
10867
10877
  return result;};//BARPOS 返回从第一根K线开始到当前的周期数。
10868
10878
  //注:
10869
10879
  //1、BARPOS返回本地已有的K线根数,从本机上存在的数据开始算起。
10870
10880
  //2、本机已有的第一根K线上返回值为1。
10871
- this.GetBarPos=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;var lCount=this.Data.Data.length;for(var _i107=0;_i107<lCount;++_i107){result.push(_i107+1);}return result;};this.GetTotalTradeMinuteCount=function(){var data=g_MinuteCoordinateData.GetCoordinateData(this.Symbol);if(data&&data.Count>0)return data.Count-1;return 242;};this.GetTotalBarsCount=function(){var lCount=this.Data.Data.length;return lCount;};this.GetIsLastBar=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;var lCount=this.Data.Data.length;for(var _i108=0;_i108<lCount;++_i108){if(_i108==lCount-1)result.push(1);else result.push(0);}return result;};//BARSTATUS返回数据位置信息,1表示第一根K线,2表示最后一个数据,0表示中间位置.
10881
+ this.GetBarPos=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;var lCount=this.Data.Data.length;for(var _i109=0;_i109<lCount;++_i109){result.push(_i109+1);}return result;};this.GetTotalTradeMinuteCount=function(){var data=g_MinuteCoordinateData.GetCoordinateData(this.Symbol);if(data&&data.Count>0)return data.Count-1;return 242;};this.GetTotalBarsCount=function(){var lCount=this.Data.Data.length;return lCount;};this.GetIsLastBar=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;var lCount=this.Data.Data.length;for(var _i110=0;_i110<lCount;++_i110){if(_i110==lCount-1)result.push(1);else result.push(0);}return result;};//BARSTATUS返回数据位置信息,1表示第一根K线,2表示最后一个数据,0表示中间位置.
10872
10882
  //例如:BARSTATUS=2表示当天是该数据的最后一个周期.
10873
10883
  this.GetBarStatus=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;var lCount=this.Data.Data.length;for(var i=0;i<lCount;++i){if(i==0)result[i]=1;else if(i==lCount-1)result[i]=2;else result[i]=0;}return result;};//求真实波幅, (最高-最低),(最高-昨收),(最低-昨收)三者绝对值中的最大值.
10874
10884
  //用法:
@@ -10889,7 +10899,7 @@ case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_SELL_REPAY://卖出信息-偿还量
10889
10899
  case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_SELL_NET://卖出信息-融券净卖出
10890
10900
  fieldList.push("margin.sell");break;}//请求数据
10891
10901
  JSNetwork.HttpRequest({url:this.StockHistoryDayApiUrl,data:{"field":fieldList,"symbol":[this.Symbol],"orderfield":"date"},type:"post",dataType:"json",async:true,success:function success(recvData){self.RecvMarginData(recvData,jobID);self.Execute.RunNextJob();}});};this.RecvMarginData=function(data,jobID){JSConsole.Complier.Log(data);if(!data.stock||data.stock.length!=1)return;var stock=data.stock[0];var aryData=new Array();var aryData2=[],aryData3=[],aryData4=[];//其他3个数据
10892
- for(var _i109 in stock.stockday){var item=stock.stockday[_i109];var marginData=item.margin;if(!marginData)continue;var indexData=new SingleData();indexData.Date=item.date;switch(jobID){case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_BALANCE:if(!this.IsNumber(marginData.balance))continue;indexData.Value=marginData.balance;//融资融券余额
10902
+ for(var _i111 in stock.stockday){var item=stock.stockday[_i111];var marginData=item.margin;if(!marginData)continue;var indexData=new SingleData();indexData.Date=item.date;switch(jobID){case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_BALANCE:if(!this.IsNumber(marginData.balance))continue;indexData.Value=marginData.balance;//融资融券余额
10893
10903
  aryData.push(indexData);break;case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_RATE:if(!this.IsNumber(marginData.rate))continue;indexData.Value=marginData.rate;//融资占比
10894
10904
  aryData.push(indexData);break;case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_BUY_BALANCE://买入信息-融资余额
10895
10905
  case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_BUY_AMOUNT://买入信息-买入额
@@ -10899,9 +10909,9 @@ var buyData=marginData.buy;if(!buyData)continue;if(!this.IsNumber(buyData.balanc
10899
10909
  case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_SELL_VOLUME://卖出信息-卖出量
10900
10910
  case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_SELL_REPAY://卖出信息-偿还量
10901
10911
  case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_SELL_NET://卖出信息-融券净卖出
10902
- var sellData=marginData.sell;if(!sellData)continue;if(!this.IsNumber(sellData.balance)||!this.IsNumber(sellData.volume)||!this.IsNumber(sellData.repay)||!this.IsNumber(sellData.net))continue;indexData.Value=buyData.balance;var indexData2=new SingleData();indexData2.Date=item.date;indexData2.Value=buyData.volume;var indexData3=new SingleData();indexData3.Date=item.date;indexData3.Value=buyData.repay;var indexData4=new SingleData();indexData4.Date=item.date;indexData4.Value=buyData.net;aryData.push(indexData);aryData2.push(indexData2);aryData3.push(indexData3);aryData4.push(indexData4);break;default:continue;}}var allData=[];if(jobID===JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_BALANCE||jobID===JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_RATE){allData.push({JobID:jobID,Data:aryData});}else if(jobID===JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_BUY_BALANCE||jobID===JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_BUY_AMOUNT||jobID===JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_BUY_REPAY||jobID===JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_BUY_NET){allData.push({JobID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_BUY_BALANCE,Data:aryData});allData.push({JobID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_BUY_AMOUNT,Data:aryData2});allData.push({JobID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_BUY_REPAY,Data:aryData3});allData.push({JobID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_BUY_NET,Data:aryData4});}else if(jobID===JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_SELL_BALANCE||jobID===JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_SELL_VOLUME||jobID===JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_SELL_REPAY||jobID===JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_SELL_NET){allData.push({JobID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_SELL_BALANCE,Data:aryData});allData.push({JobID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_SELL_VOLUME,Data:aryData2});allData.push({JobID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_SELL_REPAY,Data:aryData3});allData.push({JobID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_SELL_NET,Data:aryData4});}for(var _i110 in allData){var aryFixedData=this.SourceData.GetFittingData(allData[_i110].Data);var bindData=new ChartData();bindData.Data=aryFixedData;bindData.Period=this.Period;//周期
10912
+ var sellData=marginData.sell;if(!sellData)continue;if(!this.IsNumber(sellData.balance)||!this.IsNumber(sellData.volume)||!this.IsNumber(sellData.repay)||!this.IsNumber(sellData.net))continue;indexData.Value=buyData.balance;var indexData2=new SingleData();indexData2.Date=item.date;indexData2.Value=buyData.volume;var indexData3=new SingleData();indexData3.Date=item.date;indexData3.Value=buyData.repay;var indexData4=new SingleData();indexData4.Date=item.date;indexData4.Value=buyData.net;aryData.push(indexData);aryData2.push(indexData2);aryData3.push(indexData3);aryData4.push(indexData4);break;default:continue;}}var allData=[];if(jobID===JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_BALANCE||jobID===JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_RATE){allData.push({JobID:jobID,Data:aryData});}else if(jobID===JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_BUY_BALANCE||jobID===JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_BUY_AMOUNT||jobID===JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_BUY_REPAY||jobID===JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_BUY_NET){allData.push({JobID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_BUY_BALANCE,Data:aryData});allData.push({JobID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_BUY_AMOUNT,Data:aryData2});allData.push({JobID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_BUY_REPAY,Data:aryData3});allData.push({JobID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_BUY_NET,Data:aryData4});}else if(jobID===JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_SELL_BALANCE||jobID===JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_SELL_VOLUME||jobID===JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_SELL_REPAY||jobID===JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_SELL_NET){allData.push({JobID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_SELL_BALANCE,Data:aryData});allData.push({JobID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_SELL_VOLUME,Data:aryData2});allData.push({JobID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_SELL_REPAY,Data:aryData3});allData.push({JobID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_SELL_NET,Data:aryData4});}for(var _i112 in allData){var aryFixedData=this.SourceData.GetFittingData(allData[_i112].Data);var bindData=new ChartData();bindData.Data=aryFixedData;bindData.Period=this.Period;//周期
10903
10913
  if(bindData.Period>0)//周期数据
10904
- {var periodData=bindData.GetPeriodSingleData(bindData.Period);bindData.Data=periodData;}var _data2=bindData.GetValue();this.MarginData.set(allData[_i110].JobID,_data2);}};this.GetNewsAnalysisCacheData=function(id,node){var jobID=JS_EXECUTE_JOB_ID.GetNewsAnalysisID(id);if(!jobID)this.Execute.ThrowUnexpectedNode(node,'不支持NEWS('+id+')');if(this.NewsAnalysisData.has(jobID))return this.NewsAnalysisData.get(jobID);return[];};this.GetHKToSHSZData=function(job){var args=job.Args;var code=this.Symbol;if(args.length>0){var item=args[0];if(item.Type==Syntax.Literal){code=item.Value;}else if(item.Type==Syntax.Identifier)//变量 !!只支持默认的变量值
10914
+ {var periodData=bindData.GetPeriodSingleData(bindData.Period);bindData.Data=periodData;}var _data2=bindData.GetValue();this.MarginData.set(allData[_i112].JobID,_data2);}};this.GetNewsAnalysisCacheData=function(id,node){var jobID=JS_EXECUTE_JOB_ID.GetNewsAnalysisID(id);if(!jobID)this.Execute.ThrowUnexpectedNode(node,'不支持NEWS('+id+')');if(this.NewsAnalysisData.has(jobID))return this.NewsAnalysisData.get(jobID);return[];};this.GetHKToSHSZData=function(job){var args=job.Args;var code=this.Symbol;if(args.length>0){var item=args[0];if(item.Type==Syntax.Literal){code=item.Value;}else if(item.Type==Syntax.Identifier)//变量 !!只支持默认的变量值
10905
10915
  {var isFind=false;for(var j in this.Arguments){var argItem=this.Arguments[j];if(argItem.Name==item.Name){code=argItem.Value;isFind=true;break;}}if(!isFind){var token=job.Token;this.Execute.ErrorHandler.ThrowError(token.Index,token.Line,0,'HK2SHSZ() Error: can\'t read '+item.Name);}}}job.Symbol=code;if(code==1||code==2||code==3)//下载全市场数据
10906
10916
  this.GetHKToSHSZMarketData(code,job);else this.GetHKToSHSZStockData(code,job);//下载个股数据
10907
10917
  };this.GetHKToSHSZStockData=function(symbol,job){if(this.HKToSHSZData.has(symbol))return this.Execute.RunNextJob();var upperSymbol=symbol.toLowerCase();//代码小写
@@ -10914,9 +10924,9 @@ if(bindData.Period>0)//周期数据
10914
10924
  JSNetwork.HttpRequest({url:url,data:{"symbol":this.Symbol,'daycount':this.MaxRequestMinuteDayCount},type:"post",dataType:"json",async:true,success:function success(recvData){self.RecvMulitMinuteHKToSHSZData(recvData,job);self.Execute.RunNextJob();}});}else{//请求数据
10915
10925
  JSNetwork.HttpRequest({url:url,type:"get",dataType:"json",async:true,success:function success(recvData){if(dataType==0)self.RecvHKToSHSZData(recvData,job);else if(dataType==1)self.RecvMinuteHKToSHSZData(recvData,job);self.Execute.RunNextJob();}});}};this.RecvMinuteHKToSHSZData=function(data,job){var arySHSZData=[],arySHData=[],arySZData=[];if(this.IsBeforeData){for(i in this.SourceData.Data){var item=this.SourceData.Data[i];if(item.Before){arySHSZData.push(null);arySHData.push(null);arySZData.push(null);}else{break;}}for(var i=0;i<data.time.length;++i){var time=data.time[i];if(time===925)continue;var SHValue=data.hk2sh[i];var SZValue=data.hk2sz[i];var total=SHValue+SZValue;arySHSZData.push(total);arySHData.push(SHValue);arySZData.push(SZValue);}}else{for(var i=0;i<data.time.length;++i){var time=data.time[i];var SHValue=data.hk2sh[i];var SZValue=data.hk2sz[i];var total=SHValue+SZValue;arySHSZData.push(total);arySHData.push(SHValue);arySZData.push(SZValue);}}var allData=[{Data:arySHSZData,ID:1},{Data:arySHData,ID:2},{Data:arySZData,ID:3}];for(var i in allData){var item=allData[i];this.HKToSHSZData.set(item.ID,item.Data);}};this.RecvHKToSHSZData=function(data,job){var arySHSZData=[],arySHData=[],arySZData=[];for(var i=0;i<data.date.length;++i){var date=data.date[i];var SHValue=data.hk2sh[i]*1000000;//单位是百万
10916
10926
  var SZValue=data.hk2sz[i]*1000000;//单位是百万
10917
- var total=SHValue+SZValue;var itemSHSZData=new SingleData();itemSHSZData.Date=date;itemSHSZData.Value=total;var itemSHData=new SingleData();itemSHData.Date=date;itemSHData.Value=SHValue;var itemSZData=new SingleData();itemSZData.Date=date;itemSZData.Value=SZValue;arySHSZData.push(itemSHSZData);arySHData.push(itemSHData);arySZData.push(itemSZData);}var allData=[{Data:arySHSZData,ID:1},{Data:arySHData,ID:2},{Data:arySZData,ID:3}];for(var _i111 in allData){var aryFixedData=this.Data.GetFittingData(allData[_i111].Data);var bindData=new ChartData();bindData.Data=aryFixedData;bindData.Period=this.Period;//周期
10927
+ var total=SHValue+SZValue;var itemSHSZData=new SingleData();itemSHSZData.Date=date;itemSHSZData.Value=total;var itemSHData=new SingleData();itemSHData.Date=date;itemSHData.Value=SHValue;var itemSZData=new SingleData();itemSZData.Date=date;itemSZData.Value=SZValue;arySHSZData.push(itemSHSZData);arySHData.push(itemSHData);arySZData.push(itemSZData);}var allData=[{Data:arySHSZData,ID:1},{Data:arySHData,ID:2},{Data:arySZData,ID:3}];for(var _i113 in allData){var aryFixedData=this.Data.GetFittingData(allData[_i113].Data);var bindData=new ChartData();bindData.Data=aryFixedData;bindData.Period=this.Period;//周期
10918
10928
  if(bindData.Period>0)//周期数据
10919
- {var periodData=bindData.GetPeriodSingleData(bindData.Period);bindData.Data=periodData;}var _data3=bindData.GetValue();this.HKToSHSZData.set(allData[_i111].ID,_data3);}};this.RecvMulitMinuteHKToSHSZData=function(data,job)//多日分时图北上资金
10929
+ {var periodData=bindData.GetPeriodSingleData(bindData.Period);bindData.Data=periodData;}var _data3=bindData.GetValue();this.HKToSHSZData.set(allData[_i113].ID,_data3);}};this.RecvMulitMinuteHKToSHSZData=function(data,job)//多日分时图北上资金
10920
10930
  {if(!data.data||data.data.length<=0)return;var arySHSZData=[],arySHData=[],arySZData=[];for(var i=0,j=0;i<this.Data.Data.length&&j<data.data.length;){arySHSZData[i]=null;arySHData[i]=null;arySZData[i]=null;var item=this.Data.Data[i];var dateTime=item.DateTime;//日期加时间
10921
10931
  if(!dateTime){++i;continue;}var aryValue=dateTime.split(' ');if(aryValue.length!=2){++i;continue;}var date=parseInt(aryValue[0]);var day=data.data[j];if(!day.minute||day.minute.length<=0){++j;continue;}if(day.date>date){++i;continue;}else if(day.date<date){++j;continue;}for(var k in day.minute){var timeItem=day.minute[k];var SHValue=timeItem[1];var SZValue=timeItem[2];var total=SHValue+SZValue;arySHSZData[i]=total;arySHData[i]=SHValue;arySZData[i]=SZValue;++i;}++j;}var allData=[{Data:arySHSZData,ID:1},{Data:arySHData,ID:2},{Data:arySZData,ID:3}];for(var i in allData){var item=allData[i];this.HKToSHSZData.set(item.ID,item.Data);}};//北上资金函数
10922
10932
  this.GetHKToSHSZCacheData=function(code,node){//if (!this.HKToSHSZData.has(code)) this.Execute.ThrowUnexpectedNode(node,`不支持HK2SHSZ(${code})`);
@@ -11055,8 +11065,8 @@ if(list[i].length>up)item.Up=list[i][up];if(list[i].length>down)item.Down=list[i
11055
11065
  aryDayData.push(item);}return aryDayData;};this.JsonDataToMinuteHistoryData=function(data){var list=data.data;var aryDayData=new Array();var date=0,yclose=1,open=2,high=3,low=4,close=5,vol=6,amount=7,time=8;for(var i=0;i<list.length;++i){var _item15=new HistoryData();_item15.Date=list[i][date];_item15.Open=list[i][open];_item15.YClose=list[i][yclose];_item15.Close=list[i][close];_item15.High=list[i][high];_item15.Low=list[i][low];_item15.Vol=list[i][vol];//原始单位股
11056
11066
  _item15.Amount=list[i][amount];_item15.Time=list[i][time];// if (isNaN(item.Open) || item.Open<=0) continue; //停牌的数据剔除
11057
11067
  aryDayData.push(_item15);}// 无效数据处理
11058
- for(var _i112=0;_i112<aryDayData.length;++_i112){var minData=aryDayData[_i112];if(minData==null)coninue;if(isNaN(minData.Open)||minData.Open<=0||isNaN(minData.High)||minData.High<=0||isNaN(minData.Low)||minData.Low<=0||isNaN(minData.Close)||minData.Close<=0||isNaN(minData.YClose)||minData.YClose<=0){if(_i112==0){if(minData.YClose>0){minData.Open=minData.YClose;minData.High=minData.YClose;minData.Low=minData.YClose;minData.Close=minData.YClose;}}else// 用前一个有效数据填充
11059
- {for(var _j12=_i112-1;_j12>=0;--_j12){var minData2=aryDayData[_j12];if(minData2==null)coninue;if(minData2.Open>0&&minData2.High>0&&minData2.Low>0&&minData2.Close>0){if(minData.YClose<=0)minData.YClose=minData2.Close;minData.Open=minData2.Open;minData.High=minData2.High;minData.Low=minData2.Low;minData.Close=minData2.Close;break;}}}}}return aryDayData;};//API 返回数据 转化为array[]
11068
+ for(var _i114=0;_i114<aryDayData.length;++_i114){var minData=aryDayData[_i114];if(minData==null)coninue;if(isNaN(minData.Open)||minData.Open<=0||isNaN(minData.High)||minData.High<=0||isNaN(minData.Low)||minData.Low<=0||isNaN(minData.Close)||minData.Close<=0||isNaN(minData.YClose)||minData.YClose<=0){if(_i114==0){if(minData.YClose>0){minData.Open=minData.YClose;minData.High=minData.YClose;minData.Low=minData.YClose;minData.Close=minData.YClose;}}else// 用前一个有效数据填充
11069
+ {for(var _j13=_i114-1;_j13>=0;--_j13){var minData2=aryDayData[_j13];if(minData2==null)coninue;if(minData2.Open>0&&minData2.High>0&&minData2.Low>0&&minData2.Close>0){if(minData.YClose<=0)minData.YClose=minData2.Close;minData.Open=minData2.Open;minData.High=minData2.High;minData.Low=minData2.Low;minData.Close=minData2.Close;break;}}}}}return aryDayData;};//API 返回数据 转化为array[]
11060
11070
  this.JsonDataToMinuteData=function(data){var aryMinuteData=new Array();for(var i in data.stock[0].minute){var jsData=data.stock[0].minute[i];var item=new MinuteData();item.Close=jsData.price;item.Open=jsData.open;item.High=jsData.high;item.Low=jsData.low;item.Vol=jsData.vol;//股
11061
11071
  item.Amount=jsData.amount;if(i==0)//第1个数据 写死9:25
11062
11072
  item.DateTime=data.stock[0].date.toString()+" 0925";else item.DateTime=data.stock[0].date.toString()+" "+jsData.time.toString();item.Date=data.stock[0].date;item.Time=jsData.time;item.Increase=jsData.increase;item.Risefall=jsData.risefall;item.AvPrice=jsData.avprice;aryMinuteData[i]=item;}return aryMinuteData;};//多日日线数据API 转化成array[];
@@ -11074,23 +11084,23 @@ if(item.Open<=0)item.Open=null;if(item.Close<=0)item.Close=null;if(item.AvPrice<
11074
11084
  this.CODELIKE=function(value){if(this.Symbol&&this.Symbol.indexOf(value)==0)return 1;return 0;};this.NAMELIKE=function(value){if(this.Name&&this.Name.indexOf(value)==0)return 1;return 0;};/*
11075
11085
  SETCODE 市场类型
11076
11086
  0:深圳 1:上海,47:中金所期货 28:郑州商品 29:大连商品 30:上海商品,27:香港指数 31:香港主板,48:香港创业板...
11077
- */this.SETCODE=function(){if(this.Symbol.indexOf('.sh'))return 1;if(this.Symbol.indexOf('.sz'))return 0;return 0;};this.GetSymbol=function(){return this.Symbol;};this.GetName=function(){return this.Name;};this.DATE=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;for(var _i113 in this.Data.Data){var item=this.Data.Data[_i113];result[_i113]=item.Date-19000000;}return result;};this.YEAR=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;for(var _i114 in this.Data.Data){var item=this.Data.Data[_i114];if(this.IsNumber(item.Date))result[_i114]=parseInt(item.Date/10000);else result[_i114]=null;}return result;};this.DAY=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;for(var _i115 in this.Data.Data){var item=this.Data.Data[_i115];if(this.IsNumber(item.Date))result[_i115]=parseInt(item.Date%100);else result[_i115]=null;}return result;};this.MONTH=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;for(var _i116 in this.Data.Data){var item=this.Data.Data[_i116];if(this.IsNumber(item.Date))result[_i116]=parseInt(item.Date%10000/100);else result[_i116]=null;}return result;};this.TIME=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;for(var _i117=0;_i117<this.Data.Data.length;++_i117){var item=this.Data.Data[_i117];if(this.IsNumber(item.Time))result[_i117]=item.Time;else result[_i117]=0;}return result;};/*
11087
+ */this.SETCODE=function(){if(this.Symbol.indexOf('.sh'))return 1;if(this.Symbol.indexOf('.sz'))return 0;return 0;};this.GetSymbol=function(){return this.Symbol;};this.GetName=function(){return this.Name;};this.DATE=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;for(var _i115 in this.Data.Data){var item=this.Data.Data[_i115];result[_i115]=item.Date-19000000;}return result;};this.YEAR=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;for(var _i116 in this.Data.Data){var item=this.Data.Data[_i116];if(this.IsNumber(item.Date))result[_i116]=parseInt(item.Date/10000);else result[_i116]=null;}return result;};this.DAY=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;for(var _i117 in this.Data.Data){var item=this.Data.Data[_i117];if(this.IsNumber(item.Date))result[_i117]=parseInt(item.Date%100);else result[_i117]=null;}return result;};this.MONTH=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;for(var _i118 in this.Data.Data){var item=this.Data.Data[_i118];if(this.IsNumber(item.Date))result[_i118]=parseInt(item.Date%10000/100);else result[_i118]=null;}return result;};this.TIME=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;for(var _i119=0;_i119<this.Data.Data.length;++_i119){var item=this.Data.Data[_i119];if(this.IsNumber(item.Time))result[_i119]=item.Time;else result[_i119]=0;}return result;};/*
11078
11088
  取得该周期的时分秒,适用于日线以下周期.
11079
11089
  用法: TIME2
11080
11090
  函数返回有效值范围为(000000-235959)
11081
- */this.TIME2=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;for(var _i118=0;_i118<this.Data.Data.length;++_i118){var item=this.Data.Data[_i118];if(this.IsNumber(item.Time))result[_i118]=item.Time*100;else result[_i118]=0;}return result;};this.DateTime=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;var isKLineMinute=ChartData.IsMinutePeriod(this.Period,true);for(var i=0;i<this.Data.Data.length;++i){var item=this.Data.Data[i];if(isKLineMinute){result[i]=item.Date*10000+item.Time;}else{result[i]=item.Date;}}return result;};//星期 1-7
11082
- this.WEEK=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;var tempDate=new Date();for(var _i119 in this.Data.Data){var item=this.Data.Data[_i119];result[_i119]=null;if(!this.IsNumber(item.Date))continue;var year=parseInt(item.Date/10000);var month=parseInt(item.Date%10000/100);var day=item.Date%100;tempDate.setFullYear(year,month-1,day);result[_i119]=tempDate.getDay();}return result;};/*
11091
+ */this.TIME2=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;for(var _i120=0;_i120<this.Data.Data.length;++_i120){var item=this.Data.Data[_i120];if(this.IsNumber(item.Time))result[_i120]=item.Time*100;else result[_i120]=0;}return result;};this.DateTime=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;var isKLineMinute=ChartData.IsMinutePeriod(this.Period,true);for(var i=0;i<this.Data.Data.length;++i){var item=this.Data.Data[i];if(isKLineMinute){result[i]=item.Date*10000+item.Time;}else{result[i]=item.Date;}}return result;};//星期 1-7
11092
+ this.WEEK=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;var tempDate=new Date();for(var _i121 in this.Data.Data){var item=this.Data.Data[_i121];result[_i121]=null;if(!this.IsNumber(item.Date))continue;var year=parseInt(item.Date/10000);var month=parseInt(item.Date%10000/100);var day=item.Date%100;tempDate.setFullYear(year,month-1,day);result[_i121]=tempDate.getDay();}return result;};/*
11083
11093
  取得该周期的日期离今天的天数.
11084
11094
  用法: DAYSTOTODAY
11085
- */this.DAYSTOTODAY=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;var nowDate=new Date();var endDate=new Date(nowDate.getFullYear(),nowDate.getMonth(),nowDate.getDate());for(var _i120=0;_i120<this.Data.Data.length;++_i120){var item=this.Data.Data[_i120];result[_i120]=null;if(!this.IsNumber(item.Date))continue;var year=parseInt(item.Date/10000);var month=parseInt(item.Date%10000/100);var day=item.Date%100;var beginDate=new Date(year,month-1,day);var diffDays=Math.ceil((endDate-beginDate)/(24*60*60*1000));result[_i120]=diffDays;}return result;};/*
11095
+ */this.DAYSTOTODAY=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;var nowDate=new Date();var endDate=new Date(nowDate.getFullYear(),nowDate.getMonth(),nowDate.getDate());for(var _i122=0;_i122<this.Data.Data.length;++_i122){var item=this.Data.Data[_i122];result[_i122]=null;if(!this.IsNumber(item.Date))continue;var year=parseInt(item.Date/10000);var month=parseInt(item.Date%10000/100);var day=item.Date%100;var beginDate=new Date(year,month-1,day);var diffDays=Math.ceil((endDate-beginDate)/(24*60*60*1000));result[_i122]=diffDays;}return result;};/*
11086
11096
  取得该周是年内第几个周.
11087
11097
  用法:WEEKOFYEAR
11088
- */this.WEEKOFYEAR=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;for(var _i121 in this.Data.Data){var item=this.Data.Data[_i121];result[_i121]=null;if(!this.IsNumber(item.Date))continue;var year=parseInt(item.Date/10000);var month=parseInt(item.Date%10000/100);var day=item.Date%100;var endDate=new Date(year,month-1,day);var beginDate=new Date(year,0,1);var diffDays=Math.ceil((endDate-beginDate)/(24*60*60*1000));diffDays+=beginDate.getDay()+1-1;var week=Math.ceil(diffDays/7);var value=week;result[_i121]=value;}return result;};this.GetYearWeek=function(endDate){var beginDate=new Date(endDate.getFullYear(),0,1);//星期从0-6,0代表星期天,6代表星期六
11098
+ */this.WEEKOFYEAR=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;for(var _i123 in this.Data.Data){var item=this.Data.Data[_i123];result[_i123]=null;if(!this.IsNumber(item.Date))continue;var year=parseInt(item.Date/10000);var month=parseInt(item.Date%10000/100);var day=item.Date%100;var endDate=new Date(year,month-1,day);var beginDate=new Date(year,0,1);var diffDays=Math.ceil((endDate-beginDate)/(24*60*60*1000));diffDays+=beginDate.getDay()+1-1;var week=Math.ceil(diffDays/7);var value=week;result[_i123]=value;}return result;};this.GetYearWeek=function(endDate){var beginDate=new Date(endDate.getFullYear(),0,1);//星期从0-6,0代表星期天,6代表星期六
11089
11099
  var endWeek=endDate.getDay();if(endWeek==0)endWeek=7;var beginWeek=beginDate.getDay();if(beginWeek==0)beginWeek=7;//计算两个日期的天数差
11090
- var millisDiff=endDate.getTime()-beginDate.getTime();var dayDiff=Math.floor((millisDiff+(beginWeek-endWeek)*(24*60*60*1000))/86400000);return Math.ceil(dayDiff/7)+1;};this.REFDATE=function(data,date){var result=null;var findDate=null;if(Array.isArray(date)){if(date.length>0)findDate=date[date.length-1];}else if(this.IsNumber(date)){findDate=date;}if(findDate==null)return null;if(findDate<5000000)findDate+=19000000;var index=null;for(var _i122 in this.Data.Data)//查找日期对应的索引
11091
- {if(this.Data.Data[_i122].Date==findDate){index=parseInt(_i122);break;}}if(index==null||index>=data.length)return null;return data[index];};//用法:结果从0到11,依次分别是1/5/15/30/60分钟,日/周/月,多分钟,多日,季,年
11100
+ var millisDiff=endDate.getTime()-beginDate.getTime();var dayDiff=Math.floor((millisDiff+(beginWeek-endWeek)*(24*60*60*1000))/86400000);return Math.ceil(dayDiff/7)+1;};this.REFDATE=function(data,date){var result=null;var findDate=null;if(Array.isArray(date)){if(date.length>0)findDate=date[date.length-1];}else if(this.IsNumber(date)){findDate=date;}if(findDate==null)return null;if(findDate<5000000)findDate+=19000000;var index=null;for(var _i124 in this.Data.Data)//查找日期对应的索引
11101
+ {if(this.Data.Data[_i124].Date==findDate){index=parseInt(_i124);break;}}if(index==null||index>=data.length)return null;return data[index];};//用法:结果从0到11,依次分别是1/5/15/30/60分钟,日/周/月,多分钟,多日,季,年
11092
11102
  this.PERIOD=function(){//Period周期 0=日线 1=周线 2=月线 3=年线 9=季线 4=1分钟 5=5分钟 6=15分钟 7=30分钟 8=60分钟
11093
- var PERIOD_MAP=[5,6,7,11,0,1,2,3,4,5,9];if(this.Period>=0&&this.Period<=PERIOD_MAP.length-1)return PERIOD_MAP[this.Period];return this.Period;};this.GetDrawNull=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;for(var _i123 in this.Data.Data){result[_i123]=null;}return result;};this.HOUR=function(){var result=[];if(!this.Data||!this.Data.Data||!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data))return result;for(var i=0;i<this.Data.Data.length;++i){var item=this.Data.Data[i];result[i]=0;if(IFrameSplitOperator.IsNumber(item.Time))result[i]=parseInt(item.Time/100);}return result;};this.MINUTE=function(){var result=[];if(!this.Data||!this.Data.Data||!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data))return result;for(var i=0;i<this.Data.Data.length;++i){var item=this.Data.Data[i];result[i]=0;if(IFrameSplitOperator.IsNumber(item.Time))result[i]=item.Time%100;}return result;};/*
11103
+ var PERIOD_MAP=[5,6,7,11,0,1,2,3,4,5,9];if(this.Period>=0&&this.Period<=PERIOD_MAP.length-1)return PERIOD_MAP[this.Period];return this.Period;};this.GetDrawNull=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;for(var _i125 in this.Data.Data){result[_i125]=null;}return result;};this.HOUR=function(){var result=[];if(!this.Data||!this.Data.Data||!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data))return result;for(var i=0;i<this.Data.Data.length;++i){var item=this.Data.Data[i];result[i]=0;if(IFrameSplitOperator.IsNumber(item.Time))result[i]=parseInt(item.Time/100);}return result;};this.MINUTE=function(){var result=[];if(!this.Data||!this.Data.Data||!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data))return result;for(var i=0;i<this.Data.Data.length;++i){var item=this.Data.Data[i];result[i]=0;if(IFrameSplitOperator.IsNumber(item.Time))result[i]=item.Time%100;}return result;};/*
11094
11104
  飞狐函数 SYSPARAM
11095
11105
  SYSPARAM(1)画面上光标位置(K线序号)
11096
11106
  SYSPARAM(2)主图可见K线最初位置
@@ -11099,7 +11109,7 @@ var PERIOD_MAP=[5,6,7,11,0,1,2,3,4,5,9];if(this.Period>=0&&this.Period<=PERIOD_M
11099
11109
  SYSPARAM(5)主图可见K线最低价,注意:该函数仅K线图形分析且打开十字光标时有效,否则返回值不确定
11100
11110
  SYSPARAM(6)画面上光标数值,注意:该函数仅K线图形分析且打开十字光标时有效,否则返回值不确定
11101
11111
  */this.SysParam=function(id,jsExec){if(!this.DrawInfo)return[];if(id==2){jsExec.IsUsePageData=true;if(IFrameSplitOperator.IsNumber(this.DrawInfo.Start))return this.DrawInfo.Start+1;}else if(id==3){jsExec.IsUsePageData=true;if(IFrameSplitOperator.IsNumber(this.DrawInfo.End))return this.DrawInfo.End+1;}else if(id==4){jsExec.IsUsePageData=true;if(!IFrameSplitOperator.IsNumber(this.DrawInfo.End)||!IFrameSplitOperator.IsNumber(this.DrawInfo.Start))return[];if(!this.Data||!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data))return[];var high=null;for(var i=this.DrawInfo.Start;i<=this.DrawInfo.End&&i<this.Data.Data.length;++i){var item=this.Data.Data[i];if(!IFrameSplitOperator.IsNumber(item.High))continue;if(high==null)high=item.High;else if(high<item.High)high=item.High;}return high;}else if(id==5){jsExec.IsUsePageData=true;if(!IFrameSplitOperator.IsNumber(this.DrawInfo.End)||!IFrameSplitOperator.IsNumber(this.DrawInfo.Start))return[];if(!this.Data||!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data))return[];var low=null;for(var i=this.DrawInfo.Start;i<=this.DrawInfo.End&&i<this.Data.Data.length;++i){var item=this.Data.Data[i];if(!IFrameSplitOperator.IsNumber(item.Low))continue;if(low==null)low=item.Low;else if(low>item.Low)low=item.Low;}return low;}return[];};}//是否有是有效的数字
11102
- JSSymbolData.prototype.IsNumber=function(value){if(value==null)return false;if(isNaN(value))return false;return true;};JSSymbolData.prototype.IsDivideNumber=function(value){if(value==null)return false;if(isNaN(value))return false;if(value==0)return false;return true;};JSSymbolData.prototype.JsonDataToFinance=function(data){var financeData;for(var _i124=1;_i124<=4;++_i124){switch(_i124){case 1:var finance=data.finance1;var announcement=data.announcement1;break;case 2:var finance=data.finance2;var announcement=data.announcement2;break;case 3:var finance=data.finance3;var announcement=data.announcement3;break;case 4:var finance=data.finance4;var announcement=data.announcement4;break;default:break;}if(!finance||!announcement||!this.IsNumber(announcement.year)||!this.IsNumber(announcement.quarter))continue;if(financeData)//如果存在1天公布多个报告期数据 只取最新的一个公告期数据
11112
+ JSSymbolData.prototype.IsNumber=function(value){if(value==null)return false;if(isNaN(value))return false;return true;};JSSymbolData.prototype.IsDivideNumber=function(value){if(value==null)return false;if(isNaN(value))return false;if(value==0)return false;return true;};JSSymbolData.prototype.JsonDataToFinance=function(data){var financeData;for(var _i126=1;_i126<=4;++_i126){switch(_i126){case 1:var finance=data.finance1;var announcement=data.announcement1;break;case 2:var finance=data.finance2;var announcement=data.announcement2;break;case 3:var finance=data.finance3;var announcement=data.announcement3;break;case 4:var finance=data.finance4;var announcement=data.announcement4;break;default:break;}if(!finance||!announcement||!this.IsNumber(announcement.year)||!this.IsNumber(announcement.quarter))continue;if(financeData)//如果存在1天公布多个报告期数据 只取最新的一个公告期数据
11103
11113
  {if(financeData.Announcement.year<announcement.year)financeData={Date:data.date,Finance:finance,Announcement:announcement};}else{financeData={Date:data.date,Finance:finance,Announcement:announcement};}}return financeData;};var JS_EXECUTE_DEBUG_LOG=false;var JS_EXECUTE_JOB_ID={JOB_DOWNLOAD_SYMBOL_DATA:1,//下载股票的K线数据
11104
11114
  JOB_DOWNLOAD_INDEX_DATA:2,//下载大盘的K线数据
11105
11115
  JOB_DOWNLOAD_SYMBOL_LATEST_DATA:3,//最新的股票行情数据
@@ -11257,8 +11267,8 @@ this.ConstVarTable=new _map2.default([//个股数据
11257
11267
  this.UpdateUICallback=null;//回调
11258
11268
  this.CallbackParam=null;this.IsSectionMode=false;if(option){if(option.Callback)this.UpdateUICallback=option.Callback;if(option.CallbackParam){this.CallbackParam=option.CallbackParam;if(this.CallbackParam.HQChart)this.GetEventCallback=function(id){return _this46.CallbackParam.HQChart.GetEventCallback(id);};}if(option.Arguments)this.Arguments=option.Arguments;if(option.IsSectionMode)this.IsSectionMode=option.IsSectionMode;if(option.Self)this.IndexCtrl=option.Self;//调试模式信息
11259
11269
  if(IFrameSplitOperator.IsNumber(option.Debug))this.Debug=option.Debug;if(option.DebugFilter)this.DebugFilter=option.DebugFilter;}this.Execute=function(){this.OutVarTable=[];this.VarTable=new _map2.default();this.VarDrawTable=new _map2.default();//绘图变量表
11260
- JSConsole.Complier.Log('[JSExecute::Execute] Load Arguments',this.Arguments);for(var _i125 in this.Arguments)//预定义的变量
11261
- {var _item16=this.Arguments[_i125];this.VarTable.set(_item16.Name,_item16.Value);}this.RunNextJob();};this.RunNextJob=function(){if(this.JobList.length<=0)return;JSConsole.Complier.Log('[JSExecute::Execute] JobList',this.JobList);var jobItem=this.JobList.shift();switch(jobItem.ID){case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_SYMBOL_DATA:return this.SymbolData.GetSymbolData();case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_SYMBOL_PERIOD_DATA:return this.SymbolData.GetSymbolPeriodData(jobItem);case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_INDEX_DATA:return this.SymbolData.GetIndexData();case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_LATEST_INDEX_DATA:return this.SymbolData.GetLatestIndexData();case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_INDEX_INCREASE_DATA:return this.SymbolData.GetIndexIncreaseData(jobItem);case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_SYMBOL_LATEST_DATA:return this.SymbolData.GetLatestData(jobItem);case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_VOLR_DATA://量比
11270
+ JSConsole.Complier.Log('[JSExecute::Execute] Load Arguments',this.Arguments);for(var _i127 in this.Arguments)//预定义的变量
11271
+ {var _item16=this.Arguments[_i127];this.VarTable.set(_item16.Name,_item16.Value);}this.RunNextJob();};this.RunNextJob=function(){if(this.JobList.length<=0)return;JSConsole.Complier.Log('[JSExecute::Execute] JobList',this.JobList);var jobItem=this.JobList.shift();switch(jobItem.ID){case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_SYMBOL_DATA:return this.SymbolData.GetSymbolData();case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_SYMBOL_PERIOD_DATA:return this.SymbolData.GetSymbolPeriodData(jobItem);case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_INDEX_DATA:return this.SymbolData.GetIndexData();case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_LATEST_INDEX_DATA:return this.SymbolData.GetLatestIndexData();case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_INDEX_INCREASE_DATA:return this.SymbolData.GetIndexIncreaseData(jobItem);case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_SYMBOL_LATEST_DATA:return this.SymbolData.GetLatestData(jobItem);case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_VOLR_DATA://量比
11262
11272
  return this.SymbolData.GetVolRateData(jobItem);case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_OTHER_SYMBOL_DATA://指定股票数据
11263
11273
  return this.SymbolData.GetOtherSymbolData(jobItem);case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_RELEASE_DATE_DATA:return this.SymbolData.GetCompanyReleaseDate(jobItem.ID);case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_BALANCE:case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_RATE:case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_BUY_BALANCE://买入信息-融资余额
11264
11274
  case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_BUY_AMOUNT://买入信息-买入额
@@ -11289,7 +11299,7 @@ case'INDEXA':case'INDEXC':case'INDEXH':case'INDEXH':case'INDEXO':case'INDEXV':ca
11289
11299
  this.ReadVariable=function(name,node){if(this.ConstVarTable.has(name)){var data=this.ConstVarTable.get(name);if(data==null)//动态加载,用到再加载
11290
11300
  {data=this.ReadSymbolData(name,node);this.ConstVarTable.set(name,data);}return data;}if(g_JSComplierResource.IsCustomVariant(name))return this.ReadCustomVariant(name,node);//读取自定义变量
11291
11301
  if(this.VarTable.has(name))return this.VarTable.get(name);if(name.indexOf('#')>0){var aryPeriod=name.split('#');return this.SymbolData.GetSymbolPeriodCacheData(aryPeriod[0],aryPeriod[1]);}if(name.indexOf("COLOR")==0){var colorValue=JSComplier.ColorVarToRGB(name);if(colorValue)return colorValue;}this.ThrowUnexpectedNode(node,'变量'+name+'不存在',name);return null;};this.ReadMemberVariable=function(node){var obj=node.Object;var member=node.Property;var maiObj=void 0;if(obj.Type==Syntax.BinaryExpression||obj.Type==Syntax.LogicalExpression)maiObj=this.VisitBinaryExpression(obj);else if(obj.Type==Syntax.CallExpression)maiObj=this.VisitCallExpression(obj);else maiObj=this.GetNodeValue(obj);if(!maiObj)return null;var value=maiObj[member.Name];if(value)return value;return null;};//单数据转成数组 个数和历史数据一致
11292
- this.SingleDataToArrayData=function(value){var count=this.SymbolData.Data.Data.length;var result=[];for(var _i126=0;_i126<count;++_i126){result[_i126]=value;}return result;};this.RunAST=function(){if(!this.AST)this.ThrowError();if(!this.AST.Body)this.ThrowError();for(var _i127=0;_i127<this.AST.Body.length;++_i127){var _item17=this.AST.Body[_i127];this.RunASTNode(_item17,_i127);if(this.Interrupt&&this.Interrupt.Exit){JSConsole.Complier.Log('[JSExecute::RunAST] Interrupt',this.Interrupt);//中断退出
11302
+ this.SingleDataToArrayData=function(value){var count=this.SymbolData.Data.Data.length;var result=[];for(var _i128=0;_i128<count;++_i128){result[_i128]=value;}return result;};this.RunAST=function(){if(!this.AST)this.ThrowError();if(!this.AST.Body)this.ThrowError();for(var _i129=0;_i129<this.AST.Body.length;++_i129){var _item17=this.AST.Body[_i129];this.RunASTNode(_item17,_i129);if(this.Interrupt&&this.Interrupt.Exit){JSConsole.Complier.Log('[JSExecute::RunAST] Interrupt',this.Interrupt);//中断退出
11293
11303
  break;}}JSConsole.Complier.Log('[JSExecute::RunAST]',this.VarTable);return this.OutVarTable;};this.RunASTNode=function(item,lineID){this.VisitNode(item);var i=lineID;//输出变量
11294
11304
  if(item.Type==Syntax.ExpressionStatement&&item.Expression){if(item.Expression.Type==Syntax.AssignmentExpression){if(item.Expression.Operator==':'&&item.Expression.Left){var assignmentItem=item.Expression;var _varName=assignmentItem.Left.Name;var _outVar=this.VarTable.get(_varName);if(this.VarDrawTable.has(_varName))//绘图函数赋值
11295
11305
  {var draw=this.VarDrawTable.get(_varName);this.OutVarTable.push({Name:draw.Name,Draw:draw,Type:1});}else{var type=0;if(_outVar&&(typeof _outVar==='undefined'?'undefined':(0,_typeof3.default)(_outVar))=='object'&&_outVar.__Type__=='Object'){type=1000;}else if(!this.IsSectionMode&&!Array.isArray(_outVar)){if(typeof _outVar=='string'){var floatValue=parseFloat(_outVar);if(IFrameSplitOperator.IsNumber(floatValue)){_outVar=this.SingleDataToArrayData(floatValue);}else{_outVar=this.SingleDataToArrayData(_outVar);type=1001;}}else _outVar=this.SingleDataToArrayData(_outVar);}this.OutVarTable.push({Name:_varName,Data:_outVar,Type:type});}}}else if(item.Expression.Type==Syntax.CallExpression){var callItem=item.Expression;if(this.Draw.IsDrawFunction(callItem.Callee.Name)){var _draw=callItem.Draw;_draw.Name=callItem.Callee.Name;this.OutVarTable.push({Name:_draw.Name,Draw:_draw,Type:1});}else if(callItem.Callee.Name==="IFC"&&callItem.Draw){var _draw2=callItem.Draw;_draw2.Name=_draw2.DrawType;this.OutVarTable.push({Name:_draw2.Name,Draw:_draw2,Type:1});}else{var _outVar2=callItem.Out;varName='__temp_c_'+callItem.Callee.Name+'_'+i+'__';var type=0;if(!Array.isArray(_outVar2))_outVar2=this.SingleDataToArrayData(_outVar2);this.OutVarTable.push({Name:varName,Data:_outVar2,Type:type,NoneName:true});}}else if(item.Expression.Type==Syntax.Identifier){var _varName2=item.Expression.Name;var _outVar3=this.ReadVariable(_varName2,item.Expression);var type=0;if(_outVar3&&(typeof _outVar3==='undefined'?'undefined':(0,_typeof3.default)(_outVar3))=='object'&&_outVar3.__Type__=='Object'){type=1000;}else if(!this.IsSectionMode&&!Array.isArray(_outVar3)){if(typeof _outVar3=='string')_outVar3=this.SingleDataToArrayData(parseFloat(_outVar3));else _outVar3=this.SingleDataToArrayData(_outVar3);}_varName2="__temp_i_"+i+"__";this.OutVarTable.push({Name:_varName2,Data:_outVar3,Type:type,NoneName:true});}else if(item.Expression.Type==Syntax.Literal)//常量
@@ -11301,16 +11311,16 @@ var isNoneName=false;var isShowTitle=true;//显示在位置之上,对于DRAWTEXT
11301
11311
  var isDrawAbove=false;var isDrawCenter=false;var isDrawBelow=false;//VALIGN0,VALIGN1,VALIGN2 设置文字垂直对齐方式(上中下)
11302
11312
  //ALIGN0,ALIGN1,ALIGN2 设置文字水平对齐方式(左中右)
11303
11313
  var drawAlign=-1,drawVAlign=-1;var fontSize=-1;var bgConfig=null;//背景设置
11304
- var vLineConfig=null;var isFirstDraw=null;var xOffset=null,yOffset=null;var klineType=null;for(var _j13=0;_j13<item.Expression.Expression.length;++_j13){var itemExpression=item.Expression.Expression[_j13];if(itemExpression.Type==Syntax.AssignmentExpression&&itemExpression.Operator==':'&&itemExpression.Left){if(_j13==0){_varName3=itemExpression.Left.Name;var _varValue=this.VarTable.get(_varName3);if(this.VarDrawTable.has(_varName3))//绘图函数赋值
11314
+ var vLineConfig=null;var isFirstDraw=null;var xOffset=null,yOffset=null;var klineType=null;for(var _j14=0;_j14<item.Expression.Expression.length;++_j14){var itemExpression=item.Expression.Expression[_j14];if(itemExpression.Type==Syntax.AssignmentExpression&&itemExpression.Operator==':'&&itemExpression.Left){if(_j14==0){_varName3=itemExpression.Left.Name;var _varValue=this.VarTable.get(_varName3);if(this.VarDrawTable.has(_varName3))//绘图函数赋值
11305
11315
  {_draw3=this.VarDrawTable.get(_varName3);}else if(!Array.isArray(_varValue)){_varValue=this.SingleDataToArrayData(_varValue);this.VarTable.set(_varName3,_varValue);//把常量放到变量表里
11306
11316
  }}else{}}else if(itemExpression.Type==Syntax.Identifier){var _value3=itemExpression.Name;if(_value3==='COLORSTICK')colorStick=true;else if(_value3==='POINTDOT')pointDot=true;else if(_value3==='CIRCLEDOT')circleDot=true;else if(_value3==='DOTLINE')isDotLine=true;else if(_value3=="UPDOWNDOT")upDownDot=true;else if(_value3==='LINESTICK')lineStick=true;else if(_value3==='STICK')stick=true;else if(_value3==='VOLSTICK')volStick=true;else if(_value3=="LINEAREA")lineArea=true;else if(_value3==="DRAWABOVE")isDrawAbove=true;else if(_value3==="DRAWCENTER")isDrawCenter=true;else if(_value3=="DRAWBELOW")isDrawBelow=true;else if(_value3=="STEPLINE")stepLine=true;else if(_value3.indexOf('COLOR')==0)color=_value3;else if(_value3.indexOf("RGBX")==0&&_value3.length==10)color=_value3;//RGBX+“RRGGBB”
11307
11317
  else if(_value3.indexOf('LINETHICK')==0)lineWidth=_value3;else if(_value3=="ALIGN0")drawAlign=0;else if(_value3=="ALIGN1")drawAlign=1;else if(_value3=="ALIGN2")drawAlign=2;else if(_value3=="VALIGN0")drawVAlign=0;else if(_value3=="VALIGN1")drawVAlign=1;else if(_value3=="VALIGN2")drawVAlign=2;else if(_value3.indexOf('NODRAW')==0)isShow=false;else if(_value3.indexOf('EXDATA')==0)isExData=true;//扩展数据, 不显示再图形里面
11308
11318
  else if(_value3.indexOf('LINEOVERLAY')==0)isOverlayLine=true;else if(_value3.indexOf("NOTEXT")==0||_value3.indexOf("NOTITLE")==0)isShowTitle=false;//标题不显示
11309
- else if(_value3.indexOf("FONTSIZE")==0){var strFontSize=_value3.replace("FONTSIZE","");fontSize=parseInt(strFontSize);}else{if(_j13==0){_varName3=itemExpression.Name;var _varValue2=this.ReadVariable(_varName3,itemExpression);if(!Array.isArray(_varValue2))_varValue2=this.SingleDataToArrayData(_varValue2);_varName3="__temp_si_"+i+"__";isNoneName=true;this.VarTable.set(_varName3,_varValue2);//放到变量表里
11319
+ else if(_value3.indexOf("FONTSIZE")==0){var strFontSize=_value3.replace("FONTSIZE","");fontSize=parseInt(strFontSize);}else{if(_j14==0){_varName3=itemExpression.Name;var _varValue2=this.ReadVariable(_varName3,itemExpression);if(!Array.isArray(_varValue2))_varValue2=this.SingleDataToArrayData(_varValue2);_varName3="__temp_si_"+i+"__";isNoneName=true;this.VarTable.set(_varName3,_varValue2);//放到变量表里
11310
11320
  }}}else if(itemExpression.Type==Syntax.Literal)//常量
11311
- {if(_j13==0){var aryValue=this.SingleDataToArrayData(itemExpression.Value);_varName3=itemExpression.Value.toString();this.VarTable.set(_varName3,aryValue);//把常量放到变量表里
11312
- }}else if(itemExpression.Type==Syntax.CallExpression){if(_j13==0){if(this.Draw.IsDrawFunction(itemExpression.Callee.Name)){_draw3=itemExpression.Draw;_draw3.Name=itemExpression.Callee.Name;}else{var _varValue3=itemExpression.Out;_varName3='__temp_sc_'+itemExpression.Callee.Name+'_'+i+'__';isNoneName=true;this.VarTable.set(_varName3,_varValue3);}}else{if(itemExpression.Callee.Name=="RGB"||itemExpression.Callee.Name=="RGBA"){color=itemExpression.Out;}else if(itemExpression.Callee.Name=="UPCOLOR"){upColor=itemExpression.Out;}else if(itemExpression.Callee.Name=="DOWNCOLOR"){downColor=itemExpression.Out;}else if(itemExpression.Callee.Name=="XMOVE"){xOffset=itemExpression.Out;}else if(itemExpression.Callee.Name=="YMOVE"){yOffset=itemExpression.Out;}else if(itemExpression.Callee.Name=="FIRSTDRAW"){if(itemExpression.Out===0)isFirstDraw=false;else if(itemExpression.Out===1)isFirstDraw=true;}else if(itemExpression.Callee.Name=="SOUND"){var event=this.GetSoundEvent();if(event){}_varName3=null;}else if(itemExpression.Callee.Name=="ICON"){var drawCond=this.VarTable.get(_varName3);if(drawCond){_draw3=this.GetOutIconData(drawCond,itemExpression.Draw);if(_draw3)_draw3.Name=itemExpression.Callee.Name;}_varName3=null;}else if(itemExpression.Callee.Name=="BACKGROUND"){bgConfig=itemExpression.Draw;_varName3=null;}else if(itemExpression.Callee.Name=="CKLINE"){vLineConfig=itemExpression.Draw;_varName3=null;}else if(itemExpression.Callee.Name=="KLINETYPE"){klineType=itemExpression.Out;}}}else if(itemExpression.Type==Syntax.BinaryExpression){if(_j13==0){_varName3="__temp_sb_"+i+"__";var _aryValue=itemExpression.Out;isNoneName=true;this.VarTable.set(_varName3,_aryValue);}}else if(itemExpression.Type==Syntax.UnaryExpression){if(_j13==0){_varName3="__temp_su_"+i+"__";var varInfo={};if(this.ReadUnaryExpression(itemExpression,varInfo)){isNoneName=true;this.VarTable.set(_varName3,varInfo.OutVar);}}}else if(itemExpression.Type==Syntax.MemberExpression)//"MA.MA2"(5,12,29), COLORRED;
11313
- {if(_j13==0){var outVar=this.ReadMemberVariable(itemExpression);if(outVar){if(!Array.isArray(outVar))varValue=this.SingleDataToArrayData(outVar);isNoneName=true;_varName3="__temp_di_"+i+"__";this.VarTable.set(_varName3,outVar);//把常量放到变量表里
11321
+ {if(_j14==0){var aryValue=this.SingleDataToArrayData(itemExpression.Value);_varName3=itemExpression.Value.toString();this.VarTable.set(_varName3,aryValue);//把常量放到变量表里
11322
+ }}else if(itemExpression.Type==Syntax.CallExpression){if(_j14==0){if(this.Draw.IsDrawFunction(itemExpression.Callee.Name)){_draw3=itemExpression.Draw;_draw3.Name=itemExpression.Callee.Name;}else{var _varValue3=itemExpression.Out;_varName3='__temp_sc_'+itemExpression.Callee.Name+'_'+i+'__';isNoneName=true;this.VarTable.set(_varName3,_varValue3);}}else{if(itemExpression.Callee.Name=="RGB"||itemExpression.Callee.Name=="RGBA"){color=itemExpression.Out;}else if(itemExpression.Callee.Name=="UPCOLOR"){upColor=itemExpression.Out;}else if(itemExpression.Callee.Name=="DOWNCOLOR"){downColor=itemExpression.Out;}else if(itemExpression.Callee.Name=="XMOVE"){xOffset=itemExpression.Out;}else if(itemExpression.Callee.Name=="YMOVE"){yOffset=itemExpression.Out;}else if(itemExpression.Callee.Name=="FIRSTDRAW"){if(itemExpression.Out===0)isFirstDraw=false;else if(itemExpression.Out===1)isFirstDraw=true;}else if(itemExpression.Callee.Name=="SOUND"){var event=this.GetSoundEvent();if(event){}_varName3=null;}else if(itemExpression.Callee.Name=="ICON"){var drawCond=this.VarTable.get(_varName3);if(drawCond){_draw3=this.GetOutIconData(drawCond,itemExpression.Draw);if(_draw3)_draw3.Name=itemExpression.Callee.Name;}_varName3=null;}else if(itemExpression.Callee.Name=="BACKGROUND"){bgConfig=itemExpression.Draw;_varName3=null;}else if(itemExpression.Callee.Name=="CKLINE"){vLineConfig=itemExpression.Draw;_varName3=null;}else if(itemExpression.Callee.Name=="KLINETYPE"){klineType=itemExpression.Out;}}}else if(itemExpression.Type==Syntax.BinaryExpression){if(_j14==0){_varName3="__temp_sb_"+i+"__";var _aryValue=itemExpression.Out;isNoneName=true;this.VarTable.set(_varName3,_aryValue);}}else if(itemExpression.Type==Syntax.UnaryExpression){if(_j14==0){_varName3="__temp_su_"+i+"__";var varInfo={};if(this.ReadUnaryExpression(itemExpression,varInfo)){isNoneName=true;this.VarTable.set(_varName3,varInfo.OutVar);}}}else if(itemExpression.Type==Syntax.MemberExpression)//"MA.MA2"(5,12,29), COLORRED;
11323
+ {if(_j14==0){var outVar=this.ReadMemberVariable(itemExpression);if(outVar){if(!Array.isArray(outVar))varValue=this.SingleDataToArrayData(outVar);isNoneName=true;_varName3="__temp_di_"+i+"__";this.VarTable.set(_varName3,outVar);//把常量放到变量表里
11314
11324
  }}}}if(pointDot&&_varName3)//圆点
11315
11325
  {var _outVar7=this.VarTable.get(_varName3);if(!Array.isArray(_outVar7))_outVar7=this.SingleDataToArrayData(_outVar7);var _value4={Name:_varName3,Data:_outVar7,Radius:g_JSChartResource.POINTDOT.Radius,Type:3};if(color)_value4.Color=color;if(lineWidth)_value4.LineWidth=lineWidth;this.OutVarTable.push(_value4);}else if(circleDot&&_varName3)//圆点
11316
11326
  {var _outVar8=this.VarTable.get(_varName3);if(!Array.isArray(_outVar8))_outVar8=this.SingleDataToArrayData(_outVar8);var _value5={Name:_varName3,Data:_outVar8,Radius:g_JSChartResource.CIRCLEDOT.Radius,Type:3};if(color)_value5.Color=color;if(lineWidth)_value5.LineWidth=lineWidth;this.OutVarTable.push(_value5);}else if(upDownDot&&_varName3)//彩色点
@@ -11322,7 +11332,7 @@ else if(_value3.indexOf("FONTSIZE")==0){var strFontSize=_value3.replace("FONTSIZ
11322
11332
  {var _outVar14=this.VarTable.get(_varName3);var _value11={Name:_varName3,Data:_outVar14,Color:color,Type:2};if(lineWidth)_value11.LineWidth=lineWidth;if(color)_value11.Color=color;if(upColor)_value11.UpColor=upColor;if(downColor)_value11.DownColor=downColor;this.OutVarTable.push(_value11);}else if(_varName3&&color&&!_draw3){var _outVar15=this.VarTable.get(_varName3);if(!Array.isArray(_outVar15))_outVar15=this.SingleDataToArrayData(_outVar15);var _value12={Name:_varName3,Data:_outVar15,Color:color,Type:0};if(lineWidth)_value12.LineWidth=lineWidth;if(isShow==false)_value12.IsShow=false;if(isExData==true)_value12.IsExData=true;if(isDotLine==true)_value12.IsDotLine=true;if(isOverlayLine==true)_value12.IsOverlayLine=true;if(isNoneName==true)_value12.NoneName=true;if(isShowTitle==false)_value12.IsShowTitle=false;if(stepLine==true)_value12.Type=7;this.OutVarTable.push(_value12);}else if(_draw3)//画图函数
11323
11333
  {var outVar={Name:_draw3.Name,Draw:_draw3,Type:1};if(color)outVar.Color=color;if(isDotLine==true)outVar.IsDotLine=true;if(lineWidth)outVar.LineWidth=lineWidth;if(isDrawAbove)outVar.IsDrawAbove=true;if(isDrawCenter)outVar.IsDrawCenter=true;if(isDrawBelow)outVar.IsDrawBelow=true;if(drawAlign>=0)outVar.DrawAlign=drawAlign;if(drawVAlign>=0)outVar.DrawVAlign=drawVAlign;if(fontSize>0)outVar.DrawFontSize=fontSize;if(bgConfig)outVar.Background=bgConfig;if(vLineConfig)outVar.VerticalLine=vLineConfig;if(IFrameSplitOperator.IsNumber(xOffset))outVar.XOffset=xOffset;if(IFrameSplitOperator.IsNumber(yOffset))outVar.YOffset=yOffset;if(IFrameSplitOperator.IsBool(isFirstDraw))outVar.IsFirstDraw=isFirstDraw;if(IFrameSplitOperator.IsNumber(klineType))outVar.KLineType=klineType;this.OutVarTable.push(outVar);}else if(_varName3){var _outVar16=this.VarTable.get(_varName3);var _value13={Name:_varName3,Data:_outVar16,Type:0};if(color)_value13.Color=color;if(lineWidth)_value13.LineWidth=lineWidth;if(isShow==false)_value13.IsShow=false;if(isExData==true)_value13.IsExData=true;if(isDotLine==true)_value13.IsDotLine=true;if(isOverlayLine==true)_value13.IsOverlayLine=true;if(isShowTitle==false)_value13.IsShowTitle=false;if(stepLine==true)_value13.Type=7;this.OutVarTable.push(_value13);}}}};this.ReadUnaryExpression=function(item,varInfo){var argument=item.Argument;var outVar=null;if(argument.Type==Syntax.Literal){outVar=argument.Value;if(!Array.isArray(outVar))outVar=this.SingleDataToArrayData(outVar);}else if(argument.Type==Syntax.Identifier){var varName=argument.Name;outVar=this.ReadVariable(varName,item.Expression);if(!Array.isArray(outVar))outVar=this.SingleDataToArrayData(outVar);}else if(argument.Type==Syntax.BinaryExpression){outVar=argument.Out;if(!Array.isArray(outVar))outVar=this.SingleDataToArrayData(outVar);}else if(argument.Type==Syntax.CallExpression){var callItem=argument;if(this.Draw.IsDrawFunction(callItem.Callee.Name)){return false;}else if(callItem.Callee.Name==="IFC"&&callItem.Draw){return false;}else{outVar=callItem.Out;if(!Array.isArray(outVar))outVar=this.SingleDataToArrayData(outVar);}}else{return false;}if(item.Operator=='-'){if(outVar)outVar=this.Algorithm.Subtract(0,outVar);}varInfo.OutVar=outVar;return true;};this.GetOutIconData=function(cond,iconDraw){if(Array.isArray(cond)){for(var i=0;i<cond.length&&i<iconDraw.DrawData.length;++i){var item=cond[i];if(item<=0)iconDraw.DrawData[i]=null;}return iconDraw;}if(cond)return iconDraw;return null;};this.GetSoundEvent=function(){if(!this.GetEventCallback)return null;return this.GetEventCallback(JSCHART_EVENT_ID.ON_PLAY_SOUND);};this.Run=function(){try{var data=this.RunAST();//执行脚本
11324
11334
  JSConsole.Complier.Log('[JSComplier.Run] execute finish',data);if(this.IndexCtrl)this.IndexCtrl.Status=0;if(this.UpdateUICallback){JSConsole.Complier.Log('[JSComplier.Run] invoke UpdateUICallback.');if(this.CallbackParam&&this.CallbackParam.Job&&this.CallbackParam.Job.ID==JS_EXECUTE_JOB_ID.JOB_EXECUTE_INDEX){this.UpdateUICallback(data,this.CallbackParam,this.SymbolData);}else{if(this.CallbackParam&&this.CallbackParam.Self&&this.CallbackParam.Self.ClassName==='ScriptIndexConsole')this.CallbackParam.JSExecute=this;if(this.IsUsePageData==true)this.CallbackParam.Self.IsUsePageData=true;this.UpdateUICallback(data,this.CallbackParam);}}}catch(error){JSConsole.Complier.Log(error);if(error.Job){JSConsole.Complier.Log('[JSComplier.Run] download job and reexectue',error.Job);this.JobList.push(error.Job);this.JobList.push({ID:JS_EXECUTE_JOB_ID.JOB_RUN_SCRIPT});this.Execute();}else if(this.ErrorCallback){if(this.IndexCtrl)this.IndexCtrl.Status=0;this.ErrorCallback(error,this.CallbackParam);}}};this.DebugRun_End=function(){var data=this.OutVarTable;JSConsole.Complier.Log('[JSComplier.DebugRun_End] execute finish',data);if(this.IndexCtrl)this.IndexCtrl.Status=0;if(this.UpdateUICallback){JSConsole.Complier.Log('[JSComplier.DebugRun_End] invoke UpdateUICallback.');if(this.CallbackParam&&this.CallbackParam.Job&&this.CallbackParam.Job.ID==JS_EXECUTE_JOB_ID.JOB_EXECUTE_INDEX){this.UpdateUICallback(data,this.CallbackParam,this.SymbolData);}else{if(this.CallbackParam&&this.CallbackParam.Self&&this.CallbackParam.Self.ClassName==='ScriptIndexConsole')this.CallbackParam.JSExecute=this;if(this.IsUsePageData==true)this.CallbackParam.Self.IsUsePageData=true;this.UpdateUICallback(data,this.CallbackParam);}}};this.DebugRun_Next=function(debugCtrl){var _this47=this;if(debugCtrl.ExeLine<debugCtrl.LineCount){var item=this.AST.Body[debugCtrl.ExeLine];this.RunASTNode(item);++debugCtrl.ExeLine;this.DebugFilter(debugCtrl,function(){_this47.DebugRun_Next(debugCtrl);});}else{this.DebugRun_End();debugCtrl.Status=2;this.DebugFilter(debugCtrl,null);}};//debug模式
11325
- this.DebugRun=function(){var _this48=this;try{if(!this.AST)this.ThrowError();if(!this.AST.Body)this.ThrowError();var debugCtrl={LineCount:this.AST.Body.length,ExeLine:0,Self:this,Status:1};this.DebugFilter(debugCtrl,function(){_this48.DebugRun_Next(debugCtrl);});}catch(error){if(this.ErrorCallback){if(this.IndexCtrl)this.IndexCtrl.Status=0;this.ErrorCallback(error,this.CallbackParam);}}};this.VisitNode=function(node){switch(node.Type){case Syntax.SequenceExpression:this.VisitSequenceExpression(node);break;case Syntax.ExpressionStatement:this.VisitNode(node.Expression);break;case Syntax.AssignmentExpression:this.VisitAssignmentExpression(node);break;case Syntax.BinaryExpression:case Syntax.LogicalExpression:this.VisitBinaryExpression(node);break;case Syntax.CallExpression:this.VisitCallExpression(node);break;case Syntax.UnaryExpression:this.VisitUnaryExpression(node);break;}};this.VisitUnaryExpression=function(node){if(node.Operator=='-'){var tempValue=this.GetNodeValueEx(node.Argument);var value=this.Algorithm.Subtract(0,tempValue);}else{var value=node.Argument.Value;}return value;};this.VisitSequenceExpression=function(node){for(var _i128 in node.Expression){var _item18=node.Expression[_i128];this.VisitNode(_item18);}};this.GetDynamicScriptIndex=function(node,args){var dynamicName=node.Callee.Value;var aryValue=dynamicName.split(".");if(aryValue.length!=2){this.ThrowUnexpectedNode(node,'\u8C03\u7528\u6307\u6807\u683C\u5F0F\''+dynamicName+'\'\u9519\u8BEF');}var name=aryValue[0];var outName=aryValue[1];var period=null;var pos=outName.indexOf('#');if(pos!=-1){period=outName.slice(pos+1);//周期
11335
+ this.DebugRun=function(){var _this48=this;try{if(!this.AST)this.ThrowError();if(!this.AST.Body)this.ThrowError();var debugCtrl={LineCount:this.AST.Body.length,ExeLine:0,Self:this,Status:1};this.DebugFilter(debugCtrl,function(){_this48.DebugRun_Next(debugCtrl);});}catch(error){if(this.ErrorCallback){if(this.IndexCtrl)this.IndexCtrl.Status=0;this.ErrorCallback(error,this.CallbackParam);}}};this.VisitNode=function(node){switch(node.Type){case Syntax.SequenceExpression:this.VisitSequenceExpression(node);break;case Syntax.ExpressionStatement:this.VisitNode(node.Expression);break;case Syntax.AssignmentExpression:this.VisitAssignmentExpression(node);break;case Syntax.BinaryExpression:case Syntax.LogicalExpression:this.VisitBinaryExpression(node);break;case Syntax.CallExpression:this.VisitCallExpression(node);break;case Syntax.UnaryExpression:this.VisitUnaryExpression(node);break;}};this.VisitUnaryExpression=function(node){if(node.Operator=='-'){var tempValue=this.GetNodeValueEx(node.Argument);var value=this.Algorithm.Subtract(0,tempValue);}else{var value=node.Argument.Value;}return value;};this.VisitSequenceExpression=function(node){for(var _i130 in node.Expression){var _item18=node.Expression[_i130];this.VisitNode(_item18);}};this.GetDynamicScriptIndex=function(node,args){var dynamicName=node.Callee.Value;var aryValue=dynamicName.split(".");if(aryValue.length!=2){this.ThrowUnexpectedNode(node,'\u8C03\u7528\u6307\u6807\u683C\u5F0F\''+dynamicName+'\'\u9519\u8BEF');}var name=aryValue[0];var outName=aryValue[1];var period=null;var pos=outName.indexOf('#');if(pos!=-1){period=outName.slice(pos+1);//周期
11326
11336
  outName=outName.slice(0,pos);}var strValue="";for(var i=0;i<args.length;++i){var value=args[i];if(strValue.length>0)strValue+=",";strValue+=''+value;}var strArgs='('+strValue+')';var key=outName+'#'+strArgs;if(period)key+='#'+period;if(!this.VarTable.has(name))return null;var indexData=this.VarTable.get(name);var value=indexData[key];return value;};//函数调用
11327
11337
  this.VisitCallExpression=function(node){var funcName=node.Callee.Name;var args=[];for(var i=0;i<node.Arguments.length;++i){var item=node.Arguments[i];var value;if(funcName==="IFC"&&i>=1)break;//IFC先处理第1个条件参数
11328
11338
  if(item.Type==Syntax.BinaryExpression||item.Type==Syntax.LogicalExpression)value=this.VisitBinaryExpression(item);else if(item.Type==Syntax.CallExpression)value=this.VisitCallExpression(item);else value=this.GetNodeValue(item);args.push(value);}if(node.Callee.Type==Syntax.Literal){node.Out=[];node.Draw=null;var data=this.GetDynamicScriptIndex(node,args);if(data)node.Out=data;return node.Out;}if(funcName==="IFC"){//IFC(X,A,B)若X不为0则执行A,否则执行B.IFC与IF函数的区别:根据X的值来选择性执行A、B表达式.
@@ -11344,6 +11354,7 @@ function JSExplainer(ast,option){this.AST=ast;this.ErrorHandler=new ErrorHandler
11344
11354
  this.UpdateUICallback;this.CallbackParam;this.JobList=[];//执行的任务队列
11345
11355
  this.VarTable=new _map2.default();//变量表
11346
11356
  this.OutVarTable=[];//输出变量
11357
+ this.MaxValueLength=150;//最长的字符
11347
11358
  //脚本自动变量表, 只读
11348
11359
  this.ConstVarTable=new _map2.default([//个股数据
11349
11360
  ['CLOSE',"收盘价"],['VOL',"成交量"],['OPEN',"开盘价"],['HIGH',"最高价"],['LOW',"最低价"],['AMOUNT',"成交量"],['C',"收盘价"],['V',"成交量"],['O',"开盘价"],['H',"最高价"],['L',"最低价"],['AMO',"成交量"],['VOLR',"量比"],['VOLINSTK',"持仓量"],["OPI","持仓量"],["ZSTJJ","均价"],["QHJSJ","结算价"],["SETTLE","结算价"],//日期类
@@ -11359,8 +11370,8 @@ this.ConstVarTable=new _map2.default([//个股数据
11359
11370
  ['HYBLOCK',"所属行业"],//所属行业板块
11360
11371
  ['DYBLOCK',"所属地域"],//所属地域板块
11361
11372
  ['GNBLOCK',"所属概念"],//所属概念
11362
- ["FGBLOCK","所属风格板块"],["ZSBLOCK","所属指数板块"],["ZHBLOCK",'所属组合板块'],["ZDBLOCK",'所属自定义板块'],["HYZSCODE","所属行业的板块指数代码"],["GNBLOCKNUM","所属概念板块的个数"],["FGBLOCKNUM","所属风格板块的个数"],["ZSBLOCKNUM","所属指数板块的个数"],["ZHBLOCKNUM","所属组合板块的个数"],["ZDBLOCKNUM","所属自定义板块的个数"],["HYSYL","指数市盈率或个股所属行业的市盈率"],["HYSJL","指数市净率或个股所属行业的市净率"],['DRAWNULL',"无效数据"],["TR","求真实波幅"]]);if(option){if(option.Callback)this.UpdateUICallback=option.Callback;if(option.CallbackParam)this.CallbackParam=option.CallbackParam;if(option.Arguments)this.Arguments=option.Arguments;}this.Run=function(){try{this.OutVarTable=[];this.VarTable=new _map2.default();JSConsole.Complier.Log('[JSExecute::JSExplainer] Load Arguments',this.Arguments);for(var _i129 in this.Arguments)//预定义的变量
11363
- {var _item19=this.Arguments[_i129];this.VarTable.set(_item19.Name,_item19.Value);}var data=this.RunAST();//执行脚本
11373
+ ["FGBLOCK","所属风格板块"],["ZSBLOCK","所属指数板块"],["ZHBLOCK",'所属组合板块'],["ZDBLOCK",'所属自定义板块'],["HYZSCODE","所属行业的板块指数代码"],["GNBLOCKNUM","所属概念板块的个数"],["FGBLOCKNUM","所属风格板块的个数"],["ZSBLOCKNUM","所属指数板块的个数"],["ZHBLOCKNUM","所属组合板块的个数"],["ZDBLOCKNUM","所属自定义板块的个数"],["HYSYL","指数市盈率或个股所属行业的市盈率"],["HYSJL","指数市净率或个股所属行业的市净率"],['DRAWNULL',"无效数据"],["TR","求真实波幅"]]);if(option){if(option.Callback)this.UpdateUICallback=option.Callback;if(option.CallbackParam)this.CallbackParam=option.CallbackParam;if(option.Arguments)this.Arguments=option.Arguments;}this.Run=function(){try{this.OutVarTable=[];this.VarTable=new _map2.default();JSConsole.Complier.Log('[JSExecute::JSExplainer] Load Arguments',this.Arguments);for(var _i131 in this.Arguments)//预定义的变量
11374
+ {var _item19=this.Arguments[_i131];this.VarTable.set(_item19.Name,_item19.Value);}var data=this.RunAST();//执行脚本
11364
11375
  JSConsole.Complier.Log('[JSExplainer.Run] explain finish',data);if(this.UpdateUICallback)//回调发送结果, 可以支持异步
11365
11376
  {JSConsole.Complier.Log('[JSExplainer.Run] invoke UpdateUICallback.');this.UpdateUICallback(data);}}catch(error){JSConsole.Complier.Log('[JSExplainer.Run] throw error ',error);if(this.ErrorCallback){this.ErrorCallback(error,this.OutVarTable);}}};this.RunAST=function(){if(!this.AST)this.ThrowError();if(!this.AST.Body)this.ThrowError();for(var i=0;i<this.AST.Body.length;++i){//console.log(`[JSExplainer::RunAST] ${i}`);
11366
11377
  var item=this.AST.Body[i];this.VisitNode(item);//输出变量
@@ -11371,20 +11382,20 @@ if(item.Type==Syntax.ExpressionStatement&&item.Expression){if(item.Expression.Ty
11371
11382
  {var varName="__temp_l_"+i+"__";var argument=item.Expression.Argument;var _outVar25=null;if(argument.Type==Syntax.Literal){_outVar25=argument.Value;}else if(argument.Type==Syntax.Identifier){var _varName7=argument.Name;_outVar25=this.ReadVariable(_varName7,item.Expression);}else if(argument.Type==Syntax.BinaryExpression){_outVar25=argument.Out;}if(item.Expression.Operator=='-'){_outVar25='-'+_outVar25;}this.OutVarTable.push({Name:varName,Data:'\u8F93\u51FA: '+_outVar25,Type:0,NoneName:true});}else if(item.Expression.Type==Syntax.SequenceExpression){var _varName8=void 0;var _drawName=void 0;var draw=void 0;var color=void 0;var lineWidth=void 0;var colorStick=false;var pointDot=false;var circleDot=false;var lineStick=false;var stick=false;var volStick=false;var isShow=true;var isExData=false;var isDotLine=false;var isOverlayLine=false;//叠加线
11372
11383
  var isNoneName=false;var fontSize=-1;var drawAlign=-1,drawVAlign=-1;//显示在位置之上,对于DRAWTEXT和DRAWNUMBER等函数有用,放在语句的最后面(不能与LINETHICK等函数共用),比如:
11373
11384
  //DRAWNUMBER(CLOSE>OPEN,HIGH,CLOSE),DRAWABOVE;
11374
- var isDrawAbove=false;for(var _j14 in item.Expression.Expression){var itemExpression=item.Expression.Expression[_j14];if(itemExpression.Type==Syntax.AssignmentExpression&&itemExpression.Operator==':'&&itemExpression.Left){_varName8=itemExpression.Left.Name;var _varValue4=this.VarTable.get(_varName8);this.VarTable.set(_varName8,this.ConvertToShortValue(_varValue4));//把常量放到变量表里
11385
+ var isDrawAbove=false;for(var _j15 in item.Expression.Expression){var itemExpression=item.Expression.Expression[_j15];if(itemExpression.Type==Syntax.AssignmentExpression&&itemExpression.Operator==':'&&itemExpression.Left){_varName8=itemExpression.Left.Name;var _varValue4=this.VarTable.get(_varName8);this.VarTable.set(_varName8,this.ConvertToShortValue(_varValue4));//把常量放到变量表里
11375
11386
  }else if(itemExpression.Type==Syntax.Identifier){var _value15=itemExpression.Name;if(_value15==='COLORSTICK')colorStick=true;else if(_value15==='POINTDOT')pointDot=true;else if(_value15==='CIRCLEDOT')circleDot=true;else if(_value15==='DOTLINE')isDotLine=true;else if(_value15==='LINESTICK')lineStick=true;else if(_value15==='STICK')stick=true;else if(_value15==='VOLSTICK')volStick=true;else if(_value15==="DRAWABOVE")isDrawAbove=true;else if(_value15.indexOf('COLOR')==0)color=_value15;else if(_value15.indexOf('LINETHICK')==0)lineWidth=_value15;else if(_value15=="ALIGN0")drawAlign=0;else if(_value15=="ALIGN1")drawAlign=1;else if(_value15=="ALIGN2")drawAlign=2;else if(_value15=="VALIGN0")drawVAlign=0;else if(_value15=="VALIGN1")drawVAlign=1;else if(_value15=="VALIGN2")drawVAlign=2;else if(_value15.indexOf('NODRAW')==0)isShow=false;else if(_value15.indexOf('EXDATA')==0)isExData=true;//扩展数据, 不显示再图形里面
11376
11387
  else if(_value15.indexOf('LINEOVERLAY')==0)isOverlayLine=true;else if(_value15.indexOf("FONTSIZE")==0){var strFontSize=_value15.replace("FONTSIZE","");fontSize=parseInt(strFontSize);}else{_varName8=itemExpression.Name;var _varValue5=this.ReadVariable(_varName8,itemExpression);_varName8="__temp_si_"+i+"__";isNoneName=true;this.VarTable.set(_varName8,this.ConvertToShortValue(_varValue5));//放到变量表里
11377
11388
  }}else if(itemExpression.Type==Syntax.Literal)//常量
11378
11389
  {var aryValue=itemExpression.Value;_varName8=itemExpression.Value.toString();isNoneName=true;this.VarTable.set(_varName8,aryValue);//把常量放到变量表里
11379
- }else if(itemExpression.Type==Syntax.CallExpression){if(_j14==0){if(this.IsDrawFunction(itemExpression.Callee.Name)){draw=itemExpression.Out;_drawName=itemExpression.Callee.Name;}else{var _varValue6=itemExpression.Out;_varName8='__temp_sc_'+itemExpression.Callee.Name+'_'+i+'__';isNoneName=true;this.VarTable.set(_varName8,_varValue6);}}}else if(itemExpression.Type==Syntax.BinaryExpression){_varName8="__temp_sb_"+i+"__";var _aryValue2=itemExpression.Out;isNoneName=true;this.VarTable.set(_varName8,_aryValue2);}else if(itemExpression.Type==Syntax.UnaryExpression){_varName8="__temp_sb_"+i+"__";var argument=itemExpression.Argument;var _aryValue3=null;if(argument.Type==Syntax.Literal){_aryValue3=argument.Value;}else if(argument.Type==Syntax.Identifier){var _varName9=argument.Name;_aryValue3=this.ReadVariable(_varName9,item.Expression);}else if(argument.Type==Syntax.BinaryExpression){_aryValue3=argument.Out;}if(itemExpression.Operator=='-'){_aryValue3='-'+_aryValue3;}isNoneName=true;this.VarTable.set(_varName8,_aryValue3);}}var outValue;if(draw)outValue='\u8F93\u51FA: '+draw;else if(isNoneName)outValue='\u8F93\u51FA: '+this.VarTable.get(_varName8);else outValue='\u8F93\u51FA'+_varName8+': '+this.VarTable.get(_varName8);if(color)outValue+=',\u989C\u8272'+this.GetColorExplain(color);if(lineWidth)outValue+=',\u7EBF\u6BB5\u7C97\u7EC6'+this.GetLineWidthExplain(lineWidth);if(isShow==false)outValue+=",不显示";if(isDotLine==true)outValue+=",画虚线";if(isDrawAbove==true)outValue+=',显示在位置之上';if(pointDot&&_varName8)//圆点
11390
+ }else if(itemExpression.Type==Syntax.CallExpression){if(_j15==0){if(this.IsDrawFunction(itemExpression.Callee.Name)){draw=itemExpression.Out;_drawName=itemExpression.Callee.Name;}else{var _varValue6=itemExpression.Out;_varName8='__temp_sc_'+itemExpression.Callee.Name+'_'+i+'__';isNoneName=true;this.VarTable.set(_varName8,_varValue6);}}}else if(itemExpression.Type==Syntax.BinaryExpression){_varName8="__temp_sb_"+i+"__";var _aryValue2=itemExpression.Out;isNoneName=true;this.VarTable.set(_varName8,_aryValue2);}else if(itemExpression.Type==Syntax.UnaryExpression){_varName8="__temp_sb_"+i+"__";var argument=itemExpression.Argument;var _aryValue3=null;if(argument.Type==Syntax.Literal){_aryValue3=argument.Value;}else if(argument.Type==Syntax.Identifier){var _varName9=argument.Name;_aryValue3=this.ReadVariable(_varName9,item.Expression);}else if(argument.Type==Syntax.BinaryExpression){_aryValue3=argument.Out;}if(itemExpression.Operator=='-'){_aryValue3='-'+_aryValue3;}isNoneName=true;this.VarTable.set(_varName8,_aryValue3);}}var outValue;if(draw)outValue='\u8F93\u51FA: '+draw;else if(isNoneName)outValue='\u8F93\u51FA: '+this.VarTable.get(_varName8);else outValue='\u8F93\u51FA'+_varName8+': '+this.VarTable.get(_varName8);if(color)outValue+=',\u989C\u8272'+this.GetColorExplain(color);if(lineWidth)outValue+=',\u7EBF\u6BB5\u7C97\u7EC6'+this.GetLineWidthExplain(lineWidth);if(isShow==false)outValue+=",不显示";if(isDotLine==true)outValue+=",画虚线";if(isDrawAbove==true)outValue+=',显示在位置之上';if(pointDot&&_varName8)//圆点
11380
11391
  {outValue+=",画小圆点线";var _value16={Name:_varName8,Draw:outValue,Radius:g_JSChartResource.POINTDOT.Radius,Type:3};this.OutVarTable.push(_value16);}else if(circleDot&&_varName8)//圆点
11381
11392
  {outValue+=",画小圆圈线";var _value17={Name:_varName8,Draw:outValue,Radius:g_JSChartResource.CIRCLEDOT.Radius,Type:3};this.OutVarTable.push(_value17);}else if(lineStick&&_varName8)//LINESTICK 同时画出柱状线和指标线
11382
11393
  {outValue+=",画出柱状线和指标线";var _value18={Name:_varName8,Draw:outValue,Type:4};this.OutVarTable.push(_value18);}else if(stick&&_varName8)//STICK 画柱状线
11383
11394
  {outValue+=",画柱状线";var _value19={Name:_varName8,Draw:outValue,Type:5};this.OutVarTable.push(_value19);}else if(volStick&&_varName8)//VOLSTICK 画彩色柱状线
11384
11395
  {outValue+=",画成交量柱状线";var _value20={Name:_varName8,Draw:outValue,Type:6};this.OutVarTable.push(_value20);}else if(_varName8&&color){var _value21={Name:_varName8,Data:outValue,Color:color,Type:0};this.OutVarTable.push(_value21);}else if(draw)//画图函数
11385
11396
  {var outVar={Name:_drawName,Draw:outValue,Type:1};this.OutVarTable.push(outVar);}else if(colorStick&&_varName8)//CYW: SUM(VAR4,10)/10000, COLORSTICK; 画上下柱子
11386
- {outValue+=",画彩色柱状线";var _value22={Name:_varName8,Draw:outValue,Color:color,Type:2};this.OutVarTable.push(_value22);}else if(_varName8){var _value23={Name:_varName8,Data:outValue,Type:0};this.OutVarTable.push(_value23);}}}}JSConsole.Complier.Log('[JSExplainer::Run]',this.VarTable);return this.OutVarTable;};this.VisitNode=function(node){switch(node.Type){case Syntax.SequenceExpression:this.VisitSequenceExpression(node);break;case Syntax.ExpressionStatement:this.VisitNode(node.Expression);break;case Syntax.AssignmentExpression:this.VisitAssignmentExpression(node);break;case Syntax.BinaryExpression:case Syntax.LogicalExpression:this.VisitBinaryExpression(node);break;case Syntax.CallExpression:this.VisitCallExpression(node);break;case Syntax.UnaryExpression:this.VisitUnaryExpression(node);break;}};this.VisitSequenceExpression=function(node){for(var _i130 in node.Expression){var _item20=node.Expression[_i130];this.VisitNode(_item20);}};this.VisitUnaryExpression=function(node){if(node.Operator=='-'){var _value24=this.GetNodeValueEx(node.Argument);return'-'+_value24;}return node.Argument.Value;};//函数调用
11387
- this.VisitCallExpression=function(node){var funcName=node.Callee.Name;var args=[];for(var _i131 in node.Arguments){var _item21=node.Arguments[_i131];var _value25=void 0;if(_item21.Type==Syntax.BinaryExpression||_item21.Type==Syntax.LogicalExpression)_value25=this.VisitBinaryExpression(_item21);else if(_item21.Type==Syntax.CallExpression)_value25=this.VisitCallExpression(_item21);else _value25=this.GetNodeValue(_item21);args.push(_value25);}if(node.Callee.Type==Syntax.Literal){var dynamicName=node.Callee.Value;node.Out='\u6307\u6807\u5F15\u7528\''+dynamicName+'\'';return node.Out;}if(JS_EXECUTE_DEBUG_LOG)JSConsole.Complier.Log('[JSExplainer::VisitCallExpression]',funcName,'(',args.toString(),')');if(g_JSComplierResource.IsCustomFunction(funcName)){var functionInfo=g_JSComplierResource.CustomFunction.Data.get(funcName);if(!functionInfo.Description)node.Out='\u81EA\u5B9A\u4E49\u51FD\u6570'+funcName;else node.Out=functionInfo.Description;return node.Out;}node.Out=this.CallFunctionExplain(funcName,args,node);return node.Out;};this.FUNCTION_INFO_LIST=new _map2.default([["REF",{Name:"REF",Param:{Count:2},ToString:function ToString(args){return args[1]+'\u65E5\u524D\u7684'+args[0];}}],["REFX",{Name:"REFX",Param:{Count:2},ToString:function ToString(args){return args[1]+'\u65E5\u540E\u7684'+args[0];}}],["REFV",{Name:"REFV",Param:{Count:2},ToString:function ToString(args){return args[1]+'\u65E5\u524D\u7684(\u672A\u4F5C\u5E73\u6ED1\u5904\u7406)'+args[0];}}],["REFXV",{Name:"REFXV",Param:{Count:2},ToString:function ToString(args){return args[1]+'\u65E5\u540E\u7684(\u672A\u4F5C\u5E73\u6ED1\u5904\u7406)'+args[0];}}],["REFDATE",{Name:"REFDATE",Param:{Count:2},ToString:function ToString(args){return args[1]+'\u65E5'+args[0];}}],["COUNT",{Name:"COUNT",Param:{Count:2},ToString:function ToString(args){return'\u7EDF\u8BA1'+args[1]+'\u65E5\u4E2D\u6EE1\u8DB3'+args[0]+'\u7684\u5929\u6570';}}],["BARSLASTCOUNT",{Name:"BARSLASTCOUNT",Param:{Count:1},ToString:function ToString(args){return'\u6761\u4EF6'+args[0]+'\u8FDE\u7EED\u6210\u7ACB\u6B21\u6570';}}],["BARSCOUNT",{Name:"BARSCOUNT",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u6709\u6548\u6570\u636E\u5468\u671F\u6570';}}],["BARSLAST",{Name:"BARSLAST",Param:{Count:1},ToString:function ToString(args){return'\u4E0A\u6B21'+args[0]+'\u4E0D\u4E3A0\u8DDD\u4ECA\u5929\u6570';}}],["BARSLASTS",{Name:"BARSLASTS",Param:{Count:2},ToString:function ToString(args){return'\u5012\u6570\u7B2CN\u6B21\u6210\u7ACB\u65F6\u8DDD\u4ECA\u7684\u5468\u671F\u6570';}}],["BARSNEXT",{Name:"BARSNEXT",Param:{Count:1},ToString:function ToString(args){return'\u4E0B\u6B21'+args[0]+'\u4E0D\u4E3A0\u8DDD\u4ECA\u5929\u6570';}}],["BARSSINCEN",{Name:"BARSSINCEN",Param:{Count:2},ToString:function ToString(args){return'\u5728'+args[1]+'\u5468\u671F\u5185\u9996\u6B21'+args[0]+'\u8DDD\u4ECA\u5929\u6570';}}],["BARSSINCE",{Name:"BARSSINCE",Param:{Count:1},ToString:function ToString(args){return'\u9996\u6B21'+args[0]+'\u8DDD\u4ECA\u5929\u6570';}}],["HHV",{Name:"HHV",Param:{Count:2},ToString:function ToString(args){return args[1]+'\u65E5\u5185'+args[0]+'\u7684\u6700\u9AD8\u503C';}}],["LLV",{Name:"LLV",Param:{Count:2},ToString:function ToString(args){return args[1]+'\u65E5\u5185'+args[0]+'\u7684\u6700\u4F4E\u503C';}}],["ZTPRICE",{Name:"ZTPRICE",Param:{Count:2},ToString:function ToString(args){return'计算涨停价';}}],["DTPRICE",{Name:"DTPRICE",Param:{Count:2},ToString:function ToString(args){return'计算跌停价';}}],["BACKSET",{Name:"BACKSET",Param:{Count:2},ToString:function ToString(args){return'\u82E5'+args[0]+'\u5219\u5C06\u6700\u8FD1'+args[1]+'\u5468\u671F\u7F6E\u4E3A1';}}],["HOD",{Name:"HOD",Param:{Count:2},ToString:function ToString(args){return args[1]+'\u65E5\u5185'+args[0]+'\u7684\u9AD8\u503C\u540D\u6B21';}}],["LOD",{Name:"LOD",Param:{Count:2},ToString:function ToString(args){return args[1]+'\u65E5\u5185'+args[0]+'\u7684\u4F4E\u503C\u540D\u6B21';}}],["REVERSE",{Name:"REVERSE",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u76F8\u53CD\u6570';}}],["FILTER",{Name:"FILTER",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u8FC7\u6EE4';}}],["FILTERX",{Name:"FILTERX",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u53CD\u5411\u8FC7\u6EE4';}}],["TFILTER",{Name:"TFILTER",Param:{Count:3},ToString:function ToString(args){return'\u4FE1\u53F7\u8FC7\u6EE4(\u591A\u5934)';}}],["SUMBARS",{Name:"SUMBARS",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7D2F\u52A0\u81F3'+args[1]+'\u7684\u5929\u6570';}}],["MA",{Name:"MA",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u7B80\u5355\u79FB\u52A8\u5E73\u5747';}}],["SMA",{Name:"SMA",Param:{Count:3},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5['+args[2]+'\u65E5\u6743\u91CD]\u79FB\u52A8\u5E73\u5747';}}],["MEMA",{Name:"MEMA",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u5E73\u6ED1\u79FB\u52A8\u5E73\u5747';}}],["EMA",{Name:"EMA",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u6307\u6570\u79FB\u52A8\u5E73\u5747';}}],["EXPMA",{Name:"EXPMA",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u6307\u6570\u79FB\u52A8\u5E73\u5747';}}],["EXPMEMA",{Name:"EXPMEMA",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u6307\u6570\u5E73\u6ED1\u79FB\u52A8\u5E73\u5747';}}],["WMA",{Name:"WMA",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u52A0\u6743\u79FB\u52A8\u5E73\u5747';}}],["DMA",{Name:"DMA",Param:{Count:2},ToString:function ToString(args){return'\u4EE5'+args[1]+'\u4E3A\u6743\u91CD'+args[0]+'\u7684\u52A8\u6001\u79FB\u52A8\u5E73\u5747';}}],["XMA",{Name:"XMA",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u504F\u79FB\u79FB\u52A8\u5E73\u5747';}}],["RANGE",{Name:"RANGE",Param:{Count:3},ToString:function ToString(args){return args[0]+'\u4F4D\u4E8E'+args[1]+'\u548C'+args[2]+'\u4E4B\u95F4';}}],["CONST",{Name:"CONST",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u6700\u540E\u4E00\u65E5\u503C';}}],["TOPRANGE",{Name:"TOPRANGE",Param:{Count:1},ToString:function ToString(args){return'\u5F53\u524D\u503C\u662F\u8FD1'+args[0]+'\u5468\u671F\u7684\u6700\u5927\u503C';}}],["LOWRANGE",{Name:"LOWRANGE",Param:{Count:1},ToString:function ToString(args){return'\u5F53\u524D\u503C\u662F\u8FD1'+args[0]+'\u5468\u671F\u7684\u6700\u5C0F\u503C';}}],["FINDHIGH",{Name:"FINDHIGH",Param:{Count:4},ToString:function ToString(args){return args[0]+'\u5728'+args[1]+'\u65E5\u524D\u7684'+args[2]+'\u5929\u5185\u7B2C'+args[3]+'\u4E2A\u6700\u9AD8\u4EF7';}}],["FINDHIGHBARS",{Name:"FINDHIGHBARS",Param:{Count:4},ToString:function ToString(args){return args[0]+'\u5728'+args[1]+'\u65E5\u524D\u7684'+args[2]+'\u5929\u5185\u7B2C'+args[3]+'\u4E2A\u6700\u9AD8\u4EF7\u5230\u5F53\u524D\u5468\u671F\u7684\u5468\u671F\u6570';}}],["FINDLOW",{Name:"FINDLOW",Param:{Count:4},ToString:function ToString(args){return args[0]+'\u5728'+args[1]+'\u65E5\u524D\u7684'+args[2]+'\u5929\u5185\u7B2C'+args[3]+'\u4E2A\u6700\u4F4E\u4EF7';}}],["FINDLOWBARS",{Name:"FINDLOWBARS",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u5728'+args[1]+'\u65E5\u524D\u7684'+args[2]+'\u5929\u5185\u7B2C'+args[3]+'\u4E2A\u6700\u4F4E\u4EF7\u5230\u5F53\u524D\u5468\u671F\u7684\u5468\u671F\u6570';}}],["SUM",{Name:"SUM",Param:{Count:2},ToString:function ToString(args){return''+args[0]+args[1]+'\u65E5\u7D2F\u52A0';}}],["MULAR",{Name:"MULAR",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u548C'+args[1]+'\u65E5\u7D2F\u4E58';}}],["AMA",{Name:"AMA",Param:{Count:2},ToString:function ToString(args){return'\u4EE5'+args[1]+'\u4E3A\u6743\u91CD'+args[0]+'\u7684\u81EA\u9002\u5E94\u5747\u7EBF';}}],["TMA",{Name:"TMA",Param:{Count:3},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5['+args[2]+'\u65E5\u6743\u91CD]\u79FB\u52A8\u5E73\u5747';}}],["CROSS",{Name:"CROSS",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u4E0A\u7A7F'+args[1];}}],["LONGCROSS",{Name:"LONGCROSS",Param:{Count:3},ToString:function ToString(args){return args[0]+'\u5C0F\u4E8E'+args[1]+'\u4FDD\u6301'+args[2]+'\u4E2A\u4EA4\u6613\u65E5\u540E\u4EA4\u53C9\u4E0A\u7A7F';}}],["UPNDAY",{Name:"UPNDAY",Param:{Count:2},ToString:function ToString(args){return'\u6700\u8FD1'+args[1]+'\u65E5'+args[0]+'\u8FDE\u6DA8';}}],["DOWNNDAY",{Name:"DOWNNDAY",Param:{Count:2},ToString:function ToString(args){return'\u6700\u8FD1'+args[1]+'\u65E5'+args[0]+'\u8FDE\u8DCC';}}],["NDAY",{Name:"NDAY",Param:{Count:3},ToString:function ToString(args){return'\u6700\u8FD1'+args[2]+'\u65E5'+args[0]+'\u4E00\u76F4\u5927\u4E8E'+args[1];}}],["EXIST",{Name:"EXIST",Param:{Count:2},ToString:function ToString(args){return'\u6700\u8FD1'+args[1]+'\u65E5\u5B58\u5728'+args[0];}}],["EXISTR",{Name:"EXISTR",Param:{Count:3},ToString:function ToString(args){return'\u4ECE\u524D'+args[1]+'\u65E5\u5230\u524D'+args[2]+'\u65E5\u5B58\u5728'+args[0];}}],["EVERY",{Name:"EVERY",Param:{Count:2},ToString:function ToString(args){return'\u6700\u8FD1'+args[1]+'\u65E5\u4E00\u76F4\u5B58\u5728'+args[0];}}],["LAST",{Name:"LAST",Param:{Count:3},ToString:function ToString(args){return'\u4ECE\u524D'+args[1]+'\u65E5\u5230\u524D'+args[2]+'\u65E5\u6301\u7EED'+args[0];}}],["NOT",{Name:"NOT",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u53D6\u53CD';}}],["IF",{Name:"IF",Param:{Count:3},ToString:function ToString(args){return'\u5982\u679C'+args[0]+',\u8FD4\u56DE'+args[1]+',\u5426\u5219\u8FD4\u56DE'+args[2];}}],["IFF",{Name:"IFF",Param:{Count:3},ToString:function ToString(args){return'\u5982\u679C'+args[0]+',\u8FD4\u56DE'+args[1]+',\u5426\u5219\u8FD4\u56DE'+args[2];}}],["IFN",{Name:"IFN",Param:{Count:3},ToString:function ToString(args){return'\u5982\u679C'+args[0]+',\u8FD4\u56DE'+args[1]+',\u5426\u5219\u8FD4\u56DE'+args[2];}}],["IFC",{Name:"IFC",Param:{Count:3},ToString:function ToString(args){return'\u5982\u679C'+args[0]+',\u8FD4\u56DE'+args[1]+',\u5426\u5219\u8FD4\u56DE'+args[2];}}],["TESTSKIP",{Name:"TESTSKIP",Param:{Count:1},ToString:function ToString(args){return'\u5982\u679C\u6EE1\u8DB3\u6761\u4EF6'+args[0]+',\u516C\u5F0F\u8FD4\u56DE';}}],["VALUEWHEN",{Name:"VALUEWHEN",Param:{Count:2},ToString:function ToString(args){return'\u5982\u679C'+args[0]+',\u8FD4\u56DE'+args[1]+',\u5426\u5219\u8FD4\u56DE\u4E0A\u4E2A\u8F93\u51FA\u503C ';}}],["MAX",{Name:"MAX",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u548C'+args[1]+'\u7684\u8F83\u5927\u503C';}}],["MIN",{Name:"MIN",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u548C'+args[1]+'\u7684\u8F83\u5C0F\u503C';}}],["ACOS",{Name:"ACOS",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u53CD\u4F59\u5F26';}}],["ASIN",{Name:"ASIN",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u53CD\u6B63\u5F26';}}],["ATAN",{Name:"ATAN",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u53CD\u6B63\u5207';}}],["COS",{Name:"COS",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u4F59\u5F26';}}],["SIN",{Name:"SIN",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u6B63\u5F26';}}],["TAN",{Name:"TAN",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u6B63\u5207';}}],["EXP",{Name:"EXP",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u6307\u6570';}}],["LN",{Name:"LN",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u81EA\u7136\u5BF9\u6570';}}],["LOG",{Name:"LOG",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u5BF9\u6570';}}],["SQRT",{Name:"SQRT",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u5F00\u65B9';}}],["ABS",{Name:"ABS",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u7EDD\u5BF9\u503C';}}],["POW",{Name:"POW",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u4E58\u5E42';}}],["CEILING",{Name:"CEILING",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u5411\u4E0A\u820D\u5165';}}],["FLOOR",{Name:"FLOOR",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u5411\u4E0A\u820D\u5165';}}],["INTPART",{Name:"INTPART",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u6574\u6570\u90E8\u5206';}}],["BETWEEN",{Name:"BETWEEN",Param:{Count:3},ToString:function ToString(args){return args[0]+'\u4F4D\u4E8E'+args[1]+'\u548C'+args[2]+'\u4E4B\u95F4';}}],["FRACPART",{Name:"FRACPART",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u5C0F\u6570\u90E8\u5206';}}],["ROUND",{Name:"ROUND",Param:{Count:1},ToString:function ToString(args){return'\u5BF9'+args[0]+'(\u8FDB\u884C)\u56DB\u820D\u4E94\u5165';}}],["ROUND2",{Name:"ROUND2",Param:{Count:2},ToString:function ToString(args){return'\u5BF9'+args[0]+'(\u8FDB\u884C)\u56DB\u820D\u4E94\u5165';}}],["SIGN",{Name:"SIGN",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u7B26\u53F7';}}],["MOD",{Name:"MOD",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u5173\u4E8E'+args[1]+'\u7684\u6A21';}}],["RAND",{Name:"RAND",Param:{Count:1},ToString:function ToString(args){return'\u968F\u673A\u6B63\u6574\u6570';}}],["AVEDEV",{Name:"AVEDEV",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u5E73\u5747\u7EDD\u5BF9\u504F\u5DEE';}}],["DEVSQ",{Name:"DEVSQ",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u6570\u636E\u504F\u5DEE\u5E73\u65B9\u548C';}}],["FORCAST",{Name:"FORCAST",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u7EBF\u6027\u56DE\u5F52\u9884\u6D4B\u503C';}}],["TSMA",{Name:"TSMA",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u5728'+args[1]+'\u4E2A\u5468\u671F\u5185\u7684\u65F6\u95F4\u5E8F\u5217\u4E09\u89D2\u79FB\u52A8\u5E73\u5747';}}],["SLOPE",{Name:"SLOPE",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u7EBF\u6027\u56DE\u5F52\u659C\u7387';}}],["STD",{Name:"STD",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u4F30\u7B97\u6807\u51C6\u5DEE';}}],["STDP",{Name:"STDP",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u603B\u4F53\u6807\u51C6\u5DEE';}}],["STDDEV",{Name:"STDDEV",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u6807\u51C6\u504F\u5DEE';}}],["VAR",{Name:"VAR",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u4F30\u7B97\u6837\u672C\u65B9\u5DEE';}}],["VARP",{Name:"VARP",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u603B\u4F53\u6837\u672C\u65B9\u5DEE';}}],["COVAR",{Name:"COVAR",Param:{Count:3},ToString:function ToString(args){return args[0]+'\u548C'+args[1]+'\u7684'+args[2]+'\u5468\u671F\u7684\u534F\u65B9\u5DEE';}}],["RELATE",{Name:"RELATE",Param:{Count:3},ToString:function ToString(args){return args[0]+'\u548C'+args[1]+'\u7684'+args[0]+'\u5468\u671F\u7684\u76F8\u5173\u7CFB\u6570';}}],["BETA",{Name:"BETA",Param:{Count:1},ToString:function ToString(args){return'\u03B2(Beta)\u7CFB\u6570';}}],["BETAEX",{Name:"BETAEX",Param:{Count:3},ToString:function ToString(args){return args[0]+'\u548C'+args[1]+'\u7684'+args[2]+'\u5468\u671F\u7684\u76F8\u5173\u653E\u5927\u7CFB\u6570';}}],["COST",{Name:"COST",Param:{Count:1},ToString:function ToString(args){return'\u83B7\u5229\u76D8\u4E3A'+args[0]+'%\u7684\u6210\u672C\u5206\u5E03';}}],["WINNER",{Name:"WINNER",Param:{Count:1},ToString:function ToString(args){return'\u4EE5'+args[0]+'\u8BA1\u7B97\u7684\u83B7\u5229\u76D8\u6BD4\u4F8B';}}],["LWINNER",{Name:"LWINNER",Param:{Count:2},ToString:function ToString(args){return'\u6700\u8FD1'+args[0]+'\u65E5\u90A3\u90E8\u5206\u6210\u672C\u4EE5'+args[1]+'\u4EF7\u683C\u5356\u51FA\u7684\u83B7\u5229\u76D8\u6BD4\u4F8B';}}],["PWINNER",{Name:"PWINNER",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u65E5\u524D\u90A3\u90E8\u5206\u6210\u672C\u4EE5'+args[1]+'\u4EF7\u683C\u5356\u51FA\u7684\u83B7\u5229\u76D8\u6BD4\u4F8B';}}],["COSTEX",{Name:"COSTEX",Param:{Count:2},ToString:function ToString(args){return'\u4F4D\u4E8E\u4EF7\u683C'+args[0]+'\u548C'+args[1]+'\u95F4\u7684\u6210\u672C';}}],["PPART",{Name:"PPART",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u65E5\u524D\u90A3\u90E8\u5206\u6210\u672C\u5360\u603B\u6210\u672C\u7684\u6BD4\u4F8B';}}],["SAR",{Name:"SAR",Param:{Count:3},ToString:function ToString(args){return'\u6B65\u957F\u4E3A'+args[1]+'\u6781\u9650\u503C\u4E3A'+args[0]+'\u7684'+args[2]+'\u65E5\u629B\u7269\u8F6C\u5411';}}],["SARTURN",{Name:"SARTURN",Param:{Count:3},ToString:function ToString(args){return'\u6B65\u957F\u4E3A'+args[1]+'\u6781\u9650\u503C\u4E3A'+args[0]+'\u7684'+args[2]+'\u65E5\u629B\u7269\u8F6C\u5411\u70B9';}}],//字符串函数
11397
+ {outValue+=",画彩色柱状线";var _value22={Name:_varName8,Draw:outValue,Color:color,Type:2};this.OutVarTable.push(_value22);}else if(_varName8){var _value23={Name:_varName8,Data:outValue,Type:0};this.OutVarTable.push(_value23);}}}}JSConsole.Complier.Log('[JSExplainer::Run]',this.VarTable);return this.OutVarTable;};this.VisitNode=function(node){switch(node.Type){case Syntax.SequenceExpression:this.VisitSequenceExpression(node);break;case Syntax.ExpressionStatement:this.VisitNode(node.Expression);break;case Syntax.AssignmentExpression:this.VisitAssignmentExpression(node);break;case Syntax.BinaryExpression:case Syntax.LogicalExpression:this.VisitBinaryExpression(node);break;case Syntax.CallExpression:this.VisitCallExpression(node);break;case Syntax.UnaryExpression:this.VisitUnaryExpression(node);break;}};this.VisitSequenceExpression=function(node){for(var _i132 in node.Expression){var _item20=node.Expression[_i132];this.VisitNode(_item20);}};this.VisitUnaryExpression=function(node){if(node.Operator=='-'){var _value24=this.GetNodeValueEx(node.Argument);return'-'+_value24;}return node.Argument.Value;};//函数调用
11398
+ this.VisitCallExpression=function(node){var funcName=node.Callee.Name;var args=[];for(var _i133 in node.Arguments){var _item21=node.Arguments[_i133];var _value25=void 0;if(_item21.Type==Syntax.BinaryExpression||_item21.Type==Syntax.LogicalExpression)_value25=this.VisitBinaryExpression(_item21);else if(_item21.Type==Syntax.CallExpression)_value25=this.VisitCallExpression(_item21);else _value25=this.GetNodeValue(_item21);args.push(_value25);}if(node.Callee.Type==Syntax.Literal){var dynamicName=node.Callee.Value;node.Out='\u6307\u6807\u5F15\u7528\''+dynamicName+'\'';return node.Out;}if(JS_EXECUTE_DEBUG_LOG)JSConsole.Complier.Log('[JSExplainer::VisitCallExpression]',funcName,'(',args.toString(),')');if(g_JSComplierResource.IsCustomFunction(funcName)){var functionInfo=g_JSComplierResource.CustomFunction.Data.get(funcName);if(!functionInfo.Description)node.Out='\u81EA\u5B9A\u4E49\u51FD\u6570'+funcName;else node.Out=functionInfo.Description;return node.Out;}node.Out=this.CallFunctionExplain(funcName,args,node);return node.Out;};this.FUNCTION_INFO_LIST=new _map2.default([["REF",{Name:"REF",Param:{Count:2},ToString:function ToString(args){return args[1]+'\u65E5\u524D\u7684'+args[0];}}],["REFX",{Name:"REFX",Param:{Count:2},ToString:function ToString(args){return args[1]+'\u65E5\u540E\u7684'+args[0];}}],["REFV",{Name:"REFV",Param:{Count:2},ToString:function ToString(args){return args[1]+'\u65E5\u524D\u7684(\u672A\u4F5C\u5E73\u6ED1\u5904\u7406)'+args[0];}}],["REFXV",{Name:"REFXV",Param:{Count:2},ToString:function ToString(args){return args[1]+'\u65E5\u540E\u7684(\u672A\u4F5C\u5E73\u6ED1\u5904\u7406)'+args[0];}}],["REFDATE",{Name:"REFDATE",Param:{Count:2},ToString:function ToString(args){return args[1]+'\u65E5'+args[0];}}],["COUNT",{Name:"COUNT",Param:{Count:2},ToString:function ToString(args){return'\u7EDF\u8BA1'+args[1]+'\u65E5\u4E2D\u6EE1\u8DB3'+args[0]+'\u7684\u5929\u6570';}}],["BARSLASTCOUNT",{Name:"BARSLASTCOUNT",Param:{Count:1},ToString:function ToString(args){return'\u6761\u4EF6'+args[0]+'\u8FDE\u7EED\u6210\u7ACB\u6B21\u6570';}}],["BARSCOUNT",{Name:"BARSCOUNT",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u6709\u6548\u6570\u636E\u5468\u671F\u6570';}}],["BARSLAST",{Name:"BARSLAST",Param:{Count:1},ToString:function ToString(args){return'\u4E0A\u6B21'+args[0]+'\u4E0D\u4E3A0\u8DDD\u4ECA\u5929\u6570';}}],["BARSLASTS",{Name:"BARSLASTS",Param:{Count:2},ToString:function ToString(args){return'\u5012\u6570\u7B2CN\u6B21\u6210\u7ACB\u65F6\u8DDD\u4ECA\u7684\u5468\u671F\u6570';}}],["BARSNEXT",{Name:"BARSNEXT",Param:{Count:1},ToString:function ToString(args){return'\u4E0B\u6B21'+args[0]+'\u4E0D\u4E3A0\u8DDD\u4ECA\u5929\u6570';}}],["BARSSINCEN",{Name:"BARSSINCEN",Param:{Count:2},ToString:function ToString(args){return'\u5728'+args[1]+'\u5468\u671F\u5185\u9996\u6B21'+args[0]+'\u8DDD\u4ECA\u5929\u6570';}}],["BARSSINCE",{Name:"BARSSINCE",Param:{Count:1},ToString:function ToString(args){return'\u9996\u6B21'+args[0]+'\u8DDD\u4ECA\u5929\u6570';}}],["HHV",{Name:"HHV",Param:{Count:2},ToString:function ToString(args){return args[1]+'\u65E5\u5185'+args[0]+'\u7684\u6700\u9AD8\u503C';}}],["LLV",{Name:"LLV",Param:{Count:2},ToString:function ToString(args){return args[1]+'\u65E5\u5185'+args[0]+'\u7684\u6700\u4F4E\u503C';}}],["ZTPRICE",{Name:"ZTPRICE",Param:{Count:2},ToString:function ToString(args){return'计算涨停价';}}],["DTPRICE",{Name:"DTPRICE",Param:{Count:2},ToString:function ToString(args){return'计算跌停价';}}],["BACKSET",{Name:"BACKSET",Param:{Count:2},ToString:function ToString(args){return'\u82E5'+args[0]+'\u5219\u5C06\u6700\u8FD1'+args[1]+'\u5468\u671F\u7F6E\u4E3A1';}}],["HOD",{Name:"HOD",Param:{Count:2},ToString:function ToString(args){return args[1]+'\u65E5\u5185'+args[0]+'\u7684\u9AD8\u503C\u540D\u6B21';}}],["LOD",{Name:"LOD",Param:{Count:2},ToString:function ToString(args){return args[1]+'\u65E5\u5185'+args[0]+'\u7684\u4F4E\u503C\u540D\u6B21';}}],["REVERSE",{Name:"REVERSE",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u76F8\u53CD\u6570';}}],["FILTER",{Name:"FILTER",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u8FC7\u6EE4';}}],["FILTERX",{Name:"FILTERX",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u53CD\u5411\u8FC7\u6EE4';}}],["TFILTER",{Name:"TFILTER",Param:{Count:3},ToString:function ToString(args){return'\u4FE1\u53F7\u8FC7\u6EE4(\u591A\u5934)';}}],["SUMBARS",{Name:"SUMBARS",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7D2F\u52A0\u81F3'+args[1]+'\u7684\u5929\u6570';}}],["MA",{Name:"MA",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u7B80\u5355\u79FB\u52A8\u5E73\u5747';}}],["SMA",{Name:"SMA",Param:{Count:3},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5['+args[2]+'\u65E5\u6743\u91CD]\u79FB\u52A8\u5E73\u5747';}}],["MEMA",{Name:"MEMA",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u5E73\u6ED1\u79FB\u52A8\u5E73\u5747';}}],["EMA",{Name:"EMA",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u6307\u6570\u79FB\u52A8\u5E73\u5747';}}],["EXPMA",{Name:"EXPMA",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u6307\u6570\u79FB\u52A8\u5E73\u5747';}}],["EXPMEMA",{Name:"EXPMEMA",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u6307\u6570\u5E73\u6ED1\u79FB\u52A8\u5E73\u5747';}}],["WMA",{Name:"WMA",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u52A0\u6743\u79FB\u52A8\u5E73\u5747';}}],["DMA",{Name:"DMA",Param:{Count:2},ToString:function ToString(args){return'\u4EE5'+args[1]+'\u4E3A\u6743\u91CD'+args[0]+'\u7684\u52A8\u6001\u79FB\u52A8\u5E73\u5747';}}],["XMA",{Name:"XMA",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u504F\u79FB\u79FB\u52A8\u5E73\u5747';}}],["RANGE",{Name:"RANGE",Param:{Count:3},ToString:function ToString(args){return args[0]+'\u4F4D\u4E8E'+args[1]+'\u548C'+args[2]+'\u4E4B\u95F4';}}],["CONST",{Name:"CONST",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u6700\u540E\u4E00\u65E5\u503C';}}],["TOPRANGE",{Name:"TOPRANGE",Param:{Count:1},ToString:function ToString(args){return'\u5F53\u524D\u503C\u662F\u8FD1'+args[0]+'\u5468\u671F\u7684\u6700\u5927\u503C';}}],["LOWRANGE",{Name:"LOWRANGE",Param:{Count:1},ToString:function ToString(args){return'\u5F53\u524D\u503C\u662F\u8FD1'+args[0]+'\u5468\u671F\u7684\u6700\u5C0F\u503C';}}],["FINDHIGH",{Name:"FINDHIGH",Param:{Count:4},ToString:function ToString(args){return args[0]+'\u5728'+args[1]+'\u65E5\u524D\u7684'+args[2]+'\u5929\u5185\u7B2C'+args[3]+'\u4E2A\u6700\u9AD8\u4EF7';}}],["FINDHIGHBARS",{Name:"FINDHIGHBARS",Param:{Count:4},ToString:function ToString(args){return args[0]+'\u5728'+args[1]+'\u65E5\u524D\u7684'+args[2]+'\u5929\u5185\u7B2C'+args[3]+'\u4E2A\u6700\u9AD8\u4EF7\u5230\u5F53\u524D\u5468\u671F\u7684\u5468\u671F\u6570';}}],["FINDLOW",{Name:"FINDLOW",Param:{Count:4},ToString:function ToString(args){return args[0]+'\u5728'+args[1]+'\u65E5\u524D\u7684'+args[2]+'\u5929\u5185\u7B2C'+args[3]+'\u4E2A\u6700\u4F4E\u4EF7';}}],["FINDLOWBARS",{Name:"FINDLOWBARS",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u5728'+args[1]+'\u65E5\u524D\u7684'+args[2]+'\u5929\u5185\u7B2C'+args[3]+'\u4E2A\u6700\u4F4E\u4EF7\u5230\u5F53\u524D\u5468\u671F\u7684\u5468\u671F\u6570';}}],["SUM",{Name:"SUM",Param:{Count:2},ToString:function ToString(args){return''+args[0]+args[1]+'\u65E5\u7D2F\u52A0';}}],["MULAR",{Name:"MULAR",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u548C'+args[1]+'\u65E5\u7D2F\u4E58';}}],["AMA",{Name:"AMA",Param:{Count:2},ToString:function ToString(args){return'\u4EE5'+args[1]+'\u4E3A\u6743\u91CD'+args[0]+'\u7684\u81EA\u9002\u5E94\u5747\u7EBF';}}],["TMA",{Name:"TMA",Param:{Count:3},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5['+args[2]+'\u65E5\u6743\u91CD]\u79FB\u52A8\u5E73\u5747';}}],["CROSS",{Name:"CROSS",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u4E0A\u7A7F'+args[1];}}],["LONGCROSS",{Name:"LONGCROSS",Param:{Count:3},ToString:function ToString(args){return args[0]+'\u5C0F\u4E8E'+args[1]+'\u4FDD\u6301'+args[2]+'\u4E2A\u4EA4\u6613\u65E5\u540E\u4EA4\u53C9\u4E0A\u7A7F';}}],["UPNDAY",{Name:"UPNDAY",Param:{Count:2},ToString:function ToString(args){return'\u6700\u8FD1'+args[1]+'\u65E5'+args[0]+'\u8FDE\u6DA8';}}],["DOWNNDAY",{Name:"DOWNNDAY",Param:{Count:2},ToString:function ToString(args){return'\u6700\u8FD1'+args[1]+'\u65E5'+args[0]+'\u8FDE\u8DCC';}}],["NDAY",{Name:"NDAY",Param:{Count:3},ToString:function ToString(args){return'\u6700\u8FD1'+args[2]+'\u65E5'+args[0]+'\u4E00\u76F4\u5927\u4E8E'+args[1];}}],["EXIST",{Name:"EXIST",Param:{Count:2},ToString:function ToString(args){return'\u6700\u8FD1'+args[1]+'\u65E5\u5B58\u5728'+args[0];}}],["EXISTR",{Name:"EXISTR",Param:{Count:3},ToString:function ToString(args){return'\u4ECE\u524D'+args[1]+'\u65E5\u5230\u524D'+args[2]+'\u65E5\u5B58\u5728'+args[0];}}],["EVERY",{Name:"EVERY",Param:{Count:2},ToString:function ToString(args){return'\u6700\u8FD1'+args[1]+'\u65E5\u4E00\u76F4\u5B58\u5728'+args[0];}}],["LAST",{Name:"LAST",Param:{Count:3},ToString:function ToString(args){return'\u4ECE\u524D'+args[1]+'\u65E5\u5230\u524D'+args[2]+'\u65E5\u6301\u7EED'+args[0];}}],["NOT",{Name:"NOT",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u53D6\u53CD';}}],["IF",{Name:"IF",Param:{Count:3},ToString:function ToString(args){return'\u5982\u679C'+args[0]+',\u8FD4\u56DE'+args[1]+',\u5426\u5219\u8FD4\u56DE'+args[2];}}],["IFF",{Name:"IFF",Param:{Count:3},ToString:function ToString(args){return'\u5982\u679C'+args[0]+',\u8FD4\u56DE'+args[1]+',\u5426\u5219\u8FD4\u56DE'+args[2];}}],["IFN",{Name:"IFN",Param:{Count:3},ToString:function ToString(args){return'\u5982\u679C'+args[0]+',\u8FD4\u56DE'+args[1]+',\u5426\u5219\u8FD4\u56DE'+args[2];}}],["IFC",{Name:"IFC",Param:{Count:3},ToString:function ToString(args){return'\u5982\u679C'+args[0]+',\u8FD4\u56DE'+args[1]+',\u5426\u5219\u8FD4\u56DE'+args[2];}}],["TESTSKIP",{Name:"TESTSKIP",Param:{Count:1},ToString:function ToString(args){return'\u5982\u679C\u6EE1\u8DB3\u6761\u4EF6'+args[0]+',\u516C\u5F0F\u8FD4\u56DE';}}],["VALUEWHEN",{Name:"VALUEWHEN",Param:{Count:2},ToString:function ToString(args){return'\u5982\u679C'+args[0]+',\u8FD4\u56DE'+args[1]+',\u5426\u5219\u8FD4\u56DE\u4E0A\u4E2A\u8F93\u51FA\u503C ';}}],["MAX",{Name:"MAX",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u548C'+args[1]+'\u7684\u8F83\u5927\u503C';}}],["MIN",{Name:"MIN",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u548C'+args[1]+'\u7684\u8F83\u5C0F\u503C';}}],["ACOS",{Name:"ACOS",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u53CD\u4F59\u5F26';}}],["ASIN",{Name:"ASIN",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u53CD\u6B63\u5F26';}}],["ATAN",{Name:"ATAN",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u53CD\u6B63\u5207';}}],["COS",{Name:"COS",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u4F59\u5F26';}}],["SIN",{Name:"SIN",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u6B63\u5F26';}}],["TAN",{Name:"TAN",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u6B63\u5207';}}],["EXP",{Name:"EXP",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u6307\u6570';}}],["LN",{Name:"LN",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u81EA\u7136\u5BF9\u6570';}}],["LOG",{Name:"LOG",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u5BF9\u6570';}}],["SQRT",{Name:"SQRT",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u5F00\u65B9';}}],["ABS",{Name:"ABS",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u7EDD\u5BF9\u503C';}}],["POW",{Name:"POW",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u4E58\u5E42';}}],["CEILING",{Name:"CEILING",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u5411\u4E0A\u820D\u5165';}}],["FLOOR",{Name:"FLOOR",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u5411\u4E0A\u820D\u5165';}}],["INTPART",{Name:"INTPART",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u6574\u6570\u90E8\u5206';}}],["BETWEEN",{Name:"BETWEEN",Param:{Count:3},ToString:function ToString(args){return args[0]+'\u4F4D\u4E8E'+args[1]+'\u548C'+args[2]+'\u4E4B\u95F4';}}],["FRACPART",{Name:"FRACPART",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u5C0F\u6570\u90E8\u5206';}}],["ROUND",{Name:"ROUND",Param:{Count:1},ToString:function ToString(args){return'\u5BF9'+args[0]+'(\u8FDB\u884C)\u56DB\u820D\u4E94\u5165';}}],["ROUND2",{Name:"ROUND2",Param:{Count:2},ToString:function ToString(args){return'\u5BF9'+args[0]+'(\u8FDB\u884C)\u56DB\u820D\u4E94\u5165';}}],["SIGN",{Name:"SIGN",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u7B26\u53F7';}}],["MOD",{Name:"MOD",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u5173\u4E8E'+args[1]+'\u7684\u6A21';}}],["RAND",{Name:"RAND",Param:{Count:1},ToString:function ToString(args){return'\u968F\u673A\u6B63\u6574\u6570';}}],["AVEDEV",{Name:"AVEDEV",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u5E73\u5747\u7EDD\u5BF9\u504F\u5DEE';}}],["DEVSQ",{Name:"DEVSQ",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u6570\u636E\u504F\u5DEE\u5E73\u65B9\u548C';}}],["FORCAST",{Name:"FORCAST",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u7EBF\u6027\u56DE\u5F52\u9884\u6D4B\u503C';}}],["TSMA",{Name:"TSMA",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u5728'+args[1]+'\u4E2A\u5468\u671F\u5185\u7684\u65F6\u95F4\u5E8F\u5217\u4E09\u89D2\u79FB\u52A8\u5E73\u5747';}}],["SLOPE",{Name:"SLOPE",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u7EBF\u6027\u56DE\u5F52\u659C\u7387';}}],["STD",{Name:"STD",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u4F30\u7B97\u6807\u51C6\u5DEE';}}],["STDP",{Name:"STDP",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u603B\u4F53\u6807\u51C6\u5DEE';}}],["STDDEV",{Name:"STDDEV",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u6807\u51C6\u504F\u5DEE';}}],["VAR",{Name:"VAR",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u4F30\u7B97\u6837\u672C\u65B9\u5DEE';}}],["VARP",{Name:"VARP",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u603B\u4F53\u6837\u672C\u65B9\u5DEE';}}],["COVAR",{Name:"COVAR",Param:{Count:3},ToString:function ToString(args){return args[0]+'\u548C'+args[1]+'\u7684'+args[2]+'\u5468\u671F\u7684\u534F\u65B9\u5DEE';}}],["RELATE",{Name:"RELATE",Param:{Count:3},ToString:function ToString(args){return args[0]+'\u548C'+args[1]+'\u7684'+args[0]+'\u5468\u671F\u7684\u76F8\u5173\u7CFB\u6570';}}],["BETA",{Name:"BETA",Param:{Count:1},ToString:function ToString(args){return'\u03B2(Beta)\u7CFB\u6570';}}],["BETAEX",{Name:"BETAEX",Param:{Count:3},ToString:function ToString(args){return args[0]+'\u548C'+args[1]+'\u7684'+args[2]+'\u5468\u671F\u7684\u76F8\u5173\u653E\u5927\u7CFB\u6570';}}],["COST",{Name:"COST",Param:{Count:1},ToString:function ToString(args){return'\u83B7\u5229\u76D8\u4E3A'+args[0]+'%\u7684\u6210\u672C\u5206\u5E03';}}],["WINNER",{Name:"WINNER",Param:{Count:1},ToString:function ToString(args){return'\u4EE5'+args[0]+'\u8BA1\u7B97\u7684\u83B7\u5229\u76D8\u6BD4\u4F8B';}}],["LWINNER",{Name:"LWINNER",Param:{Count:2},ToString:function ToString(args){return'\u6700\u8FD1'+args[0]+'\u65E5\u90A3\u90E8\u5206\u6210\u672C\u4EE5'+args[1]+'\u4EF7\u683C\u5356\u51FA\u7684\u83B7\u5229\u76D8\u6BD4\u4F8B';}}],["PWINNER",{Name:"PWINNER",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u65E5\u524D\u90A3\u90E8\u5206\u6210\u672C\u4EE5'+args[1]+'\u4EF7\u683C\u5356\u51FA\u7684\u83B7\u5229\u76D8\u6BD4\u4F8B';}}],["COSTEX",{Name:"COSTEX",Param:{Count:2},ToString:function ToString(args){return'\u4F4D\u4E8E\u4EF7\u683C'+args[0]+'\u548C'+args[1]+'\u95F4\u7684\u6210\u672C';}}],["PPART",{Name:"PPART",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u65E5\u524D\u90A3\u90E8\u5206\u6210\u672C\u5360\u603B\u6210\u672C\u7684\u6BD4\u4F8B';}}],["SAR",{Name:"SAR",Param:{Count:3},ToString:function ToString(args){return'\u6B65\u957F\u4E3A'+args[1]+'\u6781\u9650\u503C\u4E3A'+args[0]+'\u7684'+args[2]+'\u65E5\u629B\u7269\u8F6C\u5411';}}],["SARTURN",{Name:"SARTURN",Param:{Count:3},ToString:function ToString(args){return'\u6B65\u957F\u4E3A'+args[1]+'\u6781\u9650\u503C\u4E3A'+args[0]+'\u7684'+args[2]+'\u65E5\u629B\u7269\u8F6C\u5411\u70B9';}}],//字符串函数
11388
11399
  ["CON2STR",{Name:"CON2STR",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u8F6C\u4E3A\u5B57\u7B26\u4E32';}}],["VAR2STR",{Name:"VAR2STR",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u8F6C\u4E3A\u5B57\u7B26\u4E32';}}],["STR2CON",{Name:"STR2CON",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u8F6C\u4E3A\u6570\u5B57';}}],["STRLEN",{Name:"STRLEN",Param:{Count:1},ToString:function ToString(args){return'\u5F97\u5230'+args[0]+'\u5B57\u7B26\u4E32\u957F\u5EA6';}}],["STRCAT",{Name:"STRCAT",Param:{Count:2},ToString:function ToString(args){return'\u5B57\u7B26\u4E32\u76F8\u52A0';}}],["VARCAT",{Name:"VARCAT",Param:{Count:2},ToString:function ToString(args){return'\u5B57\u7B26\u4E32\u76F8\u52A0';}}],["STRSPACE",{Name:"STRSPACE",Param:{Count:1},ToString:function ToString(args){return'\u5B57\u7B26\u4E32'+args[0]+'\u52A0\u4E00\u7A7A\u683C';}}],["SUBSTR",{Name:"SUBSTR",Param:{Count:3},ToString:function ToString(args){return'\u5B57\u7B26\u4E32'+args[0]+'\u4E2D\u53D6\u4E00\u90E8\u5206';}}],["STRCMP",{Name:"STRCMP",Param:{Count:2},ToString:function ToString(args){return'\u5B57\u7B26\u4E32'+args[0]+'\u548C\u5B57\u7B26\u4E32'+args[1]+'\u6BD4\u8F83';}}],["FINDSTR",{Name:"FINDSTR",Param:{Count:2},ToString:function ToString(args){return'\u5B57\u7B26\u4E32'+args[0]+'\u4E2D\u67E5\u627E\u5B57\u7B26\u4E32'+args[1];}}],["NAMEINCLUDE",{Name:"NAMEINCLUDE",Param:{Count:1},ToString:function ToString(args){return'\u67E5\u627E\u54C1\u79CD\u540D\u79F0\u4E2D\u5305\u542B'+args[0];}}],["CODELIKE",{Name:"CODELIKE",Param:{Count:1},ToString:function ToString(args){return'\u67E5\u627E\u54C1\u79CD\u540D\u79F0\u4E2D\u5305\u542B'+args[0];}}],["INBLOCK",{Name:"AVEDEV",Param:{Count:1},ToString:function ToString(args){return'\u5C5E\u4E8E'+args[0]+'\u677F\u5757';}}],["STKINDI",{Name:"STKINDI",Param:{Dynamic:true},ToString:function ToString(args){return"指标引用";}}],["STRFORMAT",{Name:"STRFORMAT",Param:{Dynamic:true},ToString:function ToString(args){return'\u683C\u5F0F\u5316'+args[0]+'\u5B57\u7B26\u4E32';}}],["NAMELIKE",{Name:"NAMELIKE",Param:{Count:1},ToString:function ToString(args){return'\u54C1\u79CD\u540D\u79F0\u662F\u5426\u4EE5\''+args[0]+'\'\u5F00\u5934';}}],["HHVBARS",{Name:"HHVBARS",Param:{Count:2},ToString:function ToString(args){if(args[1]==0)return'\u5386\u53F2'+args[0]+'\u65B0\u9AD8\u8DDD\u4ECA\u5929\u6570';return args[1]+'\u65E5\u5185'+args[0]+'\u65B0\u9AD8\u8DDD\u4ECA\u5929\u6570';}}],["LLVBARS",{Name:"LLVBARS",Param:{Count:2},ToString:function ToString(args){if(args[1]==0)return'\u5386\u53F2'+args[0]+'\u65B0\u4F4E\u8DDD\u4ECA\u5929\u6570';return args[1]+'\u65E5\u5185'+args[0]+'\u65B0\u4F4E\u8DDD\u4ECA\u5929\u6570';}}]]);this.CallFunctionExplain=function(funcName,args,node){if(this.FUNCTION_INFO_LIST.has(funcName)){var item=this.FUNCTION_INFO_LIST.get(funcName);if(item.Param.Dynamic===true)//动态参数
11389
11400
  {}else{if(item.Param.Count!=args.length)this.ThrowUnexpectedNode(node,'\u51FD\u6570'+funcName+'\u53C2\u6570\u4E2A\u6570\u4E0D\u6B63\u786E. \u9700\u8981'+item.Param.Count+'\u4E2A\u53C2\u6570');}return item.ToString(args);}switch(funcName){case"CALCSTOCKINDEX":return'\u5F15\u7528'+args[0]+'\u7684'+args[1]+'\u6307\u6807\u7B2C'+args[2]+'\u4E2A\u8F93\u51FA\u503C';case"PEAK":case"PEAKBARS":case"ZIG":case"ZIGA":case"TROUGH":case"TROUGHBARS":return this.GetZIGExplain(funcName,args);case"FINANCE":return this.GetFinanceExplain(args);case"DYNAINFO":return this.GetDynainfoExplain(args);case'CLOSE':case'C':case'VOL':case'V':case'OPEN':case'O':case'HIGH':case'H':case'LOW':case'L':case'AMOUNT':case'AMO':return this.GetOtherSymbolExplain({FunctionName:funcName,Args:args},node);//绘图函数
11390
11401
  case"PLOYLINE":return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6\u4EE5'+args[1]+'\u4F4D\u7F6E\u4E3A\u9876\u70B9\u753B\u6298\u7EBF\u8FDE\u63A5';case"DRAWLINE":return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6,\u5728'+args[1]+'\u4F4D\u7F6E\u753B\u76F4\u7EBF\u8D77\u70B9\uFF0C\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[2]+'\u65F6,\u5728'+args[3]+'\u4F4D\u7F6E\u753B\u76F4\u7EBF\u7EC8\u70B9,'+args[4]+'\u8868\u793A\u662F\u5426\u5EF6\u957F';case"DRAWSL":return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6,\u5728'+args[1]+'\u4F4D\u7F6E\u753B\u659C\u7EBF\u7EBF\u6027\u56DE\u5F52,'+args[2]+'\u659C\u7387,'+args[3]+'\u957F\u5EA6,'+args[4]+'\u65B9\u5411';case"DRAWKLINE":case"DRAWKLINE1":return'K线';case"DRAWICON":return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6,\u5728'+args[1]+'\u4F4D\u7F6E\u753B'+args[2]+'\u53F7\u56FE\u6807';case"DRAWTEXT":return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6,\u5728'+args[1]+'\u4F4D\u7F6E\u4E66\u5199\u6587\u5B57';case"DRAWTEXT_FIX":return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6,\u5728\u6A2A\u8F74'+args[1]+'\u7EB5\u8F74'+args[2]+'\u4F4D\u7F6E\u4E66\u5199\u6587\u5B57';case"DRAWNUMBER":return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6,\u5728'+args[1]+'\u4F4D\u7F6E\u4E66\u5199\u6570\u5B57';case"DRAWNUMBER_FIX":return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6,\u5728\u6A2A\u8F74'+args[1]+'\u7EB5\u8F74'+args[2]+'\u4F4D\u7F6E\u4E66\u5199\u6570\u5B57';case"RGB":return'\u81EA\u5B9A\u8272['+args[0]+','+args[1]+','+args[2]+']';case"RGBA":return'\u81EA\u5B9A\u8272['+args[0]+','+args[1]+','+args[2]+','+args[3]+']';case"DRAWBAND":return'画带状线';case"DRAWRECTREL":return"相对位置上画矩形.";case"DRAWGBK":return"填充背景";case"TIPICON":return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6,\u5728'+args[1]+'\u4F4D\u7F6E\u753B'+args[2]+'\u53F7\u56FE\u6807';case"STICKLINE":var barType="";if(args[4]==-1)barType="虚线空心柱";else if(args[4]==0)barType="实心柱";else barType="实线空心柱";return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6, \u5728'+args[1]+'\u548C'+args[2]+'\u4F4D\u7F6E\u4E4B\u95F4\u753B\u67F1\u72B6\u7EBF,\u5BBD\u5EA6\u4E3A'+args[3]+','+barType;case"PARTLINE":return"画折线";case"SELL":return"卖出平仓";case"BUY":return"买入开仓";case"SELLSHORT":return"卖出开仓";case"BUYSHORT":return"买入平仓";case"YMOVE":return;case"BACKGROUND":return"绘制背景";case"UPCOLOR":return'\u4E0A\u6DA8\u989C\u8272'+args[0];case"DOWNCOLOR":return'\u4E0B\u8DCC\u989C\u8272'+args[0];case"FIRSTDRAW":return"";default:this.ThrowUnexpectedNode(node,'\u51FD\u6570'+funcName+'\u4E0D\u5B58\u5728');}};this.GetDynainfoExplain=function(args){var DATA_NAME_MAP=new _map2.default([[3,"前收盘价"],[4,"开盘价"],[5,"最高价"],[6,"最低价"],[7,"现价"],[8,'总量'],[9,"现量"],[10,"总金额"],[11,"均价"],[12,"日涨跌"],[13,"振幅"],[14,"涨幅"],[15,"开盘时的成交金额"],[16,"前5日每分钟均量"],[17,"量比"],[18,"上涨家数"],[19,"下跌家数"]]);var id=args[0];if(DATA_NAME_MAP.has(id))return DATA_NAME_MAP.get(id);return'\u5373\u65F6\u884C\u60C5['+id+']';};this.GetFinanceExplain=function(args){var DATA_NAME_MAP=new _map2.default([[1,"总股本"],[2,"市场类型"],[3,"沪深品种类型"],[4,"沪深行业代码"],[5,"B股"],[6,"H股"],[7,"流通股本[股]"],[8,"股东人数[户]"],[9,"资产负债率%"],[10,"总资产"],[11,"流动资产"],[12,"固定资产"],[13,"无形资产"],[15,"流动负债"],[16,"少数股东权益"]]);var id=args[0];if(DATA_NAME_MAP.has(id))return DATA_NAME_MAP.get(id);return'\u8D22\u52A1\u6570\u636E['+id+']';};this.GetZIGExplain=function(funcName,args){var value=args[0];if(value==0)value="开盘价";else if(value==1)value="最高价";else if(value==2)value="最低价";else if(value==3)value="收盘价";switch(funcName){case"PEAK":return value+'\u7684'+args[1]+'%\u4E4B\u5B57\u8F6C\u5411\u7684\u524D'+args[2]+'\u4E2A\u6CE2\u5CF0\u503C';case"PEAKBARS":return value+'\u7684'+args[1]+'5%\u4E4B\u5B57\u8F6C\u5411\u7684\u524D'+args[2]+'\u4E2A\u6CE2\u5CF0\u4F4D\u7F6E';case"ZIG":return value+'\u7684'+args[1]+'\u7684\u4E4B\u5B57\u8F6C\u5411';case"ZIGA":return value+'\u53D8\u5316'+args[1]+'\u7684\u4E4B\u5B57\u8F6C\u5411';case"TROUGH":return value+'\u7684'+args[1]+'%\u4E4B\u5B57\u8F6C\u5411\u7684\u524D'+args[2]+'\u4E2A\u6CE2\u8C37\u503C';case"TROUGHBARS":return value+'\u7684'+args[1]+'%\u4E4B\u5B57\u8F6C\u5411\u7684\u524D'+args[2]+'\u4E2A\u6CE2\u8C37\u4F4D\u7F6E';}};this.GetColorExplain=function(colorName){var COLOR_MAP=new _map2.default([['COLORBLACK','黑色'],['COLORBLUE','蓝色'],['COLORGREEN','绿色'],['COLORCYAN','青色'],['COLORRED','红色'],['COLORMAGENTA','洋红色'],['COLORBROWN','棕色'],['COLORLIGRAY','淡灰色'],['COLORGRAY','深灰色'],['COLORLIBLUE','淡蓝色'],['COLORLIGREEN','淡绿色'],['COLORLICYAN','淡青色'],['COLORLIRED','淡红色'],['COLORLIMAGENTA','淡洋红色'],['COLORWHITE','白色'],['COLORYELLOW','黄色']]);if(COLOR_MAP.has(colorName))return COLOR_MAP.get(colorName);//COLOR 自定义色
@@ -11393,7 +11404,7 @@ case"PLOYLINE":return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6\u4EE5'+arg
11393
11404
  if(colorName.indexOf('COLOR')==0)return'#'+colorName.substr(5);return'rgb(30,144,255)';};this.GetLineWidthExplain=function(lineWidth){var width=parseInt(lineWidth.replace("LINETHICK",""));if(IFrameSplitOperator.IsPlusNumber(width))return width;return 1;};this.SymbolPeriodExplain=function(valueName,period){var mapStockDataName=new _map2.default([['CLOSE',"收盘价"],["C","收盘价"],['VOL',"成交量"],['V',"成交量"],['OPEN',"开盘价"],['O',"开盘价"],['HIGH',"最高价"],['H',"最高价"],['LOW',"最低价"],['L',"最低价"],['AMOUNT',"成交金额"],['AMO',"成交金额"],['VOLINSTK',"持仓量"]]);//MIN1,MIN5,MIN15,MIN30,MIN60,DAY,WEEK,MONTH,SEASON,YEAR
11394
11405
  var mapPeriodName=new _map2.default([["MIN1","1分钟"],["MIN5","5分钟"],["MIN15","15分钟"],["MIN30","30分钟"],["MIN60","60分钟"],["DAY","日"],["WEEK","周"],["MONTH","月"],['SEASON',"季"],["YEAR","年"],["WEEK2","双周"],["HALFYEAR","半年"]]);var dataName=valueName;if(mapStockDataName.has(valueName))dataName=mapStockDataName.get(valueName);var periodName=period;if(mapPeriodName.has(period))periodName=mapPeriodName.get(period);return dataName+'[\u53D6'+periodName+'\u6570\u636E]';};this.GetOtherSymbolExplain=function(obj,node){var mapStockDataName=new _map2.default([['CLOSE',"收盘价"],["C","收盘价"],['VOL',"成交量"],['V',"成交量"],['OPEN',"开盘价"],['O',"开盘价"],['HIGH',"最高价"],['H',"最高价"],['LOW',"最低价"],['L',"最低价"],['AMOUNT',"成交金额"],['AMO',"成交金额"],['VOLINSTK',"持仓量"]]);if(obj.FunctionName){var args=obj.Args;var dataName=mapStockDataName.get(obj.FunctionName);return'['+args[0]+']'+dataName;}else if(obj.Literal){var value=obj.Literal.toUpperCase();var args=value.split("$");if(!mapStockDataName.has(args[1]))return"";var symbol=args[0];var dataName=mapStockDataName.get(args[1]);return'['+symbol+']'+dataName;}};this.IsDrawFunction=function(name){var setFunctionName=new _set2.default(["STICKLINE","DRAWTEXT",'SUPERDRAWTEXT','DRAWLINE','DRAWBAND','DRAWKLINE',"DRAWKLINE1",'DRAWKLINE_IF','PLOYLINE','POLYLINE','DRAWNUMBER',"DRAWNUMBER_FIX",'DRAWICON','DRAWCHANNEL','PARTLINE','DRAWTEXT_FIX','DRAWGBK','DRAWTEXT_LINE','DRAWRECTREL',"DRAWTEXTABS",'DRAWOVERLAYLINE',"FILLRGN","FILLRGN2","FILLTOPRGN","FILLBOTTOMRGN","FILLVERTICALRGN","FLOATRGN","DRAWSL","DRAWGBK2","BUY","BUYSHORT","SELL","SELLSHORT"]);if(setFunctionName.has(name))return true;return false;};//赋值
11395
11406
  this.VisitAssignmentExpression=function(node){var left=node.Left;if(left.Type!=Syntax.Identifier)this.ThrowUnexpectedNode(node);var varName=left.Name;var right=node.Right;var value=null;if(right.Type==Syntax.BinaryExpression||right.Type==Syntax.LogicalExpression)value=this.VisitBinaryExpression(right);else if(right.Type==Syntax.CallExpression)value=this.VisitCallExpression(right);else if(right.Type==Syntax.Literal){value=right.Value;if(IFrameSplitOperator.IsString(value)&&right.Value.indexOf("$")>0)value=this.GetOtherSymbolExplain({Literal:value},node);}else if(right.Type==Syntax.Identifier)//右值是变量
11396
- value=this.ReadVariable(right.Name,right);else if(right.Type==Syntax.MemberExpression)value=this.ReadMemberVariable(right);else if(right.Type==Syntax.UnaryExpression)value=this.VisitUnaryExpression(right);if(JS_EXECUTE_DEBUG_LOG)JSConsole.Complier.Log('[JSExplainer::VisitAssignmentExpression]',varName,' = ',value);this.VarTable.set(varName,this.ConvertToShortValue(value));};this.ConvertToShortValue=function(value){var maxLength=80;if(value&&value.length>=maxLength){var shortValue=value.slice(0,maxLength-10);shortValue+="......";return shortValue;}return value;};this.ReadMemberVariable=function(node){var obj=node.Object;var member=node.Property;var maiObj=void 0;if(obj.Type==Syntax.BinaryExpression||obj.Type==Syntax.LogicalExpression)maiObj=this.VisitBinaryExpression(obj);else if(obj.Type==Syntax.CallExpression)maiObj=this.VisitCallExpression(obj);else{if(member.Name.indexOf('#')>0){var aryValue=member.Name.split("#");var value=obj.Name+'\u7684'+aryValue[0]+'[\u5468\u671F'+aryValue[1]+']';}else{var value=obj.Name+'\u7684'+member.Name;}return value;}if(!maiObj)return null;var value=maiObj[member.Name];if(value)return value;return null;};//逻辑运算
11407
+ value=this.ReadVariable(right.Name,right);else if(right.Type==Syntax.MemberExpression)value=this.ReadMemberVariable(right);else if(right.Type==Syntax.UnaryExpression)value=this.VisitUnaryExpression(right);if(JS_EXECUTE_DEBUG_LOG)JSConsole.Complier.Log('[JSExplainer::VisitAssignmentExpression]',varName,' = ',value);this.VarTable.set(varName,this.ConvertToShortValue(value));};this.ConvertToShortValue=function(value){var maxLength=this.MaxValueLength;if(value&&value.length>=maxLength){var shortValue=value.slice(0,maxLength-10);shortValue+="......";return shortValue;}return value;};this.ReadMemberVariable=function(node){var obj=node.Object;var member=node.Property;var maiObj=void 0;if(obj.Type==Syntax.BinaryExpression||obj.Type==Syntax.LogicalExpression)maiObj=this.VisitBinaryExpression(obj);else if(obj.Type==Syntax.CallExpression)maiObj=this.VisitCallExpression(obj);else{if(member.Name.indexOf('#')>0){var aryValue=member.Name.split("#");var value=obj.Name+'\u7684'+aryValue[0]+'[\u5468\u671F'+aryValue[1]+']';}else{var value=obj.Name+'\u7684'+member.Name;}return value;}if(!maiObj)return null;var value=maiObj[member.Name];if(value)return value;return null;};//逻辑运算
11397
11408
  this.VisitBinaryExpression=function(node){var stack=[];stack.push(node);var temp=null;while(stack.length!=0){temp=stack[stack.length-1];if(temp.Left&&node!=temp.Left&&node!=temp.Right){stack.push(temp.Left);}else if(temp.Right&&node!=temp.Right){stack.push(temp.Right);}else{var _value26=stack.pop();if(_value26.Type==Syntax.BinaryExpression)//只遍历操作符就可以
11398
11409
  {var leftValue=this.GetNodeValue(_value26.Left);var rightValue=this.GetNodeValue(_value26.Right);if(JS_EXECUTE_DEBUG_LOG)JSConsole.Complier.Log('[JSExplainer::VisitBinaryExpression] BinaryExpression',_value26,leftValue,rightValue);_value26.Out=null;//保存中间值
11399
11410
  _value26.Out='('+leftValue+' '+_value26.Operator+' '+rightValue+')';if(leftValue=="收盘价"&&rightValue=="开盘价"){if(_value26.Operator==">")_value26.Out='(收阳线)';else if(_value26.Operator=="<")_value26.Out='(收阴线)';else if(_value26.Operator=="=")_value26.Out='(平盘)';}else if(leftValue=="开盘价"&&rightValue=="收盘价"){if(_value26.Operator=="<")_value26.Out='(收阳线)';else if(_value26.Operator==">")_value26.Out='(收阴线)';else if(_value26.Operator=="=")_value26.Out='(平盘)';}if(JS_EXECUTE_DEBUG_LOG)JSConsole.Complier.Log('[JSExplainer::VisitBinaryExpression] BinaryExpression',_value26);}else if(_value26.Type==Syntax.LogicalExpression){var _leftValue2=this.GetNodeValue(_value26.Left);var _rightValue2=this.GetNodeValue(_value26.Right);if(JS_EXECUTE_DEBUG_LOG)JSConsole.Complier.Log('[JSExecute::VisitBinaryExpression] LogicalExpression',_value26,_leftValue2,_rightValue2);_value26.Out=null;//保存中间值
@@ -11561,7 +11572,7 @@ chart.KLineColor=varItem.Draw.DrawData.KLine;if(varItem.Color)chart.Color=varIte
11561
11572
  if(varItem.IsShow==false)chart.IsShow=false;var titleIndex=windowIndex+1;chart.Data.Data=varItem.Draw.DrawData.Data;chart.MainData.Data=varItem.Draw.DrawData.MainData;if(varItem.Draw.DrawData.Title)hqChart.TitlePaint[titleIndex].Data[i]=new DynamicTitleData(chart.Data,varItem.Draw.DrawData.Title,chart.Color);hqChart.ChartPaint.push(chart);};//创建K线
11562
11573
  this.CreateSelfKLine=function(hqChart,windowIndex,hisData){var chart=new ChartKLine();chart.Canvas=hqChart.Canvas;chart.Name="Self Kline";chart.Identify=this.Guid;chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;chart.Data=hisData;chart.IsShowMaxMinPrice=false;chart.IsShowKTooltip=false;chart.DrawType=this.KLineType;hqChart.ChartPaint.push(chart);};this.BindInstructionData=function(hqChart,windowIndex,hisData)//绑定指示指标
11563
11574
  {if(this.OutVar==null||this.OutVar.length<0)return;//参数
11564
- var indexParam='';for(var _i132 in this.Arguments){var _item22=this.Arguments[_i132];if(indexParam.length>0)indexParam+=',';indexParam+=_item22.Value.toString();}if(indexParam.length>0)indexParam='('+indexParam+')';if(this.InstructionType==2)//五彩K线
11575
+ var indexParam='';for(var _i134 in this.Arguments){var _item22=this.Arguments[_i134];if(indexParam.length>0)indexParam+=',';indexParam+=_item22.Value.toString();}if(indexParam.length>0)indexParam='('+indexParam+')';if(this.InstructionType==2)//五彩K线
11565
11576
  {var varItem=this.OutVar[this.OutVar.length-1];//取最后一组数据作为指示数据
11566
11577
  hqChart.SetInstructionData(this.InstructionType,{Data:varItem.Data,Name:this.Name,Param:indexParam,ID:this.ID});//设置指示数据
11567
11578
  return true;}else if(this.InstructionType==1)//交易系统
@@ -11579,12 +11590,12 @@ if(this.YSplitScale)hqChart.Frame.SubFrame[windowIndex].Frame.YSplitScale=this.Y
11579
11590
  var testData={ Name:'MULTI_LINE', Type:1,Draw:{ DrawType:'MULTI_LINE', DrawData:[point1,point2] } };
11580
11591
  this.OutVar.push(testData);
11581
11592
  }
11582
- */for(var _i133=0;_i133<this.OutVar.length;++_i133){var _item24=this.OutVar[_i133];if(_item24.IsExData===true)continue;//扩展数据不显示图形
11593
+ */for(var _i135=0;_i135<this.OutVar.length;++_i135){var _item24=this.OutVar[_i135];if(_item24.IsExData===true)continue;//扩展数据不显示图形
11583
11594
  if(_item24.Type==1000||_item24.Type==1001)continue;//数据集合, 字符串
11584
- if(_item24.Type==0){if(_item24.IsOverlayLine)this.CreateOverlayLine(hqChart,windowIndex,_item24,_i133,_item24.Type);else this.CreateLine(hqChart,windowIndex,_item24,_i133,_item24.Type);}else if(_item24.Type==1){switch(_item24.Draw.DrawType){case'STICKLINE':this.CreateBar(hqChart,windowIndex,_item24,_i133);break;case'DRAWTEXT':this.CreateDrawTextV2(hqChart,windowIndex,_item24,_i133);break;case'SUPERDRAWTEXT':this.CreateText(hqChart,windowIndex,_item24,_i133);break;case'DRAWLINE':this.CreateStraightLine(hqChart,windowIndex,_item24,_i133);break;case'DRAWBAND':this.CreateBand(hqChart,windowIndex,_item24,_i133);break;case"FILLRGN":this.CreateFillRGN(hqChart,windowIndex,_item24,_i133);break;case"FILLRGN2":this.CreateFillRGN2(hqChart,windowIndex,_item24,_i133);break;case"FILLTOPRGN":case"FILLBOTTOMRGN":case"FILLVERTICALRGN":this.CreateFillBGRGN(hqChart,windowIndex,_item24,_i133);break;case"FLOATRGN":this.CreateFLOATRGN(hqChart,windowIndex,_item24,_i133);break;case'DRAWKLINE':case"DRAWKLINE1":this.CreateKLine(hqChart,windowIndex,_item24,_i133);break;case"DRAWOVERLAYKLINE":this.CreateOverlayKLine(hqChart,windowIndex,_item24,_i133);break;case"DRAWCOLORKLINE":this.CreateDrawColorKLine(hqChart,windowIndex,_item24,_i133);break;case'DRAWKLINE_IF':this.CreateKLine(hqChart,windowIndex,_item24,_i133);break;case'POLYLINE':this.CreatePolyLine(hqChart,windowIndex,_item24,_i133);break;case'DRAWGBK':case"DRAWGBK2":this.CreateBackgroud(hqChart,windowIndex,_item24,_i133);break;case"DRAWGBK_DIV":this.CreateBackgroundDiv(hqChart,windowIndex,_item24,_i133);break;case'DRAWTEXT_LINE':this.CreateTextLine(hqChart,windowIndex,_item24,_i133);break;case'DRAWNUMBER':this.CreateDrawNumber(hqChart,windowIndex,_item24,_i133);break;case"DRAWNUMBER_FIX":case'DRAWTEXT_FIX':this.CreateNumberText(hqChart,windowIndex,_item24,_i133);break;case'DRAWICON':this.CreateIcon(hqChart,windowIndex,_item24,_i133);break;case"ICON":this.CreateIcon(hqChart,windowIndex,_item24,_i133);break;case"TIPICON":this.CreateTipIcon(hqChart,windowIndex,_item24,_i133);break;case'DRAWCHANNEL':this.CreateChannel(hqChart,windowIndex,_item24,_i133);break;case'PARTLINE':this.CreatePartLine(hqChart,windowIndex,_item24,_i133);break;case'DRAWRECTREL':this.CreateRectangle(hqChart,windowIndex,_item24,_i133);break;case"DRAWTEXTABS":case"DRAWTEXTREL":this.CreateDrawText(hqChart,windowIndex,_item24,_i133);break;case"DRAWOVERLAYLINE":this.CreateScriptOverlayLine(hqChart,windowIndex,_item24,_i133);break;case"DRAWSL":this.CreateChartSlopeLine(hqChart,windowIndex,_item24,_i133);break;case"VERTLINE":this.CreateChartVericaltLine(hqChart,windowIndex,_item24,_i133);break;case"HORLINE":this.CreateChartHorizontalLine(hqChart,windowIndex,_item24,_i133);break;case'MULTI_LINE':this.CreateMultiLine(hqChart,windowIndex,_item24,_i133);break;case"MULTI_POINT":this.CreateMultiPoint(hqChart,windowIndex,_item24,_i133);break;case'MULTI_BAR':this.CreateMultiBar(hqChart,windowIndex,_item24,_i133);break;case'MULTI_TEXT':this.CreateMultiText(hqChart,windowIndex,_item24,_i133);break;case'MULTI_SVGICON':this.CreateMultiSVGIcon(hqChart,windowIndex,_item24,_i133);break;case"DRAWSVG":this.CreateChartDrawSVG(hqChart,windowIndex,_item24,_i133);break;case"MULTI_HTMLDOM":this.CreateMulitHtmlDom(hqChart,windowIndex,_item24,_i133);break;case"COLOR_KLINE":this.CreateColorKLine(hqChart,windowIndex,_item24,_i133);break;case"KLINE_BG":this.CreateBackgroud(hqChart,windowIndex,_item24,_i133);break;case"MULTI_POINT_LINE":this.CreateLineMultiData(hqChart,windowIndex,_item24,_i133);break;case"BUY":case"SELL":case"SELLSHORT":case"BUYSHORT":this.CreateTradeIcon(hqChart,windowIndex,_item24,_i133);break;case SCRIPT_CHART_NAME.OVERLAY_BARS:this.CreateStackedBar(hqChart,windowIndex,_item24,_i133);break;case SCRIPT_CHART_NAME.KLINE_TABLE:this.CreateKLineTable(hqChart,windowIndex,_item24,_i133);break;case SCRIPT_CHART_NAME.SCATTER_PLOT:this.CreateScatterPlot(hqChart,windowIndex,_item24,_i133);break;default:{var find=g_ScriptIndexChartFactory.Get(_item24.Draw.DrawType);//外部挂接
11585
- if(find&&find.CreateChartCallback)find.CreateChartCallback(hqChart,windowIndex,_item24,_i133,this);}break;}}else if(_item24.Type==2){this.CreateMACD(hqChart,windowIndex,_item24,_i133);}else if(_item24.Type==3){this.CreatePointDot(hqChart,windowIndex,_item24,_i133,hisData);}else if(_item24.Type==4){this.CreateLineStick(hqChart,windowIndex,_item24,_i133);}else if(_item24.Type==5){this.CreateStick(hqChart,windowIndex,_item24,_i133);}else if(_item24.Type==6){this.CreateVolStick(hqChart,windowIndex,_item24,_i133,hisData);}else if(_item24.Type==7){this.CreateLine(hqChart,windowIndex,_item24,_i133,_item24.Type);}else if(_item24.Type==8){this.CreateLine(hqChart,windowIndex,_item24,_i133,_item24.Type);}else if(_item24.Type==9){this.CreateArea(hqChart,windowIndex,_item24,_i133);}var titlePaint=hqChart.TitlePaint[windowIndex+1];if(titlePaint&&titlePaint.Data&&_i133<titlePaint.Data.length)//设置标题数值 小数位数和格式
11586
- {if(this.StringFormat>0)titlePaint.Data[_i133].StringFormat=this.StringFormat;if(this.FloatPrecision>=0)titlePaint.Data[_i133].FloatPrecision=this.FloatPrecision;if(this.OutName&&this.OutName.length>0&&this.Arguments&&this.Arguments.length>0){titlePaint.SetDynamicTitle(this.OutName,this.Arguments);}}}var titleIndex=windowIndex+1;var titlePaint=hqChart.TitlePaint[titleIndex];titlePaint.Title=this.Name;titlePaint.Identify=this.Guid;//指标ID
11587
- titlePaint.ArgumentsText=null;titlePaint.Script=this;titlePaint.IsShowMainIndexTitle=this.IsShowIndexTitle;if(!this.IsShortTitle){var indexParam='';for(var _i134=0;_i134<this.Arguments.length;++_i134){var _item25=this.Arguments[_i134];if(indexParam.length>0)indexParam+=',';indexParam+=_item25.Value.toString();}if(indexParam.length>0)titlePaint.ArgumentsText='('+indexParam+')';}if(this.TitleFont)titlePaint.Font=this.TitleFont;return true;};//给一个默认的颜色
11595
+ if(_item24.Type==0){if(_item24.IsOverlayLine)this.CreateOverlayLine(hqChart,windowIndex,_item24,_i135,_item24.Type);else this.CreateLine(hqChart,windowIndex,_item24,_i135,_item24.Type);}else if(_item24.Type==1){switch(_item24.Draw.DrawType){case'STICKLINE':this.CreateBar(hqChart,windowIndex,_item24,_i135);break;case'DRAWTEXT':this.CreateDrawTextV2(hqChart,windowIndex,_item24,_i135);break;case'SUPERDRAWTEXT':this.CreateText(hqChart,windowIndex,_item24,_i135);break;case'DRAWLINE':this.CreateStraightLine(hqChart,windowIndex,_item24,_i135);break;case'DRAWBAND':this.CreateBand(hqChart,windowIndex,_item24,_i135);break;case"FILLRGN":this.CreateFillRGN(hqChart,windowIndex,_item24,_i135);break;case"FILLRGN2":this.CreateFillRGN2(hqChart,windowIndex,_item24,_i135);break;case"FILLTOPRGN":case"FILLBOTTOMRGN":case"FILLVERTICALRGN":this.CreateFillBGRGN(hqChart,windowIndex,_item24,_i135);break;case"FLOATRGN":this.CreateFLOATRGN(hqChart,windowIndex,_item24,_i135);break;case'DRAWKLINE':case"DRAWKLINE1":this.CreateKLine(hqChart,windowIndex,_item24,_i135);break;case"DRAWOVERLAYKLINE":this.CreateOverlayKLine(hqChart,windowIndex,_item24,_i135);break;case"DRAWCOLORKLINE":this.CreateDrawColorKLine(hqChart,windowIndex,_item24,_i135);break;case'DRAWKLINE_IF':this.CreateKLine(hqChart,windowIndex,_item24,_i135);break;case'POLYLINE':this.CreatePolyLine(hqChart,windowIndex,_item24,_i135);break;case'DRAWGBK':case"DRAWGBK2":this.CreateBackgroud(hqChart,windowIndex,_item24,_i135);break;case"DRAWGBK_DIV":this.CreateBackgroundDiv(hqChart,windowIndex,_item24,_i135);break;case'DRAWTEXT_LINE':this.CreateTextLine(hqChart,windowIndex,_item24,_i135);break;case'DRAWNUMBER':this.CreateDrawNumber(hqChart,windowIndex,_item24,_i135);break;case"DRAWNUMBER_FIX":case'DRAWTEXT_FIX':this.CreateNumberText(hqChart,windowIndex,_item24,_i135);break;case'DRAWICON':this.CreateIcon(hqChart,windowIndex,_item24,_i135);break;case"ICON":this.CreateIcon(hqChart,windowIndex,_item24,_i135);break;case"TIPICON":this.CreateTipIcon(hqChart,windowIndex,_item24,_i135);break;case'DRAWCHANNEL':this.CreateChannel(hqChart,windowIndex,_item24,_i135);break;case'PARTLINE':this.CreatePartLine(hqChart,windowIndex,_item24,_i135);break;case'DRAWRECTREL':this.CreateRectangle(hqChart,windowIndex,_item24,_i135);break;case"DRAWTEXTABS":case"DRAWTEXTREL":this.CreateDrawText(hqChart,windowIndex,_item24,_i135);break;case"DRAWOVERLAYLINE":this.CreateScriptOverlayLine(hqChart,windowIndex,_item24,_i135);break;case"DRAWSL":this.CreateChartSlopeLine(hqChart,windowIndex,_item24,_i135);break;case"VERTLINE":this.CreateChartVericaltLine(hqChart,windowIndex,_item24,_i135);break;case"HORLINE":this.CreateChartHorizontalLine(hqChart,windowIndex,_item24,_i135);break;case'MULTI_LINE':this.CreateMultiLine(hqChart,windowIndex,_item24,_i135);break;case"MULTI_POINT":this.CreateMultiPoint(hqChart,windowIndex,_item24,_i135);break;case'MULTI_BAR':this.CreateMultiBar(hqChart,windowIndex,_item24,_i135);break;case'MULTI_TEXT':this.CreateMultiText(hqChart,windowIndex,_item24,_i135);break;case'MULTI_SVGICON':this.CreateMultiSVGIcon(hqChart,windowIndex,_item24,_i135);break;case"DRAWSVG":this.CreateChartDrawSVG(hqChart,windowIndex,_item24,_i135);break;case"MULTI_HTMLDOM":this.CreateMulitHtmlDom(hqChart,windowIndex,_item24,_i135);break;case"COLOR_KLINE":this.CreateColorKLine(hqChart,windowIndex,_item24,_i135);break;case"KLINE_BG":this.CreateBackgroud(hqChart,windowIndex,_item24,_i135);break;case"MULTI_POINT_LINE":this.CreateLineMultiData(hqChart,windowIndex,_item24,_i135);break;case"BUY":case"SELL":case"SELLSHORT":case"BUYSHORT":this.CreateTradeIcon(hqChart,windowIndex,_item24,_i135);break;case SCRIPT_CHART_NAME.OVERLAY_BARS:this.CreateStackedBar(hqChart,windowIndex,_item24,_i135);break;case SCRIPT_CHART_NAME.KLINE_TABLE:this.CreateKLineTable(hqChart,windowIndex,_item24,_i135);break;case SCRIPT_CHART_NAME.SCATTER_PLOT:this.CreateScatterPlot(hqChart,windowIndex,_item24,_i135);break;default:{var find=g_ScriptIndexChartFactory.Get(_item24.Draw.DrawType);//外部挂接
11596
+ if(find&&find.CreateChartCallback)find.CreateChartCallback(hqChart,windowIndex,_item24,_i135,this);}break;}}else if(_item24.Type==2){this.CreateMACD(hqChart,windowIndex,_item24,_i135);}else if(_item24.Type==3){this.CreatePointDot(hqChart,windowIndex,_item24,_i135,hisData);}else if(_item24.Type==4){this.CreateLineStick(hqChart,windowIndex,_item24,_i135);}else if(_item24.Type==5){this.CreateStick(hqChart,windowIndex,_item24,_i135);}else if(_item24.Type==6){this.CreateVolStick(hqChart,windowIndex,_item24,_i135,hisData);}else if(_item24.Type==7){this.CreateLine(hqChart,windowIndex,_item24,_i135,_item24.Type);}else if(_item24.Type==8){this.CreateLine(hqChart,windowIndex,_item24,_i135,_item24.Type);}else if(_item24.Type==9){this.CreateArea(hqChart,windowIndex,_item24,_i135);}var titlePaint=hqChart.TitlePaint[windowIndex+1];if(titlePaint&&titlePaint.Data&&_i135<titlePaint.Data.length)//设置标题数值 小数位数和格式
11597
+ {if(this.StringFormat>0)titlePaint.Data[_i135].StringFormat=this.StringFormat;if(this.FloatPrecision>=0)titlePaint.Data[_i135].FloatPrecision=this.FloatPrecision;if(this.OutName&&this.OutName.length>0&&this.Arguments&&this.Arguments.length>0){titlePaint.SetDynamicTitle(this.OutName,this.Arguments);}}}var titleIndex=windowIndex+1;var titlePaint=hqChart.TitlePaint[titleIndex];titlePaint.Title=this.Name;titlePaint.Identify=this.Guid;//指标ID
11598
+ titlePaint.ArgumentsText=null;titlePaint.Script=this;titlePaint.IsShowMainIndexTitle=this.IsShowIndexTitle;if(!this.IsShortTitle){var indexParam='';for(var _i136=0;_i136<this.Arguments.length;++_i136){var _item25=this.Arguments[_i136];if(indexParam.length>0)indexParam+=',';indexParam+=_item25.Value.toString();}if(indexParam.length>0)titlePaint.ArgumentsText='('+indexParam+')';}if(this.TitleFont)titlePaint.Font=this.TitleFont;return true;};//给一个默认的颜色
11588
11599
  this.GetDefaultColor=function(id){var COLOR_ARRAY=null;//使用全局线段配置
11589
11600
  if(g_JSChartResource&&g_JSChartResource.Index&&g_JSChartResource.Index.LineColor){COLOR_ARRAY=g_JSChartResource.Index.LineColor;}if(!COLOR_ARRAY||!Array.isArray(COLOR_ARRAY)){COLOR_ARRAY=["rgb(255,174,0)","rgb(25,199,255)","rgb(175,95,162)","rgb(236,105,65)","rgb(68,114,196)","rgb(229,0,79)","rgb(0,128,255)","rgb(252,96,154)","rgb(42,230,215)","rgb(24,71,178)"];}var number=parseInt(id);return COLOR_ARRAY[number%(COLOR_ARRAY.length-1)];};//获取颜色
11590
11601
  this.GetColor=function(colorName){if(colorName.indexOf("RGB(")==0)return colorName.toLowerCase();if(colorName.indexOf("rgb(")==0)return colorName;if(colorName.indexOf("RGBA(")==0)return colorName.toLowerCase();if(colorName.indexOf("rgba(")==0)return colorName;var color=JSComplier.ColorVarToRGB(colorName);if(color)return color;return'rgb(30,144,255)';/*
@@ -13240,7 +13251,9 @@ JSPopMenu.SEPARATOR_LINE_NAME="MENU_SEPARATOR";//分割线
13240
13251
 
13241
13252
  内置画图工具 设置框
13242
13253
  */var JS_DRAWTOOL_MENU_ID={CMD_SELECTED_ID:1,CMD_CHANGE_LINE_COLOR_ID:2,CMD_DELETE_ALL_DRAW_CHART_ID:3,CMD_ERASE_DRAW_CHART_ID:4,CMD_ENABLE_MAGNET_ID:5,//画图工具磁体功能
13243
- CMD_DELETE_DRAW_CHART_ID:6};function JSDialogDrawTool(){this.AryChartGroup=[{Title:"线段",AryChart:[{Title:'线段',ClassName:'hqchart_drawtool icon-draw_line',Type:0,Data:{ID:"线段"}},{Title:'射线',ClassName:'hqchart_drawtool icon-draw_rays',Type:0,Data:{ID:"射线"}},{Title:'标价线',ClassName:'hqchart_drawtool icon-price_line',Type:0,Data:{ID:"标价线"}},{Title:'垂直线',ClassName:'hqchart_drawtool icon-vertical_line',Type:0,Data:{ID:"垂直线"}},{Title:'十字线',ClassName:'hqchart_drawtool icon-tubiao_shizixian',Type:0,Data:{ID:"十字线"}},{Title:'箭头',ClassName:'hqchart_drawtool icon-draw_rays',Type:0,Data:{ID:"箭头"}},{Title:'趋势线',ClassName:'hqchart_drawtool icon-draw_trendline',Type:0,Data:{ID:"趋势线"}},{Title:'水平线',ClassName:'hqchart_drawtool icon-draw_hline',Type:0,Data:{ID:"水平线"}},{Title:'涂鸦线段',ClassName:'hqchart_drawtool icon-draw_line',Type:0,Data:{ID:"涂鸦线段"}},{Title:'阻速线',ClassName:'hqchart_drawtool icon-draw_resline',Type:0,Data:{ID:"阻速线"}},{Title:'江恩角度线',ClassName:'hqchart_drawtool icon-jiangenjiaoduxian',Type:0,Data:{ID:"江恩角度线"}}]},{Title:"通道",AryChart:[{Title:'平行线',ClassName:'hqchart_drawtool icon-draw_parallel_lines',Type:0,Data:{ID:"平行线"}},{Title:'水平线段',ClassName:'hqchart_drawtool icon-draw_hlinesegment',Type:0,Data:{ID:"水平线段"}},{Title:'平行射线',ClassName:'hqchart_drawtool icon-draw_p_rays_lines',Type:0,Data:{ID:"平行射线"}},{Title:'平行通道',ClassName:'hqchart_drawtool icon-draw_parallelchannel',Type:0,Data:{ID:"平行通道"}},{Title:'价格通道线',ClassName:'hqchart_drawtool icon-draw_pricechannel',Type:0,Data:{ID:"价格通道线"}},{Title:'箱型线',ClassName:'hqchart_drawtool icon-draw_box',Type:0,Data:{ID:"箱型线"}},{Title:"不相交通道",ClassName:"hqchart_drawtool icon-buxiangjiaojiao",Type:0,Data:{ID:"DisjointChannel"}},{Title:"平滑顶/底",ClassName:"hqchart_drawtool icon-tubiao_buxiangjiaotongdao",Type:0,Data:{ID:"FlatTop"}},{Title:"波段线",ClassName:'hqchart_drawtool icon-draw_waveband',Type:0,Data:{ID:"波段线"}},{Title:"百分比线",ClassName:'hqchart_drawtool icon-PercentageLine',Type:0,Data:{ID:"百分比线"}},{Title:"黄金分割",ClassName:'hqchart_drawtool icon-GoldenSection',Type:0,Data:{ID:"黄金分割"}},{Title:"线形回归线",ClassName:'hqchart_drawtool icon-linear_3',Type:0,Data:{ID:"线形回归线"}},{Title:"线形回归带",ClassName:'hqchart_drawtool icon-linear_1',Type:0,Data:{ID:"线形回归带"}},{Title:"延长线形回归带",ClassName:'hqchart_drawtool icon-linear_2',Type:0,Data:{ID:"延长线形回归带"}}]},{Title:"形状",AryChart:[{Title:'圆弧线',ClassName:'hqchart_drawtool icon-draw_arc',Type:0,Data:{ID:"圆弧线"}},{Title:'矩形',ClassName:'hqchart_drawtool icon-rectangle',Type:0,Data:{ID:"矩形"}},{Title:'平行四边形',ClassName:'hqchart_drawtool icon-draw_quadrangle',Type:0,Data:{ID:"平行四边形"}},{Title:'三角形',ClassName:'hqchart_drawtool icon-draw_triangle',Type:0,Data:{ID:"三角形"}},{Title:'圆',ClassName:'hqchart_drawtool icon-draw_circle',Type:0,Data:{ID:"圆"}},{Title:'对称角度',ClassName:'hqchart_drawtool icon-draw_symangle',Type:0,Data:{ID:"对称角度"}}]},{Title:"波浪线",AryChart:[{Title:'M头W底',ClassName:'hqchart_drawtool icon-draw_wavemw',Type:0,Data:{ID:"M头W底"}},{Title:'头肩型',ClassName:'hqchart_drawtool icon-draw_head_shoulders_bt',Type:0,Data:{ID:"头肩型"}},{Title:'波浪尺',ClassName:'hqchart_drawtool icon-waveruler',Type:0,Data:{ID:"波浪尺"}},{Title:'AB波浪尺',ClassName:'hqchart_drawtool icon-waveruler',Type:0,Data:{ID:"AB波浪尺"}}]},{Title:"斐波那契",AryChart:[{Title:'斐波那契周期线',ClassName:'hqchart_drawtool icon-feibonaqizhouqixian',Type:0,Data:{ID:"斐波那契周期线"}},{Title:'斐波那契楔形',ClassName:'hqchart_drawtool icon-feibonaqiqixing',Type:0,Data:{ID:"FibWedge"}},{Title:'斐波那契回撤',ClassName:'hqchart_drawtool icon-feibonaqihuiche',Type:0,Data:{ID:"FibRetracement"}},{Title:'斐波那契速度阻力扇',ClassName:'hqchart_drawtool icon-feibonaqisuduzulishan',Type:0,Data:{ID:"FibSpeedResistanceFan"}}]},{Title:"测量工具",AryChart:[{Title:'价格范围',ClassName:'hqchart_drawtool icon-shijianfanwei',Type:0,Data:{ID:"PriceRange"}},{Title:'时间范围',ClassName:'hqchart_drawtool icon-jiagefanwei',Type:0,Data:{ID:"DateRange"}},{Title:"监测线",ClassName:"hqchart_drawtool icon-jiance",Type:0,Data:{ID:"MonitorLine"}}]},{Title:"文字",AryChart:[{Title:"文字",ClassName:'hqchart_drawtool icon-draw_text',Type:0,Data:{ID:"文本"}},{Title:"锚点文字",ClassName:'hqchart_drawtool icon-maodianwenzi',Type:0,Data:{ID:"AnchoredText"}},{Title:"注释",ClassName:'hqchart_drawtool icon-maodian ',Type:0,Data:{ID:"Note"}},{Title:'价格标签',ClassName:'hqchart_drawtool icon-Tooltip',Type:0,Data:{ID:"PriceLabel"}},{Title:'价格注释',ClassName:'hqchart_drawtool icon-tooltiptext',Type:0,Data:{ID:"PriceNote"}},{Title:'向上箭头',ClassName:'iconfont icon-arrow_up',Type:0,Data:{ID:"icon-arrow_up"}},{Title:'向下箭头',ClassName:'iconfont icon-arrow_down',Type:0,Data:{ID:"icon-arrow_down"}},{Title:'向左箭头',ClassName:'iconfont icon-arrow_left',Type:0,Data:{ID:"icon-arrow_left"}},{Title:'向右箭头',ClassName:'iconfont icon-arrow_right',Type:0,Data:{ID:"icon-arrow_right"}}]}];this.ToolConfig={Title:"工具",AryTool:[{Title:"选中",ClassName:'hqchart_drawtool icon-arrow',Type:1,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_SELECTED_ID}},{Title:'尺子',ClassName:'hqchart_drawtool icon-ruler',Type:0,Data:{ID:"尺子"}},{Title:"磁铁",ClassName:'hqchart_drawtool icon-xifu',Type:2,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_ENABLE_MAGNET_ID}},{Title:"点击切换颜色",ClassName:'hqchart_drawtool icon-fangkuai',Type:2,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_CHANGE_LINE_COLOR_ID}},{Title:"擦除画线",ClassName:'hqchart_drawtool icon-a-xiangpicachuxiangpica',Type:2,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_ERASE_DRAW_CHART_ID}},{Title:"删除所有画线",ClassName:'hqchart_drawtool icon-recycle_bin',Type:2,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_DELETE_ALL_DRAW_CHART_ID}}]};this.DivDialog=null;this.AryDivChart=[];this.HQChart=null;this.LineColor='rgb(255,140,0)';this.LineColorIndex=0;this.RandomLineColor=["rgb(255,69,0)","rgb(0,191,255)","rgb(255,0,255)","rgb(255,105,180)"];this.LineWidth=1*GetDevicePixelRatio();this.ColumnCount=4;this.DragTitle=null;this.Inital=function(hqchart){this.LineColor=g_JSChartResource.DrawPicture.LineColor[0];this.RandomLineColor.splice(0,0,this.LineColor);this.HQChart=hqchart;};this.Create=function(){var _this69=this;var divDom=document.createElement("div");divDom.className='UMyChart_DrawTool_Dialog_Div';var divTitle=document.createElement("div");divTitle.className='UMyChart_DrawTool_Title_Div';divTitle.innerText="画图工具";divTitle.onmousedown=function(e){_this69.OnMouseDownTitle(e);};var divClose=document.createElement("div");divClose.className='UMyChart_DrawTool_Close_Div';divClose.innerText="x";divClose.onmousedown=function(e){_this69.Close(e);};divTitle.appendChild(divClose);divDom.appendChild(divTitle);var table=document.createElement("table");table.className="UMyChart_DrawTool_Table";divDom.appendChild(table);var tbody=document.createElement("tbody");tbody.className="UMyChart_DrawTool_Tbody";table.appendChild(tbody);for(var i=0;i<this.AryChartGroup.length;++i){var item=this.AryChartGroup[i];if(!IFrameSplitOperator.IsNonEmptyArray(item.AryChart))continue;this.CreateChartGroupItem(item,tbody);var trDom=document.createElement("tr");trDom.className='UMyChart_DrawTool_Group_End_Tr';tbody.appendChild(trDom);}//工具栏
13254
+ CMD_DELETE_DRAW_CHART_ID:6,CMD_CHANGE_FONT_COLOR_ID:7,//切换字体颜色
13255
+ CMD_CHANGE_BG_COLOR_ID:8//切换背景色
13256
+ };function JSDialogDrawTool(){this.AryChartGroup=[{Title:"线段",AryChart:[{Title:'线段',ClassName:'hqchart_drawtool icon-draw_line',Type:0,Data:{ID:"线段"}},{Title:'射线',ClassName:'hqchart_drawtool icon-draw_rays',Type:0,Data:{ID:"射线"}},{Title:'标价线',ClassName:'hqchart_drawtool icon-price_line',Type:0,Data:{ID:"标价线"}},{Title:'垂直线',ClassName:'hqchart_drawtool icon-vertical_line',Type:0,Data:{ID:"垂直线"}},{Title:'十字线',ClassName:'hqchart_drawtool icon-tubiao_shizixian',Type:0,Data:{ID:"十字线"}},{Title:'箭头',ClassName:'hqchart_drawtool icon-draw_rays',Type:0,Data:{ID:"箭头"}},{Title:'趋势线',ClassName:'hqchart_drawtool icon-draw_trendline',Type:0,Data:{ID:"趋势线"}},{Title:'水平线',ClassName:'hqchart_drawtool icon-draw_hline',Type:0,Data:{ID:"水平线"}},{Title:'涂鸦线段',ClassName:'hqchart_drawtool icon-draw_line',Type:0,Data:{ID:"涂鸦线段"}},{Title:'阻速线',ClassName:'hqchart_drawtool icon-draw_resline',Type:0,Data:{ID:"阻速线"}},{Title:'江恩角度线',ClassName:'hqchart_drawtool icon-jiangenjiaoduxian',Type:0,Data:{ID:"江恩角度线"}}]},{Title:"通道",AryChart:[{Title:'平行线',ClassName:'hqchart_drawtool icon-draw_parallel_lines',Type:0,Data:{ID:"平行线"}},{Title:'水平线段',ClassName:'hqchart_drawtool icon-draw_hlinesegment',Type:0,Data:{ID:"水平线段"}},{Title:'平行射线',ClassName:'hqchart_drawtool icon-draw_p_rays_lines',Type:0,Data:{ID:"平行射线"}},{Title:'平行通道',ClassName:'hqchart_drawtool icon-draw_parallelchannel',Type:0,Data:{ID:"平行通道"}},{Title:'价格通道线',ClassName:'hqchart_drawtool icon-draw_pricechannel',Type:0,Data:{ID:"价格通道线"}},{Title:'箱型线',ClassName:'hqchart_drawtool icon-draw_box',Type:0,Data:{ID:"箱型线"}},{Title:"不相交通道",ClassName:"hqchart_drawtool icon-buxiangjiaojiao",Type:0,Data:{ID:"DisjointChannel"}},{Title:"平滑顶/底",ClassName:"hqchart_drawtool icon-tubiao_buxiangjiaotongdao",Type:0,Data:{ID:"FlatTop"}},{Title:"波段线",ClassName:'hqchart_drawtool icon-draw_waveband',Type:0,Data:{ID:"波段线"}},{Title:"百分比线",ClassName:'hqchart_drawtool icon-PercentageLine',Type:0,Data:{ID:"百分比线"}},{Title:"黄金分割",ClassName:'hqchart_drawtool icon-GoldenSection',Type:0,Data:{ID:"黄金分割"}},{Title:"线形回归线",ClassName:'hqchart_drawtool icon-linear_3',Type:0,Data:{ID:"线形回归线"}},{Title:"线形回归带",ClassName:'hqchart_drawtool icon-linear_1',Type:0,Data:{ID:"线形回归带"}},{Title:"延长线形回归带",ClassName:'hqchart_drawtool icon-linear_2',Type:0,Data:{ID:"延长线形回归带"}}]},{Title:"形状",AryChart:[{Title:'圆弧线',ClassName:'hqchart_drawtool icon-draw_arc',Type:0,Data:{ID:"圆弧线"}},{Title:'矩形',ClassName:'hqchart_drawtool icon-rectangle',Type:0,Data:{ID:"矩形"}},{Title:'平行四边形',ClassName:'hqchart_drawtool icon-draw_quadrangle',Type:0,Data:{ID:"平行四边形"}},{Title:'三角形',ClassName:'hqchart_drawtool icon-draw_triangle',Type:0,Data:{ID:"三角形"}},{Title:'圆',ClassName:'hqchart_drawtool icon-draw_circle',Type:0,Data:{ID:"圆"}},{Title:'对称角度',ClassName:'hqchart_drawtool icon-draw_symangle',Type:0,Data:{ID:"对称角度"}}]},{Title:"波浪线",AryChart:[{Title:'M头W底',ClassName:'hqchart_drawtool icon-draw_wavemw',Type:0,Data:{ID:"M头W底"}},{Title:'头肩型',ClassName:'hqchart_drawtool icon-draw_head_shoulders_bt',Type:0,Data:{ID:"头肩型"}},{Title:'波浪尺',ClassName:'hqchart_drawtool icon-waveruler',Type:0,Data:{ID:"波浪尺"}},{Title:'AB波浪尺',ClassName:'hqchart_drawtool icon-waveruler',Type:0,Data:{ID:"AB波浪尺"}}]},{Title:"斐波那契",AryChart:[{Title:'斐波那契周期线',ClassName:'hqchart_drawtool icon-feibonaqizhouqixian',Type:0,Data:{ID:"斐波那契周期线"}},{Title:'斐波那契楔形',ClassName:'hqchart_drawtool icon-feibonaqiqixing',Type:0,Data:{ID:"FibWedge"}},{Title:'斐波那契回撤',ClassName:'hqchart_drawtool icon-feibonaqihuiche',Type:0,Data:{ID:"FibRetracement"}},{Title:'斐波那契速度阻力扇',ClassName:'hqchart_drawtool icon-feibonaqisuduzulishan',Type:0,Data:{ID:"FibSpeedResistanceFan"}}]},{Title:"测量工具",AryChart:[{Title:'价格范围',ClassName:'hqchart_drawtool icon-shijianfanwei',Type:0,Data:{ID:"PriceRange"}},{Title:'时间范围',ClassName:'hqchart_drawtool icon-jiagefanwei',Type:0,Data:{ID:"DateRange"}},{Title:"监测线",ClassName:"hqchart_drawtool icon-jiance",Type:0,Data:{ID:"MonitorLine"}}]},{Title:"文字",AryChart:[{Title:"文字",ClassName:'hqchart_drawtool icon-draw_text',Type:0,Data:{ID:"文本"}},{Title:"锚点文字",ClassName:'hqchart_drawtool icon-maodianwenzi',Type:0,Data:{ID:"AnchoredText"}},{Title:"注释",ClassName:'hqchart_drawtool icon-maodian ',Type:0,Data:{ID:"Note"}},{Title:'价格标签',ClassName:'hqchart_drawtool icon-Tooltip',Type:0,Data:{ID:"PriceLabel"}},{Title:'价格注释',ClassName:'hqchart_drawtool icon-tooltiptext',Type:0,Data:{ID:"PriceNote"}},{Title:'向上箭头',ClassName:'iconfont icon-arrow_up',Type:0,Data:{ID:"icon-arrow_up"}},{Title:'向下箭头',ClassName:'iconfont icon-arrow_down',Type:0,Data:{ID:"icon-arrow_down"}},{Title:'向左箭头',ClassName:'iconfont icon-arrow_left',Type:0,Data:{ID:"icon-arrow_left"}},{Title:'向右箭头',ClassName:'iconfont icon-arrow_right',Type:0,Data:{ID:"icon-arrow_right"}}]}];this.ToolConfig={Title:"工具",AryTool:[{Title:"选中",ClassName:'hqchart_drawtool icon-arrow',Type:1,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_SELECTED_ID}},{Title:'尺子',ClassName:'hqchart_drawtool icon-ruler',Type:0,Data:{ID:"尺子"}},{Title:"磁铁",ClassName:'hqchart_drawtool icon-xifu',Type:2,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_ENABLE_MAGNET_ID}},{Title:"点击切换颜色",ClassName:'hqchart_drawtool icon-fangkuai',Type:2,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_CHANGE_LINE_COLOR_ID}},{Title:"擦除画线",ClassName:'hqchart_drawtool icon-a-xiangpicachuxiangpica',Type:2,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_ERASE_DRAW_CHART_ID}},{Title:"删除所有画线",ClassName:'hqchart_drawtool icon-recycle_bin',Type:2,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_DELETE_ALL_DRAW_CHART_ID}}]};this.DivDialog=null;this.AryDivChart=[];this.HQChart=null;this.LineColor='rgb(255,140,0)';this.LineColorIndex=0;this.RandomLineColor=["rgb(255,69,0)","rgb(0,191,255)","rgb(255,0,255)","rgb(255,105,180)"];this.LineWidth=1*GetDevicePixelRatio();this.ColumnCount=4;this.DragTitle=null;this.Inital=function(hqchart){this.LineColor=g_JSChartResource.DrawPicture.LineColor[0];this.RandomLineColor.splice(0,0,this.LineColor);this.HQChart=hqchart;};this.Create=function(){var _this69=this;var divDom=document.createElement("div");divDom.className='UMyChart_DrawTool_Dialog_Div';var divTitle=document.createElement("div");divTitle.className='UMyChart_DrawTool_Title_Div';divTitle.innerText="画图工具";divTitle.onmousedown=function(e){_this69.OnMouseDownTitle(e);};var divClose=document.createElement("div");divClose.className='UMyChart_DrawTool_Close_Div';divClose.innerText="x";divClose.onmousedown=function(e){_this69.Close(e);};divTitle.appendChild(divClose);divDom.appendChild(divTitle);var table=document.createElement("table");table.className="UMyChart_DrawTool_Table";divDom.appendChild(table);var tbody=document.createElement("tbody");tbody.className="UMyChart_DrawTool_Tbody";table.appendChild(tbody);for(var i=0;i<this.AryChartGroup.length;++i){var item=this.AryChartGroup[i];if(!IFrameSplitOperator.IsNonEmptyArray(item.AryChart))continue;this.CreateChartGroupItem(item,tbody);var trDom=document.createElement("tr");trDom.className='UMyChart_DrawTool_Group_End_Tr';tbody.appendChild(trDom);}//工具栏
13244
13257
  this.CreateToolGroup(tbody);this.DivDialog=divDom;document.body.appendChild(divDom);};this.Destroy=function(){this.AryDivChart=[];document.body.remove(this.DivDialog);this.DivDialog=null;};this.CreateChartGroupItem=function(groupItem,tbody){var trDom=document.createElement("tr");trDom.className='UMyChart_DrawTool_Group_Tr';tbody.appendChild(trDom);var tdDom=document.createElement("td");tdDom.className="UMyChart_DrawTool_Group_Td";tdDom.innerText=groupItem.Title;tdDom.colSpan=this.ColumnCount;trDom.appendChild(tdDom);var chartCount=groupItem.AryChart.length;for(var i=0,j=0;i<chartCount;){var trDom=document.createElement("tr");trDom.className='UMyChart_DrawTool_Tr';for(j=0;j<this.ColumnCount&&i<chartCount;++j,++i){var item=groupItem.AryChart[i];this.CreateChartItem(item,trDom);}tbody.appendChild(trDom);}};this.CreateChartItem=function(item,trDom){var _this70=this;var tdDom=document.createElement("td");tdDom.className="UMyChart_DrawTool_Td";tdDom.title=item.Title;trDom.appendChild(tdDom);var spanDom=document.createElement("span");spanDom.className=item.ClassName;spanDom.classList.add("UMyChart_DrawTool_Span");tdDom.appendChild(spanDom);var data={Item:item,TD:tdDom,Span:spanDom};tdDom.onmousedown=function(e){_this70.OnClickItem(e,data);};//点击
13245
13258
  this.AryDivChart.push(data);};this.OnClickItem=function(e,data){console.log('[JSDialogDrawTool::OnClickChartItem] ',data);if(!data.Item||!data.Item.Data)return;var type=data.Item.Type;var id=data.Item.Data.ID;if(type==2&&id==JS_DRAWTOOL_MENU_ID.CMD_CHANGE_LINE_COLOR_ID){this.OnChangeLineColor(data);}else if(type==2&&id==JS_DRAWTOOL_MENU_ID.CMD_DELETE_ALL_DRAW_CHART_ID){this.DeleteAllChart();}else if(type==2&&id==JS_DRAWTOOL_MENU_ID.CMD_ERASE_DRAW_CHART_ID){this.ClearAllSelectedChart();this.ClearCurrnetDrawPicture();this.EnableEraseChart(true);}else if(type==1&&id==JS_DRAWTOOL_MENU_ID.CMD_SELECTED_ID){this.ClearAllSelectedChart();this.ClearCurrnetDrawPicture();this.EnableEraseChart(false);}else if(type==2&&id==JS_DRAWTOOL_MENU_ID.CMD_ENABLE_MAGNET_ID){this.ChangeMagnet(data);}else if(type==0){this.ClearAllSelectedChart();this.EnableEraseChart(false);data.Span.classList.remove("UMyChart_DrawTool_Span");data.Span.classList.add("UMyChart_DrawTool_Span_Selected");this.CreateDrawPicture(data);}};//清空选中状态
13246
13259
  this.ClearAllSelectedChart=function(){for(var i=0;i<this.AryDivChart.length;++i){var item=this.AryDivChart[i];if(item.Item.Type==2)continue;item.Span.classList.remove("UMyChart_DrawTool_Span_Selected");item.Span.classList.add("UMyChart_DrawTool_Span");}};this.CreateToolGroup=function(tbody){var trDom=document.createElement("tr");trDom.className='UMyChart_DrawTool_Group_Tr';tbody.appendChild(trDom);var tdDom=document.createElement("td");tdDom.className="UMyChart_DrawTool_Group_Td";tdDom.innerText=this.ToolConfig.Title;tdDom.colSpan=this.ColumnCount;trDom.appendChild(tdDom);var chartCount=this.ToolConfig.AryTool.length;for(var i=0,j=0;i<chartCount;){var trDom=document.createElement("tr");trDom.className='UMyChart_DrawTool_Tr';for(j=0;j<this.ColumnCount&&i<chartCount;++j,++i){var item=this.ToolConfig.AryTool[i];this.CreateToolItem(item,trDom);}tbody.appendChild(trDom);}};this.CreateToolItem=function(item,trDom){var _this71=this;var tdDom=document.createElement("td");tdDom.className="UMyChart_DrawTool_Td";tdDom.title=item.Title;trDom.appendChild(tdDom);var spanDom=document.createElement("span");spanDom.className=item.ClassName;spanDom.classList.add("UMyChart_DrawTool_Span");tdDom.appendChild(spanDom);var data={Item:item,TD:tdDom,Span:spanDom};if(item.Type==2&&item.Data.ID==JS_DRAWTOOL_MENU_ID.CMD_CHANGE_LINE_COLOR_ID)//颜色
@@ -13255,9 +13268,15 @@ this.OnFinishDrawPicture=function(chart,data){data.Span.classList.remove("UMyCha
13255
13268
  //
13256
13269
  //
13257
13270
  ////////////////////////////////////////////////////////////////////////////////////
13258
- function JSDialogModifyDraw(){this.DivDialog=null;this.HQChart;this.ChartPicture;this.ColorButton=null;this.RandomLineColor=["rgb(255,69,0)","rgb(173,255,47)","rgb(238,154,73)","rgb(255,105,180)"];this.AryButton=[{Title:"点击切换颜色",ClassName:'hqchart_drawtool icon-fangkuai',Type:2,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_CHANGE_LINE_COLOR_ID}},{Title:"删除",ClassName:'hqchart_drawtool icon-recycle_bin',Type:2,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_DELETE_DRAW_CHART_ID}}];this.Inital=function(hqchart){this.HQChart=hqchart;};this.Destroy=function(){this.ChartPicture=null;this.ColorButton=null;if(this.DivDialog){document.body.remove(this.DivDialog);this.DivDialog=null;}};this.Create=function(){var _this74=this;var divDom=document.createElement("div");divDom.className='UMyChart_Draw_Modify_Dialog_Div';var drgDiv=document.createElement("div");drgDiv.className="UMyChart_Draw_Modify_Dialog_Drag_Div";drgDiv.onmousedown=function(e){_this74.OnMouseDownTitle(e);};divDom.appendChild(drgDiv);var spanDom=document.createElement("span");spanDom.className="hqchart_drawtool icon-tuodong";spanDom.classList.add("UMyChart_DrawTool_Span");drgDiv.appendChild(spanDom);for(var i=0;i<this.AryButton.length;++i){var item=this.AryButton[i];this.CreateButtonItem(item,divDom);}this.DivDialog=divDom;document.body.appendChild(divDom);};this.CreateButtonItem=function(item,parentDivDom){var _this75=this;var divItem=document.createElement("div");divItem.className="UMyChart_Draw_Modify_Dialog_Button_Div";var spanDom=document.createElement("span");spanDom.className=item.ClassName;spanDom.classList.add("UMyChart_DrawTool_Span");divItem.appendChild(spanDom);var data={Span:spanDom,Parent:parentDivDom,Item:item};divItem.onmousedown=function(e){_this75.OnClickButton(e,data);};//点击
13259
- if(item.Data.ID==JS_DRAWTOOL_MENU_ID.CMD_CHANGE_LINE_COLOR_ID)this.ColorButton=data;parentDivDom.appendChild(divItem);};this.OnClickButton=function(e,data){console.log('[JSDialogModifyDraw::OnClickButton] ',data);if(!data.Item||!data.Item.Data)return;var id=data.Item.Data.ID;switch(id){case JS_DRAWTOOL_MENU_ID.CMD_CHANGE_LINE_COLOR_ID:this.ModifyLineColor();break;case JS_DRAWTOOL_MENU_ID.CMD_DELETE_DRAW_CHART_ID:this.DeleteDrawPicture();break;}};this.Close=function(e){if(!this.DivDialog)return;this.ChartPicture=null;this.DivDialog.style.visibility='hidden';};this.IsShow=function(){if(!this.DivDialog)return false;return this.DivDialog.style.visibility==='visible';};this.DeleteDrawPicture=function(){if(this.ChartPicture&&this.HQChart){this.HQChart.ClearChartDrawPicture(this.ChartPicture);}this.Close();};this.ModifyLineColor=function(){if(!this.ChartPicture||!this.HQChart)return;var color=this.ChartPicture.LineColor;var colorIndex=0;for(var i=0;i<this.RandomLineColor.length;++i){if(color==this.RandomLineColor[i]){colorIndex=i+1;break;}}colorIndex=colorIndex%this.RandomLineColor.length;color=this.RandomLineColor[colorIndex];this.ChartPicture.LineColor=color;this.ChartPicture.PointColor=color;if(this.ColorButton)this.ColorButton.Span.style['color']=color;if(this.HQChart.ChartDrawStorage)this.HQChart.ChartDrawStorage.SaveDrawData(this.ChartPicture);//保存下
13260
- this.HQChart.Draw();};this.Show=function(x,y){if(!this.DivDialog)this.Create();this.DivDialog.style.visibility='visible';this.DivDialog.style.top=y+"px";this.DivDialog.style.left=x+"px";};this.SetChartPicture=function(chart){this.ChartPicture=chart;if(this.ColorButton){this.ColorButton.Span.style['color']=chart.LineColor;}};this.OnMouseDownTitle=function(e){var _this76=this;if(!this.DivDialog)return;var dragData={X:e.clientX,Y:e.clientY};dragData.YOffset=e.clientX-this.DivDialog.offsetLeft;dragData.XOffset=e.clientY-this.DivDialog.offsetTop;this.DragTitle=dragData;document.onmousemove=function(e){_this76.DocOnMouseMoveTitle(e);};document.onmouseup=function(e){_this76.DocOnMouseUpTitle(e);};};this.DocOnMouseMoveTitle=function(e){if(!this.DragTitle)return;var left=e.clientX-this.DragTitle.YOffset;var top=e.clientY-this.DragTitle.XOffset;var right=left+this.DivDialog.offsetWidth;var bottom=top+this.DivDialog.offsetHeight;if(right+5>=window.innerWidth)left=window.innerWidth-this.DivDialog.offsetWidth-5;if(bottom+5>=window.innerHeight)top=window.innerHeight-this.DivDialog.offsetHeight-5;this.DivDialog.style.left=left+'px';this.DivDialog.style.top=top+'px';if(e.preventDefault)e.preventDefault();};this.DocOnMouseUpTitle=function(e){this.DragTitle=null;this.onmousemove=null;this.onmouseup=null;};}///////////////////////////////////////////////////////////////////////////////////
13271
+ function JSDialogModifyDraw(){this.DivDialog=null;this.HQChart;this.ChartPicture;//按钮
13272
+ this.ColorButton=null;this.BGColorButton=null;this.FontColorButton=null;this.RandomLineColor=["rgb(255,69,0)","rgb(173,255,47)","rgb(238,154,73)","rgb(255,105,180)"];//线段颜色
13273
+ this.RandomBGColor=["rgba(210,251,209,0.8)","rgb(217,217,253)","rgb(255,208,204)","rgb(252,249,206)"];//背景颜色
13274
+ this.RandomFontColor=["rgb(0,0,0)","rgb(255, 0, 0)","rgb(20, 255, 0)","rgb(255, 0, 255)"];//文字颜色
13275
+ this.AryButton=[{Title:"点击线段颜色",ClassName:'hqchart_drawtool icon-huabi',Type:2,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_CHANGE_LINE_COLOR_ID}},{Title:"点击字体颜色",ClassName:'hqchart_drawtool icon-zitiyanse',Type:2,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_CHANGE_FONT_COLOR_ID}},{Title:"点击背景色",ClassName:'hqchart_drawtool icon-zitibeijingse',Type:2,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_CHANGE_BG_COLOR_ID}},{Title:"删除",ClassName:'hqchart_drawtool icon-recycle_bin',Type:2,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_DELETE_DRAW_CHART_ID}}];this.Inital=function(hqchart){this.HQChart=hqchart;};this.Destroy=function(){this.ChartPicture=null;this.ColorButton=null;if(this.DivDialog){document.body.remove(this.DivDialog);this.DivDialog=null;}};this.Create=function(){var _this74=this;var divDom=document.createElement("div");divDom.className='UMyChart_Draw_Modify_Dialog_Div';var drgDiv=document.createElement("div");drgDiv.className="UMyChart_Draw_Modify_Dialog_Drag_Div";drgDiv.onmousedown=function(e){_this74.OnMouseDownTitle(e);};divDom.appendChild(drgDiv);var spanDom=document.createElement("span");spanDom.className="hqchart_drawtool icon-tuodong";spanDom.classList.add("UMyChart_DrawTool_Span");drgDiv.appendChild(spanDom);for(var i=0;i<this.AryButton.length;++i){var item=this.AryButton[i];this.CreateButtonItem(item,divDom);}this.DivDialog=divDom;document.body.appendChild(divDom);};this.CreateButtonItem=function(item,parentDivDom){var _this75=this;var divItem=document.createElement("div");divItem.className="UMyChart_Draw_Modify_Dialog_Button_Div";var spanDom=document.createElement("span");spanDom.className=item.ClassName;spanDom.classList.add("UMyChart_DrawTool_Span");divItem.appendChild(spanDom);var data={Div:divItem,Span:spanDom,Parent:parentDivDom,Item:item};divItem.onmousedown=function(e){_this75.OnClickButton(e,data);};//点击
13276
+ switch(item.Data.ID){case JS_DRAWTOOL_MENU_ID.CMD_CHANGE_LINE_COLOR_ID:this.ColorButton=data;break;case JS_DRAWTOOL_MENU_ID.CMD_CHANGE_BG_COLOR_ID:this.BGColorButton=data;divItem.style.display="none";break;case JS_DRAWTOOL_MENU_ID.CMD_CHANGE_FONT_COLOR_ID:this.FontColorButton=data;divItem.style.display="none";break;}parentDivDom.appendChild(divItem);};this.OnClickButton=function(e,data){console.log('[JSDialogModifyDraw::OnClickButton] ',data);if(!data.Item||!data.Item.Data)return;var id=data.Item.Data.ID;switch(id){case JS_DRAWTOOL_MENU_ID.CMD_CHANGE_LINE_COLOR_ID:this.ModifyLineColor();break;case JS_DRAWTOOL_MENU_ID.CMD_DELETE_DRAW_CHART_ID:this.DeleteDrawPicture();break;case JS_DRAWTOOL_MENU_ID.CMD_CHANGE_BG_COLOR_ID:this.ModifyBGColor();break;case JS_DRAWTOOL_MENU_ID.CMD_CHANGE_FONT_COLOR_ID:this.ModifyFontColor();break;}};this.Close=function(e){if(!this.DivDialog)return;this.ChartPicture=null;this.DivDialog.style.visibility='hidden';};this.IsShow=function(){if(!this.DivDialog)return false;return this.DivDialog.style.visibility==='visible';};this.DeleteDrawPicture=function(){if(this.ChartPicture&&this.HQChart){this.HQChart.ClearChartDrawPicture(this.ChartPicture);}this.Close();};this.ShowButton=function(dom,diaplay){if(dom.style.display==diaplay)return;dom.style.display=diaplay;};this.GetRandomColor=function(currentColor,randomLineColor){var colorIndex=0;for(var i=0;i<randomLineColor.length;++i){if(currentColor==randomLineColor[i]){colorIndex=i+1;break;}}colorIndex=colorIndex%randomLineColor.length;var color=randomLineColor[colorIndex];return color;};this.ModifyLineColor=function(){if(!this.ChartPicture||!this.HQChart)return;var color=this.GetRandomColor(this.ChartPicture.LineColor,this.RandomLineColor);this.ChartPicture.LineColor=color;this.ChartPicture.PointColor=color;if(this.ColorButton)this.ColorButton.Span.style['color']=color;if(this.HQChart.ChartDrawStorage)this.HQChart.ChartDrawStorage.SaveDrawData(this.ChartPicture);//保存下
13277
+ this.HQChart.Draw();};this.ModifyFontColor=function(){if(!this.ChartPicture||!this.HQChart)return;var color=this.GetRandomColor(this.ChartPicture.TextColor,this.RandomFontColor);this.ChartPicture.TextColor=color;if(this.FontColorButton)this.FontColorButton.Span.style['color']=color;if(this.HQChart.ChartDrawStorage)this.HQChart.ChartDrawStorage.SaveDrawData(this.ChartPicture);//保存下
13278
+ this.HQChart.Draw();};this.ModifyBGColor=function(){if(!this.ChartPicture||!this.HQChart)return;var color=this.GetRandomColor(this.ChartPicture.BGColor,this.RandomBGColor);this.ChartPicture.BGColor=color;if(this.BGColorButton)this.BGColorButton.Span.style['color']=color;if(this.HQChart.ChartDrawStorage)this.HQChart.ChartDrawStorage.SaveDrawData(this.ChartPicture);//保存下
13279
+ this.HQChart.Draw();};this.Show=function(x,y){if(!this.DivDialog)this.Create();this.DivDialog.style.visibility='visible';this.DivDialog.style.top=y+"px";this.DivDialog.style.left=x+"px";};this.SetChartPicture=function(chart){this.ChartPicture=chart;var bShowLineColor=true,bShowBGColor=false,bShowFontColor=false;var bgColor=null,fontColor=null;var ARRAY_TEXT_CHART=['ChartDrawPriceLabel',"ChartDrawAnchoredText","ChartDrawPriceNote","ChartDrawNote"];if(ARRAY_TEXT_CHART.includes(chart.ClassName)){bShowBGColor=true;bShowFontColor=true;bgColor=chart.BGColor;fontColor=chart.TextColor;}if(this.ColorButton){var item=this.ColorButton;this.ShowButton(item.Div,bShowLineColor?"block":"none");if(bShowLineColor){item.Span.style['color']=chart.LineColor;}}if(this.BGColorButton){var item=this.BGColorButton;this.ShowButton(item.Div,bShowBGColor?"block":"none");if(bShowBGColor){item.Span.style['color']=bgColor;}}if(this.FontColorButton){var item=this.FontColorButton;this.ShowButton(item.Div,bShowFontColor?"block":"none");if(bShowFontColor){item.Span.style['color']=fontColor;}}};this.OnMouseDownTitle=function(e){var _this76=this;if(!this.DivDialog)return;var dragData={X:e.clientX,Y:e.clientY};dragData.YOffset=e.clientX-this.DivDialog.offsetLeft;dragData.XOffset=e.clientY-this.DivDialog.offsetTop;this.DragTitle=dragData;document.onmousemove=function(e){_this76.DocOnMouseMoveTitle(e);};document.onmouseup=function(e){_this76.DocOnMouseUpTitle(e);};};this.DocOnMouseMoveTitle=function(e){if(!this.DragTitle)return;var left=e.clientX-this.DragTitle.YOffset;var top=e.clientY-this.DragTitle.XOffset;var right=left+this.DivDialog.offsetWidth;var bottom=top+this.DivDialog.offsetHeight;if(right+5>=window.innerWidth)left=window.innerWidth-this.DivDialog.offsetWidth-5;if(bottom+5>=window.innerHeight)top=window.innerHeight-this.DivDialog.offsetHeight-5;this.DivDialog.style.left=left+'px';this.DivDialog.style.top=top+'px';if(e.preventDefault)e.preventDefault();};this.DocOnMouseUpTitle=function(e){this.DragTitle=null;this.onmousemove=null;this.onmouseup=null;};}///////////////////////////////////////////////////////////////////////////////////
13261
13280
  // 工作线程计算指标示例
13262
13281
  //
13263
13282
  //
@@ -13269,7 +13288,7 @@ hisData.Symbol=message.symbol;}var stockObj={HQDataType:HQ_DATA_TYPE.KLINE_ID,St
13269
13288
  this.ExecuteScript(item,data);}this.Status=0;}};this.OnExecuteFinish=function(data,indexInfo,jsExectute,jobInfo){var message={Data:data,IndexInfo:indexInfo,ID:JSCHART_WORKER_MESSAGE_ID.FINISH_EXECUTE_SCRIPT,JobInfo:jobInfo};postMessage(message);};this.OnExecuteError=function(error,indexInfo,jobData){var message={IndexInfo:indexInfo,ID:JSCHART_WORKER_MESSAGE_ID.ERROR_EXECUTE_SCRIPT,Error:error};postMessage(message);};}/********************************************************************************
13270
13289
  * 版本信息输出
13271
13290
  *
13272
- */var HQCHART_VERSION="1.1.13317";function PrintHQChartVersion(){var log='*************************************************************************************************************\n*\n* HQChart Ver: '+HQCHART_VERSION+' \n* \n* License: Apache License 2.0 \n* Source: https://github.com/jones2000/HQChart\n*\n*************************************************************************************************************\n';console.log(log);}PrintHQChartVersion();//把给外界调用的方法暴露出来
13291
+ */var HQCHART_VERSION="1.1.13326";function PrintHQChartVersion(){var log='*************************************************************************************************************\n*\n* HQChart Ver: '+HQCHART_VERSION+' \n* \n* License: Apache License 2.0 \n* Source: https://github.com/jones2000/HQChart\n*\n*************************************************************************************************************\n';console.log(log);}PrintHQChartVersion();//把给外界调用的方法暴露出来
13273
13292
  exports.default=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
13274
13293
  // BaseIndex:BaseIndex,
13275
13294
  // ChartLine:ChartLine,