indexes_rs/v2/obv/
types.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
5pub struct OBVConfig {
6 pub cumulative: bool,
8}
9
10impl Default for OBVConfig {
11 fn default() -> Self {
12 Self { cumulative: true }
13 }
14}
15
16#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
18pub struct OBVInput {
19 pub close: f64,
21 pub volume: f64,
23}
24
25#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
27pub struct OBVOutput {
28 pub obv: f64,
30 pub flow_direction: f64,
32}
33
34#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
36pub struct OBVState {
37 pub previous_close: Option<f64>,
39 pub cumulative_obv: f64,
41 pub config: OBVConfig,
43 pub is_first: bool,
45}
46
47impl OBVState {
48 pub fn new(config: OBVConfig) -> Self {
49 Self {
50 previous_close: None,
51 cumulative_obv: 0.0,
52 config,
53 is_first: true,
54 }
55 }
56}
57
58#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
60pub enum OBVError {
61 InvalidInput(String),
63 NegativeVolume,
65 InvalidPrice,
67}