コード例 #1
0
        public async Task <IActionResult> GetAnalysis([FromRoute] string symbol)
        {
            var buyAnalysis  = new TradeAnalysis();
            var sellAnalysis = new TradeAnalysis();

            var share = await _shareRepository.Query().Where(p => p.Symbol.Equals(symbol)).FirstOrDefaultAsync();

            var buyTrades  = share?.Trades?.Where(p => p.Action.Equals(OperationEnum.Buy)).ToList();
            var sellTrades = share?.Trades?.Where(p => p.Action.Equals(OperationEnum.Sell)).ToList();

            if (buyTrades != null)
            {
                buyAnalysis.Sum     = buyTrades.Sum(p => p.TotalPrice);
                buyAnalysis.Average = buyTrades.Average(p => p.TotalPrice);
                buyAnalysis.Minimum = buyTrades.Min(p => p.TotalPrice);
                buyAnalysis.Maximum = buyTrades.Max(p => p.TotalPrice);
            }

            if (sellTrades != null)
            {
                sellAnalysis.Sum     = sellTrades.Sum(p => p.TotalPrice);
                sellAnalysis.Average = sellTrades.Average(p => p.TotalPrice);
                sellAnalysis.Minimum = sellTrades.Min(p => p.TotalPrice);
                sellAnalysis.Maximum = sellTrades.Max(p => p.TotalPrice);
            }

            return(Ok(new { buyAnalysis, sellAnalysis }));
        }
コード例 #2
0
        public async Task <IActionResult> GetAnalysis([FromRoute] string symbol)
        {
            var list      = new List <TradeAnalysis>();
            var tradeBuys = _tradeRepository.GetTradesBySymbol(symbol);
            var sumForBuy = tradeBuys.GroupBy(x => x.Action).Select(t => new { action = t.Key, sum = t.Sum(i => i.Price), avarage = t.Average(i => i.Price), max = t.Max(i => i.Price), min = t.Min(i => i.Price) });

            if (sumForBuy.ToList().Count > 0)
            {
                foreach (var item in sumForBuy)
                {
                    TradeAnalysis tradeAnalysis = new TradeAnalysis();
                    tradeAnalysis.Maximum = item.max;
                    tradeAnalysis.Minimum = item.min;
                    tradeAnalysis.Sum     = item.sum;
                    tradeAnalysis.Average = item.avarage;
                    tradeAnalysis.Action  = item.action;
                    list.Add(tradeAnalysis);
                }
                return(Ok(list));
            }
            else
            {
                return(NotFound());
            }
        }
コード例 #3
0
        public async Task <IActionResult> GetAnalysis([FromRoute] int portFolioid)
        {
            var shares = _tradeRepository.Query().Where(x => x.Symbol.Equals(portFolioid));
            var q_sell = shares.Where(i => i.Action.Equals("SELL"));
            var q_buy  = shares.Where(i => i.Action.Equals("BUY"));

            TradeAnalysis sell = new TradeAnalysis();

            if (q_sell.Count() > 0)
            {
                sell.Sum     = q_sell.Sum(i => i.NoOfShares);
                sell.Average = q_sell.Average(i => i.NoOfShares);
                sell.Maximum = q_sell.Max(i => i.NoOfShares);
                sell.Minimum = q_sell.Min(i => i.NoOfShares);
            }
            sell.Action = "SELL";

            TradeAnalysis buy = new TradeAnalysis();

            if (q_buy.Count() > 0)
            {
                buy.Sum     = q_buy.Sum(i => i.NoOfShares);
                buy.Average = q_buy.Average(i => i.NoOfShares);
                buy.Maximum = q_buy.Max(i => i.NoOfShares);
                buy.Minimum = q_buy.Min(i => i.NoOfShares);
            }
            buy.Action = "BUY";

            var result = new List <TradeAnalysis>();

            result.Add(sell);
            result.Add(buy);

            return(Ok(result));
        }
コード例 #4
0
        public async Task <IActionResult> GetAnalysis([FromRoute] string symbol)
        {
            var result = new List <TradeAnalysis>();

            var stats = _tradeRepository.Query()
                        .Where(x => x.Symbol == symbol)
                        .GroupBy(x => x.Action)
                        .Select(x => new
            {
                sumTrades   = x.Sum(z => z.NoOfShares),
                avgTrades   = x.Average(z => z.NoOfShares),
                maxValue    = x.Max(z => z.NoOfShares),
                minValue    = x.Min(z => z.NoOfShares),
                actionValue = x.Key
            }).ToList();

            foreach (var item in stats)
            {
                TradeAnalysis ta = new TradeAnalysis();
                ta.Sum     = item.sumTrades;
                ta.Average = item.avgTrades;
                ta.Maximum = item.maxValue;
                ta.Minimum = item.minValue;
                ta.Action  = item.actionValue;
                result.Add(ta);
            }

            return(Ok(result));
        }
コード例 #5
0
        public void ShouldTestTradeAnalysis()
        {
            TradeAnalysis tradeAnalysis = new TradeAnalysis();

            tradeAnalysis.Action  = "BUY";
            tradeAnalysis.Sum     = 200;
            tradeAnalysis.Maximum = 100;
            tradeAnalysis.Minimum = 100;
            tradeAnalysis.Average = 100;


            CheckPropertyValidation cpv = new CheckPropertyValidation();
            var errorCount = cpv.myValidation(tradeAnalysis).Count;

            Assert.AreEqual(0, errorCount);
        }
コード例 #6
0
        public async Task <IActionResult> GetAnalysis([FromRoute] string symbol)
        {
            var           result    = new List <TradeAnalysis>();
            TradeAnalysis ta        = new TradeAnalysis();
            var           tradeBuy  = _tradeRepository.Query().Where(x => x.Symbol.Equals(symbol) && x.Action.Equals("BUY"));
            var           tradeSell = _tradeRepository.Query().Where(x => x.Symbol.Equals(symbol) && x.Action.Equals("SELL"));

            List <int> trdNoSBuy  = new List <int>();
            List <int> trdNoSSell = new List <int>();

            foreach (var t in tradeBuy)
            {
                trdNoSBuy.Add(t.NoOfShares);
            }
            foreach (var t in tradeSell)
            {
                trdNoSSell.Add(t.NoOfShares);
            }
            if (!trdNoSBuy.Count.Equals(0))
            {
                ta.Maximum = trdNoSBuy.Max();
                ta.Minimum = trdNoSBuy.Min();
                ta.Sum     = trdNoSBuy.Sum();
                ta.Average = trdNoSBuy.Average();
                ta.Action  = "BUY";
                result.Add(ta);
            }
            ta = new TradeAnalysis();
            if (!trdNoSSell.Count.Equals(0))
            {
                ta.Maximum = trdNoSSell.Max();
                ta.Minimum = trdNoSSell.Min();
                ta.Sum     = trdNoSSell.Sum();
                ta.Average = trdNoSSell.Average();
                ta.Action  = "SELL";
                result.Add(ta);
            }
            return(Ok(result));
        }
コード例 #7
0
ファイル: TradeController.cs プロジェクト: elweezy/XOProject
        public async Task <IActionResult> GetAnalysis([FromRoute] string symbol)
        {
            var list = new List <TradeAnalysis>();

            //group actions
            var groupActions = _tradeRepository.Query().Where(x => x.Symbol.Equals(symbol)).GroupBy(x => x.Action);

            foreach (var ga in groupActions)
            {
                var ta = new TradeAnalysis
                {
                    Maximum = ga.Max(x => x.NoOfShares),
                    Minimum = ga.Min(x => x.NoOfShares),
                    Average = (decimal)ga.Average(x => x.NoOfShares),
                    Sum     = ga.Sum(x => x.NoOfShares),
                    Action  = ga.Select(x => x.Action).FirstOrDefault()
                };

                list.Add(ta);
            }

            return(Ok(list));
        }