예제 #1
0
 private void createStockMatch(stocks_action sell, stocks_action buy, float i_Average)
 {
     if (buy.quantity >= sell.quantity)
     {
         UpdateActionLog(sell, buy, sell.quantity, i_Average);
         updatePrice(buy, sell.quantity, i_Average);
         updatePrice(sell, sell.quantity, i_Average);
         buy.quantity     -= sell.quantity;
         sell.quantity     = 0;
         sell.status       = StockStatusGetter.GetDescription(eStatus.Done);
         sell.is_updatable = 0;
         if (buy.quantity == 0)
         {
             buy.status       = StockStatusGetter.GetDescription(eStatus.Done);
             buy.is_updatable = 0;
         }
     }
     else
     {
         UpdateActionLog(sell, buy, buy.quantity, i_Average);
         updatePrice(buy, buy.quantity, i_Average);
         updatePrice(sell, buy.quantity, i_Average);
         sell.quantity   -= buy.quantity;
         buy.quantity     = 0;
         buy.status       = StockStatusGetter.GetDescription(eStatus.Done);
         buy.is_updatable = 0;
     }
     UpdateStockAsMatch(sell);
     UpdateStockAsMatch(buy);
 }
예제 #2
0
 private stocks_action UpdateStock(stocks_action stock, stocks_action stockToUpdate)
 {
     stock.Id        = stockToUpdate.Id;
     stock.date_time = stockToUpdate.date_time;
     stock.user_id   = stockToUpdate.user_id;
     stockToUpdate   = stock;
     return(stockToUpdate);
 }
예제 #3
0
 // POST: api/StocksManager
 public void Post([FromBody] stocks_action value)
 {
     value.user_id      = User.Identity.GetUserId();
     value.date_time    = DateTime.Now;
     value.Id           = Guid.NewGuid().ToString();
     value.is_updatable = 1;
     _stocksMatchManager.AddNewStcokAction(value);
 }
예제 #4
0
 public void AddNewStockAction(stocks_action i_StocksDataManager)
 {
     using (Entities _context = new Entities())
     {
         i_StocksDataManager.status = StockStatusGetter.GetDescription(eStatus.InProgress);
         _context.stocks_action.Add(i_StocksDataManager);
         _context.SaveChanges();
     }
 }
예제 #5
0
 public void Put([FromBody] stocks_action value)
 {
     try
     {
         _stocksMatchManager.UpdateStockAction(value);
     }
     catch (Exception ex)
     {
         throw new HttpException(400, string.Format("update stock in db faild error:{0}", ex.Message));
     }
 }
예제 #6
0
 private void UpdateStockAsMatch(stocks_action stockAction)
 {
     if (IsUserStocksChanged.ContainsKey(stockAction.user_id))
     {
         IsUserStocksChanged[stockAction.user_id] = true;
     }
     else
     {
         IsUserStocksChanged.Add(stockAction.user_id, true);
     }
     UpdateStockAction(stockAction);
 }
예제 #7
0
        private double getBuyNumberMatch(DarkPoolStockModel i_MarketStockStatus, stocks_action i_Sell, double i_MarketAverage, out float i_SellPrice)
        {
            if (i_Sell.market_limit == 1)
            {
                i_SellPrice = i_MarketStockStatus.Ask;
                return(i_MarketStockStatus.Bid);
            }


            i_SellPrice = (float)i_Sell.limit;
            return((i_MarketAverage * 2) - i_SellPrice);
        }
예제 #8
0
 private static void UpdateStock(stocks_action stock, stocks_action stockToUpdate)
 {
     stockToUpdate.stock_name   = stock.stock_name;
     stockToUpdate.limit        = stock.limit;
     stockToUpdate.market_limit = stock.market_limit;
     stockToUpdate.price_done   = stock.price_done;
     stockToUpdate.amount_done  = stock.amount_done;
     stockToUpdate.quantity     = stock.quantity;
     stockToUpdate.sell_action  = stock.sell_action;
     stockToUpdate.status       = stock.status;
     stockToUpdate.strategy     = stock.strategy;
     stockToUpdate.target       = stock.target;
     stockToUpdate.is_updatable = stock.is_updatable;
 }
예제 #9
0
 private void updatePrice(stocks_action i_StockAction, int i_Quantity, float i_MatchPrice)
 {
     if (i_StockAction.amount_done != null && i_StockAction.amount_done > 0)
     {
         i_StockAction.price_done = ((i_StockAction.amount_done * i_StockAction.price_done)
                                     + (i_Quantity * i_MatchPrice))
                                    / (i_StockAction.amount_done + i_Quantity);
         i_StockAction.amount_done = i_StockAction.amount_done + i_Quantity;
     }
     else
     {
         i_StockAction.amount_done = i_Quantity;
         i_StockAction.price_done  = i_MatchPrice;
     }
 }
예제 #10
0
 public void UpdateActionLog(stocks_action i_Sell, stocks_action i_Buy, int i_Quantity, float i_Average)
 {
     using (Entities _context = new Entities())
     {
         _context.action_log.Add(new action_log()
         {
             sell_user_id = i_Sell.user_id,
             buy_user_id  = i_Buy.user_id,
             quantity_    = i_Quantity,
             price_       = i_Average,
             stock_name_  = i_Sell.stock_name,
             date_time    = DateTime.Now,
             Id           = Guid.NewGuid().ToString()
         });
         _context.SaveChanges();
     }
 }
예제 #11
0
        public stocks_action UpdateActionStock(stocks_action i_Stock)
        {
            using (Entities _context = new Entities())
            {
                var stockToUpdate = _context.stocks_action.FirstOrDefault(x => x.Id == i_Stock.Id);
                if (stockToUpdate != null)
                {
                    UpdateStock(i_Stock, stockToUpdate);
                    _context.SaveChanges();
                }
                else
                {
                    throw new Exception("the stock not found in the db");
                }

                return(stockToUpdate);
            }
        }
예제 #12
0
 private float GetAvragePrice(float i_SellPrice, stocks_action i_BuyMatch, float i_MarketAverage, DarkPoolStockModel i_MarketStockStatus)
 {
     if (i_BuyMatch.market_limit == 1)
     {
         if (i_SellPrice <= i_MarketStockStatus.Ask)
         {
             return((i_SellPrice + i_MarketStockStatus.Bid) / 2);
         }
         else
         {
             return(i_MarketAverage);
         }
     }
     else
     {
         return((i_SellPrice + (float)i_BuyMatch.limit) / 2);
     }
 }
예제 #13
0
 private void deleteStockFromDictionray(stocks_action i_StockToDelete)
 {
     if (i_StockToDelete.sell_action == 1)
     {
         if (_sell.ContainsKey(i_StockToDelete.stock_name))
         {
             var stock = _sell[i_StockToDelete.stock_name].FirstOrDefault(x => x.Id == i_StockToDelete.Id);
             stock.status = StockStatusGetter.GetDescription(eStatus.Deleted);
         }
     }
     else
     {
         if (_buy.ContainsKey(i_StockToDelete.stock_name))
         {
             var stock = _buy[i_StockToDelete.stock_name].FirstOrDefault(x => x.Id == i_StockToDelete.Id);
             stock.status = StockStatusGetter.GetDescription(eStatus.Deleted);
         }
     }
 }
예제 #14
0
 public void AddNewStcokAction(stocks_action stocksDataManager)
 {
     //add to db
     try
     {
         _dbHandler.AddNewStockAction(stocksDataManager);
     }
     catch (Exception ex)
     {
         Log.ErrorFormat("Thier is error in insert new stock for user id :{0} the error {1}", stocksDataManager.user_id, ex.Message);
     }
     //add to dictionary
     if (stocksDataManager.sell_action == 1)
     {
         if (_sell.ContainsKey(stocksDataManager.stock_name))
         {
             _sell[stocksDataManager.stock_name].Add(stocksDataManager);
         }
         else
         {
             addToDictionary(_sell, stocksDataManager.stock_name, new List <stocks_action>()
             {
                 stocksDataManager
             });
         }
     }
     else
     {
         if (_buy.ContainsKey(stocksDataManager.stock_name))
         {
             _buy[stocksDataManager.stock_name].Add(stocksDataManager);
         }
         else
         {
             addToDictionary(_buy, stocksDataManager.stock_name, new List <stocks_action>()
             {
                 stocksDataManager
             });
         }
     }
     Log.InfoFormat("insert new stock for user id : {0}", stocksDataManager.user_id);
 }
예제 #15
0
        private void updateDictionary(stocks_action i_Stcok)
        {
            stocks_action stockTpUpdate = null;

            if (i_Stcok.sell_action == 1)
            {
                if (_sell.ContainsKey(i_Stcok.stock_name))
                {
                    stockTpUpdate = _sell[i_Stcok.stock_name].FirstOrDefault(x => x.Id == i_Stcok.Id);
                }
            }
            else
            {
                if (_buy.ContainsKey(i_Stcok.stock_name))
                {
                    stockTpUpdate = _buy[i_Stcok.stock_name].FirstOrDefault(x => x.Id == i_Stcok.Id);
                }
            }
            UpdateStock(i_Stcok, stockTpUpdate);
        }
예제 #16
0
 private void UpdateActionLog(stocks_action i_Sell, stocks_action i_Buy, int i_Quantity, float i_Average)
 {
     _dbHandler.UpdateActionLog(i_Sell, i_Buy, i_Quantity, i_Average);
 }
예제 #17
0
        public void UpdateStockAction(stocks_action stock)
        {
            stocks_action stockToUpdate = _dbHandler.UpdateActionStock(stock);

            updateDictionary(stockToUpdate);
        }