test_doc
test_MA.cpp
浏览该文件的文档.
1 /*
2  * test_MA.cpp
3  *
4  * Created on: 2013-2-12
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/StockManager.h>
16 #include <hikyuu/indicator/crt/MA.h>
17 #include <hikyuu/indicator/crt/KDATA.h>
18 #include <hikyuu/indicator/crt/PRICELIST.h>
19 
20 using namespace hku;
21 
30  StockManager& sm = StockManager::instance();
31  Stock stock = sm.getStock("sh000001");
32  KData kdata;
33  Indicator open, ma;
34 
36  open = OPEN(kdata);
37  ma = MA(open, 3);
38  BOOST_CHECK(ma.size() == 0);
39  BOOST_CHECK(ma.empty() == true);
40 
42  kdata = stock.getKData(KQuery(-10));
43  open = OPEN(kdata);
44  ma = MA(open, 0);
45  BOOST_CHECK(ma.empty() == false);
46  BOOST_CHECK(ma.size() == kdata.size());
47  BOOST_CHECK(ma.discard() == 0);
48  for (size_t i = 0; i < kdata.size(); ++i) {
49  BOOST_CHECK(ma[i] == Null<price_t>());
50  }
51 
53  kdata = stock.getKData(KQuery(-10));
54  open = OPEN(kdata);
55  ma = MA(open, 10);
56  BOOST_CHECK(ma.empty() == false);
57  BOOST_CHECK(ma.size() == kdata.size());
58  BOOST_CHECK(ma.discard() == 0);
59  BOOST_CHECK(std::fabs(ma[0] - 2415.197) < 0.00001);
60  BOOST_CHECK(std::fabs(ma[1] - 2397.1715) < 0.00001);
61  BOOST_CHECK(std::fabs(ma[2] - 2395.890) < 0.00001);
62  BOOST_CHECK(std::fabs(ma[3] - 2392.89075) < 0.00001);
63  BOOST_CHECK(std::fabs(ma[4] - 2394.1114) < 0.00001);
64  BOOST_CHECK(std::fabs(ma[5] - 2396.14767) < 0.00001);
65  BOOST_CHECK(std::fabs(ma[6] - 2395.62443) < 0.00001);
66  BOOST_CHECK(std::fabs(ma[7] - 2393.03375) < 0.00001);
67  BOOST_CHECK(std::fabs(ma[8] - 2389.709) < 0.00001);
68  BOOST_CHECK(std::fabs(ma[9] - 2383.4041) < 0.00001);
69 
71  kdata = stock.getKData(KQuery(-9));
72  open = OPEN(kdata);
73  ma = MA(open, 10);
74  BOOST_CHECK(ma.empty() == false);
75  BOOST_CHECK(ma.size() == kdata.size());
76  BOOST_CHECK(ma.discard() == 0);
77  BOOST_CHECK(std::fabs(ma[0] - 2379.146) < 0.00001);
78  BOOST_CHECK(std::fabs(ma[1] - 2386.2365) < 0.00001);
79  BOOST_CHECK(std::fabs(ma[2] - 2385.45533) < 0.00001);
80  BOOST_CHECK(std::fabs(ma[3] - 2388.84) < 0.00001);
81  BOOST_CHECK(std::fabs(ma[7] - 2386.523) < 0.00001);
82  BOOST_CHECK(std::fabs(ma[8] - 2379.87156) < 0.00001);
83 
85  kdata = stock.getKData(KQuery(-11));
86  open = OPEN(kdata);
87  ma = MA(open, 10);
88  BOOST_CHECK(ma.empty() == false);
89  BOOST_CHECK(ma.size() == kdata.size());
90  BOOST_CHECK(ma.discard() == 0);
91  BOOST_CHECK(std::fabs(ma[0] - 2400.984) < 0.00001);
92  BOOST_CHECK(std::fabs(ma[8] - 2393.91711) < 0.00001);
93  BOOST_CHECK(std::fabs(ma[9] - 2390.8365) < 0.00001);
94  BOOST_CHECK(std::fabs(ma[10] - 2383.4041) < 0.00001);
95 
97  kdata = stock.getKData(KQuery(-11));
98  open = OPEN(kdata);
99  ma = MA(open, 1);
100  BOOST_CHECK(ma.empty() == false);
101  BOOST_CHECK(ma.size() == kdata.size());
102  BOOST_CHECK(ma.discard() == 0);
103  for (size_t i = 0; i < open.size(); ++i) {
104  BOOST_CHECK(std::fabs(ma[i] - open[i]) < 0.0001);
105  }
106 
108  PriceList data;
109  for (int i = 0; i < 10; ++i) {
110  data.push_back(i);
111  }
112 
113  Indicator d = PRICELIST(data);
114  Indicator ma1 = MA(d, 2);
115  Indicator ma2 = MA(ma1, 2);
116  BOOST_CHECK(ma1.discard() == 0);
117  BOOST_CHECK(ma2.discard() == 0);
118  BOOST_CHECK(ma1[0] == data[0]);
119  BOOST_CHECK(ma1[1] == (data[0]+data[1])/2);
120  BOOST_CHECK(ma1[2] == 1.5);
121  BOOST_CHECK(ma1[3] == 2.5);
122  BOOST_CHECK(ma2[0] == ma1[0]);
123  BOOST_CHECK(ma2[1] == (ma1[0]+ma1[1])/2);
124  BOOST_CHECK(ma2[2] == 1.0);
125  BOOST_CHECK(ma2[3] == 2.0);
126 
128  ma = MA(2);
129  ma1 = MA(d, 2);
130  ma2 = ma(d);
131  BOOST_CHECK(ma.size() == 0);
132  BOOST_CHECK(ma1.size() == 10);
133  BOOST_CHECK(ma1.size() == ma2.size());
134  for (size_t i = 0; i < ma1.size(); ++i) {
135  BOOST_CHECK(ma1[i] == ma2[i]);
136  }
137 }
138 
BOOST_AUTO_TEST_CASE(test_MA)
Definition: test_MA.cpp:29