Hikyuu
Stock.h
浏览该文件的文档.
1 /*
2  * Stock.h
3  *
4  * Created on: 2011-11-9
5  * Author: fasiondog
6  */
7 
8 #ifndef STOCK_H_
9 #define STOCK_H_
10 
11 #include "StockWeight.h"
12 #include "KQuery.h"
13 #include "TimeLineRecord.h"
14 #include "TransRecord.h"
15 
16 namespace hku {
17 
19 class KDataDriver;
20 typedef shared_ptr<KDataDriver> KDataDriverPtr;
21 class HKU_API KData;
22 
27 class HKU_API Stock {
28  friend class StockManager;
29 
30 private:
31  static const string default_market;
32  static const string default_code;
33  static const string default_market_code;
34  static const string default_name;
35  static const hku_uint32 default_type;
36  static const bool default_valid;
37  static const Datetime default_startDate;
38  static const Datetime default_lastDate;
39  static const price_t default_tick;
40  static const price_t default_tickValue;
41  static const price_t default_unit;
42  static const int default_precision;
43  static const size_t default_minTradeNumber;
44  static const size_t default_maxTradeNumber;
45 
46 public:
47  Stock();
48 
49  Stock(const Stock&);
50  Stock(const string& market, const string& code, const string& name);
51 
52  Stock(const string& market, const string& code,
53  const string& name, hku_uint32 type, bool valid,
54  const Datetime& startDate, const Datetime& lastDate);
55  Stock(const string& market, const string& code,
56  const string& name, hku_uint32 type, bool valid,
57  const Datetime& startDate, const Datetime& lastDate,
58  price_t tick, price_t tickValue, int precision,
59  size_t minTradeNumber, size_t maxTradeNumber);
60  virtual ~Stock();
61  Stock& operator=(const Stock&);
62  bool operator==(const Stock&) const;
63  bool operator!=(const Stock&) const;
64 
66  hku_uint64 id() const;
67 
69  const string& market() const;
70 
72  const string& code() const;
73 
75  const string& market_code() const;
76 
78  const string& name() const;
79 
81  hku_uint32 type() const;
82 
84  bool valid() const;
85 
87  Datetime startDatetime() const;
88 
90  Datetime lastDatetime() const;
91 
93  price_t tick() const;
94 
96  price_t tickValue() const;
97 
99  price_t unit() const;
100 
102  int precision() const;
103 
105  size_t atom() const;
106 
108  size_t minTradeNumber() const;
109 
111  size_t maxTradeNumber() const;
112 
114  StockWeightList getWeight() const;
115 
122  StockWeightList getWeight(const Datetime& start,
123  const Datetime& end = Null<Datetime>()) const;
124 
126  size_t getCount(KQuery::KType dataType = KQuery::DAY) const;
127 
129  price_t getMarketValue(const Datetime&, KQuery::KType) const;
130 
138  bool getIndexRange(const KQuery&, size_t& out_start, size_t& out_end) const;
139 
141  KRecord getKRecord(size_t pos,
142  KQuery::KType dataType = KQuery::DAY) const;
143 
145  KRecord getKRecordByDate(const Datetime&, KQuery::KType ktype = KQuery::DAY) const;
146 
148  KData getKData(const KQuery&) const;
149 
151  KRecordList getKRecordList(size_t start, size_t end, KQuery::KType) const;
152 
154  DatetimeList getDatetimeList(size_t start, size_t end, KQuery::KType) const;
155 
157  DatetimeList getDatetimeList(const KQuery& query) const;
158 
160  TimeLineList getTimeLineList(const KQuery& query) const;
161 
163  TransList getTransList(const KQuery& query) const;
164 
166  void setWeightList(const StockWeightList&);
167 
169  void setKDataDriver(const KDataDriverPtr& kdataDriver);
170 
172  KDataDriverPtr getKDataDriver() const;
173 
178  void loadKDataToBuffer(KQuery::KType);
179 
181  void releaseKDataBuffer(KQuery::KType);
182 
184  bool isBuffer(KQuery::KType) const;
185 
187  bool isNull() const;
188 
190  void realtimeUpdate(const KRecord&);
191 
193  string toString() const;
194 
195 private:
196  bool _getIndexRangeByIndex(const KQuery&, size_t& out_start, size_t& out_end) const;
197  bool _getIndexRangeByDateFromBuffer(const KQuery&, size_t&, size_t&) const;
198 
199 private:
200  struct HKU_API Data;
201  shared_ptr<Data> m_data;
202  KDataDriverPtr m_kdataDriver;
203 };
204 
205 struct HKU_API Stock::Data {
206  string m_market; //所属的市场简称
207  string m_code; //证券代码
208  string m_market_code; //市场简称证券代码
209  string m_name; //证券名称
210  hku_uint32 m_type; //证券类型
211  bool m_valid; //当前证券是否有效
212  Datetime m_startDate; //证券起始日期
213  Datetime m_lastDate; //证券最后日期
214 
215  StockWeightList m_weightList; //权息信息列表
216 
223 
224  //KRecordListPtr pKData[KQuery::INVALID_KTYPE];
225  map<string, KRecordListPtr> pKData;
226 
227  Data();
228  Data(const string& market, const string& code,
229  const string& name, hku_uint32 type, bool valid,
230  const Datetime& startDate, const Datetime& lastDate,
231  price_t tick, price_t tickValue, int precision,
232  size_t minTradeNumber, size_t maxTradeNumber);
233 
234  virtual ~Data();
235 };
236 
241 HKU_API std::ostream& operator <<(std::ostream &os, const Stock& stock);
242 
244 typedef vector<Stock> StockList;
245 
246 
247 /* 用于将Stock实例作为map的key,一般建议使用stock.id做键值,
248  * 否则map还要利用拷贝构造函数,创建新对象,效率低 */
249 bool operator < (const Stock& s1, const Stock& s2);
250 inline bool operator < (const Stock& s1, const Stock& s2) {
251  return s1.id() < s2.id();
252 }
253 
254 inline hku_uint64 Stock::id() const {
255  return isNull() ? 0 : (hku_int64)m_data.get();
256 }
257 
259  return m_data ? m_data->m_weightList : StockWeightList();
260 }
261 
262 inline bool Stock::operator==(const Stock& stock) const {
263  return (*this != stock) ? false : true;
264 }
265 
266 } /* namespace */
267 
268 #endif /* STOCK_H_ */
unsigned hku_uint32
Definition: DataType.h:48
string m_market
Definition: Stock.h:206
price_t m_unit
Definition: Stock.h:219
string m_name
Definition: Stock.h:209
map< string, KRecordListPtr > pKData
Definition: Stock.h:225
string m_code
Definition: Stock.h:207
Datetime m_startDate
Definition: Stock.h:212
K线数据记录
Definition: KRecord.h:19
K线数据
Definition: KData.h:19
shared_ptr< KDataDriver > KDataDriverPtr
Definition: KDataDriver.h:116
按索引方式查询K线数据条件
Definition: KQuery.h:19
bool operator==(const Stock &) const
Definition: Stock.h:262
string m_market_code
Definition: Stock.h:208
提供指定给定类型的Null值
Definition: Null.h:22
日期类型
Definition: Datetime.h:33
vector< TransRecord > TransList
分时线
Definition: TransRecord.h:44
vector< Stock > StockList
Definition: Stock.h:244
K线数据驱动基类
Definition: KDataDriver.h:21
Stock基类,Application中一般使用StockPtr进行操作
Definition: Stock.h:27
static const string DAY
Definition: KQuery.h:58
size_t m_maxTradeNumber
Definition: Stock.h:222
StockWeightList m_weightList
Definition: Stock.h:215
vector< KRecord > KRecordList
Definition: KRecord.h:53
hku_uint32 m_type
Definition: Stock.h:210
vector< TimeLineRecord > TimeLineList
分时线
Definition: TimeLineRecord.h:35
bool operator!=(const Datetime &, const Datetime &)
Definition: Datetime.h:205
#define HKU_API
Definition: DataType.h:12
long long hku_int64
Definition: DataType.h:45
size_t m_minTradeNumber
Definition: Stock.h:221
StockWeightList getWeight() const
获取所有权息信息
Definition: Stock.h:258
Datetime m_lastDate
Definition: Stock.h:213
HKU_API std::ostream & operator<<(std::ostream &os, const Block &blk)
Definition: Block.cpp:13
double price_t
Definition: DataType.h:53
bool operator==(const Datetime &, const Datetime &)
Definition: Datetime.h:201
std::vector< Datetime > DatetimeList
日期列表
Definition: Datetime.h:177
bool m_valid
Definition: Stock.h:211
hku_uint64 id() const
获取内部id,一般用于作为map的键值使用,该id实质为m_data的内存地址
Definition: Stock.h:254
vector< StockWeight > StockWeightList
Definition: StockWeight.h:68
string KType
查询K线类型:日线/周线等
Definition: KQuery.h:51
int m_precision
Definition: Stock.h:220
bool operator<(const Datetime &, const Datetime &)
Definition: Datetime.h:213
price_t m_tickValue
Definition: Stock.h:218
unsigned long long hku_uint64
Definition: DataType.h:46
Hikyuu核心命名空间,包含股票数据的管理、指标实现、交易系统框架等
Definition: Block.cpp:11
price_t m_tick
Definition: Stock.h:217
证券信息统一管理类
Definition: StockManager.h:30