private void UpdateTradeItem(TradeTrasaction tradeItem, UInt64 price, double quantity) { tradeItem.OrderPrice = price; tradeItem.OrderQuantity -= quantity; if (tradeItem.OrderQuantity <= 0) { tradeItem = null; } }
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); } } }
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"); } }
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); }
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);; }
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); } } }
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); } }
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"); } }