Example #1
0
        /// <summary>
        /// Called by the UI to add an item to the list.
        /// </summary>
        /// <param name="symbol"></param>
        /// <param name="listName"></param>
        /// <returns></returns>
        bool IWatchList.AddToList(ISymbol symbol, string listName)
        {
            string sname = symbol.name;
            string lname = listName;

            if (sname.Length > 0 && lname.Length > 0)
            {
                TraderContext db = new TraderContext();
                // checks if watchlist item exists
                var WLI_QUERY = db.WatchListItems.Where(x => (x.SymbolName.Equals(sname) && x.ListName.Equals(lname))).ToList();
                if (WLI_QUERY.Count >= 1)
                {
                    return(false);
                }
                else                 // if not, checks if symbol exists
                {
                    var SYMBOL_QUERY = db.Symbols.Where(x => x.name.Equals(sname)).ToList();
                    if (SYMBOL_QUERY.Count == 0)
                    {
                        Symbol s = new Symbol(sname);
                        db.Symbols.Add(s);
                        db.SaveChanges();
                    }
                    db.WatchListItems.Add(new WatchListItem(symbol, listName));
                    db.SaveChanges();
                    return(true);
                }
            }
            else
            {
                return(false);
            }
        }
 /// <summary>
 /// Button event that adds cash to the user's available cash.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 protected void btnAddCash_Click(object sender, EventArgs e)
 {
     double value = double.Parse(InputAddCash.Value);
     TraderContext db = new TraderContext();
     db.Portfolios.FirstOrDefault().Cash += value;
     AvailableCash.Text = String.Format("{0:C}", (double.Parse(AvailableCash.Text.TrimStart('$')) + value));
     db.SaveChanges();
     update();
 }
Example #3
0
 /// <summary>
 /// Gets the username to be displayed in the greeting.
 /// </summary>
 protected void getUsername()
 {
     TraderContext db = new TraderContext();
     var query = db.SystemSettings.Where(x => x.Name.Equals("USERNAME")).Select(x => x);
     if (query.Count() > 0)
     {
         username = query.First().Value;
     } else {
         username = "******";
     }
 }
Example #4
0
 public void OnTick(object source, ElapsedEventArgs e)
 {
     TraderContext db = new TraderContext();
     List<Quote> quotes = db.Quotes.Include("Symbol").Where(x => x.timestamp > _lastPeek).OrderBy(y => y.timestamp).ToList<Quote>();
     _lastPeek = quotes.Max(x => x.timestamp);
     List<QuoteMessage> msg = new List<QuoteMessage>();
     foreach (Quote q in quotes)
     {
         msg.Add(new QuoteMessage(q));
     }
     _owner.NewQuotes(msg);
     db.Dispose();
 }
        bool IWatchListManager.DeleteWatchList(string listName)
        {
            TraderContext db = new TraderContext();
            string l = listName;
            var query = db.WatchLists.Where(x => x.ListName.Equals(l)).ToList();

            if (query.Count > 0)
            {
                foreach (WatchList w in query)
                {
                    db.WatchLists.Remove(w);
                }
                db.SaveChanges();
                return true;
            }
            return false;
        }
        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;
        }
Example #7
0
        /// <summary>
        /// Called by the UI to remove an item from the watchlist.
        /// </summary>
        /// <param name="symbol"></param>
        /// <param name="listName"></param>
        /// <returns></returns>
        bool IWatchList.RemoveFromList(ISymbol symbol, string listName)
        {
            TraderContext db    = new TraderContext();
            var           query = db.WatchListItems.Where(x => (x.SymbolName.Equals(symbol.name) && x.ListName.Equals(listName)));

            if (query.Count() > 0)
            {
                foreach (WatchListItem item in query)
                {
                    db.WatchListItems.Remove(item);
                }
                db.SaveChanges();
                return(true);
            }
            else
            {
                return(false);
            }
        }
Example #8
0
        /// <summary>
        /// Saves the changes made to the settings.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnSave_Click(object sender, EventArgs e)
        {
            try
            {
                string module = "ThreeDuckStrategy";

                // Remove the old settings
                TraderContext db = new TraderContext();
                var query = db.SystemSettings.Where(x => x.Module.Equals(module)).Select(x => x);
                foreach (SystemSetting setting in query)
                {
                    db.SystemSettings.Remove(setting);
                }

                var q_username = db.SystemSettings.Where(x => x.Name.Equals("USERNAME")).Select(x=>x);
                if (q_username.Count() > 0)
                {
                    SystemSetting s = q_username.FirstOrDefault();
                    db.SystemSettings.Remove(s);
                }

                // Add the new settings
                SystemSetting _duck1 = new SystemSetting(module, "FIRST_DUCK_SECONDS", InputFirstDuck.Value);
                SystemSetting _duck2 = new SystemSetting(module, "SECOND_DUCK_SECONDS", InputSecondDuck.Value);
                SystemSetting _duck3 = new SystemSetting(module, "THIRD_DUCK_SECONDS", InputThirdDuck.Value);
                SystemSetting _movingavg = new SystemSetting(module, "MOVING_AVERAGE_WINDOW", InputAvgWindow.Value);
                SystemSetting _username = new SystemSetting("User", "USERNAME", InputName.Value);
                db.SystemSettings.Add(_duck1);
                db.SystemSettings.Add(_duck2);
                db.SystemSettings.Add(_duck3);
                db.SystemSettings.Add(_movingavg);
                db.SystemSettings.Add(_username);
                db.SaveChanges();

                setStatus("Settings saved successfully.", true);
            }
            catch
            {
                setStatus("Settings could not be saved. Please try again.", false);
            }
        }
Example #9
0
        protected void btnResetDefault_Click(object sender, EventArgs e)
        {
            try
            {
                string module = "ThreeDuckStrategy";

                // Remove the old settings
                TraderContext db = new TraderContext();
                var query = db.SystemSettings.Where(x => x.Module.Equals(module)).Select(x => x);
                foreach (SystemSetting setting in query)
                {
                    db.SystemSettings.Remove(setting);
                }

                var q_username = db.SystemSettings.Where(x => x.Name.Equals("USERNAME")).Select(x => x);
                if (q_username.Count() > 0)
                {
                    SystemSetting s = q_username.FirstOrDefault();
                    db.SystemSettings.Remove(s);
                }

                // Restore the default settings
                SystemSetting _duck1 = new SystemSetting(module, "FIRST_DUCK_SECONDS", "300");
                SystemSetting _duck2 = new SystemSetting(module, "SECOND_DUCK_SECONDS", "3600");
                SystemSetting _duck3 = new SystemSetting(module, "THIRD_DUCK_SECONDS", "14400");
                SystemSetting _movingavg = new SystemSetting(module, "MOVING_AVERAGE_WINDOW", "60");
                db.SystemSettings.Add(_duck1);
                db.SystemSettings.Add(_duck2);
                db.SystemSettings.Add(_duck3);
                db.SystemSettings.Add(_movingavg);
                db.SaveChanges();

                // Display success message
                setStatus("Settings saved successfully.", true);
            }
            catch
            {
                // Display fail message
                setStatus("Settings could not be saved. Please try again.", false);
            }
        }
Example #10
0
        private Dictionary<string, string> GetConfiguration()
        {
            Dictionary<string, string> config = new Dictionary<string, string>();

            try
            {
                TraderContext db = new TraderContext();
                var settings = from s in db.SystemSettings where s.Module == "ThreeDuckStrategy" select s;
                foreach (var i in settings)
                {
                    config.Add(i.Name, i.Value);
                    log.DebugFormat("Loaded configuration value: {0}={1}", i.Name, i.Value);
                }
            }
            catch (Exception ex)
            {
                log.WarnFormat("Failed to load configuration: {0}", ex.Message);
                log.Warn(ex.StackTrace);
            }

            return config;
        }
        List<WatchList> IWatchListManager.GetAllWatchLists()
        {
            TraderContext db = new TraderContext();
            var query = db.WatchLists.OrderBy(x => x.ListName);
            List<WatchList> result = new List<WatchList>();

            foreach (WatchList w in query)
            {
                result.Add(w);
            }

            return result;
        }
 public WatchListManager(TraderContext db)
 {
     _dbContext = db;
 }
 public WatchListManager()
 {
     _dbContext = null;
 }
        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;
        }
 public PortfolioManager(TraderContext db)
     : this()
 {
     _dbContext = db;
 }
Example #16
0
        /// <summary>
        /// Gets the open positions and transactions.
        /// </summary>
        private void generatePositions()
        {
            openpositions.Clear();
            allpositions.Clear();
            transactions.Clear();
            openpositions = portfolio.GetOpenPositions().ToList();
            AvailableCash.Text = String.Format("{0:C}", portfolio.getAvailableCash());

            TraderContext db = new TraderContext();
            var query = db.Positions.Select(x => x.SymbolName);
            foreach (string s in query)
            {
                PositionMessage msg = portfolio.GetPosition(s);
                allpositions.Add(msg);
            }

            // get the transactions
            var transquery = db.Trades.Select(x => x);
            foreach (Trade t in transquery)
            {
                transactions.Add(t);
            }
        }
Example #17
0
        /// <summary>
        /// Creates the position table.
        /// </summary>
        /// <param name="pm">PositionMessage</param>
        /// <returns>Table</returns>
        private Table createPositionTable(PositionMessage pm)
        {
            string fullName = string.Empty;
            double gain = 0;
            double gainPercent = 0;
            string classname = string.Empty;

            IWatchListManager wlm = new WatchListManager();
            fullName = wlm.GetLongName(pm.SymbolName);

            TraderContext db = new TraderContext();
            double latestQuote = db.Quotes.Where(x => x.SymbolName.Equals(pm.SymbolName)).OrderByDescending(x => x.timestamp).Select(x => x.price).FirstOrDefault();
            gain = (latestQuote * pm.Quantity) - pm.Price;
            gainPercent = gain / (pm.Price);

            if (gain > 0)
            {
                classname = "green";
            }
            if (gain < 0)
            {
                classname = "red";
            }

            Table tbl = new Table();
            TableRow row = new TableRow();

            for (int i = 0; i < columns; i++)
            {
                TableCell cell = new TableCell();
                cell.Width = new Unit(widths[i]);
                row.Cells.Add(cell);
            }

            row.Cells[1].Text += new HtmlString(String.Format("{0} <span class='subtext'>({1})</span>", pm.SymbolName, fullName));
            row.Cells[2].Text = String.Format("{0:N0}", pm.Quantity);
            row.Cells[3].Text = new HtmlString(String.Format("{0:C} / <span class='{3}'>{1:C}</span> / <span class='{3}'>{2:P2}</span>", pm.Price, gain, gainPercent, classname)).ToString();
            row.Cells[4].Text = String.Format("{0:C}", pm.Trades.Sum(x => x.PaidCommission));
            row.Cells[5].Text = pm.Status.ToString();
            row.Cells[5].CssClass = getCssClass(pm.Status.ToString());

            // BUTTONS
            HtmlGenericControl btnToggle = new HtmlGenericControl("div");
            btnToggle.Attributes.Add("class", "toggle icon-plus-sign");
            row.Cells[0].Controls.Add(btnToggle);

            Button btnAction = new Button();
            btnAction.CssClass = "symbol-button";
            btnAction.ToolTip = "Buy/sell";
            btnAction.Text = HttpUtility.HtmlDecode("&#xe015;");
            btnAction.Attributes["SymbolName"] = pm.SymbolName;
            btnAction.Click += new EventHandler(btnClick);
            row.Cells[columns - 1].Controls.Add(btnAction);

            // css stuff
            tbl.CssClass = "main";
            row.CssClass = "main";
            row.Cells[(radioSortType.SelectedIndex / 2) + 1].CssClass = "bold";

            tbl.Rows.Add(row);
            return tbl;
        }
Example #18
0
        /// <summary>
        /// Gets the system settings configuration and displays it on the page.
        /// </summary>
        protected void getConfig()
        {
            TraderContext db = new TraderContext();
            duck1 = int.Parse(db.SystemSettings.Where(x => x.Name.Equals("FIRST_DUCK_SECONDS")).Select(x => x.Value).FirstOrDefault());
            duck2 = int.Parse(db.SystemSettings.Where(x => x.Name.Equals("SECOND_DUCK_SECONDS")).Select(x => x.Value).FirstOrDefault());
            duck3 = int.Parse(db.SystemSettings.Where(x => x.Name.Equals("THIRD_DUCK_SECONDS")).Select(x => x.Value).FirstOrDefault());
            movingavg = int.Parse(db.SystemSettings.Where(x => x.Name.Equals("MOVING_AVERAGE_WINDOW")).Select(x => x.Value).FirstOrDefault());
            useremail = db.SystemSettings.Where(x => x.Name.Equals("ALERTS_EMAIL_ADDRESS_TO")).Select(x => x.Value).FirstOrDefault();
            name = db.SystemSettings.Where(x => x.Name.Equals("USERNAME")).Select(x => x.Value).FirstOrDefault();

            InputFirstDuck.Value = duck1.ToString();
            InputSecondDuck.Value = duck2.ToString();
            InputThirdDuck.Value = duck3.ToString();
            InputAvgWindow.Value = movingavg.ToString();
            InputName.Value = name;
            InputEmail.Value = useremail;
        }
Example #19
0
 /// <summary>
 /// Called by the UI to remove an item from the watchlist.
 /// </summary>
 /// <param name="symbol"></param>
 /// <param name="listName"></param>
 /// <returns></returns>
 bool IWatchList.RemoveFromList(ISymbol symbol, string listName)
 {
     TraderContext db = new TraderContext();
     var query = db.WatchListItems.Where(x => (x.SymbolName.Equals(symbol.name) && x.ListName.Equals(listName)));
     if (query.Count() > 0)
     {
         foreach (WatchListItem item in query)
         {
             db.WatchListItems.Remove(item);
         }
         db.SaveChanges();
         return true;
     }
     else
     {
         return false;
     }
 }
 public PortfolioManager()
 {
     _dbContext = null;
     Rules = new List<PortfolioRule>();
     LoadSettings();
 }
Example #21
0
        /// <summary>
        /// Called by the UI to add an item to the list.
        /// </summary>
        /// <param name="symbol"></param>
        /// <param name="listName"></param>
        /// <returns></returns>
        bool IWatchList.AddToList(ISymbol symbol, string listName)
        {
            string sname = symbol.name;
            string lname = listName;

            if (sname.Length > 0 && lname.Length > 0)
            {
                TraderContext db = new TraderContext();
                // checks if watchlist item exists
                var WLI_QUERY = db.WatchListItems.Where(x => (x.SymbolName.Equals(sname) && x.ListName.Equals(lname))).ToList();
                if (WLI_QUERY.Count >= 1)
                {
                    return false;
                }
                else // if not, checks if symbol exists
                {
                    var SYMBOL_QUERY = db.Symbols.Where(x => x.name.Equals(sname)).ToList();
                    if (SYMBOL_QUERY.Count == 0)
                    {
                        Symbol s = new Symbol(sname);
                        db.Symbols.Add(s);
                        db.SaveChanges();
                    }
                    db.WatchListItems.Add(new WatchListItem(symbol, listName));
                    db.SaveChanges();
                    return true;
                }
            }
            else
            {
                return false;
            }
        }
Example #22
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();
        }
Example #23
0
        /// <summary>
        /// Creates a table for all of the Trades associated with a specific Position.
        /// </summary>
        /// <param name="pm">PositionMessage</param>
        /// <returns>Table</returns>
        private Table createTradeTable(PositionMessage pm)
        {
            string[] theaders = { "", "Date", "Shares", "Price / Gain / Gain %", "Fees", "Type", "" };
            Table tbl = new Table();

            TableHeaderRow header = new TableHeaderRow();
            for (int i = 0; i < tcolumns; i++)
            {
                TableHeaderCell cell = new TableHeaderCell();
                cell.Text = theaders[i];
                cell.Width = new Unit(widths[i]);
                header.Cells.Add(cell);
            }
            tbl.Rows.Add(header);

            TraderContext db = new TraderContext();
            double latestQuote = db.Quotes.Where(x => x.SymbolName.Equals(pm.SymbolName)).OrderByDescending(x => x.timestamp).Select(x => x.price).FirstOrDefault();
            foreach (TradeMessage t in pm.Trades.OrderByDescending(x => x.Timestamp).Where((x) => x.Quantity > 0 && x.Type==Portfolio.Client.tradeTypes.Buy))
            {
                double gain = 0;
                double gainPercent = 0;
                string classname = string.Empty;

                TableRow trow = new TableRow();
                for (int i = 0; i < tcolumns; i++)
                {
                    TableCell cell = new TableCell();
                    trow.Cells.Add(cell);
                }

                gain = latestQuote - t.Price;
                gainPercent = gain / t.Price;
                if (gain > 0)
                {
                    classname = "green";
                }
                if (gain < 0)
                {
                    classname = "red";
                }

                trow.Cells[1].Text = String.Format("{0:d} at {0:T}", t.Timestamp); // symbol name
                trow.Cells[1].Text += new HtmlString(String.Format(" <span class='subtext'>({0})</span>", getTimeSpan(t.Timestamp))); // date
                trow.Cells[2].Text = String.Format("{0:N0}", t.Quantity); // quantity
                trow.Cells[3].Text = new HtmlString(String.Format("{0:C} / <span class='{3}'>{1:C}</span> / <span class='{3}'>{2:P2}</span>", t.Price, gain, gainPercent, classname)).ToString();
                trow.Cells[4].Text = String.Format("{0:C}", t.PaidCommission); // broker fee
                trow.Cells[5].Text = t.Type.ToString();
                trow.Cells[5].CssClass = getCssClass(t.Type.ToString());

                tbl.Rows.Add(trow);
            }

            // css stuff
            tbl.CssClass = "sub";

            return tbl;
        }
 string IWatchListManager.GetLongName(string symbolName)
 {
     TraderContext db = new TraderContext();
     string longname = db.Symbols.Where(x => x.name.Equals(symbolName)).Select(x => x.CompanyName).FirstOrDefault();
     return longname;
 }
        List<Quote> IWatchListManager.GetQuotes(string symbolName)
        {
            TraderContext db = new TraderContext();
            var query = db.Quotes.Where(x => x.SymbolName.Equals(symbolName));
            List<Quote> result = new List<Quote>();

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

            return result;
        }
Example #26
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);
        }