nautilus_indicators/python/average/
vidya.rs1use nautilus_core::python::to_pyvalue_err;
17use nautilus_model::{
18 data::{Bar, QuoteTick, TradeTick},
19 enums::PriceType,
20};
21use pyo3::prelude::*;
22
23use crate::{
24 average::{MovingAverageType, vidya::VariableIndexDynamicAverage},
25 indicator::{Indicator, MovingAverage},
26};
27
28#[pyo3_stub_gen::derive::gen_stub_pymethods]
29#[pymethods]
30impl VariableIndexDynamicAverage {
31 #[new]
33 #[pyo3(signature = (period, price_type=None, cmo_ma_type=None))]
34 #[must_use]
35 pub fn py_new(
36 period: usize,
37 price_type: Option<PriceType>,
38 cmo_ma_type: Option<MovingAverageType>,
39 ) -> Self {
40 Self::new(period, price_type, cmo_ma_type)
41 }
42
43 fn __repr__(&self) -> String {
44 format!(
45 "VariableIndexDynamicAverage({},{:?})",
46 self.period, self.price_type
47 )
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 = "price_type")]
64 const fn py_price_type(&self) -> PriceType {
65 self.price_type
66 }
67
68 #[getter]
69 #[pyo3(name = "count")]
70 fn py_count(&self) -> usize {
71 self.count()
72 }
73
74 #[getter]
75 #[pyo3(name = "alpha")]
76 const fn py_alpha(&self) -> f64 {
77 self.alpha
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 = "initialized")]
88 const fn py_initialized(&self) -> bool {
89 self.initialized
90 }
91
92 #[getter]
93 #[pyo3(name = "cmo_pct")]
94 const fn py_cmo_pct(&self) -> f64 {
95 self.cmo_pct
96 }
97
98 #[getter]
99 #[pyo3(name = "value")]
100 const fn py_value(&self) -> f64 {
101 self.value
102 }
103
104 #[pyo3(name = "handle_quote_tick")]
105 fn py_handle_quote_tick(&mut self, quote: &QuoteTick) -> PyResult<()> {
106 self.handle_quote(quote).map_err(to_pyvalue_err)
107 }
108
109 #[pyo3(name = "handle_trade_tick")]
110 fn py_handle_trade_tick(&mut self, trade: &TradeTick) {
111 self.handle_trade(trade);
112 }
113
114 #[pyo3(name = "handle_bar")]
115 fn py_handle_bar(&mut self, bar: &Bar) {
116 self.handle_bar(bar);
117 }
118
119 #[pyo3(name = "reset")]
120 fn py_reset(&mut self) {
121 self.reset();
122 }
123
124 #[pyo3(name = "update_raw")]
125 fn py_update_raw(&mut self, value: f64) {
126 self.update_raw(value);
127 }
128}