Пример #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="PortfolioManager"/> class for running a live trading instance.
        /// </summary>
        /// <param name="portfolioImplementations">The portfolio implementations.</param>
        /// <param name="livetrading">The livetrading.</param>
        public PortfolioManager(PortfolioImplementations portfolioImplementations, LiveTradingMessage livetrading)
            : this(portfolioImplementations)
        {
            //Set initial message
            _initialMessageInstance = livetrading;

            //Since this is a live trading request
            RunMode = RunMode.LiveTrading;

            //World clock is current time
            var clock = new WorldClock(() => DateTime.UtcNow);

            //Get additional information
            if (!Enum.TryParse(livetrading.AccountType, out AccountType accounttype))
            {
                throw new Exception($"Cannot initialize backtest account type {livetrading.AccountType}");
            }
            if (!Enum.TryParse(livetrading.BrokerType, out BrokerType brokertype))
            {
                throw new Exception($"Cannot initialize backtest broker type {livetrading.BrokerType}");
            }
            if (!Enum.TryParse(livetrading.BaseCurrency, out CurrencyType basecurrency))
            {
                throw new Exception($"Cannot initialize backtest base currency type {livetrading.BaseCurrency}");
            }
            if (!Enum.TryParse(livetrading.DisplayCurrency, out CurrencyType displaycurrency))
            {
                throw new Exception($"Cannot initialize backtest base currency type {livetrading.DisplayCurrency}");
            }

            //Get latest currency rates, so we are up to date (trough forced reload)
            _log.Debug($"Initializing currency implementation: {PortfolioImplementations.Currency.GetType().FullName}");
            Config.LoadConfigFile <CurrencyRatesConfig[]>(Config.GlobalConfig.CurrencyRatesConfigFile, true);
            PortfolioImplementations.Currency.Initialize(clock, true);

            //Get broker model
            var brokermodel = BrokerModelFactory.GetBroker(accounttype, brokertype);

            //Create portfolio
            _portfolio = CreatePortfolio(livetrading.PortfolioId, livetrading.AccountId, brokermodel,
                                         livetrading.Leverage, basecurrency, displaycurrency, clock,
                                         livetrading.ExtendedMarketHours);

            //Set initial fund message
            _initialFundMessage = livetrading.QuantFund;
        }
Пример #2
0
        /// <summary>
        /// Initialize message queue instance
        /// </summary>
        public void Initialize()
        {
            //Check if assembly exists
            if (!TryConvertAssemblyToBase64(Config.PortfolioConfig.Assembly, out string assembly))
            {
                _log.Error($"Cannot derive quant fund from base64 encoded variant, please check input");
                return;
            }

            //Get message instance based on config
            if (Config.GlobalConfig.Mode == "Backtester")
            {
                //Check if quant funds are defined in config
                if (Config.PortfolioConfig.QuantFunds.Length == 0)
                {
                    _log.Error($"No quant funds defined in portfolio config, cannot initiate backtest");
                    return;
                }

                //Set initiating message
                SimulationMessage backtestmessage = new SimulationMessage
                {
                    UniqueId            = Guid.NewGuid().ToString(),
                    AccountType         = Config.PortfolioConfig.AccountType,
                    BaseCurrency        = Config.PortfolioConfig.BaseCurrency,
                    BrokerType          = Config.PortfolioConfig.BrokerType,
                    Leverage            = Config.PortfolioConfig.Leverage,
                    MessageType         = MessageType.Backtest,
                    IsResult            = false,
                    PortfolioId         = Guid.NewGuid().ToString(),
                    SendUtc             = DateTime.UtcNow,
                    StartDateTime       = Time.FromUnixTime(Config.PortfolioConfig.StartDateUtc),
                    EndDateTime         = Time.FromUnixTime(Config.PortfolioConfig.EndDateUtc),
                    FrameworkVersion    = Framework.CurrentVersion,
                    ExtendedMarketHours = Config.PortfolioConfig.ExtendedMarketHours
                };

                //Set fund message
                backtestmessage.QuantFund = CreateFund(Config.PortfolioConfig.QuantFunds[0], assembly);

                //Add to known messages
                messages.Add(backtestmessage);
            }
            else if (Config.GlobalConfig.Mode == "LiveTrading")
            {
                //Create message
                var livetradingmessage = new LiveTradingMessage
                {
                    AccountId           = "",
                    AccountType         = Config.PortfolioConfig.AccountType,
                    QuantFund           = CreateFund(Config.PortfolioConfig.QuantFunds[0], assembly),
                    UniqueId            = Guid.NewGuid().ToString(),
                    MessageType         = MessageType.LiveTrading,
                    SendUtc             = DateTime.UtcNow,
                    FrameworkVersion    = Framework.CurrentVersion,
                    IsResult            = false,
                    BaseCurrency        = Config.PortfolioConfig.BaseCurrency,
                    BrokerType          = Config.PortfolioConfig.BrokerType,
                    ExtendedMarketHours = Config.PortfolioConfig.ExtendedMarketHours,
                    Leverage            = Config.PortfolioConfig.Leverage,
                    PortfolioId         = Guid.NewGuid().ToString(),
                    DisplayCurrency     = Config.PortfolioConfig.DisplayCurrency,
                    ResultOk            = false,
                    ResultMessage       = string.Empty
                };

                //Add to known messages
                messages.Add(livetradingmessage);
            }
            else
            {
                _log.Error($"Could not initialize local message queue, no input found in global config");
            }
        }