Specifications for Digital Data Feed Plus Last Updated: July 14, 2017 - added exchange code Overview ddfplus is a broadcast datafeed covering all North American commodities and equities exchanges. Delivery is by dedicated T1 circuit, frame relay, or Internet in a realtime or delayed format. The data elements transmitted are opening range, high, low, last, closing range, and settlement. Best bid and size, best offer and size, trade volume and open interest are included as they are reported by the exchanges. All exchange generated live quote messages (bid, ask, trade, size, etc.) will be relayed on ddfplus as live quotes with a record type 2, Sub-Record 0, 5, 6, 7, 8, or A message. All exchange generated refresh messages are relayed as a record type 2, Sub-Record 1 message, even in cases where none of the data elements are changed. Quote elements that are altered, but not reported directly by incoming exchange messages, (bids making new highs, etc.) are inserted into the data stream as record type 2, Sub-Record 2 messages. ddfplus will generate background refresh messages independently as record type 2 Sub-Record 3 and 4 messages and insert them into the data stream on a bandwidth available basis. Each symbol with a last price greater than zero will be reported at least once every hour. ddfplus will process special format, non quote content as record type 3. Examples of these message types are Market Depth, and end-of-day recap messages. Futures spread messages are bring transmitted as record type S. Most ddfplus messages are complete, containing all information necessary for processing. There is no need to keep look up tables for options strikes or base codes. File access requests and user processing logic is reduced to an absolute minimum, and will speed up throughput accordingly. The user can map each quote element directly into the database without considering the idiosyncratic rules of processing required by each exchange. New futures and options contracts are transmitted on the first report of listing by the exchange, there is no wait for overnight processing to update a database to include these items. Symbols are not altered to identify different trading sessions. Expired contracts are not transmitted, enabling the user to create accurate weekly and monthly nearest futures data without the need to maintain a list of expiration dates for purging unwanted data. Session timing and synchronization messages and the use of pseudo exchanges are eliminated, the exchange day and session is clearly identified in each message. This ensures that in the event of your ticker plant going down for loss of power or any reason, you will be sure of having a complete current database within one hour of restart. Exchange Codes A: American Stock Exchange a: American Stock Exchange Bid/Ask B: Chicago Board of Trade b: Chicago Board of Trade - Other C: Intercontinental Exchange - US c: TSX Indexes D: Nasdaq OTC BB d: National Stock Exchange of India (NSE) e: Eris Exchange E: Comex F: Mutual Funds f: Money Market Funds G: Minneapolis Grain Exchange g: NYMEX Green Exchange H: Dubai Mercantile Exchange (DME) h: EuroNext Commodities I: General Indexes i: Nasdaq Indexes (GIDS) J: New York Mercantile Exchange (NYMEX) j: NYMEX Swaps and ClearPort - Other K: Kansas City Board of Trade k: EuroNext Indexes L: Intercontinental Exchange - Europe l: Intercontinental Exchange - Other M: Chicago Mercantile Exchange m: Chicago Mercantile Exchange - Other N: New York Stock Exchange n: New York Stock Exchange Bid/Ask O: Dow Jones Index Feed o: Dow Jones Index Feed - Full Feed P: S&P Index Feed p: Dow Jones Index Feed - special license Q: NASDAQ National Market q: NASDAQ National Market Bid/Ask R: CBOE Futures Exchange (CFE) r: CBOE Index Feed S: Toronto Stock Exchange (TSX) s: London Stock Exchange (LSE) T: Barchart Sectors t: Intercontinental Exchange - LIFFE U: Nasdaq OTC PinkSheets u: Nasdaq OTC PinkSheets Bid/Ask V: TSX Venture v: Australian Stock Exchange (ASX) W: Intercontinental Exchange - Canada (WCE) w: Eurex X: BATS BZX Exchange x: Russell Index Feed y: BATS BZX Exchange Bid/Ask Y: Montreal Futures Exchange Z: Futures Market Depth Feed z: NYSE Index Feed (GIF) $: Forex !: Special Exchange 1: LME Select 2: BM&FBOVESPA Futures (BMF) 3: London Metals Exchange (LME) 4: Canadian Securities Exchange (CSE) 5: Canadian Mutual Funds 6: Economic Interest Rates 7: Economic Values 8: BM&FBOVESPA Equities 9: Intercontinental Exchange Europe Commodities Data formats Time stamp message: once per second #ccyymmddhhmmss soh:1 = start of header cc:2 = century yy:2 = year mm:2 = month dd:2 = day hh:2 = hour (24 hour clock) mm:2 = minute ss:2 = second etx:1 = end of text The start of header control character (x01) indicates the beginning of the block, whereas the end of text control character (x03) signified the end of the block. is control character (x02). Record Type 2 Messages ====================== Sub-Record 0: Price 2,, soh:1 = start of header symbol:v = exchange symbol; v indicates variable length field; stx:1 = start of text base:1 = base code for quote exchange ID:1 = exchange identifier delay time:2 = exchange requirement for delayed data price:v = live (or delayed) price; v indicates variable length field; element:1 = price bate code (bid, ask, trade, etc.) modifier:1 = price bate code modifier for open/high/low/last/close etc. used to identify prices derived from bid or ask. day/session:2 = message day and session identifier etx:1 = end of text Session is also used to indicate sale condition for stocks trades, and quote condition for stock bid/ask messages. For additional information please refer to Appendix A and Appendix B respectively. - live price message Sub-Record 5: Insert Message Last Price Exactly the same as Sub-Record 0, except generated by exchange insert message, and will normally be followed by a Sub-Record type 1 exchange refresh message. Sub-Record 7: Trade Price, Trade Price Size 2,, , Same as Sub-Record 0, except: trade price:v,size:v = trade price, trade price size. - live price message, comma delimited element and modifier are not required see Appendix A for special processing rules for stocks. Sub-Record Z: Trade Price, Trade Price Size 2,, , Same as Sub-Record 7, except: trade price:v,size:v = trade price, trade price size. - live price message, comma delimited element and modifier are not required see Appendix A for special processing rules for stocks. Sub-Record Z is the same as Sub-Record 7 but should not to be processed as a price record. Sub-Record Z is used to pass down volume on sale conditions (session) not intended to update the high, low or last values Sub-Record 8: Bid, BidSize, Ask, AskSize 2,, ,,, Same as Sub-Record 0, except: bid:v,size:v,ask:v,size:v = live bid price, bid size, ask price, ask size. - live price message, comma delimited element and modifier are not required. see Appendix B for special processing rules for stocks. Sub-Record 8 for stocks only applies to the best available bids and asks at the national level. Sub-Record E: Bid, BidSize, Ask, AskSize (stocks only) 2,, ,,, Same as Sub-Record 0, except: bid:v,size:v,ask:v,size:v = live bid price, bid size, ask price, ask size. - live price message, comma delimited element and modifier are not required. bbo:1 = national best bid offer indicator marketid:1 = market center ID of the message bidid:1 = market center ID of the national best bid askid:1 = market center ID of the national best ask Should this message have any effect on the national best bid or ask, it will automatically be preceding by a Sub-Record 8 message. This is reflected by the national best bid offer indicator. see Appendix C for special processing rules for stocks. Sub-Record A: Bid, BidSize, Ask, AskSize, Trade, TradeSize, Cumulative Volume 2,, ,,,,,, Same as Sub-Record 0, except: bid:v,size:v,ask:v,size:v,price:v,size:v,cumulative vol:v = live bid price, bid size, ask price, ask size, trade price, trade price size, cumulative volume. - live price message, comma delimited element and modifier are not required. Sub-Record 1: Exchange Generated Refresh Message 2,, ,,,,,,,,, ,,,,, Sub-Record 2 - 4: ddfplus Generated Refresh Messages ddfplus generated refresh messages: record type 2, Sub-Record 2 - 4 Sub-Record 2: Updates additional data elements changed by live message. Sub-Record 3: Cyclical database refresh for current active session(s). Sub-Record 4: Cyclical database refresh for previous closed session(s). 2,, ,,,,,,,,, ,,,,, Cyclical database refresh messages are sent at least once every hour for every contract inside our database that has traded that day. - please refer to the commodities session codes and refresh messages sections for additional information on processing of refresh messages. Sub-Record 6: Open, High, Low, Last Message. 2,, ,,,,,,,,, ,,,,, Sub-Record messages 1, 2, 3, 4 and 6 all use the same message structure. All price fields are variable length fields, and all prices should be treated as current live prices, but whereas Sub-Record 1, 2, 3 and 4 are true refresh messages, Sub-Record 6 messages should be treated and processed as live trade price messages. cur volume:v = current volume for contract prev volume:v = previous trading session volume for contract prev open int:v = previous trading session open interest for contract Previous volume and open interest records contain the previous trading days volume and open interest. Final volume and open interest for commodities is only available with the next trading day. Current volume contains the current volume as published by the exchange when available. Sub-Record 9: Market Condition Message 2, , soh:1 = start of header symbol:v =exchange symbol; v indicates variable length field; stx:1 = start of text base:1 = base code for quote exchange ID:1 = exchange identifier delay time:2 = exchange requirement for delayed data market condition:1=market condition indicator day/session:2 = message day and session identifier etx:1 = end of text The base code is set to '*' for Market Condition Message for all securities. Note: symbol can be for specific stock or commodity or specific contract month, indicating that the condition applies to a stock, a commodity or a specific commodity contract. If the symbol applies for all contracts within a commodity, ddf will append an '*' to the end of the symbol. Example: CN8 - Corn July 2008 C* - Corn All contracts C - CitiGroup, Inc Market condition indicator A = trading halt; B = trading resumption; C = quotation resumption; (1) E = end fast market; (2) F = fast market; (2) L = late market; (2) M = end late market; (2) P = post suspension/close/settle session; (2) Q = end post suspension/close/settle session; (2) 1 = opening delay (3) 4 = no open/no resume (3) 0 = No reg SHO Short Sale Price Restriction (4) 1 = Reg SHO Short Sale Price Restriction is in effect (4) 2 = Reg SHO Short Sale Price Restriction remains in effect (4) (1) - Nasdaq only (2) - Futures only (3) - Nyse/Amex only (4) - Nasdaq only Currently ddf does not transmit the reason code for the market condition, however we have left the 2 bytes deliberately empty so we can add this information to the feed at a later date, without disruption to our current users. Sub-Record F: Market Symbol Message 2,, , soh:1 = start of header symbol:v = exchange symbol; v indicates variable length field; stx:1 = start of text base:1 = base code for quote exchange ID:1 = exchange identifier delay time:2 = exchange requirement for delayed data security name:v = "security name as passed down by exchange" exc:1 = q - Nasdaq Global Select Market, g - Nasdaq Global Market, s - Nasdaq Capital Market fsi:1 = financial status indicator day/session:2 = message day and session identifier etx:1 = end of text The base code is set to '*' for Market Symbol Message for all securities. Currently this message is only utilized for Nasdaq Securities. The exc identifier is the only notification of whether a security is a Nasdaq capital market issue. The financial status indicator. For Nasdaq securities the allowable values will be as follows: C: Creations and/or Redemptions Suspended for Exchange Traded Product D: Deficient: Issuer Failed to Meet NASDAQ Continued Listing Requirements E: Delinquent: Issuer Missed Regulatory Filing Deadline Q: Bankrupt: Issuer Has Filed for Bankruptcy N: Normal (Default): Issue is not currently deficient, delinquent, or bankrupt. G: Deficient and Bankrupt H: Deficient and Delinquent J: Delinquent and Bankrupt K: Deficient, Delinquent, and Bankrupt For NYSE/AMEX securities the allowable values will be as follows: 1: Bankrupt 2: Below continuing listing standards 3: Bankrupt & below continuing listing standards 4: Late filing 5: Bankrupt & late filing 6: Below continuing listing standards & late filing 7: Bankrupt, below continuing listing standards & late filing 8: Creations and/or Redemptions Suspended for Exchange Traded Product If the code is blank then the message contains no information on the financial status of the security. Record Type S Messages ====================== Record Type S Messages are used exclusively for futures and futures options exchange traded spreads. Spreads will follow the basic same characteristics as regular futures and utilize the same messages with minor adjustments. Spreads can be a combination of Futures or Futures Options contracts. Futures Symbols will be the same as regular futures contracts. Futures Options will use the Extended Futures Options Symbology CCCMY|SSSSSC or CCCMY|SSSSSP Example: JAOV7|10050P Up to 12 bytes, where CCCMY is the futures symbol. CCC - commodity code, M - month, Y - year | - delimiter SSSSS is the strike price, left justified, zero padded to the right. C = Call, P = Put For all Sub-Record types spreads will always start s, ,,, soh:1 = start of header symbol1:v = 1st spread symbol; v indicates variable length field; stx:1 = start of text base:1 = base code for quote exchange ID:1 = exchange identifier delay time:2 = exchange requirement for delayed data spread type: 2 = spread type. nolegs: 1 = no of legs of spread symbol2:v = 2nd spread symbol symbol3:v = 3rd spread symbol (if applicable - see nolegs) symbol4:v = 4th spread symbol (if applicable - see nolegs) After the total number of symbols, determined by nolegs, there will be a comma before the price information begins, this is different from the regular processing of Sub-Records 0,5,7,8,A which do not currently have a comma before the price information, but the same for Sub-Records 1,2,3,4,6 which do have a comma before the price information. Below are the specifications for the rest of the messages which are the same defined above for Record Type 2 messages. Sub-Record: 0,5 , Sub-Record: 7 ,, Sub-Record: 8 ,,,, Sub-Record: A ,,,,,,, Sub-Record: 1,2,3,4,6 ,,,,,,,,, ,,,,, Record Type 3 Messages ====================== Market Depth: Record type <3>, Sub-Record ook 3,B<#bid><#ask>, exchange ID:1 = exchange header #bid:1 = # of bid prices in book #ask:1 = # of ask prices in book price*size:v = price*size block for each book elements Note: up to a max of 20 price*size blocks, comma separated in the book. The "*" determines the position. A-J is ask #10 thru ask #1; K-T is bid #1 thru bid #10 Note: Market Depth is available on the DDF+ realtime feed only. There are separate exchange subscriber fees for this product. End-of-Day Summaries: Record type <3>, Sub-Records S, C, I, and T. Sub-Record end-of-day stock and forex prices and volume Sub-Record end-of-day commodity prices Sub-Record yesterday commodity ind vol & open int. Sub-Record yesterday commodity composite vol & open int. End-of-day stock and forex prices and volume 3,S, ,,,,, End-of-day commodity prices 3,C, ,,,, Yesterday's commodity individual vol & open int. 3,I, ,, Yesterday's commodity total vol & open int. 3,T, ,, soh:1 = start of header symbol:v = exchange symbol; v indicates variable length field; commodity code:v = commodity code stx:1 = start of text base:1 = base code for quote exchange ID:1 = exchange identifier reserved:1 = reserved for compatibility date:10 = data date mm/dd/yyyy (month,day,year) etx:1 = end of text open, high, low, last, open int, and volume are variable length fields. Futures Symbols Overview ======================== Example: CMY or CCMY; WZ8 or CTH8 Futures Symbols are 3 or 4 bytes, where C or CC is commodity code from symbols list, M is contract month code and Y is contract year. Contract Months F: January G: February H: March J: April K: May M: June N: July Q: August U: September V: October X: November Z: December Y: Spot or cash market, contract year is 0, as in SPY0=S&P 500 index. Contract Year is the last digit of the expiration year, 2001=1, 2002=2, 2003=3, 2004=4, 2005=5, 2010=0, etc. For Futures contracts, currently only Natural Gas, that trade out more than 10-years DDF will use alternate contract months 'A','B','C','D','E','I','L','O','P','R','S','T' = 'Jan' ... 'Dec' NGZ0 - Natural Gas Dec 2010 NGT0 - Natural Gas Dec 2020 For select futures, currently only NYMEX ClearPort Swaps, exchange code "j" DDF will start utilizing a 3 character commodity code. The month and the year component will remain as before Example: CCCMY; JAOV7 Futures Options Symbols Overview ================================ CMSSSSC or CCMSSSP; SX5300P or ESU990C 8 bytes, where C or CC is commodity code from symbols list SSSS or SSS is strike price C is Put or Call letter C=call this year, D=call next year, E=call two years out, F=call 3 years out; G=call 4 years out P=put this year, Q=put next year, R=put 2 years out, S=put 3 years out, T=put 4 years out Futures Options Symbols Overview - Extended Symbology ===================================================== For exchange traded spreads and select futures options, currently only NYMEX ClearPort Swaps, exchange code "j" DDF will start utilizing a new format for options contracts. CCCMY|SSSSSC or CCCMY|SSSSSP Example: JAOV7|10050P Up to 12 bytes, where CCCMY is the futures symbol. CCC - commodity code, M - month, Y - year | - delimiter SSSSS is the strike price, left justified, zero padded to the right. C = Call, P = Put Message Day Codes ================= 1 - 9 = 1 - 9 0 = 10 A - U = 11 - 31 Commodities Session Codes (other than blank) ============================================ G = CME Globex (overnight session) R = CME Regular Trading Hours (pit session) G = NYMEX/COMEX Access Session (overnight session) R = NYMEX/COMEX Regular Trading Hours (pit session) The KCBT, CBOT & WCE do not have session codes. For all refresh messages, Sub-Records 1, 2, 3, and 4 commodities session codes are to used to differentiate between composite market prices, overnight session prices, and day session prices. If the session code is a 'R' then the message is specific to pit session pricing. If you are not collating "pit session only prices" then disregard refresh messages with a session code 'R'. If applicable ddfplus will send session code 'G' for overnight refresh messages. These messages will immediately be followed by a composite refresh message with a blank session code. Refresh Messages ================ All refresh messages contain current live price information. Sub-Record 1 - exchange generated refresh messages are normally passed down by an exchange when a contract makes a new high or low for the day. They can also used by the exchange for corrections. Sub-Record 2 - ddfplus generated refresh messages are passed down whenever a contract opens or makes a new high or new low price for the session. If a market has two sessions and the contract makes a new composite high then ddfplus will send down two messages for that contract, the first of which will apply to only the day or overnight session and the second for the composite session. Sub-Record 3 - ddfplus generated cyclical refresh message for the current market session are passed down once every hour for every record in the database. If a market has two sessions and the contract is still trading for the current day then ddfplus will send down two messages for that contract, the first of which will apply to only the day session and the second for the composite session. When the market is trading for the next days "overnight trading" session, for that message the session code will be blank and the day code will be adjusted to reflect the next trading day. Sub-Record 4 - ddfplus generated cyclical refresh message for previous trading sessions are passed down once every hour until midnight Chicago time. This message provides the previous session summary message. If a market has two sessions and the contract is currently trading for the next day session then ddfplus will send out two messages. The first of which will apply to only the day session that has closed and the second for the composite session that has just closed. Squeezed between these messages will be a Sub-Record 3 message with the current active trading session. Notes: - Previous Volume and Previous Open Interest only applies for commodities. - Bid and Ask values are not included for previous closed sessions on commodities, Sub-Record 4. - Previous Volume, Previous Open Interest and Current Volume are not passed down for a pit session specific refresh message (session code 'R') as the information technically applies to the composite session, which is normally passed down immediately after the pit session refresh message. - Previous Volume and Previous Open Interest are not passed down for next session refresh messages as the information technically applies to the previous, previous session, but current Volume will be included. Next session refresh messages are messages for contracts settling tomorrow. Base Codes ========== 2 = 1/8 = one digit fraction, range is 0 - 7 3 = 1/16 = two digit fraction, range is 0 - 15 4 = 1/32 = two digit fraction, range is 0 - 31 5 = 1/64 = two digit fraction, range is 0 - 63 6 = 1/128 = three digit fraction, range is 0 - 127 7 = 1/256 = three digit fraction, range is 0 - 255 8 = 0 = no decimal places, a whole number 9 = 0.1 = one decimal place A = 0.01 = two decimal places B = 0.001 = three decimal places C = 0.0001 = four decimal places D = 0.00001 = five decimal places E = 0.000001 = six decimal places F = 0.0000001 = seven decimal places * = unchanged = transmitted by ddfplus with size only data note: Base codes in ddfplus messages indicate the incoming message precision only. Display requirements are independent of the incoming base code. Five year notes (FV) are transmitted with base code "5" indicating 64ths, but are normally displayed in 32nds and halves. 30 year bond (US) options also carry base code "5", but these are traditionally displayed in 64ths. Quote Element Codes =================== 0 = trade 1 = ask 2 = bid 3 = close; 31 is offer; 32 is bid 4 = 2nd of closing range; 41 is offer; 42 is bid 5 = high; 52 is high made by valid bid 6 = low; 61 is low made by valid offer 7 = volume; 71 = yesterday's volume; 76 = today's cumulative volume A = open; A1 is offer; A2 is bid B = 2nd of opening range; B1 is offer; B2 is bid C = open interest; C1 = yesterday's open interest D = settlement d = settlement (during market trading) E = previous F = ETF informational message S = 52 Week High or Low Values X = cancelled trade message note: volume and open interest are calculated once per day for the previous day, cumulative volume is reported for electronic sessions by some exchanges. Quote Element Modifiers ======================= 0 = last 1 = ask 2 = bid < = bid size = = ask size > = trade size S = etf shares outstanding N = etf net asset value H = high (52-week high) L = low (52-week low) note: bid, ask and trade size is only reported for electronic sessions by some exchanges. note: S and N are only available with quote element code F Appendix A - ddfplus Processing of Special Sale Conditions ========================================================== Record 2, Sub-Record 7 messages relay trade reports with price and incremental volume. The session byte on the record will indicate the sale condition. The sale condition is important because all trades messages count towards the daily volume, but not all trades should be processed as the last price. The different processing rules are explained below. To assist in processing of sale conditions ddfplus will always supply a refresh message each time a quote element other than last price is changed. NYSE/AMEX - processing rules. The following sale conditions are live trade messages and should be processed as such. @ - Regular Sale E - Automatic Execution F - Inter-market Sweep Order K - Rule 127 (NYSE Only) or Rule 155 (NYSE MKT only) X - Cross Trade 5 - Market Center Reopening Trade 6 - Market Center Closing Trade 9 - Corrected Consolidated Close Price as per Listing Market The following sale conditions are trade messages that will update the high/low values, but will only update the last price if they are the first trade of the day. L - Sold Last (Late Reporting) O - Market Center Opening Trade P - Prior Reference Price Z - Sold (out of sequence) 4 - Derivatively Priced Nasdaq UTP - processing rules. The following sale conditions are live trade messages and should be processed as such. @ - Regular Sale A - Acquisition B - Bunched Trade D - Distribution F - InterMarket Sweep K - Rule 155 Trade (AMEX) L - Sold Last O - Opening Prints S - Split Trade X - Cross Trade Y - Yellow Flag Regular Trade 1 - Stopped Stock (Regular Trade) 5 - Re-Opening Prints 6 - Closing Prints 9 - Corrected Consolidated Close (per listing market) The following sale conditions are trade messages that will update the high/low values, but will only update the last price if they are the first trade of the day. G - Bunched Sold Trade P - Prior Reference Price Z - Sold (out of Sequence) 4 - Derivatively Priced ' ' - blank session codes are valid messages, and typically used to refresh and other general non-trade Equities messages. Form T trades (NYSE/AMEX/Nasdaq/OTC) Common to all exchanges are the pre and post market trades also known as Form T trades, which are passed down with session code 'T' and session code 'U'. Form T trades do not update the daily open, high, low or last fields, and are normally presented as their own field element. T - Pre/Post Market Trade U - Pre/Post Market Trade - Sold out of Sequence The ddfplus refresh message sent after every Form T trade does not include the Form T trade price, but it will contain the regular session o/h/l/c prices. Appendix B - ddfplus Processing of Special Quote Conditions ========================================================== Record 2, Sub-Record 8 messages relay bid, bid size, ask and ask size. The session byte on the record will indicate the quote condition. Please note the quote condition is not the same as the sale condition, or session code for commodities, and should not be treated as such. ddfplus takes and processes all quote conditions, and unlike the sale condition all quote conditions are value for display on quote boards. For complete information on what the quote condition means for NYSE/AMEX securities please refer to: http://www.ddfplus.com/docs/ddfplus_feedspecs_cqs_quotecondition.txt For complete information on what the quote condition means for Nasdaq securities please refer to: http://www.ddfplus.com/docs/ddfplus_feedspecs_uqdf_quotecondition.txt Appendix C - ddfplus Record type:2 Sub-Record: E message ======================================================= This message contains all the participants information for Nasdaq/NYSE and AMEX bid/ask messages. Should one of the participant messages qualify as the national best bid or ask ("BBO") ddf will automatically send down a subsequent bid/ask Sub-Record 8 message containing the national best available bid and ask messages. ddf will include the market participant ID for the national best bid and best ask within the Sub-Record E message as fields and . Value for the BBO are as follows: 0: this message has no effect on the national BBO 1: the national BBO cannot be calculated 2 or 3: a new national bbo was generated as a result of this message 4: current message contains national bbo information For anything other than a BBO value of '0' the BBO indicator will be reflected by the subsequent Sub-Record 8 message. The rules for calculating the national BBO are as follows: The highest available bid or lowest available ask. If two participants have the same bid or ask, then the participant with the greatest size. If both participants have the same size then the first posted. The available list of Market Participant ID's are: Nasdaq - Market Center Originator ID A: NYSE/AMEX B: Boston Stock Exchange C: National Stock Exchange D: National Association of Securities Dealer (NASD ADF) E: Market Independent (SIP) I: International Securities Exchange M: Chicago Stock Exchange P: Archipelago/Pacific Stock Exchange Q: Nasdaq (nasdaq only) W: CBOE Stock Exchange X: NASDAQ OMX PSX (PSX) Y: BATS Y Exchange, Inc. (BATY) J: EDGA Exchange, Inc. (EDGA) K: EDGX Exchange, Inc. (EDGX) Nyse/Amex - Participant ID A: American Stock Exchange B: Boston Stock Exchange C: National Stock Exchange D: National Association of Securities Dealer (NASD) I: International Securities Exchange M: Chicago Stock Exchange N: New York Stock Exchange P: Archipelago/Pacific Stock Exchange T: Nasdaq Stock Exchange S: Consolidated Tape System W: CBOE Stock Exchange X: NASDAQ OMX PSX (PSX) Z: BATS Exchange ddfplus rules for special processing of stocks ============================================== Whenever possible ddfplus will retain the exchange symbol for a given security, however there are circumstances, detailed below, where ddfplus has to convert the incoming exchange symbol to conform to our standards. Preferred stocks are notated on the ddfplus feed with a "-" within the symbol. The exchange will pass down a lower case "p" which ddfplus will convert to a "-". Example: Ford Motor Corp Preferred "FpS" can be viewed as "F-S" Warrant stocks are notated with a ".W" at the end of the symbol. The exchange will pass down "/WS" which ddfplus will convert to ".W". Example: Conseco Warrant "CNO/WS" can be viewed as "CNO.W" Class A and Class B shares are noted with a ".A" or ".B" at the end of the symbol. The exchange will send down "/A" or "/B" which ddfplus will convert to a period and then a letter following the ticker symbol. Example: Berkshire Hathaway Class A "BRK/A" can be viewed as "BRK.A" Example: Viacom Class B "VIA/B" can be viewed as "VIA.B" Copyright (C) 2014 ddfplus. All Rights Reserved.