6#include "../../internal/Conf.hpp"
10#include "../../internal/Common.hpp"
14#include <unordered_map>
19
20
21
22
23
24
25
26
28 std::string product_{};
29 std::string underlying_{};
30 OptionSeries<T> series_{};
33 std::unordered_map<std::string, OptionChain<T>> chains_{};
35 OptionChain<T> &getOrCreateChain(
const std::string &symbol) {
36 return chains_.try_emplace(symbol, OptionChain<T>(symbol)).first->second;
41
42
46
47
48
49
50
51
53 product_ = product == String::NUL || product.empty() ? String::EMPTY : product;
57
58
59
60
61
62
64 underlying_ = underlying == String::NUL || underlying.empty() ? String::EMPTY : underlying;
68
69
70
71
72
74 series_.expiration_ = expiration;
78
79
80
81
82
84 series_.lastTrade_ = lastTrade;
88
89
90
91
92
94 series_.multiplier_ = multiplier;
98
99
100
101
102
103
109
110
111
112
113
114
115
116
117
118
119
120
122 series_.additionalUnderlyings_ = additionalUnderlyings == String::NUL || additionalUnderlyings.empty()
124 : additionalUnderlyings;
128
129
130
131
132
133
134
135
136
137
139 series_.mmy_ = mmy == String::NUL || mmy.empty() ? String::EMPTY : mmy;
143
144
145
146
147
148
149
150
151
152
153
154
155
156
158 series_.optionType_ = optionType == String::NUL || optionType.empty() ? String::EMPTY : optionType;
162
163
164
165
167 series_.expirationStyle_ =
168 expirationStyle == String::NUL || expirationStyle.empty() ? String::EMPTY : expirationStyle;
172
173
174
175
177 series_.settlementStyle_ =
178 settlementStyle == String::NUL || settlementStyle.empty() ? String::EMPTY : settlementStyle;
182
183
184
185
186
187
188
189
190
191
192
194 cfi_ = cfi == String::NUL || cfi.empty() ? String::EMPTY : cfi;
195 series_.cfi_ = cfi_.size() < 2 ? cfi_ : cfi_[0] + std::string(
"X") + cfi_.substr(2);
199
200
201
202
203
204
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
228 bool isCall = cfi_.starts_with(
"OC");
230 if (!isCall && !cfi_.starts_with(
"OP") ) {
234 if (series_.expiration_ == 0) {
238 if (std::isnan(strike_) || std::isinf(strike_)) {
242 if (!product_.empty()) {
243 getOrCreateChain(product_).addOption(series_, isCall, strike_, option);
246 if (!underlying_.empty()) {
247 getOrCreateChain(underlying_).addOption(series_, isCall, strike_, option);
252
253
254
255
256
262
263
264
265
266
267
268
272 static_assert(std::is_same_v<Profile, std::shared_ptr<InstrumentProfile>>,
273 "The collection element must be of type `std::shared_ptr<InstrumentProfile>`");
274 OptionChainsBuilder<InstrumentProfile> ocb{};
276 for (
const std::shared_ptr<InstrumentProfile> &ip : instruments) {
277 if (
"OPTION" != ip->getType()) {
281 ocb.setProduct(ip->getProduct());
282 ocb.setUnderlying(ip->getUnderlying());
283 ocb.setExpiration(ip->getExpiration());
284 ocb.setLastTrade(ip->getLastTrade());
285 ocb.setMultiplier(ip->getMultiplier());
286 ocb.setSPC(ip->getSPC());
287 ocb.setAdditionalUnderlyings(ip->getAdditionalUnderlyings());
288 ocb.setMMY(ip->getMMY());
289 ocb.setOptionType(ip->getOptionType());
290 ocb.setExpirationStyle(ip->getExpirationStyle());
291 ocb.setSettlementStyle(ip->getSettlementStyle());
292 ocb.setCFI(ip->getCFI());
293 ocb.setStrike(ip->getStrike());
#define DXFCXX_DISABLE_MSC_WARNINGS_POP()
Definition Conf.hpp:22
#define DXFCPP_END_NAMESPACE
Definition Conf.hpp:70
#define DXFCPP_BEGIN_NAMESPACE
Definition Conf.hpp:67
#define DXFCXX_DISABLE_MSC_WARNINGS_PUSH(warnings)
Definition Conf.hpp:21
Builder class for a set of option chains grouped by product or underlying symbol.
Definition OptionChainsBuilder.hpp:27
void setExpirationStyle(const std::string &expirationStyle)
Changes the expiration cycle style, such as "Weeklys", "Quarterlys".
Definition OptionChainsBuilder.hpp:166
const std::unordered_map< std::string, OptionChain< T > > & getChains()
Returns a view of chains created by this builder.
Definition OptionChainsBuilder.hpp:257
void setAdditionalUnderlyings(const std::string &additionalUnderlyings)
Changes additional underlyings for options, including additional cash.
Definition OptionChainsBuilder.hpp:121
void setMultiplier(double multiplier)
Changes market value multiplier.
Definition OptionChainsBuilder.hpp:93
void setStrike(double strike)
Changes strike price for options.
Definition OptionChainsBuilder.hpp:205
void setSettlementStyle(const std::string &settlementStyle)
Changes settlement price determination style, such as "Open", "Close".
Definition OptionChainsBuilder.hpp:176
void setProduct(const std::string &product)
Changes product for futures and options on futures (underlying asset name).
Definition OptionChainsBuilder.hpp:52
void setExpiration(std::int32_t expiration)
Changes day id of expiration.
Definition OptionChainsBuilder.hpp:73
void setSPC(double spc)
Changes shares per contract for options.
Definition OptionChainsBuilder.hpp:104
void setMMY(const std::string &mmy)
Changes maturity month-year as provided for corresponding FIX tag (200).
Definition OptionChainsBuilder.hpp:138
void addOption(std::shared_ptr< T > option)
Adds an option instrument to this builder.
Definition OptionChainsBuilder.hpp:227
OptionChainsBuilder()=default
Creates new option chains builder.
void setCFI(const std::string &cfi)
Changes Classification of Financial Instruments code.
Definition OptionChainsBuilder.hpp:193
void setLastTrade(std::int32_t lastTrade)
Changes day id of last trading day.
Definition OptionChainsBuilder.hpp:83
static OptionChainsBuilder< InstrumentProfile > build(const Collection &instruments)
Builds options chains for all options from the given collections of instrument profiles.
Definition OptionChainsBuilder.hpp:271
void setUnderlying(const std::string &underlying)
Changes primary underlying symbol for options.
Definition OptionChainsBuilder.hpp:63
void setOptionType(const std::string &optionType)
Changes type of option.
Definition OptionChainsBuilder.hpp:157