def ExecuteScript(self, obj=SymbolOption(), rebuild=True): # rebuild 是否重新编译执行 try: print('[ScriptIndexConsole::ExecuteScript] ', self.Script) if (self.AST and self.Parser and rebuild == False): parser = self.Parser ast = self.AST print('[ScriptIndexConsole.ExecuteScript] use cache ast.') else: parser = JSParser(self.Script) parser.Initialize() program = parser.ParseScript() ast = program self.AST = ast #缓存语法树 self.Parser = parser print('[ScriptIndexConsole.ExecuteScript] parser finish.') option = SymbolOption( symbol=obj.Symbol, hqDataType=obj.HQDataType, right=obj.Right, period=obj.Period, request=RequestOption( maxDataCount=obj.MaxRequestDataCount, maxMinuteDayCount=obj.MaxRequestMinuteDayCount), args=self.Arguments if obj.Arguments == None else obj.Arguments) # 个股指定指标参数优先使用 if obj and obj.ProcCreateSymbolData: option.ProcCreateSymbolData = obj.ProcCreateSymbolData execute = JSExecute(ast, option) execute.JobList = parser.Node.GetDataJobList() outVar = execute.Execute() print('[ScriptIndexConsole.ExecuteScript] execute finish.') result = IndexResult(outVar=outVar) result.Stock = StockInfo(name=execute.SymbolData.Name, symbol=execute.SymbolData.Symbol) # 股票信息 result.Date = execute.SymbolData.Data.GetDate() # 数据对应的日期 if (obj.HQDataType == HQ_DATA_TYPE.KLINE_ID and obj.Period >= 4): result.Time = execute.SymbolData.Data.GetTime() # 数据对应的时间 return result except Error as error: result = IndexResult(error=error) return result except ValueError as error: result = IndexResult(error=error) return result except BaseException as error: result = IndexResult(error=error) return result
def Execute(code, option=SymbolOption()): print('[JSComplier::Execute] ', code) parser = JSParser(code) parser.Initialize() program = parser.ParseScript() ast = program print('[JSComplier.Execute] parser finish.') execute = JSExecute(ast, option) execute.JobList = parser.Node.GetDataJobList() result = execute.Execute() return result
def ExecuteScript(self, obj=SymbolOption()): try: print('[ScriptIndexConsole::ExecuteScript] ', self.Script) parser = JSParser(self.Script) parser.Initialize() program = parser.ParseScript() ast = program print('[ScriptIndexConsole.ExecuteScript] parser finish.') option = SymbolOption( symbol=obj.Symbol, hqDataType=obj.HQDataType, right=obj.Right, period=obj.Period, reqeust=RequestOption( maxDataCount=obj.MaxRequestDataCount, maxMinuteDayCount=obj.MaxRequestMinuteDayCount), args=self.Arguments if obj.Arguments == None else obj.Arguments) # 个股指定指标参数优先使用 execute = JSExecute(ast, option) execute.JobList = parser.Node.GetDataJobList() result = Variant() result.Stock = Variant() result.Error = None result.OutVar = execute.Execute() print('[ScriptIndexConsole.ExecuteScript] execute finish.') # 股票信息 result.Stock.Name = execute.SymbolData.Name result.Stock.Symbol = execute.SymbolData.Symbol result.Date = execute.SymbolData.Data.GetDate() # 数据对应的日期 if (obj.HQDataType == HQ_DATA_TYPE.KLINE_ID and obj.Period >= 4): result.Time = execute.SymbolData.Data.GetTime() # 数据对应的时间 return result except Error as error: ErrorInfo = Variant() ErrorInfo.Error = error return ErrorInfo except ValueError as error: ErrorInfo = Variant() ErrorInfo.Error = error return ErrorInfo except BaseException as error: ErrorInfo = Variant() ErrorInfo.Error = error return ErrorInfo