diff --git a/crates/pine-builtins/src/ta/mod.rs b/crates/pine-builtins/src/ta/mod.rs index 478a083..524e654 100644 --- a/crates/pine-builtins/src/ta/mod.rs +++ b/crates/pine-builtins/src/ta/mod.rs @@ -301,8 +301,8 @@ fn step_series(series: &mut Value, push: bool, next: f64) { if let Value::Series(s) = series { if push { if let Some(history) = &s.history { - let mut history = history.borrow_mut(); - history.push((*s.current).clone(), MAX_LOOKBACK); + let previous = s.current.as_number().unwrap_or(f64::NAN); + history.borrow_mut().push(previous, MAX_LOOKBACK); } } *s.current = Value::Number(next); diff --git a/crates/pine-interpreter/src/lib.rs b/crates/pine-interpreter/src/lib.rs index ac6ad3a..c365359 100644 --- a/crates/pine-interpreter/src/lib.rs +++ b/crates/pine-interpreter/src/lib.rs @@ -103,7 +103,7 @@ struct Variable { pub struct Series { pub id: String, pub current: Box>, - pub history: Option>>>>, + pub history: Option>>>, } /// The lazy scalar an object carries, so a single name can be *both* a namespace @@ -1526,7 +1526,10 @@ impl Interpreter { return Ok((*series.current).clone()); } let h = history.borrow(); - return Ok(h.get(index_val - 1).cloned().unwrap_or(Value::Na)); + return Ok(match h.get(index_val - 1) { + Some(x) if !x.is_nan() => Value::Number(*x), + _ => Value::Na, + }); } }