Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added

- **Rust:** `market::TradeStatus` models `/v1/quote/market-status` trade status codes, including engine-compatible normalization and display helpers.
- **C++:** `market::TradeStatus` models `/v1/quote/market-status` trade status codes, with status-code conversion, normalization, display helpers, and typed `MarketTimeItem` status fields.

### Fixed

Expand Down
107 changes: 104 additions & 3 deletions cpp/include/types.hpp
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
#pragma once

#include "decimal.hpp"
#include <cstdint>
#include <map>
#include <optional>
#include <string>
#include <vector>

namespace longbridge {
Expand Down Expand Up @@ -2301,13 +2303,112 @@ struct CreateTopicOptions
// ── MarketContext types ───────────────────────────────────────────
namespace market {

/// Market trading status code.
enum class TradeStatus : int32_t
{
/// Unknown status
UNKNOWN = -1,
/// Quote is not registered
NO_REGISTER_QUOTE = 0,
/// Clearing before the market opens
CLEAN = 101,
/// Opening auction
OPEN_BID = 102,
/// Morning break, currently used by VIX indexes
MORNING_CLOSING = 103,
/// Regular trading
TRADING = 105,
/// Midday break
NOON_CLOSING = 106,
/// Closing auction
CLOSE_BID = 107,
/// Market closed
CLOSING = 108,
/// Dark trading waiting to open
DARK_WAIT = 110,
/// Dark trading
DARK_TRADING = 111,
/// Dark trading closed
DARK_CLOSING = 112,
/// After-hours fixed-price trading
AFTER_FIX = 120,
/// Half-day market closed
HALF_CLOSING = 121,
/// Not opened because the exchange is waiting to open under special conditions
NOT_OPENED = 122,
/// Temporary intraday break
REALTIME_QUOTE = 123,
/// US pre-market
US_PREV = 201,
/// US regular trading
US_TRADING = 202,
/// US post-market
US_AFTER = 203,
/// US closed
US_CLOSING = 204,
/// US halted
US_STOP = 205,
/// US clearing plus pre-market
US_CLEAN = 206,
/// US overnight trading
US_NIGHT = 207,
/// US pre-market clearing alias returned by the quote engine
US_PREV_MARKET_CLEAN = 209,
/// US post-market clearing alias returned by the quote engine
US_AFTER_MARKET_CLEAN = 210,
/// Stock refresh. Deprecated in the status definition
REFRESH = 1000,
/// Delisted
DELIST = 1001,
/// Preparing to list
PREPARE = 1002,
/// Code changed
CODE_CHANGE = 1003,
/// Halted
STOP = 1004,
/// Waiting to open, typically for a US IPO auction
WILL_OPEN = 1005,
/// Split or merge suspended
COMMON_SUSPEND = 1006,
/// Expired
EXPIRE = 1007,
/// No quote data
NO_QUOTE = 1008,
/// Not listed
UNITED = 1009,
/// Terminated trading, usually for warrants
TRADING_HALT = 1010,
/// Waiting to list, usually for new warrants
WAIT_LISTING = 1011,
/// Fuse
FUSE = 2001,
};

TradeStatus from_trade_status_code(int32_t value);
int32_t code(TradeStatus status);
const char* trade_status_as_string(TradeStatus status);
const char* label(TradeStatus status);
const char* name(TradeStatus status);
bool is_us_market(TradeStatus status);
bool is_us_pre_post(TradeStatus status);
bool is_us_night(TradeStatus status);
bool is_us_closing(TradeStatus status);
bool is_closing(TradeStatus status);
bool is_us_prev(TradeStatus status);
bool is_us_after(TradeStatus status);
bool is_trading(TradeStatus status);
bool is_dark(TradeStatus status);
bool allow_trading(TradeStatus status);
TradeStatus normalize(TradeStatus status);
bool is_special(TradeStatus status);

/// Current trading status and timestamps for one market.
struct MarketTimeItem
{
longbridge::Market market;
int32_t trade_status;
TradeStatus trade_status;
std::string timestamp;
int32_t delay_trade_status;
TradeStatus delay_trade_status;
std::string delay_timestamp;
int32_t sub_status;
int32_t delay_sub_status;
Expand Down Expand Up @@ -3635,4 +3736,4 @@ struct SharelistDetail

} // namespace sharelist

} // namespace longbridge
} // namespace longbridge
8 changes: 7 additions & 1 deletion cpp/src/convert.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2387,7 +2387,13 @@ inline fundamental::AssetAllocationResponse convert(const lb_asset_allocation_re
// ── MarketContext conversions ─────────────────────────────────────

inline market::MarketTimeItem convert(const lb_market_time_item_t* item) {
return { convert(item->market), item->trade_status, item->timestamp, item->delay_trade_status, item->delay_timestamp, item->sub_status, item->delay_sub_status };
return { convert(item->market),
market::from_trade_status_code(item->trade_status),
item->timestamp,
market::from_trade_status_code(item->delay_trade_status),
item->delay_timestamp,
item->sub_status,
item->delay_sub_status };
}
inline market::MarketStatusResponse convert(const lb_market_status_response_t* r) {
std::vector<market::MarketTimeItem> v;
Expand Down
Loading
Loading