37 bool is_long,
double* out_pos) {
38 if (std::isnan(stop_level) || out_pos ==
nullptr)
return false;
41 if (!(bar.
high >= stop_level))
return false;
42 if (bar.
open >= stop_level) {
47 if (!(bar.
low <= stop_level))
return false;
48 if (bar.
open <= stop_level) {
55 fill_bar_path_points_ordered(bar, high_first, path);
57 for (
int i = 1; i < 4; ++i) {
58 double prev = path[i - 1];
59 double curr = path[i];
61 if (curr <= prev)
continue;
63 if (curr >= prev)
continue;
65 double lo = std::min(prev, curr);
66 double hi = std::max(prev, curr);
67 if (stop_level < lo || stop_level > hi)
continue;
69 double pos =
static_cast<double>(i - 1);
70 double denom = curr - prev;
71 if (std::abs(denom) > kSegmentDenomEps) {
72 pos += (stop_level - prev) / denom;