9 #include <boost/test/unit_test.hpp> 11 #define BOOST_TEST_MODULE test_hikyuu_trade_manage_suite 12 #include <boost/test/unit_test.hpp> 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> 27 #if HKU_SUPPORT_SERIALIZATION 37 string filename(StockManager::instance().tmpdir());
38 filename +=
"/CostRecord.xml";
40 CostRecord cost(10.1, 5.3, 1.0, 0.7, 17.1);
42 std::ofstream ofs(filename);
43 boost::archive::xml_oarchive oa(ofs);
44 oa << BOOST_SERIALIZATION_NVP(cost);
49 std::ifstream ifs(filename);
50 boost::archive::xml_iarchive ia(ifs);
51 ia >> BOOST_SERIALIZATION_NVP(cost2);
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);
65 StockManager& sm = StockManager::instance();
66 string filename(sm.tmpdir());
67 filename +=
"/TradeRecord.xml";
69 Stock stock = sm.getStock(
"sh600000");
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;
83 std::ofstream ofs(filename);
84 boost::archive::xml_oarchive oa(ofs);
85 oa << BOOST_SERIALIZATION_NVP(record1);
90 std::ifstream ifs(filename);
91 boost::archive::xml_iarchive ia(ifs);
92 ia >> BOOST_SERIALIZATION_NVP(record2);
95 BOOST_CHECK(record1 == record2);
101 StockManager& sm = StockManager::instance();
102 string filename(sm.tmpdir());
103 filename +=
"/PositionRecord.xml";
105 Stock stock = sm.getStock(
"sh600000");
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;
120 std::ofstream ofs(filename);
121 boost::archive::xml_oarchive oa(ofs);
122 oa << BOOST_SERIALIZATION_NVP(record1);
125 PositionRecord record2;
127 std::ifstream ifs(filename);
128 boost::archive::xml_iarchive ia(ifs);
129 ia >> BOOST_SERIALIZATION_NVP(record2);
132 BOOST_CHECK(record1 == record2);
138 StockManager& sm = StockManager::instance();
139 string filename(sm.tmpdir());
140 filename +=
"/TradeManager.xml";
142 Stock stock = sm.getStock(
"sh600000");
143 TradeCostPtr costfunc = TC_FixedA(0.0018, 5, 0.001, 0.001, 1.0);
145 TradeManagerPtr tm1 = crtTM(Datetime(199901010000), 100000, costfunc);
146 tm1->buy(Datetime(199911170000), stock, 27.18, 100, 27.18, 27.18, 0);
148 std::ofstream ofs(filename);
149 boost::archive::xml_oarchive oa(ofs);
150 oa << BOOST_SERIALIZATION_NVP(tm1);
155 std::ifstream ifs(filename);
156 boost::archive::xml_iarchive ia(ifs);
157 ia >> BOOST_SERIALIZATION_NVP(tm2);
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());
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]);
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]);
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]);
196 string filename(StockManager::instance().tmpdir());
197 filename +=
"/FundsRecord.xml";
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;
208 std::ofstream ofs(filename);
209 boost::archive::xml_oarchive oa(ofs);
210 oa << BOOST_SERIALIZATION_NVP(funds1);
215 std::ifstream ifs(filename);
216 boost::archive::xml_iarchive ia(ifs);
217 ia >> BOOST_SERIALIZATION_NVP(funds2);
220 BOOST_CHECK(funds1 == funds2);
226 StockManager& sm = StockManager::instance();
227 string filename(sm.tmpdir());
228 filename +=
"/BorrowRecord.xml";
230 Stock stock = sm.getStock(
"sh000001");
236 std::ofstream ofs(filename);
237 boost::archive::xml_oarchive oa(ofs);
238 oa << BOOST_SERIALIZATION_NVP(bor1);
243 std::ifstream ifs(filename);
244 boost::archive::xml_iarchive ia(ifs);
245 ia >> BOOST_SERIALIZATION_NVP(bor2);
248 BOOST_CHECK(bor1.stock == bor2.stock);
249 BOOST_CHECK(bor1.number == bor2.number);
250 BOOST_CHECK(bor1.value == bor2.value);
BOOST_AUTO_TEST_CASE(test_Datetime)