6#include "../../internal/Conf.hpp"
10#include "../../internal/Common.hpp"
11#include "./OptionChain.hpp"
12#include "./OptionSeries.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
47
48
49
50
51
52
54 product_ = product == String::NUL || product.empty() ? String::EMPTY : std::string(product);
58
59
60
61
62
63
65 underlying_ = underlying == String::NUL || underlying.empty() ? String::EMPTY : std::string(underlying);
69
70
71
72
73
75 series_.expiration_ = expiration;
79
80
81
82
83
85 series_.lastTrade_ = lastTrade;
89
90
91
92
93
95 series_.multiplier_ = multiplier;
99
100
101
102
103
104
110
111
112
113
114
115
116
117
118
119
120
121
123 series_.additionalUnderlyings_ = additionalUnderlyings == String::NUL || additionalUnderlyings.empty()
125 : std::string(additionalUnderlyings);
129
130
131
132
133
134
135
136
137
138
140 series_.mmy_ = mmy == String::NUL || mmy.empty() ? String::EMPTY : mmy;
144
145
146
147
148
149
150
151
152
153
154
155
156
157
159 series_.optionType_ = optionType == String::NUL || optionType.empty() ? String::EMPTY : std::string(optionType);
163
164
165
166
168 series_.expirationStyle_ =
169 expirationStyle == String::NUL || expirationStyle.empty() ? String::EMPTY : std::string(expirationStyle);
173
174
175
176
178 series_.settlementStyle_ =
179 settlementStyle == String::NUL || settlementStyle.empty() ? String::EMPTY : std::string(settlementStyle);
183
184
185
186
187
188
189
190
191
192
193
195 cfi_ = cfi == String::NUL || cfi.empty() ? String::EMPTY : std::string(cfi);
196 series_.cfi_ = cfi_.size() < 2 ? cfi_ : cfi_[0] + std::string(
"X") + cfi_.substr(2);
200
201
202
203
204
205
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
229 bool isCall = cfi_.starts_with(
"OC");
231 if (!isCall && !cfi_.starts_with(
"OP") ) {
235 if (series_.expiration_ == 0) {
239 if (std::isnan(strike_) || std::isinf(strike_)) {
243 if (!product_.empty()) {
244 getOrCreateChain(product_).addOption(series_, isCall, strike_, option);
247 if (!underlying_.empty()) {
248 getOrCreateChain(underlying_).addOption(series_, isCall, strike_, option);
253
254
255
256
257
263
264
265
266
267
268
269
273 static_assert(std::is_same_v<Profile, std::shared_ptr<InstrumentProfile>>,
274 "The collection element must be of type `std::shared_ptr<InstrumentProfile>`");
275 OptionChainsBuilder<InstrumentProfile> ocb{};
277 for (
const std::shared_ptr<InstrumentProfile> &ip : instruments) {
278 if (
"OPTION" != ip->getType()) {
282 ocb.setProduct(ip->getProduct());
283 ocb.setUnderlying(ip->getUnderlying());
284 ocb.setExpiration(ip->getExpiration());
285 ocb.setLastTrade(ip->getLastTrade());
286 ocb.setMultiplier(ip->getMultiplier());
287 ocb.setSPC(ip->getSPC());
288 ocb.setAdditionalUnderlyings(ip->getAdditionalUnderlyings());
289 ocb.setMMY(ip->getMMY());
290 ocb.setOptionType(ip->getOptionType());
291 ocb.setExpirationStyle(ip->getExpirationStyle());
292 ocb.setSettlementStyle(ip->getSettlementStyle());
293 ocb.setCFI(ip->getCFI());
294 ocb.setStrike(ip->getStrike());
#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:27
const std::unordered_map< std::string, OptionChain< T > > & getChains()
Returns a view of chains created by this builder.
Definition OptionChainsBuilder.hpp:258
void setCFI(const StringLike &cfi)
Changes Classification of Financial Instruments code.
Definition OptionChainsBuilder.hpp:194
void setMultiplier(double multiplier)
Changes market value multiplier.
Definition OptionChainsBuilder.hpp:94
void setSettlementStyle(const StringLike &settlementStyle)
Changes settlement price determination style, such as "Open", "Close".
Definition OptionChainsBuilder.hpp:177
void setStrike(double strike)
Changes strike price for options.
Definition OptionChainsBuilder.hpp:206
void setAdditionalUnderlyings(const StringLike &additionalUnderlyings)
Changes additional underlyings for options, including additional cash.
Definition OptionChainsBuilder.hpp:122
void setProduct(const StringLike &product)
Changes product for futures and options on futures (underlying asset name).
Definition OptionChainsBuilder.hpp:53
void setUnderlying(const StringLike &underlying)
Changes primary underlying symbol for options.
Definition OptionChainsBuilder.hpp:64
void setExpiration(std::int32_t expiration)
Changes day id of expiration.
Definition OptionChainsBuilder.hpp:74
void setSPC(double spc)
Changes shares per contract for options.
Definition OptionChainsBuilder.hpp:105
void setExpirationStyle(const StringLike &expirationStyle)
Changes the expiration cycle style, such as "Weeklys", "Quarterlys".
Definition OptionChainsBuilder.hpp:167
void setMMY(const std::string &mmy)
Changes maturity month-year as provided for corresponding FIX tag (200).
Definition OptionChainsBuilder.hpp:139
void setOptionType(const StringLike &optionType)
Changes type of option.
Definition OptionChainsBuilder.hpp:158
void addOption(std::shared_ptr< T > option)
Adds an option instrument to this builder.
Definition OptionChainsBuilder.hpp:228
void setLastTrade(std::int32_t lastTrade)
Changes day id of last trading day.
Definition OptionChainsBuilder.hpp:84
static OptionChainsBuilder< InstrumentProfile > build(const Collection &instruments)
Builds options chains for all options from the given collections of instrument profiles.
Definition OptionChainsBuilder.hpp:272
OptionChainsBuilder()
Creates new option chains builder.
Definition OptionChainsBuilder.hpp:43
A lightweight wrapper around strings or string-like inputs.
Definition StringUtils.hpp:27