nautilus_indicators/python/volatility/
atr.rs1use nautilus_model::data::{Bar, QuoteTick, TradeTick};
17use pyo3::prelude::*;
18
19use crate::{average::MovingAverageType, indicator::Indicator, volatility::atr::AverageTrueRange};
20
21#[pymethods]
22#[pyo3_stub_gen::derive::gen_stub_pymethods]
23impl AverageTrueRange {
24 #[new]
26 #[pyo3(signature = (period, ma_type=None, use_previous=None, value_floor=None))]
27 #[must_use]
28 pub fn py_new(
29 period: usize,
30 ma_type: Option<MovingAverageType>,
31 use_previous: Option<bool>,
32 value_floor: Option<f64>,
33 ) -> Self {
34 Self::new(period, ma_type, use_previous, value_floor)
35 }
36
37 fn __repr__(&self) -> String {
38 format!(
39 "AverageTrueRange({},{},{},{})",
40 self.period, self.ma_type, self.use_previous, self.value_floor,
41 )
42 }
43
44 #[getter]
45 #[pyo3(name = "name")]
46 fn py_name(&self) -> String {
47 self.name()
48 }
49
50 #[getter]
51 #[pyo3(name = "period")]
52 const fn py_period(&self) -> usize {
53 self.period
54 }
55
56 #[getter]
57 #[pyo3(name = "has_inputs")]
58 fn py_has_inputs(&self) -> bool {
59 self.has_inputs()
60 }
61
62 #[getter]
63 #[pyo3(name = "count")]
64 const fn py_count(&self) -> usize {
65 self.count
66 }
67
68 #[getter]
69 #[pyo3(name = "value")]
70 const fn py_value(&self) -> f64 {
71 self.value
72 }
73
74 #[getter]
75 #[pyo3(name = "initialized")]
76 const fn py_initialized(&self) -> bool {
77 self.initialized
78 }
79
80 #[pyo3(name = "update_raw")]
81 fn py_update_raw(&mut self, high: f64, low: f64, close: f64) {
82 self.update_raw(high, low, close);
83 }
84
85 #[pyo3(name = "handle_quote_tick")]
86 const fn py_handle_quote_tick(&mut self, _quote: &QuoteTick) {
87 }
89
90 #[pyo3(name = "handle_trade_tick")]
91 const fn py_handle_trade_tick(&mut self, _trade: &TradeTick) {
92 }
94
95 #[pyo3(name = "handle_bar")]
96 fn py_handle_bar(&mut self, bar: &Bar) {
97 self.update_raw((&bar.high).into(), (&bar.low).into(), (&bar.close).into());
98 }
99
100 #[pyo3(name = "reset")]
101 fn py_reset(&mut self) {
102 self.reset();
103 }
104}