9 #include <boost/test/unit_test.hpp> 11 #define BOOST_TEST_MODULE test_hikyuu_indicator_suite 12 #include <boost/test/unit_test.hpp> 15 #include <hikyuu/indicator/Indicator.h> 16 #include <hikyuu/indicator/crt/PRICELIST.h> 17 #include <hikyuu/indicator/crt/KDATA.h> 18 #include <hikyuu/StockManager.h> 32 for (
size_t i = 0; i < 10; ++i) {
37 Indicator data1 = PRICELIST(d1);
38 Indicator data2 = PRICELIST(d2);
39 Indicator result = data1 + data2;
40 BOOST_CHECK(result.size() == 10);
41 BOOST_CHECK(result.getResultNumber() == 1);
42 BOOST_CHECK(result.discard() == 0);
43 for (
size_t i = 0; i < 10; ++i) {
44 BOOST_CHECK(result[i] == i + i + 1);
49 result = data1 + data3;
50 BOOST_CHECK(result.empty());
51 BOOST_CHECK(result.size() == 0);
54 StockManager& sm = StockManager::instance();
55 Stock stock = sm.getStock(
"sh600000");
57 KData kdata = stock.getKData(query);
58 Indicator k = KDATA(kdata);
59 BOOST_CHECK(k.size() == data1.size());
61 BOOST_CHECK(result.size() == k.size());
62 BOOST_CHECK(result.getResultNumber() == 1);
63 for (
size_t i = 0; i < result.size(); ++i) {
64 BOOST_CHECK(result[i] == (k[i] + data1[i]));
72 for (
size_t i = 0; i < 10; ++i) {
77 Indicator data1 = PRICELIST(d1);
78 Indicator data2 = PRICELIST(d2);
79 Indicator result = data1 - data2;
80 BOOST_CHECK(result.size() == 10);
81 BOOST_CHECK(result.getResultNumber() == 1);
82 BOOST_CHECK(result.discard() == 0);
83 for (
size_t i = 0; i < 10; ++i) {
84 BOOST_CHECK(result[i] == data1[i] - data2[i]);
89 result = data1 - data3;
90 BOOST_CHECK(result.empty());
91 BOOST_CHECK(result.size() == 0);
94 StockManager& sm = StockManager::instance();
95 Stock stock = sm.getStock(
"sh600000");
97 KData kdata = stock.getKData(query);
98 Indicator k = KDATA(kdata);
99 BOOST_CHECK(k.size() == data1.size());
101 BOOST_CHECK(result.size() == k.size());
102 for (
size_t i = 0; i < result.size(); ++i) {
103 BOOST_CHECK(result[i] == (k[i] - data1[i]));
112 for (
size_t i = 0; i < 10; ++i) {
117 Indicator data1 = PRICELIST(d1);
118 Indicator data2 = PRICELIST(d2);
119 Indicator result = data1 * data2;
120 BOOST_CHECK(result.size() == 10);
121 BOOST_CHECK(result.getResultNumber() == 1);
122 BOOST_CHECK(result.discard() == 0);
123 for (
size_t i = 0; i < 10; ++i) {
124 BOOST_CHECK(result[i] == data1[i] * data2[i]);
129 result = data1 * data3;
130 BOOST_CHECK(result.empty());
131 BOOST_CHECK(result.size() == 0);
134 StockManager& sm = StockManager::instance();
135 Stock stock = sm.getStock(
"sh600000");
137 KData kdata = stock.getKData(query);
138 Indicator k = KDATA(kdata);
139 BOOST_CHECK(k.size() == data1.size());
141 BOOST_CHECK(result.size() == k.size());
142 for (
size_t i = 0; i < result.size(); ++i) {
143 BOOST_CHECK(result[i] == (k[i] * data1[i]));
152 for (
size_t i = 0; i < 10; ++i) {
157 Indicator data1 = PRICELIST(d1);
158 Indicator data2 = PRICELIST(d2);
159 Indicator result = data2 / data1;
160 BOOST_CHECK(result.size() == 10);
161 BOOST_CHECK(result.getResultNumber() == 1);
162 BOOST_CHECK(result.discard() == 0);
163 for (
size_t i = 0; i < 10; ++i) {
164 if (data1[i] == 0.0) {
165 BOOST_CHECK(result[i] == Null<price_t>());
167 BOOST_CHECK(result[i] == data2[i] / data1[i]);
173 result = data1 / data3;
174 BOOST_CHECK(result.empty());
175 BOOST_CHECK(result.size() == 0);
178 StockManager& sm = StockManager::instance();
179 Stock stock = sm.getStock(
"sh600000");
181 KData kdata = stock.getKData(query);
182 Indicator k = KDATA(kdata);
183 BOOST_CHECK(k.size() == data1.size());
185 BOOST_CHECK(result.size() == k.size());
186 for (
size_t i = 0; i < result.size(); ++i) {
187 if (data1[i] == 0.0) {
188 BOOST_CHECK(result[i] == Null<price_t>());
190 BOOST_CHECK(result[i] == (k[i] / data1[i]));
199 for (
size_t i = 0; i < 10; ++i) {
204 Indicator data1 = PRICELIST(d1);
205 Indicator data2 = PRICELIST(d2);
206 Indicator result = (data2 == data1);
207 BOOST_CHECK(result.size() == 10);
208 BOOST_CHECK(result.getResultNumber() == 1);
209 BOOST_CHECK(result.discard() == 0);
210 for (
size_t i = 0; i < 10; ++i) {
211 BOOST_CHECK(result[i] ==
true);
216 result = (data1 == data3);
217 BOOST_CHECK(result.empty());
218 BOOST_CHECK(result.size() == 0);
221 StockManager& sm = StockManager::instance();
222 Stock stock = sm.getStock(
"sh600000");
224 KData kdata = stock.getKData(query);
225 Indicator k = KDATA(kdata);
226 BOOST_CHECK(k.size() == data1.size());
227 result = (k == data1);
228 BOOST_CHECK(result.size() == k.size());
229 for (
size_t i = 0; i < result.size(); ++i) {
230 BOOST_CHECK(result[i] ==
false);
238 for (
size_t i = 0; i < 10; ++i) {
243 Indicator data1 = PRICELIST(d1);
244 Indicator data2 = PRICELIST(d2);
245 Indicator result = (data2 != data1);
246 BOOST_CHECK(result.size() == 10);
247 BOOST_CHECK(result.getResultNumber() == 1);
248 BOOST_CHECK(result.discard() == 0);
249 for (
size_t i = 0; i < 10; ++i) {
250 BOOST_CHECK(result[i] ==
false);
255 result = (data1 != data3);
256 BOOST_CHECK(result.empty());
257 BOOST_CHECK(result.size() == 0);
260 StockManager& sm = StockManager::instance();
261 Stock stock = sm.getStock(
"sh600000");
263 KData kdata = stock.getKData(query);
264 Indicator k = KDATA(kdata);
265 BOOST_CHECK(k.size() == data1.size());
266 result = (k != data1);
267 BOOST_CHECK(result.size() == k.size());
268 for (
size_t i = 0; i < result.size(); ++i) {
269 BOOST_CHECK(result[i] ==
true);
275 PriceList d1, d2, d3;
276 for (
size_t i = 0; i < 10; ++i) {
282 Indicator data1 = PRICELIST(d1);
283 Indicator data2 = PRICELIST(d2);
284 Indicator data3 = PRICELIST(d3);
287 Indicator result = (data3 > data1);
288 BOOST_CHECK(result.size() == 10);
289 BOOST_CHECK(result.getResultNumber() == 1);
290 BOOST_CHECK(result.discard() == 0);
291 for (
size_t i = 0; i < 10; ++i) {
292 BOOST_CHECK(result[i] == 1.0);
296 result = (data1 > data3);
297 for (
size_t i = 0; i < 10; ++i) {
298 BOOST_CHECK(result[i] == 0.0);
302 result = (data1 > data2);
303 for (
size_t i = 0; i < 10; ++i) {
304 BOOST_CHECK(result[i] == 0.0);
309 result = data1 > data4;
310 BOOST_CHECK(result.empty());
311 BOOST_CHECK(result.size() == 0);
314 StockManager& sm = StockManager::instance();
315 Stock stock = sm.getStock(
"sh600000");
317 KData kdata = stock.getKData(query);
318 Indicator k = KDATA(kdata);
319 BOOST_CHECK(k.size() == data1.size());
320 result = (k > data1);
321 BOOST_CHECK(result.size() == k.size());
322 for (
size_t i = 0; i < result.size(); ++i) {
323 BOOST_CHECK(result[i] == 1.0);
329 PriceList d1, d2, d3;
330 for (
size_t i = 0; i < 10; ++i) {
336 Indicator data1 = PRICELIST(d1);
337 Indicator data2 = PRICELIST(d2);
338 Indicator data3 = PRICELIST(d3);
341 Indicator result = (data3 >= data1);
342 BOOST_CHECK(result.size() == 10);
343 BOOST_CHECK(result.getResultNumber() == 1);
344 BOOST_CHECK(result.discard() == 0);
345 for (
size_t i = 0; i < 10; ++i) {
346 BOOST_CHECK(result[i] == 1.0);
350 result = (data1 >= data3);
351 for (
size_t i = 0; i < 10; ++i) {
352 BOOST_CHECK(result[i] == 0.0);
356 result = (data1 >= data2);
357 for (
size_t i = 0; i < 10; ++i) {
358 BOOST_CHECK(result[i] == 1.0);
363 result = data1 >= data4;
364 BOOST_CHECK(result.empty());
365 BOOST_CHECK(result.size() == 0);
368 StockManager& sm = StockManager::instance();
369 Stock stock = sm.getStock(
"sh600000");
371 KData kdata = stock.getKData(query);
372 Indicator k = KDATA(kdata);
373 BOOST_CHECK(k.size() == data1.size());
374 result = (k >= data1);
375 BOOST_CHECK(result.size() == k.size());
376 for (
size_t i = 0; i < result.size(); ++i) {
377 BOOST_CHECK(result[i] == 1.0);
383 PriceList d1, d2, d3;
384 for (
size_t i = 0; i < 10; ++i) {
390 Indicator data1 = PRICELIST(d1);
391 Indicator data2 = PRICELIST(d2);
392 Indicator data3 = PRICELIST(d3);
395 Indicator result = (data3 < data1);
396 BOOST_CHECK(result.size() == 10);
397 BOOST_CHECK(result.getResultNumber() == 1);
398 BOOST_CHECK(result.discard() == 0);
399 for (
size_t i = 0; i < 10; ++i) {
400 BOOST_CHECK(result[i] == 0.0);
404 result = (data1 < data3);
405 for (
size_t i = 0; i < 10; ++i) {
406 BOOST_CHECK(result[i] == 1.0);
410 result = (data1 < data2);
411 for (
size_t i = 0; i < 10; ++i) {
412 BOOST_CHECK(result[i] == 0.0);
417 result = data1 < data4;
418 BOOST_CHECK(result.empty());
419 BOOST_CHECK(result.size() == 0);
422 StockManager& sm = StockManager::instance();
423 Stock stock = sm.getStock(
"sh600000");
425 KData kdata = stock.getKData(query);
426 Indicator k = KDATA(kdata);
427 BOOST_CHECK(k.size() == data1.size());
428 result = (k < data1);
429 BOOST_CHECK(result.size() == k.size());
430 for (
size_t i = 0; i < result.size(); ++i) {
431 BOOST_CHECK(result[i] == 0.0);
437 PriceList d1, d2, d3;
438 for (
size_t i = 0; i < 10; ++i) {
444 Indicator data1 = PRICELIST(d1);
445 Indicator data2 = PRICELIST(d2);
446 Indicator data3 = PRICELIST(d3);
449 Indicator result = (data3 <= data1);
450 BOOST_CHECK(result.size() == 10);
451 BOOST_CHECK(result.getResultNumber() == 1);
452 BOOST_CHECK(result.discard() == 0);
453 for (
size_t i = 0; i < 10; ++i) {
454 BOOST_CHECK(result[i] == 0.0);
458 result = (data1 <= data3);
459 for (
size_t i = 0; i < 10; ++i) {
460 BOOST_CHECK(result[i] == 1.0);
464 result = (data1 <= data2);
465 for (
size_t i = 0; i < 10; ++i) {
466 BOOST_CHECK(result[i] == 1.0);
471 result = data1 <= data4;
472 BOOST_CHECK(result.empty());
473 BOOST_CHECK(result.size() == 0);
476 StockManager& sm = StockManager::instance();
477 Stock stock = sm.getStock(
"sh600000");
479 KData kdata = stock.getKData(query);
480 Indicator k = KDATA(kdata);
481 BOOST_CHECK(k.size() == data1.size());
482 result = (k <= data1);
483 BOOST_CHECK(result.size() == k.size());
484 for (
size_t i = 0; i < result.size(); ++i) {
485 BOOST_CHECK(result[i] == 0.0);
492 StockManager& sm = StockManager::instance();
493 Stock stock = sm.getStock(
"sh600000");
496 Indicator ikdata, result1;
500 ikdata = KDATA(kdata);
501 result1 = ikdata.getResult(0);
502 result2 = ikdata.getResultAsPriceList(0);
503 BOOST_CHECK(result1.size() == 0);
504 BOOST_CHECK(result2.size() == 0);
507 query = KQuery(0, 10);
508 kdata = stock.getKData(query);
509 ikdata = KDATA(kdata);
510 BOOST_CHECK(ikdata.size() == 10);
511 result1 = ikdata.getResult(6);
512 result2 = ikdata.getResultAsPriceList(6);
513 BOOST_CHECK(result1.size() == 0);
514 BOOST_CHECK(result2.size() == 0);
517 result1 = ikdata.getResult(0);
518 result2 = ikdata.getResultAsPriceList(1);
519 BOOST_CHECK(result1.size() == 10);
520 BOOST_CHECK(result2.size() == 10);
521 BOOST_CHECK(result1[0] == 29.5);
522 BOOST_CHECK(std::fabs(result1[1] - 27.58) < 0.0001);
523 BOOST_CHECK(result1[9] == 26.45);
525 BOOST_CHECK(result2[0] == 29.8);
526 BOOST_CHECK(result2[1] == 28.38);
527 BOOST_CHECK(result2[9] == 26.55);
BOOST_AUTO_TEST_CASE(test_operator_add)