Example #1
0
        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;
 }
Example #4
0
 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;
 }
Example #5
0
        public async Task Update(StocksContext stocksContext)
        {
            var endOfDays = await GetEndOfDays(stocksContext);

            DeleteExistingEndOfDaysForSameDates(endOfDays, stocksContext);

            stocksContext.EndOfDay.AddRange(endOfDays);
            stocksContext.SaveChanges();
        }
Example #6
0
        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();
        }
Example #7
0
        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;
 }
Example #12
0
 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;
 }
Example #15
0
        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);
        }
Example #16
0
 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;
 }
Example #18
0
 public StocksRepository(StocksContext stocksContext)
 {
     _stocksContext = stocksContext;
 }
 public DailyVoucherController(StocksContext context, IMapper mapper)
 {
     this.unitOfWork = new UnitOfWork(context);
     this._mapper    = mapper;
 }
Example #20
0
 public GenericRepository(StocksContext context)
 {
     this.context = context;
     dbSet        = context.Set <TEntity>();
 }