double TechUtils::CalulateWMA(const std::vector<TickWrapper>& data, const TickWrapper& current, size_t seconds) { //datetime to timestamp size_t n = seconds * 2; double totalExchangeLastPrice = current.LastPrice() * n; long long count = n--; long long leftedge = current.toTimeStamp() - seconds * 2; for (auto it = data.rbegin(); it != data.rend(); it++) { if (it->toTimeStamp() > leftedge){ totalExchangeLastPrice += (it->LastPrice() * n); --n; count += n; } else{ break; } } //assert(totalVolume != 0); //assert(totalExchangePrice >= 0.0); return totalExchangeLastPrice / count; }
int64_t TimeStamp::Get(bool &error, int hou, int min, int sec, int mon, int day, int yea, bool gmt) { auto dt = req::make<DateTime>(Current()); if (gmt) { dt->setTimezone(req::make<TimeZone>("UTC")); } dt->set(hou, min, sec, mon, day, yea); return dt->toTimeStamp(error); }
bool RDateTime::operator >= ( const RDateTime &other ) const { ri64 t1, t2; t1 = toTimeStamp(); t2 = other.toTimeStamp(); if( t1 >= t2 ) return true; else return false; }
static Variant strtotimeImpl(const String& input, int64_t timestamp) { if (input.empty()) { return false; } auto dt = req::make<DateTime>(timestamp); if (!dt->fromString(input, req::ptr<TimeZone>(), nullptr, false)) { return false; } bool error; return dt->toTimeStamp(error); }
Variant HHVM_METHOD(DateTimeZone, getOffset, const Object& datetime) { DateTimeZoneData* data = Native::data<DateTimeZoneData>(this_); bool error; if (!datetime.instanceof(s_DateTime)) { raise_argument_warning("DateTimeZone::getOffset", 1, s_DateTime, datetime); return false; } auto dt = DateTimeData::unwrap(datetime); int64_t ts = dt->toTimeStamp(error); return data->m_tz->offset(ts); }
static Variant HHVM_FUNCTION(strtotime, int64_t argc, const String& input, int64_t timestamp) { if (input.empty()) { return false; } if (argc < 2) { timestamp = TimeStamp::Current(); } auto dt = req::make<DateTime>(timestamp); if (!dt->fromString(input, req::ptr<TimeZone>(), nullptr, false)) { return false; } bool error; return dt->toTimeStamp(error); }
void RealTimeDataProcessor::StoreStrategySequenceToDB(const std::string& mark) { spdlog::get("console")->info() << "Start to store db..."; //store Strategy data in memory into db long long pre_uuid = 0; TickType pre_type = TickType::Commom; for (auto iter = m_DataSeq.rbegin(); iter != m_DataSeq.rend(); iter++){ if (iter->m_techvec != nullptr && iter->m_techvec->GetTickType() != TickType::Commom && iter->toTimeStamp() != (pre_uuid + 1) && iter->m_techvec->GetTickType() != pre_type){ pre_uuid = iter->toTimeStamp(); pre_type = iter->m_techvec->GetTickType(); iter->m_techvec->serializeToDB(*(m_dbptr.get()), mark); } } spdlog::get("console")->info() << "End to store db."; }
double TechUtils::CalulateAMA(const std::vector<TickWrapper>& data, const TickWrapper& current, size_t seconds) { double totalExchangePrice = current.TurnOver(); long long totalVolume = current.Volume(); long long leftedge = current.toTimeStamp() - seconds * 2; for (auto it = data.rbegin(); it != data.rend(); it++) { if (it->toTimeStamp() > leftedge){ totalExchangePrice += it->TurnOver(); totalVolume += it->Volume(); } else{ break; } } //assert(totalVolume != 0); //assert(totalExchangePrice >= 0.0); return totalExchangePrice / totalVolume; }
double TechUtils::CalulateMA(const std::list<TickWrapper>& data, const TickWrapper& current, size_t seconds) { //datetime to timestamp double totalExchangeLastPrice = current.LastPrice(); long long count = 1; long long leftedge = current.toTimeStamp() - seconds * 2; for (auto it = data.begin(); it != data.end(); it++) { if (it->toTimeStamp() > leftedge){ totalExchangeLastPrice += it->LastPrice(); ++count; } else{ break; } } //assert(totalVolume != 0); //assert(totalExchangePrice >= 0.0); return totalExchangeLastPrice / count; }