public static ConvertionResult Convert(string code, AlgoType algotype, Model.File[] includeFiles) { string calgoCode = null; IEnumerable <ParsingError> parsingErrors = new ParsingError[0]; var compilerErrors = new CompilerError[0]; var codeBase = CodeBase.Mq4; if (CSharpCodeDetector.IsCSharpCode(code)) { codeBase = CodeBase.CSharp; } else if (MqCodeBaseDetector.IsMq5Code(code)) { codeBase = CodeBase.Mq5; } else if (!MqCodeBaseDetector.IsValidMq4Code(code)) { codeBase = CodeBase.Invalid; } else { var parser = new Mq4Parser(); var indicatorParsingResult = parser.Parse(code, algotype, includeFiles); var algo = indicatorParsingResult.Algo; parsingErrors = indicatorParsingResult.ParsingErrors; if (parsingErrors.All(e => e.ErrorType < ErrorType.Error)) { var presenter = CreatePresenter(algotype); calgoCode = presenter.GenerateCodeFrom(algo); var compiler = new CSharpCompiler(); var fileName = Path.GetTempFileName(); try { var codeToCompile = calgoCode; var indexToInsert = codeToCompile.IndexOf("//Custom Indicators Place Holder"); foreach (var customIndicatorName in algo.CustomIndicators) { codeToCompile = codeToCompile.Insert(indexToInsert, CustomIndicatorTemplate.Replace("CustomIndicatorName", customIndicatorName)); } compilerErrors = compiler.Compile(codeToCompile, fileName); codeBase = MqCodeBaseDetector.GetCodeBaseFromErrors(compilerErrors); } finally { File.Delete(fileName); } } } return(new ConvertionResult(calgoCode, parsingErrors, compilerErrors, codeBase)); }
public static ConvertionResult Convert(string code, AlgoType algotype, Model.File[] includeFiles) { string calgoCode = null; IEnumerable<ParsingError> parsingErrors = new ParsingError[0]; var compilerErrors = new CompilerError[0]; var codeBase = CodeBase.Mq4; if (CSharpCodeDetector.IsCSharpCode(code)) { codeBase = CodeBase.CSharp; } else if (MqCodeBaseDetector.IsMq5Code(code)) { codeBase = CodeBase.Mq5; } else if (!MqCodeBaseDetector.IsValidMq4Code(code)) { codeBase = CodeBase.Invalid; } else { var parser = new Mq4Parser(); var indicatorParsingResult = parser.Parse(code, algotype, includeFiles); var algo = indicatorParsingResult.Algo; parsingErrors = indicatorParsingResult.ParsingErrors; if (parsingErrors.All(e => e.ErrorType < ErrorType.Error)) { var presenter = CreatePresenter(algotype); calgoCode = presenter.GenerateCodeFrom(algo); var compiler = new CSharpCompiler(); var fileName = Path.GetTempFileName(); try { var codeToCompile = calgoCode; var indexToInsert = codeToCompile.IndexOf("//Custom Indicators Place Holder"); foreach (var customIndicatorName in algo.CustomIndicators) { codeToCompile = codeToCompile.Insert(indexToInsert, CustomIndicatorTemplate.Replace("CustomIndicatorName", customIndicatorName)); } compilerErrors = compiler.Compile(codeToCompile, fileName); codeBase = MqCodeBaseDetector.GetCodeBaseFromErrors(compilerErrors); } finally { File.Delete(fileName); } } } return new ConvertionResult(calgoCode, parsingErrors, compilerErrors, codeBase); }