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));
        }
Exemple #3
0
        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!");
        }
Exemple #4
0
        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!");
        }
Exemple #5
0
        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);
            }
        }