nautilus_indicators/python/average/
wma.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::wma::WeightedMovingAverage,
25 indicator::{Indicator, MovingAverage},
26};
27
28#[pyo3_stub_gen::derive::gen_stub_pymethods]
29#[pymethods]
30impl WeightedMovingAverage {
31 #[new]
33 #[pyo3(signature = (period, weights, price_type=None))]
34 pub fn py_new(
35 period: usize,
36 weights: Vec<f64>,
37 price_type: Option<PriceType>,
38 ) -> PyResult<Self> {
39 Self::new_checked(period, weights, price_type).map_err(to_pyvalue_err)
40 }
41
42 fn __repr__(&self) -> String {
43 format!("WeightedMovingAverage({},{:?})", self.period, self.weights)
44 }
45
46 #[getter]
47 #[pyo3(name = "name")]
48 fn py_name(&self) -> String {
49 self.name()
50 }
51
52 #[getter]
53 #[pyo3(name = "period")]
54 const fn py_period(&self) -> usize {
55 self.period
56 }
57
58 #[getter]
59 #[pyo3(name = "price_type")]
60 const fn py_price_type(&self) -> PriceType {
61 self.price_type
62 }
63
64 #[getter]
65 #[pyo3(name = "value")]
66 const fn py_value(&self) -> f64 {
67 self.value
68 }
69
70 #[getter]
71 #[pyo3(name = "weights")]
72 fn py_weights(&self) -> Vec<f64> {
73 self.weights.clone()
74 }
75
76 #[getter]
77 #[pyo3(name = "count")]
78 fn py_count(&self) -> usize {
79 self.count()
80 }
81
82 #[getter]
83 #[pyo3(name = "has_inputs")]
84 fn py_has_inputs(&self) -> bool {
85 self.has_inputs()
86 }
87
88 #[getter]
89 #[pyo3(name = "initialized")]
90 const fn py_initialized(&self) -> bool {
91 self.initialized
92 }
93
94 #[pyo3(name = "handle_quote_tick")]
95 fn py_handle_quote_tick(&mut self, quote: &QuoteTick) -> PyResult<()> {
96 self.handle_quote(quote).map_err(to_pyvalue_err)
97 }
98
99 #[pyo3(name = "handle_trade_tick")]
100 fn py_handle_trade_tick(&mut self, trade: &TradeTick) {
101 self.handle_trade(trade);
102 }
103
104 #[pyo3(name = "handle_bar")]
105 fn py_handle_bar(&mut self, bar: &Bar) {
106 self.handle_bar(bar);
107 }
108
109 #[pyo3(name = "reset")]
110 fn py_reset(&mut self) {
111 self.reset();
112 }
113
114 #[pyo3(name = "update_raw")]
115 fn py_update_raw(&mut self, value: f64) {
116 self.update_raw(value);
117 }
118}