9 #include <boost/test/unit_test.hpp> 11 #define BOOST_TEST_MODULE test_hikyuu_indicator_suite 12 #include <boost/test/unit_test.hpp> 17 #if HKU_SUPPORT_SERIALIZATION 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> 35 StockManager& sm = StockManager::instance();
36 string filename(sm.tmpdir());
37 filename +=
"/AMA.xml";
39 Stock stock = sm.getStock(
"sh000001");
40 KData kdata = stock.getKData(KQuery(-20));
41 Indicator ma1 = AMA(CLOSE(kdata), 10);
43 std::ofstream ofs(filename);
44 boost::archive::xml_oarchive oa(ofs);
45 oa << BOOST_SERIALIZATION_NVP(ma1);
50 std::ifstream ifs(filename);
51 boost::archive::xml_iarchive ia(ifs);
52 ia >> BOOST_SERIALIZATION_NVP(ma2);
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);
67 StockManager& sm = StockManager::instance();
68 string filename(sm.tmpdir());
69 filename +=
"/DIFF.xml";
71 Stock stock = sm.getStock(
"sh000001");
72 KData kdata = stock.getKData(KQuery(-20));
73 Indicator ma1 = DIFF(CLOSE(kdata));
75 std::ofstream ofs(filename);
76 boost::archive::xml_oarchive oa(ofs);
77 oa << BOOST_SERIALIZATION_NVP(ma1);
82 std::ifstream ifs(filename);
83 boost::archive::xml_iarchive ia(ifs);
84 ia >> BOOST_SERIALIZATION_NVP(ma2);
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);
98 StockManager& sm = StockManager::instance();
99 string filename(sm.tmpdir());
100 filename +=
"/MA.xml";
102 Stock stock = sm.getStock(
"sh000001");
103 KData kdata = stock.getKData(KQuery(-20));
104 Indicator ma1 = MA(CLOSE(kdata), 10);
106 std::ofstream ofs(filename);
107 boost::archive::xml_oarchive oa(ofs);
108 oa << BOOST_SERIALIZATION_NVP(ma1);
113 std::ifstream ifs(filename);
114 boost::archive::xml_iarchive ia(ifs);
115 ia >> BOOST_SERIALIZATION_NVP(ma2);
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);
129 StockManager& sm = StockManager::instance();
130 string filename(sm.tmpdir());
131 filename +=
"/EMA.xml";
133 Stock stock = sm.getStock(
"sh000001");
134 KData kdata = stock.getKData(KQuery(-20));
135 Indicator ma1 = EMA(CLOSE(kdata), 10);
137 std::ofstream ofs(filename);
138 boost::archive::xml_oarchive oa(ofs);
139 oa << BOOST_SERIALIZATION_NVP(ma1);
144 std::ifstream ifs(filename);
145 boost::archive::xml_iarchive ia(ifs);
146 ia >> BOOST_SERIALIZATION_NVP(ma2);
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);
160 StockManager& sm = StockManager::instance();
161 string filename(sm.tmpdir());
162 filename +=
"/IKDATA.xml";
164 Stock stock = sm.getStock(
"sh000001");
165 KData kdata = stock.getKData(KQuery(-20));
166 Indicator ma1 = KDATA(kdata);
168 std::ofstream ofs(filename);
169 boost::archive::xml_oarchive oa(ofs);
170 oa << BOOST_SERIALIZATION_NVP(ma1);
175 std::ifstream ifs(filename);
176 boost::archive::xml_iarchive ia(ifs);
177 ia >> BOOST_SERIALIZATION_NVP(ma2);
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);
196 StockManager& sm = StockManager::instance();
197 string filename(sm.tmpdir());
198 filename +=
"/PRICELIST.xml";
201 for (
size_t i = 0; i < 20; ++i) {
205 Indicator ma1 = PRICELIST(d);
207 std::ofstream ofs(filename);
208 boost::archive::xml_oarchive oa(ofs);
209 oa << BOOST_SERIALIZATION_NVP(ma1);
214 std::ifstream ifs(filename);
215 boost::archive::xml_iarchive ia(ifs);
216 ia >> BOOST_SERIALIZATION_NVP(ma2);
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);
230 StockManager& sm = StockManager::instance();
231 string filename(sm.tmpdir());
232 filename +=
"/MACD.xml";
234 Stock stock = sm.getStock(
"sh000001");
235 KData kdata = stock.getKData(KQuery(-20));
236 Indicator ma1 = MACD(CLOSE(kdata));
238 std::ofstream ofs(filename);
239 boost::archive::xml_oarchive oa(ofs);
240 oa << BOOST_SERIALIZATION_NVP(ma1);
245 std::ifstream ifs(filename);
246 boost::archive::xml_iarchive ia(ifs);
247 ia >> BOOST_SERIALIZATION_NVP(ma2);
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);
263 StockManager& sm = StockManager::instance();
264 string filename(sm.tmpdir());
265 filename +=
"/SAFTYLOSS.xml";
267 Stock stock = sm.getStock(
"sh000001");
268 KData kdata = stock.getKData(KQuery(-20));
269 Indicator ma1 = SAFTYLOSS(CLOSE(kdata));
271 std::ofstream ofs(filename);
272 boost::archive::xml_oarchive oa(ofs);
273 oa << BOOST_SERIALIZATION_NVP(ma1);
278 std::ifstream ifs(filename);
279 boost::archive::xml_iarchive ia(ifs);
280 ia >> BOOST_SERIALIZATION_NVP(ma2);
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);
294 StockManager& sm = StockManager::instance();
295 string filename(sm.tmpdir());
296 filename +=
"/STDEV.xml";
298 Stock stock = sm.getStock(
"sh000001");
299 KData kdata = stock.getKData(KQuery(-20));
300 Indicator ma1 = STDEV(CLOSE(kdata), 10);
302 std::ofstream ofs(filename);
303 boost::archive::xml_oarchive oa(ofs);
304 oa << BOOST_SERIALIZATION_NVP(ma1);
309 std::ifstream ifs(filename);
310 boost::archive::xml_iarchive ia(ifs);
311 ia >> BOOST_SERIALIZATION_NVP(ma2);
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);
325 StockManager& sm = StockManager::instance();
326 string filename(sm.tmpdir());
327 filename +=
"/VIGOR.xml";
329 Stock stock = sm.getStock(
"sh000001");
330 KData kdata = stock.getKData(KQuery(-20));
331 Indicator ma1 = VIGOR(kdata, 10);
333 std::ofstream ofs(filename);
334 boost::archive::xml_oarchive oa(ofs);
335 oa << BOOST_SERIALIZATION_NVP(ma1);
340 std::ifstream ifs(filename);
341 boost::archive::xml_iarchive ia(ifs);
342 ia >> BOOST_SERIALIZATION_NVP(ma2);
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);
355 StockManager& sm = StockManager::instance();
356 string filename(sm.tmpdir());
357 filename +=
"/WEAVE.xml";
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);
365 std::ofstream ofs(filename);
366 boost::archive::xml_oarchive oa(ofs);
367 oa << BOOST_SERIALIZATION_NVP(w2);
372 std::ifstream ifs(filename);
373 boost::archive::xml_iarchive ia(ifs);
374 ia >> BOOST_SERIALIZATION_NVP(w3);
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);
389 StockManager& sm = StockManager::instance();
390 string filename(sm.tmpdir());
391 filename +=
"/CVAL.xml";
393 Stock stock = sm.getStock(
"sh000001");
394 KData kdata = stock.getKData(KQuery(-20));
395 Indicator ma1 = CVAL(CLOSE(kdata), 100.0);
397 std::ofstream ofs(filename);
398 boost::archive::xml_oarchive oa(ofs);
399 oa << BOOST_SERIALIZATION_NVP(ma1);
404 std::ifstream ifs(filename);
405 boost::archive::xml_iarchive ia(ifs);
406 ia >> BOOST_SERIALIZATION_NVP(ma2);
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);
BOOST_AUTO_TEST_CASE(test_Datetime)