/// <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); }
/// <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")); }
/// <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); } }
/// <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)); }
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; }
/// <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)); }
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); } } }
/// <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); } }