SPB Git

spb/wp40_uqo

Public MIT
1.7 KB · 30 lines cpp
1// Returns from prices / bars. Session-aware: by default no return is computed across a session boundary2// (the first bar of each session has no intraday return); overnight returns are optional and explicit.3#pragma once4#include <vector>5#include <span>6#include "raid/core/types.hpp"7#include "raid/data/bar_series.hpp"89namespace raid::data {1011enum class ReturnKind { log, arithmetic };1213/// Plain returns of a price vector (r_t = log(p_t/p_{t-1}) or p_t/p_{t-1} − 1), size n−1.14std::vector<f64> returns(std::span<const f64> prices, ReturnKind kind = ReturnKind::log);1516struct IntradayReturns {17  std::vector<f64> r;               // concatenated intraday returns, session by session18  std::vector<i64> session_offsets; // per session: offsets into r (n_sessions + 1)19  std::vector<Date> session_dates;20  std::vector<f64> overnight;       // close(prev session) → first price of session (NaN for the first session), one per session21  std::vector<f64> open_to_close;   // open-to-close daily return (from first bar open to last bar close)22  std::vector<f64> close_to_close;  // daily close-to-close return (NaN for first)23  std::span<const f64> session(usize k) const { return std::span<const f64>(r).subspan(static_cast<usize>(session_offsets[k]), static_cast<usize>(session_offsets[k + 1] - session_offsets[k])); }24};25/// Intraday close-to-close bar returns within each session, plus daily summaries. `use_open_first` makes the first26/// return of a session open→close of the first bar instead of skipping it (not the default; documented in the registry).27IntradayReturns intraday_returns(const BarSeries& bars, ReturnKind kind = ReturnKind::log, bool use_open_first = false);2829}  // namespace raid::data30
Files · ae5a4e6ff6df81cef716eacbb5d51143a008d45b
Menu

Theme