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