using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Text.Json; namespace SierraChartDTC.Helpers; // Basic Enums necessary to process orders received from SierraChart DTC as well as establish connection public static class DTCProtocol { public const int DTC_VERSION_NUMBER = 8; public static string LogonRequest() { object logonReq = new { Type = DTCType.LOGON_REQUEST, ProtocolVersion = DTC_VERSION_NUMBER, HeartbeatIntervalInSeconds = 60, TradeAccount = "Sim1", ClientName="RetailAlpha" }; return JsonSerializer.Serialize(logonReq) + "\0"; } public static string Heartbeat() { object heartbeatJSON = new { Type = DTCType.HEARTBEAT, }; return JsonSerializer.Serialize(heartbeatJSON) + "\0"; } } #region DTC Message Classes public struct OrderUpdate { public DTCType Type { get; set; } public int RequestID { get; set; } public int TotalNumMessages { get; set; } public int MessageNumber { get; set; } public DTCOrderStatus OrderStatus { get; set; } public DTCOrderUpdateReason OrderUpdateReason { get; set; } public DTCOrderType OrderType { get; set; } public DTCBuySell BuySell { get; set; } public int OrderQuantity { get; set; } public int Price1 { get; set; } public string Symbol { get; set; } public string ServerOrderID { get; set; } public string TradeAccount { get; set; } public string InfoText { get; set; } public string ParentServerOrderID { get; set; } public string OCOLinkedOrderServerOrderID { get; set; } public DTCOpenClose OpenOrClose { get; set; } public int OrderReceivedDateTime { get; set; } } #endregion #region DTC Enums public enum DTCType { LOGON_REQUEST = 1, LOGON_RESPONSE = 2, HEARTBEAT = 3, ORDER_UPDATE = 301 } public enum DTCOrderStatus { ORDER_STATUS_PENDING_OPEN = 2, ORDER_STATUS_PENDING_CHILD = 3, ORDER_STATUS_OPEN = 4, ORDER_STATUS_PENDING_CANCEL_REPLACE = 5, ORDER_STATUS_PENDING_CANCEL = 6, ORDER_STATUS_FILLED = 7, ORDER_STATUS_CANCELED = 8, ORDER_STATUS_REJECTED = 9, ORDER_STATUS_PARTIALLY_FILLED = 10 } public enum DTCOrderUpdateReason { OPEN_ORDERS_REQUEST_RESPONSE = 1, NEW_ORDER_ACCEPTED = 2, GENERAL_ORDER_UPDATE = 3, ORDER_FILLED = 4, ORDER_FILLED_PARTIALLY = 5, ORDER_CANCELED = 6, ORDER_CANCEL_REPLACE_COMPLETE = 7, NEW_ORDER_REJECTED = 8, ORDER_CANCEL_REJECTED = 9, ORDER_CANCEL_REPLACE_REJECTED = 10 } public enum DTCOrderType { ORDER_TYPE_MARKET = 1, ORDER_TYPE_LIMIT = 2, ORDER_TYPE_STOP = 3, ORDER_TYPE_STOP_LIMIT = 4 } public enum DTCBuySell { BUY = 1, SELL = 2 } public enum DTCOpenClose { TRADE_OPEN = 1, TRADE_CLOSE = 2 } #endregion // Custom Logging for Sierrachart messages (Used in cxn) public class LogEntry { public string Message { get; set; } = ""; public LogEntryType Type { get; set; } = LogEntryType.Info; public LogEntry(string message, LogEntryType type = LogEntryType.Info) { Message = message; Type = type; } } public enum LogEntryType { Info, Update, Success, Rejected }