test_doc
test_export.cpp
浏览该文件的文档.
1 /*
2  * test_export.cpp
3  *
4  * Created on: 2013-4-30
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_indicator_suite
12  #include <boost/test/unit_test.hpp>
13 #endif
14 
15 #include <hikyuu/config.h>
16 
17 #if HKU_SUPPORT_SERIALIZATION
18 
19 #include <fstream>
20 #include <boost/archive/xml_oarchive.hpp>
21 #include <boost/archive/xml_iarchive.hpp>
22 #include <hikyuu/StockManager.h>
23 #include <hikyuu/indicator/build_in.h>
24 
25 using namespace hku;
26 
34 BOOST_AUTO_TEST_CASE( test_AMA_export ) {
35  StockManager& sm = StockManager::instance();
36  string filename(sm.tmpdir());
37  filename += "/AMA.xml";
38 
39  Stock stock = sm.getStock("sh000001");
40  KData kdata = stock.getKData(KQuery(-20));
41  Indicator ma1 = AMA(CLOSE(kdata), 10);
42  {
43  std::ofstream ofs(filename);
44  boost::archive::xml_oarchive oa(ofs);
45  oa << BOOST_SERIALIZATION_NVP(ma1);
46  }
47 
48  Indicator ma2;
49  {
50  std::ifstream ifs(filename);
51  boost::archive::xml_iarchive ia(ifs);
52  ia >> BOOST_SERIALIZATION_NVP(ma2);
53  }
54 
55  BOOST_CHECK(ma1.size() == ma2.size());
56  BOOST_CHECK(ma1.discard() == ma2.discard());
57  BOOST_CHECK(ma1.getResultNumber() == ma2.getResultNumber());
58  for (size_t i = 0; i < ma1.size(); ++i) {
59  BOOST_CHECK_CLOSE(ma1.get(i, 0), ma2.get(i, 0), 0.00001);
60  BOOST_CHECK_CLOSE(ma1.get(i, 1), ma2.get(i, 1), 0.00001);
61  }
62 }
63 
64 
66 BOOST_AUTO_TEST_CASE( test_DIFF_export ) {
67  StockManager& sm = StockManager::instance();
68  string filename(sm.tmpdir());
69  filename += "/DIFF.xml";
70 
71  Stock stock = sm.getStock("sh000001");
72  KData kdata = stock.getKData(KQuery(-20));
73  Indicator ma1 = DIFF(CLOSE(kdata));
74  {
75  std::ofstream ofs(filename);
76  boost::archive::xml_oarchive oa(ofs);
77  oa << BOOST_SERIALIZATION_NVP(ma1);
78  }
79 
80  Indicator ma2;
81  {
82  std::ifstream ifs(filename);
83  boost::archive::xml_iarchive ia(ifs);
84  ia >> BOOST_SERIALIZATION_NVP(ma2);
85  }
86 
87  BOOST_CHECK(ma1.size() == ma2.size());
88  BOOST_CHECK(ma1.discard() == ma2.discard());
89  BOOST_CHECK(ma1.getResultNumber() == ma2.getResultNumber());
90  for (size_t i = 0; i < ma1.size(); ++i) {
91  BOOST_CHECK_CLOSE(ma1[i], ma2[i], 0.00001);
92  }
93 }
94 
95 
97 BOOST_AUTO_TEST_CASE( test_MA_export ) {
98  StockManager& sm = StockManager::instance();
99  string filename(sm.tmpdir());
100  filename += "/MA.xml";
101 
102  Stock stock = sm.getStock("sh000001");
103  KData kdata = stock.getKData(KQuery(-20));
104  Indicator ma1 = MA(CLOSE(kdata), 10);
105  {
106  std::ofstream ofs(filename);
107  boost::archive::xml_oarchive oa(ofs);
108  oa << BOOST_SERIALIZATION_NVP(ma1);
109  }
110 
111  Indicator ma2;
112  {
113  std::ifstream ifs(filename);
114  boost::archive::xml_iarchive ia(ifs);
115  ia >> BOOST_SERIALIZATION_NVP(ma2);
116  }
117 
118  BOOST_CHECK(ma1.size() == ma2.size());
119  BOOST_CHECK(ma1.discard() == ma2.discard());
120  BOOST_CHECK(ma1.getResultNumber() == ma2.getResultNumber());
121  for (size_t i = 0; i < ma1.size(); ++i) {
122  BOOST_CHECK_CLOSE(ma1[i], ma2[i], 0.00001);
123  }
124 }
125 
126 
128 BOOST_AUTO_TEST_CASE( test_EMA_export ) {
129  StockManager& sm = StockManager::instance();
130  string filename(sm.tmpdir());
131  filename += "/EMA.xml";
132 
133  Stock stock = sm.getStock("sh000001");
134  KData kdata = stock.getKData(KQuery(-20));
135  Indicator ma1 = EMA(CLOSE(kdata), 10);
136  {
137  std::ofstream ofs(filename);
138  boost::archive::xml_oarchive oa(ofs);
139  oa << BOOST_SERIALIZATION_NVP(ma1);
140  }
141 
142  Indicator ma2;
143  {
144  std::ifstream ifs(filename);
145  boost::archive::xml_iarchive ia(ifs);
146  ia >> BOOST_SERIALIZATION_NVP(ma2);
147  }
148 
149  BOOST_CHECK(ma1.size() == ma2.size());
150  BOOST_CHECK(ma1.discard() == ma2.discard());
151  BOOST_CHECK(ma1.getResultNumber() == ma2.getResultNumber());
152  for (size_t i = 0; i < ma1.size(); ++i) {
153  BOOST_CHECK_CLOSE(ma1[i], ma2[i], 0.00001);
154  }
155 }
156 
157 
159 BOOST_AUTO_TEST_CASE( test_KDATA_export ) {
160  StockManager& sm = StockManager::instance();
161  string filename(sm.tmpdir());
162  filename += "/IKDATA.xml";
163 
164  Stock stock = sm.getStock("sh000001");
165  KData kdata = stock.getKData(KQuery(-20));
166  Indicator ma1 = KDATA(kdata);
167  {
168  std::ofstream ofs(filename);
169  boost::archive::xml_oarchive oa(ofs);
170  oa << BOOST_SERIALIZATION_NVP(ma1);
171  }
172 
173  Indicator ma2;
174  {
175  std::ifstream ifs(filename);
176  boost::archive::xml_iarchive ia(ifs);
177  ia >> BOOST_SERIALIZATION_NVP(ma2);
178  }
179 
180  BOOST_CHECK(ma1.size() == ma2.size());
181  BOOST_CHECK(ma1.discard() == ma2.discard());
182  BOOST_CHECK(ma1.getResultNumber() == ma2.getResultNumber());
183  for (size_t i = 0; i < ma1.size(); ++i) {
184  BOOST_CHECK_CLOSE(ma1.get(i,0), ma2.get(i,0), 0.00001);
185  BOOST_CHECK_CLOSE(ma1.get(i,1), ma2.get(i,1), 0.00001);
186  BOOST_CHECK_CLOSE(ma1.get(i,2), ma2.get(i,2), 0.00001);
187  BOOST_CHECK_CLOSE(ma1.get(i,3), ma2.get(i,3), 0.00001);
188  BOOST_CHECK_CLOSE(ma1.get(i,4), ma2.get(i,4), 0.00001);
189  BOOST_CHECK_CLOSE(ma1.get(i,5), ma2.get(i,5), 0.00001);
190  }
191 }
192 
193 
195 BOOST_AUTO_TEST_CASE( test_PRICELIST_export ) {
196  StockManager& sm = StockManager::instance();
197  string filename(sm.tmpdir());
198  filename += "/PRICELIST.xml";
199 
200  PriceList d;
201  for (size_t i = 0; i < 20; ++i) {
202  d.push_back(i);
203  }
204 
205  Indicator ma1 = PRICELIST(d);
206  {
207  std::ofstream ofs(filename);
208  boost::archive::xml_oarchive oa(ofs);
209  oa << BOOST_SERIALIZATION_NVP(ma1);
210  }
211 
212  Indicator ma2;
213  {
214  std::ifstream ifs(filename);
215  boost::archive::xml_iarchive ia(ifs);
216  ia >> BOOST_SERIALIZATION_NVP(ma2);
217  }
218 
219  BOOST_CHECK(ma1.size() == ma2.size());
220  BOOST_CHECK(ma1.discard() == ma2.discard());
221  BOOST_CHECK(ma1.getResultNumber() == ma2.getResultNumber());
222  for (size_t i = 0; i < ma1.size(); ++i) {
223  BOOST_CHECK_CLOSE(ma1[i], ma2[i], 0.00001);
224  }
225 }
226 
227 
229 BOOST_AUTO_TEST_CASE( test_MACD_export ) {
230  StockManager& sm = StockManager::instance();
231  string filename(sm.tmpdir());
232  filename += "/MACD.xml";
233 
234  Stock stock = sm.getStock("sh000001");
235  KData kdata = stock.getKData(KQuery(-20));
236  Indicator ma1 = MACD(CLOSE(kdata));
237  {
238  std::ofstream ofs(filename);
239  boost::archive::xml_oarchive oa(ofs);
240  oa << BOOST_SERIALIZATION_NVP(ma1);
241  }
242 
243  Indicator ma2;
244  {
245  std::ifstream ifs(filename);
246  boost::archive::xml_iarchive ia(ifs);
247  ia >> BOOST_SERIALIZATION_NVP(ma2);
248  }
249 
250  BOOST_CHECK(ma1.size() == ma2.size());
251  BOOST_CHECK(ma1.discard() == ma2.discard());
252  BOOST_CHECK(ma1.getResultNumber() == ma2.getResultNumber());
253  for (size_t i = 0; i < ma1.size(); ++i) {
254  BOOST_CHECK_CLOSE(ma1.get(i,0), ma2.get(i,0), 0.00001);
255  BOOST_CHECK_CLOSE(ma1.get(i,1), ma2.get(i,1), 0.00001);
256  BOOST_CHECK_CLOSE(ma1.get(i,2), ma2.get(i,2), 0.00001);
257  }
258 }
259 
260 
262 BOOST_AUTO_TEST_CASE( test_SAFTYLOSS_export ) {
263  StockManager& sm = StockManager::instance();
264  string filename(sm.tmpdir());
265  filename += "/SAFTYLOSS.xml";
266 
267  Stock stock = sm.getStock("sh000001");
268  KData kdata = stock.getKData(KQuery(-20));
269  Indicator ma1 = SAFTYLOSS(CLOSE(kdata));
270  {
271  std::ofstream ofs(filename);
272  boost::archive::xml_oarchive oa(ofs);
273  oa << BOOST_SERIALIZATION_NVP(ma1);
274  }
275 
276  Indicator ma2;
277  {
278  std::ifstream ifs(filename);
279  boost::archive::xml_iarchive ia(ifs);
280  ia >> BOOST_SERIALIZATION_NVP(ma2);
281  }
282 
283  BOOST_CHECK(ma1.size() == ma2.size());
284  BOOST_CHECK(ma1.discard() == ma2.discard());
285  BOOST_CHECK(ma1.getResultNumber() == ma2.getResultNumber());
286  for (size_t i = 0; i < ma1.size(); ++i) {
287  BOOST_CHECK_CLOSE(ma1[i], ma2[i], 0.00001);
288  }
289 }
290 
291 
293 BOOST_AUTO_TEST_CASE( test_STDEV_export ) {
294  StockManager& sm = StockManager::instance();
295  string filename(sm.tmpdir());
296  filename += "/STDEV.xml";
297 
298  Stock stock = sm.getStock("sh000001");
299  KData kdata = stock.getKData(KQuery(-20));
300  Indicator ma1 = STDEV(CLOSE(kdata), 10);
301  {
302  std::ofstream ofs(filename);
303  boost::archive::xml_oarchive oa(ofs);
304  oa << BOOST_SERIALIZATION_NVP(ma1);
305  }
306 
307  Indicator ma2;
308  {
309  std::ifstream ifs(filename);
310  boost::archive::xml_iarchive ia(ifs);
311  ia >> BOOST_SERIALIZATION_NVP(ma2);
312  }
313 
314  BOOST_CHECK(ma1.size() == ma2.size());
315  BOOST_CHECK(ma1.discard() == ma2.discard());
316  BOOST_CHECK(ma1.getResultNumber() == ma2.getResultNumber());
317  for (size_t i = 0; i < ma1.size(); ++i) {
318  BOOST_CHECK_CLOSE(ma1[i], ma2[i], 0.00001);
319  }
320 }
321 
322 
324 BOOST_AUTO_TEST_CASE( test_VIGOR_export ) {
325  StockManager& sm = StockManager::instance();
326  string filename(sm.tmpdir());
327  filename += "/VIGOR.xml";
328 
329  Stock stock = sm.getStock("sh000001");
330  KData kdata = stock.getKData(KQuery(-20));
331  Indicator ma1 = VIGOR(kdata, 10);
332  {
333  std::ofstream ofs(filename);
334  boost::archive::xml_oarchive oa(ofs);
335  oa << BOOST_SERIALIZATION_NVP(ma1);
336  }
337 
338  Indicator ma2;
339  {
340  std::ifstream ifs(filename);
341  boost::archive::xml_iarchive ia(ifs);
342  ia >> BOOST_SERIALIZATION_NVP(ma2);
343  }
344 
345  BOOST_CHECK(ma1.size() == ma2.size());
346  BOOST_CHECK(ma1.discard() == ma2.discard());
347  BOOST_CHECK(ma1.getResultNumber() == ma2.getResultNumber());
348  for (size_t i = 0; i < ma1.size(); ++i) {
349  BOOST_CHECK_CLOSE(ma1[i], ma2[i], 0.00001);
350  }
351 }
352 
354 BOOST_AUTO_TEST_CASE( test_WAEVE_export ) {
355  StockManager& sm = StockManager::instance();
356  string filename(sm.tmpdir());
357  filename += "/WEAVE.xml";
358 
359  Stock stock = sm.getStock("sh000001");
360  KData kdata = stock.getKData(KQuery(-20));
361  Indicator c = CLOSE(kdata);
362  Indicator w1 = WEAVE(c);
363  Indicator w2 = w1(c);
364  {
365  std::ofstream ofs(filename);
366  boost::archive::xml_oarchive oa(ofs);
367  oa << BOOST_SERIALIZATION_NVP(w2);
368  }
369 
370  Indicator w3;
371  {
372  std::ifstream ifs(filename);
373  boost::archive::xml_iarchive ia(ifs);
374  ia >> BOOST_SERIALIZATION_NVP(w3);
375  }
376 
377  BOOST_CHECK(w2.size() == w3.size());
378  BOOST_CHECK(w2.discard() == w3.discard());
379  BOOST_CHECK(w1.getResultNumber() == 1);
380  BOOST_CHECK(w2.getResultNumber() == 2);
381  BOOST_CHECK(w2.getResultNumber() == w3.getResultNumber());
382  for (size_t i = 0; i < w2.size(); ++i) {
383  BOOST_CHECK_CLOSE(w2[i], w3[i], 0.00001);
384  }
385 }
386 
388 BOOST_AUTO_TEST_CASE( test_CVAL_export ) {
389  StockManager& sm = StockManager::instance();
390  string filename(sm.tmpdir());
391  filename += "/CVAL.xml";
392 
393  Stock stock = sm.getStock("sh000001");
394  KData kdata = stock.getKData(KQuery(-20));
395  Indicator ma1 = CVAL(CLOSE(kdata), 100.0);
396  {
397  std::ofstream ofs(filename);
398  boost::archive::xml_oarchive oa(ofs);
399  oa << BOOST_SERIALIZATION_NVP(ma1);
400  }
401 
402  Indicator ma2;
403  {
404  std::ifstream ifs(filename);
405  boost::archive::xml_iarchive ia(ifs);
406  ia >> BOOST_SERIALIZATION_NVP(ma2);
407  }
408 
409  BOOST_CHECK(ma1.size() == ma2.size());
410  BOOST_CHECK(ma1.discard() == ma2.discard());
411  BOOST_CHECK(ma1.getResultNumber() == ma2.getResultNumber());
412  for (size_t i = 0; i < ma1.size(); ++i) {
413  BOOST_CHECK_CLOSE(ma1[i], ma2[i], 0.00001);
414  }
415 }
416 
419 #endif /* HKU_SUPPORT_SERIALIZATION */
420 
BOOST_AUTO_TEST_CASE(test_Datetime)