hqchart 1.1.13016 → 1.1.13023
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.
|
@@ -94741,6 +94741,15 @@ function Node(ErrorHandler)
|
|
|
94741
94741
|
return;
|
|
94742
94742
|
}
|
|
94743
94743
|
|
|
94744
|
+
//"MA.MA1"(10,5,5)"
|
|
94745
|
+
if (callee.Type==Syntax.Literal)
|
|
94746
|
+
{
|
|
94747
|
+
var item={ ID:JS_EXECUTE_JOB_ID.JOB_EXECUTE_INDEX, Args:args, FunctionName:callee.Value, DynamicName:callee.Value };
|
|
94748
|
+
if (token) item.Token={ Index:token.Start, Line:token.LineNumber };
|
|
94749
|
+
this.ExecuteIndex.push(item);
|
|
94750
|
+
return;
|
|
94751
|
+
}
|
|
94752
|
+
|
|
94744
94753
|
if (callee.Name=='COVER_C' || callee.Name=='COVER_O' || callee.Name=='COVER_H' || callee.Name=='COVER_L' || callee.Name=='COVER_A' || callee.Name=='COVER_V') //跨周期函数
|
|
94745
94754
|
{
|
|
94746
94755
|
var periodName=args[0].Value;
|
|
@@ -108730,6 +108739,98 @@ function JSSymbolData(ast,option,jsExecute)
|
|
|
108730
108739
|
|
|
108731
108740
|
}
|
|
108732
108741
|
|
|
108742
|
+
this.CallDynamicScriptIndex=function(job, varTable)
|
|
108743
|
+
{
|
|
108744
|
+
var callInfo=job.DynamicName;
|
|
108745
|
+
var indexInfo={ Job:job, PeriodID:this.Period , Symbol:this.Symbol };
|
|
108746
|
+
if (!this.ReadIndexFunctionValue(callInfo,indexInfo)) //读取指标
|
|
108747
|
+
{
|
|
108748
|
+
var token=job.Token;
|
|
108749
|
+
this.Execute.ErrorHandler.ThrowError(token.Index,token.Line,0,`CallDynamicScriptIndex() Error: '${callInfo}' ${indexInfo.Error}`);
|
|
108750
|
+
}
|
|
108751
|
+
|
|
108752
|
+
var systemIndex=new JSIndexScript(); //系统指标
|
|
108753
|
+
var systemItem=systemIndex.Get(indexInfo.Name);
|
|
108754
|
+
if (!systemItem)
|
|
108755
|
+
{
|
|
108756
|
+
var token=job.Token;
|
|
108757
|
+
this.Execute.ErrorHandler.ThrowError(token.Index,token.Line,0,`CallDynamicScriptIndex() Error: '${callInfo}' ${indexInfo.Name} 指标不存在`);
|
|
108758
|
+
}
|
|
108759
|
+
|
|
108760
|
+
indexInfo.SytemIndex=systemItem;
|
|
108761
|
+
if (!this.ReadDynamicIndexArgumentValue(job.Args, indexInfo, varTable))
|
|
108762
|
+
{
|
|
108763
|
+
var token=job.Token;
|
|
108764
|
+
this.Execute.ErrorHandler.ThrowError(token.Index,token.Line,0,`CallDynamicScriptIndex() ${indexInfo.Name} 指标参数错误 : ${indexInfo.Error} `);
|
|
108765
|
+
}
|
|
108766
|
+
|
|
108767
|
+
JSConsole.Complier.Log('[JSSymbolData::CallMemberScriptIndex] call script index', indexInfo);
|
|
108768
|
+
|
|
108769
|
+
var dateTimeRange=this.Data.GetDateRange();
|
|
108770
|
+
|
|
108771
|
+
var option=
|
|
108772
|
+
{
|
|
108773
|
+
HQDataType:this.DataType,
|
|
108774
|
+
Symbol:indexInfo.Symbol,
|
|
108775
|
+
Name:'',
|
|
108776
|
+
Right:this.Right, //复权
|
|
108777
|
+
Period:indexInfo.PeriodID, //周期
|
|
108778
|
+
Data:null,
|
|
108779
|
+
SourceData:null,
|
|
108780
|
+
Callback:(outVar,job, symbolData)=> {
|
|
108781
|
+
this.RecvDynamicScriptIndexData(outVar,job,symbolData);
|
|
108782
|
+
this.Execute.RunNextJob();
|
|
108783
|
+
},
|
|
108784
|
+
CallbackParam:indexInfo,
|
|
108785
|
+
Async:true,
|
|
108786
|
+
MaxRequestDataCount:this.MaxRequestDataCount+30*2,
|
|
108787
|
+
MaxRequestMinuteDayCount:this.MaxRequestMinuteDayCount+2,
|
|
108788
|
+
Arguments:indexInfo.Args,
|
|
108789
|
+
//Condition:this.Condition,
|
|
108790
|
+
IsBeforeData:this.IsBeforeData,
|
|
108791
|
+
NetworkFilter:this.NetworkFilter,
|
|
108792
|
+
IsApiPeriod:this.IsApiPeriod,
|
|
108793
|
+
KLineRange:dateTimeRange //K线数据范围
|
|
108794
|
+
};
|
|
108795
|
+
|
|
108796
|
+
//执行脚本
|
|
108797
|
+
var run=JSComplier.Execute(systemItem.Script,option,(error, indexInfo)=>{this.ExecuteScriptIndexError(error,indexInfo)});
|
|
108798
|
+
}
|
|
108799
|
+
|
|
108800
|
+
this.ReadDynamicIndexArgumentValue=function(args, result, varTable)
|
|
108801
|
+
{
|
|
108802
|
+
result.Args=[];
|
|
108803
|
+
for(var i =0;i<result.SytemIndex.Args.length; ++i) //复制参数
|
|
108804
|
+
{
|
|
108805
|
+
var item=result.SytemIndex.Args[i];
|
|
108806
|
+
result.Args.push({ Value:item.Value, Name:item.Name, IsDefault:true });
|
|
108807
|
+
}
|
|
108808
|
+
|
|
108809
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(args)) return true;
|
|
108810
|
+
|
|
108811
|
+
for(var i=0;i<args.length;++i)
|
|
108812
|
+
{
|
|
108813
|
+
var item=args[i];
|
|
108814
|
+
var argItem=result.Args[i];
|
|
108815
|
+
if (!argItem) continue;
|
|
108816
|
+
if (item.Type==Syntax.Literal)
|
|
108817
|
+
{
|
|
108818
|
+
argItem.Value=item.Value;
|
|
108819
|
+
argItem.IsDefault=false;
|
|
108820
|
+
}
|
|
108821
|
+
else if (item.Type==Syntax.Identifier) //支持传参
|
|
108822
|
+
{
|
|
108823
|
+
if (varTable.has(item.Name))
|
|
108824
|
+
{
|
|
108825
|
+
argItem.Value=varTable.get(item.Name);
|
|
108826
|
+
argItem.IsDefault=false;
|
|
108827
|
+
}
|
|
108828
|
+
}
|
|
108829
|
+
}
|
|
108830
|
+
|
|
108831
|
+
return true;
|
|
108832
|
+
}
|
|
108833
|
+
|
|
108733
108834
|
/*****************************************************************************************************************************
|
|
108734
108835
|
脚本调用
|
|
108735
108836
|
|
|
@@ -108743,10 +108844,13 @@ function JSSymbolData(ast,option,jsExecute)
|
|
|
108743
108844
|
CALCSTOCKINDEX('SH600000','KDJ',3)表示上证600000的KDJ指标第3个输出即J之值,第一个参数可在前面加SZ(深市),SH(沪市),BJ(京市),或市场_,,
|
|
108744
108845
|
CALCSTOCKINDEX('47_IFL0','MACD',2)表示IFL0品种的MACD指标第2个输出值.
|
|
108745
108846
|
|
|
108847
|
+
"MA.MA1"(6,12,18)
|
|
108848
|
+
|
|
108746
108849
|
*******************************************************************************************************************************/
|
|
108747
|
-
this.CallScriptIndex=function(job)
|
|
108850
|
+
this.CallScriptIndex=function(job, varTable)
|
|
108748
108851
|
{
|
|
108749
108852
|
if (job.Member) return this.CallMemberScriptIndex(job);
|
|
108853
|
+
if (job.DynamicName) return this.CallDynamicScriptIndex(job, varTable);
|
|
108750
108854
|
|
|
108751
108855
|
if (!job.Args || !(job.Args.length>=2))
|
|
108752
108856
|
{
|
|
@@ -108859,6 +108963,42 @@ function JSSymbolData(ast,option,jsExecute)
|
|
|
108859
108963
|
}
|
|
108860
108964
|
}
|
|
108861
108965
|
|
|
108966
|
+
this.RecvDynamicScriptIndexData=function(outVar,indexInfo,symbolData)
|
|
108967
|
+
{
|
|
108968
|
+
JSConsole.Complier.Log('[JSSymbolData::RecvDynamicScriptIndexData] ', outVar, indexInfo, symbolData);
|
|
108969
|
+
var kLine=symbolData.Data.Data;
|
|
108970
|
+
var aryOutVar=outVar;
|
|
108971
|
+
var data=this.Data.FitKLineIndex(kLine,aryOutVar,this.Period,indexInfo.PeriodID);
|
|
108972
|
+
|
|
108973
|
+
var objName=indexInfo.Name;
|
|
108974
|
+
var memberValue={};
|
|
108975
|
+
if (this.Execute.VarTable.has(objName))
|
|
108976
|
+
memberValue=this.Execute.VarTable.get(objName);
|
|
108977
|
+
else
|
|
108978
|
+
this.Execute.VarTable.set(objName, memberValue);
|
|
108979
|
+
|
|
108980
|
+
var strValue="";
|
|
108981
|
+
for(var i=0; i<indexInfo.Args.length; ++i)
|
|
108982
|
+
{
|
|
108983
|
+
var item=indexInfo.Args[i];
|
|
108984
|
+
if (item.IsDefault===false)
|
|
108985
|
+
{
|
|
108986
|
+
if (strValue.length>0) strValue+=",";
|
|
108987
|
+
strValue+=`${item.Value}`;
|
|
108988
|
+
}
|
|
108989
|
+
}
|
|
108990
|
+
var strArgs=`(${strValue})`;
|
|
108991
|
+
|
|
108992
|
+
//保存所有的指标数据, 下面用到了就可以不用算了
|
|
108993
|
+
for(var i=0; i<data.length; ++i)
|
|
108994
|
+
{
|
|
108995
|
+
var key=`${outVar[i].Name}#${strArgs}`;
|
|
108996
|
+
if (indexInfo.Period) key+='#'+indexInfo.Period; //带周期的变量
|
|
108997
|
+
|
|
108998
|
+
memberValue[key]=data[i].Data;
|
|
108999
|
+
}
|
|
109000
|
+
}
|
|
109001
|
+
|
|
108862
109002
|
this.RecvScriptIndexData=function(outVar,indexInfo,symbolData)
|
|
108863
109003
|
{
|
|
108864
109004
|
var key=this.GenerateScriptIndexKey(indexInfo);
|
|
@@ -109732,7 +109872,8 @@ var JS_EXECUTE_JOB_ID=
|
|
|
109732
109872
|
//KDJ.K , KDJ.K#WEEK
|
|
109733
109873
|
//STKINDI('600000.sh','MA.MA1#WEEK',5,10,20,30,60,120);
|
|
109734
109874
|
//CALCSTOCKINDEX('SH600000','KDJ',3)表示上证600000的KDJ指标第3个输出即J之值,第一个参数可在前面加SZ(深市),SH(沪市),BJ(京市)
|
|
109735
|
-
|
|
109875
|
+
//"MA.MA(5,5,5)" 调用动态指标
|
|
109876
|
+
JOB_EXECUTE_INDEX:30010,
|
|
109736
109877
|
|
|
109737
109878
|
JOB_RUN_SCRIPT:10000, //执行脚本
|
|
109738
109879
|
|
|
@@ -110051,7 +110192,7 @@ function JSExecute(ast,option)
|
|
|
110051
110192
|
case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_CUSTOM_API_DATA:
|
|
110052
110193
|
return this.SymbolData.DownloadCustomAPIData(jobItem);
|
|
110053
110194
|
case JS_EXECUTE_JOB_ID.JOB_EXECUTE_INDEX:
|
|
110054
|
-
return this.SymbolData.CallScriptIndex(jobItem);
|
|
110195
|
+
return this.SymbolData.CallScriptIndex(jobItem, this.VarTable);
|
|
110055
110196
|
|
|
110056
110197
|
case JS_EXECUTE_JOB_ID.JOB_RUN_SCRIPT:
|
|
110057
110198
|
if (this.Debug===1 && this.DebugFilter)
|
|
@@ -110429,6 +110570,17 @@ function JSExecute(ast,option)
|
|
|
110429
110570
|
this.OutVarTable.push({Name:varName, Data:varInfo.OutVar,Type:type, NoneName:true});
|
|
110430
110571
|
}
|
|
110431
110572
|
}
|
|
110573
|
+
else if (item.Expression.Type==Syntax.MemberExpression) //MA.MA2
|
|
110574
|
+
{
|
|
110575
|
+
var outVar=this.ReadMemberVariable(item.Expression);
|
|
110576
|
+
if (outVar)
|
|
110577
|
+
{
|
|
110578
|
+
var type=0;
|
|
110579
|
+
var varName="__temp_di_"+i+"__";
|
|
110580
|
+
if (!Array.isArray(outVar)) outVar=this.SingleDataToArrayData(outVar);
|
|
110581
|
+
this.OutVarTable.push({Name:varName, Data:outVar,Type:type, NoneName:true});
|
|
110582
|
+
}
|
|
110583
|
+
}
|
|
110432
110584
|
else if (item.Expression.Type==Syntax.SequenceExpression)
|
|
110433
110585
|
{
|
|
110434
110586
|
let varName;
|
|
@@ -110646,6 +110798,20 @@ function JSExecute(ast,option)
|
|
|
110646
110798
|
}
|
|
110647
110799
|
}
|
|
110648
110800
|
}
|
|
110801
|
+
else if (itemExpression.Type==Syntax.MemberExpression) //"MA.MA2"(5,12,29), COLORRED;
|
|
110802
|
+
{
|
|
110803
|
+
if (j==0)
|
|
110804
|
+
{
|
|
110805
|
+
var outVar=this.ReadMemberVariable(itemExpression);
|
|
110806
|
+
if (outVar)
|
|
110807
|
+
{
|
|
110808
|
+
if (!Array.isArray(outVar)) varValue=this.SingleDataToArrayData(outVar);
|
|
110809
|
+
isNoneName=true;
|
|
110810
|
+
varName="__temp_di_"+i+"__";
|
|
110811
|
+
this.VarTable.set(varName,outVar); //把常量放到变量表里
|
|
110812
|
+
}
|
|
110813
|
+
}
|
|
110814
|
+
}
|
|
110649
110815
|
}
|
|
110650
110816
|
|
|
110651
110817
|
if (pointDot && varName) //圆点
|
|
@@ -111031,6 +111197,35 @@ function JSExecute(ast,option)
|
|
|
111031
111197
|
args.push(value);
|
|
111032
111198
|
}
|
|
111033
111199
|
|
|
111200
|
+
if (node.Callee.Type==Syntax.Literal)
|
|
111201
|
+
{
|
|
111202
|
+
var dynamicName=node.Callee.Value;
|
|
111203
|
+
var aryValue=dynamicName.split(".");
|
|
111204
|
+
if (aryValue.length!=2)
|
|
111205
|
+
{
|
|
111206
|
+
this.ThrowUnexpectedNode(node,`调用指标格式'${dynamicName}'错误`);
|
|
111207
|
+
}
|
|
111208
|
+
|
|
111209
|
+
var name=aryValue[0];
|
|
111210
|
+
var outName=aryValue[1];
|
|
111211
|
+
var strValue="";
|
|
111212
|
+
for(var i=0; i<args.length; ++i)
|
|
111213
|
+
{
|
|
111214
|
+
var value=args[i];
|
|
111215
|
+
if (strValue.length>0) strValue+=",";
|
|
111216
|
+
strValue+=`${value}`;
|
|
111217
|
+
}
|
|
111218
|
+
var strArgs=`(${strValue})`;
|
|
111219
|
+
var key=`${outName}#${strArgs}`;
|
|
111220
|
+
|
|
111221
|
+
node.Out=[];
|
|
111222
|
+
if (!this.VarTable.has(name)) return node.Out;
|
|
111223
|
+
var indexData=this.VarTable.get(name);
|
|
111224
|
+
var value=indexData[key];
|
|
111225
|
+
if (value) node.Out=value;
|
|
111226
|
+
return node.Out;
|
|
111227
|
+
}
|
|
111228
|
+
|
|
111034
111229
|
if (funcName==="IFC")
|
|
111035
111230
|
{
|
|
111036
111231
|
//IFC(X,A,B)若X不为0则执行A,否则执行B.IFC与IF函数的区别:根据X的值来选择性执行A、B表达式.
|
|
@@ -112036,6 +112231,13 @@ function JSExplainer(ast,option)
|
|
|
112036
112231
|
args.push(value);
|
|
112037
112232
|
}
|
|
112038
112233
|
|
|
112234
|
+
if (node.Callee.Type==Syntax.Literal)
|
|
112235
|
+
{
|
|
112236
|
+
var dynamicName=node.Callee.Value;
|
|
112237
|
+
node.Out=`指标引用'${dynamicName}'`;
|
|
112238
|
+
return node.Out;
|
|
112239
|
+
}
|
|
112240
|
+
|
|
112039
112241
|
JSConsole.Complier.Log('[JSExplainer::VisitCallExpression]' , funcName, '(', args.toString() ,')');
|
|
112040
112242
|
|
|
112041
112243
|
if (g_JSComplierResource.IsCustomFunction(funcName))
|
|
@@ -130060,7 +130262,7 @@ function HQChartScriptWorker()
|
|
|
130060
130262
|
|
|
130061
130263
|
|
|
130062
130264
|
|
|
130063
|
-
var HQCHART_VERSION="1.1.
|
|
130265
|
+
var HQCHART_VERSION="1.1.13022";
|
|
130064
130266
|
|
|
130065
130267
|
function PrintHQChartVersion()
|
|
130066
130268
|
{
|