hqchart 1.1.12651 → 1.1.12669

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.
@@ -58,7 +58,7 @@ HISTORY_MINUTE_ID:103,//历史分钟 走势图
58
58
  KLINE_DAY_ID:0,KLINE_WEEK_ID:1,KLINE_TWOWEEK_ID:21,KLINE_MONTH_ID:2,KLINE_QUARTER_ID:9,KLINE_YEAR_ID:3,KLINE_MINUTE_ID:4,KLINE_5_MINUTE_ID:5,KLINE_15_MINUTE_ID:6,KLINE_30_MINUTE_ID:7,KLINE_60_MINUTE_ID:8};//自定义的指标脚本
59
59
  function CustomIndexScript(){this.DataMap=new _map2.default();//key=指标id, value=data {ID:, Name:指标名字, Description:指标描述信息 Args:参数 ......}
60
60
  this.Get=function(id){if(!this.DataMap.has(id))return null;return this.DataMap.get(id);};this.Add=function(data){this.DataMap.set(data.ID,data);};}var g_CustomIndex=new CustomIndexScript();function JSIndexScript(){this.DataMap=new _map2.default([['MA',this.MA],['均线',this.MA],["MA4",this.MA4],["MA5",this.MA5],["MA6",this.MA6],["MA7",this.MA7],["MA8",this.MA8],['BOLL',this.BOLL],['BOLL副图',this.BOLL2],['BBI',this.BBI],['DKX',this.DKX],['MIKE',this.MIKE],['PBX',this.PBX],['ENE',this.ENE],['MACD',this.MACD],['KDJ',this.KDJ],["MACD2",this.MACD2],['VOL',this.VOL],["VOL_OVERLAY",this.VOL_OVERLAY],['RSI',this.RSI],['BRAR',this.BRAR],['WR',this.WR],['BIAS',this.BIAS],['OBV',this.OBV],['DMI',this.DMI],['CR',this.CR],['PSY',this.PSY],['CCI',this.CCI],['DMA',this.DMA],['TRIX',this.TRIX],['VR',this.VR],['EMV',this.EMV],['ROC',this.ROC],['MTM',this.MTM],['FSL',this.FSL],['CYR',this.CYR],['MASS',this.MASS],['WAD',this.WAD],['CHO',this.CHO],['ADTM',this.ADTM],['HSL',this.HSL],['BIAS36',this.BIAS36],['BIAS_QL',this.BIAS_QL],['DPO',this.DPO],['OSC',this.OSC],['ATR',this.ATR],['NVI',this.NVI],['PVI',this.PVI],['UOS',this.UOS],['CYW',this.CYW],['LON',this.LON],['NDB',this.NDB],['SKDJ',this.SKDJ],['KD',this.KD],['FKX',this.FKX],['DKCOL',this.DKCOL],['UDL',this.UDL],['MFI',this.MFI],['LWR',this.LWR],['MARSI',this.MARSI],['CYD',this.CYD],['CYF',this.CYF],['TAPI',this.TAPI],['VMACD',this.VMACD],['QACD',this.QACD],['VPT',this.VPT],['WVAD',this.WVAD],['DBQR',this.DBQR],['JS',this.JS],['CYE',this.CYE],['QR',this.QR],['GDX',this.GDX],['JLHB',this.JLHB],['PCNT',this.PCNT],['BTX',this.BTX],['AMO',this.AMO],['VRSI',this.VRSI],['HSCOL',this.HSCOL],['DBQRV',this.DBQRV],['DBLB',this.DBLB],['ACD',this.ACD],['EXPMA',this.EXPMA],['EXPMA_S',this.EXPMA_S],['HMA',this.HMA],['LMA',this.LMA],['VMA',this.VMA],['AMV',this.AMV],['BBIBOLL',this.BBIBOLL],['ALLIGAT',this.ALLIGAT],['ZX',this.ZX],['XS',this.XS],['XS2',this.XS2],['SG-XDT',this.SG_XDT],['SG-SMX',this.SG_SMX],['SG-LB',this.SG_LB],['SG-PF',this.SG_PF],['RAD',this.RAD],['SHT',this.SHT],['ZLJC',this.ZLJC],['ZLMM',this.ZLMM],['SLZT',this.SLZT],['ADVOL',this.ADVOL],['CYC',this.CYC],['CYS',this.CYS],['CYQKL',this.CYQKL],['SCR',this.SCR],['ASR',this.ASR],['SAR',this.SAR],['TJCJL',this.TJCJL],['量比',this.VOLRate],['平均K线',this.HeikinAshi],["ADL",this.ADL],["SQJZ",this.SQJZ],["XT",this.XT],["CFJT",this.CFJT],["CYX",this.CYX],["WAVE",this.WAVE],['VOL-TDX',this.VOL_TDX],['EMPTY',this.EMPTY],//什么都不显示的指标
61
- ['神奇九转',this.NineTurns],['EMA',this.EMA3],['EMA4',this.EMA4],['EMA5',this.EMA5],['EMA6',this.EMA6],//通达信特色指标
61
+ ['神奇九转',this.NineTurns],['EMA',this.EMA3],['EMA4',this.EMA4],['EMA5',this.EMA5],['EMA6',this.EMA6],["ICHIMOKU",this.ICHIMOKU],["CDP-STD",this.CDP_STD],["TBP-STD",this.TBP_STD],//通达信特色指标
62
62
  ["散户线",this.ShareholderCount],["NXTS",this.NXTS],["FKX",this.FKX],["两融资金",this.Margin4],["ZSDB",this.ZSDB],['CJL2',this.CJL],//期货持仓量
63
63
  ['ASI',this.ASI],['DC',this.DC],['DEMA',this.DEMA],["VWAP",this.VWAP],['飞龙四式',this.Dragon4_Main],['飞龙四式-附图',this.Dragon4_Fig],['资金分析',this.FundsAnalysis],['融资占比',this.MarginProportion],['负面新闻',this.NewsNegative],['涨跌趋势',this.UpDownAnalyze],['北上资金',this.HK2SHSZ],['股东人数',this.ShareHolder],["两融余额",this.Margin2],["两融余额2",this.Margin3],['Zealink-资金吸筹',this.Zealink_Index1],['Zealink-牛熊区间',this.Zealink_Index2],['Zealink-持仓信号',this.Zealink_Index3],['Zealink-增减持',this.Zealink_Index4],['Zealink-大宗交易',this.Zealink_Index5],['Zealink-信托持股',this.Zealink_Index6],['Zealink-官网新闻',this.Zealink_Index7],['Zealink-高管要闻',this.Zealink_Index8],['Zealink-股权质押',this.Zealink_Index9],['Zealink-操盘BS点',this.Zealink_Index10],['Zealink-操盘BS点2',this.Zealink_Index11],//外包指标
64
64
  ['放心股-操盘BS点',this.FXG_BSPoint],['放心股-涨停多空线',this.FXG_INDEX],['放心股-涨停吸筹区',this.FXG_INDEX2],['放心股-量能黄金点',this.FXG_INDEX3],//五彩K线(函数COLOR_开头)
@@ -1292,7 +1292,37 @@ DRAWTEXT(D5,H*1.010,'5'),COLORBLUE;\n\
1292
1292
  DRAWTEXT(D6,H*1.010,'6'),COLORBLUE;\n\
1293
1293
  DRAWTEXT(D7,H*1.010,'7'),COLORBLUE;\n\
1294
1294
  DRAWTEXT(D8,H*1.010,'8'),COLORBLUE;\n\
1295
- DRAWTEXT(D9,H*1.010,'9'),COLORGREEN;"};return data;};JSIndexScript.prototype.TEST=function(){var data={Name:'TEST',Description:'测试脚本',IsMainIndex:false,Args:[{Name:'N',Value:10}],Script://脚本
1295
+ DRAWTEXT(D9,H*1.010,'9'),COLORGREEN;"};return data;};JSIndexScript.prototype.ICHIMOKU=function(){var data={Name:'ICHIMOKU',Description:'一目均衡图',IsMainIndex:true,Args:[{Name:'SHORT',Value:7},{Name:'MID',Value:22},{Name:'LONG',Value:44}],Script://脚本
1296
+ "转换线:(HHV(H,SHORT)+LLV(L,SHORT))/2,COLORRED,LINETHICK2;\n\
1297
+ 基准线:(HHV(H,MID)+LLV(L,MID))/2,COLORFF8040,LINETHICK2;\n\
1298
+ 迟行带:REFXV(C,MID),COLORGRAY,LINETHICK2;\n\
1299
+ A:=REF((转换线+基准线)/2,MID);\n\
1300
+ B:=REF((HHV(H,LONG)+LLV(L,LONG))/2,MID);\n\
1301
+ STICKLINE(A<B,A,B,2,1),COLOR339933;\n\
1302
+ STICKLINE(A>=B,A,B,2,1),COLOR0033CC;\n\
1303
+ 先行带A:PLOYLINE(1,A),COLORBROWN;\n\
1304
+ 先行带B:PLOYLINE(1,B),COLORLIGREEN;"};return data;};JSIndexScript.prototype.CDP_STD=function(){var data={Name:'CDP-STD',Description:'逆势操作',IsMainIndex:true,Script://脚本
1305
+ "CH:=REF(H,1);\n\
1306
+ CL:=REF(L,1);\n\
1307
+ CC:=REF(C,1);\n\
1308
+ CDP:(CH+CL+CC)/3;\n\
1309
+ AH:2*CDP+CH-2*CL;\n\
1310
+ NH:CDP+CDP-CL;\n\
1311
+ NL:CDP+CDP-CH;\n\
1312
+ AL:2*CDP-2*CH+CL;"};return data;};JSIndexScript.prototype.TBP_STD=function(){var data={Name:'TBP-STD',Description:'趋势平衡点',IsMainIndex:true,Script://脚本
1313
+ "APX:=(H+L+C)/3;\n\
1314
+ TR0:=MAX(H-L,MAX(ABS(H-REF(C,1)),ABS(L-REF(C,1))));\n\
1315
+ MF0:=C-REF(C,2);\n\
1316
+ MF1:=REF(MF0,1);\n\
1317
+ MF2:=REF(MF0,2);\n\
1318
+ DIRECT1:=BARSLAST(MF0>MF1 AND MF0>MF2);\n\
1319
+ DIRECT2:=BARSLAST(MF0<MF1 AND MF0<MF2);\n\
1320
+ DIRECT0:=IF(DIRECT1<DIRECT2,100,-100);\n\
1321
+ TBP:REF(REF(C,1)+IF(DIRECT0>50,MIN(MF0,MF1),MAX(MF0,MF1)),1);\n\
1322
+ 多头获利:REF(IF(DIRECT0>50,APX*2-L,DRAWNULL),1),NODRAW;\n\
1323
+ 多头停损:REF(IF(DIRECT0>50,APX-TR0,DRAWNULL),1),NODRAW;\n\
1324
+ 空头回补:REF(IF(DIRECT0<-50,APX*2-H,DRAWNULL),1),NODRAW;\n\
1325
+ 空头停损:REF(IF(DIRECT0<-50,APX+TR0,DRAWNULL),1),NODRAW;"};return data;};JSIndexScript.prototype.TEST=function(){var data={Name:'TEST',Description:'测试脚本',IsMainIndex:false,Args:[{Name:'N',Value:10}],Script://脚本
1296
1326
  "DRAWCHANNEL(OPEN>C,H,L, 'RGB(255,94,102)', 2 ,'5,5','RGBA(58,20,62,0.3)' );"};return data;};/*
1297
1327
  Copyright (c) 2018 jones
1298
1328
 
@@ -9834,7 +9864,9 @@ else if(period<0)period=i+1;count=0;for(var j=i,k=0;j>=0&&k<period;--j,++k)//当
9834
9864
  ZL:VALUEWHEN(DATE<>REF(DATE,1),LV(L,N));//在分钟周期上,求昨天最低价。
9835
9865
  例3:
9836
9866
  LV(L,5) 和 REF(LLV(L,5),1) 的结果是一样的,用LV编写更加方便。
9837
- */this.LV=function(data,n){var result=this.LLV(data,n);return this.REF(result,1);};this.STD=function(data,n){var result=[];if(!Array.isArray(data))return result;var nStart=this.GetFirstVaildIndex(data);if(!IFrameSplitOperator.IsNumber(n))return result;if(nStart+n>data.length||n<1)return result;var i=nStart,j=0,bFirst=true,dTotal=0,dAvg=0;for(i+=n-1;i<data.length;++i){dTotal=0;if(bFirst){bFirst=false;for(j=i-n+1;j<=i;++j){dAvg+=data[j];}dAvg/=n;}else{dAvg+=(data[i]-data[i-n])/n;}for(j=i-n+1;j<=i;++j){dTotal+=(data[j]-dAvg)*(data[j]-dAvg);}result[i]=Math.sqrt(dTotal/(n-1));}return result;};//平均绝对方差
9867
+ */this.LV=function(data,n){var result=this.LLV(data,n);return this.REF(result,1);};this.STD=function(data,n){var result=[];if(!Array.isArray(data))return result;var nStart=this.GetFirstVaildIndex(data);if(!IFrameSplitOperator.IsNumber(n))return result;if(nStart+n>data.length||n<1)return result;var i=nStart,j=0,bFirst=true,dTotal=0,dAvg=0;for(i+=n-1;i<data.length;++i){dTotal=0;if(bFirst){bFirst=false;for(j=i-n+1;j<=i;++j){dAvg+=data[j];}dAvg/=n;}else{dAvg+=(data[i]-data[i-n])/n;}for(j=i-n+1;j<=i;++j){dTotal+=(data[j]-dAvg)*(data[j]-dAvg);}result[i]=Math.sqrt(dTotal/(n-1));}return result;};//STDDEV(X,N) 返回标准偏差
9868
+ //将标准差除以样本大小N的平方根即可得出标准误差。标准误差 = σ/sqrt(n)
9869
+ this.STDDEV=function(data,n){var result=[];if(!Array.isArray(data))return result;var nStart=this.GetFirstVaildIndex(data);if(!IFrameSplitOperator.IsNumber(n))return result;if(nStart+n>data.length||n<1)return result;var i=nStart,j=0,bFirst=true,dTotal=0,dAvg=0;for(i+=n-1;i<data.length;++i){dTotal=0;if(bFirst){bFirst=false;for(j=i-n+1;j<=i;++j){dAvg+=data[j];}dAvg/=n;}else{dAvg+=(data[i]-data[i-n])/n;}for(j=i-n+1;j<=i;++j){dTotal+=(data[j]-dAvg)*(data[j]-dAvg);}result[i]=Math.sqrt(dTotal/(n-1))/Math.sqrt(n);}return result;};//平均绝对方差
9838
9870
  this.AVEDEV=function(data,n){var result=[];var total=0;var averageData=[];//平均值
9839
9871
  for(var i=n-1;i<data.length;++i){total=0;for(var j=0;j<n;++j){total+=data[i-j];}averageData[i]=total/n;}for(var i=n-1;i<data.length;++i){total=0;for(var j=0;j<n;++j){total+=Math.abs(data[i-j]-averageData[i]);}result[i]=total/n;}return result;};//上穿
9840
9872
  this.CROSS=function(data,data2){var result=[];if(Array.isArray(data)&&Array.isArray(data2)){if(data.length!=data2.length)return result=[];var index=0;for(;index<data.length;++index){if(this.IsNumber(data[index])&&this.IsNumber(data2[index]))break;}for(++index;index<data.length;++index){result[index]=data[index]>data2[index]&&data[index-1]<data2[index-1]?1:0;}}else if(Array.isArray(data)&&typeof data2=='number'){var index=0;for(;index<data.length;++index){if(this.IsNumber(data[index]))break;}for(++index;index<data.length;++index){result[index]=data[index]>data2&&data[index-1]<data2?1:0;}}else if(typeof data=='number'&&Array.isArray(data2)){var index=0;for(;index<data2.length;++index){if(this.IsNumber(data2[index]))break;}for(++index;index<data2.length;++index){result[index]=data2[index]<data&&data2[index-1]>data?1:0;}}return result;};/*
@@ -10405,7 +10437,7 @@ this.STRFORMAT=function(strFormat,args,node){var aryParam=strFormat.match(/{[0-9
10405
10437
  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;//是否输出数组字符串
10406
10438
  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;}};//函数调用
10407
10439
  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"://文华函数
10408
- 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'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]);//三角函数
10440
+ 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]);//三角函数
10409
10441
  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:绘图数据(可选)}
10410
10442
  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线数据
10411
10443
  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);};}//是否有是有效的数字
@@ -11307,17 +11339,17 @@ else if(value.indexOf('LINEOVERLAY')==0)isOverlayLine=true;else if(value.indexOf
11307
11339
  }}else if(itemExpression.Type==Syntax.Literal)//常量
11308
11340
  {var aryValue=itemExpression.Value;_varName7=itemExpression.Value.toString();isNoneName=true;this.VarTable.set(_varName7,aryValue);//把常量放到变量表里
11309
11341
  }else if(itemExpression.Type==Syntax.CallExpression){if(_j15==0){if(this.IsDrawFunction(itemExpression.Callee.Name)){draw=itemExpression.Out;_drawName=itemExpression.Callee.Name;}else{var _varValue4=itemExpression.Out;_varName7='__temp_sc_'+itemExpression.Callee.Name+'_'+_i146+'__';isNoneName=true;this.VarTable.set(_varName7,_varValue4);}}}else if(itemExpression.Type==Syntax.BinaryExpression){_varName7="__temp_sb_"+_i146+"__";var _aryValue2=itemExpression.Out;isNoneName=true;this.VarTable.set(_varName7,_aryValue2);}}var outValue;if(draw)outValue='\u8F93\u51FA: '+draw;else if(isNoneName)outValue='\u8F93\u51FA: '+this.VarTable.get(_varName7);else outValue='\u8F93\u51FA'+_varName7+': '+this.VarTable.get(_varName7);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&&_varName7)//圆点
11310
- {outValue+=",画小圆点线";var _value15={Name:_varName7,Data:outValue,Radius:g_JSChartResource.POINTDOT.Radius,Type:3};this.OutVarTable.push(_value15);}else if(circleDot&&_varName7)//圆点
11311
- {outValue+=",画小圆圈线";var _value16={Name:_varName7,Data:outValue,Radius:g_JSChartResource.CIRCLEDOT.Radius,Type:3};this.OutVarTable.push(_value16);}else if(lineStick&&_varName7)//LINESTICK 同时画出柱状线和指标线
11312
- {outValue+=",画出柱状线和指标线";var _value17={Name:_varName7,Data:outValue,Type:4};this.OutVarTable.push(_value17);}else if(stick&&_varName7)//STICK 画柱状线
11313
- {outValue+=",画柱状线";var _value18={Name:_varName7,Data:outValue,Type:5};this.OutVarTable.push(_value18);}else if(volStick&&_varName7)//VOLSTICK 画彩色柱状线
11314
- {outValue+=",画成交量柱状线";var _value19={Name:_varName7,Data:outValue,Type:6};this.OutVarTable.push(_value19);}else if(_varName7&&color){var _value20={Name:_varName7,Data:outValue,Color:color,Type:0};this.OutVarTable.push(_value20);}else if(draw)//画图函数
11315
- {var outVar={Name:_drawName,Data:outValue,Type:1};this.OutVarTable.push(outVar);}else if(colorStick&&_varName7)//CYW: SUM(VAR4,10)/10000, COLORSTICK; 画上下柱子
11316
- {outValue+=",画彩色柱状线";var _value21={Name:_varName7,Data:outValue,Color:color,Type:2};this.OutVarTable.push(_value21);}else if(_varName7){var _value22={Name:_varName7,Data:outValue,Type:0};this.OutVarTable.push(_value22);}}}}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;}};this.VisitSequenceExpression=function(node){for(var _i147 in node.Expression){var _item28=node.Expression[_i147];this.VisitNode(_item28);}};//函数调用
11342
+ {outValue+=",画小圆点线";var _value15={Name:_varName7,Draw:outValue,Radius:g_JSChartResource.POINTDOT.Radius,Type:3};this.OutVarTable.push(_value15);}else if(circleDot&&_varName7)//圆点
11343
+ {outValue+=",画小圆圈线";var _value16={Name:_varName7,Draw:outValue,Radius:g_JSChartResource.CIRCLEDOT.Radius,Type:3};this.OutVarTable.push(_value16);}else if(lineStick&&_varName7)//LINESTICK 同时画出柱状线和指标线
11344
+ {outValue+=",画出柱状线和指标线";var _value17={Name:_varName7,Draw:outValue,Type:4};this.OutVarTable.push(_value17);}else if(stick&&_varName7)//STICK 画柱状线
11345
+ {outValue+=",画柱状线";var _value18={Name:_varName7,Draw:outValue,Type:5};this.OutVarTable.push(_value18);}else if(volStick&&_varName7)//VOLSTICK 画彩色柱状线
11346
+ {outValue+=",画成交量柱状线";var _value19={Name:_varName7,Draw:outValue,Type:6};this.OutVarTable.push(_value19);}else if(_varName7&&color){var _value20={Name:_varName7,Data:outValue,Color:color,Type:0};this.OutVarTable.push(_value20);}else if(draw)//画图函数
11347
+ {var outVar={Name:_drawName,Draw:outValue,Type:1};this.OutVarTable.push(outVar);}else if(colorStick&&_varName7)//CYW: SUM(VAR4,10)/10000, COLORSTICK; 画上下柱子
11348
+ {outValue+=",画彩色柱状线";var _value21={Name:_varName7,Draw:outValue,Color:color,Type:2};this.OutVarTable.push(_value21);}else if(_varName7){var _value22={Name:_varName7,Data:outValue,Type:0};this.OutVarTable.push(_value22);}}}}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;}};this.VisitSequenceExpression=function(node){for(var _i147 in node.Expression){var _item28=node.Expression[_i147];this.VisitNode(_item28);}};//函数调用
11317
11349
  this.VisitCallExpression=function(node){var funcName=node.Callee.Name;var args=[];for(var _i148 in node.Arguments){var _item29=node.Arguments[_i148];var value=void 0;if(_item29.Type==Syntax.BinaryExpression||_item29.Type==Syntax.LogicalExpression)value=this.VisitBinaryExpression(_item29);else if(_item29.Type==Syntax.CallExpression)value=this.VisitCallExpression(_item29);else value=this.GetNodeValue(_item29);args.push(value);}JSConsole.Complier.Log('[JSExplainer::VisitCallExpression]',funcName,'(',args.toString(),')');if(g_JSComplierResource.IsCustomFunction(funcName)){var data=this.Algorithm.CallCustomFunction(funcName,args,this.SymbolData,node);node.Out=[];node.Draw=null;if(data){if(data.Out)node.Out=data.Out;if(data.Draw)node.Draw=data.Draw;}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';}}],["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';}}],//字符串函数
11318
11350
  ["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];}}],["NAMEINCLUD",{Name:"NAMEINCLUD",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';}}],["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)//动态参数
11319
11351
  {}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);//绘图函数
11320
- 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"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"SELL":return"卖出平仓";case"BUY":return"买入开仓";case"SELLSHORT":return"卖出开仓";case"BUYSHORT":return"买入平仓";case"YMOVE":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 自定义色
11352
+ 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"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];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 自定义色
11321
11353
  //格式为COLOR+“RRGGBB”:RR、GG、BB表示红色、绿色和蓝色的分量,每种颜色的取值范围是00-FF,采用了16进制。
11322
11354
  //例如:MA5:MA(CLOSE,5),COLOR00FFFF 表示纯红色与纯绿色的混合色:COLOR808000表示淡蓝色和淡绿色的混合色。
11323
11355
  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
@@ -12796,7 +12828,7 @@ hisData.Symbol=message.symbol;}var stockObj={HQDataType:HQ_DATA_TYPE.KLINE_ID,St
12796
12828
  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);};}/********************************************************************************
12797
12829
  * 版本信息输出
12798
12830
  *
12799
- */var HQCHART_VERSION="1.1.12650";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();//把给外界调用的方法暴露出来
12831
+ */var HQCHART_VERSION="1.1.12668";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();//把给外界调用的方法暴露出来
12800
12832
  exports.default=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
12801
12833
  // BaseIndex:BaseIndex,
12802
12834
  // ChartLine:ChartLine,
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "hqchart",
3
3
  "description": "stock chart",
4
4
  "author": "jones2000",
5
- "version": "1.1.12651",
5
+ "version": "1.1.12669",
6
6
  "main": "lib/main.js",
7
7
  "private": false,
8
8
  "license": "Apache License 2.0",
@@ -4003,6 +4003,50 @@ function JSAlgorithm(errorHandler,symbolData)
4003
4003
  return result;
4004
4004
  }
4005
4005
 
4006
+
4007
+
4008
+ //STDDEV(X,N) 返回标准偏差
4009
+ //将标准差除以样本大小N的平方根即可得出标准误差。标准误差 = σ/sqrt(n)
4010
+ this.STDDEV=function(data,n)
4011
+ {
4012
+ var result=[];
4013
+
4014
+ if (!Array.isArray(data)) return result;
4015
+ var nStart=this.GetFirstVaildIndex(data);
4016
+ if (!IFrameSplitOperator.IsNumber(n)) return result;
4017
+ if(nStart+n>data.length || n<1) return result;
4018
+
4019
+ var i=nStart, j=0, bFirst=true, dTotal=0, dAvg=0;
4020
+ for(i+=n-1;i<data.length;++i)
4021
+ {
4022
+ dTotal = 0;
4023
+ if(bFirst)
4024
+ {
4025
+ bFirst = false;
4026
+ for(j=i-n+1;j<=i;++j)
4027
+ {
4028
+ dAvg += data[j];
4029
+ }
4030
+
4031
+ dAvg /= n;
4032
+ }
4033
+ else
4034
+ {
4035
+ dAvg += (data[i]-data[i-n])/n;
4036
+ }
4037
+
4038
+ for(j=i-n+1;j<=i;++j)
4039
+ {
4040
+ dTotal += (data[j]-dAvg)*(data[j]-dAvg);
4041
+ }
4042
+
4043
+
4044
+ result[i] = Math.sqrt(dTotal/(n-1))/Math.sqrt(n);
4045
+ }
4046
+
4047
+ return result;
4048
+ }
4049
+
4006
4050
  //平均绝对方差
4007
4051
  this.AVEDEV=function(data,n)
4008
4052
  {
@@ -8814,6 +8858,8 @@ function JSAlgorithm(errorHandler,symbolData)
8814
8858
  return this.AVEDEV(args[0], args[1]);
8815
8859
  case 'STD':
8816
8860
  return this.STD(args[0], args[1]);
8861
+ case "STDDEV":
8862
+ return this.STDDEV(args[0], args[1]);
8817
8863
  case 'IF':
8818
8864
  case 'IFF':
8819
8865
  case "IFELSE":
@@ -18275,31 +18321,31 @@ function JSExplainer(ast,option)
18275
18321
  if (pointDot && varName) //圆点
18276
18322
  {
18277
18323
  outValue+=",画小圆点线";
18278
- let value={Name:varName, Data:outValue, Radius:g_JSChartResource.POINTDOT.Radius, Type:3};
18324
+ let value={Name:varName, Draw:outValue, Radius:g_JSChartResource.POINTDOT.Radius, Type:3};
18279
18325
  this.OutVarTable.push(value);
18280
18326
  }
18281
18327
  else if (circleDot && varName) //圆点
18282
18328
  {
18283
18329
  outValue+=",画小圆圈线";
18284
- let value={Name:varName, Data:outValue, Radius:g_JSChartResource.CIRCLEDOT.Radius, Type:3};
18330
+ let value={Name:varName, Draw:outValue, Radius:g_JSChartResource.CIRCLEDOT.Radius, Type:3};
18285
18331
  this.OutVarTable.push(value);
18286
18332
  }
18287
18333
  else if (lineStick && varName) //LINESTICK 同时画出柱状线和指标线
18288
18334
  {
18289
18335
  outValue+=",画出柱状线和指标线";
18290
- let value={Name:varName, Data:outValue, Type:4};
18336
+ let value={Name:varName, Draw:outValue, Type:4};
18291
18337
  this.OutVarTable.push(value);
18292
18338
  }
18293
18339
  else if (stick && varName) //STICK 画柱状线
18294
18340
  {
18295
18341
  outValue+=",画柱状线";
18296
- let value={Name:varName, Data:outValue, Type:5};
18342
+ let value={Name:varName, Draw:outValue, Type:5};
18297
18343
  this.OutVarTable.push(value);
18298
18344
  }
18299
18345
  else if (volStick && varName) //VOLSTICK 画彩色柱状线
18300
18346
  {
18301
18347
  outValue+=",画成交量柱状线";
18302
- let value={Name:varName, Data:outValue, Type:6};
18348
+ let value={Name:varName, Draw:outValue, Type:6};
18303
18349
  this.OutVarTable.push(value);
18304
18350
  }
18305
18351
  else if (varName && color)
@@ -18309,13 +18355,13 @@ function JSExplainer(ast,option)
18309
18355
  }
18310
18356
  else if (draw) //画图函数
18311
18357
  {
18312
- var outVar={ Name:drawName, Data:outValue, Type:1 };
18358
+ var outVar={ Name:drawName, Draw:outValue, Type:1 };
18313
18359
  this.OutVarTable.push(outVar);
18314
18360
  }
18315
18361
  else if (colorStick && varName) //CYW: SUM(VAR4,10)/10000, COLORSTICK; 画上下柱子
18316
18362
  {
18317
18363
  outValue+=",画彩色柱状线";
18318
- let value={Name:varName, Data:outValue, Color:color, Type:2};
18364
+ let value={Name:varName, Draw:outValue, Color:color, Type:2};
18319
18365
  this.OutVarTable.push(value);
18320
18366
  }
18321
18367
  else if (varName)
@@ -18641,6 +18687,8 @@ function JSExplainer(ast,option)
18641
18687
  return `当满足条件${args[0]}时,在横轴${args[1]}纵轴${args[2]}位置书写数字`;
18642
18688
  case "RGB":
18643
18689
  return `自定色[${args[0]},${args[1]},${args[2]}]`;
18690
+ case "RGBA":
18691
+ return `自定色[${args[0]},${args[1]},${args[2]},${args[3]}]`;
18644
18692
  case "DRAWBAND":
18645
18693
  return '画带状线';
18646
18694
  case "DRAWRECTREL":
@@ -18667,6 +18715,12 @@ function JSExplainer(ast,option)
18667
18715
 
18668
18716
  case "YMOVE":
18669
18717
  return;
18718
+ case "BACKGROUND":
18719
+ return "绘制背景";
18720
+ case "UPCOLOR":
18721
+ return `上涨颜色${args[0]}`;
18722
+ case "DOWNCOLOR":
18723
+ return `下跌颜色${args[0]}`;
18670
18724
 
18671
18725
  default:
18672
18726
  this.ThrowUnexpectedNode(node,`函数${funcName}不存在`);
@@ -109,6 +109,7 @@ function JSIndexScript()
109
109
  ['EMPTY', this.EMPTY], //什么都不显示的指标
110
110
  ['神奇九转', this.NineTurns],
111
111
  ['EMA', this.EMA3], ['EMA4', this.EMA4], ['EMA5', this.EMA5],['EMA6', this.EMA6],
112
+ ["ICHIMOKU",this.ICHIMOKU],["CDP-STD", this.CDP_STD],["TBP-STD",this.TBP_STD],
112
113
 
113
114
  //通达信特色指标
114
115
  ["散户线", this.ShareholderCount],["NXTS", this.NXTS],["FKX", this.FKX],["两融资金", this.Margin4],
@@ -4049,6 +4050,69 @@ DRAWTEXT(D9,H*1.010,'9'),COLORGREEN;"
4049
4050
  return data;
4050
4051
  }
4051
4052
 
4053
+ JSIndexScript.prototype.ICHIMOKU=function()
4054
+ {
4055
+ let data =
4056
+ {
4057
+ Name: 'ICHIMOKU', Description: '一目均衡图', IsMainIndex: true,
4058
+ Args: [{ Name: 'SHORT', Value: 7 },{ Name: 'MID', Value: 22 },{ Name: 'LONG', Value: 44 }],
4059
+ Script: //脚本
4060
+ "转换线:(HHV(H,SHORT)+LLV(L,SHORT))/2,COLORRED,LINETHICK2;\n\
4061
+ 基准线:(HHV(H,MID)+LLV(L,MID))/2,COLORFF8040,LINETHICK2;\n\
4062
+ 迟行带:REFXV(C,MID),COLORGRAY,LINETHICK2;\n\
4063
+ A:=REF((转换线+基准线)/2,MID);\n\
4064
+ B:=REF((HHV(H,LONG)+LLV(L,LONG))/2,MID);\n\
4065
+ STICKLINE(A<B,A,B,2,1),COLOR339933;\n\
4066
+ STICKLINE(A>=B,A,B,2,1),COLOR0033CC;\n\
4067
+ 先行带A:PLOYLINE(1,A),COLORBROWN;\n\
4068
+ 先行带B:PLOYLINE(1,B),COLORLIGREEN;"
4069
+ };
4070
+
4071
+ return data;
4072
+ }
4073
+
4074
+ JSIndexScript.prototype.CDP_STD=function()
4075
+ {
4076
+ let data =
4077
+ {
4078
+ Name: 'CDP-STD', Description: '逆势操作', IsMainIndex: true,
4079
+ Script: //脚本
4080
+ "CH:=REF(H,1);\n\
4081
+ CL:=REF(L,1);\n\
4082
+ CC:=REF(C,1);\n\
4083
+ CDP:(CH+CL+CC)/3;\n\
4084
+ AH:2*CDP+CH-2*CL;\n\
4085
+ NH:CDP+CDP-CL;\n\
4086
+ NL:CDP+CDP-CH;\n\
4087
+ AL:2*CDP-2*CH+CL;"
4088
+ };
4089
+
4090
+ return data;
4091
+ }
4092
+
4093
+ JSIndexScript.prototype.TBP_STD=function()
4094
+ {
4095
+ let data =
4096
+ {
4097
+ Name: 'TBP-STD', Description: '趋势平衡点', IsMainIndex: true,
4098
+ Script: //脚本
4099
+ "APX:=(H+L+C)/3;\n\
4100
+ TR0:=MAX(H-L,MAX(ABS(H-REF(C,1)),ABS(L-REF(C,1))));\n\
4101
+ MF0:=C-REF(C,2);\n\
4102
+ MF1:=REF(MF0,1);\n\
4103
+ MF2:=REF(MF0,2);\n\
4104
+ DIRECT1:=BARSLAST(MF0>MF1 AND MF0>MF2);\n\
4105
+ DIRECT2:=BARSLAST(MF0<MF1 AND MF0<MF2);\n\
4106
+ DIRECT0:=IF(DIRECT1<DIRECT2,100,-100);\n\
4107
+ TBP:REF(REF(C,1)+IF(DIRECT0>50,MIN(MF0,MF1),MAX(MF0,MF1)),1);\n\
4108
+ 多头获利:REF(IF(DIRECT0>50,APX*2-L,DRAWNULL),1),NODRAW;\n\
4109
+ 多头停损:REF(IF(DIRECT0>50,APX-TR0,DRAWNULL),1),NODRAW;\n\
4110
+ 空头回补:REF(IF(DIRECT0<-50,APX*2-H,DRAWNULL),1),NODRAW;\n\
4111
+ 空头停损:REF(IF(DIRECT0<-50,APX+TR0,DRAWNULL),1),NODRAW;"
4112
+ };
4113
+
4114
+ return data;
4115
+ }
4052
4116
 
4053
4117
 
4054
4118
  JSIndexScript.prototype.TEST = function ()
@@ -81,6 +81,7 @@ CodeMirror.defineMode("javascript", function(config, parserConfig) {
81
81
  'MEMA':FUNCTION_NAME,'WMA':FUNCTION_NAME,"STRLEN":FUNCTION_NAME,"TMA":FUNCTION_NAME,"HV":FUNCTION_NAME,"HOD":FUNCTION_NAME,"LV":FUNCTION_NAME,
82
82
  "VALUEWHEN":FUNCTION_NAME,"TESTSKIP":FUNCTION_NAME,"IFC":FUNCTION_NAME,"IFN":FUNCTION_NAME,"RGB":FUNCTION_NAME,"RGBX":FUNCTION_NAME,
83
83
  "SYSPARAM":FUNCTION_NAME,"CALCSTOCKINDEX":FUNCTION_NAME,"STKINDI":FUNCTION_NAME,"RGBA":FUNCTION_NAME,
84
+ "STDDEV":FUNCTION_NAME,"STD":FUNCTION_NAME,
84
85
 
85
86
  "ISUP":DATA_NAME,"ISEQUAL":DATA_NAME,"ISDOWN":DATA_NAME,
86
87
 
@@ -108,6 +109,8 @@ CodeMirror.defineMode("javascript", function(config, parserConfig) {
108
109
  //绘图函数
109
110
  'DRAWTEXT':FUNCTION_NAME,'STICKLINE':FUNCTION_NAME,'DRAWBAND':FUNCTION_NAME,'DRAWKLINE':FUNCTION_NAME,
110
111
  'PLOYLINE':FUNCTION_NAME,'POLYLINE':FUNCTION_NAME,'DRAWNUMBER':FUNCTION_NAME,'DRAWICON':FUNCTION_NAME,'SUPERDRAWTEXT':FUNCTION_NAME,
112
+ "DRAWTEXTREL":FUNCTION_NAME,"DRAWTEXTABS":FUNCTION_NAME,"DRAWGBK":FUNCTION_NAME,"FILLRGN":FUNCTION_NAME,"FLOATRGN":FUNCTION_NAME,
113
+ "HORLINE":FUNCTION_NAME,
111
114
 
112
115
 
113
116
  //个股行情数据
@@ -126,13 +129,15 @@ CodeMirror.defineMode("javascript", function(config, parserConfig) {
126
129
  'LINETHICK6':LINE_WIDTH_NAME,'LINETHICK7':LINE_WIDTH_NAME,'LINETHICK8':LINE_WIDTH_NAME,'LINETHICK9':LINE_WIDTH_NAME,'LINETHICK10':LINE_WIDTH_NAME,
127
130
 
128
131
  //字体大小
129
- "FONTSIZE10":LINE_WIDTH_NAME,"FONTSIZE11":LINE_WIDTH_NAME,"FONTSIZE12":LINE_WIDTH_NAME,"FONTSIZE4":LINE_WIDTH_NAME,"FONTSIZE15":LINE_WIDTH_NAME,
130
- "FONTSIZE16":LINE_WIDTH_NAME,"FONTSIZE17":LINE_WIDTH_NAME,"FONTSIZE18":LINE_WIDTH_NAME,"FONTSIZE9":LINE_WIDTH_NAME,"FONTSIZE20":LINE_WIDTH_NAME,
132
+ "FONTSIZE10":LINE_WIDTH_NAME,"FONTSIZE11":LINE_WIDTH_NAME,"FONTSIZE12":LINE_WIDTH_NAME,"FONTSIZE14":LINE_WIDTH_NAME,"FONTSIZE15":LINE_WIDTH_NAME,
133
+ "FONTSIZE16":LINE_WIDTH_NAME,"FONTSIZE17":LINE_WIDTH_NAME,"FONTSIZE18":LINE_WIDTH_NAME,"FONTSIZE19":LINE_WIDTH_NAME,"FONTSIZE20":LINE_WIDTH_NAME,
131
134
  "FONTSIZE21":LINE_WIDTH_NAME,"FONTSIZE22":LINE_WIDTH_NAME,"FONTSIZE23":LINE_WIDTH_NAME,"FONTSIZE24":LINE_WIDTH_NAME,"FONTSIZE25":LINE_WIDTH_NAME,
135
+ "FONTSIZE26":LINE_WIDTH_NAME,"FONTSIZE27":LINE_WIDTH_NAME,"FONTSIZE28":LINE_WIDTH_NAME,"FONTSIZE29":LINE_WIDTH_NAME,"FONTSIZE20":LINE_WIDTH_NAME,
132
136
 
133
137
  "VALIGN0":LINE_WIDTH_NAME,"VALIGN1":LINE_WIDTH_NAME,"VALIGN2":LINE_WIDTH_NAME,
138
+ "ALIGN0":LINE_WIDTH_NAME,"ALIGN1":LINE_WIDTH_NAME,"ALIGN2":LINE_WIDTH_NAME,
134
139
 
135
- 'COLORSTICK':DRAW_NAME,'CIRCLEDOT':DRAW_NAME,'POINTDOT':DRAW_NAME,'LINESTICK':DRAW_NAME,'STICK':DRAW_NAME,'NODRAW':DRAW_NAME,
140
+ 'COLORSTICK':DRAW_NAME,'CIRCLEDOT':DRAW_NAME,'POINTDOT':DRAW_NAME,'LINESTICK':DRAW_NAME,'STICK':DRAW_NAME,'NODRAW':DRAW_NAME,"NOTEXT":DRAW_NAME,"NOTITLE":DRAW_NAME,
136
141
  "LINEAREA":DRAW_NAME,
137
142
 
138
143
  "BUY":DRAW_NAME,"SELL":DRAW_NAME,"SELLSHORT":DRAW_NAME,"BUYSHORT":DRAW_NAME,"TIPICON":DRAW_NAME,"AUTOFILTER":FUNCTION_NAME,
@@ -121,6 +121,7 @@ function JSIndexScript()
121
121
  ['EMPTY', this.EMPTY], //什么都不显示的指标
122
122
  ['神奇九转', this.NineTurns],
123
123
  ['EMA', this.EMA3], ['EMA4', this.EMA4], ['EMA5', this.EMA5],['EMA6', this.EMA6],
124
+ ["ICHIMOKU",this.ICHIMOKU],["CDP-STD", this.CDP_STD],["TBP-STD",this.TBP_STD],
124
125
 
125
126
  //通达信特色指标
126
127
  ["散户线", this.ShareholderCount],["NXTS", this.NXTS],["FKX", this.FKX],["两融资金", this.Margin4],
@@ -4061,6 +4062,69 @@ DRAWTEXT(D9,H*1.010,'9'),COLORGREEN;"
4061
4062
  return data;
4062
4063
  }
4063
4064
 
4065
+ JSIndexScript.prototype.ICHIMOKU=function()
4066
+ {
4067
+ let data =
4068
+ {
4069
+ Name: 'ICHIMOKU', Description: '一目均衡图', IsMainIndex: true,
4070
+ Args: [{ Name: 'SHORT', Value: 7 },{ Name: 'MID', Value: 22 },{ Name: 'LONG', Value: 44 }],
4071
+ Script: //脚本
4072
+ "转换线:(HHV(H,SHORT)+LLV(L,SHORT))/2,COLORRED,LINETHICK2;\n\
4073
+ 基准线:(HHV(H,MID)+LLV(L,MID))/2,COLORFF8040,LINETHICK2;\n\
4074
+ 迟行带:REFXV(C,MID),COLORGRAY,LINETHICK2;\n\
4075
+ A:=REF((转换线+基准线)/2,MID);\n\
4076
+ B:=REF((HHV(H,LONG)+LLV(L,LONG))/2,MID);\n\
4077
+ STICKLINE(A<B,A,B,2,1),COLOR339933;\n\
4078
+ STICKLINE(A>=B,A,B,2,1),COLOR0033CC;\n\
4079
+ 先行带A:PLOYLINE(1,A),COLORBROWN;\n\
4080
+ 先行带B:PLOYLINE(1,B),COLORLIGREEN;"
4081
+ };
4082
+
4083
+ return data;
4084
+ }
4085
+
4086
+ JSIndexScript.prototype.CDP_STD=function()
4087
+ {
4088
+ let data =
4089
+ {
4090
+ Name: 'CDP-STD', Description: '逆势操作', IsMainIndex: true,
4091
+ Script: //脚本
4092
+ "CH:=REF(H,1);\n\
4093
+ CL:=REF(L,1);\n\
4094
+ CC:=REF(C,1);\n\
4095
+ CDP:(CH+CL+CC)/3;\n\
4096
+ AH:2*CDP+CH-2*CL;\n\
4097
+ NH:CDP+CDP-CL;\n\
4098
+ NL:CDP+CDP-CH;\n\
4099
+ AL:2*CDP-2*CH+CL;"
4100
+ };
4101
+
4102
+ return data;
4103
+ }
4104
+
4105
+ JSIndexScript.prototype.TBP_STD=function()
4106
+ {
4107
+ let data =
4108
+ {
4109
+ Name: 'TBP-STD', Description: '趋势平衡点', IsMainIndex: true,
4110
+ Script: //脚本
4111
+ "APX:=(H+L+C)/3;\n\
4112
+ TR0:=MAX(H-L,MAX(ABS(H-REF(C,1)),ABS(L-REF(C,1))));\n\
4113
+ MF0:=C-REF(C,2);\n\
4114
+ MF1:=REF(MF0,1);\n\
4115
+ MF2:=REF(MF0,2);\n\
4116
+ DIRECT1:=BARSLAST(MF0>MF1 AND MF0>MF2);\n\
4117
+ DIRECT2:=BARSLAST(MF0<MF1 AND MF0<MF2);\n\
4118
+ DIRECT0:=IF(DIRECT1<DIRECT2,100,-100);\n\
4119
+ TBP:REF(REF(C,1)+IF(DIRECT0>50,MIN(MF0,MF1),MAX(MF0,MF1)),1);\n\
4120
+ 多头获利:REF(IF(DIRECT0>50,APX*2-L,DRAWNULL),1),NODRAW;\n\
4121
+ 多头停损:REF(IF(DIRECT0>50,APX-TR0,DRAWNULL),1),NODRAW;\n\
4122
+ 空头回补:REF(IF(DIRECT0<-50,APX*2-H,DRAWNULL),1),NODRAW;\n\
4123
+ 空头停损:REF(IF(DIRECT0<-50,APX+TR0,DRAWNULL),1),NODRAW;"
4124
+ };
4125
+
4126
+ return data;
4127
+ }
4064
4128
 
4065
4129
 
4066
4130
  JSIndexScript.prototype.TEST = function ()
@@ -98075,6 +98139,50 @@ function JSAlgorithm(errorHandler,symbolData)
98075
98139
  return result;
98076
98140
  }
98077
98141
 
98142
+
98143
+
98144
+ //STDDEV(X,N) 返回标准偏差
98145
+ //将标准差除以样本大小N的平方根即可得出标准误差。标准误差 = σ/sqrt(n)
98146
+ this.STDDEV=function(data,n)
98147
+ {
98148
+ var result=[];
98149
+
98150
+ if (!Array.isArray(data)) return result;
98151
+ var nStart=this.GetFirstVaildIndex(data);
98152
+ if (!IFrameSplitOperator.IsNumber(n)) return result;
98153
+ if(nStart+n>data.length || n<1) return result;
98154
+
98155
+ var i=nStart, j=0, bFirst=true, dTotal=0, dAvg=0;
98156
+ for(i+=n-1;i<data.length;++i)
98157
+ {
98158
+ dTotal = 0;
98159
+ if(bFirst)
98160
+ {
98161
+ bFirst = false;
98162
+ for(j=i-n+1;j<=i;++j)
98163
+ {
98164
+ dAvg += data[j];
98165
+ }
98166
+
98167
+ dAvg /= n;
98168
+ }
98169
+ else
98170
+ {
98171
+ dAvg += (data[i]-data[i-n])/n;
98172
+ }
98173
+
98174
+ for(j=i-n+1;j<=i;++j)
98175
+ {
98176
+ dTotal += (data[j]-dAvg)*(data[j]-dAvg);
98177
+ }
98178
+
98179
+
98180
+ result[i] = Math.sqrt(dTotal/(n-1))/Math.sqrt(n);
98181
+ }
98182
+
98183
+ return result;
98184
+ }
98185
+
98078
98186
  //平均绝对方差
98079
98187
  this.AVEDEV=function(data,n)
98080
98188
  {
@@ -102886,6 +102994,8 @@ function JSAlgorithm(errorHandler,symbolData)
102886
102994
  return this.AVEDEV(args[0], args[1]);
102887
102995
  case 'STD':
102888
102996
  return this.STD(args[0], args[1]);
102997
+ case "STDDEV":
102998
+ return this.STDDEV(args[0], args[1]);
102889
102999
  case 'IF':
102890
103000
  case 'IFF':
102891
103001
  case "IFELSE":
@@ -112347,31 +112457,31 @@ function JSExplainer(ast,option)
112347
112457
  if (pointDot && varName) //圆点
112348
112458
  {
112349
112459
  outValue+=",画小圆点线";
112350
- let value={Name:varName, Data:outValue, Radius:g_JSChartResource.POINTDOT.Radius, Type:3};
112460
+ let value={Name:varName, Draw:outValue, Radius:g_JSChartResource.POINTDOT.Radius, Type:3};
112351
112461
  this.OutVarTable.push(value);
112352
112462
  }
112353
112463
  else if (circleDot && varName) //圆点
112354
112464
  {
112355
112465
  outValue+=",画小圆圈线";
112356
- let value={Name:varName, Data:outValue, Radius:g_JSChartResource.CIRCLEDOT.Radius, Type:3};
112466
+ let value={Name:varName, Draw:outValue, Radius:g_JSChartResource.CIRCLEDOT.Radius, Type:3};
112357
112467
  this.OutVarTable.push(value);
112358
112468
  }
112359
112469
  else if (lineStick && varName) //LINESTICK 同时画出柱状线和指标线
112360
112470
  {
112361
112471
  outValue+=",画出柱状线和指标线";
112362
- let value={Name:varName, Data:outValue, Type:4};
112472
+ let value={Name:varName, Draw:outValue, Type:4};
112363
112473
  this.OutVarTable.push(value);
112364
112474
  }
112365
112475
  else if (stick && varName) //STICK 画柱状线
112366
112476
  {
112367
112477
  outValue+=",画柱状线";
112368
- let value={Name:varName, Data:outValue, Type:5};
112478
+ let value={Name:varName, Draw:outValue, Type:5};
112369
112479
  this.OutVarTable.push(value);
112370
112480
  }
112371
112481
  else if (volStick && varName) //VOLSTICK 画彩色柱状线
112372
112482
  {
112373
112483
  outValue+=",画成交量柱状线";
112374
- let value={Name:varName, Data:outValue, Type:6};
112484
+ let value={Name:varName, Draw:outValue, Type:6};
112375
112485
  this.OutVarTable.push(value);
112376
112486
  }
112377
112487
  else if (varName && color)
@@ -112381,13 +112491,13 @@ function JSExplainer(ast,option)
112381
112491
  }
112382
112492
  else if (draw) //画图函数
112383
112493
  {
112384
- var outVar={ Name:drawName, Data:outValue, Type:1 };
112494
+ var outVar={ Name:drawName, Draw:outValue, Type:1 };
112385
112495
  this.OutVarTable.push(outVar);
112386
112496
  }
112387
112497
  else if (colorStick && varName) //CYW: SUM(VAR4,10)/10000, COLORSTICK; 画上下柱子
112388
112498
  {
112389
112499
  outValue+=",画彩色柱状线";
112390
- let value={Name:varName, Data:outValue, Color:color, Type:2};
112500
+ let value={Name:varName, Draw:outValue, Color:color, Type:2};
112391
112501
  this.OutVarTable.push(value);
112392
112502
  }
112393
112503
  else if (varName)
@@ -112713,6 +112823,8 @@ function JSExplainer(ast,option)
112713
112823
  return `当满足条件${args[0]}时,在横轴${args[1]}纵轴${args[2]}位置书写数字`;
112714
112824
  case "RGB":
112715
112825
  return `自定色[${args[0]},${args[1]},${args[2]}]`;
112826
+ case "RGBA":
112827
+ return `自定色[${args[0]},${args[1]},${args[2]},${args[3]}]`;
112716
112828
  case "DRAWBAND":
112717
112829
  return '画带状线';
112718
112830
  case "DRAWRECTREL":
@@ -112739,6 +112851,12 @@ function JSExplainer(ast,option)
112739
112851
 
112740
112852
  case "YMOVE":
112741
112853
  return;
112854
+ case "BACKGROUND":
112855
+ return "绘制背景";
112856
+ case "UPCOLOR":
112857
+ return `上涨颜色${args[0]}`;
112858
+ case "DOWNCOLOR":
112859
+ return `下跌颜色${args[0]}`;
112742
112860
 
112743
112861
  default:
112744
112862
  this.ThrowUnexpectedNode(node,`函数${funcName}不存在`);
@@ -130191,7 +130309,7 @@ function ScrollBarBGChart()
130191
130309
 
130192
130310
 
130193
130311
 
130194
- var HQCHART_VERSION="1.1.12650";
130312
+ var HQCHART_VERSION="1.1.12668";
130195
130313
 
130196
130314
  function PrintHQChartVersion()
130197
130315
  {
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.12650";
8
+ var HQCHART_VERSION="1.1.12668";
9
9
 
10
10
  function PrintHQChartVersion()
11
11
  {
@@ -165,6 +165,7 @@ function JSIndexScript()
165
165
  ['EMPTY', this.EMPTY], //什么都不显示的指标
166
166
  ['神奇九转', this.NineTurns],
167
167
  ['EMA', this.EMA3], ['EMA4', this.EMA4], ['EMA5', this.EMA5],['EMA6', this.EMA6],
168
+ ["ICHIMOKU",this.ICHIMOKU],["CDP-STD", this.CDP_STD],["TBP-STD",this.TBP_STD],
168
169
 
169
170
  //通达信特色指标
170
171
  ["散户线", this.ShareholderCount],["NXTS", this.NXTS],["FKX", this.FKX],["两融资金", this.Margin4],
@@ -4105,6 +4106,69 @@ DRAWTEXT(D9,H*1.010,'9'),COLORGREEN;"
4105
4106
  return data;
4106
4107
  }
4107
4108
 
4109
+ JSIndexScript.prototype.ICHIMOKU=function()
4110
+ {
4111
+ let data =
4112
+ {
4113
+ Name: 'ICHIMOKU', Description: '一目均衡图', IsMainIndex: true,
4114
+ Args: [{ Name: 'SHORT', Value: 7 },{ Name: 'MID', Value: 22 },{ Name: 'LONG', Value: 44 }],
4115
+ Script: //脚本
4116
+ "转换线:(HHV(H,SHORT)+LLV(L,SHORT))/2,COLORRED,LINETHICK2;\n\
4117
+ 基准线:(HHV(H,MID)+LLV(L,MID))/2,COLORFF8040,LINETHICK2;\n\
4118
+ 迟行带:REFXV(C,MID),COLORGRAY,LINETHICK2;\n\
4119
+ A:=REF((转换线+基准线)/2,MID);\n\
4120
+ B:=REF((HHV(H,LONG)+LLV(L,LONG))/2,MID);\n\
4121
+ STICKLINE(A<B,A,B,2,1),COLOR339933;\n\
4122
+ STICKLINE(A>=B,A,B,2,1),COLOR0033CC;\n\
4123
+ 先行带A:PLOYLINE(1,A),COLORBROWN;\n\
4124
+ 先行带B:PLOYLINE(1,B),COLORLIGREEN;"
4125
+ };
4126
+
4127
+ return data;
4128
+ }
4129
+
4130
+ JSIndexScript.prototype.CDP_STD=function()
4131
+ {
4132
+ let data =
4133
+ {
4134
+ Name: 'CDP-STD', Description: '逆势操作', IsMainIndex: true,
4135
+ Script: //脚本
4136
+ "CH:=REF(H,1);\n\
4137
+ CL:=REF(L,1);\n\
4138
+ CC:=REF(C,1);\n\
4139
+ CDP:(CH+CL+CC)/3;\n\
4140
+ AH:2*CDP+CH-2*CL;\n\
4141
+ NH:CDP+CDP-CL;\n\
4142
+ NL:CDP+CDP-CH;\n\
4143
+ AL:2*CDP-2*CH+CL;"
4144
+ };
4145
+
4146
+ return data;
4147
+ }
4148
+
4149
+ JSIndexScript.prototype.TBP_STD=function()
4150
+ {
4151
+ let data =
4152
+ {
4153
+ Name: 'TBP-STD', Description: '趋势平衡点', IsMainIndex: true,
4154
+ Script: //脚本
4155
+ "APX:=(H+L+C)/3;\n\
4156
+ TR0:=MAX(H-L,MAX(ABS(H-REF(C,1)),ABS(L-REF(C,1))));\n\
4157
+ MF0:=C-REF(C,2);\n\
4158
+ MF1:=REF(MF0,1);\n\
4159
+ MF2:=REF(MF0,2);\n\
4160
+ DIRECT1:=BARSLAST(MF0>MF1 AND MF0>MF2);\n\
4161
+ DIRECT2:=BARSLAST(MF0<MF1 AND MF0<MF2);\n\
4162
+ DIRECT0:=IF(DIRECT1<DIRECT2,100,-100);\n\
4163
+ TBP:REF(REF(C,1)+IF(DIRECT0>50,MIN(MF0,MF1),MAX(MF0,MF1)),1);\n\
4164
+ 多头获利:REF(IF(DIRECT0>50,APX*2-L,DRAWNULL),1),NODRAW;\n\
4165
+ 多头停损:REF(IF(DIRECT0>50,APX-TR0,DRAWNULL),1),NODRAW;\n\
4166
+ 空头回补:REF(IF(DIRECT0<-50,APX*2-H,DRAWNULL),1),NODRAW;\n\
4167
+ 空头停损:REF(IF(DIRECT0<-50,APX+TR0,DRAWNULL),1),NODRAW;"
4168
+ };
4169
+
4170
+ return data;
4171
+ }
4108
4172
 
4109
4173
 
4110
4174
  JSIndexScript.prototype.TEST = function ()
@@ -98119,6 +98183,50 @@ function JSAlgorithm(errorHandler,symbolData)
98119
98183
  return result;
98120
98184
  }
98121
98185
 
98186
+
98187
+
98188
+ //STDDEV(X,N) 返回标准偏差
98189
+ //将标准差除以样本大小N的平方根即可得出标准误差。标准误差 = σ/sqrt(n)
98190
+ this.STDDEV=function(data,n)
98191
+ {
98192
+ var result=[];
98193
+
98194
+ if (!Array.isArray(data)) return result;
98195
+ var nStart=this.GetFirstVaildIndex(data);
98196
+ if (!IFrameSplitOperator.IsNumber(n)) return result;
98197
+ if(nStart+n>data.length || n<1) return result;
98198
+
98199
+ var i=nStart, j=0, bFirst=true, dTotal=0, dAvg=0;
98200
+ for(i+=n-1;i<data.length;++i)
98201
+ {
98202
+ dTotal = 0;
98203
+ if(bFirst)
98204
+ {
98205
+ bFirst = false;
98206
+ for(j=i-n+1;j<=i;++j)
98207
+ {
98208
+ dAvg += data[j];
98209
+ }
98210
+
98211
+ dAvg /= n;
98212
+ }
98213
+ else
98214
+ {
98215
+ dAvg += (data[i]-data[i-n])/n;
98216
+ }
98217
+
98218
+ for(j=i-n+1;j<=i;++j)
98219
+ {
98220
+ dTotal += (data[j]-dAvg)*(data[j]-dAvg);
98221
+ }
98222
+
98223
+
98224
+ result[i] = Math.sqrt(dTotal/(n-1))/Math.sqrt(n);
98225
+ }
98226
+
98227
+ return result;
98228
+ }
98229
+
98122
98230
  //平均绝对方差
98123
98231
  this.AVEDEV=function(data,n)
98124
98232
  {
@@ -102930,6 +103038,8 @@ function JSAlgorithm(errorHandler,symbolData)
102930
103038
  return this.AVEDEV(args[0], args[1]);
102931
103039
  case 'STD':
102932
103040
  return this.STD(args[0], args[1]);
103041
+ case "STDDEV":
103042
+ return this.STDDEV(args[0], args[1]);
102933
103043
  case 'IF':
102934
103044
  case 'IFF':
102935
103045
  case "IFELSE":
@@ -112391,31 +112501,31 @@ function JSExplainer(ast,option)
112391
112501
  if (pointDot && varName) //圆点
112392
112502
  {
112393
112503
  outValue+=",画小圆点线";
112394
- let value={Name:varName, Data:outValue, Radius:g_JSChartResource.POINTDOT.Radius, Type:3};
112504
+ let value={Name:varName, Draw:outValue, Radius:g_JSChartResource.POINTDOT.Radius, Type:3};
112395
112505
  this.OutVarTable.push(value);
112396
112506
  }
112397
112507
  else if (circleDot && varName) //圆点
112398
112508
  {
112399
112509
  outValue+=",画小圆圈线";
112400
- let value={Name:varName, Data:outValue, Radius:g_JSChartResource.CIRCLEDOT.Radius, Type:3};
112510
+ let value={Name:varName, Draw:outValue, Radius:g_JSChartResource.CIRCLEDOT.Radius, Type:3};
112401
112511
  this.OutVarTable.push(value);
112402
112512
  }
112403
112513
  else if (lineStick && varName) //LINESTICK 同时画出柱状线和指标线
112404
112514
  {
112405
112515
  outValue+=",画出柱状线和指标线";
112406
- let value={Name:varName, Data:outValue, Type:4};
112516
+ let value={Name:varName, Draw:outValue, Type:4};
112407
112517
  this.OutVarTable.push(value);
112408
112518
  }
112409
112519
  else if (stick && varName) //STICK 画柱状线
112410
112520
  {
112411
112521
  outValue+=",画柱状线";
112412
- let value={Name:varName, Data:outValue, Type:5};
112522
+ let value={Name:varName, Draw:outValue, Type:5};
112413
112523
  this.OutVarTable.push(value);
112414
112524
  }
112415
112525
  else if (volStick && varName) //VOLSTICK 画彩色柱状线
112416
112526
  {
112417
112527
  outValue+=",画成交量柱状线";
112418
- let value={Name:varName, Data:outValue, Type:6};
112528
+ let value={Name:varName, Draw:outValue, Type:6};
112419
112529
  this.OutVarTable.push(value);
112420
112530
  }
112421
112531
  else if (varName && color)
@@ -112425,13 +112535,13 @@ function JSExplainer(ast,option)
112425
112535
  }
112426
112536
  else if (draw) //画图函数
112427
112537
  {
112428
- var outVar={ Name:drawName, Data:outValue, Type:1 };
112538
+ var outVar={ Name:drawName, Draw:outValue, Type:1 };
112429
112539
  this.OutVarTable.push(outVar);
112430
112540
  }
112431
112541
  else if (colorStick && varName) //CYW: SUM(VAR4,10)/10000, COLORSTICK; 画上下柱子
112432
112542
  {
112433
112543
  outValue+=",画彩色柱状线";
112434
- let value={Name:varName, Data:outValue, Color:color, Type:2};
112544
+ let value={Name:varName, Draw:outValue, Color:color, Type:2};
112435
112545
  this.OutVarTable.push(value);
112436
112546
  }
112437
112547
  else if (varName)
@@ -112757,6 +112867,8 @@ function JSExplainer(ast,option)
112757
112867
  return `当满足条件${args[0]}时,在横轴${args[1]}纵轴${args[2]}位置书写数字`;
112758
112868
  case "RGB":
112759
112869
  return `自定色[${args[0]},${args[1]},${args[2]}]`;
112870
+ case "RGBA":
112871
+ return `自定色[${args[0]},${args[1]},${args[2]},${args[3]}]`;
112760
112872
  case "DRAWBAND":
112761
112873
  return '画带状线';
112762
112874
  case "DRAWRECTREL":
@@ -112783,6 +112895,12 @@ function JSExplainer(ast,option)
112783
112895
 
112784
112896
  case "YMOVE":
112785
112897
  return;
112898
+ case "BACKGROUND":
112899
+ return "绘制背景";
112900
+ case "UPCOLOR":
112901
+ return `上涨颜色${args[0]}`;
112902
+ case "DOWNCOLOR":
112903
+ return `下跌颜色${args[0]}`;
112786
112904
 
112787
112905
  default:
112788
112906
  this.ThrowUnexpectedNode(node,`函数${funcName}不存在`);
@@ -130349,7 +130467,7 @@ function HQChartScriptWorker()
130349
130467
 
130350
130468
 
130351
130469
 
130352
- var HQCHART_VERSION="1.1.12650";
130470
+ var HQCHART_VERSION="1.1.12668";
130353
130471
 
130354
130472
  function PrintHQChartVersion()
130355
130473
  {
@@ -8543,6 +8543,7 @@ function ChartCorssCursor()
8543
8543
 
8544
8544
  this.IsShow = true; //是否显示
8545
8545
  this.ShowTextMode = { Left: 1, Right: 1, Bottom: 1 }; //0=不显示 1=显示在框架外 2=显示在框架内
8546
+ this.TextFormat= { Right:0 }; //0=默认 1=价格显示(分时图才有用)
8546
8547
  this.IsShowCorss = true; //是否显示十字光标
8547
8548
  this.IsShowClose = false; //Y轴始终显示收盘价
8548
8549
  this.IsFixXLastTime=false; //是否修正X轴,超出当前时间的,X轴调整到当前最后的时间.
@@ -8726,6 +8727,15 @@ function ChartCorssCursor()
8726
8727
  this.Canvas.fillText(text, left + 2, y, textWidth);
8727
8728
  }
8728
8729
 
8730
+ if (this.StringFormatY.PercentageText)
8731
+ {
8732
+ if (this.TextFormat.Right==0)
8733
+ {
8734
+ text=this.StringFormatY.PercentageText+'%';
8735
+ var textWidth=this.Canvas.measureText(text).width+4; //前后各空2个像素
8736
+ }
8737
+ }
8738
+
8729
8739
  if (this.StringFormatY.RText)
8730
8740
  {
8731
8741
  text = this.StringFormatY.RText;
@@ -3591,6 +3591,48 @@ function JSAlgorithm(errorHandler, symbolData)
3591
3591
  return result;
3592
3592
  }
3593
3593
 
3594
+ //STDDEV(X,N) 返回标准偏差
3595
+ //将标准差除以样本大小N的平方根即可得出标准误差。标准误差 = σ/sqrt(n)
3596
+ this.STDDEV=function(data,n)
3597
+ {
3598
+ var result=[];
3599
+
3600
+ if (!Array.isArray(data)) return result;
3601
+ var nStart=this.GetFirstVaildIndex(data);
3602
+ if (!IFrameSplitOperator.IsNumber(n)) return result;
3603
+ if(nStart+n>data.length || n<1) return result;
3604
+
3605
+ var i=nStart, j=0, bFirst=true, dTotal=0, dAvg=0;
3606
+ for(i+=n-1;i<data.length;++i)
3607
+ {
3608
+ dTotal = 0;
3609
+ if(bFirst)
3610
+ {
3611
+ bFirst = false;
3612
+ for(j=i-n+1;j<=i;++j)
3613
+ {
3614
+ dAvg += data[j];
3615
+ }
3616
+
3617
+ dAvg /= n;
3618
+ }
3619
+ else
3620
+ {
3621
+ dAvg += (data[i]-data[i-n])/n;
3622
+ }
3623
+
3624
+ for(j=i-n+1;j<=i;++j)
3625
+ {
3626
+ dTotal += (data[j]-dAvg)*(data[j]-dAvg);
3627
+ }
3628
+
3629
+
3630
+ result[i] = Math.sqrt(dTotal/(n-1))/Math.sqrt(n);
3631
+ }
3632
+
3633
+ return result;
3634
+ }
3635
+
3594
3636
  //平均绝对方差
3595
3637
  this.AVEDEV=function(data,n)
3596
3638
  {
@@ -7709,6 +7751,8 @@ function JSAlgorithm(errorHandler, symbolData)
7709
7751
  return this.AVEDEV(args[0], args[1]);
7710
7752
  case 'STD':
7711
7753
  return this.STD(args[0], args[1]);
7754
+ case "STDDEV":
7755
+ return this.STDDEV(args[0], args[1]);
7712
7756
  case 'IF':
7713
7757
  case 'IFF':
7714
7758
  case "IFELSE":
@@ -30,7 +30,7 @@ function JSCanvasElement()
30
30
 
31
31
  //获取画布
32
32
  this.GetContext = function ()
33
- {
33
+ {
34
34
  var canvas;
35
35
  if (this.IsDingTalk)
36
36
  {
@@ -2025,6 +2025,8 @@ function HQPriceStringFormat()
2025
2025
  this.Text=IFrameSplitOperator.FormatValueThousandsString(this.Value,defaultfloatPrecision);
2026
2026
  else
2027
2027
  this.Text = this.Value.toFixed(defaultfloatPrecision);
2028
+
2029
+ if (this.YClose>0) this.PercentageText=((this.Value-this.YClose)*100/this.YClose).toFixed(2); //走势图右边坐标显示百分比
2028
2030
  }
2029
2031
  else
2030
2032
  {
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.12599";
8
+ var HQCHART_VERSION="1.1.12666";
9
9
 
10
10
  function PrintHQChartVersion()
11
11
  {
@@ -628,6 +628,7 @@ function JSChart(element)
628
628
  if (IFrameSplitOperator.IsBool(option.CorssCursorInfo.IsFixXLastTime)) chart.ChartCorssCursor.IsFixXLastTime=option.CorssCursorInfo.IsFixXLastTime;
629
629
  if (IFrameSplitOperator.IsNumber(item.PriceFormatType)) chart.ChartCorssCursor.StringFormatY.PriceFormatType=item.PriceFormatType;
630
630
  if (IFrameSplitOperator.IsNumber(item.DataFormatType)) chart.ChartCorssCursor.StringFormatY.DataFormatType=item.DataFormatType;
631
+ if (IFrameSplitOperator.IsNumber(item.RightTextFormat)) chart.ChartCorssCursor.TextFormat.Right=item.RightTextFormat;
631
632
  }
632
633
 
633
634
  if (option.MinuteInfo) chart.CreateMinuteInfo(option.MinuteInfo);