Пример #1
0
 public void WatchListName()
 {
     WatchList w = new WatchList();
     Assert.AreEqual(w.ListName, "Default");
     w.ListName = "Test";
     Assert.AreEqual(w.ListName, "Test");
 }
Пример #2
0
        /// <summary>
        /// Adds WatchListPlusQuote items to the a list from the portfolio, watchlist, and quotes.
        /// </summary>
        public void generateWatchLists()
        {
            IWatchList wl = new WatchList();
            PortfolioManagerClient pm = new PortfolioManagerClient();
            allitems.Clear();

            foreach (WatchList w in watchlists) // add all the real watchlist items
            {
                wl.items.AddRange(wlm.GetWatchList(w.ListName).items);
            }
            foreach (PositionMessage msg in pm.GetOpenPositions()) // add the portfolio items
            {
                wl.items.Add(new WatchListItem(new Symbol(msg.SymbolName), portfolioName));
            }
            foreach (WatchListItem item in wl.items) // join all the items together into a list of WatchlistPlusQuote objects
            {
                var quotes = wlm.GetQuotes(item.SymbolName).OrderByDescending(x => x.timestamp).ToList();
                double price1 = 0;
                double price2 = 0;

                price1 = quotes.Select(x => x.price).FirstOrDefault();
                price2 = quotes.Select(x => x.price).Skip(1).FirstOrDefault();

                if (quotes.Count() == 1)
                {
                    price2 = price1;
                }

                string companyName = wlm.GetLongName(item.SymbolName);

                DateTime date = quotes.Select(x => x.timestamp).FirstOrDefault();
                allitems.Add(new WatchlistPlusQuote(item.SymbolName, companyName, item.ListName, date, price1, price2));
            }
        }
Пример #3
0
 public void RemoveFromList()
 {
     WatchList w = new WatchList();
     WatchListItem item = new WatchListItem(new Symbol("GOOG"), "Default");
     w.Items.Add(item);
     w.Items.Remove(item);
     Assert.IsTrue(w.Items.Count == 0);
 }
Пример #4
0
 public void WatchListItems()
 {
     WatchList w = new WatchList();
     WatchListItem item = new WatchListItem();
     item.ListName = "Default";
     item.Symbol = new Symbol("GOOG");
     w.Items.Add(item);
     Assert.IsTrue(w.Items.Count == 1);
     Assert.AreEqual(w.Items[0], item);
 }
Пример #5
0
 public void AddToList()
 {
     IWatchList w = new WatchList();
     w.AddToList(new Symbol("GOOG"), "Default");
     w.AddToList(new Symbol("GOOG"), "Other");
     w.AddToList(new Symbol("MSFT"), "Default");
     w.AddToList(new Symbol("MSFT"), "Default");
     Assert.AreEqual(w.items[0].SymbolName, "GOOG");
     Assert.AreEqual(w.items[1].SymbolName, "GOOG");
     Assert.AreEqual(w.items[2].SymbolName, "MSFT");
     Assert.IsTrue(w.items.Count == 3);
 }
Пример #6
0
        bool IWatchListManager.AddWatchList(string listName)
        {
            TraderContext db = new TraderContext();
            string l = listName;
            if (listName.Length == 0)
            {
                l = "Default";
            }
            var query = db.WatchLists.Where(x => x.ListName.Equals(l));
            if (query.Count() == 0)
            {
                WatchList w = new WatchList(l);
                db.WatchLists.Add(w);
                db.SaveChanges();
                return true;
            }

            return false;
        }
Пример #7
0
        IWatchList IWatchListManager.GetWatchList(string listName)
        {
            TraderContext db = new TraderContext();
            var query = db.WatchListItems.Where(x => x.ListName.Equals(listName));
            IWatchList result = new WatchList();

            foreach (WatchListItem q in query)
            {
                result.items.Add(q);
            }

            return result;
        }
Пример #8
0
        static void Main(string[] args)
        {
            Console.WriteLine("Testing the entity framework...");
            TraderContext db = new TraderContext();

            Console.WriteLine("Clearing the database...");
            var d_quotes = from q in db.Quotes select q;
            foreach (var i in d_quotes) db.Quotes.Remove(i);
            var d_symbol = from s in db.Symbols select s;
            foreach (var i in d_symbol) db.Symbols.Remove(i);
            var d_position = from p in db.Positions select p;
            foreach (var i in d_position) db.Positions.Remove(i);
            var d_trade = from t in db.Trades select t;
            foreach (var i in d_trade) db.Trades.Remove(i);

            Console.WriteLine("Adding records to database...");
            db.Symbols.Add(new Symbol("GOOG"));
            db.Symbols.Add(new Symbol("LNC"));

            db.SaveChanges();

            Quote q1 = new Quote();
            q1.timestamp = DateTime.Now;
            q1.price = 50.47;
            q1.Symbol = db.Symbols.First();
            db.Quotes.Add(q1);

            Position p1 = new Position();
            p1.SymbolName = "GOOG";
            p1.price = 5000;
            p1.quantity = 150;
            p1.status = positionStatus.Open;
            db.Positions.Add(p1);

            db.SaveChanges();

            Trade t1 = new Trade();
            t1.timestamp = DateTime.Now;
            t1.quantity = 40;
            t1.price = 10.10;
            t1.type = tradeTypes.Buy;
            t1.SymbolName = "GOOG";
            db.Trades.Add(t1);

            var q_addtopos = from p in db.Positions.Include("Trades") where p.SymbolName == "GOOG" select p;
            Position goog_pos = q_addtopos.FirstOrDefault();
            goog_pos.Trades.Add(t1);

            db.SaveChanges();

            WatchList w = new WatchList();
            w.ListName = "Default";
            db.WatchLists.Add(w);
            db.SaveChanges();

            WatchListItem wi1 = new WatchListItem();
            wi1.ListName = "Default";
            wi1.SymbolName = "GOOG";
            db.WatchListItems.Add(wi1);

            WatchListItem wi2 = new WatchListItem();
            wi2.ListName = "Default";
            wi2.SymbolName = "LNC";
            db.WatchListItems.Add(wi2);

            db.SaveChanges();

            Console.WriteLine("Retrieving records from database...");
            Console.WriteLine("\nSymbols");
            var query = from s in db.Symbols orderby s.name select s;
            foreach (var i in query)
            {
                Console.WriteLine("Symbol: " + i.name);
            }

            Console.WriteLine("\nQuotes");
            var q_search = from q in db.Quotes select q;
            foreach (var i in q_search)
            {
                Console.WriteLine("Record: " + i.QuoteId.ToString());
                Console.WriteLine("Symbol: " + i.Symbol.name);
                Console.WriteLine("Timestamp: " + i.timestamp.ToString());
                Console.WriteLine("Price: " + i.price.ToString());
            }

            Console.WriteLine("\nPositions");
            var p_search = from p in db.Positions select p;
            foreach (var i in p_search)
            {
                Console.WriteLine("Record: " + i.PositionId.ToString());
                Console.WriteLine("Symbol: " + i.Symbol.name);
                Console.WriteLine("Trade count: " + i.Trades.Count.ToString());
                foreach (var t in i.Trades)
                {
                    Console.WriteLine("\tTrade Id: " + t.TradeId.ToString());
                    Console.WriteLine("\tType: " + t.type.ToString());
                    Console.WriteLine("\tPrice: " + t.price.ToString());
                    Console.WriteLine("\tQuantity: " + t.quantity.ToString());
                    Console.WriteLine("\tTimestamp: " + t.timestamp.ToString());
                }
            }

            Console.WriteLine("\nWatchlist");
            var wlist = from l in db.WatchLists.Include("Items") select l;
            WatchList deflist = wlist.FirstOrDefault();
            foreach (var i in deflist.Items)
            {
                Console.WriteLine("\t" + i.Symbol.name);
            }
            Console.WriteLine("\nTesting complete.");
            Console.ReadLine();
            db.Dispose();
        }
        protected override void Seed(TraderContext context)
        {
            Portfolio portfolio = new Portfolio();

            portfolio.Cash = 10000;
            context.Portfolios.Add(portfolio);
            context.SaveChanges();

            Symbol s = new Symbol("GOOG");

            context.Symbols.Add(s);
            context.SaveChanges();

            Position pos1 = new Position();

            pos1.price     = 100;
            pos1.quantity  = 5;
            pos1.status    = positionStatus.Open;
            pos1.Symbol    = s;
            pos1.Portfolio = portfolio;
            context.Positions.Add(pos1);
            context.SaveChanges();

            Trade t1 = new Trade();

            t1.Symbol        = s;
            t1.Position      = pos1;
            t1.price         = 20;
            t1.quantity      = 5;
            t1.type          = tradeTypes.Buy;
            t1.TransactionId = Guid.NewGuid().ToString();
            t1.timestamp     = DateTime.Now;
            context.Trades.Add(t1);
            context.SaveChanges();

            Quote q1 = new Quote();

            q1.Symbol    = s;
            q1.timestamp = DateTime.Now;
            q1.price     = 20.15;
            context.Quotes.Add(q1);
            context.SaveChanges();

            Alert a1 = new Alert();

            a1.AlertId      = Guid.NewGuid();
            a1.Symbol       = s;
            a1.Timestamp    = DateTime.Now;
            a1.Type         = tradeTypes.Buy;
            a1.Quantity     = 100;
            a1.SentTo       = "*****@*****.**";
            a1.Price        = 10.45;
            a1.ResponseCode = responseCodes.Pending;
            context.Alerts.Add(a1);
            context.SaveChanges();

            SystemSetting emailaddress = new SystemSetting();

            emailaddress.Module = "UserAgent";
            emailaddress.Name   = "ALERTS_EMAIL_ADDRESS_TO";
            emailaddress.Value  = "*****@*****.**";
            context.SystemSettings.Add(emailaddress);
            context.SaveChanges();

            //ThreeDuckStrategy
            context.SystemSettings.Add(new SystemSetting("ThreeDuckStrategy", "FIRST_DUCK_SECONDS", "604800"));
            context.SystemSettings.Add(new SystemSetting("ThreeDuckStrategy", "SECOND_DUCK_SECONDS", "86400"));
            context.SystemSettings.Add(new SystemSetting("ThreeDuckStrategy", "THIRD_DUCK_SECONDS", "43200"));
            context.SystemSettings.Add(new SystemSetting("ThreeDuckStrategy", "MOVING_AVERAGE_WINDOW", "10"));
            context.SaveChanges();

            // Adam's stuff to fill in db tables
            string[] symbols    = { "AAPL", "VZ", "INTC", "MSFT", "HP", "PANL", "NVDA", "QCOM", "AMD", "FB", "LNKD", "ZNGA" };
            string[] watchlists = { "", "Other", "Test List", "Future Purchases" };
            Random   rand       = new Random();

            for (int i = 0; i < watchlists.Length; i++)
            {
                WatchList w = new WatchList(watchlists[i]);
                context.WatchLists.Add(w);
            }
            context.SaveChanges();

            for (int i = 0; i < symbols.Length; i++)
            {
                Symbol symbol = new Symbol(symbols[i]);
                symbol.CompanyName = "Random Company Name, Inc.";
                context.Symbols.Add(symbol);

                WatchListItem wli = new WatchListItem(symbol, watchlists[rand.Next(0, watchlists.Length)]);
                context.WatchListItems.Add(wli);

                for (int k = 0; k < 10; k++)
                {
                    Quote quote1 = new Quote();
                    quote1.price      = Math.Round((rand.NextDouble() * (200 - 5) + 5), 2);
                    quote1.timestamp  = DateTime.Now.AddDays(-k);
                    quote1.SymbolName = symbol.name;
                    context.Quotes.Add(quote1);
                }

                Alert alert1 = new Alert();
                alert1.AlertId      = Guid.NewGuid();
                alert1.Symbol       = symbol;
                alert1.Timestamp    = DateTime.Now.AddDays(-2);
                alert1.Type         = tradeTypes.Buy;
                alert1.Quantity     = 100;
                alert1.SentTo       = "*****@*****.**";
                alert1.Price        = 20.00;
                alert1.ResponseCode = responseCodes.Pending;
                context.Alerts.Add(alert1);

                Alert alert2 = new Alert();
                alert2.AlertId      = Guid.NewGuid();
                alert2.Symbol       = symbol;
                alert2.Timestamp    = DateTime.Now;
                alert2.Type         = tradeTypes.Buy;
                alert2.Quantity     = 100;
                alert2.SentTo       = "*****@*****.**";
                alert2.Price        = 20.00;
                alert2.ResponseCode = responseCodes.Pending;
                context.Alerts.Add(alert2);

                Alert alert3 = new Alert();
                alert3.AlertId      = Guid.NewGuid();
                alert3.Symbol       = symbol;
                alert3.Timestamp    = DateTime.Now.AddHours(-1);
                alert3.Type         = tradeTypes.Buy;
                alert3.Quantity     = 100;
                alert3.SentTo       = "*****@*****.**";
                alert3.Price        = 20.00;
                alert3.ResponseCode = responseCodes.Pending;
                context.Alerts.Add(alert3);
                context.SaveChanges();

                Position p = new Position();
                p.status    = positionStatus.Open;
                p.Symbol    = symbol;
                p.Portfolio = portfolio;

                for (int j = 0; j < new Random().Next(1, 10); j++)
                {
                    Trade t = new Trade();
                    t.Symbol        = symbol;
                    t.Position      = p;
                    t.price         = Math.Round((rand.NextDouble() * (200 - 5) + 5), 2);
                    t.quantity      = rand.Next(1, 20);
                    t.type          = tradeTypes.Buy;
                    t.TransactionId = Guid.NewGuid().ToString();
                    t.timestamp     = DateTime.Now.AddSeconds(rand.Next(1, (60 * 60 * 24 * 60) + 1) * -1);                 // any time between 60 days ago
                    p.price        += t.price;
                    context.Trades.Add(t);
                }
                p.Recalculate();
                context.Positions.Add(p);
            }
            context.SaveChanges();
        }
Пример #10
0
        /// <summary>
        /// Button event that removes an item from a Watchlist.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnRemove_Click(object sender, EventArgs e)
        {
            bool success = false;
            string symbol = ((Button)sender).Attributes["Symbol"];
            string listName = ((Button)sender).Attributes["ListName"];

            if (symbol.Length > 0 && listName.Length > 0)
            {
                IWatchList wl = new WatchList();
                success = wl.RemoveFromList(new Symbol(symbol), listName);

                if (success)
                {
                    setStatus(String.Format("{0} removed from list \"{1}.\"", symbol, listName), true);
                }

                //check if all instances of that symbol are removed before strategy stops watching it
                TraderContext db = new TraderContext();
                if (db.WatchListItems.Where(x => x.SymbolName.Equals(symbol)).Count() == 0 && db.Positions.Where(x => x.SymbolName.Equals(symbol) && x.status == AlgoTrader.Interfaces.positionStatus.Open).Count() == 0)
                {
                    strategy.stopWatching(symbol);
                }
            }
            updateList(true);
        }
Пример #11
0
        /// <summary>
        /// Button event that deletes a Watchlist.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnDeleteList_Click(object sender, EventArgs e)
        {
            bool success = false;
            string listName = radioLists.SelectedValue;
            IWatchList wl = new WatchList();
            if (listName.Length > 0)
            {
                List<WatchListItem> items = wl.items.Where(x => x.ListName.Equals(listName)).ToList();
                foreach (WatchListItem w in items)
                {
                    wl.RemoveFromList(w.Symbol, w.ListName);
                }

                success = wlm.DeleteWatchList(listName);
                if (success)
                {
                    setStatus(String.Format("List \"{0}\" deleted successfully.", listName), true);
                }
                else
                {
                    setStatus(String.Format("List \"{0}\" could not be deleted.", listName), false);
                }
                updateList(true);
            }
        }
Пример #12
0
        /// <summary>
        /// Button event that adds an item to a Watchlist.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnAddToWatchList_Click(object sender, EventArgs e)
        {
            bool success = false;
            IQuoteManager qm = new QuoteManager();
            string symbol = tbAddToWatchList.Text.Trim().ToUpper();
            string listName = radioLists.SelectedValue;

            if (symbol.Length > 0)
            {
                // If it is valid, add it to the list
                if (qm.startWatching(symbol))
                {
                    IWatchList wl = new WatchList();
                    success = wl.AddToList(new Symbol(symbol), listName);
                    if (success)
                    {
                        setStatus(String.Format("{0} added to list \"{1}.\"", symbol, listName), true);
                    }
                    else
                    {
                        setStatus(String.Format("{0} could not be added to \"{1}.\"", symbol, listName), false);
                    }
                    strategy.startWatching(symbol);
                    updateList(true);
                }
                else // If it's not, display invalid symbol message.
                {
                    setStatus("Invalid symbol.", false);
                }
            }
            else
            {
                setStatus("Stock symbol cannot be blank.", false);
            }
        }