cxmr_ta/
lib.rs

1//! Technical analysis module.
2
3#[macro_use]
4extern crate failure;
5
6#[macro_use]
7extern crate serde_derive;
8extern crate rand;
9extern crate serde;
10
11extern crate cxmr_balances;
12extern crate cxmr_feeds;
13extern crate cxmr_orderbook;
14extern crate cxmr_ta_core;
15#[macro_use]
16extern crate err_convert_macro;
17
18mod impls;
19mod indicators;
20mod operation;
21
22pub use self::indicators::*;
23pub use self::operation::*;
24
25pub mod traits {
26    pub use cxmr_ta_core::{Close, High, Low, Next, Open, Volume};
27
28    /// Orderbook trait.
29    pub trait OrderBook {
30        /// Returns orderbook state.
31        fn orderbook(&self) -> Option<&cxmr_orderbook::OrderBook>;
32    }
33
34    /// Candle time trait.
35    pub trait Time {
36        /// Returns time in milliseconds.
37        fn time(&self) -> u64;
38    }
39
40    /// Indicator state trait.
41    pub trait State: Open + Close + Low + High + Volume + OrderBook + Time {}
42
43    impl<T: Open + Close + Low + High + Volume + OrderBook + Time> State for T {}
44}
45
46/// Technical analysis module error.
47#[derive(Debug, Fail)]
48pub enum Error {
49    /// Invalid indicator parameters.
50    #[fail(display = "invalid indicator {:#?} parameters {:#?}.", _0, _1)]
51    InvalidParams(Indicator, Params),
52    /// Expected parameters for indicator.
53    #[fail(display = "expected parameters for indicator {:#?}.", _0)]
54    ExpectedParams(Indicator),
55    /// Expected parameters for indicator.
56    #[fail(display = "expected {} parameter for indicator {:#?}.", _1, _0)]
57    ExpectedParameter(Indicator, usize),
58    /// Indicator not implemented error.
59    #[fail(display = "indicator {:#?} is not implemented.", _0)]
60    IndicatorNotImplemented(Indicator),
61    /// Technical analysis module error.
62    #[fail(display = "{}", _0)]
63    Ta(cxmr_ta_core::errors::Error),
64}
65
66err_converter!(Ta, cxmr_ta_core::errors::Error);
67
68unsafe impl Send for Error {}
69unsafe impl Sync for Error {}