예제 #1
0
        public SignalBase StartSignalExecution(string userName, SignalInitParams p, List <PortfolioAccount> accountInfos, Dictionary <string, byte[]> files)
        {
            SaveSignalData(userName, p.FullName, files, out var errors);
            if (!string.IsNullOrWhiteSpace(errors))
            {
                Logger.Error(errors);
                return(null);
            }

            SignalBase signalBase = null;

            try
            {
                signalBase = CreateSignalInstance(userName, p.FullName);
                var res1 = signalBase.SetParameters(p.Parameters);
                var res2 = signalBase.Init(new Broker(_connector, userName, accountInfos, signalBase),
                                           _dataProvider, p.Selections, p.State, p.StrategyParameters);

                if (!res1 || !res2)
                {
                    RemoveWorkingSignal(p.FullName, userName);
                }

                AddWorkingSignal(signalBase, userName);

                if (p.State == SignalState.Backtesting && p.BacktestSettings != null)
                {
                    signalBase.StartBacktest(p.BacktestSettings);
                    Console.WriteLine($"Scripting backtest started {signalBase.ShortName}");
                    return(signalBase);
                }

                Console.WriteLine($"Scripting started {signalBase.ShortName}");
                return(signalBase);
            }
            catch (Exception ex)
            {
                Logger.Error(ex.Message, ex);
                if (signalBase != null)
                {
                    RemoveWorkingSignal(p.FullName, userName);
                }

                return(null);
            }
        }
예제 #2
0
        protected override void ExecuteCommand(CreateUserSignalRequest request)
        {
            var success          = default(bool);
            var signalInitParams = new SignalInitParams
            {
                FullName           = request.SignalName,
                BacktestSettings   = request.BacktestSettings,
                StrategyParameters = request.StrategyParameters,
                Parameters         = request.Parameters,
                Selections         = request.Selections,
                State = request.InitialState
            };

            Core.AddSignal(request.User, request.Files, new SignalInitParams
            {
                FullName           = request.SignalName,
                BacktestSettings   = request.BacktestSettings,
                StrategyParameters = request.StrategyParameters,
                Parameters         = request.Parameters,
                Selections         = request.Selections,
                State = request.InitialState
            });

            success = PushStartCodeMessage(new StartSignalExecutionResponse
            {
                Id               = request.SignalName,
                UserName         = request.User.Login,
                Files            = request.Files,
                SignalInitParams = signalInitParams,
                Portfolios       = Core.GetPortfolios(request.User),
                AccountInfos     = request.AccountInfos
            });

            if (!success)
            {
                PushResponse(new ErrorMessageResponse(new Exception("Scripting failed to start. Services are offline"))
                {
                    User = request.User
                });
            }
        }