int64/int32/int8和c++11保持一致改为int64_t/int32_t/int8_t

This commit is contained in:
fasiondog 2020-10-01 22:52:50 +08:00
parent b5e2cf89cb
commit 3fe0519bc1
56 changed files with 1495 additions and 1154 deletions

View File

@ -18,11 +18,9 @@
#endif #endif
#include <boost/config.hpp> #include <boost/config.hpp>
//#include <boost/shared_ptr.hpp>
//#include <boost/make_shared.hpp>
//#include <boost/enable_shared_from_this.hpp>
#include <stdio.h> #include <stdio.h>
#include <string_view>
#include <iostream> #include <iostream>
#include <list> #include <list>
#include <cmath> #include <cmath>
@ -52,28 +50,28 @@ namespace hku {
* @{ * @{
*/ */
#if !defined(int64) #if !defined(int64_t)
typedef long long int64; typedef long long int64_t;
#endif #endif
#if !defined(uint64) #if !defined(uint64_t)
typedef unsigned long long uint64; typedef unsigned long long uint64_t;
#endif #endif
#if !defined(int32) #if !defined(int32_t)
typedef int int32; typedef int int32_t;
#endif #endif
#if !defined(uint32) #if !defined(uint32_t)
typedef unsigned uint32; typedef unsigned uint32_t;
#endif #endif
#if !defined(int8) #if !defined(int8_t)
typedef char int8; typedef char int8_t;
#endif #endif
#if !defined(uint8) #if !defined(uint8_t)
typedef unsigned char uint8; typedef unsigned char uint8_t;
#endif #endif
#ifndef MAX_DOUBLE #ifndef MAX_DOUBLE

View File

@ -100,7 +100,7 @@ KData HKU_API getKData(const string& market_code, const Datetime& start, const D
return StockManager::instance().getStock(market_code).getKData(query); return StockManager::instance().getStock(market_code).getKData(query);
} }
KData HKU_API getKData(const string& market_code, int64 start, int64 end, KQuery::KType ktype, KData HKU_API getKData(const string& market_code, int64_t start, int64_t end, KQuery::KType ktype,
KQuery::RecoverType recoverType) { KQuery::RecoverType recoverType) {
KQuery query(start, end, ktype, recoverType); KQuery query(start, end, ktype, recoverType);
return StockManager::instance().getStock(market_code).getKData(query); return StockManager::instance().getStock(market_code).getKData(query);

View File

@ -138,7 +138,7 @@ KData HKU_API getKData(const string& market_code, const Datetime& start = Dateti
* @param recoverType * @param recoverType
* @ingroup StockManage * @ingroup StockManage
*/ */
KData HKU_API getKData(const string& market_code, int64 start = 0, int64 end = Null<int64>(), KData HKU_API getKData(const string& market_code, int64_t start = 0, int64_t end = Null<int64_t>(),
KQuery::KType ktype = KQuery::DAY, KQuery::KType ktype = KQuery::DAY,
KQuery::RecoverType recoverType = KQuery::NO_RECOVER); KQuery::RecoverType recoverType = KQuery::NO_RECOVER);

View File

@ -29,9 +29,10 @@ const string KQuery::HOUR12("HOUR12");
// const string KQuery::INVALID_KTYPE("Z"); // const string KQuery::INVALID_KTYPE("Z");
KQuery::KQuery(Datetime start, Datetime end, KType ktype, RecoverType recoverType) KQuery::KQuery(Datetime start, Datetime end, KType ktype, RecoverType recoverType)
: m_start(start == Null<Datetime>() ? (int64)start.number() : m_start(start == Null<Datetime>() ? (int64_t)start.number()
: (int64)(start.number() * 100 + start.second())), : (int64_t)(start.number() * 100 + start.second())),
m_end(end == Null<Datetime>() ? (int64)end.number() : (int64)(end.number() * 100 + end.second())), m_end(end == Null<Datetime>() ? (int64_t)end.number()
: (int64_t)(end.number() * 100 + end.second())),
m_queryType(KQuery::DATE), m_queryType(KQuery::DATE),
m_dataType(ktype), m_dataType(ktype),
m_recoverType(recoverType) { m_recoverType(recoverType) {
@ -39,21 +40,21 @@ KQuery::KQuery(Datetime start, Datetime end, KType ktype, RecoverType recoverTyp
} }
Datetime KQuery::startDatetime() const { Datetime KQuery::startDatetime() const {
if (m_queryType != DATE || (uint64)m_start == Null<uint64>()) { if (m_queryType != DATE || (uint64_t)m_start == Null<uint64_t>()) {
return Null<Datetime>(); return Null<Datetime>();
} }
uint64 number = (uint64)(m_start / 100); uint64_t number = (uint64_t)(m_start / 100);
Datetime d(number); Datetime d(number);
return Datetime(d.year(), d.month(), d.day(), d.hour(), d.minute(), m_start - number * 100); return Datetime(d.year(), d.month(), d.day(), d.hour(), d.minute(), m_start - number * 100);
} }
Datetime KQuery::endDatetime() const { Datetime KQuery::endDatetime() const {
if (m_queryType != DATE || (uint64)m_end == Null<uint64>()) { if (m_queryType != DATE || (uint64_t)m_end == Null<uint64_t>()) {
return Null<Datetime>(); return Null<Datetime>();
} }
uint64 number = (uint64)(m_end / 100); uint64_t number = (uint64_t)(m_end / 100);
Datetime d(number); Datetime d(number);
return Datetime(d.year(), d.month(), d.day(), d.hour(), d.minute(), m_end - number * 100); return Datetime(d.year(), d.month(), d.day(), d.hour(), d.minute(), m_end - number * 100);
} }

View File

@ -85,7 +85,7 @@ public:
/** 默认构造,按索引方式查询全部日线数据,不复权 */ /** 默认构造,按索引方式查询全部日线数据,不复权 */
KQuery() KQuery()
: m_start(0), : m_start(0),
m_end(Null<int64>()), m_end(Null<int64_t>()),
m_queryType(INDEX), m_queryType(INDEX),
m_dataType(DAY), m_dataType(DAY),
m_recoverType(NO_RECOVER){}; m_recoverType(NO_RECOVER){};
@ -98,7 +98,7 @@ public:
* @param recoverType * @param recoverType
* @param queryType * @param queryType
*/ */
KQuery(int64 start, int64 end = Null<int64>(), KType dataType = DAY, KQuery(int64_t start, int64_t end = Null<int64_t>(), KType dataType = DAY,
RecoverType recoverType = NO_RECOVER, QueryType queryType = INDEX) RecoverType recoverType = NO_RECOVER, QueryType queryType = INDEX)
: m_start(start), : m_start(start),
m_end(end), m_end(end),
@ -119,17 +119,17 @@ public:
RecoverType recoverType = NO_RECOVER); RecoverType recoverType = NO_RECOVER);
/** /**
* Null<int64>() * Null<int64_t>()
*/ */
int64 start() const { int64_t start() const {
return m_queryType != INDEX ? Null<int64>() : m_start; return m_queryType != INDEX ? Null<int64_t>() : m_start;
} }
/** /**
* Null<int64>() * Null<int64_t>()
*/ */
int64 end() const { int64_t end() const {
return m_queryType != INDEX ? Null<int64>() : m_end; return m_queryType != INDEX ? Null<int64_t>() : m_end;
} }
/** /**
@ -177,8 +177,8 @@ public:
static RecoverType getRecoverTypeEnum(const string&); static RecoverType getRecoverTypeEnum(const string&);
private: private:
int64 m_start; int64_t m_start;
int64 m_end; int64_t m_end;
QueryType m_queryType; QueryType m_queryType;
KType m_dataType; KType m_dataType;
RecoverType m_recoverType; RecoverType m_recoverType;
@ -193,11 +193,11 @@ private:
* @see KQuery * @see KQuery
* @ingroup StockManage* * @ingroup StockManage*
*/ */
KQuery HKU_API KQueryByIndex(int64 start = 0, int64 end = Null<int64>(), KQuery HKU_API KQueryByIndex(int64_t start = 0, int64_t end = Null<int64_t>(),
KQuery::KType dataType = KQuery::DAY, KQuery::KType dataType = KQuery::DAY,
KQuery::RecoverType recoverType = KQuery::NO_RECOVER); KQuery::RecoverType recoverType = KQuery::NO_RECOVER);
inline KQuery KQueryByIndex(int64 start, int64 end, KQuery::KType dataType, inline KQuery KQueryByIndex(int64_t start, int64_t end, KQuery::KType dataType,
KQuery::RecoverType recoverType) { KQuery::RecoverType recoverType) {
return KQuery(start, end, dataType, recoverType, KQuery::INDEX); return KQuery(start, end, dataType, recoverType, KQuery::INDEX);
} }
@ -259,7 +259,7 @@ class Null<KQuery> {
public: public:
Null() {} Null() {}
operator KQuery() { operator KQuery() {
return KQuery(Null<int64>(), Null<int64>(), return KQuery(Null<int64_t>(), Null<int64_t>(),
"", // KQuery::INVALID_KTYPE, "", // KQuery::INVALID_KTYPE,
KQuery::INVALID_RECOVER_TYPE, KQuery::INVALID); KQuery::INVALID_RECOVER_TYPE, KQuery::INVALID);
} }

View File

@ -18,7 +18,7 @@ const string Stock::default_market;
const string Stock::default_code; const string Stock::default_code;
const string Stock::default_market_code; const string Stock::default_market_code;
const string Stock::default_name; const string Stock::default_name;
const uint32 Stock::default_type = Null<uint32>(); const uint32_t Stock::default_type = Null<uint32_t>();
const bool Stock::default_valid = false; const bool Stock::default_valid = false;
const Datetime Stock::default_startDate; // = Null<Datetime>(); const Datetime Stock::default_startDate; // = Null<Datetime>();
const Datetime Stock::default_lastDate; // = Null<Datetime>(); const Datetime Stock::default_lastDate; // = Null<Datetime>();
@ -69,7 +69,7 @@ Stock::Data::Data()
}*/ }*/
} }
Stock::Data::Data(const string& market, const string& code, const string& name, uint32 type, Stock::Data::Data(const string& market, const string& code, const string& name, uint32_t type,
bool valid, const Datetime& startDate, const Datetime& lastDate, price_t tick, bool valid, const Datetime& startDate, const Datetime& lastDate, price_t tick,
price_t tickValue, int precision, size_t minTradeNumber, size_t maxTradeNumber) price_t tickValue, int precision, size_t minTradeNumber, size_t maxTradeNumber)
: m_market(market), : m_market(market),
@ -125,16 +125,16 @@ Stock::Stock(const string& market, const string& code, const string& name) {
default_precision, default_minTradeNumber, default_maxTradeNumber)); default_precision, default_minTradeNumber, default_maxTradeNumber));
} }
Stock::Stock(const string& market, const string& code, const string& name, uint32 type, bool valid, Stock::Stock(const string& market, const string& code, const string& name, uint32_t type,
const Datetime& startDate, const Datetime& lastDate) { bool valid, const Datetime& startDate, const Datetime& lastDate) {
m_data = shared_ptr<Data>(new Data(market, code, name, type, valid, startDate, lastDate, m_data = shared_ptr<Data>(new Data(market, code, name, type, valid, startDate, lastDate,
default_tick, default_tickValue, default_precision, default_tick, default_tickValue, default_precision,
default_minTradeNumber, default_maxTradeNumber)); default_minTradeNumber, default_maxTradeNumber));
} }
Stock::Stock(const string& market, const string& code, const string& name, uint32 type, bool valid, Stock::Stock(const string& market, const string& code, const string& name, uint32_t type,
const Datetime& startDate, const Datetime& lastDate, price_t tick, price_t tickValue, bool valid, const Datetime& startDate, const Datetime& lastDate, price_t tick,
int precision, size_t minTradeNumber, size_t maxTradeNumber) price_t tickValue, int precision, size_t minTradeNumber, size_t maxTradeNumber)
: m_data(make_shared<Data>(market, code, name, type, valid, startDate, lastDate, tick, tickValue, : m_data(make_shared<Data>(market, code, name, type, valid, startDate, lastDate, tick, tickValue,
precision, minTradeNumber, maxTradeNumber)) {} precision, minTradeNumber, maxTradeNumber)) {}
@ -170,7 +170,7 @@ const string& Stock::name() const {
return m_data ? m_data->m_name : default_name; return m_data ? m_data->m_name : default_name;
} }
uint32 Stock::type() const { uint32_t Stock::type() const {
return m_data ? m_data->m_type : default_type; return m_data ? m_data->m_type : default_type;
} }
@ -269,6 +269,8 @@ void Stock::loadKDataToBuffer(KQuery::KType inkType) {
releaseKDataBuffer(kType); releaseKDataBuffer(kType);
m_data->pKData[kType] = make_shared<KRecordList>(); m_data->pKData[kType] = make_shared<KRecordList>();
if (m_kdataDriver) { if (m_kdataDriver) {
//*(m_data->pKData[kType]) =
// m_kdataDriver->getKRecordList(m_data->m_market, m_data->m_code, KQuery(0));
m_kdataDriver->loadKData(m_data->m_market, m_data->m_code, kType, 0, Null<size_t>(), m_kdataDriver->loadKData(m_data->m_market, m_data->m_code, kType, 0, Null<size_t>(),
m_data->pKData[kType]); m_data->pKData[kType]);
} }
@ -393,7 +395,7 @@ bool Stock::_getIndexRangeByIndex(const KQuery& query, size_t& out_start, size_t
return false; return false;
} }
int64 startix, endix; int64_t startix, endix;
startix = query.start(); startix = query.start();
if (startix < 0) { if (startix < 0) {
startix += total; startix += total;

View File

@ -34,7 +34,7 @@ private:
static const string default_code; static const string default_code;
static const string default_market_code; static const string default_market_code;
static const string default_name; static const string default_name;
static const uint32 default_type; static const uint32_t default_type;
static const bool default_valid; static const bool default_valid;
static const Datetime default_startDate; static const Datetime default_startDate;
static const Datetime default_lastDate; static const Datetime default_lastDate;
@ -51,18 +51,18 @@ public:
Stock(const Stock&); Stock(const Stock&);
Stock(const string& market, const string& code, const string& name); Stock(const string& market, const string& code, const string& name);
Stock(const string& market, const string& code, const string& name, uint32 type, bool valid, Stock(const string& market, const string& code, const string& name, uint32_t type, bool valid,
const Datetime& startDate, const Datetime& lastDate); const Datetime& startDate, const Datetime& lastDate);
Stock(const string& market, const string& code, const string& name, uint32 type, bool valid, Stock(const string& market, const string& code, const string& name, uint32_t type, bool valid,
const Datetime& startDate, const Datetime& lastDate, price_t tick, price_t tickValue, int precision, const Datetime& startDate, const Datetime& lastDate, price_t tick, price_t tickValue,
size_t minTradeNumber, size_t maxTradeNumber); int precision, size_t minTradeNumber, size_t maxTradeNumber);
virtual ~Stock(); virtual ~Stock();
Stock& operator=(const Stock&); Stock& operator=(const Stock&);
bool operator==(const Stock&) const; bool operator==(const Stock&) const;
bool operator!=(const Stock&) const; bool operator!=(const Stock&) const;
/** 获取内部id一般用于作为map的键值使用该id实质为m_data的内存地址 */ /** 获取内部id一般用于作为map的键值使用该id实质为m_data的内存地址 */
uint64 id() const; uint64_t id() const;
/** 获取所属市场简称,市场简称是市场的唯一标识 */ /** 获取所属市场简称,市场简称是市场的唯一标识 */
const string& market() const; const string& market() const;
@ -77,7 +77,7 @@ public:
const string& name() const; const string& name() const;
/** 获取证券类型 */ /** 获取证券类型 */
uint32 type() const; uint32_t type() const;
/** 该证券当前是否有效 */ /** 该证券当前是否有效 */
bool valid() const; bool valid() const;
@ -215,7 +215,7 @@ struct HKU_API Stock::Data {
string m_code; //证券代码 string m_code; //证券代码
string m_market_code; //市场简称证券代码 string m_market_code; //市场简称证券代码
string m_name; //证券名称 string m_name; //证券名称
uint32 m_type; //证券类型 uint32_t m_type; //证券类型
bool m_valid; //当前证券是否有效 bool m_valid; //当前证券是否有效
Datetime m_startDate; //证券起始日期 Datetime m_startDate; //证券起始日期
Datetime m_lastDate; //证券最后日期 Datetime m_lastDate; //证券最后日期
@ -233,9 +233,9 @@ struct HKU_API Stock::Data {
map<string, KRecordListPtr> pKData; map<string, KRecordListPtr> pKData;
Data(); Data();
Data(const string& market, const string& code, const string& name, uint32 type, bool valid, Data(const string& market, const string& code, const string& name, uint32_t type, bool valid,
const Datetime& startDate, const Datetime& lastDate, price_t tick, price_t tickValue, int precision, const Datetime& startDate, const Datetime& lastDate, price_t tick, price_t tickValue,
size_t minTradeNumber, size_t maxTradeNumber); int precision, size_t minTradeNumber, size_t maxTradeNumber);
virtual ~Data(); virtual ~Data();
}; };
@ -264,8 +264,8 @@ inline bool operator<(const Stock& s1, const Stock& s2) {
return s1.id() < s2.id(); return s1.id() < s2.id();
} }
inline uint64 Stock::id() const { inline uint64_t Stock::id() const {
return isNull() ? 0 : (int64)m_data.get(); return isNull() ? 0 : (int64_t)m_data.get();
} }
inline StockWeightList Stock::getWeight() const { inline StockWeightList Stock::getWeight() const {

View File

@ -315,7 +315,7 @@ MarketInfo StockManager::getMarketInfo(const string& market) const {
return Null<MarketInfo>(); return Null<MarketInfo>();
} }
StockTypeInfo StockManager::getStockTypeInfo(uint32 type) const { StockTypeInfo StockManager::getStockTypeInfo(uint32_t type) const {
auto iter = m_stockTypeInfo.find(type); auto iter = m_stockTypeInfo.find(type);
if (iter != m_stockTypeInfo.end()) { if (iter != m_stockTypeInfo.end()) {
return iter->second; return iter->second;

View File

@ -90,7 +90,7 @@ public:
* @param type * @param type
* @return Null<StockTypeInf>() * @return Null<StockTypeInf>()
*/ */
StockTypeInfo getStockTypeInfo(uint32 type) const; StockTypeInfo getStockTypeInfo(uint32_t type) const;
/** 获取市场简称列表 */ /** 获取市场简称列表 */
MarketList getAllMarket() const; MarketList getAllMarket() const;
@ -187,7 +187,7 @@ private:
typedef unordered_map<string, MarketInfo> MarketInfoMap; typedef unordered_map<string, MarketInfo> MarketInfoMap;
MarketInfoMap m_marketInfoDict; MarketInfoMap m_marketInfoDict;
typedef unordered_map<uint32, StockTypeInfo> StockTypeInfoMap; typedef unordered_map<uint32_t, StockTypeInfo> StockTypeInfoMap;
StockTypeInfoMap m_stockTypeInfo; StockTypeInfoMap m_stockTypeInfo;
Parameter m_baseInfoDriverParam; Parameter m_baseInfoDriverParam;

View File

@ -39,7 +39,7 @@ string StockTypeInfo::toString() const {
} }
StockTypeInfo::StockTypeInfo() StockTypeInfo::StockTypeInfo()
: m_type(Null<uint32>()), : m_type(Null<uint32_t>()),
m_tick(0.0), m_tick(0.0),
m_tickValue(0.0), m_tickValue(0.0),
m_unit(1.0), m_unit(1.0),
@ -47,7 +47,7 @@ StockTypeInfo::StockTypeInfo()
m_minTradeNumber(0), m_minTradeNumber(0),
m_maxTradeNumber(0) {} m_maxTradeNumber(0) {}
StockTypeInfo::StockTypeInfo(uint32 type, const string& description, price_t tick, StockTypeInfo::StockTypeInfo(uint32_t type, const string& description, price_t tick,
price_t tickValue, int precision, double minTradeNumber, price_t tickValue, int precision, double minTradeNumber,
double maxTradeNumber) double maxTradeNumber)
: m_type(type), : m_type(type),

View File

@ -34,10 +34,10 @@ class HKU_API StockTypeInfo {
public: public:
/** 默认构造函数返回Null<StockTypeInfo>() */ /** 默认构造函数返回Null<StockTypeInfo>() */
StockTypeInfo(); StockTypeInfo();
StockTypeInfo(uint32, const string&, price_t, price_t, int, double, double); StockTypeInfo(uint32_t, const string&, price_t, price_t, int, double, double);
/** 获取证券类型 */ /** 获取证券类型 */
uint32 type() const { uint32_t type() const {
return m_type; return m_type;
} }
@ -80,7 +80,7 @@ public:
string toString() const; string toString() const;
private: private:
uint32 m_type; //证券类型 uint32_t m_type; //证券类型
string m_description; //描述信息 string m_description; //描述信息
price_t m_tick; //最小跳动量 price_t m_tick; //最小跳动量
price_t m_tickValue; //每一个tick价格 price_t m_tickValue; //每一个tick价格

View File

@ -25,7 +25,7 @@ class HKU_API BaseInfoDriver {
public: public:
typedef unordered_map<string, MarketInfo> MarketInfoMap; typedef unordered_map<string, MarketInfo> MarketInfoMap;
typedef unordered_map<uint32, StockTypeInfo> StockTypeInfoMap; typedef unordered_map<uint32_t, StockTypeInfo> StockTypeInfoMap;
/** /**
* *

View File

@ -44,7 +44,7 @@ PriceList HistoryFinanceReader ::getHistoryFinanceInfo(Datetime date, const stri
memcpy(&report_size, header_buf + 12, 4); memcpy(&report_size, header_buf + 12, 4);
char stock_code[7]; char stock_code[7];
uint32 address = 0; uint32_t address = 0;
for (int i = 0; i < max_count; i++) { for (int i = 0; i < max_count; i++) {
if (!fread(stock_code, 1, 7, fp)) { if (!fread(stock_code, 1, 7, fp)) {
HKU_ERROR("read stock_code failed! {}", filename); HKU_ERROR("read stock_code failed! {}", filename);

View File

@ -108,7 +108,7 @@ bool MySQLBaseInfoDriver::_loadStockTypeInfo() {
return true; return true;
} }
StockWeightList MySQLBaseInfoDriver::_getStockWeightList(uint64 stockid) { StockWeightList MySQLBaseInfoDriver::_getStockWeightList(uint64_t stockid) {
StockWeightList result; StockWeightList result;
if (!m_pool) { if (!m_pool) {
HKU_ERROR("Connect pool ptr is null!"); HKU_ERROR("Connect pool ptr is null!");
@ -166,7 +166,7 @@ bool MySQLBaseInfoDriver::_loadStock() {
return false; return false;
} }
unordered_map<uint64, string> marketDict; unordered_map<uint64_t, string> marketDict;
for (auto &m : marketTable) { for (auto &m : marketTable) {
marketDict[m.id()] = m.market(); marketDict[m.id()] = m.market();
} }

View File

@ -32,7 +32,7 @@ public:
virtual bool _loadStock() override; virtual bool _loadStock() override;
private: private:
StockWeightList _getStockWeightList(uint64); StockWeightList _getStockWeightList(uint64_t);
private: private:
ConnectPool<MySQLConnect> *m_pool; ConnectPool<MySQLConnect> *m_pool;

View File

@ -122,7 +122,7 @@ bool SQLiteBaseInfoDriver::_loadStock() {
return false; return false;
} }
unordered_map<uint64, string> marketDict; unordered_map<uint64_t, string> marketDict;
for (auto& m : marketTable) { for (auto& m : marketTable) {
marketDict[m.id()] = m.market(); marketDict[m.id()] = m.market();
} }
@ -175,7 +175,7 @@ bool SQLiteBaseInfoDriver::_loadStock() {
return true; return true;
} }
StockWeightList SQLiteBaseInfoDriver::_getStockWeightList(uint64 stockid) { StockWeightList SQLiteBaseInfoDriver::_getStockWeightList(uint64_t stockid) {
StockWeightList result; StockWeightList result;
if (!m_pool) { if (!m_pool) {
HKU_ERROR("Connect pool ptr is null!"); HKU_ERROR("Connect pool ptr is null!");

View File

@ -29,7 +29,7 @@ public:
virtual Parameter getFinanceInfo(const string& market, const string& code) override; virtual Parameter getFinanceInfo(const string& market, const string& code) override;
private: private:
StockWeightList _getStockWeightList(uint64 stockid); StockWeightList _getStockWeightList(uint64_t stockid);
private: private:
//股票基本信息数据库实例 //股票基本信息数据库实例

View File

@ -19,7 +19,7 @@ class MarketInfoTable {
public: public:
MarketInfoTable() : m_marketid(0), m_lastDate(0) {} MarketInfoTable() : m_marketid(0), m_lastDate(0) {}
uint64 id() const { uint64_t id() const {
return m_marketid; return m_marketid;
} }
@ -39,7 +39,7 @@ public:
return m_code; return m_code;
} }
int64 lastDate() const { int64_t lastDate() const {
return m_lastDate; return m_lastDate;
} }
@ -72,12 +72,12 @@ public:
} }
private: private:
uint64 m_marketid; uint64_t m_marketid;
string m_market; string m_market;
string m_name; string m_name;
string m_description; string m_description;
string m_code; string m_code;
int64 m_lastDate; int64_t m_lastDate;
}; };
} // namespace hku } // namespace hku

View File

@ -49,14 +49,14 @@ public:
} }
public: public:
uint64 stockid; uint64_t stockid;
uint64 marketid; uint64_t marketid;
string code; string code;
string name; string name;
uint32 type; uint32_t type;
uint32 valid; uint32_t valid;
uint64 startDate; uint64_t startDate;
uint64 endDate; uint64_t endDate;
}; };
} // namespace hku } // namespace hku

View File

@ -26,15 +26,15 @@ public:
m_minTradeNumber(0), m_minTradeNumber(0),
m_maxTradeNumber(0) {} m_maxTradeNumber(0) {}
int64 id() const { int64_t id() const {
return m_id; return m_id;
} }
uint32 type() const { uint32_t type() const {
return m_type; return m_type;
} }
uint32 precision() const { uint32_t precision() const {
return m_precision; return m_precision;
} }
@ -93,9 +93,9 @@ public:
} }
private: private:
int64 m_id; int64_t m_id;
uint32 m_type; //证券类型 uint32_t m_type; //证券类型
uint32 m_precision; //价格精度 uint32_t m_precision; //价格精度
double m_tick; //最小跳动量 double m_tick; //最小跳动量
double m_tickValue; //每一个tick价格 double m_tickValue; //每一个tick价格
double m_minTradeNumber; //每笔最小交易量 double m_minTradeNumber; //每笔最小交易量

View File

@ -32,8 +32,8 @@ public:
freeCount(0) {} freeCount(0) {}
public: public:
uint64 stockid; uint64_t stockid;
uint64 date; uint64_t date;
double countAsGift; double countAsGift;
double countForSell; double countForSell;
double priceForSell; double priceForSell;

View File

@ -219,4 +219,95 @@ bool KDataTempCsvDriver::getIndexRangeByDate(const string& market, const string&
return true; return true;
} }
KRecordList KDataTempCsvDriver::getKRecordList(const string& market, const string& code,
KQuery query) {
KRecordList result;
return result;
}
KRecordList KDataTempCsvDriver::_getKRecordListByIndex(const string& market, const string& code,
size_t start_ix, size_t end_ix,
KQuery::KType kType) {
KRecordList result;
string filename;
if (kType == KQuery::DAY) {
filename = m_day_filename;
} else if (kType == KQuery::MIN) {
filename = m_min_filename;
} else {
HKU_INFO("Only support DAY and MIN!");
return result;
}
std::ifstream infile(filename.c_str());
if (!infile) {
HKU_ERROR("Can't open this file: {}", filename);
return result;
}
string line;
if (!std::getline(infile, line)) {
infile.close();
return result;
}
_get_title_column(line);
size_t line_no = 0;
while (std::getline(infile, line)) {
if (line_no++ < start_ix)
continue;
if (line_no >= end_ix)
break;
_get_token(line);
size_t token_count = m_token_buf.size();
KRecord record;
string action;
try {
action = "DATE";
if (token_count >= m_column[DATE])
record.datetime = Datetime(m_token_buf[m_column[DATE]]);
action = "OPEN";
if (token_count >= m_column[OPEN])
record.openPrice = boost::lexical_cast<price_t>(m_token_buf[m_column[OPEN]]);
action = "HIGH";
if (token_count >= m_column[HIGH])
record.highPrice = boost::lexical_cast<price_t>(m_token_buf[m_column[HIGH]]);
action = "LOW";
if (token_count >= m_column[LOW])
record.lowPrice = boost::lexical_cast<price_t>(m_token_buf[m_column[LOW]]);
action = "CLOSE";
if (token_count >= m_column[CLOSE])
record.closePrice = boost::lexical_cast<price_t>(m_token_buf[m_column[CLOSE]]);
action = "VOLUME";
if (token_count >= m_column[VOLUME])
record.transCount = boost::lexical_cast<price_t>(m_token_buf[m_column[VOLUME]]);
action = "AMOUNT";
if (token_count >= m_column[AMOUNT])
record.transAmount = boost::lexical_cast<price_t>(m_token_buf[m_column[AMOUNT]]);
result.push_back(record);
} catch (...) {
HKU_WARN("Invalid data in line {}! at trans {}", line_no, action);
}
line_no++;
}
infile.close();
return result;
}
} /* namespace hku */ } /* namespace hku */

View File

@ -70,11 +70,23 @@ public:
virtual KRecord getKRecord(const string& market, const string& code, size_t pos, virtual KRecord getKRecord(const string& market, const string& code, size_t pos,
KQuery::KType kType) override; KQuery::KType kType) override;
/**
* K 线
* @param market
* @param code
* @param query
*/
virtual KRecordList getKRecordList(const string& market, const string& code,
KQuery query) override;
private: private:
void _get_title_column(const string&); void _get_title_column(const string&);
void _get_token(const string&); void _get_token(const string&);
string _get_filename(); string _get_filename();
KRecordList _getKRecordListByIndex(const string& market, const string& code, size_t start_ix,
size_t end_ix, KQuery::KType kType);
private: private:
string m_day_filename; string m_day_filename;
string m_min_filename; string m_min_filename;

View File

@ -214,11 +214,12 @@ void H5KDataDriver::loadKData(const string& market, const string& code, KQuery::
return; return;
} }
/*KRecordList result = getKRecordList(market, code, KQuery(start_ix, end_ix, kType)); /*int64_t end = end_ix == Null<size_t>() ? Null<int64_t>() : (int64_t)end_ix;
KRecordList result = getKRecordList(market, code, KQuery(start_ix, end, kType));
for (auto& record : result) { for (auto& record : result) {
out_buffer->push_back(record); out_buffer->push_back(record);
return; }
}*/ return;*/
if (KQuery::DAY == kType || KQuery::MIN5 == kType || KQuery::MIN == kType) { if (KQuery::DAY == kType || KQuery::MIN5 == kType || KQuery::MIN == kType) {
_loadBaseData(market, code, kType, start_ix, end_ix, out_buffer); _loadBaseData(market, code, kType, start_ix, end_ix, out_buffer);
@ -615,8 +616,8 @@ bool H5KDataDriver::_getBaseIndexRangeByDate(const string& market, const string&
H5::DataSet dataset; H5::DataSet dataset;
H5::DataSpace dataspace; H5::DataSpace dataspace;
uint64 start_number = query.startDatetime().number(); uint64_t start_number = query.startDatetime().number();
uint64 end_number = query.endDatetime().number(); uint64_t end_number = query.endDatetime().number();
hsize_t startpos = 0, endpos = 0; hsize_t startpos = 0, endpos = 0;
try { try {
string tablename(market + code); string tablename(market + code);
@ -744,7 +745,7 @@ bool H5KDataDriver::_getOtherIndexRangeByDate(const string& market, const string
} }
size_t mid, low = 0, high = total - 1; size_t mid, low = 0, high = total - 1;
uint64 startDatetime = query.startDatetime().number(); uint64_t startDatetime = query.startDatetime().number();
H5IndexRecord h5record; H5IndexRecord h5record;
while (low <= high) { while (low <= high) {
H5ReadIndexRecords(dataset, high, 1, &h5record); H5ReadIndexRecords(dataset, high, 1, &h5record);
@ -775,7 +776,7 @@ bool H5KDataDriver::_getOtherIndexRangeByDate(const string& market, const string
out_start = mid; out_start = mid;
uint64 endDatetime = query.endDatetime().number(); uint64_t endDatetime = query.endDatetime().number();
low = mid, high = total - 1; low = mid, high = total - 1;
while (low <= high) { while (low <= high) {
H5ReadIndexRecords(dataset, high, 1, &h5record); H5ReadIndexRecords(dataset, high, 1, &h5record);
@ -971,8 +972,8 @@ TimeLineList H5KDataDriver::getTimeLineList(const string& market, const string&
: _getTimeLine(market, code, query.startDatetime(), query.endDatetime()); : _getTimeLine(market, code, query.startDatetime(), query.endDatetime());
} }
TimeLineList H5KDataDriver::_getTimeLine(const string& market, const string& code, int64 start_ix, TimeLineList H5KDataDriver::_getTimeLine(const string& market, const string& code, int64_t start_ix,
int64 end_ix) { int64_t end_ix) {
TimeLineList result; TimeLineList result;
H5FilePtr h5file; H5FilePtr h5file;
H5::Group group; H5::Group group;
@ -1059,8 +1060,8 @@ TimeLineList H5KDataDriver::_getTimeLine(const string& market, const string& cod
H5::DataSet dataset; H5::DataSet dataset;
H5::DataSpace dataspace; H5::DataSpace dataspace;
uint64 start_number = start.number(); uint64_t start_number = start.number();
uint64 end_number = end.number(); uint64_t end_number = end.number();
hsize_t startpos = 0, endpos = 0; hsize_t startpos = 0, endpos = 0;
try { try {
string tablename(market + code); string tablename(market + code);
@ -1192,8 +1193,8 @@ TransList H5KDataDriver::getTransList(const string& market, const string& code,
: _getTransList(market, code, query.startDatetime(), query.endDatetime()); : _getTransList(market, code, query.startDatetime(), query.endDatetime());
} }
TransList H5KDataDriver::_getTransList(const string& market, const string& code, int64 start_ix, TransList H5KDataDriver::_getTransList(const string& market, const string& code, int64_t start_ix,
int64 end_ix) { int64_t end_ix) {
TransList result; TransList result;
H5FilePtr h5file; H5FilePtr h5file;
H5::Group group; H5::Group group;
@ -1244,7 +1245,7 @@ TransList H5KDataDriver::_getTransList(const string& market, const string& code,
TransRecord record; TransRecord record;
result.reserve(total + 2); result.reserve(total + 2);
uint64 number = 0, second = 0; uint64_t number = 0, second = 0;
for (hsize_t i = 0; i < total; i++) { for (hsize_t i = 0; i < total; i++) {
number = pBuf[i].datetime / 100; number = pBuf[i].datetime / 100;
second = pBuf[i].datetime - number * 100; second = pBuf[i].datetime - number * 100;
@ -1289,8 +1290,8 @@ TransList H5KDataDriver::_getTransList(const string& market, const string& code,
H5::DataSet dataset; H5::DataSet dataset;
H5::DataSpace dataspace; H5::DataSpace dataspace;
uint64 start_number = start.number() * 100 + start.second(); uint64_t start_number = start.number() * 100 + start.second();
uint64 end_number = end.number() * 100 + (end.isNull() ? 0 : end.second()); uint64_t end_number = end.number() * 100 + (end.isNull() ? 0 : end.second());
hsize_t startpos = 0, endpos = 0; hsize_t startpos = 0, endpos = 0;
try { try {
string tablename(market + code); string tablename(market + code);
@ -1397,7 +1398,7 @@ TransList H5KDataDriver::_getTransList(const string& market, const string& code,
TransRecord record; TransRecord record;
result.reserve(total + 2); result.reserve(total + 2);
uint64 number = 0, second = 0; uint64_t number = 0, second = 0;
for (hsize_t i = 0; i < total; i++) { for (hsize_t i = 0; i < total; i++) {
number = pBuf[i].datetime / 100; number = pBuf[i].datetime / 100;
second = pBuf[i].datetime - number * 100; second = pBuf[i].datetime - number * 100;

View File

@ -70,11 +70,11 @@ private:
// start, // start,
// Datetime end); // Datetime end);
TimeLineList _getTimeLine(const string& market, const string& code, int64 start, int64 end); TimeLineList _getTimeLine(const string& market, const string& code, int64_t start, int64_t end);
TimeLineList _getTimeLine(const string& market, const string& code, const Datetime& start, TimeLineList _getTimeLine(const string& market, const string& code, const Datetime& start,
const Datetime& end); const Datetime& end);
TransList _getTransList(const string& market, const string& code, int64 start, int64 end); TransList _getTransList(const string& market, const string& code, int64_t start, int64_t end);
TransList _getTransList(const string& market, const string& code, const Datetime& start, TransList _getTransList(const string& market, const string& code, const Datetime& start,
const Datetime& end); const Datetime& end);

View File

@ -18,31 +18,31 @@ namespace hku {
typedef shared_ptr<H5::H5File> H5FilePtr; typedef shared_ptr<H5::H5File> H5FilePtr;
struct H5Record { struct H5Record {
uint64 datetime; uint64_t datetime;
uint32 openPrice; uint32_t openPrice;
uint32 highPrice; uint32_t highPrice;
uint32 lowPrice; uint32_t lowPrice;
uint32 closePrice; uint32_t closePrice;
uint64 transAmount; uint64_t transAmount;
uint64 transCount; uint64_t transCount;
}; };
struct H5IndexRecord { struct H5IndexRecord {
uint64 datetime; uint64_t datetime;
uint64 start; uint64_t start;
}; };
struct H5TimeLineRecord { struct H5TimeLineRecord {
uint64 datetime; uint64_t datetime;
uint64 price; uint64_t price;
uint64 vol; uint64_t vol;
}; };
struct H5TransRecord { struct H5TransRecord {
uint64 datetime; uint64_t datetime;
uint64 price; uint64_t price;
uint64 vol; uint64_t vol;
uint8 buyorsell; uint8_t buyorsell;
}; };
} // namespace hku } // namespace hku

View File

@ -13,21 +13,21 @@
namespace hku { namespace hku {
struct TdxDayData { struct TdxDayData {
uint32 date; uint32_t date;
uint32 open; uint32_t open;
uint32 high; uint32_t high;
uint32 low; uint32_t low;
uint32 close; uint32_t close;
float amount; float amount;
uint32 vol; uint32_t vol;
uint32 other; uint32_t other;
Datetime getDatetime() { Datetime getDatetime() {
return Datetime(uint64(date) * 10000); return Datetime(uint64_t(date) * 10000);
} }
void toKRecord(KRecord& record) { void toKRecord(KRecord& record) {
record.datetime = Datetime(uint64(date) * 10000); record.datetime = Datetime(uint64_t(date) * 10000);
record.openPrice = price_t(open) * 0.01; record.openPrice = price_t(open) * 0.01;
record.highPrice = price_t(high) * 0.01; record.highPrice = price_t(high) * 0.01;
record.lowPrice = price_t(low) * 0.01; record.lowPrice = price_t(low) * 0.01;
@ -46,8 +46,8 @@ struct TdxMinData {
float low; float low;
float close; float close;
float amount; float amount;
uint32 vol; uint32_t vol;
uint32 other; uint32_t other;
Datetime getDatetime() { Datetime getDatetime() {
int tmp_date = date >> 11; int tmp_date = date >> 11;

View File

@ -14,18 +14,21 @@
namespace hku { namespace hku {
TimeDelta::TimeDelta(int64_t days, int64_t hours, int64_t minutes, int64_t seconds, int64_t milliseconds, TimeDelta::TimeDelta(int64_t days, int64_t hours, int64_t minutes, int64_t seconds,
int64_t microseconds) { int64_t milliseconds, int64_t microseconds) {
// 各参数添加限制,防止出现总和溢出的情况 // 各参数添加限制,防止出现总和溢出的情况
HKU_CHECK(days <= 99999999 && days >= -99999999, "Out of range! Input days: {}", days); HKU_CHECK(days <= 99999999 && days >= -99999999, "Out of range! Input days: {}", days);
HKU_CHECK(hours >= -100000 && hours <= 100000, "Out of range! Input hours: {}", hours); HKU_CHECK(hours >= -100000 && hours <= 100000, "Out of range! Input hours: {}", hours);
HKU_CHECK(minutes >= -100000 && minutes <= 100000, "Out of range! Input minutes: {}", minutes); HKU_CHECK(minutes >= -100000 && minutes <= 100000, "Out of range! Input minutes: {}", minutes);
HKU_CHECK(seconds >= -8639900 && seconds <= 8639900, "Out of range! Input seconds: {}", seconds); HKU_CHECK(seconds >= -8639900 && seconds <= 8639900, "Out of range! Input seconds: {}",
HKU_CHECK(milliseconds >= -86399000000 && milliseconds <= 86399000000, "Out of range! Input milliseconds: {}", seconds);
milliseconds); HKU_CHECK(milliseconds >= -86399000000 && milliseconds <= 86399000000,
HKU_CHECK(microseconds >= -86399000000 && microseconds <= 86399000000, "Out of range! Input microseconds: {}", "Out of range! Input milliseconds: {}", milliseconds);
microseconds); HKU_CHECK(microseconds >= -86399000000 && microseconds <= 86399000000,
int64_t total = ((((days * 24 + hours) * 60 + minutes) * 60 + seconds) * 1000 + milliseconds) * 1000 + microseconds; "Out of range! Input microseconds: {}", microseconds);
int64_t total =
((((days * 24 + hours) * 60 + minutes) * 60 + seconds) * 1000 + milliseconds) * 1000 +
microseconds;
HKU_CHECK(total >= m_min_micro_seconds && total <= m_max_micro_seconds, "Out of total range!"); HKU_CHECK(total >= m_min_micro_seconds && total <= m_max_micro_seconds, "Out of total range!");
m_duration = bt::time_duration(0, 0, 0, total); m_duration = bt::time_duration(0, 0, 0, total);
} }
@ -57,7 +60,8 @@ int64_t TimeDelta::hours() const {
if (ticks() % m_one_day_ticks == 0) { if (ticks() % m_one_day_ticks == 0) {
return 0; return 0;
} else { } else {
int64_t pos_ticks = std::abs((ticks() / m_one_day_ticks - 1) * m_one_day_ticks) + ticks(); int64_t pos_ticks =
std::abs((ticks() / m_one_day_ticks - 1) * m_one_day_ticks) + ticks();
return bt::time_duration(0, 0, 0, pos_ticks).hours(); return bt::time_duration(0, 0, 0, pos_ticks).hours();
} }
} }
@ -69,7 +73,8 @@ int64_t TimeDelta::minutes() const {
if (ticks() % m_one_day_ticks == 0) { if (ticks() % m_one_day_ticks == 0) {
return 0; return 0;
} else { } else {
int64_t pos_ticks = std::abs((ticks() / m_one_day_ticks - 1) * m_one_day_ticks) + ticks(); int64_t pos_ticks =
std::abs((ticks() / m_one_day_ticks - 1) * m_one_day_ticks) + ticks();
return bt::time_duration(0, 0, 0, pos_ticks).minutes(); return bt::time_duration(0, 0, 0, pos_ticks).minutes();
} }
} }
@ -81,7 +86,8 @@ int64_t TimeDelta::seconds() const {
if (ticks() % m_one_day_ticks == 0) { if (ticks() % m_one_day_ticks == 0) {
return 0; return 0;
} else { } else {
int64_t pos_ticks = std::abs((ticks() / m_one_day_ticks - 1) * m_one_day_ticks) + ticks(); int64_t pos_ticks =
std::abs((ticks() / m_one_day_ticks - 1) * m_one_day_ticks) + ticks();
return bt::time_duration(0, 0, 0, pos_ticks).seconds(); return bt::time_duration(0, 0, 0, pos_ticks).seconds();
} }
} }
@ -93,7 +99,8 @@ int64_t TimeDelta::milliseconds() const {
if (ticks() % m_one_day_ticks == 0) { if (ticks() % m_one_day_ticks == 0) {
return 0; return 0;
} else { } else {
int64_t pos_ticks = std::abs((ticks() / m_one_day_ticks - 1) * m_one_day_ticks) + ticks(); int64_t pos_ticks =
std::abs((ticks() / m_one_day_ticks - 1) * m_one_day_ticks) + ticks();
int64_t milli = pos_ticks % 1000000; int64_t milli = pos_ticks % 1000000;
return milli == 0 ? 0 : (milli - microseconds()) / 1000; return milli == 0 ? 0 : (milli - microseconds()) / 1000;
} }
@ -114,25 +121,29 @@ int64_t TimeDelta::microseconds() const {
} }
TimeDelta HKU_API Hours(int64_t hours) { TimeDelta HKU_API Hours(int64_t hours) {
HKU_CHECK(hours >= TimeDelta::minTicks() / 3600000000LL && hours <= TimeDelta::maxTicks() / 3600000000LL, HKU_CHECK(hours >= TimeDelta::minTicks() / 3600000000LL &&
hours <= TimeDelta::maxTicks() / 3600000000LL,
"Out of total range!"); "Out of total range!");
return TimeDelta::fromTicks(hours * 3600000000LL); return TimeDelta::fromTicks(hours * 3600000000LL);
} }
TimeDelta HKU_API Minutes(int64_t mins) { TimeDelta HKU_API Minutes(int64_t mins) {
HKU_CHECK(mins >= TimeDelta::minTicks() / 60000000LL && mins <= TimeDelta::maxTicks() / 60000000LL, HKU_CHECK(
"Out of total range!"); mins >= TimeDelta::minTicks() / 60000000LL && mins <= TimeDelta::maxTicks() / 60000000LL,
"Out of total range!");
return TimeDelta::fromTicks(mins * 60000000LL); return TimeDelta::fromTicks(mins * 60000000LL);
} }
TimeDelta HKU_API Seconds(int64_t secs) { TimeDelta HKU_API Seconds(int64_t secs) {
HKU_CHECK(secs >= TimeDelta::minTicks() / 1000000LL && secs <= TimeDelta::maxTicks() / 1000000LL, HKU_CHECK(
"Out of total range!"); secs >= TimeDelta::minTicks() / 1000000LL && secs <= TimeDelta::maxTicks() / 1000000LL,
"Out of total range!");
return TimeDelta::fromTicks(secs * 1000000LL); return TimeDelta::fromTicks(secs * 1000000LL);
} }
TimeDelta HKU_API Milliseconds(int64_t milliseconds) { TimeDelta HKU_API Milliseconds(int64_t milliseconds) {
HKU_CHECK(milliseconds >= TimeDelta::minTicks() / 1000LL && milliseconds <= TimeDelta::maxTicks() / 1000LL, HKU_CHECK(milliseconds >= TimeDelta::minTicks() / 1000LL &&
milliseconds <= TimeDelta::maxTicks() / 1000LL,
"Out of total range!"); "Out of total range!");
return TimeDelta::fromTicks(milliseconds * 1000LL); return TimeDelta::fromTicks(milliseconds * 1000LL);
} }

View File

@ -802,7 +802,7 @@ void IndicatorImp::execute_mod() {
if (m_right->get(i - diff, r) == 0.0) { if (m_right->get(i - diff, r) == 0.0) {
_set(Null<price_t>(), i, r); _set(Null<price_t>(), i, r);
} else { } else {
_set(int64(m_left->get(i, r)) % int64(m_right->get(i - diff, r)), i, r); _set(int64_t(m_left->get(i, r)) % int64_t(m_right->get(i - diff, r)), i, r);
} }
} }
} }
@ -812,7 +812,7 @@ void IndicatorImp::execute_mod() {
if (m_right->get(i, r) == 0.0) { if (m_right->get(i, r) == 0.0) {
_set(Null<price_t>(), i, r); _set(Null<price_t>(), i, r);
} else { } else {
_set(int64(m_left->get(i - diff, r)) % int64(m_right->get(i, r)), i, r); _set(int64_t(m_left->get(i - diff, r)) % int64_t(m_right->get(i, r)), i, r);
} }
} }
} }

View File

@ -31,13 +31,13 @@ void save(Archive& ar, const hku::KQuery& query, unsigned int version) {
ar& BOOST_SERIALIZATION_NVP(recoverType); ar& BOOST_SERIALIZATION_NVP(recoverType);
if (query.queryType() == hku::KQuery::INDEX) { if (query.queryType() == hku::KQuery::INDEX) {
hku::int64 start = query.start(); hku::int64_t start = query.start();
hku::int64 end = query.end(); hku::int64_t end = query.end();
ar& BOOST_SERIALIZATION_NVP(start); ar& BOOST_SERIALIZATION_NVP(start);
ar& BOOST_SERIALIZATION_NVP(end); ar& BOOST_SERIALIZATION_NVP(end);
} else if (query.queryType() == hku::KQuery::DATE) { } else if (query.queryType() == hku::KQuery::DATE) {
hku::uint64 start = query.startDatetime().number(); hku::uint64_t start = query.startDatetime().number();
hku::uint64 end = query.endDatetime().number(); hku::uint64_t end = query.endDatetime().number();
ar& BOOST_SERIALIZATION_NVP(start); ar& BOOST_SERIALIZATION_NVP(start);
ar& BOOST_SERIALIZATION_NVP(end); ar& BOOST_SERIALIZATION_NVP(end);
} else { } else {
@ -57,12 +57,12 @@ void load(Archive& ar, hku::KQuery& query, unsigned int version) {
hku::KQuery::RecoverType enum_recover = hku::KQuery::getRecoverTypeEnum(recoverType); hku::KQuery::RecoverType enum_recover = hku::KQuery::getRecoverTypeEnum(recoverType);
if (enum_query == hku::KQuery::INDEX) { if (enum_query == hku::KQuery::INDEX) {
hku::int64 start, end; hku::int64_t start, end;
ar& BOOST_SERIALIZATION_NVP(start); ar& BOOST_SERIALIZATION_NVP(start);
ar& BOOST_SERIALIZATION_NVP(end); ar& BOOST_SERIALIZATION_NVP(end);
query = hku::KQuery(start, end, enmu_ktype, enum_recover); query = hku::KQuery(start, end, enmu_ktype, enum_recover);
} else if (enum_query == hku::KQuery::DATE) { } else if (enum_query == hku::KQuery::DATE) {
hku::uint64 start, end; hku::uint64_t start, end;
ar& BOOST_SERIALIZATION_NVP(start); ar& BOOST_SERIALIZATION_NVP(start);
ar& BOOST_SERIALIZATION_NVP(end); ar& BOOST_SERIALIZATION_NVP(end);
query = query =

View File

@ -21,7 +21,7 @@ namespace boost {
namespace serialization { namespace serialization {
template <class Archive> template <class Archive>
void save(Archive& ar, const hku::KRecord& record, unsigned int version) { void save(Archive& ar, const hku::KRecord& record, unsigned int version) {
hku::uint64 datetime = record.datetime.number(); hku::uint64_t datetime = record.datetime.number();
ar& BOOST_SERIALIZATION_NVP(datetime); ar& BOOST_SERIALIZATION_NVP(datetime);
ar& make_nvp("openPrice", record.openPrice); ar& make_nvp("openPrice", record.openPrice);
ar& make_nvp("highPrice", record.highPrice); ar& make_nvp("highPrice", record.highPrice);
@ -33,7 +33,7 @@ void save(Archive& ar, const hku::KRecord& record, unsigned int version) {
template <class Archive> template <class Archive>
void load(Archive& ar, hku::KRecord& record, unsigned int version) { void load(Archive& ar, hku::KRecord& record, unsigned int version) {
hku::uint64 datetime; hku::uint64_t datetime;
ar& BOOST_SERIALIZATION_NVP(datetime); ar& BOOST_SERIALIZATION_NVP(datetime);
record.datetime = hku::Datetime(datetime); record.datetime = hku::Datetime(datetime);
ar& make_nvp("openPrice", record.openPrice); ar& make_nvp("openPrice", record.openPrice);

View File

@ -27,7 +27,7 @@ void save(Archive& ar, const hku::MarketInfo& record, unsigned int version) {
hku::string name = record.name(); hku::string name = record.name();
hku::string description = record.description(); hku::string description = record.description();
hku::string code = record.code(); hku::string code = record.code();
hku::uint64 lastDate = record.lastDate().number(); hku::uint64_t lastDate = record.lastDate().number();
ar& BOOST_SERIALIZATION_NVP(market); ar& BOOST_SERIALIZATION_NVP(market);
ar& BOOST_SERIALIZATION_NVP(name); ar& BOOST_SERIALIZATION_NVP(name);
ar& BOOST_SERIALIZATION_NVP(description); ar& BOOST_SERIALIZATION_NVP(description);
@ -38,7 +38,7 @@ void save(Archive& ar, const hku::MarketInfo& record, unsigned int version) {
template <class Archive> template <class Archive>
void load(Archive& ar, hku::MarketInfo& record, unsigned int version) { void load(Archive& ar, hku::MarketInfo& record, unsigned int version) {
hku::string market, name, description, code; hku::string market, name, description, code;
hku::uint64 lastDate; hku::uint64_t lastDate;
ar& BOOST_SERIALIZATION_NVP(market); ar& BOOST_SERIALIZATION_NVP(market);
ar& BOOST_SERIALIZATION_NVP(name); ar& BOOST_SERIALIZATION_NVP(name);
ar& BOOST_SERIALIZATION_NVP(description); ar& BOOST_SERIALIZATION_NVP(description);

View File

@ -22,7 +22,7 @@ namespace serialization {
template <class Archive> template <class Archive>
void save(Archive& ar, const hku::StockTypeInfo& record, unsigned int version) { void save(Archive& ar, const hku::StockTypeInfo& record, unsigned int version) {
hku::uint32 type = record.type(); hku::uint32_t type = record.type();
hku::string description = record.description(); hku::string description = record.description();
hku::price_t tick = record.tick(); hku::price_t tick = record.tick();
hku::price_t tickValue = record.tickValue(); hku::price_t tickValue = record.tickValue();
@ -40,7 +40,7 @@ void save(Archive& ar, const hku::StockTypeInfo& record, unsigned int version) {
template <class Archive> template <class Archive>
void load(Archive& ar, hku::StockTypeInfo& record, unsigned int version) { void load(Archive& ar, hku::StockTypeInfo& record, unsigned int version) {
hku::uint32 type; hku::uint32_t type;
hku::string description; hku::string description;
hku::price_t tick, tickValue; hku::price_t tick, tickValue;
int precision; int precision;

View File

@ -19,9 +19,9 @@
namespace boost { namespace boost {
namespace serialization { namespace serialization {
template<class Archive> template <class Archive>
void save(Archive & ar, const hku::StockWeight& record, unsigned int version) { void save(Archive& ar, const hku::StockWeight& record, unsigned int version) {
hku::uint64 datetime = record.datetime().number(); hku::uint64_t datetime = record.datetime().number();
hku::price_t countAsGift = record.countAsGift(); hku::price_t countAsGift = record.countAsGift();
hku::price_t countForSell = record.countForSell(); hku::price_t countForSell = record.countForSell();
hku::price_t priceForSell = record.priceForSell(); hku::price_t priceForSell = record.priceForSell();
@ -29,34 +29,34 @@ void save(Archive & ar, const hku::StockWeight& record, unsigned int version) {
hku::price_t increasement = record.increasement(); hku::price_t increasement = record.increasement();
hku::price_t totalCount = record.totalCount(); hku::price_t totalCount = record.totalCount();
hku::price_t freeCount = record.freeCount(); hku::price_t freeCount = record.freeCount();
ar & BOOST_SERIALIZATION_NVP(datetime); ar& BOOST_SERIALIZATION_NVP(datetime);
ar & BOOST_SERIALIZATION_NVP(countAsGift); ar& BOOST_SERIALIZATION_NVP(countAsGift);
ar & BOOST_SERIALIZATION_NVP(countForSell); ar& BOOST_SERIALIZATION_NVP(countForSell);
ar & BOOST_SERIALIZATION_NVP(priceForSell); ar& BOOST_SERIALIZATION_NVP(priceForSell);
ar & BOOST_SERIALIZATION_NVP(bonus); ar& BOOST_SERIALIZATION_NVP(bonus);
ar & BOOST_SERIALIZATION_NVP(increasement); ar& BOOST_SERIALIZATION_NVP(increasement);
ar & BOOST_SERIALIZATION_NVP(totalCount); ar& BOOST_SERIALIZATION_NVP(totalCount);
ar & BOOST_SERIALIZATION_NVP(freeCount); ar& BOOST_SERIALIZATION_NVP(freeCount);
} }
template<class Archive> template <class Archive>
void load(Archive & ar, hku::StockWeight& record, unsigned int version) { void load(Archive& ar, hku::StockWeight& record, unsigned int version) {
hku::uint64 datetime; hku::uint64_t datetime;
hku::price_t countAsGift, countForSell, priceForSell, bonus; hku::price_t countAsGift, countForSell, priceForSell, bonus;
hku::price_t increasement, totalCount, freeCount; hku::price_t increasement, totalCount, freeCount;
ar & BOOST_SERIALIZATION_NVP(datetime); ar& BOOST_SERIALIZATION_NVP(datetime);
ar & BOOST_SERIALIZATION_NVP(countAsGift); ar& BOOST_SERIALIZATION_NVP(countAsGift);
ar & BOOST_SERIALIZATION_NVP(countForSell); ar& BOOST_SERIALIZATION_NVP(countForSell);
ar & BOOST_SERIALIZATION_NVP(priceForSell); ar& BOOST_SERIALIZATION_NVP(priceForSell);
ar & BOOST_SERIALIZATION_NVP(bonus); ar& BOOST_SERIALIZATION_NVP(bonus);
ar & BOOST_SERIALIZATION_NVP(increasement); ar& BOOST_SERIALIZATION_NVP(increasement);
ar & BOOST_SERIALIZATION_NVP(totalCount); ar& BOOST_SERIALIZATION_NVP(totalCount);
ar & BOOST_SERIALIZATION_NVP(freeCount); ar& BOOST_SERIALIZATION_NVP(freeCount);
record = hku::StockWeight(hku::Datetime(datetime), countAsGift, record = hku::StockWeight(hku::Datetime(datetime), countAsGift, countForSell, priceForSell,
countForSell, priceForSell, bonus, increasement, bonus, increasement, totalCount, freeCount);
totalCount, freeCount);
} }
}} /* namespace boost::serailization */ } // namespace serialization
} // namespace boost
BOOST_SERIALIZATION_SPLIT_FREE(hku::StockWeight) BOOST_SERIALIZATION_SPLIT_FREE(hku::StockWeight)

View File

@ -19,23 +19,24 @@
namespace boost { namespace boost {
namespace serialization { namespace serialization {
template<class Archive> template <class Archive>
void save(Archive & ar, const hku::TimeLineRecord& record, unsigned int version) { void save(Archive& ar, const hku::TimeLineRecord& record, unsigned int version) {
hku::uint64 datetime = record.datetime.number(); hku::uint64_t datetime = record.datetime.number();
ar & BOOST_SERIALIZATION_NVP(datetime); ar& BOOST_SERIALIZATION_NVP(datetime);
ar & make_nvp("price", record.price); ar& make_nvp("price", record.price);
ar & make_nvp("vol", record.vol); ar& make_nvp("vol", record.vol);
} }
template<class Archive> template <class Archive>
void load(Archive & ar, hku::TimeLineRecord& record, unsigned int version) { void load(Archive& ar, hku::TimeLineRecord& record, unsigned int version) {
hku::uint64 datetime; hku::uint64_t datetime;
ar & BOOST_SERIALIZATION_NVP(datetime); ar& BOOST_SERIALIZATION_NVP(datetime);
record.datetime = hku::Datetime(datetime); record.datetime = hku::Datetime(datetime);
ar & make_nvp("price", record.price); ar& make_nvp("price", record.price);
ar & make_nvp("vol", record.vol); ar& make_nvp("vol", record.vol);
} }
}} /* namespace boost::serailization */ } // namespace serialization
} // namespace boost
BOOST_SERIALIZATION_SPLIT_FREE(hku::TimeLineRecord) BOOST_SERIALIZATION_SPLIT_FREE(hku::TimeLineRecord)

View File

@ -19,25 +19,26 @@
namespace boost { namespace boost {
namespace serialization { namespace serialization {
template<class Archive> template <class Archive>
void save(Archive & ar, const hku::TransRecord& record, unsigned int version) { void save(Archive& ar, const hku::TransRecord& record, unsigned int version) {
hku::uint64 datetime = record.datetime.number(); hku::uint64_t datetime = record.datetime.number();
ar & BOOST_SERIALIZATION_NVP(datetime); ar& BOOST_SERIALIZATION_NVP(datetime);
ar & make_nvp("price", record.price); ar& make_nvp("price", record.price);
ar & make_nvp("vol", record.vol); ar& make_nvp("vol", record.vol);
ar & make_nvp("direct", record.direct); ar& make_nvp("direct", record.direct);
} }
template<class Archive> template <class Archive>
void load(Archive & ar, hku::TransRecord& record, unsigned int version) { void load(Archive& ar, hku::TransRecord& record, unsigned int version) {
hku::uint64 datetime; hku::uint64_t datetime;
ar & BOOST_SERIALIZATION_NVP(datetime); ar& BOOST_SERIALIZATION_NVP(datetime);
record.datetime = hku::Datetime(datetime); record.datetime = hku::Datetime(datetime);
ar & make_nvp("price", record.price); ar& make_nvp("price", record.price);
ar & make_nvp("vol", record.vol); ar& make_nvp("vol", record.vol);
ar & make_nvp("direct", record.direct); ar& make_nvp("direct", record.direct);
} }
}} /* namespace boost::serailization */ } // namespace serialization
} // namespace boost
BOOST_SERIALIZATION_SPLIT_FREE(hku::TransRecord) BOOST_SERIALIZATION_SPLIT_FREE(hku::TransRecord)

View File

@ -46,7 +46,7 @@ public:
friend class boost::serialization::access; friend class boost::serialization::access;
template <class Archive> template <class Archive>
void save(Archive& ar, const unsigned int version) const { void save(Archive& ar, const unsigned int version) const {
uint64 datetime_num = datetime.number(); uint64_t datetime_num = datetime.number();
ar& boost::serialization::make_nvp("datetime", datetime_num); ar& boost::serialization::make_nvp("datetime", datetime_num);
ar& BOOST_SERIALIZATION_NVP(number); ar& BOOST_SERIALIZATION_NVP(number);
ar& BOOST_SERIALIZATION_NVP(price); ar& BOOST_SERIALIZATION_NVP(price);
@ -54,7 +54,7 @@ public:
template <class Archive> template <class Archive>
void load(Archive& ar, const unsigned int version) { void load(Archive& ar, const unsigned int version) {
uint64 datetime_num; uint64_t datetime_num;
ar& boost::serialization::make_nvp("datetime", datetime_num); ar& boost::serialization::make_nvp("datetime", datetime_num);
datetime = Datetime(datetime_num); datetime = Datetime(datetime_num);
ar& BOOST_SERIALIZATION_NVP(number); ar& BOOST_SERIALIZATION_NVP(number);

View File

@ -38,7 +38,7 @@ private:
template <class Archive> template <class Archive>
void save(Archive& ar, const unsigned int version) const { void save(Archive& ar, const unsigned int version) const {
namespace bs = boost::serialization; namespace bs = boost::serialization;
hku::uint64 date_number = datetime.number(); hku::uint64_t date_number = datetime.number();
ar& bs::make_nvp("datetime", date_number); ar& bs::make_nvp("datetime", date_number);
ar& BOOST_SERIALIZATION_NVP(value); ar& BOOST_SERIALIZATION_NVP(value);
} }
@ -46,7 +46,7 @@ private:
template <class Archive> template <class Archive>
void load(Archive& ar, const unsigned int version) { void load(Archive& ar, const unsigned int version) {
namespace bs = boost::serialization; namespace bs = boost::serialization;
hku::uint64 date_number; hku::uint64_t date_number;
ar& bs::make_nvp("datetime", date_number); ar& bs::make_nvp("datetime", date_number);
datetime = Datetime(date_number); datetime = Datetime(date_number);
ar& BOOST_SERIALIZATION_NVP(value); ar& BOOST_SERIALIZATION_NVP(value);

View File

@ -54,8 +54,8 @@ private:
void save(Archive& ar, const unsigned int version) const { void save(Archive& ar, const unsigned int version) const {
namespace bs = boost::serialization; namespace bs = boost::serialization;
ar& BOOST_SERIALIZATION_NVP(stock); ar& BOOST_SERIALIZATION_NVP(stock);
uint64 take = takeDatetime.number(); uint64_t take = takeDatetime.number();
uint64 clean = cleanDatetime.number(); uint64_t clean = cleanDatetime.number();
ar& bs::make_nvp("takeDatetime", take); ar& bs::make_nvp("takeDatetime", take);
ar& bs::make_nvp("cleanDatetime", clean); ar& bs::make_nvp("cleanDatetime", clean);
ar& BOOST_SERIALIZATION_NVP(number); ar& BOOST_SERIALIZATION_NVP(number);
@ -72,7 +72,7 @@ private:
void load(Archive& ar, const unsigned int version) { void load(Archive& ar, const unsigned int version) {
namespace bs = boost::serialization; namespace bs = boost::serialization;
ar& BOOST_SERIALIZATION_NVP(stock); ar& BOOST_SERIALIZATION_NVP(stock);
uint64 take, clean; uint64_t take, clean;
ar& bs::make_nvp("takeDatetime", take); ar& bs::make_nvp("takeDatetime", take);
ar& bs::make_nvp("cleanDatetime", clean); ar& bs::make_nvp("cleanDatetime", clean);
takeDatetime = Datetime(take); takeDatetime = Datetime(take);

View File

@ -1438,12 +1438,12 @@ FundsRecord TradeManager ::getFunds(const Datetime& indatetime, KQuery::KType kt
price_t checkout_cash = 0.0; price_t checkout_cash = 0.0;
price_t checkin_stock = 0.0; price_t checkin_stock = 0.0;
price_t checkout_stock = 0.0; price_t checkout_stock = 0.0;
map<uint64, Stock_Number> stock_map; map<uint64_t, Stock_Number> stock_map;
map<uint64, Stock_Number> short_stock_map; map<uint64_t, Stock_Number> short_stock_map;
map<uint64, Stock_Number>::iterator stock_iter; map<uint64_t, Stock_Number>::iterator stock_iter;
map<uint64, Stock_Number>::iterator short_stock_iter; map<uint64_t, Stock_Number>::iterator short_stock_iter;
map<uint64, BorrowRecord> bor_stock_map; map<uint64_t, BorrowRecord> bor_stock_map;
map<uint64, BorrowRecord>::iterator bor_stock_iter; map<uint64_t, BorrowRecord>::iterator bor_stock_iter;
TradeRecordList::const_iterator iter = m_trade_list.begin(); TradeRecordList::const_iterator iter = m_trade_list.begin();
for (; iter != m_trade_list.end(); ++iter) { for (; iter != m_trade_list.end(); ++iter) {

View File

@ -535,12 +535,12 @@ private:
list<LoanRecord> m_loan_list; //当前融资情况 list<LoanRecord> m_loan_list; //当前融资情况
typedef map<uint64, BorrowRecord> borrow_stock_map_type; typedef map<uint64_t, BorrowRecord> borrow_stock_map_type;
borrow_stock_map_type m_borrow_stock; //当前借入的股票及其数量 borrow_stock_map_type m_borrow_stock; //当前借入的股票及其数量
TradeRecordList m_trade_list; //交易记录 TradeRecordList m_trade_list; //交易记录
typedef map<uint64, PositionRecord> position_map_type; typedef map<uint64_t, PositionRecord> position_map_type;
position_map_type m_position; //当前持仓交易对象的持仓记录 ["sh000001"-> ] position_map_type m_position; //当前持仓交易对象的持仓记录 ["sh000001"-> ]
PositionRecordList m_position_history; //持仓历史记录 PositionRecordList m_position_history; //持仓历史记录
position_map_type m_short_position; //空头仓位记录 position_map_type m_short_position; //空头仓位记录

View File

@ -87,7 +87,7 @@ private:
void save(Archive& ar, const unsigned int version) const { void save(Archive& ar, const unsigned int version) const {
namespace bs = boost::serialization; namespace bs = boost::serialization;
ar& BOOST_SERIALIZATION_NVP(stock); ar& BOOST_SERIALIZATION_NVP(stock);
hku::uint64 date_number = datetime.number(); hku::uint64_t date_number = datetime.number();
ar& bs::make_nvp("datetime", date_number); ar& bs::make_nvp("datetime", date_number);
string business_name = getBusinessName(business); string business_name = getBusinessName(business);
ar& bs::make_nvp<string>("business", business_name); ar& bs::make_nvp<string>("business", business_name);
@ -106,7 +106,7 @@ private:
void load(Archive& ar, const unsigned int version) { void load(Archive& ar, const unsigned int version) {
namespace bs = boost::serialization; namespace bs = boost::serialization;
ar& BOOST_SERIALIZATION_NVP(stock); ar& BOOST_SERIALIZATION_NVP(stock);
hku::uint64 date_number; hku::uint64_t date_number;
ar& bs::make_nvp("datetime", date_number); ar& bs::make_nvp("datetime", date_number);
datetime = Datetime(date_number); datetime = Datetime(date_number);
string business_name; string business_name;

View File

@ -47,7 +47,7 @@ private:
ar& BOOST_SERIALIZATION_NVP(valid); ar& BOOST_SERIALIZATION_NVP(valid);
string business_name(getBusinessName(business)); string business_name(getBusinessName(business));
ar& bs::make_nvp<string>("business", business_name); ar& bs::make_nvp<string>("business", business_name);
uint64 datetime_num = datetime.number(); uint64_t datetime_num = datetime.number();
ar& bs::make_nvp("datetime", datetime_num); ar& bs::make_nvp("datetime", datetime_num);
ar& BOOST_SERIALIZATION_NVP(stoploss); ar& BOOST_SERIALIZATION_NVP(stoploss);
ar& BOOST_SERIALIZATION_NVP(goal); ar& BOOST_SERIALIZATION_NVP(goal);
@ -65,7 +65,7 @@ private:
string business_name; string business_name;
ar& bs::make_nvp<string>("business", business_name); ar& bs::make_nvp<string>("business", business_name);
business = getBusinessEnum(business_name); business = getBusinessEnum(business_name);
uint64 datetime_num; uint64_t datetime_num;
ar& bs::make_nvp("datetime", datetime_num); ar& bs::make_nvp("datetime", datetime_num);
datetime = Datetime(datetime_num); datetime = Datetime(datetime_num);
ar& BOOST_SERIALIZATION_NVP(stoploss); ar& BOOST_SERIALIZATION_NVP(stoploss);

View File

@ -118,13 +118,13 @@ public:
virtual bool sub_moveNext() = 0; ///< 子类接口 @see moveNext virtual bool sub_moveNext() = 0; ///< 子类接口 @see moveNext
virtual void sub_bindNull(int idx) = 0; ///< 子类接口 @see bind virtual void sub_bindNull(int idx) = 0; ///< 子类接口 @see bind
virtual void sub_bindInt(int idx, int64 value) = 0; ///< 子类接口 @see bind virtual void sub_bindInt(int idx, int64_t value) = 0; ///< 子类接口 @see bind
virtual void sub_bindDouble(int idx, double item) = 0; ///< 子类接口 @see bind virtual void sub_bindDouble(int idx, double item) = 0; ///< 子类接口 @see bind
virtual void sub_bindText(int idx, const string& item) = 0; ///< 子类接口 @see bind virtual void sub_bindText(int idx, const string& item) = 0; ///< 子类接口 @see bind
virtual void sub_bindBlob(int idx, const string& item) = 0; ///< 子类接口 @see bind virtual void sub_bindBlob(int idx, const string& item) = 0; ///< 子类接口 @see bind
virtual int sub_getNumColumns() const = 0; ///< 子类接口 @see getNumColumns virtual int sub_getNumColumns() const = 0; ///< 子类接口 @see getNumColumns
virtual void sub_getColumnAsInt64(int idx, int64&) = 0; ///< 子类接口 @see getColumn virtual void sub_getColumnAsInt64(int idx, int64_t&) = 0; ///< 子类接口 @see getColumn
virtual void sub_getColumnAsDouble(int idx, double&) = 0; ///< 子类接口 @see getColumn virtual void sub_getColumnAsDouble(int idx, double&) = 0; ///< 子类接口 @see getColumn
virtual void sub_getColumnAsText(int idx, string&) = 0; ///< 子类接口 @see getColumn virtual void sub_getColumnAsText(int idx, string&) = 0; ///< 子类接口 @see getColumn
virtual void sub_getColumnAsBlob(int idx, string&) = 0; ///< 子类接口 @see getColumn virtual void sub_getColumnAsBlob(int idx, string&) = 0; ///< 子类接口 @see getColumn
@ -233,7 +233,7 @@ template <typename T>
typename std::enable_if<std::numeric_limits<T>::is_integer>::type SQLStatementBase::getColumn( typename std::enable_if<std::numeric_limits<T>::is_integer>::type SQLStatementBase::getColumn(
int idx, T& item) { int idx, T& item) {
HKU_CHECK(isValid(), "Invalid statement!"); HKU_CHECK(isValid(), "Invalid statement!");
int64 temp; int64_t temp;
sub_getColumnAsInt64(idx, temp); sub_getColumnAsInt64(idx, temp);
item = (T)temp; item = (T)temp;
} }

File diff suppressed because it is too large Load Diff

View File

@ -101,15 +101,15 @@ void MySQLStatement::_bindResult() {
m_result_bind[idx].length = &m_result_length[idx]; m_result_bind[idx].length = &m_result_length[idx];
if (field->type == MYSQL_TYPE_LONGLONG) { if (field->type == MYSQL_TYPE_LONGLONG) {
int64 item = 0; int64_t item = 0;
m_result_buffer.push_back(item); m_result_buffer.push_back(item);
auto& buf = m_result_buffer.back(); auto& buf = m_result_buffer.back();
m_result_bind[idx].buffer = boost::any_cast<int64>(&buf); m_result_bind[idx].buffer = boost::any_cast<int64_t>(&buf);
} else if (field->type == MYSQL_TYPE_LONG) { } else if (field->type == MYSQL_TYPE_LONG) {
int32 item = 0; int32_t item = 0;
m_result_buffer.push_back(item); m_result_buffer.push_back(item);
auto& buf = m_result_buffer.back(); auto& buf = m_result_buffer.back();
m_result_bind[idx].buffer = boost::any_cast<int32>(&buf); m_result_bind[idx].buffer = boost::any_cast<int32_t>(&buf);
} else if (field->type == MYSQL_TYPE_DOUBLE) { } else if (field->type == MYSQL_TYPE_DOUBLE) {
double item = 0; double item = 0;
m_result_buffer.push_back(item); m_result_buffer.push_back(item);
@ -129,10 +129,10 @@ void MySQLStatement::_bindResult() {
vector<char>* p = boost::any_cast<vector<char>>(&buf); vector<char>* p = boost::any_cast<vector<char>>(&buf);
m_result_bind[idx].buffer = p->data(); m_result_bind[idx].buffer = p->data();
} else if (field->type == MYSQL_TYPE_TINY) { } else if (field->type == MYSQL_TYPE_TINY) {
int8 item = 0; int8_t item = 0;
m_result_buffer.push_back(item); m_result_buffer.push_back(item);
auto& buf = m_result_buffer.back(); auto& buf = m_result_buffer.back();
m_result_bind[idx].buffer = boost::any_cast<int8>(&buf); m_result_bind[idx].buffer = boost::any_cast<int8_t>(&buf);
} else if (field->type == MYSQL_TYPE_SHORT) { } else if (field->type == MYSQL_TYPE_SHORT) {
short item = 0; short item = 0;
m_result_buffer.push_back(item); m_result_buffer.push_back(item);
@ -173,13 +173,13 @@ void MySQLStatement::sub_bindNull(int idx) {
m_param_bind[idx].buffer_type = MYSQL_TYPE_NULL; m_param_bind[idx].buffer_type = MYSQL_TYPE_NULL;
} }
void MySQLStatement::sub_bindInt(int idx, int64 value) { void MySQLStatement::sub_bindInt(int idx, int64_t value) {
HKU_CHECK(idx < m_param_bind.size(), "idx out of range! idx: {}, total: {}", idx, HKU_CHECK(idx < m_param_bind.size(), "idx out of range! idx: {}, total: {}", idx,
m_param_bind.size()); m_param_bind.size());
m_param_buffer.push_back(value); m_param_buffer.push_back(value);
auto& buf = m_param_buffer.back(); auto& buf = m_param_buffer.back();
m_param_bind[idx].buffer_type = MYSQL_TYPE_LONGLONG; m_param_bind[idx].buffer_type = MYSQL_TYPE_LONGLONG;
m_param_bind[idx].buffer = boost::any_cast<int64>(&buf); m_param_bind[idx].buffer = boost::any_cast<int64_t>(&buf);
} }
void MySQLStatement::sub_bindDouble(int idx, double item) { void MySQLStatement::sub_bindDouble(int idx, double item) {
@ -219,11 +219,11 @@ int MySQLStatement::sub_getNumColumns() const {
return mysql_stmt_field_count(m_stmt); return mysql_stmt_field_count(m_stmt);
} }
void MySQLStatement::sub_getColumnAsInt64(int idx, int64& item) { void MySQLStatement::sub_getColumnAsInt64(int idx, int64_t& item) {
HKU_CHECK(idx < m_result_buffer.size(), "idx out of range! idx: {}, total: {}", HKU_CHECK(idx < m_result_buffer.size(), "idx out of range! idx: {}, total: {}",
m_result_buffer.size()); m_result_buffer.size());
HKU_CHECK(m_result_error[idx] == 0, "Error occurred in sub_getColumnAsInt64! idx: {}", idx); HKU_CHECK(m_result_error[idx] == 0, "Error occurred in sub_getColumnAsint64_t! idx: {}", idx);
if (m_result_is_null[idx]) { if (m_result_is_null[idx]) {
item = 0; item = 0;
@ -231,10 +231,10 @@ void MySQLStatement::sub_getColumnAsInt64(int idx, int64& item) {
} }
try { try {
item = boost::any_cast<int64>(m_result_buffer[idx]); item = boost::any_cast<int64_t>(m_result_buffer[idx]);
} catch (...) { } catch (...) {
try { try {
item = boost::any_cast<int32>(m_result_buffer[idx]); item = boost::any_cast<int32_t>(m_result_buffer[idx]);
} catch (...) { } catch (...) {
HKU_THROW("Field type mismatch! idx: {}", idx); HKU_THROW("Field type mismatch! idx: {}", idx);
} }

View File

@ -37,13 +37,13 @@ public:
virtual bool sub_moveNext() override; virtual bool sub_moveNext() override;
virtual void sub_bindNull(int idx) override; virtual void sub_bindNull(int idx) override;
virtual void sub_bindInt(int idx, int64 value) override; virtual void sub_bindInt(int idx, int64_t value) override;
virtual void sub_bindDouble(int idx, double item) override; virtual void sub_bindDouble(int idx, double item) override;
virtual void sub_bindText(int idx, const string& item) override; virtual void sub_bindText(int idx, const string& item) override;
virtual void sub_bindBlob(int idx, const string& item) override; virtual void sub_bindBlob(int idx, const string& item) override;
virtual int sub_getNumColumns() const override; virtual int sub_getNumColumns() const override;
virtual void sub_getColumnAsInt64(int idx, int64& item) override; virtual void sub_getColumnAsInt64(int idx, int64_t& item) override;
virtual void sub_getColumnAsDouble(int idx, double& item) override; virtual void sub_getColumnAsDouble(int idx, double& item) override;
virtual void sub_getColumnAsText(int idx, string& item) override; virtual void sub_getColumnAsText(int idx, string& item) override;
virtual void sub_getColumnAsBlob(int idx, string& item) override; virtual void sub_getColumnAsBlob(int idx, string& item) override;

View File

@ -87,7 +87,7 @@ void SQLiteStatement::sub_bindNull(int idx) {
HKU_CHECK(status == SQLITE_OK, sqlite3_errmsg(m_db)); HKU_CHECK(status == SQLITE_OK, sqlite3_errmsg(m_db));
} }
void SQLiteStatement::sub_bindInt(int idx, int64 value) { void SQLiteStatement::sub_bindInt(int idx, int64_t value) {
_reset(); _reset();
int status = sqlite3_bind_int64(m_stmt, idx + 1, value); int status = sqlite3_bind_int64(m_stmt, idx + 1, value);
HKU_CHECK(status == SQLITE_OK, sqlite3_errmsg(m_db)); HKU_CHECK(status == SQLITE_OK, sqlite3_errmsg(m_db));
@ -111,7 +111,7 @@ void SQLiteStatement::sub_bindBlob(int idx, const string& item) {
HKU_CHECK(status == SQLITE_OK, sqlite3_errmsg(m_db)); HKU_CHECK(status == SQLITE_OK, sqlite3_errmsg(m_db));
} }
void SQLiteStatement::sub_getColumnAsInt64(int idx, int64& item) { void SQLiteStatement::sub_getColumnAsInt64(int idx, int64_t& item) {
item = sqlite3_column_int64(m_stmt, idx); item = sqlite3_column_int64(m_stmt, idx);
} }

View File

@ -38,13 +38,13 @@ public:
virtual bool sub_moveNext() override; virtual bool sub_moveNext() override;
virtual void sub_bindNull(int idx) override; virtual void sub_bindNull(int idx) override;
virtual void sub_bindInt(int idx, int64 value) override; virtual void sub_bindInt(int idx, int64_t value) override;
virtual void sub_bindDouble(int idx, double item) override; virtual void sub_bindDouble(int idx, double item) override;
virtual void sub_bindText(int idx, const string& item) override; virtual void sub_bindText(int idx, const string& item) override;
virtual void sub_bindBlob(int idx, const string& item) override; virtual void sub_bindBlob(int idx, const string& item) override;
virtual int sub_getNumColumns() const override; virtual int sub_getNumColumns() const override;
virtual void sub_getColumnAsInt64(int idx, int64& item) override; virtual void sub_getColumnAsInt64(int idx, int64_t& item) override;
virtual void sub_getColumnAsDouble(int idx, double& item) override; virtual void sub_getColumnAsDouble(int idx, double& item) override;
virtual void sub_getColumnAsText(int idx, string& item) override; virtual void sub_getColumnAsText(int idx, string& item) override;
virtual void sub_getColumnAsBlob(int idx, string& item) override; virtual void sub_getColumnAsBlob(int idx, string& item) override;

View File

@ -165,7 +165,8 @@ TEST_CASE("test_getKData_by_index") {
CHECK_EQ(record, expect); CHECK_EQ(record, expect);
record = kdata[kdata.size() - 1]; record = kdata[kdata.size() - 1];
expect = KRecord(Datetime(201112060000), 2326.66, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078); expect =
KRecord(Datetime(201112060000), 2326.66, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078);
CHECK_EQ(record, expect); CHECK_EQ(record, expect);
/** @arg SH000001日线数据KQuery(total-1) */ /** @arg SH000001日线数据KQuery(total-1) */
@ -178,7 +179,8 @@ TEST_CASE("test_getKData_by_index") {
CHECK_EQ(kdata.endPos(), 5121); CHECK_EQ(kdata.endPos(), 5121);
CHECK_EQ(kdata.lastPos(), 5120); CHECK_EQ(kdata.lastPos(), 5120);
record = kdata[0]; record = kdata[0];
expect = KRecord(Datetime(201112060000), 2326.66, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078); expect =
KRecord(Datetime(201112060000), 2326.66, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078);
CHECK_EQ(record, expect); CHECK_EQ(record, expect);
/** @arg SH000001日线数据KQuery(total) */ /** @arg SH000001日线数据KQuery(total) */
@ -242,7 +244,8 @@ TEST_CASE("test_getKData_by_index") {
CHECK_EQ(kdata.endPos(), total); CHECK_EQ(kdata.endPos(), total);
CHECK_EQ(kdata.lastPos(), total - 1); CHECK_EQ(kdata.lastPos(), total - 1);
record = kdata[0]; record = kdata[0];
expect = KRecord(Datetime(201112060000), 2326.66, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078); expect =
KRecord(Datetime(201112060000), 2326.66, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078);
CHECK_EQ(record, expect); CHECK_EQ(record, expect);
/** @arg SH000001日线数据, KQuery(0,0) */ /** @arg SH000001日线数据, KQuery(0,0) */
@ -283,12 +286,13 @@ TEST_CASE("test_getKData_by_index") {
CHECK_EQ(kdata.endPos(), total); CHECK_EQ(kdata.endPos(), total);
CHECK_EQ(kdata.lastPos(), total - 1); CHECK_EQ(kdata.lastPos(), total - 1);
record = kdata[0]; record = kdata[0];
expect = KRecord(Datetime(201112060000), 2326.66, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078); expect =
KRecord(Datetime(201112060000), 2326.66, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078);
CHECK_EQ(record, expect); CHECK_EQ(record, expect);
/** @arg SH000001日线数据KQuery(-total) */ /** @arg SH000001日线数据KQuery(-total) */
total = stock.getCount(); total = stock.getCount();
query = KQuery(-(int64)total); query = KQuery(-(int64_t)total);
kdata = stock.getKData(query); kdata = stock.getKData(query);
CHECK_EQ(kdata.size(), 5121); CHECK_EQ(kdata.size(), 5121);
CHECK_EQ(kdata.empty(), false); CHECK_EQ(kdata.empty(), false);
@ -300,12 +304,13 @@ TEST_CASE("test_getKData_by_index") {
CHECK_EQ(record, expect); CHECK_EQ(record, expect);
record = kdata[kdata.size() - 1]; record = kdata[kdata.size() - 1];
expect = KRecord(Datetime(201112060000), 2326.66, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078); expect =
KRecord(Datetime(201112060000), 2326.66, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078);
CHECK_EQ(record, expect); CHECK_EQ(record, expect);
/** @arg SH000001日线数据KQuery(-total-1) */ /** @arg SH000001日线数据KQuery(-total-1) */
total = stock.getCount(); total = stock.getCount();
query = KQuery(-1 - (int64)total); query = KQuery(-1 - (int64_t)total);
kdata = stock.getKData(query); kdata = stock.getKData(query);
CHECK_EQ(kdata.size(), 5121); CHECK_EQ(kdata.size(), 5121);
CHECK_EQ(kdata.empty(), false); CHECK_EQ(kdata.empty(), false);
@ -317,12 +322,13 @@ TEST_CASE("test_getKData_by_index") {
CHECK_EQ(record, expect); CHECK_EQ(record, expect);
record = kdata[kdata.size() - 1]; record = kdata[kdata.size() - 1];
expect = KRecord(Datetime(201112060000), 2326.66, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078); expect =
KRecord(Datetime(201112060000), 2326.66, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078);
CHECK_EQ(record, expect); CHECK_EQ(record, expect);
/** @arg SH000001日线数据KQuery(-total + 1) */ /** @arg SH000001日线数据KQuery(-total + 1) */
total = stock.getCount(); total = stock.getCount();
query = KQuery(1 - (int64)total); query = KQuery(1 - (int64_t)total);
kdata = stock.getKData(query); kdata = stock.getKData(query);
CHECK_EQ(kdata.size(), 5120); CHECK_EQ(kdata.size(), 5120);
CHECK_EQ(kdata.empty(), false); CHECK_EQ(kdata.empty(), false);
@ -334,7 +340,8 @@ TEST_CASE("test_getKData_by_index") {
CHECK_EQ(record, expect); CHECK_EQ(record, expect);
record = kdata[kdata.size() - 1]; record = kdata[kdata.size() - 1];
expect = KRecord(Datetime(201112060000), 2326.66, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078); expect =
KRecord(Datetime(201112060000), 2326.66, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078);
CHECK_EQ(record, expect); CHECK_EQ(record, expect);
/** @arg SH000001日线数据KQuery(-2, -1) */ /** @arg SH000001日线数据KQuery(-2, -1) */
@ -347,7 +354,8 @@ TEST_CASE("test_getKData_by_index") {
CHECK_EQ(kdata.endPos(), total - 1); CHECK_EQ(kdata.endPos(), total - 1);
CHECK_EQ(kdata.lastPos(), total - 2); CHECK_EQ(kdata.lastPos(), total - 2);
record = kdata[0]; record = kdata[0];
expect = KRecord(Datetime(201112050000), 2363.111, 2363.127, 2327.61, 2333.229, 4864121.6, 52214970); expect =
KRecord(Datetime(201112050000), 2363.111, 2363.127, 2327.61, 2333.229, 4864121.6, 52214970);
CHECK_EQ(record, expect); CHECK_EQ(record, expect);
/** @arg SH000001日线数据KQuery(-10, -2) */ /** @arg SH000001日线数据KQuery(-10, -2) */
@ -359,11 +367,13 @@ TEST_CASE("test_getKData_by_index") {
CHECK_EQ(kdata.endPos(), total - 2); CHECK_EQ(kdata.endPos(), total - 2);
CHECK_EQ(kdata.lastPos(), total - 2 - 1); CHECK_EQ(kdata.lastPos(), total - 2 - 1);
record = kdata[0]; record = kdata[0];
expect = KRecord(Datetime(201111230000), 2415.197, 2418.56, 2390.654, 2395.065, 5004336, 50547851); expect =
KRecord(Datetime(201111230000), 2415.197, 2418.56, 2390.654, 2395.065, 5004336, 50547851);
CHECK_EQ(record, expect); CHECK_EQ(record, expect);
record = kdata[kdata.size() - 1]; record = kdata[kdata.size() - 1];
expect = KRecord(Datetime(201112020000), 2374.899, 2378.299, 2344.846, 2360.664, 5732015.7, 59868846); expect =
KRecord(Datetime(201112020000), 2374.899, 2378.299, 2344.846, 2360.664, 5732015.7, 59868846);
CHECK_EQ(record, expect); CHECK_EQ(record, expect);
/** @arg SH000001日线数据KQuery(-1, 1) */ /** @arg SH000001日线数据KQuery(-1, 1) */
@ -376,7 +386,7 @@ TEST_CASE("test_getKData_by_index") {
CHECK_EQ(kdata.lastPos(), 0); CHECK_EQ(kdata.lastPos(), 0);
/** @arg SH000001日线数据KQuery(-total, 1) */ /** @arg SH000001日线数据KQuery(-total, 1) */
query = KQuery(-(int64)total, 1); query = KQuery(-(int64_t)total, 1);
kdata = stock.getKData(query); kdata = stock.getKData(query);
CHECK_EQ(kdata.size(), 1); CHECK_EQ(kdata.size(), 1);
CHECK_EQ(kdata.empty(), false); CHECK_EQ(kdata.empty(), false);
@ -388,7 +398,7 @@ TEST_CASE("test_getKData_by_index") {
CHECK_EQ(record, expect); CHECK_EQ(record, expect);
/** @arg SH000001日线数据KQuery(-total, 2) */ /** @arg SH000001日线数据KQuery(-total, 2) */
query = KQuery(-(int64)total, 2); query = KQuery(-(int64_t)total, 2);
kdata = stock.getKData(query); kdata = stock.getKData(query);
CHECK_EQ(kdata.size(), 2); CHECK_EQ(kdata.size(), 2);
CHECK_EQ(kdata.empty(), false); CHECK_EQ(kdata.empty(), false);
@ -403,7 +413,7 @@ TEST_CASE("test_getKData_by_index") {
CHECK_EQ(record.datetime, Datetime(199012200000)); CHECK_EQ(record.datetime, Datetime(199012200000));
/** @arg SH000001日线数据KQuery(0, -total) */ /** @arg SH000001日线数据KQuery(0, -total) */
query = KQuery(0, -(int64)total); query = KQuery(0, -(int64_t)total);
kdata = stock.getKData(query); kdata = stock.getKData(query);
CHECK_EQ(kdata.size(), 0); CHECK_EQ(kdata.size(), 0);
CHECK_EQ(kdata.empty(), true); CHECK_EQ(kdata.empty(), true);
@ -424,18 +434,20 @@ TEST_CASE("test_getKData_by_index") {
CHECK_EQ(record, expect); CHECK_EQ(record, expect);
record = kdata[kdata.size() - 1]; record = kdata[kdata.size() - 1];
expect = KRecord(Datetime(201112050000), 2363.111, 2363.127, 2327.61, 2333.229, 4864121.6, 52214970); expect =
KRecord(Datetime(201112050000), 2363.111, 2363.127, 2327.61, 2333.229, 4864121.6, 52214970);
CHECK_EQ(record, expect); CHECK_EQ(record, expect);
///============================== ///==============================
/// 测试分钟线 /// 测试分钟线
///============================== ///==============================
/** @arg SH000001全部1分钟K线数据,KQuery(0) */ /** @arg SH000001全部1分钟K线数据,KQuery(0) */
query = KQuery(0, Null<int64>(), KQuery::MIN); query = KQuery(0, Null<int64_t>(), KQuery::MIN);
kdata = stock.getKData(query); kdata = stock.getKData(query);
CHECK_EQ(kdata.size(), 682823L); CHECK_EQ(kdata.size(), 682823L);
record = kdata[0]; record = kdata[0];
expect = KRecord(Datetime(200001040931), 1366.58, 1368.692, 1366.579, 1368.692, 4124880, 191158); expect =
KRecord(Datetime(200001040931), 1366.58, 1368.692, 1366.579, 1368.692, 4124880, 191158);
CHECK_EQ(record, expect); CHECK_EQ(record, expect);
record = kdata[kdata.size() - 1]; record = kdata[kdata.size() - 1];
@ -444,7 +456,7 @@ TEST_CASE("test_getKData_by_index") {
/** @arg SH000001分钟线数据KQuery(total-1) */ /** @arg SH000001分钟线数据KQuery(total-1) */
total = stock.getCount(KQuery::MIN); total = stock.getCount(KQuery::MIN);
query = KQuery(total - 1, Null<int64>(), KQuery::MIN); query = KQuery(total - 1, Null<int64_t>(), KQuery::MIN);
kdata = stock.getKData(query); kdata = stock.getKData(query);
CHECK_EQ(kdata.size(), 1); CHECK_EQ(kdata.size(), 1);
record = kdata[0]; record = kdata[0];
@ -453,7 +465,7 @@ TEST_CASE("test_getKData_by_index") {
/** @arg SH000001分钟线数据KQuery(total) */ /** @arg SH000001分钟线数据KQuery(total) */
total = stock.getCount(KQuery::MIN); total = stock.getCount(KQuery::MIN);
query = KQuery(total, Null<int64>(), KQuery::MIN); query = KQuery(total, Null<int64_t>(), KQuery::MIN);
kdata = stock.getKData(query); kdata = stock.getKData(query);
CHECK_EQ(kdata.size(), 0); CHECK_EQ(kdata.size(), 0);
@ -462,7 +474,8 @@ TEST_CASE("test_getKData_by_index") {
kdata = stock.getKData(query); kdata = stock.getKData(query);
CHECK_EQ(kdata.size(), 1); CHECK_EQ(kdata.size(), 1);
record = kdata[0]; record = kdata[0];
expect = KRecord(Datetime(200001040931), 1366.58, 1368.692, 1366.579, 1368.692, 4124880, 191158); expect =
KRecord(Datetime(200001040931), 1366.58, 1368.692, 1366.579, 1368.692, 4124880, 191158);
CHECK_EQ(record, expect); CHECK_EQ(record, expect);
/** @arg SH000001分钟线数据KQuery(1,2) */ /** @arg SH000001分钟线数据KQuery(1,2) */
@ -507,7 +520,7 @@ TEST_CASE("test_getKData_by_index") {
CHECK_EQ(kdata.size(), 0); CHECK_EQ(kdata.size(), 0);
/** @arg SH000001分钟线数据KQuery(-1) */ /** @arg SH000001分钟线数据KQuery(-1) */
query = KQuery(-1, Null<int64>(), KQuery::MIN); query = KQuery(-1, Null<int64_t>(), KQuery::MIN);
kdata = stock.getKData(query); kdata = stock.getKData(query);
CHECK_EQ(kdata.size(), 1); CHECK_EQ(kdata.size(), 1);
record = kdata[0]; record = kdata[0];
@ -515,7 +528,7 @@ TEST_CASE("test_getKData_by_index") {
/** @arg SH000001分钟线数据KQuery(-total) */ /** @arg SH000001分钟线数据KQuery(-total) */
total = stock.getCount(KQuery::MIN); total = stock.getCount(KQuery::MIN);
query = KQuery(-(int64)total, Null<int64>(), KQuery::MIN); query = KQuery(-(int64_t)total, Null<int64_t>(), KQuery::MIN);
kdata = stock.getKData(query); kdata = stock.getKData(query);
CHECK_EQ(kdata.size(), 682823); CHECK_EQ(kdata.size(), 682823);
record = kdata[0]; record = kdata[0];
@ -526,7 +539,7 @@ TEST_CASE("test_getKData_by_index") {
/** @arg SH000001分钟线数据KQuery(-total-1) */ /** @arg SH000001分钟线数据KQuery(-total-1) */
total = stock.getCount(KQuery::MIN); total = stock.getCount(KQuery::MIN);
query = KQuery(-1 - (int64)total, Null<int64>(), KQuery::MIN); query = KQuery(-1 - (int64_t)total, Null<int64_t>(), KQuery::MIN);
kdata = stock.getKData(query); kdata = stock.getKData(query);
CHECK_EQ(kdata.size(), 682823); CHECK_EQ(kdata.size(), 682823);
record = kdata[0]; record = kdata[0];
@ -537,7 +550,7 @@ TEST_CASE("test_getKData_by_index") {
/** @arg SH000001分钟线数据KQuery(-total + 1) */ /** @arg SH000001分钟线数据KQuery(-total + 1) */
total = stock.getCount(KQuery::MIN); total = stock.getCount(KQuery::MIN);
query = KQuery(1 - (int64)total, Null<int64>(), KQuery::MIN); query = KQuery(1 - (int64_t)total, Null<int64_t>(), KQuery::MIN);
kdata = stock.getKData(query); kdata = stock.getKData(query);
CHECK_EQ(kdata.size(), 682822); CHECK_EQ(kdata.size(), 682822);
record = kdata[0]; record = kdata[0];
@ -569,14 +582,14 @@ TEST_CASE("test_getKData_by_index") {
CHECK_EQ(kdata.size(), 0); CHECK_EQ(kdata.size(), 0);
/** @arg SH000001分钟线数据KQuery(-total, 1) */ /** @arg SH000001分钟线数据KQuery(-total, 1) */
query = KQuery(-(int64)total, 1, KQuery::MIN); query = KQuery(-(int64_t)total, 1, KQuery::MIN);
kdata = stock.getKData(query); kdata = stock.getKData(query);
CHECK_EQ(kdata.size(), 1); CHECK_EQ(kdata.size(), 1);
record = kdata[0]; record = kdata[0];
CHECK_EQ(record.datetime, Datetime(200001040931)); CHECK_EQ(record.datetime, Datetime(200001040931));
/** @arg SH000001分钟线数据KQuery(-total, 2) */ /** @arg SH000001分钟线数据KQuery(-total, 2) */
query = KQuery(-(int64)total, 2, KQuery::MIN); query = KQuery(-(int64_t)total, 2, KQuery::MIN);
kdata = stock.getKData(query); kdata = stock.getKData(query);
CHECK_EQ(kdata.size(), 2); CHECK_EQ(kdata.size(), 2);
record = kdata[0]; record = kdata[0];
@ -586,7 +599,7 @@ TEST_CASE("test_getKData_by_index") {
CHECK_EQ(record.datetime, Datetime(200001040932)); CHECK_EQ(record.datetime, Datetime(200001040932));
/** @arg SH000001分钟线数据KQuery(0, -total) */ /** @arg SH000001分钟线数据KQuery(0, -total) */
query = KQuery(0, -(int64)total, KQuery::MIN); query = KQuery(0, -(int64_t)total, KQuery::MIN);
kdata = stock.getKData(query); kdata = stock.getKData(query);
CHECK_EQ(kdata.size(), 0); CHECK_EQ(kdata.size(), 0);
@ -619,9 +632,12 @@ TEST_CASE("test_getKData_by_index") {
CHECK_EQ(kdata.startPos(), 1); CHECK_EQ(kdata.startPos(), 1);
CHECK_EQ(kdata.endPos(), 4); CHECK_EQ(kdata.endPos(), 4);
CHECK_EQ(kdata.lastPos(), 3); CHECK_EQ(kdata.lastPos(), 3);
CHECK_EQ(kdata[0], KRecord(Datetime(199101310000), 127.61, 135.19, 127.61, 129.97, 3637.1, 67197)); CHECK_EQ(kdata[0],
CHECK_EQ(kdata[1], KRecord(Datetime(199102280000), 129.5, 134.87, 128.06, 133.01, 3027.3, 50982)); KRecord(Datetime(199101310000), 127.61, 135.19, 127.61, 129.97, 3637.1, 67197));
CHECK_EQ(kdata[2], KRecord(Datetime(199103310000), 132.53, 132.53, 120.11, 120.19, 1725.3, 24528)); CHECK_EQ(kdata[1],
KRecord(Datetime(199102280000), 129.5, 134.87, 128.06, 133.01, 3027.3, 50982));
CHECK_EQ(kdata[2],
KRecord(Datetime(199103310000), 132.53, 132.53, 120.11, 120.19, 1725.3, 24528));
/** @arg 测试季线 */ /** @arg 测试季线 */
query = KQuery(1, 4, KQuery::QUARTER); query = KQuery(1, 4, KQuery::QUARTER);
@ -631,9 +647,12 @@ TEST_CASE("test_getKData_by_index") {
CHECK_EQ(kdata.startPos(), 1); CHECK_EQ(kdata.startPos(), 1);
CHECK_EQ(kdata.endPos(), 4); CHECK_EQ(kdata.endPos(), 4);
CHECK_EQ(kdata.lastPos(), 3); CHECK_EQ(kdata.lastPos(), 3);
CHECK_EQ(kdata[0], KRecord(Datetime(199103310000), 127.61, 135.19, 120.11, 120.19, 8389.7, 142707)); CHECK_EQ(kdata[0],
CHECK_EQ(kdata[1], KRecord(Datetime(199106300000), 120.69, 137.56, 104.96, 137.56, 12095.6, 222753)); KRecord(Datetime(199103310000), 127.61, 135.19, 120.11, 120.19, 8389.7, 142707));
CHECK_EQ(kdata[2], KRecord(Datetime(199109300000), 136.64, 191.18, 131.87, 180.92, 32436.9, 527079)); CHECK_EQ(kdata[1],
KRecord(Datetime(199106300000), 120.69, 137.56, 104.96, 137.56, 12095.6, 222753));
CHECK_EQ(kdata[2],
KRecord(Datetime(199109300000), 136.64, 191.18, 131.87, 180.92, 32436.9, 527079));
/** @arg 测试5分钟线 */ /** @arg 测试5分钟线 */
query = KQuery(1, 4, KQuery::MIN5); query = KQuery(1, 4, KQuery::MIN5);
@ -643,9 +662,12 @@ TEST_CASE("test_getKData_by_index") {
CHECK_EQ(kdata.startPos(), 1); CHECK_EQ(kdata.startPos(), 1);
CHECK_EQ(kdata.endPos(), 4); CHECK_EQ(kdata.endPos(), 4);
CHECK_EQ(kdata.lastPos(), 3); CHECK_EQ(kdata.lastPos(), 3);
CHECK_EQ(kdata[0], KRecord(Datetime(200001040940), 1369.187, 1369.371, 1367.389, 1367.389, 70687.3, 251473)); CHECK_EQ(kdata[0], KRecord(Datetime(200001040940), 1369.187, 1369.371, 1367.389, 1367.389,
CHECK_EQ(kdata[1], KRecord(Datetime(200001040945), 1367.389, 1367.389, 1364.645, 1364.763, 73577.1, 223346)); 70687.3, 251473));
CHECK_EQ(kdata[2], KRecord(Datetime(200001040950), 1364.763, 1364.763, 1363.128, 1363.192, 65066.3, 167971)); CHECK_EQ(kdata[1], KRecord(Datetime(200001040945), 1367.389, 1367.389, 1364.645, 1364.763,
73577.1, 223346));
CHECK_EQ(kdata[2], KRecord(Datetime(200001040950), 1364.763, 1364.763, 1363.128, 1363.192,
65066.3, 167971));
/** @arg 测试15分钟线 */ /** @arg 测试15分钟线 */
query = KQuery(1, 4, KQuery::MIN15); query = KQuery(1, 4, KQuery::MIN15);
@ -655,12 +677,12 @@ TEST_CASE("test_getKData_by_index") {
CHECK_EQ(kdata.startPos(), 1); CHECK_EQ(kdata.startPos(), 1);
CHECK_EQ(kdata.endPos(), 4); CHECK_EQ(kdata.endPos(), 4);
CHECK_EQ(kdata.lastPos(), 3); CHECK_EQ(kdata.lastPos(), 3);
CHECK_EQ(kdata[0], CHECK_EQ(kdata[0], KRecord(Datetime(200001041000), 1364.7630, 1364.7630, 1361.4590, 1361.4590,
KRecord(Datetime(200001041000), 1364.7630, 1364.7630, 1361.4590, 1361.4590, 204277.1000, 457452.0000)); 204277.1000, 457452.0000));
CHECK_EQ(kdata[1], CHECK_EQ(kdata[1], KRecord(Datetime(200001041015), 1361.5580, 1366.0930, 1361.2950, 1365.9270,
KRecord(Datetime(200001041015), 1361.5580, 1366.0930, 1361.2950, 1365.9270, 307531.8000, 548313.0000)); 307531.8000, 548313.0000));
CHECK_EQ(kdata[2], CHECK_EQ(kdata[2], KRecord(Datetime(200001041030), 1366.0430, 1367.6830, 1365.9460, 1367.6830,
KRecord(Datetime(200001041030), 1366.0430, 1367.6830, 1365.9460, 1367.6830, 279102.7000, 451981.0000)); 279102.7000, 451981.0000));
} }
/** @par 检测点 */ /** @par 检测点 */
@ -696,7 +718,8 @@ TEST_CASE("test_getKData_by_date") {
CHECK_EQ(record, expect); CHECK_EQ(record, expect);
record = kdata[kdata.size() - 1]; record = kdata[kdata.size() - 1];
expect = KRecord(Datetime(201112060000), 2326.66, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078); expect =
KRecord(Datetime(201112060000), 2326.66, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078);
CHECK_EQ(record, expect); CHECK_EQ(record, expect);
/** @arg SH000001日线数据, 起始时间为第一条记录日期的前一天 */ /** @arg SH000001日线数据, 起始时间为第一条记录日期的前一天 */
@ -713,7 +736,8 @@ TEST_CASE("test_getKData_by_date") {
CHECK_EQ(record, expect); CHECK_EQ(record, expect);
record = kdata[kdata.size() - 1]; record = kdata[kdata.size() - 1];
expect = KRecord(Datetime(201112060000), 2326.66, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078); expect =
KRecord(Datetime(201112060000), 2326.66, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078);
CHECK_EQ(record, expect); CHECK_EQ(record, expect);
/** @arg SH000001日线数据, 起始时间等于第一条记录日期 */ /** @arg SH000001日线数据, 起始时间等于第一条记录日期 */
@ -730,7 +754,8 @@ TEST_CASE("test_getKData_by_date") {
CHECK_EQ(record, expect); CHECK_EQ(record, expect);
record = kdata[kdata.size() - 1]; record = kdata[kdata.size() - 1];
expect = KRecord(Datetime(201112060000), 2326.66, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078); expect =
KRecord(Datetime(201112060000), 2326.66, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078);
CHECK_EQ(record, expect); CHECK_EQ(record, expect);
/** @arg SH000001日线数据, 起始时间等于第一条记录日期的后一天 */ /** @arg SH000001日线数据, 起始时间等于第一条记录日期的后一天 */
@ -762,8 +787,8 @@ TEST_CASE("test_getKData_by_date") {
CHECK_EQ(record, expect); CHECK_EQ(record, expect);
record = kdata[kdata.size() - 1]; record = kdata[kdata.size() - 1];
CHECK_EQ(record, CHECK_EQ(record, KRecord(Datetime(201112020000), 2374.8990, 2378.2990, 2344.8460, 2360.6640,
KRecord(Datetime(201112020000), 2374.8990, 2378.2990, 2344.8460, 2360.6640, 5732015.7000, 59868846.0000)); 5732015.7000, 59868846.0000));
/** @arg SH000001日线数据, 指定起始时间为第一条记录,截至日期为最后一条记录 */ /** @arg SH000001日线数据, 指定起始时间为第一条记录,截至日期为最后一条记录 */
stock = sm.getStock("sh000001"); stock = sm.getStock("sh000001");
@ -779,8 +804,8 @@ TEST_CASE("test_getKData_by_date") {
CHECK_EQ(record, expect); CHECK_EQ(record, expect);
record = kdata[kdata.size() - 1]; record = kdata[kdata.size() - 1];
CHECK_EQ(record, CHECK_EQ(record, KRecord(Datetime(201112050000), 2363.1110, 2363.1270, 2327.6100, 2333.2290,
KRecord(Datetime(201112050000), 2363.1110, 2363.1270, 2327.6100, 2333.2290, 4864121.6000, 52214970.0000)); 4864121.6000, 52214970.0000));
/** @arg SH000001日线数据, 指定起始时间为第一条记录,截至日期为最后一条记录的后一天 */ /** @arg SH000001日线数据, 指定起始时间为第一条记录,截至日期为最后一条记录的后一天 */
stock = sm.getStock("sh000001"); stock = sm.getStock("sh000001");
@ -796,8 +821,8 @@ TEST_CASE("test_getKData_by_date") {
CHECK_EQ(record, expect); CHECK_EQ(record, expect);
record = kdata[kdata.size() - 1]; record = kdata[kdata.size() - 1];
CHECK_EQ(record, CHECK_EQ(record, KRecord(Datetime(201112060000), 2326.6600, 2331.8920, 2310.1550, 2325.9050,
KRecord(Datetime(201112060000), 2326.6600, 2331.8920, 2310.1550, 2325.9050, 4262559.5000, 45917078.0000)); 4262559.5000, 45917078.0000));
/** @arg SH000001日线数据, 中间任意一段日期 */ /** @arg SH000001日线数据, 中间任意一段日期 */
stock = sm.getStock("sh000001"); stock = sm.getStock("sh000001");
@ -809,12 +834,12 @@ TEST_CASE("test_getKData_by_date") {
CHECK_EQ(kdata.endPos(), 1214); CHECK_EQ(kdata.endPos(), 1214);
CHECK_EQ(kdata.lastPos(), 1213); CHECK_EQ(kdata.lastPos(), 1213);
record = kdata[0]; record = kdata[0];
CHECK_EQ(record, CHECK_EQ(record, KRecord(Datetime(199510180000), 705.7200, 716.8300, 705.7200, 716.8300,
KRecord(Datetime(199510180000), 705.7200, 716.8300, 705.7200, 716.8300, 232685.5000, 4273054.0000)); 232685.5000, 4273054.0000));
record = kdata[kdata.size() - 1]; record = kdata[kdata.size() - 1];
CHECK_EQ(record, CHECK_EQ(record, KRecord(Datetime(199510230000), 729.7600, 729.9700, 718.4400, 723.0900,
KRecord(Datetime(199510230000), 729.7600, 729.9700, 718.4400, 723.0900, 235482.7000, 3877994.0000)); 235482.7000, 3877994.0000));
/** @arg SH000001日线数据, 起始日期等于结束日期 */ /** @arg SH000001日线数据, 起始日期等于结束日期 */
stock = sm.getStock("sh000001"); stock = sm.getStock("sh000001");
@ -860,7 +885,8 @@ TEST_CASE("test_getKData_by_date") {
CHECK_EQ(kdata.endPos(), 1); CHECK_EQ(kdata.endPos(), 1);
CHECK_EQ(kdata.lastPos(), 0); CHECK_EQ(kdata.lastPos(), 0);
record = kdata[0]; record = kdata[0];
CHECK_EQ(record, KRecord(Datetime(199012190000), 96.0500, 99.9800, 95.7900, 99.9800, 49.4000, 1260.0000)); CHECK_EQ(record, KRecord(Datetime(199012190000), 96.0500, 99.9800, 95.7900, 99.9800, 49.4000,
1260.0000));
query = KQueryByDate(Datetime(201111140000), Datetime(201111150000)); query = KQueryByDate(Datetime(201111140000), Datetime(201111150000));
kdata = stock.getKData(query); kdata = stock.getKData(query);
@ -870,8 +896,8 @@ TEST_CASE("test_getKData_by_date") {
CHECK_EQ(kdata.endPos(), 5105); CHECK_EQ(kdata.endPos(), 5105);
CHECK_EQ(kdata.lastPos(), 5104); CHECK_EQ(kdata.lastPos(), 5104);
record = kdata[0]; record = kdata[0];
CHECK_EQ(record, CHECK_EQ(record, KRecord(Datetime(201111140000), 2498.6720, 2529.6320, 2496.3350, 2528.7140,
KRecord(Datetime(201111140000), 2498.6720, 2529.6320, 2496.3350, 2528.7140, 8252378.1000, 81229813.0000)); 8252378.1000, 81229813.0000));
query = KQueryByDate(Datetime(201112060000), Datetime(201112070000)); query = KQueryByDate(Datetime(201112060000), Datetime(201112070000));
kdata = stock.getKData(query); kdata = stock.getKData(query);
@ -881,8 +907,8 @@ TEST_CASE("test_getKData_by_date") {
CHECK_EQ(kdata.endPos(), 5121); CHECK_EQ(kdata.endPos(), 5121);
CHECK_EQ(kdata.lastPos(), 5120); CHECK_EQ(kdata.lastPos(), 5120);
record = kdata[0]; record = kdata[0];
CHECK_EQ(record, CHECK_EQ(record, KRecord(Datetime(201112060000), 2326.6600, 2331.8920, 2310.1550, 2325.9050,
KRecord(Datetime(201112060000), 2326.6600, 2331.8920, 2310.1550, 2325.9050, 4262559.5000, 45917078.0000)); 4262559.5000, 45917078.0000));
///=================================== ///===================================
/// 测试周线 /// 测试周线
@ -896,10 +922,12 @@ TEST_CASE("test_getKData_by_date") {
CHECK_EQ(kdata.startPos(), 0); CHECK_EQ(kdata.startPos(), 0);
CHECK_EQ(kdata.endPos(), total); CHECK_EQ(kdata.endPos(), total);
CHECK_EQ(kdata.lastPos(), total - 1); CHECK_EQ(kdata.lastPos(), total - 1);
CHECK_EQ(kdata[0], KRecord(Datetime(199012210000), 96.0500, 109.1300, 95.7900, 109.1300, 59.4000, 1485.0000)); CHECK_EQ(kdata[0], KRecord(Datetime(199012210000), 96.0500, 109.1300, 95.7900, 109.1300,
CHECK_EQ(kdata[1], KRecord(Datetime(199012280000), 113.5700, 126.4500, 109.1300, 126.4500, 28.2000, 321.0000)); 59.4000, 1485.0000));
CHECK_EQ(kdata[kdata.size() - 1], CHECK_EQ(kdata[1], KRecord(Datetime(199012280000), 113.5700, 126.4500, 109.1300, 126.4500,
KRecord(Datetime(201112090000), 2363.1110, 2363.1270, 2310.1550, 2325.9050, 9126681.1000, 98132048.0000)); 28.2000, 321.0000));
CHECK_EQ(kdata[kdata.size() - 1], KRecord(Datetime(201112090000), 2363.1110, 2363.1270,
2310.1550, 2325.9050, 9126681.1000, 98132048.0000));
/** @arg 起始时间等于第一条记录日期 */ /** @arg 起始时间等于第一条记录日期 */
stock = sm.getStock("sh000001"); stock = sm.getStock("sh000001");
@ -910,10 +938,12 @@ TEST_CASE("test_getKData_by_date") {
CHECK_EQ(kdata.startPos(), 0); CHECK_EQ(kdata.startPos(), 0);
CHECK_EQ(kdata.endPos(), total); CHECK_EQ(kdata.endPos(), total);
CHECK_EQ(kdata.lastPos(), total - 1); CHECK_EQ(kdata.lastPos(), total - 1);
CHECK_EQ(kdata[0], KRecord(Datetime(199012210000), 96.0500, 109.1300, 95.7900, 109.1300, 59.4000, 1485.0000)); CHECK_EQ(kdata[0], KRecord(Datetime(199012210000), 96.0500, 109.1300, 95.7900, 109.1300,
CHECK_EQ(kdata[10], KRecord(Datetime(199103010000), 134.3700, 134.8700, 132.4700, 132.5300, 827.1000, 11500.0000)); 59.4000, 1485.0000));
CHECK_EQ(kdata[kdata.size() - 1], CHECK_EQ(kdata[10], KRecord(Datetime(199103010000), 134.3700, 134.8700, 132.4700, 132.5300,
KRecord(Datetime(201112090000), 2363.1110, 2363.1270, 2310.1550, 2325.9050, 9126681.1000, 98132048.0000)); 827.1000, 11500.0000));
CHECK_EQ(kdata[kdata.size() - 1], KRecord(Datetime(201112090000), 2363.1110, 2363.1270,
2310.1550, 2325.9050, 9126681.1000, 98132048.0000));
/** @arg 起始时间等于第一条记录日期的后一天 */ /** @arg 起始时间等于第一条记录日期的后一天 */
stock = sm.getStock("sh000001"); stock = sm.getStock("sh000001");
@ -924,10 +954,12 @@ TEST_CASE("test_getKData_by_date") {
CHECK_EQ(kdata.startPos(), 1); CHECK_EQ(kdata.startPos(), 1);
CHECK_EQ(kdata.endPos(), total); CHECK_EQ(kdata.endPos(), total);
CHECK_EQ(kdata.lastPos(), total - 1); CHECK_EQ(kdata.lastPos(), total - 1);
CHECK_EQ(kdata[0], KRecord(Datetime(199012280000), 113.5700, 126.4500, 109.1300, 126.4500, 28.2000, 321.0000)); CHECK_EQ(kdata[0], KRecord(Datetime(199012280000), 113.5700, 126.4500, 109.1300, 126.4500,
CHECK_EQ(kdata[1], KRecord(Datetime(199101040000), 126.5600, 131.4400, 126.4800, 131.4400, 47.3000, 730.0000)); 28.2000, 321.0000));
CHECK_EQ(kdata[kdata.size() - 1], CHECK_EQ(kdata[1], KRecord(Datetime(199101040000), 126.5600, 131.4400, 126.4800, 131.4400,
KRecord(Datetime(201112090000), 2363.1110, 2363.1270, 2310.1550, 2325.9050, 9126681.1000, 98132048.0000)); 47.3000, 730.0000));
CHECK_EQ(kdata[kdata.size() - 1], KRecord(Datetime(201112090000), 2363.1110, 2363.1270,
2310.1550, 2325.9050, 9126681.1000, 98132048.0000));
/** @arg 指定起始时间为第一条记录,截至日期为最后一条记录的前一天且不等于前一条记录的日期 */ /** @arg 指定起始时间为第一条记录,截至日期为最后一条记录的前一天且不等于前一条记录的日期 */
stock = sm.getStock("sh000001"); stock = sm.getStock("sh000001");
@ -938,9 +970,10 @@ TEST_CASE("test_getKData_by_date") {
CHECK_EQ(kdata.startPos(), 0); CHECK_EQ(kdata.startPos(), 0);
CHECK_EQ(kdata.endPos(), total - 1); CHECK_EQ(kdata.endPos(), total - 1);
CHECK_EQ(kdata.lastPos(), total - 2); CHECK_EQ(kdata.lastPos(), total - 2);
CHECK_EQ(kdata[0], KRecord(Datetime(199012210000), 96.0500, 109.1300, 95.7900, 109.1300, 59.4000, 1485.0000)); CHECK_EQ(kdata[0], KRecord(Datetime(199012210000), 96.0500, 109.1300, 95.7900, 109.1300,
CHECK_EQ(kdata[kdata.size() - 1], KRecord(Datetime(201112020000), 2383.8930, 2423.5590, 2319.4400, 2360.6640, 59.4000, 1485.0000));
32821965.5000, 336317856.0000)); CHECK_EQ(kdata[kdata.size() - 1], KRecord(Datetime(201112020000), 2383.8930, 2423.5590,
2319.4400, 2360.6640, 32821965.5000, 336317856.0000));
/** @arg 指定起始时间为第一条记录,截至日期为最后一条记录 */ /** @arg 指定起始时间为第一条记录,截至日期为最后一条记录 */
query = KQueryByDate(Datetime(199012210000), Datetime(201112090000), KQuery::WEEK); query = KQueryByDate(Datetime(199012210000), Datetime(201112090000), KQuery::WEEK);
@ -950,9 +983,10 @@ TEST_CASE("test_getKData_by_date") {
CHECK_EQ(kdata.startPos(), 0); CHECK_EQ(kdata.startPos(), 0);
CHECK_EQ(kdata.endPos(), total - 1); CHECK_EQ(kdata.endPos(), total - 1);
CHECK_EQ(kdata.lastPos(), total - 2); CHECK_EQ(kdata.lastPos(), total - 2);
CHECK_EQ(kdata[0], KRecord(Datetime(199012210000), 96.0500, 109.1300, 95.7900, 109.1300, 59.4000, 1485.0000)); CHECK_EQ(kdata[0], KRecord(Datetime(199012210000), 96.0500, 109.1300, 95.7900, 109.1300,
CHECK_EQ(kdata[kdata.size() - 1], KRecord(Datetime(201112020000), 2383.8930, 2423.5590, 2319.4400, 2360.6640, 59.4000, 1485.0000));
32821965.5000, 336317856.0000)); CHECK_EQ(kdata[kdata.size() - 1], KRecord(Datetime(201112020000), 2383.8930, 2423.5590,
2319.4400, 2360.6640, 32821965.5000, 336317856.0000));
/** @arg 指定起始时间为第一条记录,截至日期为最后一条记录的后一天 */ /** @arg 指定起始时间为第一条记录,截至日期为最后一条记录的后一天 */
query = KQueryByDate(Datetime(199012210000), Datetime(201112100000), KQuery::WEEK); query = KQueryByDate(Datetime(199012210000), Datetime(201112100000), KQuery::WEEK);
@ -962,9 +996,10 @@ TEST_CASE("test_getKData_by_date") {
CHECK_EQ(kdata.startPos(), 0); CHECK_EQ(kdata.startPos(), 0);
CHECK_EQ(kdata.endPos(), total); CHECK_EQ(kdata.endPos(), total);
CHECK_EQ(kdata.lastPos(), total - 1); CHECK_EQ(kdata.lastPos(), total - 1);
CHECK_EQ(kdata[0], KRecord(Datetime(199012210000), 96.0500, 109.1300, 95.7900, 109.1300, 59.4000, 1485.0000)); CHECK_EQ(kdata[0], KRecord(Datetime(199012210000), 96.0500, 109.1300, 95.7900, 109.1300,
CHECK_EQ(kdata[kdata.size() - 1], 59.4000, 1485.0000));
KRecord(Datetime(201112090000), 2363.1110, 2363.1270, 2310.1550, 2325.9050, 9126681.1000, 98132048.0000)); CHECK_EQ(kdata[kdata.size() - 1], KRecord(Datetime(201112090000), 2363.1110, 2363.1270,
2310.1550, 2325.9050, 9126681.1000, 98132048.0000));
/** @arg 中间任意一段日期 */ /** @arg 中间任意一段日期 */
stock = sm.getStock("sh000001"); stock = sm.getStock("sh000001");
@ -975,10 +1010,10 @@ TEST_CASE("test_getKData_by_date") {
CHECK_EQ(kdata.startPos(), 1043); CHECK_EQ(kdata.startPos(), 1043);
CHECK_EQ(kdata.endPos(), 1054); CHECK_EQ(kdata.endPos(), 1054);
CHECK_EQ(kdata.lastPos(), 1053); CHECK_EQ(kdata.lastPos(), 1053);
CHECK_EQ(kdata[0], KRecord(Datetime(201108190000), 2598.1380, 2636.3600, 2513.7540, 2534.3580, 40330572.2000, CHECK_EQ(kdata[0], KRecord(Datetime(201108190000), 2598.1380, 2636.3600, 2513.7540, 2534.3580,
385608932.0000)); 40330572.2000, 385608932.0000));
CHECK_EQ(kdata[kdata.size() - 1], KRecord(Datetime(201111040000), 2470.2540, 2536.7790, 2433.7150, 2528.2940, CHECK_EQ(kdata[kdata.size() - 1], KRecord(Datetime(201111040000), 2470.2540, 2536.7790,
50520578.9000, 516983184.0000)); 2433.7150, 2528.2940, 50520578.9000, 516983184.0000));
/** @arg 起始日期等于结束日期 */ /** @arg 起始日期等于结束日期 */
stock = sm.getStock("sh000001"); stock = sm.getStock("sh000001");
@ -1023,7 +1058,8 @@ TEST_CASE("test_getKData_by_date") {
CHECK_EQ(kdata.startPos(), 0); CHECK_EQ(kdata.startPos(), 0);
CHECK_EQ(kdata.endPos(), 1); CHECK_EQ(kdata.endPos(), 1);
CHECK_EQ(kdata.lastPos(), 0); CHECK_EQ(kdata.lastPos(), 0);
CHECK_EQ(kdata[0], KRecord(Datetime(199012210000), 96.0500, 109.1300, 95.7900, 109.1300, 59.4000, 1485.0000)); CHECK_EQ(kdata[0], KRecord(Datetime(199012210000), 96.0500, 109.1300, 95.7900, 109.1300,
59.4000, 1485.0000));
query = KQueryByDate(Datetime(199707250000), Datetime(199708010000), KQuery::WEEK); query = KQueryByDate(Datetime(199707250000), Datetime(199708010000), KQuery::WEEK);
kdata = stock.getKData(query); kdata = stock.getKData(query);
@ -1032,8 +1068,8 @@ TEST_CASE("test_getKData_by_date") {
CHECK_EQ(kdata.startPos(), 338); CHECK_EQ(kdata.startPos(), 338);
CHECK_EQ(kdata.endPos(), 339); CHECK_EQ(kdata.endPos(), 339);
CHECK_EQ(kdata.lastPos(), 338); CHECK_EQ(kdata.lastPos(), 338);
CHECK_EQ(kdata[0], CHECK_EQ(kdata[0], KRecord(Datetime(199707250000), 1215.8390, 1223.8230, 1158.1360, 1170.8620,
KRecord(Datetime(199707250000), 1215.8390, 1223.8230, 1158.1360, 1170.8620, 2433586.7000, 20739544.0000)); 2433586.7000, 20739544.0000));
query = KQueryByDate(Datetime(201112090000), Datetime(201112100000), KQuery::WEEK); query = KQueryByDate(Datetime(201112090000), Datetime(201112100000), KQuery::WEEK);
kdata = stock.getKData(query); kdata = stock.getKData(query);
@ -1042,8 +1078,8 @@ TEST_CASE("test_getKData_by_date") {
CHECK_EQ(kdata.startPos(), 1058); CHECK_EQ(kdata.startPos(), 1058);
CHECK_EQ(kdata.endPos(), 1059); CHECK_EQ(kdata.endPos(), 1059);
CHECK_EQ(kdata.lastPos(), 1058); CHECK_EQ(kdata.lastPos(), 1058);
CHECK_EQ(kdata[0], CHECK_EQ(kdata[0], KRecord(Datetime(201112090000), 2363.1110, 2363.1270, 2310.1550, 2325.9050,
KRecord(Datetime(201112090000), 2363.1110, 2363.1270, 2310.1550, 2325.9050, 9126681.1000, 98132048.0000)); 9126681.1000, 98132048.0000));
///=================================== ///===================================
/// 测试分钟线 /// 测试分钟线
@ -1054,7 +1090,8 @@ TEST_CASE("test_getKData_by_date") {
kdata = stock.getKData(query); kdata = stock.getKData(query);
CHECK_EQ(kdata.size(), 682823L); CHECK_EQ(kdata.size(), 682823L);
record = kdata[0]; record = kdata[0];
expect = KRecord(Datetime(200001040931), 1366.58, 1368.692, 1366.579, 1368.692, 4124880, 191158); expect =
KRecord(Datetime(200001040931), 1366.58, 1368.692, 1366.579, 1368.692, 4124880, 191158);
CHECK_EQ(record, expect); CHECK_EQ(record, expect);
record = kdata[1]; record = kdata[1];
@ -1071,7 +1108,8 @@ TEST_CASE("test_getKData_by_date") {
kdata = stock.getKData(query); kdata = stock.getKData(query);
CHECK_EQ(kdata.size(), 682823L); CHECK_EQ(kdata.size(), 682823L);
record = kdata[0]; record = kdata[0];
expect = KRecord(Datetime(200001040931), 1366.58, 1368.692, 1366.579, 1368.692, 4124880, 191158); expect =
KRecord(Datetime(200001040931), 1366.58, 1368.692, 1366.579, 1368.692, 4124880, 191158);
CHECK_EQ(record, expect); CHECK_EQ(record, expect);
record = kdata[1]; record = kdata[1];
@ -1192,40 +1230,54 @@ TEST_CASE("test_getKData_recover") {
KData kdata; KData kdata;
/** @arg 前向复权*/ /** @arg 前向复权*/
query = KQuery(0, Null<int64>(), KQuery::DAY, KQuery::FORWARD); query = KQuery(0, Null<int64_t>(), KQuery::DAY, KQuery::FORWARD);
kdata = stock.getKData(query); kdata = stock.getKData(query);
CHECK_EQ(kdata[2710], KRecord(Datetime(201106030000), 10.02, 10.14, 10.0, 10.09, 38726.1, 384820)); CHECK_EQ(kdata[2710],
CHECK_EQ(kdata[2709], KRecord(Datetime(201106020000), 10.34, 10.38, 9.93, 10.04, 103909.3, 780543.0)); KRecord(Datetime(201106030000), 10.02, 10.14, 10.0, 10.09, 38726.1, 384820));
CHECK_EQ(kdata[2554], KRecord(Datetime(201010140000), 11.04, 11.42, 10.91, 10.95, 322428.8, 2195006)); CHECK_EQ(kdata[2709],
KRecord(Datetime(201106020000), 10.34, 10.38, 9.93, 10.04, 103909.3, 780543.0));
CHECK_EQ(kdata[2554],
KRecord(Datetime(201010140000), 11.04, 11.42, 10.91, 10.95, 322428.8, 2195006));
CHECK_EQ(kdata[2548], KRecord(Datetime(201009290000), 9.26, 9.64, 9.20, 9.48, 99719.8, 799165)); CHECK_EQ(kdata[2548], KRecord(Datetime(201009290000), 9.26, 9.64, 9.20, 9.48, 99719.8, 799165));
CHECK_EQ(kdata[2547], KRecord(Datetime(201009280000), 9.82, 9.82, 9.55, 9.55, 81241.5, 639882)); CHECK_EQ(kdata[2547], KRecord(Datetime(201009280000), 9.82, 9.82, 9.55, 9.55, 81241.5, 639882));
/** @arg 后向复权*/ /** @arg 后向复权*/
query = KQuery(0, Null<int64>(), KQuery::DAY, KQuery::BACKWARD); query = KQuery(0, Null<int64_t>(), KQuery::DAY, KQuery::BACKWARD);
kdata = stock.getKData(query); kdata = stock.getKData(query);
CHECK_EQ(kdata[0], KRecord(Datetime(199911100000), 29.5, 29.8, 27.0, 27.75, 485910.2, 1740850)); CHECK_EQ(kdata[0], KRecord(Datetime(199911100000), 29.5, 29.8, 27.0, 27.75, 485910.2, 1740850));
CHECK_EQ(kdata[151], KRecord(Datetime(200007050000), 23.25, 23.47, 23.15, 23.22, 3298.8, 14218)); CHECK_EQ(kdata[151],
CHECK_EQ(kdata[152], KRecord(Datetime(200007060000), 23.30, 23.42, 23.16, 23.23, 3049.5, 13200)); KRecord(Datetime(200007050000), 23.25, 23.47, 23.15, 23.22, 3298.8, 14218));
CHECK_EQ(kdata[657], KRecord(Datetime(200208210000), 18.35, 18.75, 18.18, 18.55, 36409.8, 197640)); CHECK_EQ(kdata[152],
CHECK_EQ(kdata[658], KRecord(Datetime(200208220000), 18.77, 18.89, 18.62, 18.81, 13101.3, 106872)); KRecord(Datetime(200007060000), 23.30, 23.42, 23.16, 23.23, 3049.5, 13200));
CHECK_EQ(kdata[657],
KRecord(Datetime(200208210000), 18.35, 18.75, 18.18, 18.55, 36409.8, 197640));
CHECK_EQ(kdata[658],
KRecord(Datetime(200208220000), 18.77, 18.89, 18.62, 18.81, 13101.3, 106872));
/** @arg 前向等比复权*/ /** @arg 前向等比复权*/
query = KQuery(0, Null<int64>(), KQuery::DAY, KQuery::EQUAL_FORWARD); query = KQuery(0, Null<int64_t>(), KQuery::DAY, KQuery::EQUAL_FORWARD);
kdata = stock.getKData(query); kdata = stock.getKData(query);
CHECK_EQ(kdata[2710], KRecord(Datetime(201106030000), 10.02, 10.14, 10.0, 10.09, 38726.1, 384820)); CHECK_EQ(kdata[2710],
CHECK_EQ(kdata[2709], KRecord(Datetime(201106020000), 10.33, 10.37, 9.93, 10.04, 103909.3, 780543.0)); KRecord(Datetime(201106030000), 10.02, 10.14, 10.0, 10.09, 38726.1, 384820));
CHECK_EQ(kdata[2554], KRecord(Datetime(201010140000), 11.03, 11.40, 10.90, 10.94, 322428.8, 2195006)); CHECK_EQ(kdata[2709],
KRecord(Datetime(201106020000), 10.33, 10.37, 9.93, 10.04, 103909.3, 780543.0));
CHECK_EQ(kdata[2554],
KRecord(Datetime(201010140000), 11.03, 11.40, 10.90, 10.94, 322428.8, 2195006));
CHECK_EQ(kdata[2548], KRecord(Datetime(201009290000), 9.27, 9.64, 9.21, 9.49, 99719.8, 799165)); CHECK_EQ(kdata[2548], KRecord(Datetime(201009290000), 9.27, 9.64, 9.21, 9.49, 99719.8, 799165));
CHECK_EQ(kdata[2547], KRecord(Datetime(201009280000), 9.82, 9.82, 9.55, 9.56, 81241.5, 639882)); CHECK_EQ(kdata[2547], KRecord(Datetime(201009280000), 9.82, 9.82, 9.55, 9.56, 81241.5, 639882));
/** @arg 等比后向复权*/ /** @arg 等比后向复权*/
query = KQuery(0, Null<int64>(), KQuery::DAY, KQuery::EQUAL_BACKWARD); query = KQuery(0, Null<int64_t>(), KQuery::DAY, KQuery::EQUAL_BACKWARD);
kdata = stock.getKData(query); kdata = stock.getKData(query);
CHECK_EQ(kdata[0], KRecord(Datetime(199911100000), 29.5, 29.8, 27.0, 27.75, 485910.2, 1740850)); CHECK_EQ(kdata[0], KRecord(Datetime(199911100000), 29.5, 29.8, 27.0, 27.75, 485910.2, 1740850));
CHECK_EQ(kdata[151], KRecord(Datetime(200007050000), 23.25, 23.47, 23.15, 23.22, 3298.8, 14218)); CHECK_EQ(kdata[151],
CHECK_EQ(kdata[152], KRecord(Datetime(200007060000), 23.30, 23.42, 23.16, 23.23, 3049.5, 13200)); KRecord(Datetime(200007050000), 23.25, 23.47, 23.15, 23.22, 3298.8, 14218));
CHECK_EQ(kdata[657], KRecord(Datetime(200208210000), 18.32, 18.72, 18.15, 18.52, 36409.8, 197640)); CHECK_EQ(kdata[152],
CHECK_EQ(kdata[658], KRecord(Datetime(200208220000), 18.74, 18.86, 18.59, 18.79, 13101.3, 106872)); KRecord(Datetime(200007060000), 23.30, 23.42, 23.16, 23.23, 3049.5, 13200));
CHECK_EQ(kdata[657],
KRecord(Datetime(200208210000), 18.32, 18.72, 18.15, 18.52, 36409.8, 197640));
CHECK_EQ(kdata[658],
KRecord(Datetime(200208220000), 18.74, 18.86, 18.59, 18.79, 13101.3, 106872));
} }
/** @par 检测点 */ /** @par 检测点 */

File diff suppressed because it is too large Load Diff

View File

@ -39,40 +39,40 @@ TEST_CASE("test_mysql") {
con->exec( con->exec(
"create table t2019 (id INTEGER PRIMARY KEY AUTO_INCREMENT, " "create table t2019 (id INTEGER PRIMARY KEY AUTO_INCREMENT, "
"name VARCHAR(50), " "name VARCHAR(50), "
"data_int32 INT, data_int64 BIGINT, data_double DOUBLE, data_float FLOAT)"); "data_int32_t INT, data_int64_t BIGINT, data_double DOUBLE, data_float FLOAT)");
} }
class T2019 { class T2019 {
TABLE_BIND5(t2019, name, data_int32, data_int64, data_double, data_float); TABLE_BIND5(t2019, name, data_int32_t, data_int64_t, data_double, data_float);
public: public:
T2019() T2019()
: name(Null<string>()), : name(Null<string>()),
data_int32(Null<int32>()), data_int32_t(Null<int32_t>()),
data_int64(Null<int64>()), data_int64_t(Null<int64_t>()),
data_double(Null<double>()), data_double(Null<double>()),
data_float(Null<float>()) {} data_float(Null<float>()) {}
void reset() { void reset() {
name = ""; name = "";
data_int32 = Null<int32>(); data_int32_t = Null<int32_t>();
data_int64 = Null<int64>(); data_int64_t = Null<int64_t>();
data_double = Null<double>(); data_double = Null<double>();
data_float = Null<float>(); data_float = Null<float>();
} }
public: public:
string name; string name;
int32 data_int32; int32_t data_int32_t;
int64 data_int64; int64_t data_int64_t;
double data_double; double data_double;
float data_float; float data_float;
}; };
T2019 x; T2019 x;
x.name = "Davis"; x.name = "Davis";
x.data_int32 = 32; x.data_int32_t = 32;
x.data_int64 = 3147483647; x.data_int64_t = 3147483647;
x.data_double = 3.1415926; x.data_double = 3.1415926;
x.data_float = 3.14f; x.data_float = 3.14f;
con->save(x); con->save(x);
@ -81,8 +81,8 @@ TEST_CASE("test_mysql") {
con->load(rx); con->load(rx);
CHECK(rx.name == x.name); CHECK(rx.name == x.name);
CHECK(rx.data_int32 == x.data_int32); CHECK(rx.data_int32_t == x.data_int32_t);
CHECK(rx.data_int64 == x.data_int64); CHECK(rx.data_int64_t == x.data_int64_t);
CHECK(std::abs(rx.data_double - x.data_double) < 0.00001); CHECK(std::abs(rx.data_double - x.data_double) < 0.00001);
CHECK(std::abs(rx.data_float - x.data_float) < 0.00001); CHECK(std::abs(rx.data_float - x.data_float) < 0.00001);
con->exec("drop table t2019"); con->exec("drop table t2019");

View File

@ -22,7 +22,7 @@ struct Constant {
null_price(Null<price_t>()), null_price(Null<price_t>()),
null_int(Null<int>()), null_int(Null<int>()),
null_size(Null<size_t>()), null_size(Null<size_t>()),
null_int64(Null<int64>()), null_int64(Null<int64_t>()),
STOCKTYPE_BLOCK(0), STOCKTYPE_BLOCK(0),
STOCKTYPE_A(1), STOCKTYPE_A(1),
STOCKTYPE_INDEX(2), STOCKTYPE_INDEX(2),
@ -49,7 +49,7 @@ struct Constant {
double null_price; double null_price;
int null_int; int null_int;
size_t null_size; size_t null_size;
int64 null_int64; int64_t null_int64;
bool pickle_support; //是否支持pickle bool pickle_support; //是否支持pickle
int STOCKTYPE_BLOCK; /// 板块 int STOCKTYPE_BLOCK; /// 板块
@ -75,7 +75,7 @@ void export_Constant() {
.def_readonly("null_price", &Constant::null_price, "同 nan") .def_readonly("null_price", &Constant::null_price, "同 nan")
.def_readonly("null_int", &Constant::null_int, "无效int") .def_readonly("null_int", &Constant::null_int, "无效int")
.def_readonly("null_size", &Constant::null_size, "无效size") .def_readonly("null_size", &Constant::null_size, "无效size")
.def_readonly("null_int64", &Constant::null_int64, "无效int64") .def_readonly("null_int64", &Constant::null_int64, "无效int64_t")
.def_readonly("pickle_support", &Constant::pickle_support, "是否支持 pickle") .def_readonly("pickle_support", &Constant::pickle_support, "是否支持 pickle")
.def_readonly("STOCKTYPE_BLOCK", &Constant::STOCKTYPE_BLOCK, "板块") .def_readonly("STOCKTYPE_BLOCK", &Constant::STOCKTYPE_BLOCK, "板块")

View File

@ -15,16 +15,16 @@ using namespace hku;
void export_KQuery() { void export_KQuery() {
scope in_Query = scope in_Query =
class_<KQuery>("Query", "K线数据查询条件", init<>()) class_<KQuery>("Query", "K线数据查询条件", init<>())
.def(init<int64, optional<int64, KQuery::KType, KQuery::RecoverType> >()) .def(init<int64_t, optional<int64_t, KQuery::KType, KQuery::RecoverType> >())
.def(init<Datetime, optional<Datetime, KQuery::KType, KQuery::RecoverType> >()) .def(init<Datetime, optional<Datetime, KQuery::KType, KQuery::RecoverType> >())
.def(self_ns::str(self)) .def(self_ns::str(self))
.def(self_ns::repr(self)) .def(self_ns::repr(self))
.add_property("start", &KQuery::start, .add_property("start", &KQuery::start,
"起始索引,当按日期查询方式创建时无效,为 constant.null_int64") "起始索引,当按日期查询方式创建时无效,为 constant.null_int64_t")
.add_property("end", &KQuery::end, .add_property("end", &KQuery::end,
"结束索引,当按日期查询方式创建时无效,为 constant.null_int64") "结束索引,当按日期查询方式创建时无效,为 constant.null_int64_t")
.add_property("start_datetime", &KQuery::startDatetime, .add_property("start_datetime", &KQuery::startDatetime,
"起始日期,当按索引查询方式创建时无效,为 constant.null_datetime") "起始日期,当按索引查询方式创建时无效,为 constant.null_datetime")
.add_property("end_datetime", &KQuery::endDatetime, .add_property("end_datetime", &KQuery::endDatetime,

View File

@ -14,7 +14,7 @@ using namespace hku;
void export_StockTypeInfo() { void export_StockTypeInfo() {
class_<StockTypeInfo>("StockTypeInfo", "股票类型详情记录", init<>()) class_<StockTypeInfo>("StockTypeInfo", "股票类型详情记录", init<>())
.def(init<uint32, const string&, price_t, price_t, int, double, double>()) .def(init<uint32_t, const string&, price_t, price_t, int, double, double>())
.def("__str__", &StockTypeInfo::toString) .def("__str__", &StockTypeInfo::toString)
.def("__repr__", &StockTypeInfo::toString) .def("__repr__", &StockTypeInfo::toString)

View File

@ -40,20 +40,20 @@ void export_trade_manage_main();
void export_trade_sys_main(); void export_trade_sys_main();
KData Py_GetKData(const string& market_code, py::object start = py::long_(0), KData Py_GetKData(const string& market_code, py::object start = py::long_(0),
py::object end = py::long_(Null<int64>()), KQuery::KType ktype = KQuery::DAY, py::object end = py::long_(Null<int64_t>()), KQuery::KType ktype = KQuery::DAY,
KQuery::RecoverType recovertType = KQuery::NO_RECOVER) { KQuery::RecoverType recovertType = KQuery::NO_RECOVER) {
py::extract<KQuery> query_x(start); py::extract<KQuery> query_x(start);
if (query_x.check()) { if (query_x.check()) {
return getKData(market_code, query_x()); return getKData(market_code, query_x());
} }
py::extract<int64> int_x(start); py::extract<int64_t> int_x(start);
if (int_x.check()) { if (int_x.check()) {
int64 start_ix = 0, end_ix = 0; int64_t start_ix = 0, end_ix = 0;
if (end.is_none()) { if (end.is_none()) {
end_ix = Null<int64>(); end_ix = Null<int64_t>();
} else { } else {
py::extract<int64> int_y(end); py::extract<int64_t> int_y(end);
if (!int_y.check()) { if (!int_y.check()) {
HKU_THROW_EXCEPTION( HKU_THROW_EXCEPTION(
std::invalid_argument, std::invalid_argument,
@ -136,7 +136,7 @@ BOOST_PYTHON_MODULE(core) {
:return: Stock() :return: Stock()
:rtype: Stock)"); :rtype: Stock)");
int64 null_int = Null<int64>(); int64_t null_int = Null<int64_t>();
py::def( py::def(
"get_kdata", Py_GetKData, "get_kdata", Py_GetKData,
(py::arg("market_code"), py::arg("start") = py::long_(0), py::arg("end") = py::object(), (py::arg("market_code"), py::arg("start") = py::long_(0), py::arg("end") = py::object(),