Ejemplo n.º 1
0
        internal static void CancelOrder(Guid clientKey, Guid requesterOrderID, long orderID)
        {
            try
            {
                // Order Side

                SingleOrder order           = m_orderID_ordersDetails[orderID];
                LookupItem  orderSideLookup = Lookups.GetOrderSidesLookupByCodeValue(order.Data[SingleOrderProperties.OrderSide].ToString());
                lock (order)
                {
                    string[] arr      = order.Data[SingleOrderProperties.ClOrderID].ToString().Split(new char[] { '-' });
                    string   ordID    = arr[0];
                    int      changeID = int.Parse(arr[1]);
                    changeID++;

                    //string newOrigClOrdID = order.ClOrderID;
                    string newClOrdID = string.Format("{0}-{1}", ordID, changeID);


                    using (System.Transactions.TransactionScope ts = new System.Transactions.TransactionScope())
                    {
                        DatabaseMethods db = new DatabaseMethods();
                        //db.UpdateOrderDetails(order.OrderID, newClOrdID, order.OrigClOrdID, order.CurrentQuantity, order.RemainingQuantity, order.ExecutedQuantity, order.CurrentPrice, order.CurrentPrice, order.CurrentPrice, order.OrderType, order.OrderStatus, order.ExecType, DateTime.Now, "Cancel Order Request", false, "", order.TimeInForce, null);


                        order.Data[SingleOrderProperties.ClOrderID]        = newClOrdID;
                        order.Data[SingleOrderProperties.IsPending]        = true;
                        order.Data[SingleOrderProperties.Note]             = "Pending Cancel Request";
                        order.Data[SingleOrderProperties.ModifiedDateTime] = DateTime.Now;


                        Dictionary <string, object> orders_Columns = new Dictionary <string, object>();

                        orders_Columns.Add(PropColMapper.GetColumnByProperty(SingleOrderProperties.TableName, SingleOrderProperties.ClOrderID).ColumnName, order.Data[SingleOrderProperties.ClOrderID]);

                        orders_Columns.Add(PropColMapper.GetColumnByProperty(SingleOrderProperties.TableName, SingleOrderProperties.IsPending).ColumnName, true);

                        orders_Columns.Add(PropColMapper.GetColumnByProperty(SingleOrderProperties.TableName, SingleOrderProperties.Note).ColumnName, order.Data[SingleOrderProperties.Note]);

                        orders_Columns.Add(PropColMapper.GetColumnByProperty(SingleOrderProperties.TableName, SingleOrderProperties.ModifiedDateTime).ColumnName, order.Data[SingleOrderProperties.ModifiedDateTime]);

                        Dictionary <string, object> orders_Filters = new Dictionary <string, object>();
                        orders_Filters.Add(PropColMapper.GetColumnByProperty(SingleOrderProperties.TableName, SingleOrderProperties.OrderID).ColumnName, order.Data[SingleOrderProperties.OrderID]);

                        Dictionary <string, object> ordersDetails_Columns = new Dictionary <string, object>();
                        ordersDetails_Columns.Add(PropColMapper.GetColumnByProperty(SingleOrdDetailsProps.TableName, SingleOrdDetailsProps.OrderID).ColumnName, order.Data[SingleOrderProperties.OrderID]);
                        ordersDetails_Columns.Add(PropColMapper.GetColumnByProperty(SingleOrdDetailsProps.TableName, SingleOrdDetailsProps.ClOrderID).ColumnName, order.Data[SingleOrderProperties.ClOrderID]);
                        ordersDetails_Columns.Add(PropColMapper.GetColumnByProperty(SingleOrdDetailsProps.TableName, SingleOrdDetailsProps.OrigClOrdID).ColumnName, order.Data[SingleOrderProperties.OrigClOrdID]);

                        ordersDetails_Columns.Add(PropColMapper.GetColumnByProperty(SingleOrdDetailsProps.TableName, SingleOrdDetailsProps.AvgPrice).ColumnName, order.Data[SingleOrderProperties.AvgPrice]);
                        ordersDetails_Columns.Add(PropColMapper.GetColumnByProperty(SingleOrdDetailsProps.TableName, SingleOrdDetailsProps.CurrentPrice).ColumnName, order.Data[SingleOrderProperties.CurrentPrice]);
                        ordersDetails_Columns.Add(PropColMapper.GetColumnByProperty(SingleOrdDetailsProps.TableName, SingleOrdDetailsProps.ExecPrice).ColumnName, order.Data[SingleOrderProperties.LastExecPrice]);

                        ordersDetails_Columns.Add(PropColMapper.GetColumnByProperty(SingleOrdDetailsProps.TableName, SingleOrdDetailsProps.CurrentQuantity).ColumnName, order.Data[SingleOrderProperties.CurrentQuantity]);
                        ordersDetails_Columns.Add(PropColMapper.GetColumnByProperty(SingleOrdDetailsProps.TableName, SingleOrdDetailsProps.ExecutedQuantity).ColumnName, order.Data[SingleOrderProperties.ExecutedQuantity]);
                        ordersDetails_Columns.Add(PropColMapper.GetColumnByProperty(SingleOrdDetailsProps.TableName, SingleOrdDetailsProps.LastExecQuantity).ColumnName, order.Data[SingleOrderProperties.LastExecQuantity]);
                        ordersDetails_Columns.Add(PropColMapper.GetColumnByProperty(SingleOrdDetailsProps.TableName, SingleOrdDetailsProps.RemainingQuantity).ColumnName, order.Data[SingleOrderProperties.RemainingQuantity]);

                        ordersDetails_Columns.Add(PropColMapper.GetColumnByProperty(SingleOrdDetailsProps.TableName, SingleOrdDetailsProps.DateTime).ColumnName, DateTime.Now);


                        ordersDetails_Columns.Add(PropColMapper.GetColumnByProperty(SingleOrdDetailsProps.TableName, SingleOrdDetailsProps.ExecType).ColumnName, order.Data[SingleOrderProperties.ExecType]);
                        ordersDetails_Columns.Add(PropColMapper.GetColumnByProperty(SingleOrdDetailsProps.TableName, SingleOrdDetailsProps.OrderStatus).ColumnName, order.Data[SingleOrderProperties.OrderStatus]);
                        ordersDetails_Columns.Add(PropColMapper.GetColumnByProperty(SingleOrdDetailsProps.TableName, SingleOrdDetailsProps.Note).ColumnName, order.Data[SingleOrderProperties.Note]);

                        ordersDetails_Columns.Add(PropColMapper.GetColumnByProperty(SingleOrdDetailsProps.TableName, SingleOrdDetailsProps.IsCancelRequest).ColumnName, true);
                        ordersDetails_Columns.Add(PropColMapper.GetColumnByProperty(SingleOrdDetailsProps.TableName, SingleOrdDetailsProps.IsUserRequest).ColumnName, true);

                        ordersDetails_Columns.Add(PropColMapper.GetColumnByProperty(SingleOrdDetailsProps.TableName, SingleOrdDetailsProps.OrderType).ColumnName, order.Data[SingleOrderProperties.OrderType]);
                        ordersDetails_Columns.Add(PropColMapper.GetColumnByProperty(SingleOrdDetailsProps.TableName, SingleOrdDetailsProps.TimeInForce).ColumnName, order.Data[SingleOrderProperties.TimeInForce]);


                        db.UpdateOrderDetails(orders_Columns, orders_Filters, ordersDetails_Columns);



                        FixGatewayManager.CancelOrder(order.Data[SingleOrderProperties.ClientID].ToString(), order.Data[SingleOrderProperties.SecurityCode].ToString(), string.Format("{0}-{1}", ordID, changeID), order.Data[SingleOrderProperties.OrigClOrdID].ToString(), orderSideLookup.FixValue.ToCharArray()[0]);

                        ts.Complete();
                    }
                }
            }
            catch (Exception ex)
            {
                Counters.IncrementCounter(CountersConstants.ExceptionMessages);
                SystemLogger.WriteOnConsoleAsync(true, string.Format("Error modify order, ClientKey {0}, Error: {1}", clientKey, ex.Message), ConsoleColor.Red, ConsoleColor.White, false);
                try
                {
                    // Sessions.Push(new IResponseMessage[] { new Fix_OrderReplaceRefusedByService() { ClientKey = clientKey, RefuseReason = "System Error", RequesterOrderID = requesterOrderID } });
                }
                catch (Exception inex)
                {
                    Counters.IncrementCounter(CountersConstants.ExceptionMessages);
                    SystemLogger.WriteOnConsoleAsync(true, string.Format("Error sending refused order modification to the client, ClientKey {0}, Error: {1}", clientKey, inex.Message), ConsoleColor.Red, ConsoleColor.White, false);
                }
            }
        }