public IEnumerable <Order> GetExecuted(string token) //not implemented in angular
        {                                                    //Returns all pending (Open or new) orders for this PM.
            string           pmid = t.Decode(token);
            PortfolioManager P    = new PortfolioManager(db);

            return(P.ViewExecutedOrders(pmid));
        }
        // GET: api/PortfolioManager
        public IEnumerable <Order> GetPending(string token) //done
        {                                                   //Returns all pending (Open or new) orders for this PM.
            string           pmid = t.Decode(token);
            PortfolioManager P    = new PortfolioManager(db);

            return(P.ViewPendingOrders(pmid));
        }
        public IEnumerable <Portfolio> GetPortfolios(string token)//done
        {
            string           pmid = t.Decode(token);
            PortfolioManager P    = new PortfolioManager(db);

            return(P.GetPortfolios(pmid));
        }
예제 #4
0
 public RepositoryManager(
     IMonitor monitor,
     ManagingBaskets.BasketManager basketManager,
     ManagingTargetingTypes.TargetingTypeManager targetingTypeManager,
     CountryManager countryManager,
     ManagingTaxonomies.TaxonomyManager taxonomyManager,
     SecurityManager securityManager,
     PortfolioManager portfolioManager,
     ManagingBenchmarks.BenchmarkManager benchmarkManager,
     ManagingPst.RepositoryManager portfolioSecurityTargerManager,
     ManagingBpst.BasketSecurityPortfolioTargetRepositoryManager bpstManager,
     ManagingBpst.TargetingTypeGroupBasketSecurityBaseValueRepositoryManager ttgbsbvrManager,
     IssuerManager issuerManager
     )
     : base(monitor, countryManager, securityManager, portfolioManager, issuerManager)
 {
     this.monitor                        = monitor;
     this.taxonomyManager                = taxonomyManager;
     this.targetingTypeManager           = targetingTypeManager;
     this.basketManager                  = basketManager;
     this.benchmarkManager               = benchmarkManager;
     this.portfolioSecurityTargerManager = portfolioSecurityTargerManager;
     this.bpstManager                    = bpstManager;
     this.ttgbsbvrManager                = ttgbsbvrManager;
 }
예제 #5
0
파일: Util.cs 프로젝트: w1r2p1/Core-1
        /// <summary>
        /// Tests an indicator by going through the values of the indicator and checking these values from a static file
        /// </summary>
        /// <param name="indicator"></param>
        /// <param name="filename"></param>
        /// <param name="targetColumns"></param>
        /// <param name="valuecheck"></param>
        public static BacktestResults BacktestStrategy(PortfolioManager portfolio, string filename, Action <BacktestResults, BacktestResults> valuecheck)
        {
            //Toreturn
            BacktestResults actualresults   = new BacktestResults();
            BacktestResults expectedresults = new BacktestResults();

            //Run backtest
            SimpleBacktester backtester = new SimpleBacktester(portfolio, @"", 0);

            //Set values
            actualresults.Result = backtester.Results;
            actualresults.Orders = backtester.Orders;
            actualresults.Trades = backtester.Trades;

            //Check and get file
            FileInfo file  = new FileInfo(Directory.GetCurrentDirectory() + @"\Backtests\ResultFiles\" + filename + ".csv");
            bool     first = true;

            if (file.Exists)
            {
                expectedresults = JsonConvert.DeserializeObject <BacktestResults>("");
            }
            else
            {
                throw new Exception("Could not get results file, file does not exist");
            }

            //Check for realized and expected results
            valuecheck.Invoke(actualresults, expectedresults);

            return(null);
        }
예제 #6
0
        public void processAlertResponse(string alertID, responseCodes alertResponseCode, string alertResponse)
        {
            ILog log = Logger;

            log.DebugFormat("Alert generated: {0} {1}", alertID, alertResponse);
            TraderContext db        = DbContext;
            Guid          alertGuid = Guid.Parse(alertID);
            Alert         alert     = db.Alerts.Where(x => x.AlertId == alertGuid).FirstOrDefault();

            if (alert == null)
            {
                log.WarnFormat("Alert not found: {0}", alertID);
                return;
            }
            alert.ResponseCode = alertResponseCode;
            alert.Response     = alertResponse;
            db.SaveChanges();

            if (alert.ResponseCode == responseCodes.Accept)
            {
                PortfolioManager pm = new PortfolioManager();
                pm.LoadSettings();
                if (alert.Type == tradeTypes.Buy)
                {
                    pm.buy(alert.Symbol.name, alert.Quantity);
                }
                else
                {
                    pm.sell(alert.Symbol.name, alert.Quantity);
                }
            }
            db.Dispose();
        }
예제 #7
0
        public List <Portfolio> GetPortfolio([FromBody] Portfolio.GetRequest request)
        {
            PortfolioManager portfolioManager = new PortfolioManager();
            List <Portfolio> portfolios       = portfolioManager.GetPortfolios(request);

            return(portfolios);
        }
예제 #8
0
        public void CalculateReturns()
        {
            var portfolio = new Portfolio();

            portfolio.Entries.Add(new Portfolio.Stock
            {
                Symbol       = "S1",
                Qty          = 5,
                BuyingPrice  = 2.0m,
                CurrentPrice = 4.0m
            });
            portfolio.Entries.Add(new Portfolio.Stock
            {
                Symbol       = "S2",
                Qty          = 10,
                BuyingPrice  = 11.0m,
                CurrentPrice = 16.0m
            });

            var result = PortfolioManager.CalculateReturns(portfolio);

            Assert.Equal(10.0m, result.Returns["S1"].Return);
            Assert.Equal(1.0m, result.Returns["S1"].RateOfReturn);

            Assert.Equal(50.0m, result.Returns["S2"].Return);
            Assert.Equal(0.45m, result.Returns["S2"].RateOfReturn, 2);

            Assert.Equal(60.0m, result.TotalReturn);
            Assert.Equal(0.5m, result.TotalRateOfReturn);
        }
예제 #9
0
        public List <TradeRecommendation> GetDefaultDashboard()
        {
            PortfolioManager           portfolioManager = new PortfolioManager();
            List <TradeRecommendation> recommendations  = portfolioManager.GetDefaultDashboard().Result;

            return(recommendations);
        }
예제 #10
0
        public virtual void Initialize()
        {
            PreValidate();

            InstrumentManager.InstrumentKeys = InstrumentKeys;
            InstrumentManager.Initialize();

            PortfolioManager.Initialize();

            Strategy.Context = this;
            Strategy.Initialize();

            EventSources = EventSources.Union(new[] { TradingEngine }).ToArray();
            foreach (var eventSource in EventSources)
            {
                eventSource.InstrumentKeys = InstrumentKeys;
                eventSource.FromTime       = FromTime;
                eventSource.ToTime         = ToTime;
                eventSource.Initialize();
                eventSource.NewEvent += (sender, e) => Strategy.EventEngine.SendEvent(e.Event);
            }
            TradingEngine.Initialize();

            PostValidate();
        }
예제 #11
0
        public void BuyAlert(string symbolName, int quantity, double price)
        {
            PortfolioManager pm = new PortfolioManager();
            IUserAgent       ua = new UserAgent();

            ua.generateAlert(symbolName, tradeTypes.Buy, pm.DefaultBuySize(price), price);
        }
        private Message GetMessage()
        {
            var       errorMessage = "";
            Portfolio portfolio    = null;

            if (!Password.Equals(ConfirmPassword))
            {
                errorMessage = "Passwords do not match";
            }
            else if (PortfolioManager.Portfolios.Any(p => p.Value.Username.Equals(Username)))
            {
                errorMessage = "A portfolio with that name already exists.";
            }
            else if (!PortfolioManager.TryToCreate(Username, Password, out portfolio))
            {
                errorMessage = "Broker could not create portfolio.";
            }

            if (!string.IsNullOrEmpty(errorMessage))
            {
                var errormessage = MessageFactory.GetMessage <ErrorMessage>(Config.GetInt(Config.BROKER_PROCESS_NUM), 0) as ErrorMessage;
                errormessage.ErrorText          = errorMessage;
                errormessage.ConversationID     = Conversation.Id;
                errormessage.ReferenceMessageID = this.MessageId;
                return(errormessage);
            }

            var message = MessageFactory.GetMessage <PortfolioUpdateMessage>(Config.GetInt(Config.BROKER_PROCESS_NUM), 0) as PortfolioUpdateMessage;

            message.ConversationID = Conversation.Id;
            message.PortfolioID    = portfolio.PortfolioID;
            message.Assets         = portfolio.CloneAssets();

            return(message);
        }
예제 #13
0
        public PortfolioQueryResult Handle(PortfolioQuery query)
        {
            var portfolio        = _repo.Load();
            var portfolioReturns = PortfolioManager.CalculateReturns(portfolio);

            return(Result());


            PortfolioQueryResult Result()
            {
                return(new PortfolioQueryResult {
                    PortfolioValue = portfolio.Entries.Sum(e => e.Qty * e.CurrentPrice),
                    PortfolioRateOfReturn = portfolioReturns.TotalRateOfReturn,
                    Stocks = portfolio.Entries.Select(Map).ToArray()
                });


                PortfolioQueryResult.StockInfo Map(Portfolio.Stock e)
                => new PortfolioQueryResult.StockInfo
                {
                    Name         = e.Name,
                    Symbol       = e.Symbol,
                    Currency     = e.Currency,
                    Qty          = e.Qty,
                    BuyingPrice  = e.BuyingPrice,
                    CurrentPrice = e.CurrentPrice,

                    BuyingValue  = e.Qty * e.BuyingPrice,
                    CurrentValue = e.Qty * e.CurrentPrice,

                    Return       = portfolioReturns.Returns[e.Symbol].Return,
                    RateOfReturn = portfolioReturns.Returns[e.Symbol].RateOfReturn
                };
            }
        }
        public void Setup()
        {
            _instrumentDictionary = new SpotInstrumentDictionaryMock();
            _instrumentDictionary.Data.Add("BTCUSD", new SpotInstrument()
            {
                Symbol     = "BTCUSD",
                BaseAsset  = "BTC",
                QuoteAsset = "USD",
                BrokerId   = "broker"
            });

            _repository = new PortfolioRepositoryMock();

            _portfolioReport = new PortfolioReportMock();

            _loggerFactory =
                LoggerFactory.Create(builder =>
                                     builder.AddSimpleConsole(options =>
            {
                options.IncludeScopes   = true;
                options.SingleLine      = true;
                options.TimestampFormat = "hh:mm:ss ";
            }));

            _manager = new PortfolioManager(
                _loggerFactory.CreateLogger <PortfolioManager>(),
                _repository,
                _instrumentDictionary,
                _portfolioReport
                );
        }
예제 #15
0
        public List <TradeRecommendation> GetTradeRecommendation(Guid portfolioGuid, [FromBody] TradeRecommendation.GetRequest request)
        {
            PortfolioManager           portfolioManager = new PortfolioManager();
            List <TradeRecommendation> recommendations  = portfolioManager.GetTradeRecommendation(portfolioGuid, request);

            return(recommendations);
        }
예제 #16
0
        public Guid CreatePortfolio([FromBody] Portfolio.CreateRequest request)
        {
            PortfolioManager portfolioManager = new PortfolioManager();
            Guid             portfolioGuid    = portfolioManager.CreatePortfolio(request);

            return(portfolioGuid);
        }
예제 #17
0
        public void SellAlert(string symbolName, double price)
        {
            IPortfolioManager pm  = new PortfolioManager();
            PositionMessage   pos = pm.GetPosition(symbolName);
            UserAgent         ua  = new UserAgent();

            ua.generateAlert(symbolName, tradeTypes.Sell, pos.Quantity, price);
        }
예제 #18
0
 private void btnClearPortfolioDB_Click(object sender, EventArgs e)
 {
     if (MessageBox.Show("警告!是否确定要清空投资组合数据库?", "警告", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK)
     {
         PortfolioManager manager = new PortfolioManager();
         int count = manager.DeleteAll();
         MessageBox.Show(string.Format("Done! Deteled {0} lines.", count));
     }
 }
예제 #19
0
        public void AddPortfolioFailTest()
        {
            PortfolioManager.TryToCreate(DataGenerator.GetRandomString(3), DataGenerator.GetRandomString(6), out Portfolio portfolio);

            Assert.IsFalse(PortfolioManager.TryToCreate(portfolio.Username, DataGenerator.GetRandomString(6), out Portfolio newPortfolio));
            Assert.IsNull(newPortfolio);

            PortfolioManager.TryToRemove(portfolio.PortfolioID);
        }
예제 #20
0
        public void RemovePortfolioSuccessTest()
        {
            PortfolioManager.TryToCreate(DataGenerator.GetRandomString(3), DataGenerator.GetRandomString(6), out Portfolio portfolio);
            var count = PortfolioManager.Portfolios.Count;
            var id    = portfolio.PortfolioID;

            Assert.IsTrue(PortfolioManager.TryToRemove(id));
            Assert.AreEqual(count - 1, PortfolioManager.Portfolios.Count);
        }
예제 #21
0
        /// <summary>
        /// Tests an indicator by going through the values of the indicator and checking these values from a static file
        /// </summary>
        /// <param name="indicator"></param>
        /// <param name="filename"></param>
        /// <param name="targetColumns"></param>
        /// <param name="valuecheck"></param>
        public static Result BacktestStrategy(PortfolioManager portfolio, string filename)
        {
            //Run backtest
            //LocalBacktester backtester = new LocalBacktester(portfolio, @"", 0);

            //Check and get file
            FileInfo file = new FileInfo(Directory.GetCurrentDirectory() + @"\Backtests\ResultFiles\" + filename + ".csv");

            return(null);
        }
예제 #22
0
        public void RemovePortfolioFailTest()
        {
            PortfolioManager.TryToCreate(DataGenerator.GetRandomString(3), DataGenerator.GetRandomString(6), out Portfolio portfolio);
            var count = PortfolioManager.Portfolios.Count;

            Assert.IsFalse(PortfolioManager.TryToRemove(portfolio.PortfolioID + 123));
            Assert.AreEqual(count, PortfolioManager.Portfolios.Count);

            PortfolioManager.TryToRemove(portfolio.PortfolioID);
        }
예제 #23
0
        public void TestCleanup()
        {
            ConversationManager.Stop();
            ComService.RemoveClient(Config.DEFAULT_UDP_CLIENT);

            foreach (Portfolio p in PortfolioManager.Portfolios.Values)
            {
                PortfolioManager.TryToRemove(p.PortfolioID);
            }
            Assert.IsTrue(PortfolioManager.Portfolios.Count == 0);
        }
예제 #24
0
 public void SendOrder(IEnumerable <int> list = null)
 {
     if (list != null)
     {
         PortfolioManager P = new PortfolioManager(db);
         P.SendToTrader(list);
     }
     else
     {
         throw new ProcessException("Null List passed");
     }
 }
예제 #25
0
 public IEnumerable <Order> GetExecuted(string id = null)
 {//Returns all pending (Open or new) orders for this PM.
     if (id != null)
     {
         PortfolioManager P = new PortfolioManager(db);
         return(P.ViewExecutedOrders(id));
     }
     else
     {
         throw new ProcessException("ID is null");
     }
 }
예제 #26
0
 public void SetPortfolio(PortfolioManager portfolio)
 {
     LocalLog(LogLevel.Debug, "Setting agent portfolio to portfolio with id {0}", portfolio.Id);
     if (_portfolio == null)
     {
         _portfolio = portfolio;
     }
     else
     {
         LocalLog(LogLevel.Warn, "Could not set new portfolio (with id {0}) to agent, portfolio was already set to {1}", portfolio.Id, Portfolio.Id);
     }
 }
예제 #27
0
 public IEnumerable <Portfolio> GetPortfolios(string pmid = null)
 {
     if (pmid != null)
     {
         PortfolioManager P = new PortfolioManager(db);
         return(P.GetPortfolios(pmid));
     }
     else
     {
         throw new ProcessException("ID is null");
     }
 }
예제 #28
0
 public void CreateOrder([FromBody] Order O = null)
 {
     if (O != null)
     {
         PortfolioManager P = new PortfolioManager(db);
         P.Add(O);
     }
     else
     {
         throw new ProcessException("Order contains null attribute");
     }
 }
예제 #29
0
        public void LoadSettingsFromDb()
        {
            PortfolioManager pm = new PortfolioManager();

            pm.LoadSettings();
            PortfolioRule r = pm.Rules.FirstOrDefault <PortfolioRule>(x => typeof(AllocationRule).IsInstanceOfType(x));

            Assert.IsNotNull(r);
            AllocationRule a = (AllocationRule)r;

            Assert.AreEqual(0.9, a.MaxAllocation);
        }
예제 #30
0
 public void DeleteOrders(IEnumerable <int> list = null)
 {
     if (list != null)
     {
         PortfolioManager P = new PortfolioManager(db);
         P.DeleteOrders(list);
     }
     else
     {
         throw new ProcessException("Null List passed");
     }
 }