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