public async Task <IActionResult> Edit(int id, [Bind("ID,Ticker,StockName,Price")] StockModel stockModel) { if (id != stockModel.ID) { return(NotFound()); } if (ModelState.IsValid) { try { _context.Update(stockModel); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!StockModelExists(stockModel.ID)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Index))); } return(View(stockModel)); }
public async Task <IActionResult> Update(Trade trade) { try { if (Exists(trade.Code, trade.Id)) { ModelState.AddModelError("Code", "Já existe uma negociação cadastrada com este código."); } if (ModelState.IsValid) { _context.Update(trade); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } } catch (DbUpdateException) { //Log the error (uncomment ex variable name and write a log. ModelState.AddModelError("", "Unable to save changes. " + "Try again, and if the problem persists " + "see your system administrator."); } return(View(trade)); }
public static void ImportFromBorsaItaliana(string startFrom) { List <string> tickers = getTickers(startFrom); int index = 0; var borsaItalianaService = new BorsaItalianaService(); foreach (var ticker in tickers) { var quote = borsaItalianaService.GetDailyQuotesLastThreeMonths(ticker); quote = GetEndOfMonthQuotes(quote); if (quote.Any()) { using (var context = new TradingContext()) { var quoteEsistenti = context.Quote.Where(q => q.Ticker == ticker).ToList(); foreach (var quota in quote) { var quotaEsistente = quoteEsistenti.SingleOrDefault(q => q.Data.ToString("MMyyyy") == quota.Data.ToString("MMyyyy")); if (quotaEsistente == null) { context.Quote.Add(quota); } else if (quotaEsistente.Chiusura != quota.Chiusura || quotaEsistente.Volumi != quota.Volumi) { context.Update(quotaEsistente); quotaEsistente.Chiusura = quota.Chiusura; quotaEsistente.Volumi = quota.Volumi; } } var records = context.SaveChanges(); Console.WriteLine($"{++index} {ticker}: {records} record(s) affected"); } } else { Console.WriteLine($"{++index} {ticker}: ERROR no data returned from web service"); } } using (var context = new TradingContext()) { var etfService = new EtfService(null, new EtfRepository(context)); var counter = etfService.AggiornaQuoteMeseSuccessivo(); Console.WriteLine($"Quote mese successivo: {counter} record(s) affected"); var portfolioService = new PortfolioService(borsaItalianaService, null, null, new PortfolioRepository(context)); counter = portfolioService.AggiornaQuotePortfolio(); Console.WriteLine($"Quote portafoglio: {counter} record(s) affected"); } Console.WriteLine("Done!"); }
public static async void ImportData() { var endDate = DateTime.Now; var startDate = endDate.AddMonths(-26); string url = "http://real-chart.finance.yahoo.com/table.csv?s={0}.MI"; url += $"&a={startDate.Month - 1}&b={startDate.Day}&c={startDate.Year}&d={endDate.Month - 1}&e={endDate.Day}&f={endDate.Year}&g=m&ignore=.csv"; List <string> tickers; using (var context = new TradingContext()) { tickers = context.Etfs.Where(e => e.Leveraged == false).Select(e => e.Ticker).ToList(); } int index = 0; foreach (var ticker in tickers) { var page = string.Format(url, ticker); using (HttpClient client = new HttpClient()) using (HttpResponseMessage response = await client.GetAsync(page)) using (HttpContent content = response.Content) { string csvData = await content.ReadAsStringAsync(); if (csvData != null) { using (var context = new TradingContext()) { var quote = context.Quote.Where(q => q.Ticker == ticker).ToList(); var lines = csvData.Split('\n'); foreach (var line in lines) { var values = line.Split(','); DateTime data; if (!DateTime.TryParse(values[0], out data)) { continue; } var chiusura = decimal.Parse(values[6].Replace(".", ",")); var volumi = int.Parse(values[5]); var quota = quote.SingleOrDefault(q => q.Data.ToString("MMyyyy") == data.ToString("MMyyyy")); if (quota == null) { context.Quote.Add(new Quota { Ticker = ticker.Trim(), Data = data, Chiusura = chiusura, Volumi = volumi }); } else if (chiusura != quota.Chiusura || volumi != quota.Volumi) { context.Update(quota); quota.Chiusura = chiusura; quota.Volumi = volumi; } } var records = context.SaveChanges(); Console.WriteLine($"{++index} {ticker}: {records} record(s) affected"); } } } } Console.WriteLine("Done!"); }
public async Task RunBot(string botName) { try { var bot = _context.Bots .Include(x => x.TradeSettings) .Include(x => x.Safeties) .Include(x => x.Indicators) .Include(x => x.Actions) .Include(x => x.Trades) .First(x => x.Name == botName); if (bot.TradeSettings.TradingEnabled) { //Safeties should be triggered independantly before everything else foreach (var safety in bot.Safeties) { if (safety.IsValid()) { await safety.TriggerAction(); return; //TODO: Do any safeties require continuing? } } foreach (var indicator in bot.Indicators) { if (indicator.IsValid(_priceService.GetExchanges())) { foreach (var insurance in bot.Insurances) { if (insurance.IsValid()) { return; //Insurance stopped trade } } } else { return; //Indicator stopped trade } } //Execute bot actions if we pass all the checks foreach (var action in bot.Actions) { try { var actionExchange = _priceService.GetExchanges().First(x => x.Name == action.Exchange); var tradeResult = await action.Execute(_context, actionExchange); bot.Trades.Add(tradeResult); } catch (Exception e) { _logger.LogCritical("Exception thrown trying to execute an action.", e); } } _context.Update(bot); _context.SaveChanges(); } } catch (Exception e) { _logger.LogCritical("Something went wrong running the " + botName + " bot.", e); } }