double TechUtils::CalulateAMA(const std::vector<KData>& data, const KData& current, size_t mins){ double totalExchangePrice = current.TurnOver(); long long totalVolume = current.Volume(); long long leftedge = current.Timestamp() - mins * 60 - 1; for (auto it = data.rbegin(); it != data.rend(); it++) { if (it->Timestamp() > leftedge){ totalExchangePrice += it->TurnOver(); totalVolume += it->Volume(); } else{ break; } } //assert(totalVolume != 0); //assert(totalExchangePrice >= 0.0); return totalExchangePrice / totalVolume; }
double TechUtils::CalulateMA(const std::vector<KData>& data, const KData& current, size_t mins){ //datetime to timestamp double totalExchangeLastPrice = current.LastPrice(); long long count = 1; long long leftedge = current.Timestamp() - mins * 60 - 1; for (auto it = data.rbegin(); it != data.rend(); it++) { if (it->Timestamp() > leftedge){ totalExchangeLastPrice += it->LastPrice(); ++count; } else{ break; } } //assert(totalVolume != 0); //assert(totalExchangePrice >= 0.0); return totalExchangeLastPrice / count; }