inline void MACD(int short_window, int long_window, int smooth_window, dvector &input, dvector &macd, dvector &macd_signal, dvector &macd_hist) { std::vector<double> short_emas; std::vector<double> long_emas; short_emas.reserve(input.size()); long_emas.reserve(input.size()); macd.reserve(input.size()); macd_signal.reserve(input.size()); macd_hist.reserve(input.size()); EMA(short_window,input,short_emas); EMA(long_window,input,long_emas); SUBTRACT(short_emas,long_emas,macd); EMA(smooth_window,macd,macd_signal); SUBTRACT(macd,macd_signal,macd_hist); }
inline void ROC(int window,dvector &input,dvector &output) { functors::ROC<double> _roc(window); output.reserve(input.size()); std::transform( input.begin(), input.end(), output.begin(), _roc); }
inline void MOMENTUM(int window,dvector &input,dvector &output) { functors::MOMENTUM<double> _momentum(window); output.reserve(input.size()); std::transform( input.begin(), input.end(), output.begin(), _momentum); }
inline void MAX(int window,dvector &input, dvector &output) { functors::MAX<double> _max(window); output.reserve(input.size()); std::transform( input.begin(), input.end(), output.begin(), _max); }
inline void SUBTRACT(dvector &input1, dvector &input2, dvector &output) {//1 - 2 functors::SUBTRACT<double> _subtract; output.reserve(input1.size()); std::transform(input1.begin(), input1.end(),input2.begin(),output.begin(), _subtract); }
inline void EMA(int window,dvector &input, dvector &output) { functors::EMA<double> _ema(window); output.reserve(input.size()); std::transform( input.begin(), input.end(), output.begin(), _ema); }