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