hikyuu2/hikyuu_cpp/hikyuu/KData.cpp

83 lines
2.0 KiB
C++
Raw Normal View History

2015-01-07 01:26:14 +08:00
/*
* KData.cpp
*
* Created on: 2013-1-20
* Author: fasiondog
*/
#include "KData.h"
#include "StockManager.h"
#include "KDataBufferImp.h"
2019-03-19 01:41:12 +08:00
#include "indicator/crt/KDATA.h"
2015-01-07 01:26:14 +08:00
#include <fstream>
namespace hku {
HKU_API std::ostream& operator <<(std::ostream &os, const KData& kdata) {
os << "KData{\n size : " << kdata.size() << "\n stock: " << kdata.getStock() << ",\n query: "
<< kdata.getQuery() << "\n }";
return os;
}
2016-04-03 00:08:31 +08:00
string KData::toString() const {
std::stringstream os;
os << "KData{\n size : " << size() << "\n stock: "
<< getStock().toString() << ",\n query: "
<< getQuery() << "\n }";
return os.str();
}
2015-01-07 01:26:14 +08:00
KData::KData(const Stock& stock, const KQuery& query) {
if (stock.isNull()) {
2015-01-07 01:26:14 +08:00
return;
}
2019-01-11 01:28:54 +08:00
m_imp = KDataImpPtr(new KDataBufferImp(stock, query));
return;
2015-01-07 01:26:14 +08:00
#if 0
if (stock.isBuffer(query.kType())
&& query.recoverType() == KQuery::NO_RECOVER) {
//当Stock已缓存了该类型的K线数据且不进行复权
m_imp = KDataImpPtr(new KDataImp(stock, query));
} else {
m_imp = KDataImpPtr(new KDataBufferImp(stock, query));
}
#endif
}
void KData::tocsv(const string& filename) {
std::ofstream file(filename.c_str());
if (!file) {
HKU_ERROR("Can't open file! (" << filename << ") [KData::tocsv");
return;
}
file << "date, open, high, low, close, amount, count" << std::endl;
file.setf(std::ios_base::fixed);
file.precision(4);
string sep = ",";
KRecord record;
for (size_t i = 0; i < size(); ++i) {
record = getKRecord(i);
file << record.datetime << sep << record.openPrice << sep
<< record.highPrice << sep << record.lowPrice << sep
<< record.closePrice << sep << record.transAmount << sep
<< record.transCount << std::endl;
}
file.close();
}
2019-03-19 01:41:12 +08:00
Indicator KData::close() const {
return CLOSE(*this);
}
2015-01-07 01:26:14 +08:00
} /* namespace */