19#define PINEFORGE_HAS_EXPLICIT_PINE_CAP_V1 1
20#define PINEFORGE_HAS_EXPLICIT_PINE_EXECUTION_ADAPTER_V1 1
21#define PINEFORGE_HAS_NATIVE_LOWERING_V1 1
24#define PINEFORGE_HAS_SYMBOL_SECURITY_EVAL_V1 1
25#define PINEFORGE_HAS_TRADE_SCRATCH_V1 1
29class PineStrategyHost;
44 std::int64_t
slot_open = std::numeric_limits<std::int64_t>::min();
45 std::int64_t
chart_open = std::numeric_limits<std::int64_t>::min();
46 std::int64_t
prior_input = std::numeric_limits<std::int64_t>::min();
89 double mintick = std::numeric_limits<double>::quiet_NaN();
406 double limit_price =
std::numeric_limits<
double>::quiet_NaN(),
407 double stop_price =
std::numeric_limits<
double>::quiet_NaN(),
408 double qty =
std::numeric_limits<
double>::quiet_NaN(),
409 const
std::
string& comment = {},
410 const std::string& oca_name = {},
int oca_type = 0,
412 void strategy_close(
const std::string&
id,
const std::string& comment = {},
413 double qty = std::numeric_limits<double>::quiet_NaN(),
414 double qty_percent = std::numeric_limits<double>::quiet_NaN(),
415 bool immediately =
false);
416 void strategy_close(
const std::string&
id,
const std::string& comment,
417 double qty,
double qty_percent,
bool immediately,
418 std::uint64_t callsite_token);
420 void strategy_exit(
const std::string&
id,
const std::string& from_entry,
421 double limit_price,
double stop_price,
422 double trail_points = std::numeric_limits<double>::quiet_NaN(),
423 double trail_offset = std::numeric_limits<double>::quiet_NaN(),
424 double trail_price = std::numeric_limits<double>::quiet_NaN(),
425 double qty_percent = 100.0,
const std::string& comment = {},
426 double qty = std::numeric_limits<double>::quiet_NaN(),
427 const std::string& oca_name = {},
428 double profit_ticks = std::numeric_limits<double>::quiet_NaN(),
429 double loss_ticks = std::numeric_limits<double>::quiet_NaN());
431 const std::string& from_entry,
432 const std::string& comment = {});
435 void strategy_order(
const std::string&
id,
bool is_long,
double qty,
436 double limit_price = std::numeric_limits<double>::quiet_NaN(),
437 double stop_price = std::numeric_limits<double>::quiet_NaN(),
438 const std::string& oca_name = {},
int oca_type = 0);
448 const std::
string&
timeframe,
bool lookahead,
bool gaps,
bool lower_array,
449 bool heikinashi = false) const;
459 int* close_only,
int* partition) const;
462 double* trail_activation) const;
500 const std::string& input_tf)
override;
504 const Bar* bars,
const int64_t* close_ms,
int n)
override;
bool set_symbol_feed_borrowed(
const std::string& key,
const std::string&
timeframe,
const Bar* bars,
const int64_t* close_ms,
int n)
override;
506 const std::string& name,
const double* values,
509 const std::string& value)
override;
511 const double* values,
int n)
override;
517 const double* values,
int n, std::size_t cache_capacity_bytes);
525 std::size_t cache_capacity_bytes);
526#ifdef PINEFORGE_HAS_AUX_SECURITY_FEED_V1
552 double qty = std::numeric_limits<double>::quiet_NaN();
583 guard_native_mutation(
"set_margin_call_enabled");
605 guard_native_mutation(
"set_realtime_tail");
631 guard_native_mutation(
"set_probe_suppress_tail_logic");
659#ifdef PINEFORGE_VALUE_INVALID_SIZING_MARGIN_FIXTURES
663 return adapter_.default_sizing_units(sizing);
671 return adapter_.chart_day_key(timestamp_ms);
674#ifdef PINEFORGE_VALUE_INVALID_FIXTURES
675 void fixture_value_invalid_drawdown_limit(
double value,
bool percent)
noexcept {
676 adapter_.fixture_value_invalid_drawdown_limit(value, percent);
680 return adapter_.cap.due_cause().has_value();
686 host_.config_.default_qty_type =
static_cast<int>(value);
690 return static_cast<QtyType>(host_.config_.default_qty_type);
702 host_.config_.commission_type =
static_cast<int>(value);
706 return static_cast<CommissionType>(host_.config_.commission_type);
718 host_.adapter_.set_risk_direction(value);
727 class SourceIdLedgerView {
734 return present_ == other.present_;
737 return !(*
this == other);
741 bool present_ =
false;
745 const double units = host_ ? host_->adapter_.source_unclosed_qty_for(
id) : 0.0;
747 result.present_ = units > 0.0;
748 result.value_.
second = units;
754 explicit SourceIdLedgerView(
const PineStrategyHost* host) noexcept : host_(host) {}
805 const
Series<
double>& fallback) const;
808 const
Series<
double>& fallback)
const {
815 scheduler_.fixture_publish_source_series(bar, new_history_slot);
833 int64_t
pine_time_offset(int64_t bar_open_ms,
int bars_back,
const std::string& tf,
834 const std::string& session,
const std::string& tz,
835 int timeframe_bars_back,
bool close)
const;
851 const std::string& timezone,
852 std::int64_t bar_ms)
const {
856 const std::string& timezone,
857 std::int64_t bar_ms)
const {
861 const std::string& timezone,
862 std::int64_t bar_ms)
const {
872 const std::string& input_tf,
bool lookahead_on,
873 bool gaps_on =
false,
bool heikinashi =
false);
887 const std::string& requested_tf,
const std::string& input_tf,
888 bool lookahead_on,
bool gaps_on =
false,
889 bool ignore_invalid_symbol =
false);
894 const std::string& requested_tf,
const char* input_tf,
895 bool lookahead_on,
bool gaps_on =
false) =
delete;
913 const std::string& input_tf);
946 struct ForeignSecuritySite {
948 std::string requested_tf;
949 bool lookahead =
false;
951 bool ignore_invalid =
false;
962 std::int64_t subscription = -1;
963 std::size_t feed = 0;
964 std::int64_t delivered = 0;
965 std::int64_t close_ms = 0;
968 std::int64_t last_input = -1;
973 std::int64_t handed = 0;
974 SecurityEvalState eval{};
978 StagedConfiguration staged_configuration()
const;
979 static PineStrategyConfig apply_overrides(PineStrategyConfig,
980 const StrategyOverrides&);
981 std::uint64_t adapter_broker_fill_event_sequence() const noexcept {
982 return broker_fill_event_seq_;
984 void scheduler_prepare_script_run(PineScheduler::InputView,
985 bool static_eligible,
int expected_script_bars,
986 bool script_bar_geometry);
987 void scheduler_configure_security_evaluators();
988 bool scheduler_uses_aux_security_feed() const noexcept;
989 void scheduler_prepare_security_sequence(
PineScheduler::InputView);
1004 bool declare_security_sites_to_kernel();
1008 bool same_symbol_sites_routable(std::vector<NativeTimeframeSubscription>& declared);
1013 void prepare_foreign_security_sites(std::vector<NativeTimeframeSubscription>& declared);
1016 void run_foreign_site_bar(ForeignSecuritySite& site, const Bar& bar, std::int64_t close_ms);
1020 void read_ahead_foreign_security_sites(const Bar& chart_bar);
1023 void clear_gapped_foreign_security_sites();
1024 std::int64_t find_symbol_feed(const std::
string& key, const std::
string& tf) const;
1025 bool set_recorded_series_impl(const std::
string& key, const int64_t* chart_open_ms,
1026 const
double* values,
int n,
1027 std::optional<std::
size_t> cache_capacity_bytes);
1028 bool set_recorded_series_reader_impl(
1029 const std::
string& key, std::shared_ptr<const FeedReader<RecordedSeriesRow>> reader,
1030 std::optional<std::
size_t> cache_capacity_bytes);
1031 void refresh_symbol_data_digest();
1032 std::uint64_t calculate_symbol_data_digest(
1033 const std::
string* replacement_key =
nullptr,
1034 const RecordedSeries* replacement =
nullptr) const;
1037 const NativeInstrumentFeed& installed_symbol_feed(std::
size_t i) const;
1039 void restore_symbol_feeds();
void stage_symbol_feed_views();
1041 std::
string restore_symbol_feeds_reason();
1044 bool security_sites_kernel_routed() const noexcept;
1045 void init_security_eval_states_for_run(const std::
string& effective_input_tf);
1046 void prepare_historical_security_lookahead_projections(
1047 const Bar* input_bars,
int n_input, const std::
string& effective_input_tf);
1048 void clear_historical_security_lookahead_projections();
1049 bool scheduler_feed_security_input(const Bar&, std::int64_t next_input_ms,
1050 bool calling_bar_complete,
1051 bool defer_boundary_gate);
1052 void scheduler_publish_security_boundary();
1053 void scheduler_feed_deferred_security_input(const Bar&, std::int64_t next_input_ms);
1054 void scheduler_feed_aux_security(
int chart_index);
1055 void scheduler_feed_deferred_aux_security(
int chart_index);
1056 void scheduler_finish_security_sequence();
1061 void pine_feed_security_eval_state(SecurityEvalState& state, const Bar& input_bar,
1062 bool calling_bar_complete = false);
1065 PineSecurityEvalState& pine_security_state(
int sec_id) {
1068 const PineSecurityEvalState& pine_security_state(
int sec_id)
const {
1069 static const PineSecurityEvalState plain{};
1074 void prune_pine_security_states();
1085 bool security_input_precedes_range_start(
const SecurityEvalState& state,
1086 int64_t input_ts)
const;
1087#ifdef PINEFORGE_HAS_AUX_SECURITY_FEED_V1
1091 bool aux_security_traded_between(int64_t from_ms, int64_t to_ms)
const;
1096 void publish_security_eval_state_at_calling_boundary(SecurityEvalState& state);
1097 void scheduler_record_range_end(
const Bar&);
1098 void present_report(ReportC*)
const override;
1101 bool report_presenter_supports_non_full() const noexcept
override {
return false; }
1102 bool report_terminal_quote_eligible()
const;
1103 std::int64_t report_quote_time_ms_ = -1;
1104 double report_quote_close_ = std::numeric_limits<double>::quiet_NaN();
1108 void scheduler_mark_report_point(std::int64_t script_bar_ts);
1109 void scheduler_record_broker_hash();
1110 void capture_script_continuation_hash();
1114 void scheduler_update_session_state();
1115 void update_extended_session_day(
const NativeDecisionContext& facts);
1116 void adapter_label_bracket_trades(
1117 const native_order::ExecutionAppliedEvent&,
bool from_bracket);
1118 bool adapter_has_open_entry_id(
const std::string&)
const;
1119 void scheduler_publish_source_bar(
const Bar&,
bool first_tick,
1120 bool advance_source_index =
true);
1121 void scheduler_publish_suppressed_tail(
const Bar&);
1129 bool selected_begin_evaluation(std::int64_t label_ms);
1130 void selected_finish_evaluation() noexcept;
1131 void selected_clear_suppressed_evaluation(std::int64_t label_ms);
1141 void selected_replay_at_open(const Bar&, const NativeDecisionContext&);
1145 void finish_adapter_evaluation();
1146 void project_short_seed_report_rows(const native_order::ExecutionAppliedEvent&);
1147 void order_global_exit_children(const native_order::ExecutionAppliedEvent&);
1148 detail::CommandScratchStore* trade_scratch_ =
nullptr;
1149 detail::CommandScratchStore& trade_scratch();
1150 std::optional<std::
size_t> sort_same_bar_exit_trades(
1152 bool scheduler_coof_enabled() const noexcept {
return config_.calc_on_order_fills; }
1157 void record_applied_range_end();
1158#ifdef PINEFORGE_HAS_AUX_SECURITY_FEED_V1
1159 void clear_aux_security_chart_ranges();
1160 void prepare_aux_security_chart_ranges(
const Bar*,
int,
const std::string&);
1161 std::int64_t aux_security_calling_close_ms()
const;
1162 void feed_aux_security_for_chart_bar(
int);
1163 void feed_deferred_aux_security_for_chart_bar(
int);
1172 : adapter_(&adapter) {}
1174 return adapter_ && adapter_->cap.due_cause().has_value();
1204#ifdef PINEFORGE_HAS_AUX_SECURITY_FEED_V1
1393 std::numeric_limits<double>::quiet_NaN();
1400#ifdef PINEFORGE_HAS_AUX_SECURITY_FEED_V1
The public native host: an abstract subclass of BacktestEngine with no PineScript on it.
~PineRuntimeSecurityScope()
PineRuntimeSecurityScope(const PineStrategyHost &, PineRuntimeSecurityCursor &) noexcept
PineRuntimeSecurityScope(const PineRuntimeSecurityScope &)=delete
static const PineRuntimeSecurityCursor * current(const PineStrategyHost &) noexcept
PineRuntimeSecurityScope & operator=(const PineRuntimeSecurityScope &)=delete
FixtureCommissionTypeSlot & operator=(CommissionType value) noexcept
FixtureCommissionTypeSlot(PineStrategyHost &host) noexcept
FixtureQtyTypeSlot(PineStrategyHost &host) noexcept
FixtureQtyTypeSlot & operator=(QtyType value) noexcept
FixtureRiskDirectionSlot(PineStrategyHost &host) noexcept
FixtureRiskDirectionSlot & operator=(int value) noexcept
SourceCloseObligationView(const PineExecutionAdapter &adapter) noexcept
bool pending() const noexcept
bool operator==(const const_iterator &other) const noexcept
bool operator!=(const const_iterator &other) const noexcept
const value_type * operator->() const noexcept
friend class SourceIdLedgerView
const_iterator find(const std::string &id) const noexcept
const_iterator end() const noexcept
friend class PineStrategyHost
void validate_security_timeframes(const std::string &input_tf)
int observe_pending_count_v1() const override
compat::pine::Calculation fixture_cap_calculation() const
void register_security_eval(int sec_id, const std::string &requested_tf, const std::string &input_tf, bool lookahead_on, bool gaps_on=false, bool heikinashi=false)
std::map< long long, double > symbol_calendar_opens_
std::map< std::string, RecordedSeries > recorded_series_
bool set_symbol_facts(const std::string &key, const std::string &field, const std::string &value) override
FixtureCommissionTypeSlot fixture_commission_type_slot() noexcept
void clear_report_terminal_quote()
Series< double > & _src_volume_
bool set_realtime_tail(bool on, int horizon_bars) override
std::int64_t foreign_input_index_
void attach_pine_execution_adapter()
int64_t chart_time_close() const
void strategy_cancel_all()
void set_syminfo_session(const std::string &)
PineExecutionAdapter adapter_
double net_profit() const
void hold_script_average_price(double average)
std::vector< Bar > aux_security_bars_
bool session_islastbar_regular_
std::optional< NativeMarginDecision > resolve_margin_requirement(const NativeMarginRequirementView &) const final
const std::pair< std::int64_t, std::int64_t > * symbol_calendar_day(std::int64_t ms) const
std::optional< double > resolve_margin_call_units(const NativeMarginCallView &) const final
const Series< double > & get_input_source(const std::string &key, const Series< double > &fallback) const
double open_profit(double current_price) const
void set_pine_risk_direction(int)
void prepare_native_begin(const NativeBeginArgs &) final
BarTime fixture_chart_time(std::int64_t timestamp_ms) const
bool & _src_series_active_
compat::pine::CapClock fixture_cap_clock() const
std::uint64_t source_callback_count_
void strategy_entry(const std::string &id, bool is_long, double limit_price=std::numeric_limits< double >::quiet_NaN(), double stop_price=std::numeric_limits< double >::quiet_NaN(), double qty=std::numeric_limits< double >::quiet_NaN(), const std::string &comment={}, const std::string &oca_name={}, int oca_type=0, int qty_type=-1)
void enable_pine_intraday_cap()
Series< double > & _src_hlcc4_
const PendingIntentView & pending_intent_view() const noexcept
friend class PineScheduler
const std::vector< FixtureIntentRow > & source_pending_view() const
void finish_applied_admission(const native_order::ExecutionAppliedEvent &, const NativeDecisionContext &)
void set_pine_risk_max_intraday_filled_orders(int)
long long symbol_calendar_days_
int pending_order_count() const
void on_native_tick(const Bar &, const NativeTickContext &) final
Series< double > & _src_open_
SourceCloseObligationView position_close_obligation_
const Series< double > & source_input_series(const std::string &key, const Series< double > &fallback) const
bool security_history_publication_replay_
Series< double > & _src_hl2_
int pending_order_effective_levels(int index, double *stop, double *limit, double *trail_activation) const
bool historical_security_lookahead_projection_active_
bool fixture_cap_due_pending() const noexcept
int observe_pending_effective_levels(int, double *, double *, double *) const override
bool set_aux_security_feed(const Bar *bars, int n, const std::string &input_tf) override
double observe_trail_best_price_v1() const override
void strategy_order(const std::string &id, bool is_long, double qty, double limit_price=std::numeric_limits< double >::quiet_NaN(), double stop_price=std::numeric_limits< double >::quiet_NaN(), const std::string &oca_name={}, int oca_type=0)
bool margin_call_enabled_
Series< double > & _src_low_
bool fixture_intraday_cap_latched()
void configure_pine_strategy(const PineStrategyConfig &)
void set_pine_risk_max_position_size(double)
FixtureQtyTypeSlot fixture_default_qty_type_slot() noexcept
friend struct ReportSinkEquityTestAccess
int64_t security_calling_close_ms_
bool set_recorded_series_reader(const std::string &key, std::shared_ptr< const FeedReader< RecordedSeriesRow > > reader)
bool is_last_tick() const noexcept
void set_pine_risk_max_cons_loss_days(int)
double current_equity() const
void strategy_exit_cancel_bracket(const std::string &exit_id, const std::string &from_entry, const std::string &comment={})
int observe_pending_level_resolved(int) const override
FixtureRiskDirectionSlot fixture_risk_direction_slot() noexcept
bool set_symbol_feed_borrowed(const std::string &key, const std::string &timeframe, const Bar *bars, const int64_t *close_ms, int n) override
bool set_symbol_calendar(std::vector< std::pair< std::int64_t, std::int64_t > > sessions)
bool pine_session_ispremarket(const std::string &session, const std::string &timezone, std::int64_t bar_ms) const
bool session_isfirstbar_regular_
virtual void on_native_applied_event(const native_order::ExecutionAppliedEvent &, const NativeDecisionContext &)
std::vector< BorrowedFeedSlot > symbol_feed_views_
std::vector< std::size_t > aux_security_chart_begin_
bool pine_session_ismarket(const std::string &session, const std::string &timezone, std::int64_t bar_ms) const
const std::vector< std::pair< std::int64_t, std::int64_t > > & symbol_calendar() const noexcept
int64_t security_range_start_ms_
const Series< double > & source_series(const std::string &) const
bool set_symbol_feed_column(const std::string &key, const std::string &timeframe, const std::string &name, const double *values, int n) override
void install_symbol_calendar_metadata()
void apply_realtime_tail_horizon(const Bar *bars, int n, bool script_bar_geometry)
bool probe_suppress_tail_logic() const
bool margin_call_enabled() const
int64_t chart_bar_close_ms(int64_t stamp) const
std::vector< std::pair< std::int64_t, std::int64_t > > symbol_calendar_
void hash_source_extension(BrokerStateHashSink &sink) const final
PineRuntimeSecurityCursor make_runtime_security_cursor(const std::string &timeframe, bool lookahead, bool gaps, bool lower_array, bool heikinashi=false) const
void strategy_close_all()
void on_native_applied(const native_order::ExecutionAppliedEvent &, const NativeDecisionContext &) final
std::vector< admission::Field > market_admission_fields() const
PineStrategyHost(compat::pine::CapAttachment cap=compat::pine::CapAttachment::None)
int security_lower_tf_sub_bar_index(int sec_id) const
int pending_order_level_resolved(int index) const
bool set_symbol_feed(const std::string &key, const std::string &timeframe, const Bar *bars, const int64_t *close_ms, int n) override
std::map< std::string, SymbolFacts > symbol_facts_
void refresh_aux_security_digest() noexcept
int observe_last_bar_dual_entry_path_v1() const override
int pine_last_bar_index() const
void set_trade_scratch(detail::CommandScratchStore &)
std::int64_t fixture_chart_day_key(std::int64_t timestamp_ms) const noexcept
void on_native_run_begin() final
void release_script_average_price() noexcept
std::uint64_t broker_state_hash_projection() const override
StrategyOverrides override_
int64_t security_first_chart_bar_ms_
Series< double > & _src_close_
void fixture_retain_all_events()
void strategy_cancel(const std::string &id)
double security_column_value(int sec_id, const std::string &name) const
bool security_range_start_na_warmup_
PineStrategyConfig config_
std::vector< FixtureIntentRow > source_pending_view_cache_
bool margin_check_allowed(const NativeMarginCheckPoint &) const final
void fixture_publish_source_series(const Bar &bar, bool new_history_slot)
std::optional< double > resolve_anchored_level(const NativeAnchoredLevelView &) const final
void hash_host_extension(BrokerStateHashSink &) const override
void register_security_lower_tf_eval(int sec_id, const std::string &requested_tf, const std::string &input_tf)
std::string runtime_security_timeframe(const std::string &selected) const
void freeze_script_position_view()
std::uint64_t fixture_applied_receipt_count() const
Series< double > & _src_hlc3_
bool security_series_slot_is_new(int) const noexcept
bool chart_ema_na_warmup_
bool realtime_tail() const
PineStrategyConfig & fixture_configuration() noexcept
void register_security_eval(int sec_id, const std::string &symbol, const std::string &requested_tf, const char *input_tf, bool lookahead_on, bool gaps_on=false)=delete
std::uint64_t runtime_security_frontier() const
bool report_terminal_quote_applied(const ReportC &) const
std::vector< NativeInstrumentFeed > symbol_feeds_
int last_bar_dual_entry_path() const
std::int64_t symbol_calendar_open_before(std::int64_t before) const
void strategy_exit(const std::string &id, const std::string &from_entry, double limit_price, double stop_price, double trail_points=std::numeric_limits< double >::quiet_NaN(), double trail_offset=std::numeric_limits< double >::quiet_NaN(), double trail_price=std::numeric_limits< double >::quiet_NaN(), double qty_percent=100.0, const std::string &comment={}, double qty=std::numeric_limits< double >::quiet_NaN(), const std::string &oca_name={}, double profit_ticks=std::numeric_limits< double >::quiet_NaN(), double loss_ticks=std::numeric_limits< double >::quiet_NaN())
double prev_chart_close() const
int source_last_bar_index_
void on_native_input(const Bar &, const NativeInputContext &) final
int64_t time_close() const
double live_position_size() const override
std::vector< int > foreign_security_series_
std::map< long long, double > symbol_calendar_closes_
bool source_aux_security_feed_enabled() const override
bool set_recorded_series(const std::string &key, const int64_t *chart_open_ms, const double *values, int n) override
void set_pine_risk_max_intraday_loss(double, bool)
bool script_average_held_
int short_seed_collision_role_v1(native_order::RequestHandle) const noexcept
void strategy_close(const std::string &id, const std::string &comment={}, double qty=std::numeric_limits< double >::quiet_NaN(), double qty_percent=std::numeric_limits< double >::quiet_NaN(), bool immediately=false)
bool history_advances_new_bar() const noexcept
void set_margin_call_enabled(bool enabled)
std::map< int, PineSecurityEvalState > pine_security_states_
std::uint64_t symbol_data_digest_
int pine_bar_index() const
double recorded_series_value(const std::string &key) const
void on_native_bar_open(const Bar &, const NativeDecisionContext &) final
bool set_report_terminal_quote(std::int64_t time_ms, double close)
bool source_prepare_failed_
bool historical_security_lookahead_projection_
bool set_probe_suppress_tail_logic(bool on) override
double default_entry_qty(double fill_price) const
bool is_first_tick() const noexcept
void set_pine_risk_max_drawdown(double, bool)
double closed_trade_equity() const
double open_entry_fees_paid() const
double margin_liquidation_price() const
int realtime_tail_horizon_bars_
bool probe_suppress_tail_logic_
MarketAdmissionJournal & market_admission_journal()
double precommit_held_units_
Series< double > & _src_ohlc4_
static detail::ScratchKeyOrder trade_scratch_order() noexcept
NativePrecommitVerdict validate_execution_precommit(const NativePrecommitView &) const final
void clear_script_position_view()
int64_t pine_time_offset(int64_t bar_open_ms, int bars_back, const std::string &tf, const std::string &session, const std::string &tz, int timeframe_bars_back, bool close) const
const bool & is_last_tick_
void on_native_timeframe_bar(const Bar &, const NativeTimeframeBarContext &) final
bool pine_session_ispostmarket(const std::string &session, const std::string &timezone, std::int64_t bar_ms) const
void source_aux_security_input_view(const Bar *&, int &) const override
double script_mark_price(double price) const
void on_native_bar(const Bar &, const NativeDecisionContext &) final
int observe_probe_fill_qty(int, double, double *, int *, int *) const override
bool source_configuration_captured_
const PineStrategyConfig & fixture_configuration() const noexcept
void set_syminfo_metadata(const std::string &, double) override
void release_aux_security_chart_ranges()
void set_strategy_override(const StrategyOverrides &)
SourceIdLedgerView source_id_ledger_view() const noexcept
std::string aux_security_input_tf_
virtual void on_source_bar(const Bar &)=0
Series< double > & _src_high_
int observe_pending_copy_v1(int, pf_pending_order_v1_t *) const override
std::vector< std::size_t > aux_security_chart_end_
bool adapter_core_sizes_default_opening(bool is_long) const
native_order::ExecutionTerms resolve_execution_terms(const NativeExecutionTermsFacts &) const final
void on_native_sub_bar(const Bar &, const NativeDecisionContext &) final
int probe_fill_qty(int index, double fill_price, double *qty, int *close_only, int *partition) const
double signed_position_size() const
void on_native_recalculate(const Bar &, const NativeDecisionContext &, NativeCalculationReason, const native_order::ExecutionAppliedEvent *) final
std::int64_t symbol_calendar_open_from(std::int64_t at) const
std::uint64_t aux_security_digest_
friend class PineExecutionAdapter
const ForeignSecuritySite * foreign_context_
std::map< int, ForeignSecuritySite > foreign_security_sites_
void source_stream_entry_comment(const PyramidEntry &, std::string &) const override
NativeCalculationReason
Why the kernel is asking the host to calculate.
NativePrecommitVerdict
The host is consulted before generic opening-margin admission.
constexpr char kSourceSecurityDomain[]
PineStrategyHost::FixtureIntentRow FixtureIntentRow
PineStrategyHost::FixtureIntentKind FixtureIntentKind
constexpr char kSourceSymbolDataDomain[]
PineStrategyHost PineNativeHost
bool pine_session_ispostmarket(const std::string &session, const std::string &tz, int64_t bar_ms)
admission::Draft MarketAdmissionDraft
bool pine_session_ispremarket(const std::string &session, const std::string &tz, int64_t bar_ms)
bool pine_session_ismarket(const std::string &session, const std::string &tz, int64_t bar_ms)
admission::Journal MarketAdmissionJournal
Ephemeral read-only facts of one anchored-leg materialization (L7b), offered to the host exactly once...
Borrowed begin-call facts.
Read-only owning-value facts for one candidate.
Accepted input facts presented before the generic consumer aggregates the bar into its script interva...
Ephemeral factual view of one kernel-issued liquidation before its units are fixed.
Ephemeral factual view of one kernel check point, offered to the host before the check runs.
Ephemeral factual view of the numbers the kernel is about to compare, at one check point,...
Ephemeral factual view of one prepared execution before any physical effect.
One accepted realtime print before native matching at its current decision point.
One completed higher-timeframe bucket of a declared subscription (NativeRunSpec::subscriptions),...
One committed execution: the definition, the cursor, the resolved price and units,...
bool calling_bar_complete
std::int64_t requested_index
std::optional< RuntimeSubdivision > subdivision
std::string chart_timeframe
void feed(const RuntimeContextEvent &, const Delivery &, const std::function< void()> &begin_chart)
TimeframeAggregator aggregator
std::function< void(const Bar &, bool)> Delivery
std::vector< HistoricalSecurityProjection > historical_projections
int lower_tf_input_aggregation_ratio
bool calling_close_completes_partial
int64_t last_published_label
std::vector< DeferredAuxBar > deferred_aux
bool calling_open_latches_first
bool historical_projection_dispatched
std::vector< Bar > lower_tf_input_buffer
bool first_bucket_published
int lower_tf_sub_bar_index
int publish_gate_tf_seconds
bool lower_tf_array_requested
std::size_t historical_projection_cursor
const std::int64_t * close_ms
double frozen_market_transaction_units
double paired_flat_market_transaction_qty
double affordability_placement_equity
std::uint64_t incarnation
double default_stop_placement_equity
double default_stop_sizing_price
double frozen_market_own_units
MarketAdmissionDraft market_admission
std::int64_t paired_flat_market_peer_seq
double frozen_default_qty
double default_stop_placement_qty
bool over_pyramiding_cap_at_placement
double default_stop_placement_signal_close
std::optional< std::size_t > cache_capacity_override
pineforge::detail::FeedProjection< RecordedSeriesRow > rows
std::optional< bool > valid