hqchart 1.1.12655 → 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);};}//是否有是有效的数字
@@ -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.12654";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.12655",
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":
@@ -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,9 +129,10 @@ 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,
134
138
  "ALIGN0":LINE_WIDTH_NAME,"ALIGN1":LINE_WIDTH_NAME,"ALIGN2":LINE_WIDTH_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":
@@ -130199,7 +130309,7 @@ function ScrollBarBGChart()
130199
130309
 
130200
130310
 
130201
130311
 
130202
- var HQCHART_VERSION="1.1.12654";
130312
+ var HQCHART_VERSION="1.1.12668";
130203
130313
 
130204
130314
  function PrintHQChartVersion()
130205
130315
  {
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.12654";
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":
@@ -130357,7 +130467,7 @@ function HQChartScriptWorker()
130357
130467
 
130358
130468
 
130359
130469
 
130360
- var HQCHART_VERSION="1.1.12654";
130470
+ var HQCHART_VERSION="1.1.12668";
130361
130471
 
130362
130472
  function PrintHQChartVersion()
130363
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);