/// <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; }
/// <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"); } }