Ejemplo n.º 1
0
        /// <summary>
        /// Creates a Execution Element.
        /// </summary>
        /// <param name="blockOrderDocument">The parent document of this Xml Node.</param>
        /// <param name="executionRow">The execution record used to create the Xml Node.</param>
        public ExecutionElement(BlockOrderDocument blockOrderDocument, ClientMarketData.ExecutionRow executionRow) :
            base("Execution", blockOrderDocument)
        {
            // Keep track of the record that created this element.
            this.executionRow = executionRow;

            // Apply the attributes to the element.
            AddAttribute("ExecutionId", executionRow.ExecutionId);
            AddAttribute("BrokerId", executionRow.BrokerId);
            AddAttribute("BrokerSymbol", executionRow.BrokerRow.Symbol);
            AddAttribute("Quantity", executionRow.Quantity);
            AddAttribute("Price", executionRow.Price);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Creates an XML Element representing a placment in the execution document.
 /// </summary>
 /// <param name="xmlDocument">The destination XML document.</param>
 /// <param name="executionRow">A execution record.</param>
 public ExecutionElement(XmlDocument xmlDocument, ClientMarketData.ExecutionRow executionRow) :
     base("Execution", xmlDocument)
 {
     // Add the attributes of a execution to this record.
     AddAttribute("ExecutionId", executionRow.ExecutionId.ToString());
     AddAttribute("Quantity", executionRow.ExecutionQuantity.ToString());
     AddAttribute("Price", executionRow.ExecutionPrice.ToString());
     AddAttribute("Commission", executionRow.Commission.ToString());
     AddAttribute("AccruedInterest", executionRow.AccruedInterest.ToString());
     AddAttribute("UserFee0", executionRow.UserFee0.ToString());
     AddAttribute("UserFee1", executionRow.UserFee1.ToString());
     AddAttribute("UserFee2", executionRow.UserFee2.ToString());
     AddAttribute("UserFee3", executionRow.UserFee3.ToString());
     AddAttribute("TradeDate", executionRow.TradeDate.ToString("s"));
     AddAttribute("SettlementDate", executionRow.SettlementDate.ToString("s"));
     AddAttribute("CreatedTime", executionRow.CreatedTime.ToString("s"));
 }
Ejemplo n.º 3
0
        /// <summary>
        /// Creates an XML Element representing a placment in the execution document.
        /// </summary>
        /// <param name="xmlDocument">The destination XML document.</param>
        /// <param name="executionRow">A execution record.</param>
        public GlobalExecutionElement(XmlDocument xmlDocument, ClientMarketData.ExecutionRow executionRow) :
            base("GlobalExecution", xmlDocument)
        {
            // Add the attributes of a broker to this record.
            ClientMarketData.BrokerRow brokerRow = executionRow.BrokerRow;
            AddAttribute("BrokerId", brokerRow.BrokerId.ToString());
            AddAttribute("BrokerName", brokerRow.ObjectRow.Name);
            AddAttribute("BrokerSymbol", brokerRow.Symbol);

            // Add the attributes of a execution to this record.
            AddAttribute("ExecutionId", executionRow.ExecutionId.ToString());
            AddAttribute("Quantity", executionRow.Quantity.ToString());
            AddAttribute("Price", executionRow.Price.ToString());
            AddAttribute("Commission", executionRow.Commission.ToString());
            AddAttribute("AccruedInterest", executionRow.AccruedInterest.ToString());
            AddAttribute("UserFee0", executionRow.UserFee0.ToString());
            AddAttribute("UserFee1", executionRow.UserFee1.ToString());
            AddAttribute("UserFee2", executionRow.UserFee2.ToString());
            AddAttribute("UserFee3", executionRow.UserFee3.ToString());
            AddAttribute("TradeDate", executionRow.TradeDate.ToString("s"));
            AddAttribute("SettlementDate", executionRow.SettlementDate.ToString("s"));
            if (!executionRow.IsCreatedTimeNull())
            {
                AddAttribute("CreatedTime", executionRow.CreatedTime.ToString("s"));
            }
            if (!executionRow.IsCreatedLoginIdNull())
            {
                AddAttribute("CreatedLoginId", executionRow.CreatedLoginId.ToString());
                AddAttribute("CreatedLoginName", executionRow.LoginRowByFKLoginExecutionCreatedLoginId.ObjectRow.Name);
            }
            if (!executionRow.IsModifiedTimeNull())
            {
                AddAttribute("ModifiedTime", executionRow.ModifiedTime.ToString("s"));
            }
            if (!executionRow.IsModifiedLoginIdNull())
            {
                AddAttribute("ModifiedLoginId", executionRow.ModifiedLoginId.ToString());
                AddAttribute("ModifiedLoginName", executionRow.LoginRowByFKLoginExecutionModifiedLoginId.ObjectRow.Name);
            }
        }
Ejemplo n.º 4
0
 /// <summary>
 /// Creates a execution element for the ExecutionDocument
 /// </summary>
 /// <param name="executionRow">A Execution record</param>
 /// <returns>An element that represents a execution.</returns>
 public GlobalExecutionElement CreateGlobalExecutionElement(ClientMarketData.ExecutionRow executionRow)
 {
     return(new GlobalExecutionElement(this, executionRow));
 }
Ejemplo n.º 5
0
        public GlobalTicket(ClientMarketData.ExecutionRow executionRow)
        {
            // Initialize members
            this.isLocal             = false;
            this.blockOrderId        = executionRow.BlockOrderId;
            this.brokerId            = executionRow.BrokerId;
            this.transactionTypeCode = executionRow.BlockOrderRow.TransactionTypeCode;
            this.brokerName          = executionRow.BrokerRow.ObjectRow.Name;
            this.brokerSymbol        = executionRow.BrokerRow.Symbol;
            this.rowVersion          = executionRow.RowVersion;
            this.executionId         = executionRow.ExecutionId;
            this.quantity            = executionRow.Quantity;
            this.price           = executionRow.Price;
            this.commission      = executionRow.Commission;
            this.accruedInterest = executionRow.AccruedInterest;
            this.userFee0        = executionRow.UserFee0;
            this.userFee1        = executionRow.UserFee1;
            this.userFee2        = executionRow.UserFee2;
            this.userFee3        = executionRow.UserFee3;
            this.tradeDate       = executionRow.TradeDate;
            this.settlementDate  = executionRow.SettlementDate;
            this.createdTime     = executionRow.CreatedTime;
            this.createdLoginId  = executionRow.CreatedLoginId;
            ClientMarketData.LoginRow createdLogin = ClientMarketData.Login.FindByLoginId(this.CreatedLoginId);
            if (createdLogin != null)
            {
                this.createdLoginName = createdLogin.ObjectRow.Name;
            }
            this.modifiedTime    = executionRow.ModifiedTime;
            this.modifiedLoginId = executionRow.ModifiedLoginId;
            ClientMarketData.LoginRow modifiedLogin = ClientMarketData.Login.FindByLoginId(this.ModifiedLoginId);
            if (modifiedLogin != null)
            {
                this.modifiedLoginName = modifiedLogin.ObjectRow.Name;
            }

            // Initialize Field Status
            iRowVersionModified           = true;
            isBlockOrderIdModified        = true;
            isTransactionTypeCodeModified = true;
            isBrokerIdModified            = true;
            isBrokerNameModified          = true;
            isBrokerSymbolModified        = true;
            isExecutionIdModified         = true;
            isQuantityModified            = true;
            isPriceModified             = true;
            isCommissionModified        = true;
            isAccruedInterestModified   = true;
            isUserFee0Modified          = true;
            isUserFee1Modified          = true;
            isUserFee2Modified          = true;
            isUserFee3Modified          = true;
            isTradeDateModified         = true;
            isSettlementDateModified    = true;
            isCreatedTimeModified       = true;
            isCreatedLoginIdModified    = true;
            isCreatedLoginNameModified  = true;
            isModifiedTimeModified      = true;
            isModifiedLoginIdModified   = true;
            isModifiedLoginNameModified = true;
        }
Ejemplo n.º 6
0
 /// <summary>
 /// Creates a execution element for the TicketDocument
 /// </summary>
 /// <param name="executionRow">A Ticket record</param>
 /// <returns>An element that represents a execution.</returns>
 public ExecutionElement CreateExecutionElement(ClientMarketData.ExecutionRow executionRow)
 {
     return(new ExecutionElement(this, executionRow));
 }
Ejemplo n.º 7
0
        public ExecutionElement(ExecutionDocument executionDocument, ClientMarketData.ExecutionRow executionRow, FieldArray fields) :
            base("Execution", executionDocument)
        {
            // ExecutionId - Primary Key for this report.
            AddAttribute("ExecutionId", executionRow.ExecutionId);

            // State - Note that the status code is always provided to the DOM for color coding of the fields.
            AddAttribute("SourceStateCode", executionRow.SourceStateCode);
            AddAttribute("DestinationStateCode", executionRow.DestinationStateCode);
            if (fields[Field.SourceState])
            {
                AddAttribute("SourceStateMnemonic", executionRow.StateRowByStateExecutionSourceStateCode.Mnemonic);
            }
            if (fields[Field.DestinationState])
            {
                AddAttribute("DestinationStateMnemonic", executionRow.StateRowByStateExecutionDestinationStateCode.Mnemonic);
            }

            // Blotter
            if (fields[Field.Blotter])
            {
                AddAttribute("Blotter", executionRow.DestinationOrderRow.WorkingOrderRow.BlotterId);
                AddAttribute("BlotterName", executionRow.DestinationOrderRow.WorkingOrderRow.BlotterRow.ObjectRow.Name);
            }

            // OrderType
            if (fields[Field.OrderType])
            {
                AddAttribute("OrderTypeCode", executionRow.DestinationOrderRow.WorkingOrderRow.OrderTypeCode);
                AddAttribute("OrderTypeMnemonic", executionRow.DestinationOrderRow.WorkingOrderRow.OrderTypeRow.Mnemonic);
                AddAttribute("CashSign", executionRow.DestinationOrderRow.WorkingOrderRow.OrderTypeRow.CashSign);
                AddAttribute("QuantitySign", executionRow.DestinationOrderRow.WorkingOrderRow.OrderTypeRow.QuantitySign);
            }

            // TimeInForce
            if (fields[Field.TimeInForce])
            {
                AddAttribute("TimeInForceCode", executionRow.DestinationOrderRow.WorkingOrderRow.TimeInForceRow.TimeInForceCode);
                AddAttribute("TimeInForceName", executionRow.DestinationOrderRow.WorkingOrderRow.TimeInForceRow.Mnemonic);
            }

            // Security
            if (fields[Field.Security])
            {
                AddAttribute("SecurityId", executionRow.DestinationOrderRow.WorkingOrderRow.SecurityRowBySecurityWorkingOrderSecurityId.SecurityId);
                AddAttribute("SecuritySymbol", executionRow.DestinationOrderRow.WorkingOrderRow.SecurityRowBySecurityWorkingOrderSecurityId.Symbol);
                AddAttribute("SecurityName", executionRow.DestinationOrderRow.WorkingOrderRow.SecurityRowBySecurityWorkingOrderSecurityId.ObjectRow.Name);
            }

            //  Source Order Total Quantity
            if (fields[Field.ExecutionQuantity])
            {
                AddAttribute("ExecutionQuantity", executionRow.ExecutionQuantity);
            }

            // Execution Price
            if (fields[Field.ExecutionPrice])
            {
                AddAttribute("ExecutionPrice", executionRow.ExecutionPrice);
            }

            // Market Value
            if (fields[Field.ExecutionPrice] || fields[Field.ExecutionQuantity])
            {
                AddAttribute("GrossValue", executionRow.ExecutionQuantity * executionRow.ExecutionPrice);
            }

            // Commission
            if (fields[Field.Commission])
            {
                AddAttribute("Commission", executionRow.Commission);
            }

            // Execution Net
            if (fields[Field.ExecutionPrice] || fields[Field.ExecutionQuantity] || fields[Field.Commission])
            {
                AddAttribute("NetValue", (executionRow.ExecutionQuantity * executionRow.DestinationOrderRow.WorkingOrderRow.SecurityRowBySecurityWorkingOrderSecurityId.QuantityFactor) *
                             (executionRow.ExecutionPrice * executionRow.DestinationOrderRow.WorkingOrderRow.SecurityRowBySecurityWorkingOrderSecurityId.PriceFactor) +
                             (executionRow.Commission * executionRow.DestinationOrderRow.WorkingOrderRow.OrderTypeRow.QuantitySign));
            }

            // Destination
            if (fields[Field.Destination])
            {
                if (!executionRow.DestinationOrderRow.WorkingOrderRow.IsDestinationIdNull())
                {
                    AddAttribute("DestinationId", executionRow.DestinationOrderRow.WorkingOrderRow.DestinationRow.DestinationId);
                    AddAttribute("DestinationName", executionRow.DestinationOrderRow.WorkingOrderRow.DestinationRow.Name);
                    AddAttribute("DestinationShortName", executionRow.DestinationOrderRow.WorkingOrderRow.DestinationRow.ShortName);
                }
            }

            // The Direction of this order (buy, sell, buy cover, etc.)
            if (fields[Field.PriceType])
            {
                AddAttribute("PriceTypeCode", executionRow.DestinationOrderRow.WorkingOrderRow.PriceTypeRow.PriceTypeCode);
                AddAttribute("PriceTypeMnemonic", executionRow.DestinationOrderRow.WorkingOrderRow.PriceTypeRow.Mnemonic);
            }

            // The clearing broker.
            if (fields[Field.Broker])
            {
                if (!executionRow.IsBrokerIdNull())
                {
                    AddAttribute("BrokerId", executionRow.BrokerRow.BrokerId);
                    AddAttribute("BrokerName", executionRow.BrokerRow.SourceRow.BlotterRow.ObjectRow.Name);
                    AddAttribute("BrokerSymbol", executionRow.BrokerRow.Symbol);
                }
            }

            // The account for clearing this execution.
            if (fields[Field.BrokerAccount])
            {
                if (!executionRow.IsBrokerAccountIdNull())
                {
                    AddAttribute("BrokerAccountId", executionRow.BrokerAccountRow.BrokerAccountId);
                    AddAttribute("BrokerAccountMnemonic", executionRow.BrokerAccountRow.Mnemonic);
                    AddAttribute("BrokerAccountDescription", executionRow.BrokerAccountRow.Description);
                }
            }

            // The remaining Source Order Fields
            if (fields[Field.Execution])
            {
                // Created
                AddAttribute("CreatedName", executionRow.DestinationOrderRow.WorkingOrderRow.UserRowByUserWorkingOrderCreatedUserId.ObjectRow.Name);
                AddAttribute("CreatedTime", executionRow.DestinationOrderRow.WorkingOrderRow.CreatedTime.ToString("s"));

                // Limit Price
                if (!executionRow.DestinationOrderRow.WorkingOrderRow.IsLimitPriceNull())
                {
                    AddAttribute("LimitPrice", (decimal)executionRow.DestinationOrderRow.WorkingOrderRow.LimitPrice);
                }

                // Stop Price
                if (!executionRow.DestinationOrderRow.WorkingOrderRow.IsStopPriceNull())
                {
                    AddAttribute("StopPrice", (decimal)executionRow.DestinationOrderRow.WorkingOrderRow.StopPrice);
                }
            }
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Creates a well formed working order document object model from fragments of data.
        /// </summary>
        /// <param name="blotterId">A list of items to be included in the DOM.</param>
        public ExecutionDocument(FragmentList fragmentList)
        {
            try
            {
                // Lock the tables
                System.Diagnostics.Debug.Assert(!ClientMarketData.IsLocked);
                ClientMarketData.BlotterLock.AcquireReaderLock(CommonTimeout.LockWait);
                ClientMarketData.DestinationLock.AcquireReaderLock(CommonTimeout.LockWait);
                ClientMarketData.DestinationOrderLock.AcquireReaderLock(CommonTimeout.LockWait);
                ClientMarketData.ObjectLock.AcquireReaderLock(CommonTimeout.LockWait);
                ClientMarketData.ObjectTreeLock.AcquireReaderLock(CommonTimeout.LockWait);
                ClientMarketData.OrderTypeLock.AcquireReaderLock(CommonTimeout.LockWait);
                ClientMarketData.PriceTypeLock.AcquireReaderLock(CommonTimeout.LockWait);
                ClientMarketData.SecurityLock.AcquireReaderLock(CommonTimeout.LockWait);
                ClientMarketData.ExecutionLock.AcquireReaderLock(CommonTimeout.LockWait);
                ClientMarketData.StateLock.AcquireReaderLock(CommonTimeout.LockWait);
                ClientMarketData.StylesheetLock.AcquireReaderLock(CommonTimeout.LockWait);
                ClientMarketData.TimeInForceLock.AcquireReaderLock(CommonTimeout.LockWait);
                ClientMarketData.UserLock.AcquireReaderLock(CommonTimeout.LockWait);
                ClientMarketData.WorkingOrderLock.AcquireReaderLock(CommonTimeout.LockWait);

                // The root of the fragment document.
                XmlNode fragmentNode = this.AppendChild(this.CreateElement("Fragment"));

                // The insert, update and delete elements are only included only when there is data in those sections.
                XmlNode insertNode = null;
                XmlNode updateNode = null;
                XmlNode deleteNode = null;

                foreach (Fragment fragment in fragmentList)
                {
                    // The generic record in the fragment is cast here to a ExecutionRow.  By design, this is the only type of
                    // record that will be placed into the FragmentList.
                    ClientMarketData.ExecutionRow executionRow = (ClientMarketData.ExecutionRow)fragment.Row;

                    // Insert, Update or Delete the fragment.
                    switch (fragment.DataAction)
                    {
                    case DataAction.Insert:

                        // The 'insert' element is optional until there is something to insert.
                        if (insertNode == null)
                        {
                            insertNode = fragmentNode.AppendChild(this.CreateElement("Insert"));
                        }

                        // Insert the record.
                        insertNode.AppendChild(new ExecutionElement(this, executionRow, FieldArray.Set));

                        break;


                    case DataAction.Update:

                        // The 'update' element is optional until there is something to update.
                        if (updateNode == null)
                        {
                            updateNode = fragmentNode.AppendChild(this.CreateElement("Update"));
                        }

                        // Update individual properties of the record.
                        updateNode.AppendChild(new ExecutionElement(this, executionRow, fragment.Fields));

                        break;

                    case DataAction.Delete:

                        // The 'delete' element is optional until there is something to delete.
                        if (deleteNode == null)
                        {
                            deleteNode = fragmentNode.AppendChild(this.CreateElement("Delete"));
                        }

                        // The original record can't be used (because it has been deleted, duh).  A key is constructed from the data
                        // stored in the fragment list.
                        CommonElement commonElement = new CommonElement("Execution", this);
                        commonElement.AddAttribute("ExecutionId", (int)fragment.Key[0]);
                        deleteNode.AppendChild(commonElement);

                        break;
                    }
                }
            }
            catch (Exception exception)
            {
                // Write the error and stack trace out to the event log.
                EventLog.Error("{0}, {1}", exception.Message, exception.StackTrace);
            }
            finally
            {
                // Release the table locks.
                if (ClientMarketData.BlotterLock.IsReaderLockHeld)
                {
                    ClientMarketData.BlotterLock.ReleaseReaderLock();
                }
                if (ClientMarketData.DestinationLock.IsReaderLockHeld)
                {
                    ClientMarketData.DestinationLock.ReleaseReaderLock();
                }
                if (ClientMarketData.DestinationOrderLock.IsReaderLockHeld)
                {
                    ClientMarketData.DestinationOrderLock.ReleaseReaderLock();
                }
                if (ClientMarketData.ObjectLock.IsReaderLockHeld)
                {
                    ClientMarketData.ObjectLock.ReleaseReaderLock();
                }
                if (ClientMarketData.ObjectTreeLock.IsReaderLockHeld)
                {
                    ClientMarketData.ObjectTreeLock.ReleaseReaderLock();
                }
                if (ClientMarketData.OrderTypeLock.IsReaderLockHeld)
                {
                    ClientMarketData.OrderTypeLock.ReleaseReaderLock();
                }
                if (ClientMarketData.PriceTypeLock.IsReaderLockHeld)
                {
                    ClientMarketData.PriceTypeLock.ReleaseReaderLock();
                }
                if (ClientMarketData.SecurityLock.IsReaderLockHeld)
                {
                    ClientMarketData.SecurityLock.ReleaseReaderLock();
                }
                if (ClientMarketData.ExecutionLock.IsReaderLockHeld)
                {
                    ClientMarketData.ExecutionLock.ReleaseReaderLock();
                }
                if (ClientMarketData.StateLock.IsReaderLockHeld)
                {
                    ClientMarketData.StateLock.ReleaseReaderLock();
                }
                if (ClientMarketData.StylesheetLock.IsReaderLockHeld)
                {
                    ClientMarketData.StylesheetLock.ReleaseReaderLock();
                }
                if (ClientMarketData.TimeInForceLock.IsReaderLockHeld)
                {
                    ClientMarketData.TimeInForceLock.ReleaseReaderLock();
                }
                if (ClientMarketData.UserLock.IsReaderLockHeld)
                {
                    ClientMarketData.UserLock.ReleaseReaderLock();
                }
                if (ClientMarketData.WorkingOrderLock.IsReaderLockHeld)
                {
                    ClientMarketData.WorkingOrderLock.ReleaseReaderLock();
                }
                System.Diagnostics.Debug.Assert(!ClientMarketData.IsLocked);
            }
        }