nautilus_indicators/python/average/
vidya.rs1use nautilus_model::{
17 data::{Bar, QuoteTick, TradeTick},
18 enums::PriceType,
19};
20use pyo3::prelude::*;
21
22use crate::{
23 average::{MovingAverageType, vidya::VariableIndexDynamicAverage},
24 indicator::{Indicator, MovingAverage},
25};
26
27#[pymethods]
28#[pyo3_stub_gen::derive::gen_stub_pymethods]
29impl VariableIndexDynamicAverage {
30 #[new]
32 #[pyo3(signature = (period, price_type=None, cmo_ma_type=None))]
33 #[must_use]
34 pub fn py_new(
35 period: usize,
36 price_type: Option<PriceType>,
37 cmo_ma_type: Option<MovingAverageType>,
38 ) -> Self {
39 Self::new(period, price_type, cmo_ma_type)
40 }
41
42 fn __repr__(&self) -> String {
43 format!(
44 "VariableIndexDynamicAverage({},{:?})",
45 self.period, self.price_type
46 )
47 }
48
49 #[getter]
50 #[pyo3(name = "name")]
51 fn py_name(&self) -> String {
52 self.name()
53 }
54
55 #[getter]
56 #[pyo3(name = "period")]
57 const fn py_period(&self) -> usize {
58 self.period
59 }
60
61 #[getter]
62 #[pyo3(name = "count")]
63 fn py_count(&self) -> usize {
64 self.count()
65 }
66
67 #[getter]
68 #[pyo3(name = "alpha")]
69 const fn py_alpha(&self) -> f64 {
70 self.alpha
71 }
72
73 #[getter]
74 #[pyo3(name = "has_inputs")]
75 fn py_has_inputs(&self) -> bool {
76 self.has_inputs()
77 }
78
79 #[getter]
80 #[pyo3(name = "initialized")]
81 const fn py_initialized(&self) -> bool {
82 self.initialized
83 }
84
85 #[getter]
86 #[pyo3(name = "cmo_pct")]
87 const fn py_cmo_pct(&self) -> f64 {
88 self.cmo_pct
89 }
90
91 #[getter]
92 #[pyo3(name = "value")]
93 const fn py_value(&self) -> f64 {
94 self.value
95 }
96
97 #[pyo3(name = "handle_quote_tick")]
98 fn py_handle_quote_tick(&mut self, quote: &QuoteTick) {
99 self.py_update_raw(quote.extract_price(self.price_type).into());
100 }
101
102 #[pyo3(name = "handle_trade_tick")]
103 fn py_handle_trade_tick(&mut self, trade: &TradeTick) {
104 self.update_raw((&trade.price).into());
105 }
106
107 #[pyo3(name = "handle_bar")]
108 fn py_handle_bar(&mut self, bar: &Bar) {
109 self.update_raw((&bar.close).into());
110 }
111
112 #[pyo3(name = "reset")]
113 fn py_reset(&mut self) {
114 self.reset();
115 }
116
117 #[pyo3(name = "update_raw")]
118 fn py_update_raw(&mut self, value: f64) {
119 self.update_raw(value);
120 }
121}