public async Task Update(StocksContext stocksContext) { var content = await _companyInformationStore.GetFromStore(); var lines = content.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None); if (lines.Length > 3) { for (var i = 3; i < lines.Length; i++) { // https://stackoverflow.com/questions/18144431/regex-to-split-a-csv var matches = Regex.Matches(lines[i], @"(?:^|,)(?=[^""]|("")?)""?((?(1)[^""]*|[^,""]*))""?(?=,|$)"); if (matches.Count != 3) { continue; } var stock = stocksContext.Stock.FirstOrDefault(s => s.Code == matches[1].Groups[2].Value); if (stock == null) { stock = new Model.Stock(); stocksContext.Add(stock); } stock.CompanyName = matches[0].Groups[2].Value; stock.Code = matches[1].Groups[2].Value; stock.IndustryGroup = matches[2].Groups[2].Value; } } stocksContext.SaveChanges(); }
public ReportSettingController(StocksContext context, IMapper mapper) { this._mapper = mapper; this.unitOfWork = new UnitOfWork(context); loggerHistory = new LoggerHistory(context, mapper); }
public ReportViewerController(IOptions <ApplicationSettings> appSettings , StocksContext context) { _appSettings = appSettings.Value; this.unitOfWork = new UnitOfWork(context); Context = context; }
public sellingorderController(StocksContext context, IMapper mapper, IOptions <ApplicationSettings> appSettings, IStocksHelper stocksHelper) { _appSettings = appSettings.Value; this._mapper = mapper; this.unitOfWork = new UnitOfWork(context); loggerHistory = new LoggerHistory(context, mapper); _stocksHelper = stocksHelper; }
public async Task Update(StocksContext stocksContext) { var endOfDays = await GetEndOfDays(stocksContext); DeleteExistingEndOfDaysForSameDates(endOfDays, stocksContext); stocksContext.EndOfDay.AddRange(endOfDays); stocksContext.SaveChanges(); }
private void DeleteExistingEndOfDaysForSameDates(IList <EndOfDay> endOfDays, StocksContext stocksContext) { var endOfDayDates = endOfDays .Select(e => e.Date) .Distinct() .ToList(); var endOfDaysToDelete = stocksContext.EndOfDay .Where(e => endOfDayDates.Contains(e.Date)) .ToList(); stocksContext.EndOfDay.RemoveRange(endOfDaysToDelete); stocksContext.SaveChanges(); }
private async Task <IList <EndOfDay> > GetEndOfDays(StocksContext stocksContext) { var endOfDays = new List <EndOfDay>(); var allStocks = stocksContext .Stock .ToList(); var allStocksWorking = allStocks .ToHashSet(Stock.EqualityComparer); var endOfDayLines = await _endOfDayStore.GetFromStore(); foreach (var endOfDayLine in endOfDayLines) { var endOfDaySplit = endOfDayLine.Split(","); var stockCode = endOfDaySplit[0]; var stock = GetOrAddStock(allStocksWorking, stockCode); endOfDays.Add( new EndOfDay { Stock = stock, Date = DateTime.ParseExact(endOfDaySplit[1], "yyyyMMdd", CultureInfo.InvariantCulture), Open = Decimal.Parse(endOfDaySplit[2]), High = Decimal.Parse(endOfDaySplit[3]), Low = Decimal.Parse(endOfDaySplit[4]), Close = Decimal.Parse(endOfDaySplit[5]), Volume = Int64.Parse(endOfDaySplit[6]) }); } var newStocks = allStocksWorking .Except(allStocks, Stock.EqualityComparer) .ToList(); stocksContext.Stock.AddRange(newStocks); return(endOfDays); }
public EmployeeController(StocksContext context, IMapper mapper) { this.unitOfWork = new UnitOfWork(context); this._mapper = mapper; loggerHistory = new LoggerHistory(context, mapper); }
public UnitOfWork(StocksContext dbContext) { Context = dbContext; }
public SettingController(StocksContext context, IMapper mapper) { this.unitOfWork = new UnitOfWork(context); this._mapper = mapper; }
public StocksHelper(StocksContext context, IMapper mapper) { this.unitOfWork = new UnitOfWork(context); this._mapper = mapper; }
public LoggerHistory(StocksContext context, IMapper mapper) { this.unitOfWork = new UnitOfWork(context); this._mapper = mapper; }
public GenericRepository(StocksContext Context) { this.Context = Context; this.dbSet = Context.Set <T>(); }
public SearchController(StocksContext context, IMapper mapper, IStocksHelper stocksHelper) { this.unitOfWork = new UnitOfWork(context); this._mapper = mapper; _stocksHelper = stocksHelper; }
public async Task <Trades> Get(string symbol, int dayOffset, int skip, int cut) { using var stocksContext = new StocksContext(); var today = DateTime.UtcNow; var day = new DateTimeOffset(new DateTime(today.Year, today.Month, today.Day - dayOffset, 23, 0, 0)).ToUnixTimeMilliseconds(); var recent = await stocksContext.Trades.Where(t => t.Symbol == symbol && t.TimeUtcMilliseconds < day).OrderByDescending(t => t.TimeUtcMilliseconds).FirstOrDefaultAsync(); var start = cut > 0 ? recent.TimeUtcMilliseconds - TimeSpan.FromHours(cut).TotalMilliseconds : recent.TimeUtcMilliseconds; var stop = recent.TimeUtcMilliseconds - TimeSpan.FromHours(8 - skip).TotalMilliseconds; var trades = stocksContext.Trades.Where(t => t.Symbol == symbol && t.TimeUtcMilliseconds <start && t.TimeUtcMilliseconds> stop); var tradesAscending = await trades.OrderBy(t => t.TimeUtcMilliseconds).ToListAsync(); var tradesDescending = await trades.OrderByDescending(t => t.TimeUtcMilliseconds).ToListAsync(); var orders = new List <Order>(); var tradesObj = new Trades(); //var curMin = double.MaxValue; foreach (var trade in tradesAscending) { if (trade.Alma == 0 || trade.SMA == 0 || trade.SMATwo == 0) { continue; } //curMin = trade.Alma < curMin ? trade.Alma : curMin; var startcut = tradesDescending.Last().TimeUtcMilliseconds + TimeSpan.FromMinutes(40).TotalMilliseconds; var tradesSoFar = tradesDescending.Where(t => t.TimeUtcMilliseconds <trade.TimeUtcMilliseconds && t.TimeUtcMilliseconds> startcut); var stdev = (trade.SMA - trade.SMALower) / 2; if (tradesSoFar.Any() && tradesSoFar.Count() > 6) { var previousAlmaMA = tradesSoFar.Skip(6).First(); var posPerc = (double)tradesSoFar.Where(t => t.Alma > t.SMA).Count() / tradesSoFar.Count(); if (trade.Alma < trade.SMA && trade.SMASlope < 0 && previousAlmaMA.AlmaSlopeMA < 0 && trade.AlmaSlopeMA > (previousAlmaMA.AlmaSlopeMA * .4) && stdev >= (trade.SMA * .0018) && posPerc >= .42 && posPerc <= .72 && (!orders.Any() || (orders.Last().Sell.HasValue&& orders.Last().Sell > orders.Last().Buy)) //&& (orders.Any() || trade.Alma < curMin * 1.0016) && trade.TimeUtcMilliseconds < (tradesDescending.First().TimeUtcMilliseconds - TimeSpan.FromMinutes(75).TotalMilliseconds) //&& trade.TimeUtcMilliseconds < (recent.TimeUtcMilliseconds-TimeSpan.FromMinutes(30).TotalMilliseconds) ) { var lastPositive = tradesSoFar.FirstOrDefault(t => t.Alma >= t.SMA); if (lastPositive != null && lastPositive.SMA > lastPositive.SMATwo && lastPositive.SMALower > trade.Alma && trade.SMAUpper > lastPositive.SMA) { var rounded = Math.Round(trade.Alma, 2); var buy = rounded; if (buy > lastPositive.SMATwoLower) { var qty = (int)Math.Floor(_maxOrderAmount / buy); for (var i = 0; i < qty; i++) { orders.Add(new Order { Buy = buy, Goal = buy + (trade.SMA - buy) + stdev, Stop = buy * .993, //InitStop = Math.Min(buy - (stdev * 3), buy * .997), OrderTime = trade.TimeUtcMilliseconds }); } } } } foreach (var order in orders) { if (order.BuyTime.HasValue && !order.Sell.HasValue) { if ((trade.TimeUtcMilliseconds - order.BuyTime) < TimeSpan.FromMinutes(60).TotalMilliseconds) { var minSell = order.Buy; if ((trade.TimeUtcMilliseconds - order.BuyTime) < TimeSpan.FromMinutes(40).TotalMilliseconds) { var minutesElapsed = TimeSpan.FromMilliseconds((double)trade.TimeUtcMilliseconds - order.BuyTime.Value).TotalMinutes; minSell = ((order.Buy - order.Goal) * minutesElapsed / 80) + order.Goal; } if (trade.Alma >= minSell && previousAlmaMA.AlmaSlopeMA > 0 && trade.AlmaSlopeMA < (previousAlmaMA.AlmaSlopeMA * .6)) { var sell = Math.Round(trade.Alma, 2); order.Sell = sell; } } else if ((trade.TimeUtcMilliseconds - order.BuyTime) > TimeSpan.FromMinutes(60).TotalMilliseconds) { if (order.Stop.HasValue && order.Stop >= trade.Price) { order.Sell = order.Stop; } else { order.Sell = order.Buy; } } } } } foreach (var order in orders) { /********************/ /********************/ if (order.BuyTime.HasValue && !order.SellTime.HasValue && order.Sell.HasValue && order.Sell <= trade.Price) { order.SellTime = trade.TimeUtcMilliseconds; } //else if (order.Stop.HasValue && order.BuyTime.HasValue && !order.SellTime.HasValue && decimal.ToDouble(trade.Price) > order.Buy) //{ // order.Stop = order.InitStop + (decimal.ToDouble(trade.Price) - order.Buy); //} if (!order.BuyTime.HasValue && order.Buy >= trade.Price) { order.BuyTime = trade.TimeUtcMilliseconds; } } orders = orders.Where(o => o.BuyTime.HasValue || trade.TimeUtcMilliseconds < (o.OrderTime + TimeSpan.FromHours(1).TotalMilliseconds)).ToList(); tradesObj.SMA.Add(new Point(trade.TimeUtcMilliseconds, trade.SMA)); tradesObj.SMATwo.Add(new Point(trade.TimeUtcMilliseconds, trade.SMATwo)); tradesObj.Price.Add(new Point(trade.TimeUtcMilliseconds, trade.Price)); tradesObj.SMAUpper.Add(new Point(trade.TimeUtcMilliseconds, trade.SMAUpper)); tradesObj.SMALower.Add(new Point(trade.TimeUtcMilliseconds, trade.SMALower)); tradesObj.SMATwoUpper.Add(new Point(trade.TimeUtcMilliseconds, trade.SMATwoUpper)); tradesObj.SMATwoLower.Add(new Point(trade.TimeUtcMilliseconds, trade.SMATwoLower)); tradesObj.Alma.Add(new Point(trade.TimeUtcMilliseconds, trade.Alma)); } //foreach(var order in orders) //{ // if(order.BuyTime.HasValue && !order.SellTime.HasValue) // { // order.SellTime = tradesAscending.Last().TimeUtcMilliseconds; // order.Sell = tradesAscending.Last().Price; // } //} tradesObj.Orders = orders.Select(o => new Point(o.OrderTime, o.Buy)).ToList(); tradesObj.Buys = orders.Where(o => o.BuyTime.HasValue).Select(o => new Point(o.BuyTime.Value, o.Buy)).ToList(); tradesObj.Sells = orders.Where(o => o.SellTime.HasValue).Select(o => new Point(o.SellTime.Value, o.Sell.Value)).ToList(); tradesObj.Total = orders.Aggregate((double)0, (acc, o) => o.SellTime.HasValue ? acc + (o.Sell.Value - o.Buy) : acc); tradesObj.TotalSpent = orders.Aggregate((double)0, (acc, o) => o.BuyTime.HasValue ? acc + o.Buy : acc); tradesObj.Hits = orders.Where(o => o.SellTime.HasValue && o.Sell > o.Buy).Count(); tradesObj.Misses = orders.Where(o => o.BuyTime.HasValue && !o.SellTime.HasValue).Count(); return(tradesObj); }
public DashboardController(StocksContext context, IMapper mapper) { this.unitOfWork = new UnitOfWork(context); this._mapper = mapper; }
public CurrenciesController(StocksContext context, IMapper mapper) { this.unitOfWork = new UnitOfWork(context); this._mapper = mapper; }
public StocksRepository(StocksContext stocksContext) { _stocksContext = stocksContext; }
public DailyVoucherController(StocksContext context, IMapper mapper) { this.unitOfWork = new UnitOfWork(context); this._mapper = mapper; }
public GenericRepository(StocksContext context) { this.context = context; dbSet = context.Set <TEntity>(); }