double DecoTimer::getCurrentTime(void) { if (m_isPaused) { return timeDiffInSecond(m_pauseTime, m_startTime); } else { gettimeofday(&m_nowTime, NULL); return timeDiffInSecond(m_nowTime, m_startTime); } }
int StockProcessor::priceAnomaly(MarketUpdate &mkdt) { DataBundle data; data.ts = std::chrono::system_clock::now(); data.mkdt = mkdt; dataBuf.push_back(data); if (dataBuf.size() < initBufSize) return 0; DataBundle curData = dataBuf[0]; DataBundle preData = dataBuf[1]; double tsDiff = timeDiffInSecond(curData.ts, preData.ts); double curPrice = weightedPrice(curData.mkdt); double prePrice = weightedPrice(preData.mkdt); double prctDiff = (curPrice - prePrice) * 100 / curPrice; if (tsDiff > 1e-6) { double prcAcc = prctDiff / tsDiff; //LOG(INFO) << "prctDiff " << prctDiff << " tsDiff " << tsDiff; if (prcAcc > priceAnomalyThreshold) { LOG(INFO) << "Ticker " << code << " speed increase change alert"; } else if (prcAcc < -priceAnomalyThreshold) { LOG(INFO) << "Ticker " << code << " speed decrease change alert"; } } return 0; }