/// <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(); }
/// <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 = "******"; } }
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; }
/// <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); } }
/// <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); } }
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); } }
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; }
/// <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); } }
/// <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(""); 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; }
/// <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; }
/// <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(); }
/// <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; } }
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(); }
/// <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; }
/// <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); }