test_doc
test_StockManager.cpp
浏览该文件的文档.
1 /*
2  * test_StockManager.cpp
3  *
4  * Created on: 2011-11-10
5  * Author: fasiondog
6  */
7 
8 #ifdef TEST_ALL_IN_ONE
9  #include <boost/test/unit_test.hpp>
10 #else
11  #define BOOST_TEST_MODULE test_hikyuu_base
12  #include <boost/test/unit_test.hpp>
13 #endif
14 
15 #include <boost/filesystem.hpp>
16 #include <hikyuu/StockManager.h>
17 #include <hikyuu/utilities/util.h>
18 #include <hikyuu/Log.h>
19 
20 using namespace hku;
21 using namespace boost::filesystem;
22 
30 BOOST_AUTO_TEST_CASE( test_StockManager_size ) {
31  StockManager& sm = StockManager::instance();
33  BOOST_CHECK(sm.size() == 4729);
34 }
35 
37 BOOST_AUTO_TEST_CASE( test_StockManager_getStock ) {
38  StockManager& sm = StockManager::instance();
39  Stock stock;
40  Stock null_stock = Null<Stock>();
41 
43  BOOST_CHECK(sm.getStock("z000001") == null_stock);
44 
46  BOOST_CHECK(sm.getStock("sh1000001") == null_stock);
47 
49  stock = sm.getStock("sh000001");
50  BOOST_CHECK(stock.market() == "SH");
51  BOOST_CHECK(stock.code() == "000001");
52  BOOST_CHECK(stock.name() == HKU_STR("上证指数"));
53  BOOST_CHECK(stock.type() == 2);
54  BOOST_CHECK(stock.valid() == true);
55  BOOST_CHECK(stock.startDatetime() == Datetime(199012190000));
56  BOOST_CHECK(stock.lastDatetime() == Null<Datetime>());
57  BOOST_CHECK(stock.tick() == 0.001);
58  BOOST_CHECK(stock.tickValue() == 0.001);
59  BOOST_CHECK(stock.unit() == 1.0);
60  BOOST_CHECK(stock.precision() == 3);
61  BOOST_CHECK(stock.atom() == 1);
62  BOOST_CHECK(stock.minTradeNumber() == 1);
63  BOOST_CHECK(stock.maxTradeNumber() == 1000000);
64 }
65 
67 BOOST_AUTO_TEST_CASE( test_StockManager_getMarketInfo ) {
68  StockManager& sm = StockManager::instance();
69 
71  BOOST_CHECK(Null<MarketInfo>() == sm.getMarketInfo("XXX"));
72  BOOST_CHECK(Null<MarketInfo>() == sm.getMarketInfo(""));
73 
75  MarketInfo marketInfo = sm.getMarketInfo("SH");
76  BOOST_CHECK(marketInfo != Null<MarketInfo>());
77  BOOST_CHECK(marketInfo.market() == "SH");
78  BOOST_CHECK(marketInfo.code() == "000001");
79  BOOST_CHECK(marketInfo.name() == HKU_STR("上海证劵交易所"));
80  BOOST_CHECK(marketInfo.description() == HKU_STR("上海市场"));
81  BOOST_CHECK(marketInfo.lastDate() == Datetime(201112060000L));
82 
84  marketInfo = sm.getMarketInfo("sh");
85  BOOST_CHECK(marketInfo != Null<MarketInfo>());
86  BOOST_CHECK(marketInfo.market() == "SH");
87 
88 
90  marketInfo = sm.getMarketInfo("Sh");
91  BOOST_CHECK(marketInfo != Null<MarketInfo>());
92  BOOST_CHECK(marketInfo.market() == "SH");
93 }
94 
96 BOOST_AUTO_TEST_CASE( test_StockManager_getStockTypeInfo ) {
97  StockManager& sm = StockManager::instance();
98  StockTypeInfo stockTypeInfo;
99 
101  BOOST_CHECK(sm.getStockTypeInfo(999) == Null<StockTypeInfo>());
102 
104  stockTypeInfo = sm.getStockTypeInfo(0);
105  BOOST_CHECK(stockTypeInfo != Null<StockTypeInfo>());
106  BOOST_CHECK(stockTypeInfo.type() == 0);
107  BOOST_CHECK(stockTypeInfo.description() == HKU_STR("Block"));
108  BOOST_CHECK(stockTypeInfo.tick() == 100);
109  BOOST_CHECK(stockTypeInfo.precision() == 2);
110  BOOST_CHECK(stockTypeInfo.minTradeNumber() == 100);
111  BOOST_CHECK(stockTypeInfo.maxTradeNumber() == 1000000);
112 
114  stockTypeInfo = sm.getStockTypeInfo(8);
115  BOOST_CHECK(stockTypeInfo != Null<StockTypeInfo>());
116  BOOST_CHECK(stockTypeInfo.type() == 8);
117 #if !defined(BOOST_MSVC)
118  //msvc中文支持不好,此处无法编译
119  BOOST_CHECK(stockTypeInfo.description() == HKU_STR("创业板"));
120 #endif
121  BOOST_CHECK(stockTypeInfo.tick() == 0.01);
122  BOOST_CHECK(stockTypeInfo.precision() == 2);
123  BOOST_CHECK(stockTypeInfo.minTradeNumber() == 100);
124  BOOST_CHECK(stockTypeInfo.maxTradeNumber() == 1000000);
125 
127  stockTypeInfo = sm.getStockTypeInfo(2);
128  BOOST_CHECK(stockTypeInfo != Null<StockTypeInfo>());
129  BOOST_CHECK(stockTypeInfo.type() == 2);
130  BOOST_CHECK(stockTypeInfo.description() == HKU_STR("指数"));
131  BOOST_CHECK(stockTypeInfo.tick() == 0.001);
132  BOOST_CHECK(stockTypeInfo.precision() == 3);
133  BOOST_CHECK(stockTypeInfo.minTradeNumber() == 1);
134  BOOST_CHECK(stockTypeInfo.maxTradeNumber() == 1000000);
135 }
136 
138 BOOST_AUTO_TEST_CASE( test_StockManager_getAllMarket ) {
139  StockManager& sm = StockManager::instance();
140 
142  MarketList result(sm.getAllMarket());
143  BOOST_CHECK(result.size() == 3);
144 #if defined(BOOST_WINDOWS)
145  BOOST_CHECK(result[0] == "TMP");
146  BOOST_CHECK(result[1] == "SH");
147  BOOST_CHECK(result[2] == "SZ");
148 #else
149  BOOST_CHECK(result[0] == "TMP");
150  BOOST_CHECK(result[1] == "SZ");
151  BOOST_CHECK(result[2] == "SH");
152 #endif
153 }
154 
156 BOOST_AUTO_TEST_CASE( test_StockManager_getBlock ) {
157  StockManager& sm = StockManager::instance();
158 
159  Block result = sm.getBlock("地域板块", "陕西");
160  BOOST_CHECK(result.size() != 0);
161 
162  BlockList blk_list = sm.getBlockList("地域板块");
163  blk_list = sm.getBlockList();
164  BOOST_CHECK(blk_list.size() != 0);
165 
166 }
167 
169 BOOST_AUTO_TEST_CASE( test_StockManager_TempCsvStock) {
170  StockManager& sm = StockManager::instance();
171 
172  path tmp_dir(sm.tmpdir());
173  tmp_dir = tmp_dir.parent_path();
174 
175  string day_filename(tmp_dir.string() + "/test_day_data.csv");
176  string min_filename(tmp_dir.string() + "/test_min_data.csv");
177 
179  Stock stk = sm.addTempCsvStock("test", day_filename, min_filename);
180  BOOST_CHECK(stk.isNull() == false);
181  BOOST_CHECK(stk.market() == "TMP");
182  BOOST_CHECK(stk.code() == "TEST");
183  BOOST_CHECK(stk.market_code() == "TMPTEST");
184  BOOST_CHECK(stk.getCount(KQuery::DAY) == 100);
185  BOOST_CHECK(stk.getCount(KQuery::MIN) == 24000);
186 
188  KRecord record;
189  record = stk.getKRecord(0);
190  BOOST_CHECK(record.datetime == Datetime(201703070000));
191  BOOST_CHECK((record.openPrice-3233.09) < 0.00001);
192  BOOST_CHECK((record.highPrice-3242.66) < 0.00001);
193  BOOST_CHECK((record.lowPrice-3226.82) < 0.00001);
194  BOOST_CHECK((record.closePrice-3242.41) < 0.00001);
195  BOOST_CHECK((record.transAmount-20993120.6) < 0.00001);
196  BOOST_CHECK((record.transCount-164064235.0) < 0.00001);
197 
199  record = stk.getKRecord(10);
200  BOOST_CHECK(record.datetime == Datetime(201703210000));
201  BOOST_CHECK((record.openPrice-3250.25) < 0.00001);
202  BOOST_CHECK((record.highPrice-3262.22) < 0.00001);
203  BOOST_CHECK((record.lowPrice-3246.70) < 0.00001);
204  BOOST_CHECK((record.closePrice-3261.61) < 0.00001);
205  BOOST_CHECK((record.transAmount-21912127.0) < 0.00001);
206  BOOST_CHECK((record.transCount-162719306.0) < 0.00001);
207 
209  record = stk.getKRecord(99);
210  BOOST_CHECK(record.datetime == Datetime(201707310000));
211  BOOST_CHECK((record.openPrice-3252.75) < 0.00001);
212  BOOST_CHECK((record.highPrice-3276.95) < 0.00001);
213  BOOST_CHECK((record.lowPrice-3251.19) < 0.00001);
214  BOOST_CHECK((record.closePrice-3273.03) < 0.00001);
215  BOOST_CHECK((record.transAmount-25352591.70) < 0.00001);
216  BOOST_CHECK((record.transCount-246039440.0) < 0.00001);
217 
219  stk = sm.getStock("tmptest");
220  BOOST_CHECK(stk.isNull() == false);
221  BOOST_CHECK(stk.market() == "TMP");
222  BOOST_CHECK(stk.code() == "TEST");
223  BOOST_CHECK(stk.market_code() == "TMPTEST");
224  BOOST_CHECK(stk.getCount(KQuery::DAY) == 100);
225  BOOST_CHECK(stk.getCount(KQuery::MIN) == 24000);
226 
228  record = stk.getKRecord(10);
229  BOOST_CHECK(record.datetime == Datetime(201703210000));
230  BOOST_CHECK((record.openPrice-3250.25) < 0.00001);
231  BOOST_CHECK((record.highPrice-3262.22) < 0.00001);
232  BOOST_CHECK((record.lowPrice-3246.70) < 0.00001);
233  BOOST_CHECK((record.closePrice-3261.61) < 0.00001);
234  BOOST_CHECK((record.transAmount-21912127.0) < 0.00001);
235  BOOST_CHECK((record.transCount-162719306.0) < 0.00001);
236 
238  sm.removeTempCsvStock("test");
239  stk = sm.getStock("tmptest");
240  BOOST_CHECK(stk.isNull() == true);
241 }
242 
BOOST_AUTO_TEST_CASE(test_StockManager_size)