48 bool is_long,
double* out_pos) {
49 if (std::isnan(stop_level) || out_pos ==
nullptr)
return false;
52 if (!(bar.
high >= stop_level))
return false;
53 if (bar.
open >= stop_level) {
58 if (!(bar.
low <= stop_level))
return false;
59 if (bar.
open <= stop_level) {
66 fill_bar_path_points_ordered(bar, high_first, path);
68 for (
int i = 1; i < 4; ++i) {
69 double prev = path[i - 1];
70 double curr = path[i];
72 if (curr <= prev)
continue;
74 if (curr >= prev)
continue;
76 double lo = std::min(prev, curr);
77 double hi = std::max(prev, curr);
78 if (stop_level < lo || stop_level > hi)
continue;
80 double pos =
static_cast<double>(i - 1);
81 double denom = curr - prev;
82 if (std::abs(denom) > kSegmentDenomEps) {
83 pos += (stop_level - prev) / denom;