31 #include "../utils.hpp"
32 #include "rapidcsv/src/rapidcsv.h"
33 #include "rapidjson/include/rapidjson/document.h"
34 #include "rapidjson/include/rapidjson/rapidjson.h"
36 namespace kiteconnect {
39 namespace rj = rapidjson;
40 namespace kc = kiteconnect;
41 namespace utils = kc::internal::utils;
46 explicit ohlc(
const rj::Value::Object& val) { parse(val); };
48 void parse(
const rj::Value::Object& val) {
49 open = utils::json::get<double>(val,
"open");
50 high = utils::json::get<double>(val,
"high");
51 low = utils::json::get<double>(val,
"low");
52 close = utils::json::get<double>(val,
"close");
64 explicit depth(
const rj::Value::Object& val) { parse(val); };
66 void parse(
const rj::Value::Object& val) {
67 price = utils::json::get<double>(val,
"price");
68 quantity = utils::json::get<int>(val,
"quantity");
69 orders = utils::json::get<int>(val,
"orders");
80 explicit quote(
const rj::Value::Object& val) { parse(val); };
82 void parse(
const rj::Value::Object& val) {
83 instrumentToken = utils::json::get<uint32_t>(val,
"instrument_token");
84 timestamp = utils::json::get<string>(val,
"timestamp");
85 lastPrice = utils::json::get<double>(val,
"last_price");
86 lastQuantity = utils::json::get<int>(val,
"last_quantity");
87 lastTradeTime = utils::json::get<string>(val,
"last_trade_time");
88 averagePrice = utils::json::get<double>(val,
"average_price");
89 volume = utils::json::get<int64_t>(val,
"volume");
90 buyQuantity = utils::json::get<int>(val,
"buy_quantity");
91 sellQuantity = utils::json::get<int>(val,
"sell_quantity");
92 OHLC = utils::json::get<utils::json::JsonObject, ohlc>(val,
"ohlc");
93 netChange = utils::json::get<double>(val,
"net_change");
94 OI = utils::json::get<double>(val,
"oi");
95 OIDayHigh = utils::json::get<double>(val,
"oi_day_high");
96 OIDayLow = utils::json::get<double>(val,
"oi_day_low");
98 utils::json::get<double>(val,
"lower_circuit_limit");
100 utils::json::get<double>(val,
"upper_circuit_limit");
102 utils::json::get<utils::json::JsonObject, mDepth>(val,
"depth");
105 uint32_t instrumentToken = 0;
107 int buyQuantity = -1;
108 int sellQuantity = -1;
109 int lastQuantity = -1;
110 double lastPrice = -1;
111 double averagePrice = -1;
112 double netChange = -1;
114 double OIDayHigh = -1;
115 double OIDayLow = -1;
116 double lowerCircuitLimit = -1;
117 double upperCircuitLimit = -1;
119 string lastTradeTime;
123 explicit mDepth(
const rj::Value::Object& val) { parse(val); };
125 void parse(
const rj::Value::Object& val) {
126 rj::Value buyDepthVal(rj::kArrayType);
127 utils::json::get<utils::json::JsonArray>(val, buyDepthVal,
"buy");
128 for (
auto& i : buyDepthVal.GetArray()) {
129 buy.emplace_back(i.GetObject());
132 rj::Value sellDepthVal(rj::kArrayType);
133 utils::json::get<utils::json::JsonArray>(val, sellDepthVal,
"sell");
134 for (
auto& i : sellDepthVal.GetArray()) {
135 sell.emplace_back(i.GetObject());
139 std::vector<depth> buy;
140 std::vector<depth> sell;
147 explicit ohlcQuote(
const rj::Value::Object& val) { parse(val); };
149 void parse(
const rj::Value::Object& val) {
150 instrumentToken = utils::json::get<uint32_t>(val,
"instrument_token");
151 lastPrice = utils::json::get<double>(val,
"last_price");
152 OHLC = utils::json::get<utils::json::JsonObject, ohlc>(val,
"ohlc");
155 uint32_t instrumentToken = 0;
156 double lastPrice = -1;
163 explicit ltpQuote(
const rj::Value::Object& val) { parse(val); };
165 void parse(
const rj::Value::Object& val) {
166 instrumentToken = utils::json::get<uint32_t>(val,
"instrument_token");
167 lastPrice = utils::json::get<double>(val,
"last_price");
170 uint32_t instrumentToken = 0;
171 double lastPrice = -1;
176 GENERATE_FLUENT_METHOD(
182 GENERATE_FLUENT_METHOD(
185 uint32_t instrumentToken = 0;
186 bool continuous =
false;
196 explicit historicalData(
const rj::Value::Array& val) { parse(val); };
198 void parse(
const rj::Value::Array& val) {
201 static auto getDouble = [](rj::Value& val) ->
double {
202 if (val.IsDouble()) {
return val.GetDouble(); };
203 if (val.IsInt()) {
return val.GetInt(); };
206 datetime = val[DATETIME_IDX].GetString();
207 open = getDouble(val[OPEN_IDX]);
208 high = getDouble(val[HIGH_IDX]);
209 low = getDouble(val[LOW_IDX]);
210 close = getDouble(val[CLOSE_IDX]);
211 volume = val[VOLUME_IDX].GetInt64();
212 if (val.Size() > OI_IDX) { OI = val[OI_IDX].GetInt64(); };
222 static constexpr uint8_t DATETIME_IDX = 0;
223 static constexpr uint8_t OPEN_IDX = 1;
224 static constexpr uint8_t HIGH_IDX = 2;
225 static constexpr uint8_t LOW_IDX = 3;
226 static constexpr uint8_t CLOSE_IDX = 4;
227 static constexpr uint8_t VOLUME_IDX = 5;
228 static constexpr uint8_t OI_IDX = 6;
234 explicit instrument(
const std::vector<string>& row) { parse(row); };
236 void parse(
const std::vector<string>& tokens) {
237 static const auto toInt = [](
const string& str) ->
int {
238 return (str.empty()) ? 0 : std::stoi(str);
240 static const auto toUint32 = [](
const string& str) -> uint32_t {
241 return (str.empty()) ? 0 : std::stoul(str);
243 static const auto toDouble = [](
const string& str) ->
double {
244 return (str.empty()) ? 0.0 : std::stod(str);
247 instrumentToken = toUint32(tokens[INSTRUMENT_TOKEN_IDX]);
248 exchangeToken = toInt(tokens[EXCHANGE_TOKEN_IDX]);
249 tradingsymbol = tokens[TRADINGSYMBOL_IDX];
250 name = tokens[NAME_IDX];
251 lastPrice = toDouble(tokens[LAST_PRICE_IDX]);
252 expiry = tokens[EXPIRY_IDX];
253 strikePrice = toDouble(tokens[STRIKE_PRICE_IDX]);
254 tickSize = toDouble(tokens[TICK_SIZE_IDX]);
255 lotSize = toDouble(tokens[LOT_SIZE_IDX]);
256 instrumentType = tokens[INSTRUMENT_TYPE_IDX];
257 segment = tokens[SEGMENT_IDX];
258 exchange = tokens[EXCHANGE_IDX];
261 uint32_t instrumentToken = 0;
262 int exchangeToken = -1;
263 double lastPrice = -1;
264 double strikePrice = -1;
265 double tickSize = -1;
267 string tradingsymbol;
270 string instrumentType;
274 static constexpr uint8_t INSTRUMENT_TOKEN_IDX = 0;
275 static constexpr uint8_t EXCHANGE_TOKEN_IDX = 1;
276 static constexpr uint8_t TRADINGSYMBOL_IDX = 2;
277 static constexpr uint8_t NAME_IDX = 3;
278 static constexpr uint8_t LAST_PRICE_IDX = 4;
279 static constexpr uint8_t EXPIRY_IDX = 5;
280 static constexpr uint8_t STRIKE_PRICE_IDX = 6;
281 static constexpr uint8_t TICK_SIZE_IDX = 7;
282 static constexpr uint8_t LOT_SIZE_IDX = 8;
283 static constexpr uint8_t INSTRUMENT_TYPE_IDX = 9;
284 static constexpr uint8_t SEGMENT_IDX = 10;
285 static constexpr uint8_t EXCHANGE_IDX = 11;