6#include "../../internal/Conf.hpp"
10#include "../../internal/Common.hpp"
11#include "./OptionChain.hpp"
12#include "./OptionSeries.hpp"
13#include "../InstrumentProfile.hpp"
15#include <unordered_map>
18
19
20
25
26
27
28
29
30
31
32
34 std::string product_{};
35 std::string underlying_{};
36 OptionSeries<T> series_{};
41 OptionChain<T> &getOrCreateChain(
const std::string &symbol) {
42 return chains_.try_emplace(symbol, OptionChain<T>(symbol)).first->second;
47
48
53
54
55
56
57
58
60 product_ = product == String::NUL || product.empty() ? String::EMPTY : std::string(product);
64
65
66
67
68
69
71 underlying_ = underlying == String::NUL || underlying.empty() ? String::EMPTY : std::string(underlying);
75
76
77
78
80 series_.expiration_ = expiration;
84
85
86
87
89 series_.lastTrade_ = lastTrade;
93
94
95
96
97
99 series_.multiplier_ = multiplier;
103
104
105
106
107
108
114
115
116
117
118
119
120
121
122
123
124
125
127 series_.additionalUnderlyings_ = additionalUnderlyings == String::NUL || additionalUnderlyings.empty()
129 : std::string(additionalUnderlyings);
133
134
135
136
137
138
139
140
141
142
144 series_.mmy_ = mmy == String::NUL || mmy.empty() ? String::EMPTY : mmy;
148
149
150
151
152
153
154
155
156
157
158
159
160
161
163 series_.optionType_ = optionType == String::NUL || optionType.empty() ? String::EMPTY : std::string(optionType);
167
168
169
170
172 series_.expirationStyle_ =
173 expirationStyle == String::NUL || expirationStyle.empty() ? String::EMPTY : std::string(expirationStyle);
177
178
179
180
182 series_.settlementStyle_ =
183 settlementStyle == String::NUL || settlementStyle.empty() ? String::EMPTY : std::string(settlementStyle);
187
188
189
190
191
192
193
194
195
196
197
199 cfi_ = cfi == String::NUL || cfi.empty() ? String::EMPTY : std::string(cfi);
200 series_.cfi_ = cfi_.size() < 2 ? cfi_ : cfi_[0] + std::string(
"X") + cfi_.substr(2);
204
205
206
207
208
209
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
233 bool isCall = cfi_.starts_with(
"OC");
235 if (!isCall && !cfi_.starts_with(
"OP") ) {
239 if (series_.expiration_ == 0) {
243 if (std::isnan(strike_) || std::isinf(strike_)) {
247 if (!product_.empty()) {
248 getOrCreateChain(product_).addOption(series_, isCall, strike_, option);
251 if (!underlying_.empty()) {
252 getOrCreateChain(underlying_).addOption(series_, isCall, strike_, option);
257
258
259
260
261
267
268
269
270
271
272
273
278 "The collection element must be of type `std::shared_ptr<InstrumentProfile>`");
#define DXFCXX_DISABLE_MSC_WARNINGS_POP()
Definition Conf.hpp:31
#define DXFCPP_END_NAMESPACE
Definition Conf.hpp:97
#define DXFCPP_BEGIN_NAMESPACE
Definition Conf.hpp:94
#define DXFCXX_DISABLE_MSC_WARNINGS_PUSH(warnings)
Definition Conf.hpp:30
Builder class for a set of option chains grouped by product or underlying symbol.
Definition OptionChainsBuilder.hpp:33
void setCFI(const StringLike &cfi)
Changes Classification of Financial Instruments code.
Definition OptionChainsBuilder.hpp:198
void setMultiplier(double multiplier)
Changes market value multiplier.
Definition OptionChainsBuilder.hpp:98
void setSettlementStyle(const StringLike &settlementStyle)
Changes settlement price determination style, such as "Open", "Close".
Definition OptionChainsBuilder.hpp:181
void setStrike(double strike)
Changes strike price for options.
Definition OptionChainsBuilder.hpp:210
void setAdditionalUnderlyings(const StringLike &additionalUnderlyings)
Changes additional underlyings for options, including additional cash.
Definition OptionChainsBuilder.hpp:126
void setProduct(const StringLike &product)
Changes product for futures and options on futures (underlying asset name).
Definition OptionChainsBuilder.hpp:59
void setUnderlying(const StringLike &underlying)
Changes primary underlying symbol for options.
Definition OptionChainsBuilder.hpp:70
void setExpiration(std::int32_t expiration)
Changes day id of expiration.
Definition OptionChainsBuilder.hpp:79
void setSPC(double spc)
Changes shares per contract for options.
Definition OptionChainsBuilder.hpp:109
void setExpirationStyle(const StringLike &expirationStyle)
Changes the expiration cycle style, such as "Weeklys", "Quarterlys".
Definition OptionChainsBuilder.hpp:171
void setMMY(const std::string &mmy)
Changes maturity month-year as provided for corresponding FIX tag (200).
Definition OptionChainsBuilder.hpp:143
void setOptionType(const StringLike &optionType)
Changes type of option.
Definition OptionChainsBuilder.hpp:162
void addOption(std::shared_ptr< T > option)
Adds an option instrument to this builder.
Definition OptionChainsBuilder.hpp:232
void setLastTrade(std::int32_t lastTrade)
Changes day id of last trading day.
Definition OptionChainsBuilder.hpp:88
OptionChainsBuilder()
Creates new option chains builder.
Definition OptionChainsBuilder.hpp:49
A lightweight wrapper around strings or string-like inputs.
Definition StringUtils.hpp:28