PineForge unreleased
Deterministic PineScript v6 backtest runtime — C ABI reference
Loading...
Searching...
No Matches
pine_value_admission.hpp
Go to the documentation of this file.
1#pragma once
2
3// Selected-window value ownership, source side (revision 3 section 4, Appendix B).
4// The one place a source-owned invalid value becomes strategy_value_invalid
5// (class strategy). Header only: the lanes that add the admission rules put
6// their code in new .cpp/.hpp files of their own and call these functions.
7// `field` is ALWAYS one of the engine-owned literals of namespace value_field
8// below, never text a script computed; the ownership manifest enumerates this
9// list. Not installed API.
10
12
13#include <stdexcept>
14
15namespace pineforge::source {
16
18
19inline const char* strategy_value_reason_name(StrategyValueReason reason) noexcept {
20 switch (reason) {
21 case StrategyValueReason::nonfinite: return "nonfinite";
22 case StrategyValueReason::invalid_unicode: return "invalid_unicode";
23 case StrategyValueReason::numeric_overflow: return "numeric_overflow";
24 }
25 return "nonfinite";
26}
27
28/// The coded failure of a source-owned invalid actionable value. Thrown, so the
29/// existing exception path classifies it (RunFailureInfo wins over the type).
30[[noreturn]] inline void throw_strategy_value_invalid(const char* field, StrategyValueReason reason) {
33 RunFailureArgs{{"field", field}, {"reason", strategy_value_reason_name(reason)}},
34 "the strategy supplied an invalid execution value");
35}
36
37/// The closed vocabulary of `field`: "<sink>.<argument>". One constant per
38/// admitted argument of each sink of revision 3 Appendix B. A lane that needs a
39/// name not listed here stops and reports; it does not invent one.
40namespace value_field {
41// strategy.entry
42inline constexpr const char* entry_id = "entry.id";
43inline constexpr const char* entry_limit_price = "entry.limit_price";
44inline constexpr const char* entry_stop_price = "entry.stop_price";
45inline constexpr const char* entry_qty = "entry.qty";
46inline constexpr const char* entry_comment = "entry.comment";
47inline constexpr const char* entry_oca_name = "entry.oca_name";
48// strategy.order
49inline constexpr const char* order_id = "order.id";
50inline constexpr const char* order_limit_price = "order.limit_price";
51inline constexpr const char* order_stop_price = "order.stop_price";
52inline constexpr const char* order_qty = "order.qty";
53inline constexpr const char* order_comment = "order.comment";
54inline constexpr const char* order_oca_name = "order.oca_name";
55// strategy.exit
56inline constexpr const char* exit_id = "exit.id";
57inline constexpr const char* exit_from_entry = "exit.from_entry";
58inline constexpr const char* exit_limit_price = "exit.limit_price";
59inline constexpr const char* exit_stop_price = "exit.stop_price";
60inline constexpr const char* exit_trail_points = "exit.trail_points";
61inline constexpr const char* exit_trail_offset = "exit.trail_offset";
62inline constexpr const char* exit_trail_price = "exit.trail_price";
63inline constexpr const char* exit_qty_percent = "exit.qty_percent";
64inline constexpr const char* exit_qty = "exit.qty";
65inline constexpr const char* exit_comment = "exit.comment";
66inline constexpr const char* exit_oca_name = "exit.oca_name";
67inline constexpr const char* exit_profit_ticks = "exit.profit_ticks";
68inline constexpr const char* exit_loss_ticks = "exit.loss_ticks";
69// strategy.close / close_all / cancel / cancel_all / exit_cancel_bracket
70inline constexpr const char* close_id = "close.id";
71inline constexpr const char* close_comment = "close.comment";
72inline constexpr const char* close_qty = "close.qty";
73inline constexpr const char* close_qty_percent = "close.qty_percent";
74inline constexpr const char* exit_cancel_bracket_exit_id = "exit_cancel_bracket.exit_id";
75inline constexpr const char* exit_cancel_bracket_from_entry = "exit_cancel_bracket.from_entry";
76inline constexpr const char* exit_cancel_bracket_comment = "exit_cancel_bracket.comment";
77inline constexpr const char* cancel_id = "cancel.id";
78// the six risk setters
79inline constexpr const char* risk_direction = "risk.direction";
80inline constexpr const char* risk_max_cons_loss_days = "risk.max_cons_loss_days";
81inline constexpr const char* risk_max_drawdown = "risk.max_drawdown";
82inline constexpr const char* risk_max_intraday_loss = "risk.max_intraday_loss";
83inline constexpr const char* risk_max_intraday_filled_orders = "risk.max_intraday_filled_orders";
84inline constexpr const char* risk_max_position_size = "risk.max_position_size";
85// strategy() declaration (PineStrategyConfig / StrategyOverrides)
86inline constexpr const char* strategy_initial_capital = "strategy.initial_capital";
87inline constexpr const char* strategy_default_qty_value = "strategy.default_qty_value";
88inline constexpr const char* strategy_commission_value = "strategy.commission_value";
89inline constexpr const char* strategy_margin_long = "strategy.margin_long";
90inline constexpr const char* strategy_margin_short = "strategy.margin_short";
91inline constexpr const char* strategy_default_qty_type = "strategy.default_qty_type";
92inline constexpr const char* strategy_commission_type = "strategy.commission_type";
93inline constexpr const char* strategy_pyramiding = "strategy.pyramiding";
94inline constexpr const char* strategy_slippage = "strategy.slippage";
95// a bound input value (declaration default or supplied value)
96inline constexpr const char* input_value = "input.value";
97} // namespace value_field
98
99} // namespace pineforge::source
Base with a code: throw coded<std::invalid_argument>(code, {args}, text).
The closed vocabulary of field: "<sink>.<argument>".
constexpr const char * exit_qty_percent
constexpr const char * exit_limit_price
constexpr const char * risk_max_intraday_filled_orders
constexpr const char * risk_max_drawdown
constexpr const char * order_limit_price
constexpr const char * risk_max_intraday_loss
constexpr const char * exit_trail_points
constexpr const char * strategy_default_qty_value
constexpr const char * strategy_commission_type
constexpr const char * strategy_default_qty_type
constexpr const char * close_qty_percent
constexpr const char * exit_cancel_bracket_exit_id
constexpr const char * risk_max_cons_loss_days
constexpr const char * order_stop_price
constexpr const char * exit_cancel_bracket_comment
constexpr const char * strategy_pyramiding
constexpr const char * strategy_margin_short
constexpr const char * strategy_commission_value
constexpr const char * strategy_initial_capital
constexpr const char * strategy_margin_long
constexpr const char * strategy_slippage
constexpr const char * entry_stop_price
constexpr const char * exit_trail_price
constexpr const char * exit_trail_offset
constexpr const char * exit_profit_ticks
constexpr const char * entry_limit_price
constexpr const char * risk_max_position_size
constexpr const char * exit_cancel_bracket_from_entry
void throw_strategy_value_invalid(const char *field, StrategyValueReason reason)
The coded failure of a source-owned invalid actionable value.
const char * strategy_value_reason_name(StrategyValueReason reason) noexcept
std::vector< RunFailureArg > RunFailureArgs