16#include <unordered_map>
17#include <unordered_set>
47#define PINEFORGE_NO_STRATEGY_DECLS
58#define PINEFORGE_HAS_TRADE_HISTORY_POLICY_V1 1
59#define PINEFORGE_HAS_SCRIPT_RUN_PREPARE_V1 1
60#define PINEFORGE_HAS_NATIVE_LIVE_V1 1
61#define PINEFORGE_HAS_EQUITY_METRICS_FOLD_V1 1
69class SelectedReportStream;
71enum class EquityBasis : std::uint8_t;
92enum class DualEntryStopPathWinner : int;
178 std::numeric_limits<double>::quiet_NaN();
367 "legacy C and C++ report sizes must match");
370 "versioned report payload offsets must match");
372 "versioned C and C++ report sizes must match");
402 void begin(
double mark_price,
std::int64_t mark_time_ms,
int interval_index,
403 double account_fx,
bool was_long,
std::
size_t count);
407 std::size_t
size() const noexcept {
return present_ ? count_ : synthetic_.size(); }
408 double pnl() const noexcept {
return pnl_; }
432 return source_ == other.source_ && index_ == other.index_;
438 : source_(
source), index_(index) {}
440 std::size_t index_ = 0;
445 struct OwnedExcursions;
446 Trade build_row(std::size_t index,
bool consult_excursion_hook)
const;
448 bool present_ =
false;
449 bool was_long_ =
false;
450 double mark_price_ = 0.0;
451 std::int64_t mark_time_ms_ = 0;
452 int interval_index_ = 0;
453 double account_fx_ = 1.0;
454 std::size_t count_ = 0;
458 std::shared_ptr<const OwnedExcursions> excursions_;
462 mutable std::deque<Trade> materialized_;
465 std::vector<Trade> synthetic_;
503using InputsMap = std::unordered_map<std::string, std::string>;
521 uint64_t
h = 1469598103934665603ULL;
523 void bytes(
const void* p,
size_t n) {
524 const unsigned char* c =
static_cast<const unsigned char*
>(p);
525 for (
size_t i = 0;
i < n; ++
i) {
h ^= c[
i];
h *= 1099511628211ULL; }
529 if (v == 0.0) v = 0.0;
530 if (v != v) v = std::numeric_limits<double>::quiet_NaN();
534 void i(int64_t v) {
bytes(&v,
sizeof v); }
535 void u(uint64_t v) {
bytes(&v,
sizeof v); }
536 void b(
bool v) {
const unsigned char c = v ? 1 : 0;
bytes(&c, 1); }
537 void s(
const std::string& v) {
u(v.size());
bytes(v.data(), v.size()); }
672 std::unordered_map<std::string, std::string>
inputs_;
686 std::string
get_input_string(
const std::string& key,
const std::string& default_val)
const;
808 std::unique_ptr<metrics::StreamingEquityRatiosV1>
fold;
832 auto& s = engine_.metrics_streaming_;
833 s.pending_plain = s.prepared =
false;
835 s.pending_failed_plain_inputs = 0;
844 template<
class Source>
848 {
const_cast<Source*
>(&curve), count,
849 [](
void* context, std::int64_t index) {
850 return (*
static_cast<const Source*
>(context))[index];
917 const Bar& entry_bar,
1098 const double inv_int = std::floor(inv + 0.5);
1099 if (inv_int > 0.0 && std::abs(inv - inv_int) <= 1e-6 * inv_int) {
1131 for (
int n = 0; n <= 10; ++n) {
1132 const double k = std::floor(scaled + 0.5);
1133 if (k >= 1.0 && std::abs(scaled - k) <= 1e-6 * k)
return n;
1139 if (std::isnan(level) || !std::isfinite(level))
return level;
1141 if (n < 0)
return level;
1142 double pricescale = 1.0;
1143 for (
int i = 0; i < n; ++i) pricescale *= 10.0;
1149 const double pointsize = 1.0 / pricescale;
1150 const double p = level / pointsize;
1151 const double k = std::floor(p + 0.5);
1153 return k / pricescale;
1177 return fill_price * qty *
syminfo_.pointvalue
1199 if (units <= 0.0)
return 0.0;
1201 return units >= pe.
qty ? paid : paid * (units / pe.
qty);
1228 if (
qty_step_ <= 0.0 || !std::isfinite(qty) || qty <= 0.0)
return qty;
1230 return floored < qty ? floored : qty;
1248 if (
qty_step_ <= 0.0 || !std::isfinite(qty) || qty <= 0.0)
return qty;
1250 return floored < qty ? floored : qty;
1284 for (
const auto& t :
trades_) { s += t.pnl_pct; ++n; }
1285 return n > 0 ? s /
static_cast<double>(n) : 0.0;
1297 for (
const auto& t :
trades_) {
1298 if (t.pnl > 0.0) { s += t.pnl_pct; ++c; }
1300 return (c > 0) ? (s / (double)c) : 0.0;
1306 for (
const auto& t :
trades_) {
1307 if (t.pnl < 0.0) { s += t.pnl_pct; ++c; }
1309 return (c > 0) ? (s / (double)c) : 0.0;
1365 gmtime_r(&secs, &tm_buf);
1367 bt.
year = tm_buf.tm_year + 1900;
1368 bt.
month = tm_buf.tm_mon + 1;
1370 bt.
hour = tm_buf.tm_hour;
1371 bt.
minute = tm_buf.tm_min;
1372 bt.
second = tm_buf.tm_sec;
1374 bt.
weekofyear = (tm_buf.tm_yday + 7 - ((tm_buf.tm_wday + 6) % 7)) / 7;
1550 value.store(
false, std::memory_order_relaxed);
1554 value.store(
false, std::memory_order_relaxed);
1557 bool load(std::memory_order order)
const {
return value.load(order); }
1558 void store(
bool v, std::memory_order order) {
value.store(v, order); }
1591 const std::string& input_tf);
1702 const double eq = held.equity;
1703 if (eq > prefix[0]) prefix[0] = prefix[1] = eq;
1704 if (eq < prefix[1]) prefix[1] = eq;
1705 const double dd = prefix[0] - eq;
1706 if (dd > prefix[2]) prefix[2] = dd;
1707 const double ru = eq - prefix[1];
1708 if (ru > prefix[3]) prefix[3] = ru;
1734 if (index >= 0 && index < (
int)
trades_.size())
1739 if (idx < 0 || idx >= (
int)
trades_.size())
return std::numeric_limits<double>::quiet_NaN();
1740 return trades_.pnl_pct_at(idx);
1743 if (idx < 0 || idx >= (
int)
trades_.size())
return std::numeric_limits<double>::quiet_NaN();
1744 return trades_.commission_at(idx);
1748 return trades_.entry_bar_index_at(idx);
1752 return trades_.exit_bar_index_at(idx);
1755 if (idx < 0 || idx >= (
int)
trades_.size())
return std::string();
1756 return trades_.entry_comment_at(idx);
1759 if (idx < 0 || idx >= (
int)
trades_.size())
return std::string();
1760 return trades_.exit_comment_at(idx);
1763 if (idx < 0 || idx >= (
int)
trades_.size())
return std::string();
1764 return trades_.entry_id_at(idx);
1767 if (idx < 0 || idx >= (
int)
trades_.size())
return std::string();
1768 return trades_.exit_id_at(idx);
1771 if (idx < 0 || idx >= (
int)
trades_.size())
return 0;
1772 return trades_.entry_incarnation_at(idx);
1775 if (idx < 0 || idx >= (
int)
trades_.size())
return std::numeric_limits<double>::quiet_NaN();
1776 return trades_.entry_price_at(idx);
1779 if (idx < 0 || idx >= (
int)
trades_.size())
return std::numeric_limits<double>::quiet_NaN();
1780 return trades_.exit_price_at(idx);
1783 if (idx < 0 || idx >= (
int)
trades_.size())
return 0;
1784 return trades_.entry_time_at(idx);
1787 if (idx < 0 || idx >= (
int)
trades_.size())
return 0;
1788 return trades_.exit_time_at(idx);
1791 if (idx < 0 || idx >= (
int)
trades_.size())
return std::numeric_limits<double>::quiet_NaN();
1795 if (idx < 0 || idx >= (
int)
trades_.size())
return 0.0;
1796 return trades_.max_runup_at(idx);
1803 if (idx < 0 || idx >= (
int)
trades_.size())
return 0.0;
1805 return (cost > 0.0) ? (
trades_.max_runup_at(idx) / cost) * 100.0 : 0.0;
1808 if (idx < 0 || idx >= (
int)
trades_.size())
return 0.0;
1809 return trades_.max_drawdown_at(idx);
1812 if (idx < 0 || idx >= (
int)
trades_.size())
return 0.0;
1814 return (cost > 0.0) ? (
trades_.max_drawdown_at(idx) / cost) * 100.0 : 0.0;
1819 if (idx < 0 || idx >= (
int)
trades_.size())
return "";
1820 return trades_.is_long_at(idx) ?
"long" :
"short";
1889 struct NativeSettlementStage;
1890 struct NativeSettlementRows;
1893 NativeSettlementStage& stage,
1895 double& remaining)
const;
1899 const NativeSettlementStage& stage,
const execution::Fill& fill)
const;
1901 const NativeSettlementStage& stage,
const execution::Fill& fill)
const;
1909 NativeSettlementRows& rows)
const;
1913 NativeSettlementRows& rows)
const;
1915 const NativeSettlementStage& stage,
1917 const NativeSettlementRows& rows);
1922 NativeSettlementRows& rows);
1928 NativeSettlementStage& stage,
1935 NativeSettlementStage& stage,
1951 const std::vector<double>& closed_units,
double opening_units,
1960 double fill_price,
bool was_long,
double entry_commission,
1961 double exit_commission,
1966 double fill_price,
bool was_long,
double entry_commission,
1967 double exit_commission,
1990 bool count_miss =
true);
1992#ifdef PINEFORGE_HAS_AUX_SECURITY_FEED_V1
2023 mutable std::unique_ptr<IExecutionConsumer>
ptr;
2026 :
native(other.native) {}
2028 if (
this != &other) {
2038 if (
this != &other) {
2067 const std::string& input_tf,
2068 const std::string& script_tf,
2069 bool bar_magnifier =
false,
2070 int magnifier_samples = 4,
2073#ifdef PINEFORGE_HAS_AUX_SECURITY_FEED_V1
2078 const std::string& input_tf);
2086 const Bar* bars,
int n);
2111 const Bar* bars,
const int64_t* close_ms,
int n);
2113 const std::string& name,
const double* values,
int n);
2115 const std::string& value);
2117 const double* values,
int n);
2126 const std::string& input_tf,
2127 const std::string& script_tf =
"");
2152 const double* rates,
int n);
2155 const std::string& input_tf,
2156 const std::string& script_tf,
2157 const std::unordered_map<std::string, std::string>& inputs,
2163 const void* overrides =
nullptr,
2164 bool bar_magnifier =
false,
2165 int magnifier_samples = 4,
2172 std::uint64_t* allocation_bypass_count)
const noexcept;
2185 return trades_.previous(cursor, value);
2198 const int n_closed = (int)
trades_.size();
2199 return i < n_closed ?
trades_[(size_t)i]
2206 const int n_closed =
static_cast<int>(
trades_.size());
2207 return i < n_closed ?
trades_.materialize(
static_cast<std::size_t
>(i))
2280 void set_input(
const std::string& key,
const std::string& value) {
2372 if (value.empty())
return false;
2373 if (key ==
"type") {
syminfo_.type = value;
return true; }
2374 if (key ==
"ticker") {
syminfo_.ticker = value;
return true; }
2375 if (key ==
"tickerid") {
syminfo_.tickerid = value;
return true; }
2376 if (key ==
"currency") {
syminfo_.currency = value;
return true; }
2377 if (key ==
"basecurrency") {
syminfo_.basecurrency = value;
return true; }
2378 if (key ==
"description") {
syminfo_.description = value;
return true; }
2379 if (key ==
"volumetype") {
syminfo_.volumetype = value;
return true; }
2396 if (pv > 0.0) {
syminfo_.pointvalue = pv; }
2495 int* close_only,
int* partition)
const;
2499 double* trail_activation)
const;
2594 void trace(
const std::string& name,
double value);
2595 void trace(
const std::string& name,
bool value) {
trace(name, value ? 1.0 : 0.0); }
2596 void trace(
const std::string& name,
int value) {
trace(name,
static_cast<double>(value)); }
2637 int64_t capacity, int64_t* written)
const;
2639 int64_t* written)
const;
2676 void clear_output_record();
2677 bool output_host_running()
const;
2678 void record_output_event(
int output,
double value,
const std::string* message);
2679 int outputs_slots_ = 0;
2680 int outputs_count_ = 0;
2681 int outputs_constants_ = 0;
2682 bool outputs_declared_ =
false;
2683 bool output_run_begun_ =
false;
2684 std::vector<double> output_series_;
2685 std::vector<int64_t> output_open_ms_;
2686 std::vector<int64_t> output_close_ms_;
2687 std::vector<OutputEvent> output_events_;
2688 uint64_t output_sequence_ = 0;
2689 uint64_t output_row_seq_base_ = 0;
2690 uint64_t output_cleared_sequence_ = 0;
2691 std::vector<uint32_t> output_ordinals_;
2692 std::vector<double> output_constants_;
2693 std::vector<uint8_t> output_constant_written_;
2702 double native_quantity_tolerance_ = 0.0;
2708 struct ScratchTableRun {
2709 std::shared_ptr<detail::ScratchSlab> slab;
2710 ScratchTableRun() =
default;
2711 ScratchTableRun(
const ScratchTableRun&)
noexcept {}
2712 ScratchTableRun& operator=(
const ScratchTableRun& other)
noexcept {
2713 if (
this != &other) slab.reset();
2716 ScratchTableRun(ScratchTableRun&&) noexcept = default;
2717 ScratchTableRun& operator=(ScratchTableRun&&) noexcept = default;
2719 ScratchTableRun scratch_table_run_;
2720 void prepare_scratch_table_run(const detail::ScratchTableConfig& config);
2724 struct ReportSinkState {
2725 bool enabled =
false;
2726 bool trade_history_streamable =
false;
2727 std::string path, run_id, scratch_dir;
2729 std::uint64_t fd_device = 0;
2730 std::uint64_t fd_inode = 0;
2731 bool fd_identity_valid =
false;
2732 std::uint32_t active_calls = 0;
2733 std::uint32_t stream_calls = 0;
2734 std::unique_ptr<report_sink::LineWriter> writer;
2737 std::unique_ptr<report_sink::ScratchCurveWriter> equity_scratch;
2738 bool equity_tail_stored =
false;
2740 pf_report_sink_summary_v1 summary{};
2744 double equity_prefix[4]{};
2747 std::int64_t output_base = 0;
2750 std::unique_ptr<report::SelectedReportStream> selected_equity_stream;
2755 double selected_released_extremes[4]{};
2758 ReportSinkState(
const ReportSinkState& other);
2759 ReportSinkState& operator=(
const ReportSinkState& other);
2760 ReportSinkState(ReportSinkState&&) noexcept;
2761 ReportSinkState& operator=(ReportSinkState&&) noexcept;
2764 mutable ReportSinkState report_sink_state_;
2771 ReportMode report_mode_ = ReportMode::FULL;
2773 class ReportSinkCallScope {
2774 ReportSinkState& state;
2777 explicit ReportSinkCallScope(
const BacktestEngine& engine,
bool is_stream =
false)
2778 : state(engine.report_sink_state_), stream(is_stream) {
2779 ++state.active_calls;
2780 if (stream) ++state.stream_calls;
2782 ~ReportSinkCallScope() {
2783 if (stream) --state.stream_calls;
2784 --state.active_calls;
2786 ReportSinkCallScope(
const ReportSinkCallScope&) =
delete;
2787 ReportSinkCallScope& operator=(
const ReportSinkCallScope&) =
delete;
2789 int report_sink_setter_status()
const;
2790 void begin_report_sink();
2791 void finish_report_sink(ReportC* out)
const;
2792 void stage_report_sink_equity_point(
const pf_equity_point_t& point)
const;
2793 void stage_report_sink_equity_tail(
const ReportC* out)
const;
2794 void compute_report_sink_metrics(ReportC* out, std::int64_t equity_count,
2795 CacheCapacity equity_capacity)
const;
2796 void compute_report_sink_trade_metrics(ReportC* out,
2797 const TradeC* open_rows,
int count)
const;
2798 void write_report_sink_trades(
const TradeC* open_rows,
int count)
const;
2799 void fill_report_sink_metrics_section(ReportC* out)
const;
2800 template<
class Write>
void report_sink_record(Write write)
const;
2801 bool stream_report_sink_trace(
const std::string& name,
const TraceEntryC& entry);
2802 void reset_report_sink_outputs();
2803 std::int64_t report_sink_output_row()
const;
2804 void write_report_sink_output_row()
const;
2805 void write_report_sink_events()
const;
2806 void retire_report_sink_output_row();
2807 void write_report_sink_hashes()
const;
2808 void retire_report_sink_hashes();
2809 void begin_report_replay();
2810 void finish_report_replay(
const ReportC* out)
const;
2811 void record_report_replay_close(std::size_t global);
2812 void record_report_replay_point(
const pf_equity_point_t& point);
2813 void write_report_replay_equity(
const pf_equity_point_t& point)
const;
2814 void write_report_replay_trade(std::size_t global,
bool terminal)
const;
2815 void retire_report_replay_trades(std::size_t global_end);
2821 if (descriptor && (descriptor->
struct_size !=
sizeof(*descriptor)
2823 || descriptor->
backend >
static_cast<std::uint32_t
>(
2825 || descriptor->
V > 27))
return -1;
2826 const int status = report_sink_setter_status();
2827 if (status != 0)
return status;
2832 descriptor->
K_e, descriptor->
B_e,
2833 descriptor->
K_c, descriptor->
B_c,
2834 descriptor->
U, descriptor->
B_U,
2835 descriptor->
V, descriptor->
B_V, descriptor->
R};
2837 scratch_table_config_ = next;
2841 return scratch_table_config_;
2880 return static_cast<ReportMode>(
static_cast<std::uint32_t
>(mode)
2894 return scratch_table_run_.slab;
2900 return trades_.entry_id_matches(idx, rhs);
2904 return trades_.exit_id_matches(idx, rhs);
2908 return trades_.entry_comment_matches(idx, rhs);
2912 return trades_.exit_comment_matches(idx, rhs);
2964 void reset_optional_sequence_witness();
2965 void fold_pending_hashes_into_witness()
const;
2966 void fold_current_output_row_witness()
const;
2967 void finalize_summary_output_row();
2969 std::uint64_t hash);
2971 std::int64_t timestamp, std::int32_t
bar_index,
2972 const std::string& name,
double value);
2974 std::int64_t row, std::int64_t open_ms,
2975 std::int64_t close_ms,
const double* values,
2976 std::int64_t count);
2984 mutable std::size_t sequence_hash_folded_ = 0;
2985 mutable std::uint64_t sequence_hash_folded_leaf_ = 0;
2986 mutable bool sequence_row_folded_ =
false;
2994 char* error, std::size_t capacity)
noexcept;
3006 static std::optional<std::int64_t> default_output_series_limit() noexcept;
3009 std::optional<
std::int64_t> max_output_series_ = default_output_series_limit();
3026 void* strategy,
std::uint32_t streaming_sharpe,
3027 std::uint64_t metrics_needed) noexcept;
3029 const
void* strategy,
pineforge::metrics::MetricsExtentReceiptV1* out) noexcept;
MetricsStreamingAttemptV1(const MetricsStreamingAttemptV1 &)=delete
MetricsStreamingAttemptV1 & operator=(const MetricsStreamingAttemptV1 &)=delete
MetricsStreamingAttemptV1(BacktestEngine &engine)
~MetricsStreamingAttemptV1()
double open_trade_commission(int idx) const
void output_events_clear()
int64_t closed_trade_exit_time(int idx) const
int stream_order_actions_len() const
double report_pointvalue() const noexcept
void set_input(const std::string &key, const std::string &value)
RuntimeContextService & runtime_contexts() noexcept
void declare_outputs(int series_slots, int outputs, int run_constants=0)
void set_syminfo_type(const std::string &t)
bool closed_trade_exit_id_equals(int idx, std::string_view rhs) const
virtual void source_stream_entry_comment(const PyramidEntry &, std::string &) const
const std::shared_ptr< detail::ScratchSlab > & scratch_tables_for_run() const noexcept
virtual int observe_pending_count_v1() const
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)
metrics::EquityFoldSnapshot summary_equity_snapshot_
double open_trade_max_drawdown_percent(int idx) const
int open_trade_entry_bar_index(int idx) const
virtual void evaluate_security(int sec_id, const Bar &bar, bool is_complete)
CommissionType commission_type_
bool last_script_continuation_valid_
void fold_equity_extreme(double eq)
int64_t output_bars_len() const
double open_profit_at(double current_price, double fx) const
double live_current_equity() const
void build_native_settlement_close_rows(const NativeSettlementStage &stage, const execution::Fill &fill, const execution::PhysicalExecutionContext &context, NativeSettlementRows &rows) const
virtual bool set_realtime_tail(bool on, int horizon_bars)
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 store_equity_point(const pf_equity_point_t &point)
double avg_losing_trade_percent() const
bool stream_has_input_bar_
virtual void finalize_bar()
virtual int observe_pending_level_resolved(int index) const
int set_optional_report_mode(report_sequence::ReportMode mode)
execution::Result settle_source_staged_execution(NativeSettlementStage &stage, const execution::Fill &fill, const execution::LifecycleEffects &lifecycle, const execution::PhysicalExecutionContext &context)
virtual int observe_probe_fill_qty(int index, double fill_price, double *qty, int *close_only, int *partition) const
int set_equity_report_mode(ReportMode mode)
static int set_output_series_limit_checked(const std::int64_t *maximum, char *error, std::size_t capacity) noexcept
int report_sink_receipt_v1(pf_report_sink_receipt_v1 *out) const noexcept
bool closed_trade_entry_id_equals(int idx, std::string_view rhs) const
int execution_contract() const
int price_grid_decimals() const
void trace(const std::string &name, int value)
int count_losstrades() const
virtual bool set_symbol_facts(const std::string &key, const std::string &field, const std::string &value)
double initial_capital() const
std::string chart_timezone_
std::string closed_trade_direction(int idx) const
void dispatch_security_eval(SecurityEvalState &state, const Bar &bar, bool publish, int64_t bar_index)
virtual void configure_security_evaluators()
uint64_t next_order_incarnation_
void set_syminfo_session(const std::string &s)
broker::OpeningObligations opening_obligations_
virtual void hash_source_extension(BrokerStateHashSink &) const
StreamPhase stream_phase_
int64_t position_entry_time_
execution::Result settle_native_execution_at(const execution::Action &action, const execution::Fill &fill, const execution::PhysicalExecutionContext &context)
int64_t stream_last_tick_ms_
int64_t diag_magnifier_sub_bars_processed_
virtual void restore_script_state()
int64_t position_cycle_seq() const
double grossloss_percent() const
bool stream_seen_sequence_
execution::SettlementInspection inspect_native_settlement_selected(const execution::Action &action, const execution::Fill &fill, const execution::SelectedOpeningSet &selection) const
void validate_close_trade_counters(const Trade *rows, size_t count) const
virtual void hash_host_extension(BrokerStateHashSink &) const
double max_contracts_held_long_
execution::Status preflight_native_settlement_effects(const NativeSettlementStage &stage, const execution::LifecycleEffects &lifecycle, const NativeSettlementRows &rows)
double closed_trade_exit_price(int idx) const
ReportMode pending_equity_report_mode() const noexcept
metrics::MetricsStreamingStatusV1 metrics_extent_receipt_v1(metrics::MetricsExtentReceiptV1 *) const
double avg_losing_trade() const
virtual void on_bar(const Bar &bar)=0
bool stream_begin(const Bar *warmup_bars, int n_warmup, const std::string &input_tf, const std::string &script_tf="")
AbortFlag abort_requested_
bool prepare_equity_point()
const CacheDefaults & cache_policy_for_run() const
double closed_trade_max_drawdown_percent(int idx) const
double net_profit_roundoff_value_
std::string closed_trade_entry_comment(int idx) const
int64_t closed_trade_entry_time(int idx) const
int set_report_replay_v1(const char *path, const char *run_id)
broker::PositionCloseObligation position_close_obligation_
void prepare_chart_day_partition(const Bar *input_bars, int n_input)
void set_chart_timezone(const std::string &tz)
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)
execution::Result settle_native_execution_selected_at(const execution::Action &action, const execution::Fill &fill, const execution::PhysicalExecutionContext &context, const execution::SelectedOpeningSet &selection)
void record_equity_point(int64_t script_bar_ts)
double avg_winning_trade() const
double calc_commission(double fill_price, double qty) const
int set_report_sink_fd_v1(const pf_report_sink_fd_v1 *sink)
int64_t native_security_misses() const
void set_trade_history_streamable(bool streamable)
void finish_metrics_streaming_v1(metrics::MetricsRatioCurveV1, pf_equity_stats_t *=nullptr) const
const OutputEvent * output_event_at(int index) const
const RuntimeContextService & runtime_contexts() const noexcept
std::string open_trade_entry_comment(int idx) const
LotExcursionHook lot_excursion_hook_
const IExecutionConsumer & execution_consumer() const
bool set_syminfo_string(const std::string &key, const std::string &value)
double round_to_mintick(double price) const
double open_trade_entry_price(int idx) const
void output_event(int output, double value, const std::string &message)
virtual bool report_presenter_supports_non_full() const noexcept
int closed_trade_close_cause(int i) const
std::string closed_trade_exit_comment(int idx) const
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
void fill_trades_section(ReportC *out) const
void observe_metrics_curve_v1(const Source &curve, std::int64_t count, pf_equity_stats_t *equity=nullptr) const
bool stream_advance_time(int64_t timestamp_ms)
int count_wintrades() const
int get_input_int(const std::string &key, int default_val) const
execution::AccountEffectProjection project_native_settlement_scoped_v1(const execution::Action &action, const execution::Fill &fill, execution::CloseScope scope) const
bool refold_summary_equity_tail()
bool stream_push_bar(const Bar &bar)
metrics::MetricsStreamingStatusV1 admit_metrics_plain_v1(const MetricsPlainInputsV1 &, const metrics::MetricsExtentPlanV1 &, metrics::MetricsExtentReceiptV1 *)
double closed_trade_profit(int index) 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
std::vector< std::string > trace_names_
double closed_trade_max_runup_percent(int idx) const
int _bar_dayofmonth() const
const std::string & main_period() const
const StreamOrderAction & stream_order_action_at(int i) const
double report_closed_net_profit() const
metrics::ScratchCurveRegion report_sink_equity_scratch_region() const
void record_close_trade(Trade trade)
void output_event(int output, double value)
double avg_winning_trade_percent() const
void set_cache_policy(const CacheDefaults &policy)
double max_runup_percent() const
void set_magnifier_volume_weighted(bool on)
std::size_t account_currency_fx_broker_epoch_
bool stream_push_ticks(const TradeTick *ticks, int n)
int64_t get_input_int64(const std::string &key, int64_t default_val) const
static int output_series_limit_failure(std::int64_t *maximum) noexcept
void trace(const std::string &name, bool value)
int set_scratch_io_policy_v1(const pf_scratch_io_policy_v1 *descriptor)
int _bar_dayofweek() 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
void set_broker_state_hash_recording(bool on)
execution::AccountEffectProjection project_native_settlement_at(const execution::Action &action, const execution::Fill &fill, double fx) const
double active_account_currency_fx() const
std::vector< pf_equity_point_t > equity_curve_
bool native_bound() const
double max_drawdown_percent() const
bool closed_trade_exit_comment_equals(int idx, std::string_view rhs) const
void declare_opened_lot_entry_bar_mask(uint64_t entry_incarnation, const Bar &entry_bar, OpenedLotFillPoint fill_point)
double position_entry_price_
int output_events_len() const
void output_constant(int index, double value)
std::int64_t equity_logical_point_count() const
friend class NativeExecutionConsumer
uint64_t closed_trade_entry_incarnation(int idx) const
ReportMode equity_report_mode() const
int64_t stream_input_tf_ms_
double open_trades_capital_held() const
double marked_equity(double price) const
int report_trade_count() const
double gross_profit() const
virtual bool set_recorded_series(const std::string &key, const int64_t *chart_open_ms, const double *values, int n)
const metrics::EquityFoldSnapshot * equity_summary_snapshot() const
void refold_equity_tail()
uint64_t broker_state_hash() const
double max_contracts_held_short() const
virtual double observe_trail_best_price_v1() const
double closed_trade_size(int idx) const
bool account_currency_fx_broker_epoch_initialized_
std::vector< uint64_t > broker_state_hashes_
bool runtime_context_early_close_completes() const
void begin_metrics_streaming_v1(bool admitted_shape)
execution::AccountEffectProjection project_native_settlement_stage(const NativeSettlementStage &stage, const execution::Fill &fill) const
double summary_broker_equity_prefix_[4]
double account_currency_fx_at(int64_t timestamp_ms) const
std::string position_entry_name() const
void reset_trade_percent_prefix()
execution::Status validate_native_settlement_book(double &held) const
bool stream_has_last_price_
bool get_input_bool(const std::string &key, bool default_val) const
void set_scratch_io_policy(const ScratchIoPolicy &policy)
int32_t intern_trace_name(const std::string &name)
double get_input_double(const std::string &key, double default_val) const
execution::SettlementInspection inspect_native_reversal_v1(const execution::ReverseTo &reversal, const execution::Fill &fill) const
virtual ~BacktestEngine()
const Trade & materialize_report_trade(int i) const
double apply_qty_step(double qty) const
int output_constants_count() const
double position_avg_price() const
virtual void set_syminfo_metadata(const std::string &key, double value)
bool install_equity_ratio_result(const metrics::EquityRatioResult &result)
Trade closed_trade(std::size_t i) const
virtual bool set_aux_security_feed(const Bar *bars, int n, const std::string &input_tf)
double trail_best_price() const
double max_contracts_held_short_
double fold_exit_trail_peak_
void output_value(int slot, double value)
MetricsStreamingStateV1 metrics_streaming_
double closed_trade_entry_price(int idx) const
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)
std::optional< metrics::EquityRatioResult > summary_equity_ratios_
double open_entry_commission(const PyramidEntry &pe) const
friend class NativeStrategyHost
void guard_native_mutation(const char *operation)
execution::SettlementInspection inspect_native_settlement_selected_at(const execution::Action &action, const execution::Fill &fill, const execution::SelectedOpeningSet &selection, double fx) const
execution::Result commit_native_settlement_stage(NativeSettlementStage &stage, const execution::Fill &fill, const execution::LifecycleEffects &lifecycle, const execution::PhysicalExecutionContext &context)
std::vector< SecurityEvalState > security_eval_states_
bool output_series_copy(int slot, int64_t from_bar, double *out, int64_t capacity, int64_t *written) const
static constexpr std::uint32_t report_replay_flag
void stream_order_actions_clear()
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::AccountEffectProjection project_native_reversal_v1(const execution::ReverseTo &reversal, const execution::Fill &fill) const
int64_t next_position_cycle_seq_
double open_trade_profit(int idx) const
uint64_t stream_action_sequence_
void fill_metrics_section(ReportC *out) const
double calc_commission_at(double fill_price, double qty, double fx) const
bool broker_state_hash_recording_
bool set_outputs_enabled(bool on)
metrics::MetricsStreamingStatusV1 prepare_metrics_streaming_v1(const metrics::MetricsStreamingConfigV1 &, const metrics::MetricsExtentPlanV1 &)
ReportMode pending_equity_report_mode_
double account_currency_fx_
std::unordered_map< std::string, int32_t > trace_name_index_
int report_sink_summary_v1(pf_report_sink_summary_v1 *out) const noexcept
int64_t security_next_input_ms_
bool closed_trade_entry_comment_equals(int idx, std::string_view rhs) const
void finish_native_settlement_stage(NativeSettlementStage &stage, const execution::Fill &fill) const
void feed_security_eval_state(SecurityEvalState &state, const Bar &input_bar)
virtual bool set_symbol_feed_column(const std::string &key, const std::string &timeframe, const std::string &name, const double *values, int n)
execution::Result commit_prepared_native_settlement_stage(NativeSettlementStage &stage, const execution::Fill &fill, const execution::LifecycleEffects &lifecycle, const execution::PhysicalExecutionContext &context, NativeSettlementRows &rows)
std::size_t closed_trade_count() const noexcept
int _bar_weekofyear() const
double apply_exit_qty_step(double qty) const
const ScratchIoPolicy & scratch_io_policy_config() const
bool substitute_native_security_bar(SecurityEvalState &state, Bar &bar, bool count_miss=true)
double open_trade_max_drawdown(int idx) const
bool outputs_declared() const
void set_syminfo_mintick(double m)
virtual void prepare_script_run(const Bar *, int, bool)
uint64_t stream_last_sequence_
execution::Result settle_native_execution_scoped_at(const execution::Action &action, const execution::Fill &fill, const execution::PhysicalExecutionContext &context, execution::CloseScope scope)
double net_profit_roundoff_bound_
void output_bar(int64_t open_ms, int64_t close_ms)
int set_cache_policy_v1(const pf_cache_policy_v1 *descriptor)
int output_series_count() const
std::vector< PyramidEntry > pyramid_entries_
execution::Result settle_reversal_with_lifecycle_v1(const execution::ReverseTo &reversal, const execution::Fill &fill, const execution::LifecycleEffects &lifecycle)
PositionSide position_side_
ExecutionConsumerSlot execution_consumer_slot_
execution::Result settle_with_context(const execution::Action &action, const execution::Fill &fill, const execution::LifecycleEffects &lifecycle, const execution::PhysicalExecutionContext &context)
metrics::MetricsStreamingStatusV1 set_metrics_streaming_v1(metrics::StreamingSharpeV1, metrics::MetricsNeedMaskV1)
virtual void source_aux_security_input_view(const Bar *&bars, int &n) const
int report_equity_month_key(std::int64_t time_ms) const
void reset_position_state_to_flat()
double max_contracts_held_long() const
double open_trade_max_runup(int idx) const
virtual int observe_last_bar_dual_entry_path_v1() const
int64_t diag_input_bars_processed_
double raw_net_profit_sum() const noexcept
double max_contracts_held_all() const
void set_trace_enabled(bool on)
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
std::vector< double > account_currency_fx_rates_
friend class OpenReportRowSource
void stream_observe_entry(const PyramidEntry &pe)
bool set_native_security_feed(const std::string &timeframe, const Bar *bars, int n)
virtual bool set_probe_suppress_tail_logic(bool on)
virtual void present_report(ReportC *) const
static constexpr double kLevelGridBandPoints
bool summary_equity_snapshot_valid_
double grossprofit_percent() const
bool equity_summary_ratios_ready() const
double current_equity() const
void set_syminfo_pointvalue(double pv)
execution::SettlementInspection inspect_native_settlement_scoped_at(const execution::Action &action, const execution::Fill &fill, execution::CloseScope scope, double fx) const
static void free_report(ReportC *report)
int report_sink_diagnostics_v1(pf_report_sink_diagnostics_v1 *out) const noexcept
int stream_next_script_bar_index_
std::unordered_map< std::string, std::string > inputs_
int fill_report_envelope_v1(ReportEnvelopeV1 *out) const
int64_t stream_next_input_open_ms_
double closed_trade_commission(int idx) const
void set_syminfo_timezone(const std::string &tz)
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)
double stream_last_price_
double open_trade_size(int idx) const
double tick_grid_price(double price) const
StreamInputMode stream_input_mode_
double open_trade_profit_percent(int idx) const
std::vector< TraceEntryC > trace_buffer_
int64_t position_cycle_seq_
int set_report_mode_v1(ReportMode mode)
pf_equity_point_t * last_equity_point() noexcept
void set_path_order(int mode)
bool aux_security_feed_enabled() const
bool previous_closed_trade(std::size_t &cursor, Trade &value) const
void trace(const std::string &name, double value)
void append_quoted_lot(PyramidEntry lot, double total_qty, double average_price)
int64_t diag_native_security_misses_
execution::Result settle_native_reversal_at_v1(const execution::ReverseTo &reversal, const execution::Fill &fill, const execution::PhysicalExecutionContext &context)
const std::string & report_scratch_directory() const noexcept
TimeframeAggregator script_tf_agg_
double level_on_price_grid(double level) const
execution::SettlementInspection inspect_native_reversal_at(const execution::ReverseTo &reversal, const execution::Fill &fill, double fx) const
void run(const Bar *bars, int n)
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
double max_contracts_held_all_
int64_t diag_magnifier_sample_ticks_processed_
double output_constant_value(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
void amend_report_replay_point(std::int64_t time, report::EquityBasis basis, double term) const
bool session_template_knows_early_close() const
Whether TradingView's session template for this symbol carries the exchange's early closes and holida...
int diag_script_tf_ratio_
int64_t script_bars_processed() const
Trade get_report_trade(int i) const
IExecutionConsumer & execution_consumer()
ReportMode with_report_replay_flag(ReportMode mode) const noexcept
virtual void snapshot_script_state()
report_sequence::OptionalSequenceSummary optional_sequence_summary() const
std::vector< NativeSecurityFeed > native_security_feeds_
void fill_security_diag_section(ReportC *out) const
void snapshot_entry_commission(PyramidEntry &pe) const
execution::AccountEffectProjection project_native_settlement_selected_v1(const execution::Action &action, const execution::Fill &fill, const execution::SelectedOpeningSet &selection) const
metrics::EquityMetricsFold summary_equity_fold_
const CacheDefaults & cache_policy_config() const
double closed_trade_max_runup(int idx) const
MagnifierDistribution magnifier_dist_
BacktestEngine(NativeConsumerBindTag)
std::uint64_t broker_state_hash_from_execution_hash(std::uint64_t) const
execution::SettlementInspection inspect_native_settlement_stage(const NativeSettlementStage &stage, const execution::Fill &fill) const
const std::string & chart_timezone() const
execution::SettlementInspection inspect_native_settlement(const execution::Action &action, const execution::Fill &fill) const
double open_trade_max_runup_percent(int idx) const
void register_security_eval(int sec_id, const std::string &requested_tf, const std::string &input_tf)
uint64_t stream_state_hash() const
double allocated_entry_commission(const PyramidEntry &pe, double units) const
execution::SettlementInspection inspect_native_settlement_scoped(const execution::Action &action, const execution::Fill &fill, execution::CloseScope scope) const
bool trade_history_streamable() const
void fill_report(ReportC *out) const
bool bar_magnifier_enabled_
bool native_security_feed_enabled() const
execution::AccountEffectProjection project_native_settlement_v1(const execution::Action &action, const execution::Fill &fill) const
void fold_report_equity_extreme(double equity)
std::string open_trade_direction(int idx) const
int64_t bar_time_memo_ts_
double closed_trade_max_drawdown(int idx) 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
execution::Status prepare_native_settlement_commit(const NativeSettlementStage &stage, const execution::Fill &fill, const execution::PhysicalExecutionContext &context, NativeSettlementRows &rows) const
double gross_loss() const
bool magnifier_volume_weighted_
double avg_trade_percent() const
bool diag_needs_aggregation_
int set_scratch_tables_v1(const pf_scratch_tables_v1 *descriptor)
Trade get_trade(int i) const
ReportMode active_equity_report_mode_
bool stream_is_realtime() const
std::unordered_map< std::string, double > syminfo_metadata_
int64_t native_security_substitutions() const
void present_report_equity_tail(ReportC *out) const
virtual bool source_aux_security_feed_enabled() const
int64_t open_trade_entry_time(int idx) const
std::vector< double > quote_execution_commissions(const std::vector< double > &closed_units, double opening_units, const execution::Fill &fill, double fx) const
void open_quoted_position(PositionSide requested, PyramidEntry lot)
virtual bool set_symbol_feed_borrowed(const std::string &, const std::string &, const Bar *, const int64_t *, int)
void fold_trade_percent_prefix(const Trade &trade)
bool stream_script_bar_had_tick_
std::vector< int64_t > account_currency_fx_timestamps_
void set_trade_start_time(int64_t timestamp_ms)
void stream_observe_exit(size_t trade_index)
std::vector< StreamOrderAction > stream_order_actions_
bool host_mutation_guard_inert_
int64_t diag_script_bars_processed_
int closed_trade_exit_bar_index(int idx) const
void stream_refresh_action_metadata(size_t first_action, size_t first_trade)
bool trace_enabled() const
double get_syminfo_metadata(const std::string &key) const
bool summary_equity_ratios_ready_
bool stream_observe_actions_
void stage_native_settlement(NativeSettlementStage &stage, const execution::ReverseTo &reversal, const execution::Fill &fill, const execution::LifecycleEffects *lifecycle, double fx) const
std::string get_input_string(const std::string &key, const std::string &default_val) const
virtual void clear_security(int sec_id)
double account_currency_fx_broker_rate_
bool stream_script_tick_seen_
NativeDayPartition chart_day_partition_
bool stream_push_tick(const TradeTick &tick)
report::ReportReplay * report_replay_state() const noexcept
bool set_account_currency_fx_series(const int64_t *timestamps_ms, const double *rates, int n)
int64_t diag_native_security_substitutions_
static int classify_report_close_cause(const Trade &row)
virtual void commit_script_state()
execution::Status allocate_native_settlement_closes(NativeSettlementStage &stage, const execution::CloseScope &book_or_opening, double &remaining) const
virtual bool set_symbol_feed(const std::string &key, const std::string &timeframe, const Bar *bars, const int64_t *close_ms, int n)
virtual int observe_pending_copy_v1(int index, pf_pending_order_v1_t *out) const
void update_equity_extremes()
double bar_fill_price(double raw_bar_price) const
int set_report_sink_v1(const pf_report_sink_v1 *sink)
uint64_t last_script_continuation_hash_
report::ReportReplay * find_report_replay() const noexcept
int64_t trade_start_time_
const ScratchIoPolicy & scratch_io_policy_for_run() const
void fill_trace_section(ReportC *out) const
uint64_t broker_fill_event_seq_
OpenReportRowSource range_end_trades_
bool stream_end(bool finalize_partial_input_bar=false)
double closed_trade_profit_percent(int idx) const
const std::string & last_error() const
virtual double live_position_size() const
virtual int observe_pending_effective_levels(int index, double *stop, double *limit, double *trail_activation) const
bool chart_day_partition_installed() const
std::string security_input_tf_
virtual std::uint64_t broker_state_hash_projection() const
double net_profit() const
std::string open_trade_entry_id(int idx) const
void prepare_native_security_feeds(const Bar *input_bars, int n_input)
int last_run_status() const
TradePercentPrefix trade_percent_prefix_
const detail::ScratchTableConfig & scratch_table_config() const noexcept
int closed_trade_entry_bar_index(int idx) const
void sync_metrics_streaming_held_v1() const
execution::Result settle_execution_selected_with_lifecycle(const execution::Action &action, const execution::Fill &fill, const execution::LifecycleEffects &lifecycle, const execution::SelectedOpeningSet &selection)
int report_cache_stats(std::uint64_t *resident_bytes, std::uint64_t *allocation_bypass_count) const noexcept
double marked_equity_at(double price, double fx) const
std::string closed_trade_exit_id(int idx) const
std::string closed_trade_entry_id(int idx) const
BarTime _decompose_bar_time() const
double open_profit(double current_price) const
int64_t prev_bar_timestamp_
int position_entry_count_
virtual ~BrokerStateHashProvider()=default
virtual std::uint64_t broker_state_hash_projection() const =0
void s(const std::string &v)
void bytes(const void *p, size_t n)
const_iterator & operator++()
friend class OpenReportRowSource
std::forward_iterator_tag iterator_category
const_iterator operator++(int)
bool operator==(const const_iterator &other) const
std::ptrdiff_t difference_type
bool operator!=(const const_iterator &other) const
void set_pnl(double pnl) noexcept
OpenReportRowSource & operator=(const OpenReportRowSource &)=default
OpenReportRowSource()=default
const_iterator begin() const
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)
const Trade & operator[](std::size_t index) const
std::size_t size() const noexcept
const_iterator end() const
double pnl() const noexcept
bool empty() const noexcept
void push_back(const Trade &row)
const Trade & materialize(std::size_t index) const
void push_back(Trade &&row)
OpenReportRowSource(const OpenReportRowSource &)=default
Trade row(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.
Disk scratch write batching, independent of resident cache policy.
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
AbortFlag(AbortFlag &&) noexcept
AbortFlag & operator=(const AbortFlag &) noexcept
void store(bool v, std::memory_order order)
AbortFlag(const AbortFlag &) noexcept
AbortFlag & operator=(AbortFlag &&) noexcept
bool load(std::memory_order order) const
std::atomic< bool > value
ExecutionConsumerSlot(const ExecutionConsumerSlot &other) noexcept
ExecutionConsumerSlot & operator=(const ExecutionConsumerSlot &other) noexcept
std::unique_ptr< IExecutionConsumer > ptr
ExecutionConsumerSlot(ExecutionConsumerSlot &&other) noexcept
ExecutionConsumerSlot & operator=(ExecutionConsumerSlot &&other) noexcept
ExecutionConsumerSlot()=default
metrics::MetricsStreamingConfigV1 run_configuration
std::uint64_t pending_failed_plain_inputs
MetricsStreamingStateV1(const MetricsStreamingStateV1 &other)
metrics::MetricsStreamingConfigV1 configuration
metrics::MetricsStreamingResultV1 result
MetricsStreamingStateV1 & operator=(const MetricsStreamingStateV1 &other)
metrics::MetricsStreamingConfigV1 prepared_configuration
MetricsStreamingStateV1(MetricsStreamingStateV1 &&) noexcept=default
std::unique_ptr< metrics::StreamingEquityRatiosV1 > fold
MetricsStreamingStateV1()=default
metrics::MetricsExtentPlanV1 pending_plan
metrics::MetricsExtentReceiptV1 receipt
NativeConsumerBindTag()=default
int current_sub_bar_count
int64_t eval_partial_count
int64_t eval_complete_count
std::unordered_map< int64_t, Bar > native_bars_by_label
TimeframeAggregator aggregator
StreamingSharpeV1 streaming_sharpe
MetricsNeedMaskV1 metrics_needed
A region of the engine-private scratch file (3.8:902-909).