test_doc
test_export.cpp
浏览该文件的文档.
1 /*
2  * test_export.cpp
3  *
4  * Created on: 2013-4-29
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_trade_manage_suite
12  #include <boost/test/unit_test.hpp>
13 #endif
14 
15 #include <hikyuu/config.h>
16 
17 #include <fstream>
18 #include <boost/archive/xml_oarchive.hpp>
19 #include <boost/archive/xml_iarchive.hpp>
20 #include <hikyuu/StockManager.h>
21 #include <hikyuu/trade_manage/TradeManager.h>
22 #include <hikyuu/trade_manage/crt/crtTM.h>
23 #include <hikyuu/trade_manage/crt/TC_FixedA.h>
24 
25 using namespace hku;
26 
27 #if HKU_SUPPORT_SERIALIZATION
28 
36 BOOST_AUTO_TEST_CASE( test_CostRecord_export ) {
37  string filename(StockManager::instance().tmpdir());
38  filename += "/CostRecord.xml";
39 
40  CostRecord cost(10.1, 5.3, 1.0, 0.7, 17.1);
41  {
42  std::ofstream ofs(filename);
43  boost::archive::xml_oarchive oa(ofs);
44  oa << BOOST_SERIALIZATION_NVP(cost);
45  }
46 
47  CostRecord cost2;
48  {
49  std::ifstream ifs(filename);
50  boost::archive::xml_iarchive ia(ifs);
51  ia >> BOOST_SERIALIZATION_NVP(cost2);
52  }
53 
54  BOOST_CHECK(cost == cost2);
55  BOOST_CHECK_CLOSE(cost.commission, cost2.commission, 0.00001);
56  BOOST_CHECK_CLOSE(cost.stamptax, cost2.stamptax, 0.00001);
57  BOOST_CHECK_CLOSE(cost.transferfee, cost2.transferfee, 0.00001);
58  BOOST_CHECK_CLOSE(cost.others, cost2.others, 0.00001);
59  BOOST_CHECK_CLOSE(cost.total, cost2.total, 0.00001);
60 }
61 
62 
64 BOOST_AUTO_TEST_CASE( test_TradeRecord_export ) {
65  StockManager& sm = StockManager::instance();
66  string filename(sm.tmpdir());
67  filename += "/TradeRecord.xml";
68 
69  Stock stock = sm.getStock("sh600000");
70 
71  TradeRecord record1;
72  record1.stock = stock;
73  record1.datetime = Datetime(201305011935);
74  record1.business = BUSINESS_BUY;
75  record1.planPrice = 10.0;
76  record1.realPrice = 10.13;
77  record1.goalPrice = 20.15;
78  record1.number = 1000;
79  record1.stoploss = 9.77;
80  record1.cash = 99998.1;
81  record1.from = PART_SIGNAL;
82  {
83  std::ofstream ofs(filename);
84  boost::archive::xml_oarchive oa(ofs);
85  oa << BOOST_SERIALIZATION_NVP(record1);
86  }
87 
88  TradeRecord record2;
89  {
90  std::ifstream ifs(filename);
91  boost::archive::xml_iarchive ia(ifs);
92  ia >> BOOST_SERIALIZATION_NVP(record2);
93  }
94 
95  BOOST_CHECK(record1 == record2);
96 }
97 
98 
100 BOOST_AUTO_TEST_CASE( test_PositionRecord_export ) {
101  StockManager& sm = StockManager::instance();
102  string filename(sm.tmpdir());
103  filename += "/PositionRecord.xml";
104 
105  Stock stock = sm.getStock("sh600000");
106 
107  PositionRecord record1;
108  record1.stock = stock;
109  record1.takeDatetime = Datetime(200101010000);
110  record1.cleanDatetime = Datetime(200101210000);
111  record1.number = 1000;
112  record1.stoploss = 10.11;
113  record1.goalPrice = 11.13;
114  record1.totalNumber = 2000;
115  record1.buyMoney = 22000;
116  record1.totalCost = 23.1;
117  record1.totalRisk = 9.77;
118  record1.sellMoney = 9180.1;
119  {
120  std::ofstream ofs(filename);
121  boost::archive::xml_oarchive oa(ofs);
122  oa << BOOST_SERIALIZATION_NVP(record1);
123  }
124 
125  PositionRecord record2;
126  {
127  std::ifstream ifs(filename);
128  boost::archive::xml_iarchive ia(ifs);
129  ia >> BOOST_SERIALIZATION_NVP(record2);
130  }
131 
132  BOOST_CHECK(record1 == record2);
133 }
134 
135 
137 BOOST_AUTO_TEST_CASE( test_TradeManager_export ) {
138  StockManager& sm = StockManager::instance();
139  string filename(sm.tmpdir());
140  filename += "/TradeManager.xml";
141 
142  Stock stock = sm.getStock("sh600000");
143  TradeCostPtr costfunc = TC_FixedA(0.0018, 5, 0.001, 0.001, 1.0);
144 
145  TradeManagerPtr tm1 = crtTM(Datetime(199901010000), 100000, costfunc);
146  tm1->buy(Datetime(199911170000), stock, 27.18, 100, 27.18, 27.18, 0);
147  {
148  std::ofstream ofs(filename);
149  boost::archive::xml_oarchive oa(ofs);
150  oa << BOOST_SERIALIZATION_NVP(tm1);
151  }
152 
153  TradeManagerPtr tm2;
154  {
155  std::ifstream ifs(filename);
156  boost::archive::xml_iarchive ia(ifs);
157  ia >> BOOST_SERIALIZATION_NVP(tm2);
158  }
159 
160  BOOST_CHECK(tm1->name() == tm2->name());
161  BOOST_CHECK(tm1->initCash() == tm2->initCash());
162  BOOST_CHECK(tm1->initDatetime() == tm2->initDatetime());
163  BOOST_CHECK(tm1->firstDatetime() == tm2->firstDatetime());
164  BOOST_CHECK(tm1->lastDatetime() == tm2->lastDatetime());
165  BOOST_CHECK(tm1->reinvest() == tm2->reinvest());
166  BOOST_CHECK(tm1->precision() == tm2->precision());
167 
168  const TradeRecordList& trade_list_1 = tm1->getTradeList();
169  const TradeRecordList& trade_list_2 = tm2->getTradeList();
170  BOOST_CHECK(trade_list_1.size() == trade_list_2.size());
171  size_t total = trade_list_1.size();
172  for (size_t i = 0; i < total; i++) {
173  BOOST_CHECK(trade_list_1[i] == trade_list_2[i]);
174  }
175 
176  PositionRecordList position1 = tm1->getPositionList();
177  PositionRecordList position2 = tm2->getPositionList();
178  BOOST_CHECK(position1.size() == position2.size());
179  total = position1.size();
180  for (size_t i = 0; i < total; ++i) {
181  BOOST_CHECK(position1[i] == position2[i]);
182  }
183 
184  position1 = tm1->getHistoryPositionList();
185  position2 = tm2->getHistoryPositionList();
186  BOOST_CHECK(position1.size() == position2.size());
187  total = position1.size();
188  for (size_t i = 0; i < total; ++i) {
189  BOOST_CHECK(position1[i] == position2[i]);
190  }
191 }
192 
193 
195 BOOST_AUTO_TEST_CASE( test_FundsRecord_export ) {
196  string filename(StockManager::instance().tmpdir());
197  filename += "/FundsRecord.xml";
198 
199  FundsRecord funds1;
200  funds1.cash = 1.0;
201  funds1.market_value = 2.0;
202  funds1.short_market_value = 2.5;
203  funds1.base_cash = 3.0;
204  funds1.base_asset = 4.0;
205  funds1.borrow_cash = 5.0;
206  funds1.borrow_asset = 6.0;
207  {
208  std::ofstream ofs(filename);
209  boost::archive::xml_oarchive oa(ofs);
210  oa << BOOST_SERIALIZATION_NVP(funds1);
211  }
212 
213  FundsRecord funds2;
214  {
215  std::ifstream ifs(filename);
216  boost::archive::xml_iarchive ia(ifs);
217  ia >> BOOST_SERIALIZATION_NVP(funds2);
218  }
219 
220  BOOST_CHECK(funds1 == funds2);
221 }
222 
223 
225 BOOST_AUTO_TEST_CASE( test_BorrowRecord_export ) {
226  StockManager& sm = StockManager::instance();
227  string filename(sm.tmpdir());
228  filename += "/BorrowRecord.xml";
229 
230  Stock stock = sm.getStock("sh000001");
231  BorrowRecord bor1;
232  bor1.stock = stock;
233  bor1.number = 2000;
234  bor1.value = 22000;
235  {
236  std::ofstream ofs(filename);
237  boost::archive::xml_oarchive oa(ofs);
238  oa << BOOST_SERIALIZATION_NVP(bor1);
239  }
240 
241  BorrowRecord bor2;
242  {
243  std::ifstream ifs(filename);
244  boost::archive::xml_iarchive ia(ifs);
245  ia >> BOOST_SERIALIZATION_NVP(bor2);
246  }
247 
248  BOOST_CHECK(bor1.stock == bor2.stock);
249  BOOST_CHECK(bor1.number == bor2.number);
250  BOOST_CHECK(bor1.value == bor2.value);
251 }
252 
253 
256 #endif /* HKU_SUPPORT_SERIALIZATION */
257 
258 
BOOST_AUTO_TEST_CASE(test_Datetime)