/** * Copyright (C) 2011-2017 Barchart, Inc. * * All rights reserved. Licensed under the OSI BSD License. * * http://www.opensource.org/licenses/bsd-license.php */ syntax = "proto3"; package org.openfeed; option java_multiple_files = true; option java_generate_equals_and_hash = true; option optimize_for = SPEED; import "openfeed_instrument.proto"; // ///////////////////////////////////////////////////////////////// // Enums // ///////////////////////////////////////////////////////////////// /// Book side enum BookSide { UNKNOWN_BOOK_SIDE = 0; BID = 1; OFFER = 2; } enum InstrumentTradingStatus { UNKNOWN_TRADING_STATUS = 0; TRADING_RESUME = 1; PRE_OPEN = 2; OPEN = 3; PRE_CLOSE = 4; CLOSE = 5; TRADING_HALT = 6; QUOTATION_RESUME = 7; OPEN_DELAY = 8; NO_OPEN_NO_RESUME = 9; FAST_MARKET = 10; FAST_MARKET_END = 11; LATE_MARKET = 12; LATE_MARKET_END = 13; POST_SESSION = 14; POST_SESSION_END = 15; NEW_PRICE_INDICATION = 16; NOT_AVAILABLE_FOR_TRADING = 17; PRE_CROSS = 18; CROSS = 19; POST_CLOSE = 20; NO_CHANGE = 21; NAFT = 22; // Not available for trading. TRADING_RANGE_INDICATION = 23; MARKET_IMBALANCE_BUY = 24; MARKET_IMBALANCE_SELL = 25; MOC_IMBALANCE_BUY = 26; // Market On Close Imbalance Buy MOC_IMBALANCE_SELL = 27; NO_MARKET_IMBALANCE = 28; NO_MOC_IMBALANCE = 29; SHORT_SELL_RESTRICTION = 30; LIMIT_UP_LIMIT_DOWN = 31; } enum RegulationSHOShortSalePriceTest { UNKNOWN_PRICE_TEST = 0; PRICE_TEST_NONE = 1; PRICE_TEST_IN_EFFECT = 2; PRICE_TEST_REMAINS_IN_EFFECT = 3; } enum SettlementTerms { UNKNOWN_SETTLEMENT_TERMS = 0; CASH = 1; NON_NET = 2; CONTINGENT_TRADE = 3; CASH_TODAY = 4; DATE = 5; } enum CrossType { UNKNOWN_CROSS_TYPE = 0; DEFAULT = 1; INTERNAL = 2; BASIS = 3; CONTINGENT = 4; SPECIAL = 5; VWAP = 6; REGULAR = 7; } enum OpenCloseSettlementFlag { UNKNOWN = 0; DAILY_OPEN = 1; INDICATIVE_OPEN_PRICE = 2; } enum SettlementSource { UNKNOWN_SETTLEMENT_SOURCE = 0; GLOBEX = 1; ITC = 2; MANUAL = 3; } enum Service { UNKNOWN_SERVICE = 0; REAL_TIME = 1; DELAYED = 2; REAL_TIME_SNAPSHOT = 3; DELAYED_SNAPSHOT = 4; END_OF_DAY = 5; } enum MarketWideStatus { STATUS_UNKNOWN = 0; STATUS_START_OF_DAY = 1; STATUS_END_OF_DAY = 2; STATUS_OPEN = 3; STATUS_CLOSE = 4; } // ///////////////////////////////////////////////////////////////// // Messages // ///////////////////////////////////////////////////////////////// /// A wrapper for Openfeed data. Will contain exactly one of the supported // message types message OpenfeedMessage { /// Nano second unix epoch at time of message transmission (UTC) sint64 sendingTime = 1; /// The total number of markets available on this channel // at the time the message was sent. For UDP snapshot and definition feeds. sint32 totalCount = 2; /// The most recent packet sequence number sent on the incremental feed // at the time this message was sent. For UDP snapshot and definition feeds. int64 syncSequence = 3; // Feed specific context data Context context = 4; oneof data { ChannelReset channelReset = 10; HeartBeat heartBeat = 11; AdminMessage adminMessage = 12; InstrumentDefinition instrumentDefinition = 13; InstrumentGroupStatus instrumentGroupStatus = 14; MarketSnapshot marketSnapshot = 15; MarketUpdate marketUpdate = 16; MarketStatus marketStatus = 17; EODCommoditySummary eodCommoditySummary = 18; InstrumentAction instrumentAction = 19; } } // Channel Reset message ChannelReset { sint32 channel = 1; sint64 transactionTime = 2; } /// Heart Beat message HeartBeat { /// UTC timestamp of transaction, nano seconds since Unix epoch sint64 transactionTime = 1; string status = 2; bool exchange = 3; sint32 channel = 4; } // Administrative Message message AdminMessage { // Origination time = UTC timestamp nano seconds since Unix epoch sint64 originationTime = 1; string source = 2; string languageCode = 3; string headLine = 4; string text = 5; enum Status { OK = 0; } Status status = 6; sint32 channel = 7; } /// Instrument Group Status message InstrumentGroupStatus { /// UTC Timestamp of transaction, nano seconds since Unix epoch sint64 transactionTime = 1; string instrumentGroupId = 2; InstrumentTradingStatus tradingStatus = 3; sint32 tradeDate = 4; sint32 channel = 5; } /// Market Status message MarketStatus { /// UTC Timestamp of transaction, nano seconds since Unix epoch sint64 transactionTime = 1; sint32 channel = 2; MarketWideStatus marketWideStatus = 3; } /// EOD commodity summary. Used to represent consolidated total values for the group of contracts. Total volume for /// all ES futures, for example. message EODCommoditySummary { /// Trade date in the format YYYYMMDD sint32 tradeDate = 1; /// Contract root, for example ES. string contractRoot = 2; /// Consolidated volume. sint64 consolidatedVolume = 3; // Consolidated open interest. sint64 consolidatedOpenInterest = 4; /// For internal use only. Ignore bytes auxiliaryData = 99; } /// Session used in snapshot. message MarketSession { /// Date only, format 2012-07-04 -> 20120704 sint32 tradeDate = 4; /// Most recent opening price Open open = 30; /// High price for the trading session High high = 31; /// Low price for the trading session Low low = 32; /// Most recent traded price and quantity Last last = 35; /// Total traded volume Volume volume = 38; /// Most recent settlement price Settlement settlement = 39; /// Most recent settlement price Settlement prevSettlement = 44; /// Most recent open interest OpenInterest openInterest = 40; /// Number of trades NumberOfTrades numberOfTrades = 41; /// Monetary value MonetaryValue monetaryValue = 42; // UTC Timestamp, nano seconds since Unix epoch sint64 transactionTime = 43; OfficialBestBidOffer officialBestBidOffer = 45; ReferenceVolatilityPrice referenceVolatilityPrice = 46; PriceLimits priceLimits = 47; MarketOpenInterest marketOpenInterest = 48; Vwap vwap = 49; WarrantBand warrantBand = 50; PositionBand positionBand = 51; Last lastTrade = 52; } /// Snapshot for a market message MarketSnapshot { /// Unique id identifying the market sint64 marketId = 1; // UTC Timestamp of transaction, nano seconds since Unix epoch sint64 transactionTime = 2; // Instrument level sequence number int64 marketSequence = 3; /// Date only, format 2012-07-04 -> 20120704 sint32 tradeDate = 4; /// A snapshot with market depth may exceed the maximum message size. // In that case, the snapshot will be broken up across multiple // snapshot messages. sint32 totalChunks = 5; sint32 currentChunk = 6; // Optional symbol identifier string symbol = 7; /// Divide prices by this value to get real price values. Optional, use value /// from InstrumentDefinition if not set. sint32 priceDenominator = 8; // Service service = 9; // InstrumentStatus instrumentStatus = 10; // Best Bid Offer BestBidOffer bbo = 11; // Index Value IndexValue index = 12; // Price Level Book repeated AddPriceLevel priceLevels = 13; // Order Book repeated AddOrder orders = 14; News news = 15; /// Most recent opening price Open open = 30; /// High price for the trading session High high = 31; /// Low price for the trading session Low low = 32; /// Most recent closing price Close close = 33; /// Previous closing price PrevClose prevClose = 34; /// Most recent traded price and quantity Last last = 35; /// Year high price YearHigh yearHigh = 36; /// Year low price YearLow yearLow = 37; /// Total traded volume Volume volume = 38; /// Most recent settlement price Settlement settlement = 39; /// Most recent open interest OpenInterest openInterest = 40; /// Most recent volume weighted average price Vwap vwap = 41; DividendsIncomeDistributions dividendsIncomeDistributions = 42; NumberOfTrades numberOfTrades = 43; MonetaryValue monetaryValue = 44; CapitalDistributions capitalDistributions = 45; SharesOutstanding sharesOutstanding = 46; NetAssetValue netAssetValue = 47; /// Previous session. MarketSession previousSession = 48; /// 'T' session. MarketSession tSession = 49; /// Volume at price. Used by the market state/ JERQ. VolumeAtPrice volumeAtPrice = 50; HighRolling highRolling = 51; LowRolling lowRolling = 52; /// 'Z' session. Includes all trades, even the ones that do not update Last. MarketSession zSession = 53; ReferenceVolatilityPrice referenceVolatilityPrice = 54; PriceLimits priceLimits = 55; /// Older previous sessions repeated MarketSession sessions = 56; OfficialBestBidOffer officialBestBidOffer = 57; MarketOpenInterest marketOpenInterest = 58; WarrantBand warrantBand = 59; PositionBand positionBand = 60; Last lastTrade = 61; } enum SnapshotRequestResult { SNAPSHOT_REQUEST_UNKNOWN_RESULT = 0; SNAPSHOT_REQUEST_SUCCESS = 1; SNAPSHOT_REQUEST_NOT_FOUND = 2; SNAPSHOT_REQUEST_SERVICE_NOT_AVAILABLE = 3; SNAPSHOT_REQUEST_GENERIC_FAILURE = 4; } // Used by market state to return snapshot. message MarketSnapshotResponse { SnapshotRequestResult result = 1; string message = 2; MarketSnapshot marketSnapshot = 3; } // // Market Update for an instrument // message MarketUpdate { /// Unique id identifying the market sint64 marketId = 1; // Optional symbol identifier string symbol = 2; /// UTC Timestamp of transaction, nano seconds since Unix epoch /// This is usually the execution venue timestamp. sint64 transactionTime = 3; /// Distribution time in nano seconds since epoch. sint64 distributionTime = 4; /// Market level sequencing number sint64 marketSequence = 5; /// Data source sequence number sint64 sourceSequence = 6; // Market participant/originator bytes originatorId = 7; /// The consolidated messages are the default. Regional exchanges will have regional = true /// deprecated bool consolidated = 8; reserved 8; /// Divide prices by this value to get real price values. Optional, use value /// from InstrumentDefinition if not set. sint32 priceDenominator = 9; // Feed specific context data set as required. Context context = 10; /// Current session. This is used to 'enhance' updates from the translator in the Market State MarketSession session = 11; /// 'T' session. This is used to 'enhance' updates from the translator in the Market State MarketSession tSession = 12; /// Previous session. This is used to 'enhance' updates from the translator in the Market State MarketSession previousSession = 13; /// True if message applies to regional/participant member bool regional = 14; /// 'Z' session. Includes all trades, even the ones that do not update Last. MarketSession zSession = 15; oneof data { News news = 20; ClearBook clearBook = 21; InstrumentStatus instrumentStatus = 22; BestBidOffer bbo = 23; DepthPriceLevel depthPriceLevel = 24; DepthOrder depthOrder = 25; IndexValue index = 26; Trades trades = 27; Open open = 28; High high = 29; Low low = 30; Close close = 31; PrevClose prevClose = 32; Last last = 33; YearHigh yearHigh = 34; YearLow yearLow = 35; Volume volume = 36; Settlement settlement = 37; OpenInterest openInterest = 38; Vwap vwap = 39; DividendsIncomeDistributions dividendsIncomeDistributions = 40; NumberOfTrades numberOfTrades = 41; MonetaryValue monetaryValue = 42; CapitalDistributions capitalDistributions = 43; SharesOutstanding sharesOutstanding = 44; NetAssetValue netAssetValue = 45; MarketSummary marketSummary = 46; HighRolling highRolling = 47; LowRolling lowRolling = 48; RequestForQuote requestForQuote = 49; ReferenceVolatilityPrice referenceVolatilityPrice = 50; PriceLimits priceLimits = 51; OfficialBestBidOffer officialBestBidOffer = 52; MarketOpenInterest marketOpenInterest = 53; WarrantBand warrantBand = 54; PositionBand positionBand = 55; } } /// Depth Price Level message DepthPriceLevel { repeated Entry levels = 1; message Entry { oneof data { AddPriceLevel addPriceLevel = 1; DeletePriceLevel deletePriceLevel = 2; ModifyPriceLevel modifyPriceLevel = 3; } } } /// Depth By Order message DepthOrder { repeated Entry orders = 1; message Entry { oneof data { AddOrder addOrder = 1; DeleteOrder deleteOrder = 2; ModifyOrder modifyOrder = 3; } } } /// News or informational message message News { // Origination time = UTC timestamp nano seconds since Unix epoch sint64 originationTime = 1; string source = 2; string languageCode = 3; string headLine = 4; string text = 5; repeated string symbols = 6; } /// Clear all data from the order books that are configured for this market. message ClearBook { sint32 reserved = 1; sint64 transactionTime = 2; } // // Instrument Status // message InstrumentStatus { // UTC Timestamp, nano seconds since Unix epoch sint64 transactionTime = 9; /// Trading status. InstrumentTradingStatus tradingStatus = 10; // UTC Timestamp, nano seconds since Unix epoch sint64 openingTime = 11; string note = 12; /// Date only, format 2012-07-04 -> 20120704 sint32 tradeDate = 13; RegulationSHOShortSalePriceTest regulationSHOShortSalePriceTest = 14; /// Prior trading status for the instrument. InstrumentTradingStatus priorTradingStatus = 15; } /// Best Bid and Offer. /// If a side is not present, then that side has been deleted. /// By default this value is the NBBO, if regional/participant quote then regional = true message BestBidOffer { // UTC Timestamp, nano seconds since Unix epoch sint64 transactionTime = 9; /// Divide by priceDenominator sint64 bidPrice = 10; /// Divide by quantityDenominator sint64 bidQuantity = 11; sint32 bidOrderCount = 12; /// Liquidity provider information // For Forex: BANK:CITY // For Equities: EXCHANGE_MIC bytes bidOriginator = 13; bytes bidQuoteCondition = 14; /// Divide by priceDenominator sint64 offerPrice = 20; /// Divide by quantityDenominator sint64 offerQuantity = 21; sint32 offerOrderCount = 22; /// Liquidity provider information // For Forex: BANK:CITY // For Equities: EXCHANGE_MIC bytes offerOriginator = 23; bytes offerQuoteCondition = 24; bytes quoteCondition = 30; /// By default this BBO is the NBBO /// Deprecated bool nationalBboUpdated = 31; reserved 31; /// True if regional/participant member quote bool regional = 32; /// True if not persisted in the EOD database. bool transient = 33; // Best Odd Lot Order (BOLO) bytes boloBidParticipantId = 34; sint64 boloBidPrice = 35; sint64 boloBidQuantity = 36; bytes boloOfferParticipantId = 37; sint64 boloOfferPrice = 38; sint64 boloOfferQuantity = 39; } /// Official Best Bid and Offer. message OfficialBestBidOffer { /// Date only, format 2012-07-04 -> 20120704 sint32 tradeDate = 8; // UTC Timestamp, nano seconds since Unix epoch sint64 transactionTime = 9; /// Divide by priceDenominator sint64 bidPrice = 10; /// Divide by priceDenominator sint64 offerPrice = 11; } /// Insert a new price level, pushing existing levels down message AddPriceLevel { // UTC Timestamp, nano seconds since Unix epoch sint64 transactionTime = 9; /// price level index, starting at 1 sint32 level = 10; BookSide side = 11; /// Divide by priceDenominator sint64 price = 12; /// Divide by quantityDenominator sint64 quantity = 13; sint32 orderCount = 14; sint64 impliedQuantity = 15; } /// Delete an existing price level, pulling existing levels up message DeletePriceLevel { // UTC Timestamp, nano seconds since Unix epoch sint64 transactionTime = 9; /// price level index, starting at 1 sint32 level = 10; BookSide side = 11; } /// Modify the quantity or orderCount of an existing price level. /// The price itself will not change. message ModifyPriceLevel { // UTC Timestamp, nano seconds since Unix epoch sint64 transactionTime = 9; /// price level index, starting at 1 sint32 level = 10; BookSide side = 11; /// Divide by priceDenominator sint64 price = 12; /// Divide by quantityDenominator sint64 quantity = 13; sint32 orderCount = 14; sint64 impliedQuantity = 15; } // Add an order to the order book. Indexed by orderId, which is unique per channel message AddOrder { sint64 transactionTime = 9; sint64 orderId = 10; BookSide side = 11; sint64 price = 12; sint64 quantity = 13; bool isImplied = 14; sint64 priority = 15; } /// Delete an order from the order book. Indexed by orderId, which is unique per channel message DeleteOrder { sint64 transactionTime = 9; sint64 orderId = 10; BookSide side = 11; } /// Modify the price or quantity of an order. The side and implied flag cannot change message ModifyOrder { sint64 transactionTime = 9; sint64 orderId = 10; BookSide side = 11; sint64 price = 12; sint64 quantity = 13; bool isImplied = 14; sint64 priority = 15; } /// For non-tradable index products message IndexValue { // UTC Timestamp, nano seconds since Unix epoch sint64 transactionTime = 9; // Date only, format 2012-07-04 -> 20120704 sint32 tradeDate = 10; sint64 last = 11; sint64 volume = 12; sint64 open = 13; sint64 settlementOpen = 14; sint64 specialOpen = 15; sint64 high = 16; sint64 low = 17; sint64 close = 18; sint64 bid = 19; sint64 offer = 20; } /// Trades message Trades { repeated Entry trades = 1; message Entry { oneof data { Trade trade = 1; TradeCorrection tradeCorrection = 2; TradeCancel tradeCancel = 3; } } } /// A live trade. When received, update the "last" field message Trade { // Market participant/originator bytes originatorId = 8; // UTC Timestamp, nano seconds since Unix epoch sint64 transactionTime = 9; /// Divide by priceDenominator sint64 price = 10; /// Divide by quantityDenominator sint64 quantity = 11; bytes tradeId = 12; /// The side of the aggressing order that caused the trade BookSide side = 13; /// Date only, format 2012-07-04 -> 20120704 sint32 tradeDate = 14; bytes buyerId = 15; bytes sellerId = 16; bool openingTrade = 17; bool systemPriced = 18; bool marketOnClose = 19; bool oddLot = 20; SettlementTerms settlementTerms = 21; CrossType crossType = 22; bool byPass = 23; sint64 lastPrice = 24; bytes saleCondition = 25; string currency = 26; // Does not update Last bool doesNotUpdateLast = 27; // Does not update Volume bool doesNotUpdateVolume = 28; string session = 30; // Is this a block trade. bool blockTrade = 31; /// Distribution time in nano seconds since epoch. sint64 distributionTime = 32; /// time in nano seconds since epoch. sint64 transactionTime2 = 33; string consolidatedPriceIndicator = 34; /// True if not persisted in the EOD database. bool transient = 35; /// Index short name used to identify index. string indexShortName = 36; /// Fractional Quantity. Divide by quantityFractionalDenominator. sint64 quantityFractional = 37; } /// Trade Correction message TradeCorrection { // Market participant/originator bytes originatorId = 8; sint64 transactionTime = 9; // Corrected Price sint64 price = 10; // Corrected Quantity sint64 quantity = 11; bytes tradeId = 12; BookSide side = 13; // Date only, format 2012-07-04 -> 20120704 sint32 tradeDate = 14; bytes buyerId = 15; bytes sellerId = 16; bool openingTrade = 17; bool systemPriced = 18; bool marketOnClose = 19; bool oddLot = 20; SettlementTerms settlementTerms = 21; CrossType crossType = 22; bool byPass = 23; bytes originalTradeId = 24; bytes saleCondition = 25; string currency = 26; /// Distribution time in nano seconds since epoch. sint64 distributionTime = 27; /// time in nano seconds since epoch. sint64 transactionTime2 = 28; // Original Price sint64 originalTradePrice = 29; // Original Quantity sint64 originalTradeQuantity = 30; /// Corrected Fractional Quantity. Divide by quantityFractionalDenominator. sint64 quantityFractional = 31; /// Original Fractional Quantity. Divide by quantityFractionalDenominator. sint64 originalQuantityFractional = 32; } // // Trade Cancel/Break // message TradeCancel { // Market participant/originator bytes originatorId = 8; sint64 transactionTime = 9; sint64 correctedTradePrice = 10; sint64 correctedTradeQuantity = 11; bytes tradeId = 12; bytes saleCondition = 13; string currency = 14; /// Distribution time in nano seconds since epoch. sint64 distributionTime = 15; /// time in nano seconds since epoch. sint64 transactionTime2 = 16; /// Corrected Fractional Quantity. Divide by quantityFractionalDenominator. sint64 correctedTradeQuantityFractional = 17; } message Open { sint64 transactionTime = 9; /// Date only, format 2012-07-04 -> 20120704 sint32 tradeDate = 10; /// Divide by priceDenominator sint64 price = 11; OpenCloseSettlementFlag OpenCloseSettlementFlag = 12; string currency = 13; } message High { sint64 transactionTime = 9; /// Date only, format 2012-07-04 -> 20120704 sint32 tradeDate = 10; /// Divide by priceDenominator sint64 price = 11; string currency = 12; } // 24 hour rolling window message HighRolling { sint64 transactionTime = 9; /// Date only, format 2012-07-04 -> 20120704 sint32 tradeDate = 10; /// Divide by priceDenominator sint64 price = 11; string currency = 12; } message Low { sint64 transactionTime = 9; /// Date only, format 2012-07-04 -> 20120704 sint32 tradeDate = 10; /// Divide by priceDenominator sint64 price = 11; string currency = 12; } // 24 hour rolling window message LowRolling { sint64 transactionTime = 9; /// Date only, format 2012-07-04 -> 20120704 sint32 tradeDate = 10; /// Divide by priceDenominator sint64 price = 11; string currency = 12; } message Close { sint64 transactionTime = 9; /// Date only, format 2012-07-04 -> 20120704 sint32 tradeDate = 10; /// Divide by priceDenominator sint64 price = 11; string currency = 12; } message PrevClose { sint64 transactionTime = 9; /// Date only, format 2012-07-04 -> 20120704 sint32 tradeDate = 10; /// Divide by priceDenominator sint64 price = 11; string currency = 12; } message Last { sint64 transactionTime = 9; /// Date only, format 2012-07-04 -> 20120704 sint32 tradeDate = 10; /// Divide by priceDenominator sint64 price = 11; /// Divide by quantityDenominator sint64 quantity = 12; string currency = 13; /// Quantity Fractional. Divide by quantityFractionalDenominator. sint64 quantityFractional = 14; string session = 30; } /// 52 week message YearHigh { sint64 transactionTime = 9; /// Divide by priceDenominator sint64 price = 10; string currency = 11; } /// 52 week message YearLow { sint64 transactionTime = 9; /// Divide by priceDenominator sint64 price = 10; string currency = 11; } /// Total volume traded message Volume { sint64 transactionTime = 9; /// Date only, format 2012-07-04 -> 20120704 sint32 tradeDate = 10; // Total volume traded. sint64 volume = 11; /// Fractional Volume. Divide by volumeFractionalDenominator. sint64 volumeFractional = 12; } /// Total number of trades message NumberOfTrades { sint64 transactionTime = 9; /// Date only, format 2012-07-04 -> 20120704 sint32 tradeDate = 10; sint64 numberTrades = 11; } /// Total monetary value of trades message MonetaryValue { sint64 transactionTime = 9; /// Date only, format 2012-07-04 -> 20120704 sint32 tradeDate = 10; /// 2 decimals of precision sint64 value = 11; string valueCurrencyCode = 12; } //// Settlement value for futures and options markets. message Settlement { sint64 transactionTime = 9; /// Date only, format 2012-07-04 -> 20120704 sint32 tradeDate = 10; /// Divide by priceDenominator sint64 price = 11; bool preliminarySettle = 12; string currency = 13; SettlementSource settlementSource = 14; /// Used by CME ITC. string session = 15; /// True if not persisted in the EOD database. bool transient = 16; /// Reserved bool reserved = 127; } /// Open interest message OpenInterest { sint64 transactionTime = 9; // Date only, format 2012-07-04 -> 20120704 sint32 tradeDate = 10; sint64 volume = 11; } /// Market Open interest message MarketOpenInterest { sint64 transactionTime = 9; // Date only, format 2012-07-04 -> 20120704 sint32 tradeDate = 10; sint64 volume = 11; } /// Warrant band. Used by LME. message WarrantBand { sint32 tradeDate = 1; string type = 2; string productCode = 3; repeated WarrantBandItem bands = 4; } message WarrantBandItem { sint32 lowerValue = 1; sint32 upperValue = 2; sint32 participantCount = 3; } // Position band. Used by LME. message PositionBand { sint32 tradeDate = 1; string productCode = 2; repeated PositionBandItem shortBands = 3; repeated PositionBandItem longBands = 4; } message PositionBandItem { sint32 positionLowerValue = 1; sint32 positionUpperValue = 2; repeated PromptCount promptCounts = 3; } message PromptCount { string promptDateLabel = 1; sint32 expiryDate = 2; sint32 participantCount = 3; } /// Volume Weighted Average Price message Vwap { sint64 transactionTime = 9; // Date only, format 2012-07-04 -> 20120704 sint32 tradeDate = 10; sint64 vwap = 11; } /// Dividends and Income Distributions message DividendsIncomeDistributions { sint64 transactionTime = 6; string instrumentType = 7; // Corporate Action string corporateAction = 8; // Distribution Type string distributionType = 9; // Date only, format 2012-07-04 -> 20120704 sint32 payableDate = 10; sint32 recordDate = 11; sint32 exDividendDate = 12; // Cash amount of distribution sint64 amount = 13; string currencyCode = 14; repeated string notes = 15; // sint64 totalCashDistribution = 16; sint64 nonQualifiedCashDistribution = 17; sint64 qualifiedCashDistribution = 18; sint64 taxFreeCashDistribution = 19; sint64 ordinaryForeignTaxCredit = 20; sint64 qualifiedForeignTaxCredit = 21; sint64 stockDividendRatio = 22; // sint32 reinvestDate = 23; } /// Capital Distributions message CapitalDistributions { sint64 transactionTime = 8; string instrumentType = 9; // Corporate Action string corporateAction = 10; // Date only, format 2012-07-04 -> 20120704 sint32 payableDate = 11; sint32 recordDate = 12; sint32 exDate = 13; // Distributions sint64 shortTermCapitalGain = 14; sint64 longTermCapitalGain = 15; sint64 unallocatedDistributions = 16; sint64 returnOfCapital = 17; string currencyCode = 18; repeated string notes = 19; // sint32 reinvestDate = 20; } // message SharesOutstanding { sint64 sharesOutstanding = 1; sint64 transactionTime = 2; } /// Price limits. message PriceLimits { /// trade date sint32 tradeDate = 1; /// Transaction time. sint64 transactionTime = 2; /// Upper price limit for the outright tradable instrument for the current trading day sint64 upperPriceLimit = 3; /// Lower price limit for the outright tradable instrument for the current trading day sint64 lowerPriceLimit = 4; } /// The Reference Volatility Price message provides ‘raw’ strikes. LME volatilities are quoted in Delta space. message ReferenceVolatilityPrice { /// trade date sint32 tradeDate = 1; /// Identifies the ATM strike (1) or delta point (0). sint32 atm = 2; /// Indicates whether the reference volatility was created in Delta or Strike space. string surfaceDomain = 3; /// Volatility sint64 volatility = 4; /// premium sint64 premium = 5; /// Option delta for the volatility point. sint64 delta = 6; } // message NetAssetValue { sint64 netAssetValue = 1; sint64 transactionTime = 2; } /// Intra and EOD Market Summary message MarketSummary { sint64 transactionTime = 1; /// Date only, format 2012-07-04 -> 20120704 sint32 tradingDate = 2; bool startOfDay = 3; bool endOfDay = 4; ClearSet clear = 5; // InstrumentStatus instrumentStatus = 9; BestBidOffer bbo = 10; Open open = 11; High high = 12; Low low = 13; Close close = 14; PrevClose prevClose = 15; Last last = 16; Volume volume = 17; Settlement settlement = 18; OpenInterest openInterest = 19; Vwap vwap = 20; // Clears sets of fields enum ClearSet { NONE = 0; ALL = 1; BA = 2; CUSTOM_1 = 3; } /// Used by CME ITC. string session = 21; /// Used to differentiate various ddf messages. enum SummaryType { // DDF 2/1 Exchange refresh EXCHANGE_REFRESH = 0; // DDF 2/6 Live Prices refresh REFRESH_LIVE_PRICE = 1; // DDF 3/C end-of-day commodity prices EOD_COMMODITY_PRICES = 2; // DDF 3/S end-of-day stock and forex prices and volume EOD_STOCK_FOREX_PRICES = 3; // DDF 3/I end-of-day commodity volume and open interest message EOD_COMMODITY_STATS = 4; } SummaryType summaryType = 22; /// Total traded volume for the prior day. Volume prevVolume = 23; /// True if not persisted in the EOD database. bool transient = 24; Last lastTrade = 25; } message Context { repeated ContextData data = 1; repeated TracePoint tracePoints = 2; } message ContextData { string id = 1; oneof data { string vstring = 5; bytes vbytes = 6; bool vbool = 7; sint32 vsint32 = 8; sint64 vsint64 = 9; float vfloat = 10; double vdouble = 11; } } // Tracing message TracePoint { string id = 1; string componentId = 2; sint64 timestampNs = 3; int32 componentLatencyNs = 4; } // TCP replay request. message TCPHistoricalReplayRequest { int32 channel = 1; int32 resetNumber = 2; int64 sequence = 3; int32 count = 4; string requestId = 5; } /// Request for the snapshot to the Market state. message SnapshotRequest { int32 channel = 1; int32 resetNumber = 2; string requestId = 3; enum SnapshotRequestType { ALL = 0; QUOTE = 1; DEPTH = 2; VOLUME_AT_PRICE = 3; } repeated SnapshotRequestType snapshotRequestTypes = 4; } /// The VolumeAtPrice class encapsulates all of the trades throughout the day, /// and organizes a table of volume at prices. message VolumeAtPrice { sint64 marketId = 1; string symbol = 2; /// UTC Timestamp of transaction, nano seconds since Unix epoch sint64 transactionTime = 3; sint64 lastPrice = 4; sint64 lastQuantity = 5; sint64 lastCumulativeVolume = 6; /// Date only, format 2012-07-04 -> 20120704 sint32 tradeDate = 7; repeated PriceLevelVolume priceVolumes = 8; message PriceLevelVolume { sint64 price = 1; sint64 volume = 2; } } /// Open,High,Low,Close message Ohlc { sint64 marketId = 1; string symbol = 2; Open open = 3; High high = 4; Low low = 5; Close close = 6; /// Sum of volume sint64 volume = 7; /// Sum of price volume using normalized price double priceVolume = 8; sint64 numberTrades = 9; sint32 tradeDate = 10; /// UTC Timestamp, nano seconds since Unix epoch sint64 transactionTime = 11; /// Trade Ids used in this OHLC repeated string tradeIds = 12; sint64 openStartTime = 13; sint64 closeEndTime = 14; } /// Instrument Actions enum ActionType { UNKNOWN_ACTION = 0; LISTING = 1; DELISTING = 2; EXCHANGE_MOVE = 3; ALIAS_CHANGED = 4; } /// Instrument Action message InstrumentAction { sint64 transactionTime = 1; sint32 tradeDate = 2; ActionType action = 3; string message = 4; string oldAlias = 5; InstrumentDefinition instrument = 10; InstrumentDefinition newInstrument = 11; } /// Request For Quote message RequestForQuote { string quoteRequestId = 1; string symbol = 2; sint64 securityId = 3; sint32 orderQuantity = 4; sint32 quoteType = 5; sint32 side = 6; }