From d42a24fc4a8875e0bd3566df7d20bcf3b132041f Mon Sep 17 00:00:00 2001 From: Ruchir Vani <32844383+ruchirvaninasdaq@users.noreply.github.com> Date: Tue, 3 Jan 2023 09:29:55 -0500 Subject: [PATCH 01/23] Adding heartbeat message Adding heartbeat message to NFN schema --- ncdssdk/src/main/resources/schemas/NFN.avsc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ncdssdk/src/main/resources/schemas/NFN.avsc b/ncdssdk/src/main/resources/schemas/NFN.avsc index 5233a41..83197c6 100644 --- a/ncdssdk/src/main/resources/schemas/NFN.avsc +++ b/ncdssdk/src/main/resources/schemas/NFN.avsc @@ -1 +1 @@ -[{ "type" : "record", "name" : "AdminDailyStatistics", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"}, {"name":"MutualFundMediaList", "type" : "string"}, {"name":"MutualFundSupplementalList", "type" : "string"}, {"name":"MutualFundReporting", "type" : "string"}, {"name":"MoneyMarketFundMediaList", "type" : "string"}, {"name":"MoneyMarketFundSupplementalList", "type" : "string"}, {"name":"MoneyMarketFundReporting", "type" : "string"}, {"name":"DebtUITList", "type" : "string"}, {"name":"DebtUITReporting", "type" : "string"}, {"name":"EquityUITList", "type" : "string"}, {"name":"EquityUITReporting", "type" : "string"}, {"name":"StructuredProductList", "type" : "string"}, {"name":"StructuredProductReporting", "type" : "string"}, {"name":"AnnuityList", "type" : "string"}, {"name":"AnnuityReporting", "type" : "string"}, {"name":"AIPList", "type" : "string"}, {"name":"AIPReporting", "type" : "string"}, {"name":"NextSharesList", "type" : "string"}, {"name":"NextSharesReporting", "type" : "string"}, {"name":"CollectiveInvestmentTrustList", "type" : "string"}, {"name":"CollectiveInvestmentTrustReporting", "type" : "string"}, {"name":"ManagedAccountsList", "type" : "string"}, {"name":"ManagedAccountsReporting", "type" : "string"}, {"name":"SeparateAccountsList", "type" : "string"}, {"name":"SeparateAccountsReporting", "type" : "string"}, {"name":"HedgeFundList", "type" : "string"}, {"name":"HedgeFundReporting", "type" : "string"}, {"name":"DemandDepositAccountList", "type" : "string"}, {"name":"DemandDepositAccountReporting", "type" : "string"}, {"name":"DataServiceSpinCount", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "AdminGeneral", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"}, {"name":"SystemAlert", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "AdminSymbolDirectory", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"}, {"name":"InstrumentTypeTier", "type" : "string"}, {"name":"InstrumentCode", "type" : "string"}, {"name":"Symbol", "type" : "string"}, {"name":"PricingFrequency", "type" : "string"}, {"name":"InstrumentName", "type" : "string"}, {"name":"ExchangeCodeForListedInstruments", "type" : "string"}, {"name":"ExchangeSymbolForListedInstruments", "type" : "string"}, {"name":"Currency", "type" : "string"}, {"name":"InstrumentRegistration", "type" : "string"}, {"name":"ModelPortfolioFlag", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "AdminSymbolDirectoryExpandedInstrumentCode", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "ControlEndOfDay", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "ControlEndOfRetransmissionRequests", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "ControlEndOfSummarySpin", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "ControlEndOfTransmission", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "ControlLineIntegrity", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "ControlMessageSequenceNumberReset", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "ControlSessionClose", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "ControlSessionOpen", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "ControlStartOfDay", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "ControlStartOfSummarySpin", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "ValuationMessageDistributions", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"}, {"name":"InstrumentTypeTier", "type" : "string"}, {"name":"Symbol", "type" : "string"}, {"name":"Action", "type" : "string"}, {"name":"ShortTermCapitalGain", "type" : "string"}, {"name":"LongTermCapitalGain", "type" : "string"}, {"name":"UnAllocatedDistributions", "type" : "string"}, {"name":"ROC", "type" : "string"}, {"name":"Currency", "type" : "string"}, {"name":"DstPaymentDate", "type" : "string"}, {"name":"DstRecordDate", "type" : "string"}, {"name":"DstExDate", "type" : "string"}, {"name":"DstReinvestDate", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "ValuationMessageDividends", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"}, {"name":"InstrumentTypeTier", "type" : "string"}, {"name":"Symbol", "type" : "string"}, {"name":"Action", "type" : "string"}, {"name":"CashDistributionType", "type" : "string"}, {"name":"CashDistributionTotal", "type" : "string"}, {"name":"CashDistributionNonQualified", "type" : "string"}, {"name":"CashDistributionQualified", "type" : "string"}, {"name":"CashDistributionTaxFree", "type" : "string"}, {"name":"TaxCreditOrdinaryForeign", "type" : "string"}, {"name":"TaxCreditQualifiedForeign", "type" : "string"}, {"name":"StockDividendRatio", "type" : "string"}, {"name":"Currency", "type" : "string"}, {"name":"DivPaymentDate", "type" : "string"}, {"name":"DivRecordDate", "type" : "string"}, {"name":"DivExDate", "type" : "string"}, {"name":"DivReinvestDate", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "ValuationMessageGeneral", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"}, {"name":"InstrumentTypeTier", "type" : "string"}, {"name":"Symbol", "type" : "string"}, {"name":"ReportingType", "type" : "string"}, {"name":"Footnotes", "type" : "string"}, {"name":"NAV", "type" : "string"}, {"name":"OfferPrice", "type" : "string"}, {"name":"MarketPrice", "type" : "string"}, {"name":"RedemptionPrice", "type" : "string"}, {"name":"WrapPrice", "type" : "string"}, {"name":"TotalNetAssets", "type" : "string"}, {"name":"CurrentYield", "type" : "string"}, {"name":"CurrentYieldDirection", "type" : "string"}, {"name":"EstimatedLongTermReturn", "type" : "string"}, {"name":"EstimatedLongTermReturnDirection", "type" : "string"}, {"name":"AccruedInterest", "type" : "string"}, {"name":"DailyDividendFactor", "type" : "string"}, {"name":"DailyDividendAdjustmentIndicator", "type" : "string"}, {"name":"Currency", "type" : "string"}, {"name":"EntryDate", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "ValuationMessageMoneyMarkets", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"}, {"name":"InstrumentTypeTier", "type" : "string"}, {"name":"Symbol", "type" : "string"}, {"name":"ReportingType", "type" : "string"}, {"name":"Footnotes", "type" : "string"}, {"name":"AverageMaturity", "type" : "string"}, {"name":"AverageLife", "type" : "string"}, {"name":"NAV", "type" : "string"}, {"name":"YieldGross7Day", "type" : "string"}, {"name":"YieldGross7DayDirection", "type" : "string"}, {"name":"YieldSubsidized7Day", "type" : "string"}, {"name":"YieldSubsidized7DayDirection", "type" : "string"}, {"name":"YieldEffectiveAnnualized7Day", "type" : "string"}, {"name":"YieldEffectiveAnnualized7DayDirection", "type" : "string"}, {"name":"Yield30Day", "type" : "string"}, {"name":"Yield30DayDirection", "type" : "string"}, {"name":"Yield30DayDate", "type" : "string"}, {"name":"TotalNetAssets", "type" : "string"}, {"name":"DailyDividendFactor", "type" : "string"}, {"name":"DailyDividendAdjustmentIndicator", "type" : "string"}, {"name":"Currency", "type" : "string"}, {"name":"EntryDate", "type" : "string"}, {"name":"CalculationTime", "type" : "string"} ], "version" : "1" }, "null"] \ No newline at end of file +[ {"name": "Heartbeat","type": "record","namespace": "com.nasdaq.ncds.nfn","fields": [{"name": "TimeStamp","type": "long"}], "version" : "1"},{ "type" : "record", "name" : "AdminDailyStatistics", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"}, {"name":"MutualFundMediaList", "type" : "string"}, {"name":"MutualFundSupplementalList", "type" : "string"}, {"name":"MutualFundReporting", "type" : "string"}, {"name":"MoneyMarketFundMediaList", "type" : "string"}, {"name":"MoneyMarketFundSupplementalList", "type" : "string"}, {"name":"MoneyMarketFundReporting", "type" : "string"}, {"name":"DebtUITList", "type" : "string"}, {"name":"DebtUITReporting", "type" : "string"}, {"name":"EquityUITList", "type" : "string"}, {"name":"EquityUITReporting", "type" : "string"}, {"name":"StructuredProductList", "type" : "string"}, {"name":"StructuredProductReporting", "type" : "string"}, {"name":"AnnuityList", "type" : "string"}, {"name":"AnnuityReporting", "type" : "string"}, {"name":"AIPList", "type" : "string"}, {"name":"AIPReporting", "type" : "string"}, {"name":"NextSharesList", "type" : "string"}, {"name":"NextSharesReporting", "type" : "string"}, {"name":"CollectiveInvestmentTrustList", "type" : "string"}, {"name":"CollectiveInvestmentTrustReporting", "type" : "string"}, {"name":"ManagedAccountsList", "type" : "string"}, {"name":"ManagedAccountsReporting", "type" : "string"}, {"name":"SeparateAccountsList", "type" : "string"}, {"name":"SeparateAccountsReporting", "type" : "string"}, {"name":"HedgeFundList", "type" : "string"}, {"name":"HedgeFundReporting", "type" : "string"}, {"name":"DemandDepositAccountList", "type" : "string"}, {"name":"DemandDepositAccountReporting", "type" : "string"}, {"name":"DataServiceSpinCount", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "AdminGeneral", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"}, {"name":"SystemAlert", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "AdminSymbolDirectory", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"}, {"name":"InstrumentTypeTier", "type" : "string"}, {"name":"InstrumentCode", "type" : "string"}, {"name":"Symbol", "type" : "string"}, {"name":"PricingFrequency", "type" : "string"}, {"name":"InstrumentName", "type" : "string"}, {"name":"ExchangeCodeForListedInstruments", "type" : "string"}, {"name":"ExchangeSymbolForListedInstruments", "type" : "string"}, {"name":"Currency", "type" : "string"}, {"name":"InstrumentRegistration", "type" : "string"}, {"name":"ModelPortfolioFlag", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "AdminSymbolDirectoryExpandedInstrumentCode", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "ControlEndOfDay", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "ControlEndOfRetransmissionRequests", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "ControlEndOfSummarySpin", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "ControlEndOfTransmission", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "ControlLineIntegrity", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "ControlMessageSequenceNumberReset", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "ControlSessionClose", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "ControlSessionOpen", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "ControlStartOfDay", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "ControlStartOfSummarySpin", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "ValuationMessageDistributions", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"}, {"name":"InstrumentTypeTier", "type" : "string"}, {"name":"Symbol", "type" : "string"}, {"name":"Action", "type" : "string"}, {"name":"ShortTermCapitalGain", "type" : "string"}, {"name":"LongTermCapitalGain", "type" : "string"}, {"name":"UnAllocatedDistributions", "type" : "string"}, {"name":"ROC", "type" : "string"}, {"name":"Currency", "type" : "string"}, {"name":"DstPaymentDate", "type" : "string"}, {"name":"DstRecordDate", "type" : "string"}, {"name":"DstExDate", "type" : "string"}, {"name":"DstReinvestDate", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "ValuationMessageDividends", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"}, {"name":"InstrumentTypeTier", "type" : "string"}, {"name":"Symbol", "type" : "string"}, {"name":"Action", "type" : "string"}, {"name":"CashDistributionType", "type" : "string"}, {"name":"CashDistributionTotal", "type" : "string"}, {"name":"CashDistributionNonQualified", "type" : "string"}, {"name":"CashDistributionQualified", "type" : "string"}, {"name":"CashDistributionTaxFree", "type" : "string"}, {"name":"TaxCreditOrdinaryForeign", "type" : "string"}, {"name":"TaxCreditQualifiedForeign", "type" : "string"}, {"name":"StockDividendRatio", "type" : "string"}, {"name":"Currency", "type" : "string"}, {"name":"DivPaymentDate", "type" : "string"}, {"name":"DivRecordDate", "type" : "string"}, {"name":"DivExDate", "type" : "string"}, {"name":"DivReinvestDate", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "ValuationMessageGeneral", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"}, {"name":"InstrumentTypeTier", "type" : "string"}, {"name":"Symbol", "type" : "string"}, {"name":"ReportingType", "type" : "string"}, {"name":"Footnotes", "type" : "string"}, {"name":"NAV", "type" : "string"}, {"name":"OfferPrice", "type" : "string"}, {"name":"MarketPrice", "type" : "string"}, {"name":"RedemptionPrice", "type" : "string"}, {"name":"WrapPrice", "type" : "string"}, {"name":"TotalNetAssets", "type" : "string"}, {"name":"CurrentYield", "type" : "string"}, {"name":"CurrentYieldDirection", "type" : "string"}, {"name":"EstimatedLongTermReturn", "type" : "string"}, {"name":"EstimatedLongTermReturnDirection", "type" : "string"}, {"name":"AccruedInterest", "type" : "string"}, {"name":"DailyDividendFactor", "type" : "string"}, {"name":"DailyDividendAdjustmentIndicator", "type" : "string"}, {"name":"Currency", "type" : "string"}, {"name":"EntryDate", "type" : "string"} ], "version" : "1" },{ "type" : "record", "name" : "ValuationMessageMoneyMarkets", "namespace" : "com.nasdaq.ncds.nfn", "fields" : [ {"name":"MessageCategory", "type" : "string"}, {"name":"MessageType", "type" : "string"}, {"name":"SessionIdentifier", "type" : "string"}, {"name":"RetransmissionRequester", "type" : "string"}, {"name":"MessageSequenceNumber", "type" : "string"}, {"name":"OriginatorId", "type" : "string"}, {"name":"MessageDateTime", "type" : "string"}, {"name":"TestSymbolFlag", "type" : "string"}, {"name":"InstrumentTypeTier", "type" : "string"}, {"name":"Symbol", "type" : "string"}, {"name":"ReportingType", "type" : "string"}, {"name":"Footnotes", "type" : "string"}, {"name":"AverageMaturity", "type" : "string"}, {"name":"AverageLife", "type" : "string"}, {"name":"NAV", "type" : "string"}, {"name":"YieldGross7Day", "type" : "string"}, {"name":"YieldGross7DayDirection", "type" : "string"}, {"name":"YieldSubsidized7Day", "type" : "string"}, {"name":"YieldSubsidized7DayDirection", "type" : "string"}, {"name":"YieldEffectiveAnnualized7Day", "type" : "string"}, {"name":"YieldEffectiveAnnualized7DayDirection", "type" : "string"}, {"name":"Yield30Day", "type" : "string"}, {"name":"Yield30DayDirection", "type" : "string"}, {"name":"Yield30DayDate", "type" : "string"}, {"name":"TotalNetAssets", "type" : "string"}, {"name":"DailyDividendFactor", "type" : "string"}, {"name":"DailyDividendAdjustmentIndicator", "type" : "string"}, {"name":"Currency", "type" : "string"}, {"name":"EntryDate", "type" : "string"}, {"name":"CalculationTime", "type" : "string"} ], "version" : "1" }, "null"] \ No newline at end of file From ad42708e0f2e30172aa0eef390c27d40ddf1d1dd Mon Sep 17 00:00:00 2001 From: Ruchir Vani <32844383+ruchirvaninasdaq@users.noreply.github.com> Date: Tue, 3 Jan 2023 13:24:59 -0500 Subject: [PATCH 02/23] Added schema for digital assets Added schema for digital assets --- .../schemas/NASDAQ-DIGITAL-ASSETS.avsc | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 ncdssdk/src/main/resources/schemas/NASDAQ-DIGITAL-ASSETS.avsc diff --git a/ncdssdk/src/main/resources/schemas/NASDAQ-DIGITAL-ASSETS.avsc b/ncdssdk/src/main/resources/schemas/NASDAQ-DIGITAL-ASSETS.avsc new file mode 100644 index 0000000..c1b9407 --- /dev/null +++ b/ncdssdk/src/main/resources/schemas/NASDAQ-DIGITAL-ASSETS.avsc @@ -0,0 +1,96 @@ +[ + { + "type":"record", + "name":"OrderEvent", + "namespace":"com.amber.spot", + "fields":[ + { + "name":"exchange", + "type": ["null", "string"], + "default": null + }, + { + "name":"pair", + "type": ["null", "string"], + "default": null + }, + { + "name":"timestamp", + "type": ["null", "long"], + "default": null + }, + { + "name":"timestampNanoseconds", + "type": ["null", "long"], + "default": null + }, + { + "name":"price", + "type": ["null", "double"], + "default": null + }, + { + "name":"volume", + "type": ["null", "double"], + "default": null + }, + { + "name":"isBid", + "type": ["null", "boolean"], + "default": null + }, + { + "name":"sequence", + "type": ["null", "long"], + "default": null + } + ] + }, + { + "type":"record", + "name":"Trade", + "namespace":"com.amber.spot", + "fields":[ + { + "name":"exchange", + "type": ["null", "string"], + "default": null + }, + { + "name":"pair", + "type": ["null", "string"], + "default": null + }, + { + "name":"timestamp", + "type": ["null", "long"], + "default": null + }, + { + "name":"timestampNanoseconds", + "type": ["null", "long"], + "default": null + }, + { + "name":"tradeId", + "type": ["null", "long"], + "default": null + }, + { + "name":"price", + "type": ["null", "double"], + "default": null + }, + { + "name":"volume", + "type": ["null", "double"], + "default": null + }, + { + "name":"isBid", + "type": ["null", "boolean"], + "default": null + } + ] + } +] \ No newline at end of file From ecfb2b5bed5fa634a2e097f108acd2386164b35c Mon Sep 17 00:00:00 2001 From: Ruchir Vani <32844383+ruchirvaninasdaq@users.noreply.github.com> Date: Tue, 31 Jan 2023 17:05:42 -0500 Subject: [PATCH 03/23] Bug fix for using timeout settings Bug fix for using timeout settings --- .../main/python/ncdsclient/consumer/NasdaqKafkaAvroConsumer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ncdssdk/src/main/python/ncdsclient/consumer/NasdaqKafkaAvroConsumer.py b/ncdssdk/src/main/python/ncdsclient/consumer/NasdaqKafkaAvroConsumer.py index 0d85d6e..90e41f6 100644 --- a/ncdssdk/src/main/python/ncdsclient/consumer/NasdaqKafkaAvroConsumer.py +++ b/ncdssdk/src/main/python/ncdsclient/consumer/NasdaqKafkaAvroConsumer.py @@ -105,7 +105,7 @@ def get_kafka_consumer(self, stream_name, timestamp=None): self.logger.debug( "offset: " + str(topic_partition.offset) + ", timestamp: " + str(timestamp)) offsets_for_times = kafka_consumer.offsets_for_times( - [topic_partition], self.kafka_cfg.TIMEOUT) + [topic_partition], self.kafka_props.get(self.kafka_config_loader.TIMEOUT)) except Exception as e: self.logger.exception(e) sys.exit(0) From 65e5e6507f8a1302c5965bf6fdf0bc0a5071a24b Mon Sep 17 00:00:00 2001 From: Ruchir Vani <32844383+ruchirvaninasdaq@users.noreply.github.com> Date: Thu, 16 Feb 2023 12:27:51 -0500 Subject: [PATCH 04/23] Fixing handling of null key for NFN Fixing handling of null key for NFN --- .../src/main/python/ncdsclient/NCDSSession.py | 31 +++++++------------ 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/ncdssdk_client/src/main/python/ncdsclient/NCDSSession.py b/ncdssdk_client/src/main/python/ncdsclient/NCDSSession.py index 42fd5a4..fa46ca8 100644 --- a/ncdssdk_client/src/main/python/ncdsclient/NCDSSession.py +++ b/ncdssdk_client/src/main/python/ncdsclient/NCDSSession.py @@ -31,6 +31,7 @@ def __init__(self, cmd): self.logger = logging.getLogger(__name__) self.logger = logging.getLogger(__name__) + self.ncds_client = None def main(self): self.security_cfg = load_auth_properties(self.auth_props_file) @@ -40,16 +41,14 @@ def main(self): cmd_to_validate = ValidateInput(self.cmd) cmd_to_validate.validate_user_input() - ncds_client = None - try: + self.ncds_client = NCDSClient(self.security_cfg, self.kafka_cfg) if self.test_option == "TOP": self.top_cmd() elif self.test_option == "SCHEMA": - ncds_client = NCDSClient(self.security_cfg, self.kafka_cfg) # Dump the Schema for the self.topic - schema = ncds_client.get_schema_for_topic(self.topic) + schema = self.ncds_client.get_schema_for_topic(self.topic) print("Schema for the Topic:" + self.topic) if schema: print(schema) @@ -57,12 +56,11 @@ def main(self): print(" Access to topic is not granted ") elif self.test_option == "GETMSG": - ncds_client = NCDSClient(self.security_cfg, self.kafka_cfg) print("Finding the message") if "auto.offset.reset" in self.kafka_cfg and self.kafka_cfg["auto.offset.reset"] == "latest": print("Need to get run GETMSG with 'earliest' offset") sys.exit(0) - msg = ncds_client.get_sample_messages( + msg = self.ncds_client.get_sample_messages( self.topic, self.message_name, False) if msg is not None: print(msg) @@ -70,17 +68,15 @@ def main(self): print("Message Not Found ...") elif self.test_option == "GETALLMSGS": - ncds_client = NCDSClient(self.security_cfg, self.kafka_cfg) print("Finding the messages") if "auto.offset.reset" in self.kafka_cfg and self.kafka_cfg["auto.offset.reset"] == "latest": print("Need to run GETMSG with 'earliest' offset") sys.exit(0) - ncds_client.get_sample_messages( + self.ncds_client.get_sample_messages( self.topic, self.message_name, True) elif self.test_option == "TOPICS": - ncds_client = NCDSClient(self.security_cfg, self.kafka_cfg) - self.topics = ncds_client.list_topics_for_client() + self.topics = self.ncds_client.list_topics_for_client() print("List of streams available on Nasdaq Cloud Data Service:") for self.topic in self.topics: print(self.topic) @@ -94,10 +90,9 @@ def main(self): logging.exception(e) def top_cmd(self): - ncds_client = NCDSClient(self.security_cfg, self.kafka_cfg) numOfRecords = max(10, min(int(self.num_top_messages), 999)) - records = ncds_client.top_messages( - self.topic) if not self.timestamp else ncds_client.top_messages(self.topic, self.timestamp) + records = self.ncds_client.top_messages( + self.topic) if not self.timestamp else self.ncds_client.top_messages(self.topic, self.timestamp) print("Top " + str(numOfRecords) + " Records for the Topic: " + self.topic) if records: @@ -113,9 +108,8 @@ def top_cmd(self): print("Access to topic is not granted") def cont_stream_cmd(self): - ncds_client = NCDSClient(self.security_cfg, self.kafka_cfg) - consumer = ncds_client.ncds_kafka_consumer( - self.topic) if not self.timestamp else ncds_client.ncds_kafka_consumer(self.topic, self.timestamp) + consumer = self.ncds_client.ncds_kafka_consumer( + self.topic) if not self.timestamp else self.ncds_client.ncds_kafka_consumer(self.topic, self.timestamp) try: while True: @@ -140,9 +134,8 @@ def filter_stream_cmd(self): if self.msgnames is not None: msgname_set = set(self.msgnames.split(",")) - ncds_client = NCDSClient(self.security_cfg, self.kafka_cfg) - consumer = ncds_client.ncds_kafka_consumer( - self.topic) if not self.timestamp else ncds_client.ncds_kafka_consumer(self.topic, self.timestamp) + consumer = self.ncds_client.ncds_kafka_consumer( + self.topic) if not self.timestamp else self.ncds_client.ncds_kafka_consumer(self.topic, self.timestamp) try: while True: From 7d8b9de0ad9773fa06392d00ed45c81269dc777c Mon Sep 17 00:00:00 2001 From: Ruchir Vani <32844383+ruchirvaninasdaq@users.noreply.github.com> Date: Thu, 16 Feb 2023 12:54:40 -0500 Subject: [PATCH 05/23] Handling null key Handling null key --- ncdssdk_client/src/main/python/ncdsclient/NCDSSession.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ncdssdk_client/src/main/python/ncdsclient/NCDSSession.py b/ncdssdk_client/src/main/python/ncdsclient/NCDSSession.py index fa46ca8..09063a5 100644 --- a/ncdssdk_client/src/main/python/ncdsclient/NCDSSession.py +++ b/ncdssdk_client/src/main/python/ncdsclient/NCDSSession.py @@ -102,7 +102,7 @@ def top_cmd(self): for i, record in enumerate(records): if i >= numOfRecords: break - print("key: " + record.key() + "\n" + + print("key: " + str(record.key()) + "\n" + "value: " + str(record.value())) else: print("Access to topic is not granted") From f5a0911cf7cdd078fab9d9d43bd0c4e1190473b7 Mon Sep 17 00:00:00 2001 From: Ruchir Vani Date: Fri, 19 May 2023 14:33:51 -0400 Subject: [PATCH 06/23] Adding hot-fix Adding hot-fix for schema reader and continuous stream --- ncdssdk/src/main/python/ncdsclient/internal/ReadSchemaTopic.py | 2 +- ncdssdk_client/src/main/python/ncdsclient/NCDSSession.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ncdssdk/src/main/python/ncdsclient/internal/ReadSchemaTopic.py b/ncdssdk/src/main/python/ncdsclient/internal/ReadSchemaTopic.py index 7e7449b..f326431 100644 --- a/ncdssdk/src/main/python/ncdsclient/internal/ReadSchemaTopic.py +++ b/ncdssdk/src/main/python/ncdsclient/internal/ReadSchemaTopic.py @@ -37,6 +37,7 @@ def read_schema(self, topic): latest_record = None num_messages = self.kafka_props[self.kafka_config_loader.NUM_MESSAGES] timeout = self.kafka_props[self.kafka_config_loader.TIMEOUT] + latest_record = None while True: schema_messages = schema_consumer.consume( num_messages, timeout) @@ -46,7 +47,6 @@ def read_schema(self, topic): try: msg_val = message.value() - latest_record = None if "name" in msg_val and msg_val["name"] == topic: latest_record = message if latest_record and 'schema' in msg_val: diff --git a/ncdssdk_client/src/main/python/ncdsclient/NCDSSession.py b/ncdssdk_client/src/main/python/ncdsclient/NCDSSession.py index 09063a5..73e9e5d 100644 --- a/ncdssdk_client/src/main/python/ncdsclient/NCDSSession.py +++ b/ncdssdk_client/src/main/python/ncdsclient/NCDSSession.py @@ -113,7 +113,7 @@ def cont_stream_cmd(self): try: while True: - message = consumer.poll(self.kafka_cfg[self.kafka_config_loader.NUM_MESSAGES]) + message = consumer.poll(self.kafka_cfg[self.kafka_config_loader.TIMEOUT]) if message is None: print(f"No Records Found for the Topic: {self.topic}") else: From f301c0e1a2c8244ea5ce7f0736ea48dbb8aa6f20 Mon Sep 17 00:00:00 2001 From: trunghaonguyennasdaq <112718033+trunghaonguyennasdaq@users.noreply.github.com> Date: Fri, 19 May 2023 15:05:40 -0400 Subject: [PATCH 07/23] Update ReadSchemaTopic.py --- ncdssdk/src/main/python/ncdsclient/internal/ReadSchemaTopic.py | 1 - 1 file changed, 1 deletion(-) diff --git a/ncdssdk/src/main/python/ncdsclient/internal/ReadSchemaTopic.py b/ncdssdk/src/main/python/ncdsclient/internal/ReadSchemaTopic.py index f326431..370bda2 100644 --- a/ncdssdk/src/main/python/ncdsclient/internal/ReadSchemaTopic.py +++ b/ncdssdk/src/main/python/ncdsclient/internal/ReadSchemaTopic.py @@ -37,7 +37,6 @@ def read_schema(self, topic): latest_record = None num_messages = self.kafka_props[self.kafka_config_loader.NUM_MESSAGES] timeout = self.kafka_props[self.kafka_config_loader.TIMEOUT] - latest_record = None while True: schema_messages = schema_consumer.consume( num_messages, timeout) From ce315f4ae2e22eaaae17816cfa2141d8d56e6dd4 Mon Sep 17 00:00:00 2001 From: trunghaonguyennasdaq <112718033+trunghaonguyennasdaq@users.noreply.github.com> Date: Tue, 27 Jun 2023 14:33:16 -0400 Subject: [PATCH 08/23] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a4b2833..b6ba655 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,7 @@ Nasdaq Data Link provides a modern and efficient method of delivery for realtime ### Options #### Nasdaq U.S. Derivatives - [Nasdaq Smart Options](http://nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/NCDSSmartOptions.pdf) +- [Nasdaq Greeks and Vols](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/GreeksandVols_Specification.pdf) ### Mutual Funds - [Nasdaq Fund Network](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/NFNDS_NCDS.pdf) ### News From e652a9695b2d0bea3db1003d817a9abbdf0328d9 Mon Sep 17 00:00:00 2001 From: trunghaonguyennasdaq <112718033+trunghaonguyennasdaq@users.noreply.github.com> Date: Fri, 30 Jun 2023 09:18:27 -0400 Subject: [PATCH 09/23] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b6ba655..0ee9b3a 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ Nasdaq Data Link provides a modern and efficient method of delivery for realtime ### Options #### Nasdaq U.S. Derivatives - [Nasdaq Smart Options](http://nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/NCDSSmartOptions.pdf) -- [Nasdaq Greeks and Vols](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/GreeksandVols_Specification.pdf) +- [Nasdaq Options Greeks and Implied Volatility](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/GreeksandVols_Specification.pdf) ### Mutual Funds - [Nasdaq Fund Network](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/NFNDS_NCDS.pdf) ### News From 82c2388bd85cf2e0ddc8bb2601f813a835faecaa Mon Sep 17 00:00:00 2001 From: trunghaonguyennasdaq <112718033+trunghaonguyennasdaq@users.noreply.github.com> Date: Fri, 7 Jul 2023 12:58:48 -0400 Subject: [PATCH 10/23] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 0ee9b3a..22eede0 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,8 @@ Nasdaq Data Link provides a modern and efficient method of delivery for realtime - [PSX Last Sale](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/PLS_Cloud.pdf) #### Nasdaq Canada - [Nasdaq Canada Basic](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/Nasdaq-Basic-Canada-Cloud-Specification.pdf) +#### OTC Markets +- [OTC Markets](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/OTCM-cloud.pdf) ### Indexes & ETPs - [Global Index Data Service](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/GIDS_Cloud.pdf) ### Options From a7ffb34979b534aafeacc55c8ee10ea0c9e32e7a Mon Sep 17 00:00:00 2001 From: trunghaonguyennasdaq <112718033+trunghaonguyennasdaq@users.noreply.github.com> Date: Mon, 14 Aug 2023 09:28:47 -0400 Subject: [PATCH 11/23] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 22eede0..4e11192 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Nasdaq Data Link provides a modern and efficient method of delivery for realtime #### Nasdaq Canada - [Nasdaq Canada Basic](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/Nasdaq-Basic-Canada-Cloud-Specification.pdf) #### OTC Markets -- [OTC Markets](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/OTCM-cloud.pdf) +- [OTC Markets](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/OTCM-cloud.pdf) (real-time & delayed) ### Indexes & ETPs - [Global Index Data Service](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/GIDS_Cloud.pdf) ### Options From 79d4070012161d250449f33947f4a0e40b7404db Mon Sep 17 00:00:00 2001 From: Ruchir Vani Date: Thu, 4 Jan 2024 15:09:43 -0500 Subject: [PATCH 12/23] release-0.5.x release-0.5.x --- .../consumer/NasdaqKafkaAvroConsumer.py | 6 +- .../ncdsclient/internal/ReadSchemaTopic.py | 8 +- .../internal/utils/SeekToMidnight.py | 12 +-- .../src/main/python/ncdsclient/NCDSSession.py | 33 +++++--- requirements.in | 1 + requirements.txt | 1 + setup.py | 80 +++++++++---------- 7 files changed, 75 insertions(+), 66 deletions(-) diff --git a/ncdssdk/src/main/python/ncdsclient/consumer/NasdaqKafkaAvroConsumer.py b/ncdssdk/src/main/python/ncdsclient/consumer/NasdaqKafkaAvroConsumer.py index 90e41f6..089142a 100644 --- a/ncdssdk/src/main/python/ncdsclient/consumer/NasdaqKafkaAvroConsumer.py +++ b/ncdssdk/src/main/python/ncdsclient/consumer/NasdaqKafkaAvroConsumer.py @@ -93,7 +93,7 @@ def get_kafka_consumer(self, stream_name, timestamp=None): if auto_offset_cfg == "earliest" or auto_offset_cfg == "smallest" or auto_offset_cfg == "beginning": self.logger.debug( f"Auto offset reset config set to: {auto_offset_cfg}") - return SeekToMidnight.seek_to_midnight_at_past_day(kafka_consumer, topic_partition, 0) + return SeekToMidnight.seek_to_midnight_at_past_day(kafka_consumer, topic_partition, 0, self.kafka_props.get(self.kafka_config_loader.TIMEOUT)) else: return kafka_consumer @@ -105,7 +105,7 @@ def get_kafka_consumer(self, stream_name, timestamp=None): self.logger.debug( "offset: " + str(topic_partition.offset) + ", timestamp: " + str(timestamp)) offsets_for_times = kafka_consumer.offsets_for_times( - [topic_partition], self.kafka_props.get(self.kafka_config_loader.TIMEOUT)) + [topic_partition], self.kafka_cfg.TIMEOUT) except Exception as e: self.logger.exception(e) sys.exit(0) @@ -132,7 +132,7 @@ def get_consumer(self, avro_schema, stream_name): a :class:`.KafkaAvroConsumer` instance with a key and value deserializer set through the avro_schema parameter """ if 'group.id' not in self.kafka_props: - self.kafka_props[self.kafka_config_loader.GROUP_ID_CONFIG] = f'{self.client_ID}_{stream_name}_{datetime.datetime.today().day}' + self.kafka_props[self.kafka_config_loader.GROUP_ID_CONFIG] = f'{self.client_ID}' return KafkaAvroConsumer(self.kafka_props, avro_schema) def get_schema_for_topic(self, topic): diff --git a/ncdssdk/src/main/python/ncdsclient/internal/ReadSchemaTopic.py b/ncdssdk/src/main/python/ncdsclient/internal/ReadSchemaTopic.py index 370bda2..773a763 100644 --- a/ncdssdk/src/main/python/ncdsclient/internal/ReadSchemaTopic.py +++ b/ncdssdk/src/main/python/ncdsclient/internal/ReadSchemaTopic.py @@ -32,8 +32,7 @@ def __init__(self): def read_schema(self, topic): auth_config_loader = AuthenticationConfigLoader() - schema_consumer = self.get_consumer( - "Control-" + auth_config_loader.get_client_id(self.security_props)) + schema_consumer = self.get_consumer(auth_config_loader.get_client_id(self.security_props)) latest_record = None num_messages = self.kafka_props[self.kafka_config_loader.NUM_MESSAGES] timeout = self.kafka_props[self.kafka_config_loader.TIMEOUT] @@ -46,6 +45,7 @@ def read_schema(self, topic): try: msg_val = message.value() + latest_record = None if "name" in msg_val and msg_val["name"] == topic: latest_record = message if latest_record and 'schema' in msg_val: @@ -105,7 +105,7 @@ def get_consumer(self, client_id): self.kafka_props = KafkaConfigLoader.load_test_config() self.kafka_props[self.kafka_config_loader.AUTO_OFFSET_RESET_CONFIG] = 'earliest' - self.kafka_props[self.kafka_config_loader.GROUP_ID_CONFIG] = f'{client_id}1' + self.kafka_props[self.kafka_config_loader.GROUP_ID_CONFIG] = f'{client_id}' kafka_avro_consumer = KafkaAvroConsumer( self.kafka_props, ctrl_msg_schema) @@ -115,7 +115,7 @@ def get_consumer(self, client_id): kafka_avro_consumer.assign([topic_partition]) - return SeekToMidnight.seek_to_midnight_at_past_day(kafka_avro_consumer, topic_partition, 7) + return SeekToMidnight.seek_to_midnight_at_past_day(kafka_avro_consumer, topic_partition, 6, self.kafka_props[self.kafka_config_loader.TIMEOUT]) def internal_schema(self, topic): try: diff --git a/ncdssdk/src/main/python/ncdsclient/internal/utils/SeekToMidnight.py b/ncdssdk/src/main/python/ncdsclient/internal/utils/SeekToMidnight.py index 1816204..9173409 100644 --- a/ncdssdk/src/main/python/ncdsclient/internal/utils/SeekToMidnight.py +++ b/ncdssdk/src/main/python/ncdsclient/internal/utils/SeekToMidnight.py @@ -1,19 +1,20 @@ import logging import sys from confluent_kafka import OFFSET_BEGINNING, OFFSET_INVALID -from datetime import datetime, date, timedelta, time +from datetime import datetime, timedelta +import pytz logger = logging.getLogger(__name__) -def seek_to_midnight_at_past_day(kafka_avro_consumer, topic_partition, num_days_ago=0): +def seek_to_midnight_at_past_day(kafka_avro_consumer, topic_partition, num_days_ago=0, timeout=10): topic_partition.offset = get_timestamp_at_midnight(num_days_ago) logger.debug( f"Num days ago: {num_days_ago}. Setting partition offset to timestamp: {topic_partition.offset}") try: logger.debug(f"topic partition: {topic_partition}") offsets_for_times = kafka_avro_consumer.offsets_for_times( - [topic_partition], timeout=5) + [topic_partition], timeout=timeout) except Exception as e: logger.exception(e) sys.exit(0) @@ -34,6 +35,5 @@ def seek_to_midnight_at_past_day(kafka_avro_consumer, topic_partition, num_days_ def get_timestamp_at_midnight(num_days_ago=0): - past_day = date.today()-timedelta(days=num_days_ago) - midnight = datetime.combine(past_day, time.min) - return int(midnight.timestamp() * 1000) + midnight = datetime.now(pytz.timezone('America/New_York')).replace(hour=0, minute=0, second=0, microsecond=0) - timedelta(days=num_days_ago) + return int(midnight.timestamp() * 1000) \ No newline at end of file diff --git a/ncdssdk_client/src/main/python/ncdsclient/NCDSSession.py b/ncdssdk_client/src/main/python/ncdsclient/NCDSSession.py index 73e9e5d..e41c1aa 100644 --- a/ncdssdk_client/src/main/python/ncdsclient/NCDSSession.py +++ b/ncdssdk_client/src/main/python/ncdsclient/NCDSSession.py @@ -31,7 +31,6 @@ def __init__(self, cmd): self.logger = logging.getLogger(__name__) self.logger = logging.getLogger(__name__) - self.ncds_client = None def main(self): self.security_cfg = load_auth_properties(self.auth_props_file) @@ -41,14 +40,16 @@ def main(self): cmd_to_validate = ValidateInput(self.cmd) cmd_to_validate.validate_user_input() + ncds_client = None + try: - self.ncds_client = NCDSClient(self.security_cfg, self.kafka_cfg) if self.test_option == "TOP": self.top_cmd() elif self.test_option == "SCHEMA": + ncds_client = NCDSClient(self.security_cfg, self.kafka_cfg) # Dump the Schema for the self.topic - schema = self.ncds_client.get_schema_for_topic(self.topic) + schema = ncds_client.get_schema_for_topic(self.topic) print("Schema for the Topic:" + self.topic) if schema: print(schema) @@ -56,11 +57,12 @@ def main(self): print(" Access to topic is not granted ") elif self.test_option == "GETMSG": + ncds_client = NCDSClient(self.security_cfg, self.kafka_cfg) print("Finding the message") if "auto.offset.reset" in self.kafka_cfg and self.kafka_cfg["auto.offset.reset"] == "latest": print("Need to get run GETMSG with 'earliest' offset") sys.exit(0) - msg = self.ncds_client.get_sample_messages( + msg = ncds_client.get_sample_messages( self.topic, self.message_name, False) if msg is not None: print(msg) @@ -68,15 +70,17 @@ def main(self): print("Message Not Found ...") elif self.test_option == "GETALLMSGS": + ncds_client = NCDSClient(self.security_cfg, self.kafka_cfg) print("Finding the messages") if "auto.offset.reset" in self.kafka_cfg and self.kafka_cfg["auto.offset.reset"] == "latest": print("Need to run GETMSG with 'earliest' offset") sys.exit(0) - self.ncds_client.get_sample_messages( + ncds_client.get_sample_messages( self.topic, self.message_name, True) elif self.test_option == "TOPICS": - self.topics = self.ncds_client.list_topics_for_client() + ncds_client = NCDSClient(self.security_cfg, self.kafka_cfg) + self.topics = ncds_client.list_topics_for_client() print("List of streams available on Nasdaq Cloud Data Service:") for self.topic in self.topics: print(self.topic) @@ -90,9 +94,10 @@ def main(self): logging.exception(e) def top_cmd(self): + ncds_client = NCDSClient(self.security_cfg, self.kafka_cfg) numOfRecords = max(10, min(int(self.num_top_messages), 999)) - records = self.ncds_client.top_messages( - self.topic) if not self.timestamp else self.ncds_client.top_messages(self.topic, self.timestamp) + records = ncds_client.top_messages( + self.topic) if not self.timestamp else ncds_client.top_messages(self.topic, self.timestamp) print("Top " + str(numOfRecords) + " Records for the Topic: " + self.topic) if records: @@ -108,12 +113,13 @@ def top_cmd(self): print("Access to topic is not granted") def cont_stream_cmd(self): - consumer = self.ncds_client.ncds_kafka_consumer( - self.topic) if not self.timestamp else self.ncds_client.ncds_kafka_consumer(self.topic, self.timestamp) + ncds_client = NCDSClient(self.security_cfg, self.kafka_cfg) + consumer = ncds_client.ncds_kafka_consumer( + self.topic) if not self.timestamp else ncds_client.ncds_kafka_consumer(self.topic, self.timestamp) try: while True: - message = consumer.poll(self.kafka_cfg[self.kafka_config_loader.TIMEOUT]) + message = consumer.poll(self.kafka_cfg[self.kafka_config_loader.NUM_MESSAGES]) if message is None: print(f"No Records Found for the Topic: {self.topic}") else: @@ -134,8 +140,9 @@ def filter_stream_cmd(self): if self.msgnames is not None: msgname_set = set(self.msgnames.split(",")) - consumer = self.ncds_client.ncds_kafka_consumer( - self.topic) if not self.timestamp else self.ncds_client.ncds_kafka_consumer(self.topic, self.timestamp) + ncds_client = NCDSClient(self.security_cfg, self.kafka_cfg) + consumer = ncds_client.ncds_kafka_consumer( + self.topic) if not self.timestamp else ncds_client.ncds_kafka_consumer(self.topic, self.timestamp) try: while True: diff --git a/requirements.in b/requirements.in index c8e595a..091acfc 100644 --- a/requirements.in +++ b/requirements.in @@ -4,3 +4,4 @@ oauthlib>=3.1.0,<4 requests>=2.25.1,<3 requests-oauthlib>=1.3.0,<2 avro>=1.10.2,<2 +pytz>=2023.3 diff --git a/requirements.txt b/requirements.txt index b267212..60e74d9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -34,3 +34,4 @@ urllib3==1.26.6 # via requests zipp==3.4.1 # via importlib-metadata +pytz==2023.3 \ No newline at end of file diff --git a/setup.py b/setup.py index ed583b6..a3fba7c 100644 --- a/setup.py +++ b/setup.py @@ -1,40 +1,40 @@ -from setuptools import setup, find_packages -import pathlib - -here = pathlib.Path(__file__).parent.resolve() - -# Get long description from README -long_description = (here / 'README.md').read_text(encoding='utf-8') - -setup( - name='ncdssdk', - version='0.4.0', - description='A Python SDK for developing applications to access the NCDS API', - long_description=long_description, - long_description_content_type='text/markdown', - author='Nasdaq', - classifiers=[ - # Indicate who your project is intended for - 'Intended Audience :: Developers', - 'Topic :: Software Development :: Build Tools', - - # Pick your license as you wish - 'License :: OSI Approved :: Apache Software License', - - # Specify the Python versions you support here. In particular, ensure - # that you indicate you support Python 3. These classifiers are *not* - # checked by 'pip install'. See instead 'python_requires' below. - 'Programming Language :: Python :: 3.9', - ], - keywords='Nasdaq, NCDS, ncdssdk', - packages=find_packages(), - python_requires='>=3.9, <4', - install_requires=open("requirements.in").readlines(), - - include_package_data=True, - # We could possibly use entry_points parameter with console_scripts here to specify the NCDSSession script - - project_urls={ # Optional - 'Source': 'https://github.com/Nasdaq/NasdaqCloudDataService-SDK-Python', - }, -) \ No newline at end of file +from setuptools import setup, find_packages +import pathlib + +here = pathlib.Path(__file__).parent.resolve() + +# Get long description from README +long_description = (here / 'README.md').read_text(encoding='utf-8') + +setup( + name='ncdssdk', + version='0.5.0', + description='A Python SDK for developing applications to access the NCDS API', + long_description=long_description, + long_description_content_type='text/markdown', + author='Nasdaq', + classifiers=[ + # Indicate who your project is intended for + 'Intended Audience :: Developers', + 'Topic :: Software Development :: Build Tools', + + # Pick your license as you wish + 'License :: OSI Approved :: Apache Software License', + + # Specify the Python versions you support here. In particular, ensure + # that you indicate you support Python 3. These classifiers are *not* + # checked by 'pip install'. See instead 'python_requires' below. + 'Programming Language :: Python :: 3.9', + ], + keywords='Nasdaq, NCDS, ncdssdk', + packages=find_packages(), + python_requires='>=3.9, <4', + install_requires=open("requirements.in").readlines(), + + include_package_data=True, + # We could possibly use entry_points parameter with console_scripts here to specify the NCDSSession script + + project_urls={ # Optional + 'Source': 'https://github.com/Nasdaq/NasdaqCloudDataService-SDK-Python', + }, +) From a7a96c5244bbf890c77f870d07ad643b8f5c394a Mon Sep 17 00:00:00 2001 From: Ruchir Vani <32844383+ruchirvaninasdaq@users.noreply.github.com> Date: Thu, 14 Mar 2024 16:55:08 -0400 Subject: [PATCH 13/23] Update ReadSchemaTopic.py Update ReadSchemaTopic.py --- ncdssdk/src/main/python/ncdsclient/internal/ReadSchemaTopic.py | 1 - 1 file changed, 1 deletion(-) diff --git a/ncdssdk/src/main/python/ncdsclient/internal/ReadSchemaTopic.py b/ncdssdk/src/main/python/ncdsclient/internal/ReadSchemaTopic.py index 773a763..6b72dd8 100644 --- a/ncdssdk/src/main/python/ncdsclient/internal/ReadSchemaTopic.py +++ b/ncdssdk/src/main/python/ncdsclient/internal/ReadSchemaTopic.py @@ -45,7 +45,6 @@ def read_schema(self, topic): try: msg_val = message.value() - latest_record = None if "name" in msg_val and msg_val["name"] == topic: latest_record = message if latest_record and 'schema' in msg_val: From 6b57b309bc97c78cc1d9fc788de731e56bf342b5 Mon Sep 17 00:00:00 2001 From: Ruchir Vani <32844383+ruchirvaninasdaq@users.noreply.github.com> Date: Tue, 26 Mar 2024 17:12:46 -0400 Subject: [PATCH 14/23] Update NasdaqKafkaAvroConsumer.py Using kafka config --- .../main/python/ncdsclient/consumer/NasdaqKafkaAvroConsumer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ncdssdk/src/main/python/ncdsclient/consumer/NasdaqKafkaAvroConsumer.py b/ncdssdk/src/main/python/ncdsclient/consumer/NasdaqKafkaAvroConsumer.py index 089142a..328b18c 100644 --- a/ncdssdk/src/main/python/ncdsclient/consumer/NasdaqKafkaAvroConsumer.py +++ b/ncdssdk/src/main/python/ncdsclient/consumer/NasdaqKafkaAvroConsumer.py @@ -105,7 +105,7 @@ def get_kafka_consumer(self, stream_name, timestamp=None): self.logger.debug( "offset: " + str(topic_partition.offset) + ", timestamp: " + str(timestamp)) offsets_for_times = kafka_consumer.offsets_for_times( - [topic_partition], self.kafka_cfg.TIMEOUT) + [topic_partition], self.kafka_props.get(self.kafka_config_loader.TIMEOUT)) except Exception as e: self.logger.exception(e) sys.exit(0) From 5e9964268f779b5717f56d69bb39af3525027b9f Mon Sep 17 00:00:00 2001 From: trunghaonguyennasdaq <112718033+trunghaonguyennasdaq@users.noreply.github.com> Date: Tue, 21 May 2024 11:57:55 -0400 Subject: [PATCH 15/23] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4e11192..e84f568 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Nasdaq Data Link provides a modern and efficient method of delivery for realtime - [Nasdaq Basic](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/NasdaqBasic-Cloud.pdf) (real-time & delayed) - [Nasdaq Last Sale+](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/NLSPlus-cloud.pdf) (real-time & delayed) - [Nasdaq TotalView](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/Totalview-ITCH-cloud.pdf) -- [Nasdaq Consolidated Quotes and Trades](https://github.com/Nasdaq/CloudDataService/raw/master/specs/CQT-cloud.pdf) (real-time & delayed) +- [Nasdaq Consolidated Quotes and Trades](https://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/CQT-cloud.pdf) (real-time & delayed) #### Nasdaq BX - [BX BBO](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/BX_BBO_Cloud.pdf) - [BX Last Sale](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/BLS_Cloud.pdf) From ee7f381aa47d1d8d37faca0310f0f9ccf95547d7 Mon Sep 17 00:00:00 2001 From: johnnag Date: Thu, 12 Jun 2025 01:47:02 +0800 Subject: [PATCH 16/23] Update README.md added new specs --- README.md | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index e84f568..30eb927 100644 --- a/README.md +++ b/README.md @@ -5,16 +5,22 @@ Nasdaq Data Link provides a modern and efficient method of delivery for realtime # Products Currently Available ### Equities #### The Nasdaq Stock Market -- [Nasdaq Basic](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/NasdaqBasic-Cloud.pdf) (real-time & delayed) -- [Nasdaq Last Sale+](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/NLSPlus-cloud.pdf) (real-time & delayed) +- [Nasdaq Basic v1](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/NasdaqBasic-Cloud.pdf) (real-time & delayed) +- [Nasdaq Basic v2](https://assets.ctfassets.net/mx0rke14e5yt/v98L9JONLPyiFWpNZ1Qnv/799904397161ba3662c8cf7e071abb9a/NasdaqBBO_Cloud-2025.pdf) (real-time & delayed) +- [Nasdaq Last Sale+ v3](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/NLSPlus-cloud.pdf) (real-time & delayed) +- [Nasdaq Last Sale+ v4](https://assets.ctfassets.net/mx0rke14e5yt/56DTTqad89Rok21eYI7Ogw/3994fee598fc6910573b327b94493418/NasdaqLastSale_Cloud-2025.pdf) (real-time & delayed) - [Nasdaq TotalView](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/Totalview-ITCH-cloud.pdf) - [Nasdaq Consolidated Quotes and Trades](https://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/CQT-cloud.pdf) (real-time & delayed) #### Nasdaq BX -- [BX BBO](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/BX_BBO_Cloud.pdf) -- [BX Last Sale](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/BLS_Cloud.pdf) +- [BX BBO v1](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/BX_BBO_Cloud.pdf) +- [BX BBO v2](https://assets.ctfassets.net/mx0rke14e5yt/v98L9JONLPyiFWpNZ1Qnv/799904397161ba3662c8cf7e071abb9a/NasdaqBBO_Cloud-2025.pdf) +- [BX Last Sale v3](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/BLS_Cloud.pdf) +- [BX Last Sale v4](https://assets.ctfassets.net/mx0rke14e5yt/56DTTqad89Rok21eYI7Ogw/3994fee598fc6910573b327b94493418/NasdaqLastSale_Cloud-2025.pdf) #### Nasdaq PSX -- [PSX BBO](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/PSX_BBO_Cloud.pdf) -- [PSX Last Sale](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/PLS_Cloud.pdf) +- [PSX BBO v1](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/PSX_BBO_Cloud.pdf) +- [PSX BBO v2](https://assets.ctfassets.net/mx0rke14e5yt/v98L9JONLPyiFWpNZ1Qnv/799904397161ba3662c8cf7e071abb9a/NasdaqBBO_Cloud-2025.pdf) +- [PSX Last Sale v3](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/PLS_Cloud.pdf) +- [PSX Last Sale v4](https://assets.ctfassets.net/mx0rke14e5yt/56DTTqad89Rok21eYI7Ogw/3994fee598fc6910573b327b94493418/NasdaqLastSale_Cloud-2025.pdf) #### Nasdaq Canada - [Nasdaq Canada Basic](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/Nasdaq-Basic-Canada-Cloud-Specification.pdf) #### OTC Markets From 47a81f5cdd286aa9052330c8d1c0aeb7a9ce3c5d Mon Sep 17 00:00:00 2001 From: johnnag Date: Sat, 14 Jun 2025 00:02:01 +0800 Subject: [PATCH 17/23] Update README.md update specs links --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 30eb927..b9d4c82 100644 --- a/README.md +++ b/README.md @@ -29,12 +29,13 @@ Nasdaq Data Link provides a modern and efficient method of delivery for realtime - [Global Index Data Service](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/GIDS_Cloud.pdf) ### Options #### Nasdaq U.S. Derivatives -- [Nasdaq Smart Options](http://nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/NCDSSmartOptions.pdf) +- [Nasdaq Smart Options]() - [Nasdaq Options Greeks and Implied Volatility](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/GreeksandVols_Specification.pdf) ### Mutual Funds - [Nasdaq Fund Network](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/NFNDS_NCDS.pdf) ### News -- [Financial News](http://nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/MTNewswires-cloud.pdf) +- [Financial News - MT Newswires](http://nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/MTNewswires-cloud.pdf) +- [Benzinga Market Newswires](https://data.nasdaq.com/databases/BENZ) # Items To Note From b186c94c1d0f66b6d057ec033a69115b23a12268 Mon Sep 17 00:00:00 2001 From: johnnag Date: Tue, 15 Jul 2025 23:40:29 +0800 Subject: [PATCH 18/23] Update README.md added ngvus basic --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index b9d4c82..e604de1 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,7 @@ Nasdaq Data Link provides a modern and efficient method of delivery for realtime #### Nasdaq U.S. Derivatives - [Nasdaq Smart Options]() - [Nasdaq Options Greeks and Implied Volatility](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/GreeksandVols_Specification.pdf) +- [Nasdaq Options Greeks and Implied Volatility Powered by Nasdaq Basic](https://assets.ctfassets.net/mx0rke14e5yt/1l9llsZZEv5eFKQ6D40ONr/456bc9655d5e93de6a9c8f332bbea36b/Streaming_Greeks_and_Vols_Powered_by_Nasdaq_Basic_Specifications.pdf) ### Mutual Funds - [Nasdaq Fund Network](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/NFNDS_NCDS.pdf) ### News From 403d3ddbecc0564ca2171900dd8337fcfcd9af87 Mon Sep 17 00:00:00 2001 From: johnnag Date: Tue, 15 Jul 2025 23:46:39 +0800 Subject: [PATCH 19/23] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e604de1..d8cc6c8 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ Nasdaq Data Link provides a modern and efficient method of delivery for realtime #### Nasdaq U.S. Derivatives - [Nasdaq Smart Options]() - [Nasdaq Options Greeks and Implied Volatility](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/GreeksandVols_Specification.pdf) -- [Nasdaq Options Greeks and Implied Volatility Powered by Nasdaq Basic](https://assets.ctfassets.net/mx0rke14e5yt/1l9llsZZEv5eFKQ6D40ONr/456bc9655d5e93de6a9c8f332bbea36b/Streaming_Greeks_and_Vols_Powered_by_Nasdaq_Basic_Specifications.pdf) +- [Nasdaq Options Greeks and Implied Volatility Powered by Nasdaq Basic](https://assets.ctfassets.net/mx0rke14e5yt/5TJxpG0Cjk1tNUIRP4rZ86/5d77161ead15d746872d2ff17ba6ac06/Greeks_and_Vols_Powered_by_Basic_Streaming_Specs.pdf) ### Mutual Funds - [Nasdaq Fund Network](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/NFNDS_NCDS.pdf) ### News From d1e9195f6475e29ec89bf5186d7dc647fdf3896e Mon Sep 17 00:00:00 2001 From: johnnag Date: Thu, 31 Jul 2025 23:25:53 +0800 Subject: [PATCH 20/23] Update README.md added bruce --- README.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d8cc6c8..327c804 100644 --- a/README.md +++ b/README.md @@ -6,10 +6,10 @@ Nasdaq Data Link provides a modern and efficient method of delivery for realtime ### Equities #### The Nasdaq Stock Market - [Nasdaq Basic v1](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/NasdaqBasic-Cloud.pdf) (real-time & delayed) -- [Nasdaq Basic v2](https://assets.ctfassets.net/mx0rke14e5yt/v98L9JONLPyiFWpNZ1Qnv/799904397161ba3662c8cf7e071abb9a/NasdaqBBO_Cloud-2025.pdf) (real-time & delayed) +- [Nasdaq Basic v2](https://assets.ctfassets.net/mx0rke14e5yt/7EKUREHBRJYUj35F5TEWYr/c43c31cc7dbaaefdbcfbe7381acc763f/NasdaqBBO_Cloud-2025.pdf)(real-time & delayed) - [Nasdaq Last Sale+ v3](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/NLSPlus-cloud.pdf) (real-time & delayed) -- [Nasdaq Last Sale+ v4](https://assets.ctfassets.net/mx0rke14e5yt/56DTTqad89Rok21eYI7Ogw/3994fee598fc6910573b327b94493418/NasdaqLastSale_Cloud-2025.pdf) (real-time & delayed) -- [Nasdaq TotalView](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/Totalview-ITCH-cloud.pdf) +- [Nasdaq Last Sale+ v4](https://assets.ctfassets.net/mx0rke14e5yt/2O7Da5RPfo9Xnha7sCRjHh/799cedca497685290a3c972bb45fa5bc/NewLastSale_Cloud-2025-1.pdf) (real-time & delayed) +- [Nasdaq TotalView](https://assets.ctfassets.net/mx0rke14e5yt/2nwLafPib6CgIbFu63K4zo/71480a8ab9bb6f97190f056da7133c2e/Nasdaq_ITCH_Products_2025-1.pdf) - [Nasdaq Consolidated Quotes and Trades](https://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/CQT-cloud.pdf) (real-time & delayed) #### Nasdaq BX - [BX BBO v1](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/BX_BBO_Cloud.pdf) @@ -25,6 +25,10 @@ Nasdaq Data Link provides a modern and efficient method of delivery for realtime - [Nasdaq Canada Basic](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/Nasdaq-Basic-Canada-Cloud-Specification.pdf) #### OTC Markets - [OTC Markets](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/OTCM-cloud.pdf) (real-time & delayed) +### Bruce Markets +- [Bruce Best Bid and Offer](https://assets.ctfassets.net/mx0rke14e5yt/7EKUREHBRJYUj35F5TEWYr/c43c31cc7dbaaefdbcfbe7381acc763f/NasdaqBBO_Cloud-2025.pdf) +- [Bruce Last Sale](https://assets.ctfassets.net/mx0rke14e5yt/2O7Da5RPfo9Xnha7sCRjHh/799cedca497685290a3c972bb45fa5bc/NewLastSale_Cloud-2025-1.pdf) +- [Bruce TotalView](https://assets.ctfassets.net/mx0rke14e5yt/2nwLafPib6CgIbFu63K4zo/71480a8ab9bb6f97190f056da7133c2e/Nasdaq_ITCH_Products_2025-1.pdf) ### Indexes & ETPs - [Global Index Data Service](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/GIDS_Cloud.pdf) ### Options From 94d644efcc7aab93ce34cbc3a27d1153f9407c87 Mon Sep 17 00:00:00 2001 From: johnnag Date: Thu, 31 Jul 2025 23:26:11 +0800 Subject: [PATCH 21/23] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 327c804..84dd6f5 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ Nasdaq Data Link provides a modern and efficient method of delivery for realtime - [Nasdaq Canada Basic](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/Nasdaq-Basic-Canada-Cloud-Specification.pdf) #### OTC Markets - [OTC Markets](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/OTCM-cloud.pdf) (real-time & delayed) -### Bruce Markets +#### Bruce Markets - [Bruce Best Bid and Offer](https://assets.ctfassets.net/mx0rke14e5yt/7EKUREHBRJYUj35F5TEWYr/c43c31cc7dbaaefdbcfbe7381acc763f/NasdaqBBO_Cloud-2025.pdf) - [Bruce Last Sale](https://assets.ctfassets.net/mx0rke14e5yt/2O7Da5RPfo9Xnha7sCRjHh/799cedca497685290a3c972bb45fa5bc/NewLastSale_Cloud-2025-1.pdf) - [Bruce TotalView](https://assets.ctfassets.net/mx0rke14e5yt/2nwLafPib6CgIbFu63K4zo/71480a8ab9bb6f97190f056da7133c2e/Nasdaq_ITCH_Products_2025-1.pdf) From b34410b92b4eaf44104bc12d06ef7ce63220142c Mon Sep 17 00:00:00 2001 From: johnnag Date: Thu, 31 Jul 2025 23:49:49 +0800 Subject: [PATCH 22/23] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 84dd6f5..dcea359 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ Nasdaq Data Link provides a modern and efficient method of delivery for realtime #### Bruce Markets - [Bruce Best Bid and Offer](https://assets.ctfassets.net/mx0rke14e5yt/7EKUREHBRJYUj35F5TEWYr/c43c31cc7dbaaefdbcfbe7381acc763f/NasdaqBBO_Cloud-2025.pdf) - [Bruce Last Sale](https://assets.ctfassets.net/mx0rke14e5yt/2O7Da5RPfo9Xnha7sCRjHh/799cedca497685290a3c972bb45fa5bc/NewLastSale_Cloud-2025-1.pdf) -- [Bruce TotalView](https://assets.ctfassets.net/mx0rke14e5yt/2nwLafPib6CgIbFu63K4zo/71480a8ab9bb6f97190f056da7133c2e/Nasdaq_ITCH_Products_2025-1.pdf) +- [Bruce Depth of Book](https://assets.ctfassets.net/mx0rke14e5yt/2nwLafPib6CgIbFu63K4zo/71480a8ab9bb6f97190f056da7133c2e/Nasdaq_ITCH_Products_2025-1.pdf) ### Indexes & ETPs - [Global Index Data Service](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/GIDS_Cloud.pdf) ### Options From d35b5e725e739c4106fd037ba8135c9a7cd4a0f6 Mon Sep 17 00:00:00 2001 From: johnnag Date: Wed, 6 Aug 2025 01:39:38 +0800 Subject: [PATCH 23/23] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dcea359..4bef908 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ Nasdaq Data Link provides a modern and efficient method of delivery for realtime - [Global Index Data Service](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/GIDS_Cloud.pdf) ### Options #### Nasdaq U.S. Derivatives -- [Nasdaq Smart Options]() +- [Nasdaq Smart Options](https://nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/NCDSSmartOptions.pdf) - [Nasdaq Options Greeks and Implied Volatility](http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/GreeksandVols_Specification.pdf) - [Nasdaq Options Greeks and Implied Volatility Powered by Nasdaq Basic](https://assets.ctfassets.net/mx0rke14e5yt/5TJxpG0Cjk1tNUIRP4rZ86/5d77161ead15d746872d2ff17ba6ac06/Greeks_and_Vols_Powered_by_Basic_Streaming_Specs.pdf) ### Mutual Funds pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy