3#include "../../engine_internal.hpp"
13 const auto& prices = lifecycle.
prices();
14 const bool has_trail = !std::isnan(prices.trail_points) || !std::isnan(prices.trail_price);
15 if (std::isnan(prices.stop_price) && std::isnan(prices.limit_price) && !has_trail)
18 std::vector<exit_legs::Leg> retire;
20 window.best = window.prefix = context.
prior_best;
21 double activation = prices.trail_price;
22 if (!std::isnan(prices.trail_points)) {
30 if (std::isfinite(activation) && std::isfinite(context.
open)
31 && (context.
direction > 0 ? context.
open >= activation : context.
open <= activation)) {
32 retire.push_back(exit_legs::Leg::Trail);
49 return lifecycle.
suspension()->replacement->revival_definition;
55 return std::isfinite(original) ? original : lifecycle.
prices().stop_price;
60 if (completed.
domain == exit_legs::Domain::RawTicks
61 || completed.
phase != exit_legs::Phase::AfterMargin) {
65 if (!target)
return std::nullopt;
bool pending_replacement() const
std::optional< Barrier > release_barrier() const
double original_stop() const
Definition definition(uint64_t incarnation) const
const Prices & prices() const
const std::optional< Suspension > & suspension() const
exit_legs::Operation select_pair_hold(const exit_legs::Lifecycle &, exit_legs::Frame)
double trail_points_to_ticks(double trail_points)
double snap_trail_level_to_tick_grid(double price, double mintick)
double select_margin_revival_stop(const exit_legs::Lifecycle &)
std::optional< exit_legs::Operation > select_exit_completion(const exit_legs::Lifecycle &, exit_legs::Frame completed)
exit_legs::Definition select_replacement_revival_definition(const exit_legs::Lifecycle &)
std::optional< exit_legs::Operation > select_exit_suspension(const exit_legs::Lifecycle &, const ExitSuspensionContext &)
std::variant< BindOwner, Suspend, StageReplacement, CancelDeferredActivation, Restore, CompleteBarrier, Observe, Cancel > Operation
double position_entry_price