test_doc
test_MACD.cpp
浏览该文件的文档.
1 /*
2  * test_MACD.cpp
3  *
4  * Created on: 2013-4-11
5  * Author: fasiondog
6  */
7 
8 
9 #ifdef TEST_ALL_IN_ONE
10  #include <boost/test/unit_test.hpp>
11 #else
12  #define BOOST_TEST_MODULE test_hikyuu_indicator_suite
13  #include <boost/test/unit_test.hpp>
14 #endif
15 
16 #include <hikyuu/indicator/crt/MACD.h>
17 #include <hikyuu/indicator/crt/PRICELIST.h>
18 #include <hikyuu/indicator/crt/EMA.h>
19 
20 using namespace hku;
21 
29 BOOST_AUTO_TEST_CASE( test_MACD ) {
30  PriceList d;
31  for (size_t i = 0; i < 20; ++i) {
32  d.push_back(i);
33  }
34 
35  Indicator ind = PRICELIST(d);
36  Indicator macd, bar, diff, dea;
37  Indicator ema1, ema2, fast, slow, bmacd;
38 
40  macd = MACD(Indicator(), 12, 26, 9);
41  BOOST_CHECK(macd.size() == 0);
42  BOOST_CHECK(macd.empty() == true);
43 
45  macd = MACD(ind, 1, 1, 1);
46  BOOST_CHECK(macd.getResultNumber() == 3);
47  bar = macd.getResult(0);
48  diff = macd.getResult(1);
49  dea = macd.getResult(2);
50  BOOST_CHECK(bar.size() == 20);
51  BOOST_CHECK(diff.size() == 20);
52  BOOST_CHECK(dea.size() == 20);
53 
54  BOOST_CHECK(diff[0] == 0);
55  BOOST_CHECK(diff[1] == 0);
56  BOOST_CHECK(diff[19] == 0);
57 
58  BOOST_CHECK(dea[0] == 0);
59  BOOST_CHECK(dea[1] == 0);
60  BOOST_CHECK(dea[19] == 0);
61 
62  BOOST_CHECK(bar[0] == 0);
63  BOOST_CHECK(bar[1] == 0);
64  BOOST_CHECK(bar[19] == 0);
65 
67  macd = MACD(ind, 1, 2, 3);
68  BOOST_CHECK(macd.size() == 20);
69  BOOST_CHECK(macd.discard() == 0);
70  bar = macd.getResult(0);
71  diff = macd.getResult(1);
72  dea = macd.getResult(2);
73  ema1 = EMA(ind, 1);
74  ema2 = EMA(ind, 2);
75  fast = ema1 - ema2;
76  slow = EMA(fast, 3);
77  bmacd = fast - slow;
78  BOOST_CHECK(bar.size() == 20);
79  BOOST_CHECK(diff.size() == 20);
80  BOOST_CHECK(dea.size() == 20);
81 
82  BOOST_CHECK(diff[0] == fast[0]);
83  BOOST_CHECK(diff[1] == fast[1]);
84  BOOST_CHECK(diff[19] == fast[19]);
85 
86  BOOST_CHECK(dea[0] == slow[0]);
87  BOOST_CHECK(std::fabs(dea[1] - slow[1]) < 0.0001);
88  BOOST_CHECK(dea[19] == slow[19]);
89 
90  BOOST_CHECK(bar[0] == bmacd[0]);
91  BOOST_CHECK(bar[1] == bmacd[1]);
92  BOOST_CHECK(bar[19] == bmacd[19]);
93 
95  macd = MACD(ind, 3, 2, 1);
96  BOOST_CHECK(macd.size() == 20);
97  BOOST_CHECK(macd.discard() == 0);
98  bar = macd.getResult(0);
99  diff = macd.getResult(1);
100  dea = macd.getResult(2);
101  ema1 = EMA(ind, 3);
102  ema2 = EMA(ind, 2);
103  fast = ema1 - ema2;
104  slow = EMA(fast, 1);
105  bmacd = fast - slow;
106  BOOST_CHECK(bar.size() == 20);
107  BOOST_CHECK(diff.size() == 20);
108  BOOST_CHECK(dea.size() == 20);
109 
110  BOOST_CHECK(diff[0] == fast[0]);
111  BOOST_CHECK(diff[1] == fast[1]);
112  BOOST_CHECK(diff[19] == fast[19]);
113 
114  BOOST_CHECK(dea[0] == slow[0]);
115  BOOST_CHECK(dea[1] == slow[1]);
116  BOOST_CHECK(dea[19] == slow[19]);
117 
118  BOOST_CHECK(bar[0] == bmacd[0]);
119  BOOST_CHECK(bar[1] == bmacd[1]);
120  BOOST_CHECK(bar[19] == bmacd[19]);
121 
123  macd = MACD(ind, 3, 5, 2);
124  BOOST_CHECK(macd.size() == 20);
125  BOOST_CHECK(macd.discard() == 0);
126  bar = macd.getResult(0);
127  diff = macd.getResult(1);
128  dea = macd.getResult(2);
129  ema1 = EMA(ind, 3);
130  ema2 = EMA(ind, 5);
131  fast = ema1 - ema2;
132  slow = EMA(fast, 2);
133  bmacd = fast - slow;
134  BOOST_CHECK(bar.size() == 20);
135  BOOST_CHECK(diff.size() == 20);
136  BOOST_CHECK(dea.size() == 20);
137 
138  BOOST_CHECK(diff[0] == fast[0]);
139  BOOST_CHECK(diff[1] == fast[1]);
140  BOOST_CHECK(diff[19] == fast[19]);
141 
142  BOOST_CHECK(dea[0] == slow[0]);
143  BOOST_CHECK(dea[1] == slow[1]);
144  BOOST_CHECK(dea[19] == slow[19]);
145 
146  BOOST_CHECK(bar[0] == bmacd[0]);
147  BOOST_CHECK(bar[1] == bmacd[1]);
148  BOOST_CHECK(bar[19] == bmacd[19]);
149 
151  Indicator expect = MACD(ind, 3, 5, 2);
152  Indicator tmp = MACD(3, 5, 2);
153  Indicator result = tmp(ind);
154  BOOST_CHECK(result.size() == expect.size());
155  for (size_t i = 0; i < expect.size(); ++i) {
156  BOOST_CHECK(result.get(i, 0) == expect.get(i, 0));
157  BOOST_CHECK(result.get(i, 1) == expect.get(i, 1));
158  BOOST_CHECK(result.get(i, 2) == expect.get(i, 2));
159  }
160 }
161 
BOOST_AUTO_TEST_CASE(test_MACD)
Definition: test_MACD.cpp:29