OnixS C++ Eurex T7 Market and Reference Data (EMDI, MDI, RDI, EOBI) Handlers  17.0.1
API documentation
ProductSnapshot.h
Go to the documentation of this file.
1 /*
2 * Copyright Onix Solutions Limited [OnixS]. All rights reserved.
3 *
4 * This software owned by Onix Solutions Limited [OnixS] and is protected by copyright law
5 * and international copyright treaties.
6 *
7 * Access to and use of the software is governed by the terms of the applicable OnixS Software
8 * Services Agreement (the Agreement) and Customer end user license agreements granting
9 * a non-assignable, non-transferable and non-exclusive license to use the software
10 * for it's own data processing purposes under the terms defined in the Agreement.
11 *
12 * Except as otherwise granted within the terms of the Agreement, copying or reproduction of any part
13 * of this source code or associated reference material to any other location for further reproduction
14 * or redistribution, and any amendments to this copyright notice, are expressly prohibited.
15 *
16 * Any reproduction or redistribution for sale or hiring of the Software not in accordance with
17 * the terms of the Agreement is a violation of copyright law.
18 */
19 
20 #pragma once
21 
28 
29 
30 namespace OnixS
31 {
32  namespace Eurex
33  {
34  namespace MarketData
35  {
36  /// Exposes list of available Quote side indicators.
37  struct ONIXS_EUREX_EMDI_API QuoteSideIndicator
38  {
39  enum Enum
40  {
41  /// Used to identify absence of value.
42  Undefined = -1,
43 
44  /// Not allowed
45  OneSidedQuoteNotAllowed = 0,
46 
47  /// Allowed
48  OneSidedQuoteAllowed = 1,
49  };
50  };
51 
52  /// Exposes list of available quote side model types.
53  struct ONIXS_EUREX_EMDI_API QuoteSideModelType
54  {
55  enum Enum
56  {
57  /// Used to identify absence of value.
58  Undefined = -1,
59 
60  /// Single-sided quotes not supported
61  SSQNotSupported = 0,
62 
63  /// Single-sided quotes supported
64  SSQSupported = 1,
65  };
66  };
67 
68  /// Exposes list of available feed types.
69  struct ONIXS_EUREX_EMDI_API FeedType
70  {
71  enum Enum
72  {
73  /// Used to identify absence of value.
74  Undefined = -1,
75 
76  /// Defines if product is traded on on NTA.
77  HighIncremental = 0,
78 
79  /// Defines if product is still traded on "Eurex classic"
80  HighSnapshot = 1,
81 
82  /// Defines if product is still traded on "Eurex classic"
83  Low = 2,
84  };
85  };
86 
87  class ONIXS_EUREX_EMDI_API TickRuleScope : GroupInstance
88  {
89  public:
90  /// Defines the instrument type for the tick rule.
92  {
93  return getNonZeroIntEnumFieldValue<InstrumentType> (*this, Tags::TickRuleProductComplex);
94  }
95 
96  /// Trade Type
98  {
99  return getIntEnumFieldValue<TrdType>(*this, Tags::TrdType);
100  }
101 
102  private:
103  friend class TypedGroup<TickRuleScope>;
104 
105  TickRuleScope (const GroupInstance& groupInstance)
106  : GroupInstance (groupInstance)
107  {
108  }
109  };
110 
111  /// Tick rule scope definitions.
112  class TickRuleScopes : public TypedGroup<TickRuleScope>
113  {
114  private:
115  explicit
116  TickRuleScopes (const Group& group)
117  : TypedGroup<TickRuleScope> (group)
118  {
119  }
120 
121  friend class TickRule;
122  };
123 
124 
125  /// Tick rule.
126  class ONIXS_EUREX_EMDI_API TickRule : GroupInstance
127  {
128  public:
129  /// Table identifier, only for cash.
131  {
132  return getUInt32 (Tags::TickRuleID);
133  }
134 
135  /// Starting price range for specified tick increment (inclusive).
137  {
138  return getDecimal (Tags::StartTickPriceRange);
139  }
140 
141  /// Ending price range for the specified tick increment (noninclusive).
143  {
144  return getDecimal (Tags::EndTickPriceRange);
145  }
146 
147  /// Tick increment for stated price range. Specifies the valid price
148  /// increments at which instrument of the product can be quoted and
149  /// traded.
151  {
152  return getDecimal (Tags::TickIncrement);
153  }
154 
155  /// Tick rule scope definitions.
157  {
158  return TickRuleScopes ( getOptionalGroup (Tags::NoTickRuleScopes));
159  }
160 
161  private:
162  friend class TypedGroup<TickRule>;
163 
164  TickRule (const GroupInstance& groupInstance)
165  : GroupInstance (groupInstance)
166  {
167  }
168  };
169 
170  class TickRules : public TypedGroup<TickRule>
171  {
172  private:
173  explicit
174  TickRules (const Group& group)
175  : TypedGroup<TickRule> (group)
176  {
177  }
178 
179  friend class ProductSnapshot;
180  };
181 
182  /// Exposes list of available match algorithms.
183  struct ONIXS_EUREX_EMDI_API MatchAlgorithm
184  {
185  enum Enum
186  {
187  /// Used to identify absence of value.
188  Undefined = -1,
189 
190  ///
191  PriceTime = 0,
192 
193  ///
194  ProRata = 1,
195 
196  ///
197  TimeProRata = 2,
198  };
199  };
200 
201 
202  /// Exposes list of available match types.
203  struct ONIXS_EUREX_EMDI_API MatchType
204  {
205  enum Enum
206  {
207  /// Used to identify absence of value.
208  Undefined = -1,
209 
210  ///
211  AutoMatch = 0,
212 
213  ///
214  CallAuction = 2,
215  };
216  };
217 
218 
219  /// Exposes list of available market segment types.
220  struct ONIXS_EUREX_EMDI_API USApproval
221  {
222  enum Enum
223  {
224  /// Used to identify absence of value.
225  Undefined = -1,
226 
227  ///
228  NoApproval = 0,
229 
230  ///
231  CFTCApproved = 0,
232 
233  ///
234  SECApproved = 0,
235  };
236  };
237 
238  /// Exposes list of available market segment types.
239  struct ONIXS_EUREX_EMDI_API MarketSegmentType
240  {
241  enum Enum
242  {
243  /// Used to identify absence of value.
244  Undefined = -1,
245 
246  ///
247  Pool = 0,
248  };
249  };
250 
251 
252  /// Exposes list of available market segment subtypes.
253  struct ONIXS_EUREX_EMDI_API MarketSegmentSubType
254  {
255  enum Enum
256  {
257  /// Used to identify absence of value.
258  Undefined = -1,
259 
260  ///
261  InterProductSpread = 0,
262 
263  ///
264  BTRFBucket = 1,
265 
266  ///
267  EBBBucket = 2,
268 
269  ///
270  CommodityGroup = 3,
271  };
272  };
273 
274  /// Exposes list of available Decay splits.
275  struct ONIXS_EUREX_EMDI_API DecaySplit
276  {
277  enum Enum
278  {
279  /// Used to identify absence of value.
280  Undefined = -1,
281 
282  ///
283  Quarter = 1,
284 
285  ///
286  Season = 2,
287 
288  ///
289  Year = 3,
290  };
291  };
292 
293  /// Exposes list of available auction types.
294  struct ONIXS_EUREX_EMDI_API AuctionType
295  {
296  enum Enum
297  {
298  /// Used to identify absence of value.
299  Undefined = -1,
300 
301  ///
302  AnyAuction = 0,
303  };
304  };
305 
306  /// Exposes list of available closed book indicators.
307  struct ONIXS_EUREX_EMDI_API ClosedBookIndicator
308  {
309  enum Enum
310  {
311  /// Used to identify absence of value.
312  Undefined = -1,
313 
314  ///
315  No = 0,
316 
317  ///
318  Yes = 1,
319  };
320  };
321 
322  /// Exposes list of available market imbalance indicators.
323  struct ONIXS_EUREX_EMDI_API MarketImbalanceIndicator
324  {
325  enum Enum
326  {
327  /// Used to identify absence of value.
328  Undefined = -1,
329 
330  ///
331  No = 0,
332 
333  ///
334  Yes = 1,
335  };
336  };
337 
338  ///
339  struct ONIXS_EUREX_EMDI_API DisableOnBookTrading
340  {
341  enum Enum
342  {
343  /// Used to identify absence of value.
344  Undefined = -1,
345 
346  ///
347  No = 0,
348 
349  ///
350  Yes = 1,
351  };
352  };
353 
354  /// Exposes list of available market segment relationship types.
355  struct ONIXS_EUREX_EMDI_API MarketSegmentRelationship
356  {
357  enum Enum
358  {
359  /// Used to identify absence of value.
360  Undefined = -1,
361 
362  ///
363  CashLegForVolatilityStrategies = 0,
364 
365  ///
366  TargetProductForDecayingProduct = 1,
367 
368  ///
369  BTRFBucket = 2,
370 
371  ///
372  EBBBucket = 3,
373 
374  ///
375  CommodityGroup = 4,
376  };
377  };
378 
379  struct ONIXS_EUREX_EMDI_API AllowOneProductStrip
380  {
381  enum Enum
382  {
383  /// Used to identify absence of value.
384  Undefined = -1,
385 
386  ///
387  OneProductStripNotAllowed = 0,
388 
389  ///
390  OneProductStripNot = 1,
391  };
392  };
393 
394  /// Match rule.
395  class ONIXS_EUREX_EMDI_API MatchRule : GroupInstance
396  {
397  public:
398  /// Defines the instrument type for the match rule.
400  {
401  return getNonZeroIntEnumFieldValue<InstrumentType> (*this, Tags::MatchRuleProductComplex);
402  }
403 
404  /// Defines the matching algorithm.
406  {
407  return getIntEnumFieldValue<MatchAlgorithm> (*this, Tags::MatchAlgorithm);
408  }
409 
410  /// Defines the matching type.
411  /// @note Absence means no distinction between continuous and auctions
413  {
414  return getIntEnumFieldValue<MatchType> (*this, Tags::MatchType);
415  }
416 
417  private:
418  friend class TypedGroup<MatchRule>;
419 
420  MatchRule (const GroupInstance& groupInstance)
421  : GroupInstance (groupInstance)
422  {
423  }
424  };
425 
426  class MatchRules : public TypedGroup<MatchRule>
427  {
428  private:
429  explicit
430  MatchRules (const Group& group)
431  : TypedGroup<MatchRule> (group)
432  {
433  }
434 
435  friend class ProductSnapshot;
436  };
437 
438  /// Quote size rule.
439  class ONIXS_EUREX_EMDI_API QuoteSizeRule : GroupInstance
440  {
441  public:
442 
443  /// Minimum bid quantity (identical to minimum offer quantity).
444  bool minBidSize (Decimal& size) const
445  {
446  return get (Tags::MinBidSize).toNumber (size);
447  }
448 
449  /// Minimum offer quantity (identical to minimum bid quantity).
450  bool minOfferSize (Decimal& size) const
451  {
452  return get (Tags::MinOfferSize).toNumber (size);
453  }
454 
455  /// Indicates if product is in the state Fast Market.
456  bool fastMarketIndicator() const
457  {
458  UInt32 value;
459  return get (Tags::FastMarketIndicator).toNumber (value) ? (value == 1) : false;
460  }
461 
462  private:
463  friend class TypedGroup<QuoteSizeRule>;
464 
465  QuoteSizeRule (const GroupInstance& groupInstance)
466  : GroupInstance (groupInstance)
467  {
468  }
469  };
470 
471  class QuoteSizeRules : public TypedGroup<QuoteSizeRule>
472  {
473  private:
474  explicit
475  QuoteSizeRules (const Group& group)
476  : TypedGroup<QuoteSizeRule> (group)
477  {
478  }
479 
480  friend class ProductSnapshot;
481  };
482 
483  /// Flex rule.
484  class ONIXS_EUREX_EMDI_API FlexRule : GroupInstance
485  {
486  public:
487 
488  /// Defines the strategy types available for user defined strategies.
490  {
491  return getNonZeroIntEnumFieldValue<InstrumentType> (*this, Tags::FlexProductEligibilityComplex);
492  }
493 
494  /// Defines if user defined strategies are allowed.
496  {
497  return (getUInt32 (Tags::FlexProductEligibilityIndicator) == 1);
498  }
499 
500  private:
501  friend class TypedGroup<FlexRule>;
502 
503  FlexRule (const GroupInstance& groupInstance)
504  : GroupInstance (groupInstance)
505  {
506  }
507  };
508 
509  class FlexRules : public TypedGroup<FlexRule>
510  {
511  private:
512  explicit
513  FlexRules (const Group& group)
514  : TypedGroup<FlexRule> (group)
515  {
516  }
517 
518  friend class ProductSnapshot;
519  };
520 
521 
522  /// Auction type rule.
523  class ONIXS_EUREX_EMDI_API AuctionTypeRule : GroupInstance
524  {
525  public:
526  /// Defines the type of auction.
528  {
529  return getIntEnumFieldValue<AuctionType> (*this, Tags::AuctionType);
530  }
531 
532  /// Indicates whether the order book is closed during auction trading. "N" reserved for future releases.
534  {
535  return getIntEnumFieldValue<ClosedBookIndicator> (*this, Tags::ClosedBookIndicator);
536  }
537 
538  /// Controls if during auction call/volatility interruption/extended volatility interruption/market
539  /// order interruption phase a surplus (side and volume) at the indicative price
540  /// (if crossed order book) or the best bid/best ask limit and quantity (if uncrossed order book)
541  /// is displayed to the market.
543  {
544  return getIntEnumFieldValue<MarketImbalanceIndicator> (*this, Tags::MarketImbalanceIndicator);
545  }
546 
547  /// Defines, if On Book trading is disabled
549  {
550  return getIntEnumFieldValue<DisableOnBookTrading>(*this, Tags::DisableOnBookTrading);
551  }
552 
553  private:
555 
556  AuctionTypeRule (const GroupInstance& groupInstance)
557  : GroupInstance (groupInstance)
558  {
559  }
560  };
561 
562  class AuctionTypeRules : public TypedGroup<AuctionTypeRule>
563  {
564  private:
565  explicit
566  AuctionTypeRules (const Group& group)
568  {
569  }
570 
571  friend class ProductSnapshot;
572  };
573 
574  /// Feed
575  class ONIXS_EUREX_EMDI_API Feed : GroupInstance
576  {
577  public:
578 
579  /// Feed type.
581  {
582  return getIntEnumFieldValue<FeedType> (*this, Tags::MDFeedType);
583  }
584 
585  /// Book type.
587  {
588  return getIntEnumFieldValue<BookType> (*this, Tags::MDBookType);
589  }
590 
591  /// Maximum number of price levels for the product.
592  bool marketDepth (UInt32& depth) const
593  {
594  return get (Tags::MarketDepth).toNumber (depth);
595  }
596 
597  /// Netting interval for low bandwidth feeds (0=no netting).
598  bool marketDepthTimeInterval (UInt32& interval) const
599  {
600  return get (Tags::MarketDepthTimeInterval).toNumber (interval);
601  }
602 
603  /// Recovery interval (duration of one cycle).
604  bool mdRecoveryTimeInterval (UInt32& interval) const
605  {
606  return get (Tags::MDRecoveryTimeInterval).toNumber (interval);
607  }
608 
609  /// IP Address for Service A.
611  {
612  StringRef val;
613  return get (Tags::PrimaryServiceLocationID).toStringRef (val) ? val : StringRef();
614  }
615 
616  /// Port number for IP address Service A.
618  {
619  return getUInt32 (Tags::PrimaryServiceLocationSubID);
620  }
621 
622  /// IP Address for Service B.
624  {
625  return get (Tags::SecondaryServiceLocationID).toStringRef (id);
626  }
627 
628  /// Port number for IP address Service B.
629  bool mdSecondaryFeedLineSubID (UInt32& subId) const
630  {
631  return get (Tags::SecondaryServiceLocationSubID).toNumber (subId);
632  }
633 
634  private:
635  friend class TypedGroup<Feed>;
636 
637  Feed (const GroupInstance& groupInstance)
638  : GroupInstance (groupInstance)
639  {
640  }
641  };
642 
643  class Feeds : public TypedGroup<Feed>
644  {
645  private:
646  explicit
647  Feeds (const Group& group)
648  : TypedGroup<Feed> (group)
649  {
650  }
651 
652  friend class ProductSnapshot;
653  };
654 
655  /// Price range rule.
656  class ONIXS_EUREX_EMDI_API PriceRangeRule : GroupInstance
657  {
658  public:
659 
660  /// Table identifier, not unique within repeating group.
662  {
663  return getUInt32 (Tags::PriceRangeRuleID);
664  }
665 
666  ///
668  {
669  return getNonZeroIntEnumFieldValue<InstrumentType> (*this, Tags::PriceRangeProductComplex);
670  }
671 
672  /// Start of price range (inclusive).
674  {
675  return getDecimal (Tags::StartPriceRange);
676  }
677 
678  /// End of price range (non-inclusive).
680  {
681  return getDecimal (Tags::EndPriceRange);
682  }
683 
684  /// Maximum allowable quote spread (absolute value). Conditionally required if PriceRangePercentage is absent.
685  bool priceRangeValue (Decimal& value) const
686  {
687  return get (Tags::PriceRangeValue).toNumber (value);
688  }
689 
690  /// Maximum allowable quote spread (percentage value). Conditionally required if PriceRangeValue is absent.
691  bool priceRangePercentage (Decimal& percentage) const
692  {
693  return get (Tags::PriceRangePercentage).toNumber (percentage);
694  }
695 
696  private:
697  friend class TypedGroup<PriceRangeRule>;
698 
699  PriceRangeRule (const GroupInstance& groupInstance)
700  : GroupInstance (groupInstance)
701  {
702  }
703  };
704 
705  class PriceRangeRules : public TypedGroup<PriceRangeRule>
706  {
707  private:
708  explicit
709  PriceRangeRules (const Group& group)
711  {
712  }
713 
714  friend class ProductSnapshot;
715  };
716 
717  /// Herfindahl-Hirschman Index (HHI) interval.
718  class ONIXS_EUREX_EMDI_API HHIInterval : GroupInstance
719  {
720  public:
721 
722  /// The HHIInterval value.
724  {
725  return getUInt32(Tags::HHIIndicator);
726  }
727 
728  /// The HHIInterval upper boundary.
730  {
731  return getDecimal(Tags::HHIIntervalEnd);
732  }
733 
734 
735  private:
736  friend class TypedGroup<HHIInterval>;
737 
738  HHIInterval(const GroupInstance& groupInstance)
739  : GroupInstance(groupInstance)
740  {
741  }
742  };
743 
744  /// Herfindahl-Hirschman Index (HHI) intervals.
745  class HHIIntervals : public TypedGroup<HHIInterval>
746  {
747  private:
748  explicit
749  HHIIntervals(const Group& group)
750  : TypedGroup<HHIInterval>(group)
751  {
752  }
753 
754  friend class ProductSnapshot;
755  };
756 
757  /// Instrument Scope.
758  class ONIXS_EUREX_EMDI_API InstrumentScope : GroupInstance
759  {
760  public:
761 
762  /// Instrument scope operator.
764  {
765  return getIntEnumFieldValue<InstrumentScopeOperator> (*this, Tags::InstrumentScopeOperator);
766  }
767 
768  /// Type of security.
770  {
771  return getIntEnumFieldValue<SecurityType> (*this, Tags::InstrumentScopeSecurityType);
772  }
773 
774  /// Standard strategy type for complex instruments.
776  {
777  return get (Tags::InstrumentScopeSecuritySubType).toNumber (value);
778  }
779 
780  private:
782 
783  InstrumentScope (const GroupInstance& groupInstance)
784  : GroupInstance (groupInstance)
785  {
786  }
787  };
788 
789  class InstrumentScopes : public TypedGroup<InstrumentScope>
790  {
791  private:
792  explicit
793  InstrumentScopes (const Group& group)
795  {
796  }
797 
798  friend class ProductSnapshot;
799  };
800 
801 
802  /// Related Market Segments.
803  class ONIXS_EUREX_EMDI_API RelatedMarketSegment : GroupInstance
804  {
805  public:
806 
807  /// Market segment identifier.
809  {
810  return getUInt32 (Tags::RelatedMarketSegmentID);
811  }
812 
813  /// Defines the type of the relationship..
815  {
816  return getIntEnumFieldValue<MarketSegmentRelationship>(*this, Tags::MarketSegmentRelationship);
817  }
818 
819  /// Defines the type of the relationship..
821  {
822  return getIntEnumFieldValue<AllowOneProductStrip>(*this, Tags::AllowOneProductStrip);
823  }
824 
825  private:
827 
828  RelatedMarketSegment (const GroupInstance& groupInstance)
829  : GroupInstance (groupInstance)
830  {
831  }
832  };
833 
834  class RelatedMarketSegments : public TypedGroup<RelatedMarketSegment>
835  {
836  private:
837  explicit
838  RelatedMarketSegments (const Group& group)
840  {
841  }
842 
843  friend class ProductSnapshot;
844  };
845 
846 
847  /// Quantity Scaling Factors
848  class ONIXS_EUREX_EMDI_API QuantityScalingFactor : GroupInstance
849  {
850  public:
851  ///
853  {
854  return getUInt32 (Tags::QuantityScalingFactor);
855  }
856 
857  private:
859 
860  QuantityScalingFactor (const GroupInstance& groupInstance)
861  : GroupInstance (groupInstance)
862  {
863  }
864  };
865 
866  class QuantityScalingFactors : public TypedGroup<QuantityScalingFactor>
867  {
868  private:
869  explicit
870  QuantityScalingFactors (const Group& group)
872  {
873  }
874 
875  friend class ProductSnapshot;
876  };
877 
878 
879  /// Product snapshot.
880  class ONIXS_EUREX_EMDI_API ProductSnapshot : public Message
881  {
882  public:
883 
884  /// Market Identifier Code as specified in ISO 10383.
886  {
887  return getStringRef (Tags::MarketID);
888  }
889 
890  /// Product identifier.
892  {
893  return getUInt32 (Tags::MarketSegmentID);
894  }
895 
896  /// Current business date
898  {
899  return getUInt32 (Tags::EffectiveBusinessDate);
900  }
901 
902  /// Next business date
904  {
905  return getUInt32 (Tags::NextEffectiveBusinessDate);
906  }
907 
908  /// Product name.
910  {
911  return getStringRef (Tags::MarketSegment);
912  }
913 
914  /// Currency as published in ISO 4217.
915  bool currency (StringRef& value) const
916  {
917  return get (Tags::Currency).toStringRef (value);
918  }
919 
920  /// Defines the TES security status.
922  {
923  return getIntEnumFieldValue<MarketSegmentStatus> (*this, Tags::MarketSegmentStatus);
924  }
925 
926  /// Partition of the product.
928  {
929  return getUInt32 (Tags::PartitionID);
930  }
931 
932  ///
934  {
935  return getUInt32 (Tags::CapacityGroupId);
936  }
937 
938  /// Contains the default and maximum duration of negotiation event in seconds.
939  bool negotiationDuration(UInt32& value) const
940  {
941  return get(Tags::NegotiationDuration).toNumber(value);
942  }
943 
944  /// Product Description.
945  bool marketSegmentDesc (StringRef& desc) const
946  {
947  return get (Tags::MarketSegmentDesc).toStringRef (desc);
948  }
949 
950  /// Product ISIN.
951  bool marketSegmentSymbol (StringRef& symbol) const
952  {
953  return get (Tags::MarketSegmentSymbol).toStringRef (symbol);
954  }
955 
956  /// Standard Eurex product types.
957  bool parentMktSegmID (StringRef& id) const
958  {
959  return get (Tags::ParentMktSegmID).toStringRef (id);
960  }
961 
962  /// Market Segmen type.
964  {
965  return getIntEnumFieldValue<USApproval>(*this, Tags::USApproval);
966  }
967 
968  /// Market Segmen type.
970  {
971  return getIntEnumFieldValue<MarketSegmentType> (*this, Tags::MarketSegmentType);
972  }
973 
974  /// Market Segment subtype.
976  {
977  return getIntEnumFieldValue<MarketSegmentSubType> (*this, Tags::MarketSegmentSubType);
978  }
979 
980  ///
982  {
983  return getIntEnumFieldValue<DecaySplit>(*this, Tags::DecaySplit);
984  }
985 
986  /// Defines the max expiry time in seconds describing when the RFQ session will be
987  /// automatically terminated.
988  bool maxOffsetRFQExpireTime(UInt32& value) const
989  {
990  return get(Tags::MaxOffsetRFQExpireTime).toNumber(value);
991  }
992 
993  /// Defines the waiting period of the final STP deal inside Eurex EnLight in seconds.
994  bool offsetSTPEffectiveTime(UInt32& value) const
995  {
996  return get(Tags::OffsetSTPEffectiveTime).toNumber(value);
997  }
998 
999  /// TSL product group ID
1000  bool tslMarketGroupID(UInt32& value) const
1001  {
1002  return get(Tags::TslMarketGroupID).toNumber(value);
1003  }
1004 
1005  /// TSL product group symbol
1006  bool tslMarketGroup(StringRef& value) const
1007  {
1008  return get(Tags::TslMarketGroup).toStringRef(value);
1009  }
1010 
1011  /// Name of the Independent System Operator (ISO) such as PJM, ERCOT, ISONE, NYISO, CAISO, etc.
1013  {
1014  return get(Tags::IndependentSystemOperator).toStringRef(value);
1015  }
1016 
1017  /// Location/ nodes within the ISO which this product covers such as Western Hub, Jersey Central Power, etc .
1018  bool locationID(StringRef& value) const
1019  {
1020  return get(Tags::LocationID).toStringRef(value);
1021  }
1022 
1023  ///
1024  bool productType (StringRef& value) const
1025  {
1026  return get (Tags::ProductType).toStringRef (value);
1027  }
1028 
1029  /// Information about the hours covered by the product such as Peak, Off - Peak, 2x16, 7x8
1031  {
1032  return get(Tags::CommodityProductClass).toStringRef(value);
1033  }
1034 
1035  /// Information about the load such as 5 MW, 25 MW, 50 MW
1036  bool commodityUnit(UInt32& value) const
1037  {
1038  return get(Tags::CommodityUnit).toNumber(value);
1039  }
1040 
1041  ///
1043  {
1044  return get (Tags::LocationType).toStringRef (value);
1045  }
1046 
1047  ///
1048  bool maxTradeVol(Decimal& value)
1049  {
1050  return get (Tags::MaxTradeVol).toNumber(value);
1051  }
1052 
1053  ///
1054  bool maxTradeVal(UInt64& value)
1055  {
1056  return get (Tags::MaxTradeVal).toNumber(value);
1057  }
1058 
1059  ///
1061  {
1062  return get (Tags::MaxCalendarSpreadVol).toNumber(value);
1063  }
1064 
1065  ///
1066  bool maxTESVol(Decimal& value)
1067  {
1068  return get (Tags::MaxTESVol).toNumber(value);
1069  }
1070 
1071  ///
1073  {
1075  }
1076 
1077  /// Market Identifier Code of the underlying as specified in ISO 10383.
1079  {
1080  return get (Tags::UnderlyingSecurityExchange).toStringRef (value);
1081  }
1082 
1083  /// Underlying security symbol
1084  bool underlyingSymbol (StringRef& value) const
1085  {
1086  return get (Tags::UnderlyingSymbol).toStringRef (value);
1087  }
1088 
1089  /// ISIN code of the underlying.
1090  bool underlyingSecurityId (StringRef& value) const
1091  {
1092  return get (Tags::UnderlyingSecurityID).toStringRef (value);
1093  }
1094 
1095  /// Underlying Security ID Source.
1097  {
1098  return get (Tags::UnderlyingSecurityIDSource).toStringRef (value);
1099  }
1100 
1101  /// Closing price of the underlying on the previous day.
1102  bool underlyingPrevClosePx (Decimal& price) const
1103  {
1104  return get (Tags::UnderlyingPrevClosePx).toNumber (price);
1105  }
1106 
1107  /// Instrument Scopes.
1109  {
1110  return InstrumentScopes ( getOptionalGroup (Tags::NoInstrumentScopes) );
1111  }
1112 
1113  /// Related Market Segments.
1115  {
1116  return RelatedMarketSegments ( getOptionalGroup (Tags::NoRelatedMarketSegments) );
1117  }
1118 
1119  /// Tick rules.
1120  /// The group is absent for buckets, when marketSegmentSubType() is equal to
1121  /// MarketSegmentSubType::BTRFBucket or MarketSegmentSubType::EBBBucket
1123  {
1124  checkSequencePresence("tickRules");
1125 
1126  return TickRules (getGroup(Tags::NoTickRules) );
1127  }
1128 
1129  /// Price range rules.
1130  /// The group is absent for buckets, when marketSegmentSubType() is equal to
1131  /// MarketSegmentSubType::BTRFBucket or MarketSegmentSubType::EBBBucket
1133  {
1134  return PriceRangeRules (getOptionalGroup(Tags::NoPriceRangeRules) );
1135  }
1136 
1137  /// Defines if one sided quotes are allowed
1139  {
1140  return getIntEnumFieldValue<QuoteSideIndicator> (*this, Tags::QuoteSideIndicator);
1141  }
1142 
1143  /// Defines if one sided quotes are allowed
1145  {
1146  return getIntEnumFieldValue<QuoteSideModelType>(*this, Tags::QuoteSideModelType);
1147  }
1148 
1149  /// Percentage by which range resulting from PriceRangeValue and PriceRangePercentage
1150  /// has to be extended to obtain the valid price range during Fast Market
1151  bool fastMarketPercentage (Decimal& value) const
1152  {
1153  return get (Tags::FastMarketPercentage).toNumber (value);
1154  }
1155 
1156  /// Specifies if Market Orders will be checked against the available bid/ask price on the opposing side in specific scenarios.
1157  bool checkMarketOrder() const
1158  {
1159  UInt32 value;
1160  return get(Tags::CheckMarketOrder).toNumber(value) ? (value == 1) : false;
1161  }
1162 
1163  /// Herfindahl-Hirschman Index (HHI) intervals.
1165  {
1166  return HHIIntervals(getOptionalGroup(Tags::NoHHIIntervals));
1167  }
1168 
1169  /// Quote size rules.
1171  {
1172  return QuoteSizeRules (getOptionalGroup(Tags::NoQuoteSizeRules) );
1173  }
1174 
1175  /// Flex rules.
1177  {
1178  return FlexRules (getOptionalGroup(Tags::NoFlexProductEligibilities) );
1179  }
1180 
1181  /// Minimum Tradable Unit in derivatives markets.
1182  bool roundLot(Decimal& value) const
1183  {
1184  return get(Tags::RoundLot).toNumber(value);
1185  }
1186 
1187  /// Match rules.
1189  {
1190  return AuctionTypeRules ( getOptionalGroup (Tags::NoAuctionTypeRules) );
1191  }
1192 
1193  /// Match rules.
1194  /// The group is absent for buckets, when marketSegmentSubType() is equal to
1195  /// MarketSegmentSubType::BTRFBucket or MarketSegmentSubType::EBBBucket
1197  {
1198  checkSequencePresence("matchRules");
1199  return MatchRules (getGroup(Tags::NoMatchRules) );
1200  }
1201 
1202  /// Feeds
1203  /// The group is absent for buckets, when marketSegmentSubType() is equal to
1204  /// MarketSegmentSubType::BTRFBucket or MarketSegmentSubType::EBBBucket
1205  Feeds feeds() const
1206  {
1207  checkSequencePresence("feeds");
1208  return Feeds (getGroup(Tags::NoMDFeedTypes) );
1209  }
1210 
1211  private:
1212  friend class ProductSnapshotWrapper;
1213 
1214  ProductSnapshot (const void* impl)
1215  : Message (impl)
1216  {
1217  }
1218 
1219  void checkSequencePresence(const char* seqName) const
1220  {
1221  if(marketSegmentSubType() == MarketSegmentSubType::BTRFBucket || marketSegmentSubType() == MarketSegmentSubType::EBBBucket)
1222  {
1223  const std::string enhancedName =
1224  std::string("Rdi ProductSnapshot::") + seqName;
1225 
1226  throw OperationException(
1227  enhancedName.c_str(), "The sequence is absent for BTRFBucket and EBBBucket subtypes");
1228  }
1229  }
1230  };
1231  }
1232  }
1233 }
bool tslMarketGroup(StringRef &value) const
TSL product group symbol.
StringRef marketId() const
Market Identifier Code as specified in ISO 10383.
const Tag NoQuantityScalingFactors
Definition: Tags.h:344
bool currency(StringRef &value) const
Currency as published in ISO 4217.
const Tag EffectiveBusinessDate
Definition: Tags.h:197
SecurityType::Enum securityType() const
Type of security.
InstrumentScopeOperator::Enum instrumentScopeOperator() const
Instrument scope operator.
const Tag QuoteSideModelType
Definition: Tags.h:243
MatchAlgorithm::Enum matchAlgorithm() const
Defines the matching algorithm.
const Tag MatchRuleProductComplex
Definition: Tags.h:140
UInt32 hHIIndicator() const
The HHIInterval value.
StringRef mdPrimaryFeedLineID() const
IP Address for Service A.
const Tag UnderlyingSecurityID
Definition: Tags.h:157
bool independentSystemOperator(StringRef &value) const
Name of the Independent System Operator (ISO) such as PJM, ERCOT, ISONE, NYISO, CAISO, etc.
const Tag UnderlyingPrevClosePx
Definition: Tags.h:151
Exposes list of available market segment types.
InstrumentType::Enum priceRangeProductComplex() const
const Tag NegotiationDuration
Definition: Tags.h:275
bool underlyingSymbol(StringRef &value) const
Underlying security symbol.
UInt32 PartitionId
Alias for Partition ID type.
Definition: Defines.h:48
const Tag MaxCalendarSpreadVol
Definition: Tags.h:352
const Tag MarketSegmentSymbol
Definition: Tags.h:118
const Tag MarketSegmentSubType
Definition: Tags.h:200
Tick rule scope definitions.
bool productType(StringRef &value) const
bool parentMktSegmID(StringRef &id) const
Standard Eurex product types.
Exposes list of available market segment subtypes.
const Tag StartTickPriceRange
Definition: Tags.h:103
Decimal endTickPriceRange() const
Ending price range for the specified tick increment (noninclusive).
const Tag MaxOffsetRFQExpireTime
Definition: Tags.h:277
const Tag MarketSegmentStatus
Definition: Tags.h:126
const Tag ClosedBookIndicator
Definition: Tags.h:207
Exposes list of available Quote side indicators.
const Tag PrimaryServiceLocationID
Definition: Tags.h:122
const Tag SecondaryServiceLocationSubID
Definition: Tags.h:125
QuoteSideModelType::Enum quoteSideModelType() const
Defines if one sided quotes are allowed.
const Tag SecondaryServiceLocationID
Definition: Tags.h:124
FeedType::Enum mdFeedType() const
Feed type.
bool fastMarketIndicator() const
Indicates if product is in the state Fast Market.
Exposes list of available Decay splits.
const Tag QuantityScalingFactor
Definition: Tags.h:343
FlexRules flexRules() const
Flex rules.
bool negotiationDuration(UInt32 &value) const
Contains the default and maximum duration of negotiation event in seconds.
MarketSegmentId marketSegmentId() const
Product identifier.
TickRuleScopes tickRuleScopes() const
Tick rule scope definitions.
const Tag MarketDepthTimeInterval
Definition: Tags.h:152
MarketSegmentRelationship::Enum marketSegmentRelationship() const
Defines the type of the relationship..
bool minOfferSize(Decimal &size) const
Minimum offer quantity (identical to minimum bid quantity).
UInt32 tickRuleId() const
Table identifier, only for cash.
bool offsetSTPEffectiveTime(UInt32 &value) const
Defines the waiting period of the final STP deal inside Eurex EnLight in seconds. ...
MarketSegmentSubType::Enum marketSegmentSubType() const
Market Segment subtype.
AuctionType::Enum auctionType() const
Defines the type of auction.
Herfindahl-Hirschman Index (HHI) interval.
Decimal startPriceRange() const
Start of price range (inclusive).
MarketSegmentStatus::Enum marketSegmentStatus() const
Defines the TES security status.
const Tag FlexProductEligibilityIndicator
Definition: Tags.h:108
const Tag QuoteSideIndicator
Definition: Tags.h:202
const Tag InstrumentScopeSecurityType
Definition: Tags.h:181
const Tag MarketImbalanceIndicator
Definition: Tags.h:208
Exposes list of available quote side model types.
const Tag CommodityProductClass
Definition: Tags.h:326
const Tag NextEffectiveBusinessDate
Definition: Tags.h:198
unsigned int UInt32
Definition: Numeric.h:41
const Tag DisableOnBookTrading
Definition: Tags.h:319
Exposes list of available market segment types.
bool underlyingSecurityExchange(StringRef &value) const
Market Identifier Code of the underlying as specified in ISO 10383.
Exposes list of available market segment relationship types.
Definition: Defines.h:30
Decimal type for better precision.
Definition: Numeric.h:63
Exposes list of available match types.
bool commodityProductClass(StringRef &value) const
Information about the hours covered by the product such as Peak, Off - Peak, 2x16, 7x8.
MarketSegmentType::Enum marketSegmentType() const
Market Segmen type.
bool instrumentScopeSecuritySubType(UInt32 &value) const
Standard strategy type for complex instruments.
bool checkMarketOrder() const
Specifies if Market Orders will be checked against the available bid/ask price on the opposing side i...
const Tag TickRuleProductComplex
Definition: Tags.h:139
bool underlyingSecurityId(StringRef &value) const
ISIN code of the underlying.
const Tag NoRelatedMarketSegments
Definition: Tags.h:176
Exposes list of available market imbalance indicators.
bool mdRecoveryTimeInterval(UInt32 &interval) const
Recovery interval (duration of one cycle).
Exposes list of available match algorithms.
UInt32 priceRangeRuleID() const
Table identifier, not unique within repeating group.
Decimal startTickPriceRange() const
Starting price range for specified tick increment (inclusive).
bool priceRangeValue(Decimal &value) const
Maximum allowable quote spread (absolute value). Conditionally required if PriceRangePercentage is ab...
const Tag IndependentSystemOperator
Definition: Tags.h:323
bool marketDepth(UInt32 &depth) const
Maximum number of price levels for the product.
UInt32 relatedMarketSegmentID() const
Market segment identifier.
bool priceRangePercentage(Decimal &percentage) const
Maximum allowable quote spread (percentage value). Conditionally required if PriceRangeValue is absen...
const Tag OffsetSTPEffectiveTime
Definition: Tags.h:278
const Tag MDRecoveryTimeInterval
Definition: Tags.h:153
bool locationID(StringRef &value) const
Location/ nodes within the ISO which this product covers such as Western Hub, Jersey Central Power...
const Tag PrimaryServiceLocationSubID
Definition: Tags.h:123
RelatedMarketSegments relatedMarketSegments() const
Related Market Segments.
InstrumentType::Enum tickRuleProductComplex() const
Defines the instrument type for the tick rule.
Decimal hHIIntervalEnd() const
The HHIInterval upper boundary.
bool minBidSize(Decimal &size) const
Minimum bid quantity (identical to minimum offer quantity).
bool tslMarketGroupID(UInt32 &value) const
TSL product group ID.
const Tag PriceRangePercentage
Definition: Tags.h:131
const Tag UnderlyingSecurityIDSource
Definition: Tags.h:155
Exposes list of available closed book indicators.
Herfindahl-Hirschman Index (HHI) intervals.
QuoteSideIndicator::Enum quoteSideIndicator() const
Defines if one sided quotes are allowed.
USApproval::Enum usApproval() const
Market Segmen type.
const Tag FastMarketPercentage
Definition: Tags.h:203
bool roundLot(Decimal &value) const
Minimum Tradable Unit in derivatives markets.
DisableOnBookTrading::Enum disableOnBookTrading() const
Defines, if On Book trading is disabled.
const Tag InstrumentScopeOperator
Definition: Tags.h:180
bool underlyingPrevClosePx(Decimal &price) const
Closing price of the underlying on the previous day.
UInt32 mdPrimaryFeedLineSubID() const
Port number for IP address Service A.
StringRef marketSegment() const
Product name.
MarketImbalanceIndicator::Enum marketImbalanceIndicator() const
const Tag NoFlexProductEligibilities
Definition: Tags.h:145
bool fastMarketPercentage(Decimal &value) const
bool mdSecondaryFeedLineSubID(UInt32 &subId) const
Port number for IP address Service B.
bool marketSegmentSymbol(StringRef &symbol) const
Product ISIN.
const Tag MarketSegmentRelationship
Definition: Tags.h:178
UInt32 MarketSegmentId
Alias for Market Segment ID type.
Definition: Defines.h:40
Exposes list of available auction types.
const Tag PriceRangeProductComplex
Definition: Tags.h:132
UInt32 nextEffectiveBusinessDate() const
Next business date.
const Tag RelatedMarketSegmentID
Definition: Tags.h:177
Decimal endPriceRange() const
End of price range (non-inclusive).
const Tag InstrumentScopeSecuritySubType
Definition: Tags.h:182
const Tag FastMarketIndicator
Definition: Tags.h:143
TrdType::Enum trdType() const
Trade Type.
InstrumentType::Enum matchRuleProductComplex() const
Defines the instrument type for the match rule.
AuctionTypeRules auctionTypeRules() const
Match rules.
bool marketDepthTimeInterval(UInt32 &interval) const
Netting interval for low bandwidth feeds (0=no netting).
bool commodityUnit(UInt32 &value) const
Information about the load such as 5 MW, 25 MW, 50 MW.
InstrumentScopes instrumentScopes() const
Instrument Scopes.
ClosedBookIndicator::Enum closedBookIndicator() const
Indicates whether the order book is closed during auction trading. "N" reserved for future releases...
UInt32 effectiveBusinessDate() const
Current business date.
bool maxOffsetRFQExpireTime(UInt32 &value) const
const Tag AllowOneProductStrip
Definition: Tags.h:329
QuoteSizeRules quoteSizeRules() const
Quote size rules.
bool mdSecondaryFeedLineID(StringRef &id) const
IP Address for Service B.
const Tag NoInstrumentScopes
Definition: Tags.h:179
Exposes list of available feed types.
InstrumentType::Enum flexProductEligibilityComplex() const
Defines the strategy types available for user defined strategies.
BookType::Enum mdBookType() const
Book type.
HHIIntervals hHIIntervals() const
Herfindahl-Hirschman Index (HHI) intervals.
bool underlyingSecurityIdSource(StringRef &value) const
Underlying Security ID Source.
AllowOneProductStrip::Enum allowOneProductStrip() const
Defines the type of the relationship..
PartitionId partitionId() const
Partition of the product.
QuantityScalingFactors quantityScalingFactors() const
const Tag FlexProductEligibilityComplex
Definition: Tags.h:146
bool marketSegmentDesc(StringRef &desc) const
Product Description.
const Tag NoAuctionTypeRules
Definition: Tags.h:204
bool flexProductEligibilityIndicator() const
Defines if user defined strategies are allowed.
const Tag UnderlyingSecurityExchange
Definition: Tags.h:156
MatchType::Enum matchType() const