Exemple #1
0
 private void UpdateTradeItem(TradeTrasaction tradeItem, UInt64 price, double quantity)
 {
     tradeItem.OrderPrice     = price;
     tradeItem.OrderQuantity -= quantity;
     if (tradeItem.OrderQuantity <= 0)
     {
         tradeItem = null;
     }
 }
Exemple #2
0
        public void ExecuteCommand(IOrderTransaction command, TradeTrasaction tradeItem)
        {
            if (command != null)
            {
                command.ExecuteTrasaction(BuyTradeTransactions, SellTradeTransactions, tradeItem);

                //We meet this condition only when OPERATION_TYPE_MODIFY_BUY/OPERATION_TYPE_MODIFY_SELL
                if (tradeItem != null && tradeItem.OperationType != command.Id)
                {
                    OrderCommandFactory.Get(tradeItem.OperationType).ExecuteTrasaction(BuyTradeTransactions, SellTradeTransactions, tradeItem);
                }
            }
        }
Exemple #3
0
        public void ExecuteTrasaction(Dictionary <string, TradeTrasaction> BuyTradeItems, Dictionary <string, TradeTrasaction> SellTradeItems, TradeTrasaction tradeItem)
        {
            try
            {
                foreach (var sellItem in SellTradeItems.Values.Reverse().ToList())
                {
                    if (tradeItem.OrderPrice >= sellItem.OrderPrice)
                    {
                        var buyOrderQty  = tradeItem.OrderQuantity;
                        var sellOrderQty = sellItem.OrderQuantity;

                        if (buyOrderQty == sellOrderQty)
                        {
                            PrintTrade(sellItem, tradeItem, buyOrderQty);
                            SellTradeItems.Remove(sellItem.OrderId);
                            return;
                        }
                        else if (buyOrderQty < sellOrderQty)
                        {
                            PrintTrade(sellItem, tradeItem, buyOrderQty);
                            SellTradeItems[sellItem.OrderId].OrderQuantity = sellOrderQty - buyOrderQty;
                            return;
                        }
                        else
                        {
                            PrintTrade(sellItem, tradeItem, sellOrderQty);
                            tradeItem.OrderQuantity = buyOrderQty - sellOrderQty;
                            SellTradeItems.Remove(sellItem.OrderId);
                            continue;
                        }
                    }
                }
                if (tradeItem.OrderType == OrderType.GFD)
                {
                    BuyTradeItems.Add(tradeItem.OrderId, tradeItem);
                }
            }
            catch
            {
                Console.WriteLine("Buy Error");
            }
        }
Exemple #4
0
 private void PrintTrade(TradeTrasaction Item1, TradeTrasaction Item2, double Quanity)
 {
     Console.WriteLine("TRADE {0} {1} {2} {3} {4} {5}", Item1.OrderId, Item1.OrderPrice, Quanity, Item2.OrderId, Item2.OrderPrice, Quanity);
 }
Exemple #5
0
        public OperationType CreateTradeItem(string inputCommandLine)
        {
            string[] stdInputArgumentsArray = inputCommandLine.Split(' ');

            if (stdInputArgumentsArray.Length == 0 || stdInputArgumentsArray.Length > 5)
            {
                return(OperationType.OPERATION_TYPE_NONE);
            }

            OperationType operType = ParseOperationTypeEnum <OperationType>(stdInputArgumentsArray[0]);

            if (operType == OperationType.OPERATION_TYPE_BUY || operType == OperationType.OPERATION_TYPE_SELL)
            {
                if ((stdInputArgumentsArray.Length < 5) || !IsInt(stdInputArgumentsArray[2]) || !IsInt(stdInputArgumentsArray[3]))
                {
                    return(OperationType.OPERATION_TYPE_NONE);
                }

                _tradeItem = new TradeTrasaction(operType, ParseEnum <OrderType>(stdInputArgumentsArray[1]),
                                                 Convert.ToUInt64(stdInputArgumentsArray[2]),
                                                 Convert.ToUInt64(stdInputArgumentsArray[3]),
                                                 stdInputArgumentsArray[4]);
                return(_tradeItem.OperationType);
            }
            else if (operType == OperationType.OPERATION_TYPE_MODIFY)
            {
                if ((stdInputArgumentsArray.Length < 5) || !IsInt(stdInputArgumentsArray[3]) || !IsInt(stdInputArgumentsArray[4]))
                {
                    return(OperationType.OPERATION_TYPE_NONE);
                }

                OperationType ModoperType = ParseOperationTypeEnum <OperationType>(stdInputArgumentsArray[2]);

                if ((ModoperType == OperationType.OPERATION_TYPE_BUY) || (ModoperType == OperationType.OPERATION_TYPE_SELL))
                {
                    ModoperType += 3; //set to modify buy/sell
                    _tradeItem   = new TradeTrasaction(ModoperType, OrderType.GFD,
                                                       Convert.ToUInt64(stdInputArgumentsArray[3]),
                                                       Convert.ToUInt64(stdInputArgumentsArray[4]),
                                                       stdInputArgumentsArray[1]);
                    return(operType); //return the orginal operation
                }
                return(OperationType.OPERATION_TYPE_NONE);
            }
            else if (operType == OperationType.OPERATION_TYPE_CANCEL)
            {
                if (stdInputArgumentsArray.Length != 2)
                {
                    return(OperationType.OPERATION_TYPE_NONE);
                }
                _tradeItem = new TradeTrasaction(OperationType.OPERATION_TYPE_CANCEL, OrderType.None, 0, 0, stdInputArgumentsArray[1]);
                return(_tradeItem.OperationType);
            }
            else if (operType == OperationType.OPERATION_TYPE_PRINT)
            {
                if (stdInputArgumentsArray.Length != 1)
                {
                    return(OperationType.OPERATION_TYPE_NONE);
                }
                _tradeItem = new TradeTrasaction(OperationType.OPERATION_TYPE_PRINT);
                return(_tradeItem.OperationType);
            }
            return(OperationType.OPERATION_TYPE_NONE);;
        }
Exemple #6
0
 public void ExecuteTrasaction(Dictionary <string, TradeTrasaction> BuyTradeItems, Dictionary <string, TradeTrasaction> SellTradeItems, TradeTrasaction tradeItem)
 {
     Console.WriteLine("SELL:");
     foreach (var pritableElement in GetPritableElements(SellTradeItems.Values.OrderByDescending(x => x.OrderPrice).ToList()))
     {
         if (pritableElement.Value != 0)
         {
             Console.WriteLine(pritableElement.Key + " " + pritableElement.Value);
         }
     }
     Console.WriteLine("BUY:");
     foreach (var pritableElement in GetPritableElements(BuyTradeItems.Values.OrderByDescending(x => x.OrderPrice).ToList()))
     {
         if (pritableElement.Value != 0)
         {
             Console.WriteLine(pritableElement.Key + " " + pritableElement.Value);
         }
     }
 }
Exemple #7
0
 public void ExecuteTrasaction(Dictionary <string, TradeTrasaction> BuyTradeItems, Dictionary <string, TradeTrasaction> SellTradeItems, TradeTrasaction tradeItem)
 {
     if (BuyTradeItems.ContainsKey(tradeItem.OrderId))
     {
         BuyTradeItems.Remove(tradeItem.OrderId);
     }
     else if (SellTradeItems.ContainsKey(tradeItem.OrderId))
     {
         SellTradeItems.Remove(tradeItem.OrderId);
     }
 }
Exemple #8
0
        public void ExecuteTrasaction(Dictionary <string, TradeTrasaction> BuyTradeItems, Dictionary <string, TradeTrasaction> SellTradeItems, TradeTrasaction order)
        {
            try
            {
                foreach (var buyItem in BuyTradeItems.Values.Reverse().ToList())
                {
                    if (order.OrderPrice <= buyItem.OrderPrice)
                    {
                        var OrderQty    = order.OrderQuantity;
                        var buyOrderQty = buyItem.OrderQuantity;

                        if (OrderQty == buyOrderQty)
                        {
                            PrintTrade(buyItem, order, OrderQty);
                            BuyTradeItems.Remove(buyItem.OrderId);
                            return;
                        }
                        else if (OrderQty < buyOrderQty)
                        {
                            PrintTrade(buyItem, order, OrderQty);
                            BuyTradeItems[buyItem.OrderId].OrderQuantity = buyOrderQty - OrderQty;
                            return;
                        }
                        else
                        {
                            PrintTrade(buyItem, order, buyOrderQty);
                            order.OrderQuantity = OrderQty - buyOrderQty;
                            BuyTradeItems.Remove(buyItem.OrderId);
                            continue;
                        }
                    }
                }
                if (order.OrderType == OrderType.GFD)
                {
                    SellTradeItems.Add(order.OrderId, order);
                }
            }
            catch
            {
                Console.WriteLine("Sell Error");
            }
        }