16#include <unordered_map>
17#include <unordered_set>
47#define PINEFORGE_NO_STRATEGY_DECLS
57#define PINEFORGE_HAS_TRADE_HISTORY_POLICY_V1 1
58#define PINEFORGE_HAS_SCRIPT_RUN_PREPARE_V1 1
59#define PINEFORGE_HAS_NATIVE_LIVE_V1 1
60#define PINEFORGE_HAS_EQUITY_METRICS_FOLD_V1 1
68class SelectedReportStream;
70enum class EquityBasis : std::uint8_t;
91enum class DualEntryStopPathWinner : int;
177 std::numeric_limits<double>::quiet_NaN();
366 "legacy C and C++ report sizes must match");
369 "versioned report payload offsets must match");
371 "versioned C and C++ report sizes must match");
401 void begin(
double mark_price,
std::int64_t mark_time_ms,
int interval_index,
402 double account_fx,
bool was_long,
std::
size_t count);
406 std::size_t
size() const noexcept {
return present_ ? count_ : synthetic_.size(); }
407 double pnl() const noexcept {
return pnl_; }
431 return source_ == other.source_ && index_ == other.index_;
437 : source_(
source), index_(index) {}
439 std::size_t index_ = 0;
444 struct OwnedExcursions;
445 Trade build_row(std::size_t index,
bool consult_excursion_hook)
const;
447 bool present_ =
false;
448 bool was_long_ =
false;
449 double mark_price_ = 0.0;
450 std::int64_t mark_time_ms_ = 0;
451 int interval_index_ = 0;
452 double account_fx_ = 1.0;
453 std::size_t count_ = 0;
457 std::shared_ptr<const OwnedExcursions> excursions_;
461 mutable std::deque<Trade> materialized_;
464 std::vector<Trade> synthetic_;
502using InputsMap = std::unordered_map<std::string, std::string>;
520 uint64_t
h = 1469598103934665603ULL;
522 void bytes(
const void* p,
size_t n) {
523 const unsigned char* c =
static_cast<const unsigned char*
>(p);
524 for (
size_t i = 0;
i < n; ++
i) {
h ^= c[
i];
h *= 1099511628211ULL; }
528 if (v == 0.0) v = 0.0;
529 if (v != v) v = std::numeric_limits<double>::quiet_NaN();
533 void i(int64_t v) {
bytes(&v,
sizeof v); }
534 void u(uint64_t v) {
bytes(&v,
sizeof v); }
535 void b(
bool v) {
const unsigned char c = v ? 1 : 0;
bytes(&c, 1); }
536 void s(
const std::string& v) {
u(v.size());
bytes(v.data(), v.size()); }
671 std::unordered_map<std::string, std::string>
inputs_;
685 std::string
get_input_string(
const std::string& key,
const std::string& default_val)
const;
807 std::unique_ptr<metrics::StreamingEquityRatiosV1>
fold;
831 auto& s = engine_.metrics_streaming_;
832 s.pending_plain = s.prepared =
false;
834 s.pending_failed_plain_inputs = 0;
843 template<
class Source>
847 {
const_cast<Source*
>(&curve), count,
848 [](
void* context, std::int64_t index) {
849 return (*
static_cast<const Source*
>(context))[index];
916 const Bar& entry_bar,
1097 const double inv_int = std::floor(inv + 0.5);
1098 if (inv_int > 0.0 && std::abs(inv - inv_int) <= 1e-6 * inv_int) {
1130 for (
int n = 0; n <= 10; ++n) {
1131 const double k = std::floor(scaled + 0.5);
1132 if (k >= 1.0 && std::abs(scaled - k) <= 1e-6 * k)
return n;
1138 if (std::isnan(level) || !std::isfinite(level))
return level;
1140 if (n < 0)
return level;
1141 double pricescale = 1.0;
1142 for (
int i = 0; i < n; ++i) pricescale *= 10.0;
1148 const double pointsize = 1.0 / pricescale;
1149 const double p = level / pointsize;
1150 const double k = std::floor(p + 0.5);
1152 return k / pricescale;
1176 return fill_price * qty *
syminfo_.pointvalue
1198 if (units <= 0.0)
return 0.0;
1200 return units >= pe.
qty ? paid : paid * (units / pe.
qty);
1227 if (
qty_step_ <= 0.0 || !std::isfinite(qty) || qty <= 0.0)
return qty;
1229 return floored < qty ? floored : qty;
1247 if (
qty_step_ <= 0.0 || !std::isfinite(qty) || qty <= 0.0)
return qty;
1249 return floored < qty ? floored : qty;
1283 for (
const auto& t :
trades_) { s += t.pnl_pct; ++n; }
1284 return n > 0 ? s /
static_cast<double>(n) : 0.0;
1296 for (
const auto& t :
trades_) {
1297 if (t.pnl > 0.0) { s += t.pnl_pct; ++c; }
1299 return (c > 0) ? (s / (double)c) : 0.0;
1305 for (
const auto& t :
trades_) {
1306 if (t.pnl < 0.0) { s += t.pnl_pct; ++c; }
1308 return (c > 0) ? (s / (double)c) : 0.0;
1364 gmtime_r(&secs, &tm_buf);
1366 bt.
year = tm_buf.tm_year + 1900;
1367 bt.
month = tm_buf.tm_mon + 1;
1369 bt.
hour = tm_buf.tm_hour;
1370 bt.
minute = tm_buf.tm_min;
1371 bt.
second = tm_buf.tm_sec;
1373 bt.
weekofyear = (tm_buf.tm_yday + 7 - ((tm_buf.tm_wday + 6) % 7)) / 7;
1549 value.store(
false, std::memory_order_relaxed);
1553 value.store(
false, std::memory_order_relaxed);
1556 bool load(std::memory_order order)
const {
return value.load(order); }
1557 void store(
bool v, std::memory_order order) {
value.store(v, order); }
1590 const std::string& input_tf);
1701 const double eq = held.equity;
1702 if (eq > prefix[0]) prefix[0] = prefix[1] = eq;
1703 if (eq < prefix[1]) prefix[1] = eq;
1704 const double dd = prefix[0] - eq;
1705 if (dd > prefix[2]) prefix[2] = dd;
1706 const double ru = eq - prefix[1];
1707 if (ru > prefix[3]) prefix[3] = ru;
1733 if (index >= 0 && index < (
int)
trades_.size())
1738 if (idx < 0 || idx >= (
int)
trades_.size())
return std::numeric_limits<double>::quiet_NaN();
1739 return trades_.pnl_pct_at(idx);
1742 if (idx < 0 || idx >= (
int)
trades_.size())
return std::numeric_limits<double>::quiet_NaN();
1743 return trades_.commission_at(idx);
1747 return trades_.entry_bar_index_at(idx);
1751 return trades_.exit_bar_index_at(idx);
1754 if (idx < 0 || idx >= (
int)
trades_.size())
return std::string();
1755 return trades_.entry_comment_at(idx);
1758 if (idx < 0 || idx >= (
int)
trades_.size())
return std::string();
1759 return trades_.exit_comment_at(idx);
1762 if (idx < 0 || idx >= (
int)
trades_.size())
return std::string();
1763 return trades_.entry_id_at(idx);
1766 if (idx < 0 || idx >= (
int)
trades_.size())
return std::string();
1767 return trades_.exit_id_at(idx);
1770 if (idx < 0 || idx >= (
int)
trades_.size())
return 0;
1771 return trades_.entry_incarnation_at(idx);
1774 if (idx < 0 || idx >= (
int)
trades_.size())
return std::numeric_limits<double>::quiet_NaN();
1775 return trades_.entry_price_at(idx);
1778 if (idx < 0 || idx >= (
int)
trades_.size())
return std::numeric_limits<double>::quiet_NaN();
1779 return trades_.exit_price_at(idx);
1782 if (idx < 0 || idx >= (
int)
trades_.size())
return 0;
1783 return trades_.entry_time_at(idx);
1786 if (idx < 0 || idx >= (
int)
trades_.size())
return 0;
1787 return trades_.exit_time_at(idx);
1790 if (idx < 0 || idx >= (
int)
trades_.size())
return std::numeric_limits<double>::quiet_NaN();
1794 if (idx < 0 || idx >= (
int)
trades_.size())
return 0.0;
1795 return trades_.max_runup_at(idx);
1802 if (idx < 0 || idx >= (
int)
trades_.size())
return 0.0;
1804 return (cost > 0.0) ? (
trades_.max_runup_at(idx) / cost) * 100.0 : 0.0;
1807 if (idx < 0 || idx >= (
int)
trades_.size())
return 0.0;
1808 return trades_.max_drawdown_at(idx);
1811 if (idx < 0 || idx >= (
int)
trades_.size())
return 0.0;
1813 return (cost > 0.0) ? (
trades_.max_drawdown_at(idx) / cost) * 100.0 : 0.0;
1818 if (idx < 0 || idx >= (
int)
trades_.size())
return "";
1819 return trades_.is_long_at(idx) ?
"long" :
"short";
1888 struct NativeSettlementStage;
1889 struct NativeSettlementRows;
1892 NativeSettlementStage& stage,
1894 double& remaining)
const;
1898 const NativeSettlementStage& stage,
const execution::Fill& fill)
const;
1900 const NativeSettlementStage& stage,
const execution::Fill& fill)
const;
1908 NativeSettlementRows& rows)
const;
1912 NativeSettlementRows& rows)
const;
1914 const NativeSettlementStage& stage,
1916 const NativeSettlementRows& rows);
1921 NativeSettlementRows& rows);
1927 NativeSettlementStage& stage,
1934 NativeSettlementStage& stage,
1950 const std::vector<double>& closed_units,
double opening_units,
1959 double fill_price,
bool was_long,
double entry_commission,
1960 double exit_commission,
1965 double fill_price,
bool was_long,
double entry_commission,
1966 double exit_commission,
1989 bool count_miss =
true);
1991#ifdef PINEFORGE_HAS_AUX_SECURITY_FEED_V1
2022 mutable std::unique_ptr<IExecutionConsumer>
ptr;
2025 :
native(other.native) {}
2027 if (
this != &other) {
2037 if (
this != &other) {
2066 const std::string& input_tf,
2067 const std::string& script_tf,
2068 bool bar_magnifier =
false,
2069 int magnifier_samples = 4,
2072#ifdef PINEFORGE_HAS_AUX_SECURITY_FEED_V1
2077 const std::string& input_tf);
2085 const Bar* bars,
int n);
2110 const Bar* bars,
const int64_t* close_ms,
int n);
2112 const std::string& name,
const double* values,
int n);
2114 const std::string& value);
2116 const double* values,
int n);
2125 const std::string& input_tf,
2126 const std::string& script_tf =
"");
2151 const double* rates,
int n);
2154 const std::string& input_tf,
2155 const std::string& script_tf,
2156 const std::unordered_map<std::string, std::string>& inputs,
2162 const void* overrides =
nullptr,
2163 bool bar_magnifier =
false,
2164 int magnifier_samples = 4,
2171 std::uint64_t* allocation_bypass_count)
const noexcept;
2184 return trades_.previous(cursor, value);
2197 const int n_closed = (int)
trades_.size();
2198 return i < n_closed ?
trades_[(size_t)i]
2205 const int n_closed =
static_cast<int>(
trades_.size());
2206 return i < n_closed ?
trades_.materialize(
static_cast<std::size_t
>(i))
2279 void set_input(
const std::string& key,
const std::string& value) {
2371 if (value.empty())
return false;
2372 if (key ==
"type") {
syminfo_.type = value;
return true; }
2373 if (key ==
"ticker") {
syminfo_.ticker = value;
return true; }
2374 if (key ==
"tickerid") {
syminfo_.tickerid = value;
return true; }
2375 if (key ==
"currency") {
syminfo_.currency = value;
return true; }
2376 if (key ==
"basecurrency") {
syminfo_.basecurrency = value;
return true; }
2377 if (key ==
"description") {
syminfo_.description = value;
return true; }
2378 if (key ==
"volumetype") {
syminfo_.volumetype = value;
return true; }
2395 if (pv > 0.0) {
syminfo_.pointvalue = pv; }
2494 int* close_only,
int* partition)
const;
2498 double* trail_activation)
const;
2593 void trace(
const std::string& name,
double value);
2594 void trace(
const std::string& name,
bool value) {
trace(name, value ? 1.0 : 0.0); }
2595 void trace(
const std::string& name,
int value) {
trace(name,
static_cast<double>(value)); }
2636 int64_t capacity, int64_t* written)
const;
2638 int64_t* written)
const;
2675 void clear_output_record();
2676 bool output_host_running()
const;
2677 void record_output_event(
int output,
double value,
const std::string* message);
2678 int outputs_slots_ = 0;
2679 int outputs_count_ = 0;
2680 int outputs_constants_ = 0;
2681 bool outputs_declared_ =
false;
2682 bool output_run_begun_ =
false;
2683 std::vector<double> output_series_;
2684 std::vector<int64_t> output_open_ms_;
2685 std::vector<int64_t> output_close_ms_;
2686 std::vector<OutputEvent> output_events_;
2687 uint64_t output_sequence_ = 0;
2688 uint64_t output_row_seq_base_ = 0;
2689 uint64_t output_cleared_sequence_ = 0;
2690 std::vector<uint32_t> output_ordinals_;
2691 std::vector<double> output_constants_;
2692 std::vector<uint8_t> output_constant_written_;
2701 double native_quantity_tolerance_ = 0.0;
2707 struct ScratchTableRun {
2708 std::shared_ptr<detail::ScratchSlab> slab;
2709 ScratchTableRun() =
default;
2710 ScratchTableRun(
const ScratchTableRun&)
noexcept {}
2711 ScratchTableRun& operator=(
const ScratchTableRun& other)
noexcept {
2712 if (
this != &other) slab.reset();
2715 ScratchTableRun(ScratchTableRun&&) noexcept = default;
2716 ScratchTableRun& operator=(ScratchTableRun&&) noexcept = default;
2718 ScratchTableRun scratch_table_run_;
2719 void prepare_scratch_table_run(const detail::ScratchTableConfig& config);
2723 struct ReportSinkState {
2724 bool enabled =
false;
2725 bool trade_history_streamable =
false;
2726 std::string path, run_id, scratch_dir;
2728 std::uint64_t fd_device = 0;
2729 std::uint64_t fd_inode = 0;
2730 bool fd_identity_valid =
false;
2731 std::uint32_t active_calls = 0;
2732 std::uint32_t stream_calls = 0;
2733 std::unique_ptr<report_sink::LineWriter> writer;
2736 std::unique_ptr<report_sink::ScratchCurveWriter> equity_scratch;
2737 bool equity_tail_stored =
false;
2739 pf_report_sink_summary_v1 summary{};
2743 double equity_prefix[4]{};
2746 std::int64_t output_base = 0;
2749 std::unique_ptr<report::SelectedReportStream> selected_equity_stream;
2754 double selected_released_extremes[4]{};
2757 ReportSinkState(
const ReportSinkState& other);
2758 ReportSinkState& operator=(
const ReportSinkState& other);
2759 ReportSinkState(ReportSinkState&&) noexcept;
2760 ReportSinkState& operator=(ReportSinkState&&) noexcept;
2763 mutable ReportSinkState report_sink_state_;
2770 ReportMode report_mode_ = ReportMode::FULL;
2772 class ReportSinkCallScope {
2773 ReportSinkState& state;
2776 explicit ReportSinkCallScope(
const BacktestEngine& engine,
bool is_stream =
false)
2777 : state(engine.report_sink_state_), stream(is_stream) {
2778 ++state.active_calls;
2779 if (stream) ++state.stream_calls;
2781 ~ReportSinkCallScope() {
2782 if (stream) --state.stream_calls;
2783 --state.active_calls;
2785 ReportSinkCallScope(
const ReportSinkCallScope&) =
delete;
2786 ReportSinkCallScope& operator=(
const ReportSinkCallScope&) =
delete;
2788 int report_sink_setter_status()
const;
2789 void begin_report_sink();
2790 void finish_report_sink(ReportC* out)
const;
2791 void stage_report_sink_equity_point(
const pf_equity_point_t& point)
const;
2792 void stage_report_sink_equity_tail(
const ReportC* out)
const;
2793 void compute_report_sink_metrics(ReportC* out, std::int64_t equity_count,
2794 CacheCapacity equity_capacity)
const;
2795 void compute_report_sink_trade_metrics(ReportC* out,
2796 const TradeC* open_rows,
int count)
const;
2797 void write_report_sink_trades(
const TradeC* open_rows,
int count)
const;
2798 void fill_report_sink_metrics_section(ReportC* out)
const;
2799 template<
class Write>
void report_sink_record(Write write)
const;
2800 bool stream_report_sink_trace(
const std::string& name,
const TraceEntryC& entry);
2801 void reset_report_sink_outputs();
2802 std::int64_t report_sink_output_row()
const;
2803 void write_report_sink_output_row()
const;
2804 void write_report_sink_events()
const;
2805 void retire_report_sink_output_row();
2806 void write_report_sink_hashes()
const;
2807 void retire_report_sink_hashes();
2808 void begin_report_replay();
2809 void finish_report_replay(
const ReportC* out)
const;
2810 void record_report_replay_close(std::size_t global);
2811 void record_report_replay_point(
const pf_equity_point_t& point);
2812 void write_report_replay_equity(
const pf_equity_point_t& point)
const;
2813 void write_report_replay_trade(std::size_t global,
bool terminal)
const;
2814 void retire_report_replay_trades(std::size_t global_end);
2820 if (descriptor && (descriptor->
struct_size !=
sizeof(*descriptor)
2822 || descriptor->
backend >
static_cast<std::uint32_t
>(
2824 || descriptor->
V > 27))
return -1;
2825 const int status = report_sink_setter_status();
2826 if (status != 0)
return status;
2831 descriptor->
K_e, descriptor->
B_e,
2832 descriptor->
K_c, descriptor->
B_c,
2833 descriptor->
U, descriptor->
B_U,
2834 descriptor->
V, descriptor->
B_V, descriptor->
R};
2836 scratch_table_config_ = next;
2840 return scratch_table_config_;
2875 return static_cast<ReportMode>(
static_cast<std::uint32_t
>(mode)
2889 return scratch_table_run_.slab;
2895 return trades_.entry_id_matches(idx, rhs);
2899 return trades_.exit_id_matches(idx, rhs);
2903 return trades_.entry_comment_matches(idx, rhs);
2907 return trades_.exit_comment_matches(idx, rhs);
2959 void reset_optional_sequence_witness();
2960 void fold_pending_hashes_into_witness()
const;
2961 void fold_current_output_row_witness()
const;
2962 void finalize_summary_output_row();
2964 std::uint64_t hash);
2966 std::int64_t timestamp, std::int32_t
bar_index,
2967 const std::string& name,
double value);
2969 std::int64_t row, std::int64_t open_ms,
2970 std::int64_t close_ms,
const double* values,
2971 std::int64_t count);
2979 mutable std::size_t sequence_hash_folded_ = 0;
2980 mutable std::uint64_t sequence_hash_folded_leaf_ = 0;
2981 mutable bool sequence_row_folded_ =
false;
2989 char* error, std::size_t capacity)
noexcept;
2995 static std::optional<std::int64_t> default_output_series_limit() noexcept;
2998 std::optional<
std::int64_t> max_output_series_ = default_output_series_limit();
3014 void* strategy,
std::uint32_t streaming_sharpe,
3015 std::uint64_t metrics_needed) noexcept;
3017 const
void* strategy,
pineforge::metrics::MetricsExtentReceiptV1* out) noexcept;
~MetricsStreamingAttemptV1()
MetricsStreamingAttemptV1(BacktestEngine &engine)
MetricsStreamingAttemptV1(const MetricsStreamingAttemptV1 &)=delete
MetricsStreamingAttemptV1 & operator=(const MetricsStreamingAttemptV1 &)=delete
bool native_security_feed_enabled() const
double open_trade_max_drawdown(int idx) const
double tick_grid_price(double price) const
int report_trade_count() const
double get_syminfo_metadata(const std::string &key) const
double open_trade_max_runup(int idx) const
double allocated_entry_commission(const PyramidEntry &pe, double units) const
static int output_series_limit_failure(std::int64_t *maximum) noexcept
metrics::MetricsStreamingStatusV1 metrics_extent_receipt_v1(metrics::MetricsExtentReceiptV1 *) const
bool stream_script_tick_seen_
StreamInputMode stream_input_mode_
virtual void snapshot_script_state()
int output_constants_count() const
void append_quoted_lot(PyramidEntry lot, double total_qty, double average_price)
bool last_script_continuation_valid_
double grossprofit_percent() const
int report_sink_diagnostics_v1(pf_report_sink_diagnostics_v1 *out) const noexcept
virtual void prepare_script_run(const Bar *, int, bool)
std::unordered_map< std::string, std::string > inputs_
broker::PositionCloseObligation position_close_obligation_
void open_quoted_position(PositionSide requested, PyramidEntry lot)
double open_profit_at(double current_price, double fx) const
MagnifierDistribution magnifier_dist_
double closed_trade_profit(int index) const
const StreamOrderAction & stream_order_action_at(int i) const
int set_optional_report_mode(report_sequence::ReportMode mode)
execution::Status validate_native_settlement_book(double &held) const
int64_t stream_input_tf_ms_
ReportMode equity_report_mode() const
void set_chart_timezone(const std::string &tz)
void record_equity_point(int64_t script_bar_ts)
virtual void finalize_bar()
bool stream_seen_sequence_
int64_t native_security_misses() const
double closed_trade_max_runup_percent(int idx) const
double max_contracts_held_all() const
double max_drawdown_percent() const
const std::string & last_error() const
double closed_trade_commission(int idx) const
void feed_security_eval_state(SecurityEvalState &state, const Bar &input_bar)
int64_t open_trade_entry_time(int idx) const
virtual void on_bar(const Bar &bar)=0
void set_syminfo_mintick(double m)
virtual int observe_pending_effective_levels(int index, double *stop, double *limit, double *trail_activation) const
double open_trade_profit_percent(int idx) const
bool stream_has_last_price_
std::string open_trade_entry_comment(int idx) const
double closed_trade_max_drawdown_percent(int idx) const
execution::Status prepare_native_settlement_commit(const NativeSettlementStage &stage, const execution::Fill &fill, const execution::PhysicalExecutionContext &context, NativeSettlementRows &rows) const
execution::Status preview_native_settlement_commit(const execution::ReverseTo &reversal, const execution::Fill &fill, const execution::PhysicalExecutionContext &context, execution::AccountEffectProjection &account, std::vector< double > &row_pnl) const
double open_trade_max_drawdown_percent(int idx) const
int closed_trade_close_cause(int i) const
CommissionType commission_type_
void fold_report_equity_extreme(double equity)
execution::SettlementInspection inspect_native_settlement_stage(const NativeSettlementStage &stage, const execution::Fill &fill) const
std::int64_t equity_logical_point_count() const
execution::SettlementInspection inspect_native_settlement_scoped(const execution::Action &action, const execution::Fill &fill, execution::CloseScope scope) const
double report_pointvalue() const noexcept
execution::Result settle_with_context_scoped(const execution::Action &action, const execution::Fill &fill, const execution::LifecycleEffects &lifecycle, const execution::PhysicalExecutionContext &context, execution::CloseScope scope)
execution::Status preview_native_settlement_commit(const execution::Action &action, const execution::Fill &fill, const execution::PhysicalExecutionContext &context, execution::CloseScope scope, const execution::SelectedOpeningSet *selected, execution::AccountEffectProjection &account, std::vector< double > &row_pnl) const
execution::Status preflight_native_settlement_effects(const NativeSettlementStage &stage, const execution::LifecycleEffects &lifecycle, const NativeSettlementRows &rows)
int64_t position_cycle_seq() const
bool output_bar_times_copy(int64_t from_bar, int64_t *open_ms, int64_t *close_ms, int64_t capacity, int64_t *written) const
static int set_output_series_limit_checked(const std::int64_t *maximum, char *error, std::size_t capacity) noexcept
int closed_trade_entry_bar_index(int idx) const
int report_equity_month_key(std::int64_t time_ms) const
double get_input_double(const std::string &key, double default_val) const
OpenReportRowSource range_end_trades_
bool closed_trade_exit_comment_equals(int idx, std::string_view rhs) const
void register_security_eval(int sec_id, const std::string &requested_tf, const std::string &input_tf)
pf_equity_point_t * last_equity_point() noexcept
void set_syminfo_type(const std::string &t)
std::vector< PyramidEntry > pyramid_entries_
void snapshot_entry_commission(PyramidEntry &pe) const
execution::Result settle_source_staged_execution(NativeSettlementStage &stage, const execution::Fill &fill, const execution::LifecycleEffects &lifecycle, const execution::PhysicalExecutionContext &context)
bool stream_advance_time(int64_t timestamp_ms)
double stream_last_price_
bool aux_security_feed_enabled() const
virtual int observe_last_bar_dual_entry_path_v1() const
execution::SettlementInspection inspect_native_settlement(const execution::Action &action, const execution::Fill &fill) const
double live_current_equity() const
NativeDayPartition chart_day_partition_
double open_entry_commission(const PyramidEntry &pe) const
execution::Result commit_prepared_native_settlement_stage(NativeSettlementStage &stage, const execution::Fill &fill, const execution::LifecycleEffects &lifecycle, const execution::PhysicalExecutionContext &context, NativeSettlementRows &rows)
virtual double observe_trail_best_price_v1() const
int64_t trade_start_time_
static constexpr std::uint32_t report_replay_flag
bool stream_push_bar(const Bar &bar)
int64_t closed_trade_exit_time(int idx) const
virtual bool set_recorded_series(const std::string &key, const int64_t *chart_open_ms, const double *values, int n)
bool stream_script_bar_had_tick_
void prepare_chart_day_partition(const Bar *input_bars, int n_input)
uint64_t stream_action_sequence_
int _bar_weekofyear() const
int fill_report_envelope_v1(ReportEnvelopeV1 *out) const
void set_trade_history_streamable(bool streamable)
void finish_native_settlement_stage(NativeSettlementStage &stage, const execution::Fill &fill) const
execution::SettlementInspection inspect_native_settlement_selected(const execution::Action &action, const execution::Fill &fill, const execution::SelectedOpeningSet &selection) const
void dispatch_security_eval(SecurityEvalState &state, const Bar &bar, bool publish, int64_t bar_index)
TradePercentPrefix trade_percent_prefix_
std::string get_input_string(const std::string &key, const std::string &default_val) const
ReportMode active_equity_report_mode_
double output_constant_value(int index) const
virtual void source_stream_entry_comment(const PyramidEntry &, std::string &) const
void refold_equity_tail()
int set_report_sink_fd_v1(const pf_report_sink_fd_v1 *sink)
std::string closed_trade_direction(int idx) const
execution::Result settle_native_execution_selected_at(const execution::Action &action, const execution::Fill &fill, const execution::PhysicalExecutionContext &context, const execution::SelectedOpeningSet &selection)
BarTime _decompose_bar_time() const
int64_t native_security_substitutions() const
double account_currency_fx_at(int64_t timestamp_ms) const
const OutputEvent * output_event_at(int index) const
Trade build_close_trade_with_costs(const PyramidEntry &pe, double close_qty, double fill_price, bool was_long, double entry_commission, double exit_commission, const execution::PhysicalExecutionContext &context) const
execution::Result settle_execution_selected_with_lifecycle(const execution::Action &action, const execution::Fill &fill, const execution::LifecycleEffects &lifecycle, const execution::SelectedOpeningSet &selection)
double current_equity() const
int64_t diag_magnifier_sample_ticks_processed_
Trade get_report_trade(int i) const
double active_account_currency_fx() const
uint64_t next_order_incarnation_
static void free_report(ReportC *report)
BacktestEngine(NativeConsumerBindTag)
bool set_outputs_enabled(bool on)
bool outputs_declared() const
double account_currency_fx_broker_rate_
int get_input_int(const std::string &key, int default_val) const
bool stream_end(bool finalize_partial_input_bar=false)
static int classify_report_close_cause(const Trade &row)
int price_grid_decimals() const
void set_input(const std::string &key, const std::string &value)
int diag_script_tf_ratio_
bool stream_push_ticks(const TradeTick *ticks, int n)
std::size_t closed_trade_count() const noexcept
double net_profit() const
void fill_security_diag_section(ReportC *out) const
int64_t diag_input_bars_processed_
virtual void present_report(ReportC *) const
double closed_trade_max_drawdown(int idx) const
uint64_t closed_trade_entry_incarnation(int idx) const
bool host_mutation_guard_inert_
std::vector< TraceEntryC > trace_buffer_
int set_report_replay_v1(const char *path, const char *run_id)
bool closed_trade_entry_id_equals(int idx, std::string_view rhs) const
virtual ~BacktestEngine()
double report_closed_net_profit() const
double open_trade_entry_price(int idx) const
std::optional< metrics::EquityRatioResult > summary_equity_ratios_
std::vector< double > account_currency_fx_rates_
void prepare_native_security_feeds(const Bar *input_bars, int n_input)
virtual std::uint64_t broker_state_hash_projection() const
double gross_profit() const
friend class NativeExecutionConsumer
int count_wintrades() const
void amend_report_replay_point(std::int64_t time, report::EquityBasis basis, double term) const
void output_value(int slot, double value)
std::string position_entry_name() const
virtual void evaluate_security(int sec_id, const Bar &bar, bool is_complete)
void trace(const std::string &name, double value)
bool set_native_security_feed(const std::string &timeframe, const Bar *bars, int n)
const std::string & report_scratch_directory() const noexcept
std::string security_input_tf_
execution::SettlementInspection inspect_native_settlement_selected_at(const execution::Action &action, const execution::Fill &fill, const execution::SelectedOpeningSet &selection, double fx) const
int set_equity_report_mode(ReportMode mode)
metrics::MetricsStreamingStatusV1 admit_metrics_plain_v1(const MetricsPlainInputsV1 &, const metrics::MetricsExtentPlanV1 &, metrics::MetricsExtentReceiptV1 *)
int64_t get_input_int64(const std::string &key, int64_t default_val) const
double max_contracts_held_short() const
bool stream_begin(const Bar *warmup_bars, int n_warmup, const std::string &input_tf, const std::string &script_tf="")
double open_trades_capital_held() const
bool stream_observe_actions_
void reset_position_state_to_flat()
void output_event(int output, double value, const std::string &message)
void stage_native_settlement(NativeSettlementStage &stage, const execution::ReverseTo &reversal, const execution::Fill &fill, const execution::LifecycleEffects *lifecycle, double fx) const
std::vector< SecurityEvalState > security_eval_states_
void record_close_trade(Trade trade)
void reset_trade_percent_prefix()
int64_t script_bars_processed() const
bool stream_has_input_bar_
void declare_outputs(int series_slots, int outputs, int run_constants=0)
int execution_contract() const
void build_native_settlement_close_rows(const NativeSettlementStage &stage, const execution::Fill &fill, const execution::PhysicalExecutionContext &context, NativeSettlementRows &rows) const
execution::AccountEffectProjection project_native_settlement_v1(const execution::Action &action, const execution::Fill &fill) const
double closed_trade_entry_price(int idx) const
int64_t diag_magnifier_sub_bars_processed_
std::vector< StreamOrderAction > stream_order_actions_
double apply_qty_step(double qty) const
void set_cache_policy(const CacheDefaults &policy)
int64_t security_next_input_ms_
double position_avg_price() const
IExecutionConsumer & execution_consumer()
int closed_trade_exit_bar_index(int idx) const
void output_event(int output, double value)
double gross_loss() const
bool closed_trade_exit_id_equals(int idx, std::string_view rhs) const
int64_t diag_native_security_misses_
friend class NativeStrategyHost
virtual int observe_probe_fill_qty(int index, double fill_price, double *qty, int *close_only, int *partition) const
int output_series_count() const
uint64_t broker_fill_event_seq_
void set_magnifier_volume_weighted(bool on)
double trail_best_price() const
metrics::MetricsStreamingStatusV1 prepare_metrics_streaming_v1(const metrics::MetricsStreamingConfigV1 &, const metrics::MetricsExtentPlanV1 &)
double level_on_price_grid(double level) const
void fill_trades_section(ReportC *out) const
double initial_capital() const
int64_t prev_bar_timestamp_
double account_currency_fx_
void observe_metrics_curve_v1(const Source &curve, std::int64_t count, pf_equity_stats_t *equity=nullptr) const
execution::AccountEffectProjection project_with_membership(const execution::Action &action, const execution::Fill &fill, execution::CloseScope book_or_opening, const execution::SelectedOpeningSet *selected, double fx) const
const std::string & chart_timezone() const
int64_t stream_next_input_open_ms_
virtual bool set_probe_suppress_tail_logic(bool on)
double closed_trade_exit_price(int idx) const
virtual void source_aux_security_input_view(const Bar *&bars, int &n) const
virtual int observe_pending_level_resolved(int index) const
bool set_account_currency_fx_series(const int64_t *timestamps_ms, const double *rates, int n)
double open_trade_max_runup_percent(int idx) const
bool trade_history_streamable() const
bool previous_closed_trade(std::size_t &cursor, Trade &value) const
std::vector< std::string > trace_names_
uint64_t stream_state_hash() const
void trace(const std::string &name, bool value)
void fill_metrics_section(ReportC *out) const
execution::Result settle_reversal_with_lifecycle_v1(const execution::ReverseTo &reversal, const execution::Fill &fill, const execution::LifecycleEffects &lifecycle)
int _bar_dayofweek() const
bool stream_is_realtime() const
bool broker_state_hash_recording_
int set_report_mode_v1(ReportMode mode)
bool diag_needs_aggregation_
void set_syminfo_session(const std::string &s)
void output_events_clear()
double apply_exit_qty_step(double qty) const
const IExecutionConsumer & execution_consumer() const
virtual bool set_symbol_feed_borrowed(const std::string &, const std::string &, const Bar *, const int64_t *, int)
int set_scratch_tables_v1(const pf_scratch_tables_v1 *descriptor)
std::unordered_map< std::string, double > syminfo_metadata_
double max_contracts_held_all_
report_sequence::OptionalSequenceSummary optional_sequence_summary() const
virtual void set_syminfo_metadata(const std::string &key, double value)
execution::Result settle_native_reversal_at_v1(const execution::ReverseTo &reversal, const execution::Fill &fill, const execution::PhysicalExecutionContext &context)
void run(const Bar *input_bars, int n_input, const std::string &input_tf, const std::string &script_tf, bool bar_magnifier=false, int magnifier_samples=4, MagnifierDistribution magnifier_dist=MagnifierDistribution::ENDPOINTS)
void stream_observe_entry(const PyramidEntry &pe)
bool get_input_bool(const std::string &key, bool default_val) const
void validate_close_trade_counters(const Trade *rows, size_t count) const
int report_sink_receipt_v1(pf_report_sink_receipt_v1 *out) const noexcept
void fill_trace_section(ReportC *out) const
double net_profit_roundoff_value_
bool session_template_knows_early_close() const
Whether TradingView's session template for this symbol carries the exchange's early closes and holida...
execution::Status allocate_native_settlement_closes(NativeSettlementStage &stage, const execution::CloseScope &book_or_opening, double &remaining) const
double open_trade_size(int idx) const
void sync_metrics_streaming_held_v1() const
double open_trade_commission(int idx) const
void stream_order_actions_clear()
uint64_t stream_last_sequence_
double position_entry_price_
virtual bool set_aux_security_feed(const Bar *bars, int n, const std::string &input_tf)
execution::SettlementInspection inspect_native_reversal_at(const execution::ReverseTo &reversal, const execution::Fill &fill, double fx) const
report::ReportReplay * find_report_replay() const noexcept
bool account_currency_fx_broker_epoch_initialized_
bool bar_magnifier_enabled_
double avg_losing_trade_percent() const
virtual bool report_presenter_supports_non_full() const noexcept
static constexpr double kLevelGridBandPoints
double open_profit(double current_price) const
void set_trace_enabled(bool on)
bool chart_day_partition_installed() const
execution::SettlementInspection inspect_with_membership(const execution::Action &action, const execution::Fill &fill, execution::CloseScope book_or_opening, const execution::SelectedOpeningSet *selected, double fx) const
bool summary_equity_snapshot_valid_
execution::Result settle_native_execution_scoped_at(const execution::Action &action, const execution::Fill &fill, const execution::PhysicalExecutionContext &context, execution::CloseScope scope)
std::vector< NativeSecurityFeed > native_security_feeds_
double max_contracts_held_long_
int set_cache_policy_v1(const pf_cache_policy_v1 *descriptor)
ReportMode pending_equity_report_mode() const noexcept
void stream_refresh_action_metadata(size_t first_action, size_t first_trade)
PositionSide position_side_
friend class OpenReportRowSource
virtual bool set_realtime_tail(bool on, int horizon_bars)
bool trace_enabled() const
double closed_trade_profit_percent(int idx) const
int open_trade_entry_bar_index(int idx) const
execution::AccountEffectProjection project_native_settlement_selected_v1(const execution::Action &action, const execution::Fill &fill, const execution::SelectedOpeningSet &selection) const
void store_equity_point(const pf_equity_point_t &point)
Trade get_trade(int i) const
execution::Result settle_with_membership(const execution::Action &action, const execution::Fill &fill, const execution::LifecycleEffects &lifecycle, const execution::PhysicalExecutionContext &context, execution::CloseScope book_or_opening, const execution::SelectedOpeningSet *selected)
void run(const Bar *bars, int n)
virtual void clear_security(int sec_id)
double open_trade_profit(int idx) const
const CacheDefaults & cache_policy_config() const
void fold_trade_percent_prefix(const Trade &trade)
int report_sink_summary_v1(pf_report_sink_summary_v1 *out) const noexcept
std::string chart_timezone_
AbortFlag abort_requested_
std::string closed_trade_entry_comment(int idx) const
ReportMode with_report_replay_flag(ReportMode mode) const noexcept
void set_path_order(int mode)
double max_runup_percent() const
bool magnifier_volume_weighted_
double avg_losing_trade() const
const detail::ScratchTableConfig & scratch_table_config() const noexcept
bool install_equity_ratio_result(const metrics::EquityRatioResult &result)
execution::AccountEffectProjection project_native_settlement_at(const execution::Action &action, const execution::Fill &fill, double fx) const
int32_t intern_trace_name(const std::string &name)
double avg_winning_trade() const
report::ReportReplay * report_replay_state() const noexcept
virtual void restore_script_state()
virtual bool set_symbol_feed_column(const std::string &key, const std::string &timeframe, const std::string &name, const double *values, int n)
void finish_metrics_streaming_v1(metrics::MetricsRatioCurveV1, pf_equity_stats_t *=nullptr) const
int64_t bar_time_memo_ts_
std::string open_trade_direction(int idx) const
virtual void hash_host_extension(BrokerStateHashSink &) const
virtual int observe_pending_copy_v1(int index, pf_pending_order_v1_t *out) const
double round_to_mintick(double price) const
const Trade & materialize_report_trade(int i) const
double raw_net_profit_sum() const noexcept
int report_cache_stats(std::uint64_t *resident_bytes, std::uint64_t *allocation_bypass_count) const noexcept
int count_losstrades() const
std::uint64_t broker_state_hash_from_execution_hash(std::uint64_t) const
bool output_series_copy(int slot, int64_t from_bar, double *out, int64_t capacity, int64_t *written) const
std::vector< double > quote_execution_commissions(const std::vector< double > &closed_units, double opening_units, const execution::Fill &fill, double fx) const
int set_report_sink_v1(const pf_report_sink_v1 *sink)
int64_t next_position_cycle_seq_
int stream_next_script_bar_index_
bool closed_trade_entry_comment_equals(int idx, std::string_view rhs) const
int _bar_dayofmonth() const
bool refold_summary_equity_tail()
double max_contracts_held_short_
bool prepare_equity_point()
metrics::EquityMetricsFold summary_equity_fold_
virtual void hash_source_extension(BrokerStateHashSink &) const
double avg_trade_percent() const
std::string closed_trade_entry_id(int idx) const
double marked_equity_at(double price, double fx) const
Trade closed_trade(std::size_t i) const
bool set_syminfo_string(const std::string &key, const std::string &value)
std::size_t account_currency_fx_broker_epoch_
int64_t diag_native_security_substitutions_
void set_syminfo_timezone(const std::string &tz)
int64_t diag_script_bars_processed_
void trace(const std::string &name, int value)
bool stream_push_tick(const TradeTick &tick)
const std::shared_ptr< detail::ScratchSlab > & scratch_tables_for_run() const noexcept
TimeframeAggregator script_tf_agg_
double summary_broker_equity_prefix_[4]
const metrics::EquityFoldSnapshot * equity_summary_snapshot() const
int64_t closed_trade_entry_time(int idx) const
void begin_metrics_streaming_v1(bool admitted_shape)
void fold_equity_extreme(double eq)
int position_entry_count_
void run(const Bar *input_bars, int n_input, const std::string &input_tf, const std::string &script_tf, const std::unordered_map< std::string, std::string > &inputs, const SymInfo &syminfo, const void *overrides=nullptr, bool bar_magnifier=false, int magnifier_samples=4, MagnifierDistribution magnifier_dist=MagnifierDistribution::ENDPOINTS)
virtual int observe_pending_count_v1() const
std::vector< uint64_t > broker_state_hashes_
double fold_exit_trail_peak_
execution::SettlementInspection inspect_native_settlement_scoped_at(const execution::Action &action, const execution::Fill &fill, execution::CloseScope scope, double fx) const
const std::string & main_period() const
bool summary_equity_ratios_ready_
ExecutionConsumerSlot execution_consumer_slot_
bool native_bound() const
metrics::ScratchCurveRegion report_sink_equity_scratch_region() const
execution::Result settle_native_execution_at(const execution::Action &action, const execution::Fill &fill, const execution::PhysicalExecutionContext &context)
int stream_order_actions_len() const
double closed_trade_size(int idx) const
std::string open_trade_entry_id(int idx) const
LotExcursionHook lot_excursion_hook_
std::string closed_trade_exit_id(int idx) const
void stream_observe_exit(size_t trade_index)
execution::Result settle_with_context_selected(const execution::Action &action, const execution::Fill &fill, const execution::LifecycleEffects &lifecycle, const execution::PhysicalExecutionContext &context, const execution::SelectedOpeningSet &selection)
virtual bool source_aux_security_feed_enabled() const
double calc_commission(double fill_price, double qty) const
double max_contracts_held_long() const
const CacheDefaults & cache_policy_for_run() const
bool substitute_native_security_bar(SecurityEvalState &state, Bar &bar, bool count_miss=true)
broker::OpeningObligations opening_obligations_
std::vector< pf_equity_point_t > equity_curve_
void update_equity_extremes()
execution::AccountEffectProjection project_native_settlement_scoped_v1(const execution::Action &action, const execution::Fill &fill, execution::CloseScope scope) const
int64_t position_cycle_seq_
virtual bool set_symbol_facts(const std::string &key, const std::string &field, const std::string &value)
virtual void configure_security_evaluators()
execution::Result commit_native_settlement_stage(NativeSettlementStage &stage, const execution::Fill &fill, const execution::LifecycleEffects &lifecycle, const execution::PhysicalExecutionContext &context)
double bar_fill_price(double raw_bar_price) const
int64_t output_bars_len() const
void set_broker_state_hash_recording(bool on)
uint64_t broker_state_hash() const
std::unordered_map< std::string, int32_t > trace_name_index_
std::vector< int64_t > account_currency_fx_timestamps_
virtual bool set_symbol_feed(const std::string &key, const std::string &timeframe, const Bar *bars, const int64_t *close_ms, int n)
double avg_winning_trade_percent() const
void present_report_equity_tail(ReportC *out) const
Trade build_close_trade_with_costs(const PyramidEntry &pe, double close_qty, double fill_price, bool was_long, double entry_commission, double exit_commission, const execution::PhysicalExecutionContext &context, const ClosedLotExcursion *retained_excursion, bool consult_excursion_hook) const
void output_constant(int index, double value)
std::string closed_trade_exit_comment(int idx) const
virtual void commit_script_state()
int64_t position_entry_time_
double grossloss_percent() const
double net_profit_roundoff_bound_
virtual double live_position_size() const
double closed_trade_max_runup(int idx) const
uint64_t last_script_continuation_hash_
double marked_equity(double price) const
metrics::EquityFoldSnapshot summary_equity_snapshot_
execution::AccountEffectProjection project_native_reversal_v1(const execution::ReverseTo &reversal, const execution::Fill &fill) const
double calc_commission_at(double fill_price, double qty, double fx) const
void output_bar(int64_t open_ms, int64_t close_ms)
execution::SettlementInspection inspect_native_reversal_v1(const execution::ReverseTo &reversal, const execution::Fill &fill) const
void set_trade_start_time(int64_t timestamp_ms)
int output_events_len() const
StreamPhase stream_phase_
execution::Result settle_with_context(const execution::Action &action, const execution::Fill &fill, const execution::LifecycleEffects &lifecycle, const execution::PhysicalExecutionContext &context)
int last_run_status() const
bool equity_summary_ratios_ready() const
execution::AccountEffectProjection project_native_settlement_stage(const NativeSettlementStage &stage, const execution::Fill &fill) const
void guard_native_mutation(const char *operation)
MetricsStreamingStateV1 metrics_streaming_
int64_t stream_last_tick_ms_
metrics::MetricsStreamingStatusV1 set_metrics_streaming_v1(metrics::StreamingSharpeV1, metrics::MetricsNeedMaskV1)
void declare_opened_lot_entry_bar_mask(uint64_t entry_incarnation, const Bar &entry_bar, OpenedLotFillPoint fill_point)
ReportMode pending_equity_report_mode_
void set_syminfo_pointvalue(double pv)
void stage_native_settlement(NativeSettlementStage &stage, const execution::Action &action, const execution::Fill &fill, execution::CloseScope book_or_opening, const execution::SelectedOpeningSet *selected, const execution::LifecycleEffects *lifecycle, double fx) const
void fill_report(ReportC *out) const
virtual ~BrokerStateHashProvider()=default
virtual std::uint64_t broker_state_hash_projection() const =0
void bytes(const void *p, size_t n)
void s(const std::string &v)
bool operator==(const const_iterator &other) const
const_iterator operator++(int)
const_iterator & operator++()
bool operator!=(const const_iterator &other) const
friend class OpenReportRowSource
std::ptrdiff_t difference_type
std::forward_iterator_tag iterator_category
OpenReportRowSource & operator=(const OpenReportRowSource &)=default
OpenReportRowSource(const OpenReportRowSource &)=default
Trade row(std::size_t index) const
double pnl() const noexcept
void begin(double mark_price, std::int64_t mark_time_ms, int interval_index, double account_fx, bool was_long, std::size_t count)
OpenReportRowSource(const BacktestEngine *owner)
void set_pnl(double pnl) noexcept
std::size_t size() const noexcept
bool empty() const noexcept
const_iterator end() const
OpenReportRowSource()=default
void push_back(const Trade &row)
const_iterator begin() const
void push_back(Trade &&row)
const Trade & materialize(std::size_t index) const
const Trade & operator[](std::size_t index) const
std::int32_t strategy_set_metrics_streaming_v1(void *strategy, std::uint32_t streaming_sharpe, std::uint64_t metrics_needed) noexcept
std::int32_t strategy_metrics_extent_receipt_v1(const void *strategy, pineforge::metrics::MetricsExtentReceiptV1 *out) noexcept
constexpr std::size_t kReportSinkHeldEquityPoints
std::variant< Book, OpeningExposure > CloseScope
std::variant< Flatten, order_action::Reduce, order_action::Transact > Action
std::int64_t equity_month_key(std::int64_t time_ms, const std::string &chart_timezone)
std::uint64_t MetricsNeedMaskV1
bool monthly_replay_time_supported_v1(std::int64_t time_ms)
exit_legs::Lifecycle ExitLegLifecycle
std::function< ClosedLotExcursion(const ClosedLotExcursionFacts &)> LotExcursionHook
std::unordered_map< std::string, std::string > InputsMap
@ PF_REPORT_MODE_SUMMARY_ONLY
FULL metric bits without presentation overrides; no captured sequences; refused with an observer,...
@ PF_REPORT_MODE_FULL
Legacy owning report sequences.
@ PF_REPORT_MODE_STREAMED
Complete sequences in an external sink.
Versioned resident cache policy.
Single per-script-bar equity point.
double open_profit
Mark-to-market open P&L at bar close.
double equity
initial_capital + net_profit + open_profit.
int64_t time_ms
Script-bar OPEN timestamp (Unix ms).
Equity-curve-derived statistics (all-trades only, like TV).
Composite metrics container: trade stats (all / long / short) + equity-curve stats.
Opt-in envelope, separate from the report layout introduced in ABI 4.
Fixed-size annualization provenance from the emitted v1 records.
Borrowed sequential stream sink descriptor.
Report-only T-row summary, independent of the 144-byte trailer receipt above.
Backtest report filled by run_backtest / run_backtest_full.
Version 1 scratch-table admission maxima, in keys/rows and key bytes.
bool entry_bar_high_masked
bool entry_bar_low_masked
uint64_t entry_incarnation
std::uint32_t builtin_scheduler
std::uint32_t security_sites
std::uint32_t lower_tf_sites
std::uint32_t calc_on_every_history_tick
std::uint32_t struct_size
std::uint32_t magnifier_declared
std::uint32_t builtin_presenter
std::uint32_t calculation_trigger
std::uint32_t builtin_marks
uint64_t entry_incarnation
std::string entry_comment
double entry_commission_account
int64_t magnifier_sample_ticks_total
int bar_magnifier_enabled
SecurityDiagC * security_diag
int64_t security_feeds_total
int64_t magnifier_sub_bars_total
pf_equity_point_t * equity_curve
int64_t broker_state_hash_len
int64_t input_bars_processed
int64_t security_eval_complete_total
uint64_t * broker_state_hash
const char ** trace_names
int64_t script_bars_processed
int64_t security_eval_partial_total
pf_report_metadata_v1 metadata
int64_t eval_partial_count
int64_t eval_complete_count
size_t closed_trade_index
uint64_t entry_incarnation
execution::CloseCause close_cause
uint64_t entry_incarnation
std::string entry_comment
ScratchTableBackend backend
void store(bool v, std::memory_order order)
AbortFlag(const AbortFlag &) noexcept
AbortFlag & operator=(const AbortFlag &) noexcept
bool load(std::memory_order order) const
AbortFlag & operator=(AbortFlag &&) noexcept
AbortFlag(AbortFlag &&) noexcept
std::atomic< bool > value
std::unique_ptr< IExecutionConsumer > ptr
ExecutionConsumerSlot & operator=(ExecutionConsumerSlot &&other) noexcept
ExecutionConsumerSlot()=default
ExecutionConsumerSlot(ExecutionConsumerSlot &&other) noexcept
ExecutionConsumerSlot(const ExecutionConsumerSlot &other) noexcept
ExecutionConsumerSlot & operator=(const ExecutionConsumerSlot &other) noexcept
MetricsStreamingStateV1(MetricsStreamingStateV1 &&) noexcept=default
metrics::MetricsStreamingConfigV1 prepared_configuration
metrics::MetricsStreamingConfigV1 configuration
MetricsStreamingStateV1(const MetricsStreamingStateV1 &other)
metrics::MetricsStreamingConfigV1 run_configuration
MetricsStreamingStateV1()=default
std::uint64_t pending_failed_plain_inputs
MetricsStreamingStateV1 & operator=(const MetricsStreamingStateV1 &other)
metrics::MetricsStreamingResultV1 result
metrics::MetricsExtentPlanV1 pending_plan
metrics::MetricsExtentReceiptV1 receipt
std::unique_ptr< metrics::StreamingEquityRatiosV1 > fold
NativeConsumerBindTag()=default
std::unordered_map< int64_t, Bar > native_bars_by_label
int64_t eval_partial_count
int64_t eval_complete_count
int current_sub_bar_count
TimeframeAggregator aggregator
StreamingSharpeV1 streaming_sharpe
MetricsNeedMaskV1 metrics_needed
A region of the engine-private scratch file (3.8:902-909).