9 #include <boost/test/unit_test.hpp>
11 #define BOOST_TEST_MODULE test_hikyuu_trade_manage_suite
12 #include <boost/test/unit_test.hpp>
15 #include <hikyuu/StockManager.h>
16 #include <hikyuu/trade_manage/crt/crtFixedATC.h>
17 #include <hikyuu/trade_manage/crt/crtTM.h>
29 StockManager& sm = StockManager::instance();
30 Stock stock = sm.getStock(
"sh600000");
31 CostRecord result, expect;
32 TradeManagerPtr tm = crtTM(Datetime(199901010000), 100000,
33 crtFixedATC(0.0018, 5, 0.001, 0.001, 1.0),
true, 2,
"TEST");
35 BOOST_CHECK(tm->name() ==
"TEST");
36 BOOST_CHECK(tm->initCash() == 100000.0);
37 BOOST_CHECK(tm->cash() == 100000.0);
38 BOOST_CHECK(tm->initDatetime() == Datetime(199901010000));
39 BOOST_CHECK(tm->firstDatetime() == Null<Datetime>());
40 BOOST_CHECK(tm->lastDatetime() == Datetime(199901010000));
41 BOOST_CHECK(tm->have(stock) ==
false);
42 BOOST_CHECK(tm->getStockNumber() == 0);
43 BOOST_CHECK(tm->getHoldNumber(Datetime(199901010000), stock) == 0);
44 const TradeRecordList& tradeList = tm->getAllTradeRecord();
45 BOOST_CHECK(tradeList.size() == 1);
46 BOOST_CHECK(tradeList[0] == TradeRecord(Null<Stock>(),
47 Datetime(199901010000), BUSINESS_INIT, 0.0, 0.0, 0.0, 0,
48 Null<CostRecord>(), 0.0, 100000.0));
49 BOOST_CHECK(tm->getAllPositionRecord().empty() ==
true);
50 BOOST_CHECK(tm->getPositionRecord(stock) == Null<PositionRecord>());
57 StockManager& sm = StockManager::instance();
58 Stock stock = sm.getStock(
"sh600000");
59 CostRecord result, expect;
60 TradeManagerPtr tm = crtTM(Datetime(199901010000), 100000,
61 crtFixedATC(0.0018, 5, 0.001, 0.001, 1.0),
true, 2,
"TEST");
64 result = tm->getBuyCost(Datetime(200101010000), stock, 10.0, 1000);
65 expect.commission = 18.0;
66 expect.stamptax = 0.0;
67 expect.transferfee = 1.0;
69 BOOST_CHECK(result == expect);
75 StockManager& sm = StockManager::instance();
76 Stock stock = sm.getStock(
"sh600004");
77 CostRecord result, expect;
78 TradeManagerPtr tm = crtTM(Datetime(199901010000), 100000,
79 crtFixedATC(0.0018, 5, 0.001, 0.001, 1.0),
true, 2);
82 result = tm->getSellCost(Datetime(200101010000), stock, 10.0, 100);
83 expect.commission = 5.0;
84 expect.stamptax = 1.0;
85 expect.transferfee = 1.0;
87 BOOST_CHECK(result == expect);
93 StockManager& sm = StockManager::instance();
94 Stock stock = sm.getStock(
"sh600000");
95 TradeCostPtr costfunc = crtFixedATC(0.0018, 5, 0.001, 0.001, 1.0);
100 TradeRecordList trade_list;
103 tm = crtTM(Datetime(199901010000), 0, costfunc,
false, 2);
104 result = tm->buy(Datetime(199911180000), stock, 27.2, 27.2, 27.2, 100, 0);
105 BOOST_CHECK(result == Null<TradeRecord>());
108 tm = crtTM(Datetime(199901010000), 100000, costfunc,
false, 2);
109 result = tm->buy(Datetime(199911180000), Null<Stock>(), 27.2, 27.2, 27.2, 100, 0);
110 BOOST_CHECK(result == Null<TradeRecord>());
111 BOOST_CHECK(tm->cash() == 100000);
114 tm = crtTM(Datetime(199901010000), 100000, costfunc,
false, 2);
115 result = tm->buy(Datetime(199001010000), stock, 26.36, 26.36, 26.36, 100, 0);
116 BOOST_CHECK(result == Null<TradeRecord>());
119 tm = crtTM(Datetime(199901010000), 100000, costfunc,
false, 2);
120 result = tm->buy(Datetime(199911130000), stock, 27.2, 27.2, 27.2, 100, 0);
121 BOOST_CHECK(result == Null<TradeRecord>());
124 tm = crtTM(Datetime(199901010000), 100000, costfunc,
false, 2);
125 result = tm->buy(Datetime(199911170000), stock, 27.2, 27.2, 27.2, 100, 0);
126 BOOST_CHECK(result == Null<TradeRecord>());
129 tm = crtTM(Datetime(199901010000), 100000, costfunc,
false, 2);
130 result = tm->buy(Datetime(199911170000), stock, 27.18, 27.18, 27.18, 100, 0);
131 cost = tm->getBuyCost(Datetime(199911170000), stock, 27.18, 100);
132 trade = TradeRecord(stock, Datetime(199911170000),
133 BUSINESS_BUY, 27.18, 27.18, 27.18, 100, cost, 0.0,
134 100000 - cost.total - 27.18 * 100);
135 BOOST_CHECK(result == trade);
136 BOOST_CHECK(tm->cash() == trade.cash);
137 trade_list = tm->getAllTradeRecord();
138 BOOST_CHECK(trade_list.size() == 2);
139 BOOST_CHECK(trade_list[1] == trade);
142 tm = crtTM(Datetime(199901010000), 100000, costfunc,
false, 2);
143 result = tm->buy(Datetime(199911170000), stock, 26.36, 26.36, 26.36, 100, 0);
144 BOOST_CHECK(result == Null<TradeRecord>());
147 tm = crtTM(Datetime(199901010000), 100000, costfunc,
false, 2);
148 result = tm->buy(Datetime(199911160000), stock, 26.48, 26.48, 26.48, 100, 0);
149 cost = tm->getBuyCost(Datetime(199911160000), stock, 26.48, 100);
150 BOOST_CHECK(result == TradeRecord(stock, Datetime(199911160000),
151 BUSINESS_BUY, 26.48, 26.48, 26.48, 100, cost, 0.0,
152 100000 - cost.total - 26.48 * 100));
155 tm = crtTM(Datetime(199901010000), 100000, costfunc,
false, 2);
156 result = tm->buy(Datetime(199911170000), stock, 26.48, 26.48, 26.48, 100, 0);
157 BOOST_CHECK(!(result == Null<TradeRecord>()));
158 result = tm->buy(Datetime(199911160000), stock, 26.48, 26.48, 26.48, 100, 0);
159 BOOST_CHECK(result == Null<TradeRecord>());
162 tm = crtTM(Datetime(199901010000), 100000, costfunc,
false, 2);
163 result = tm->buy(Datetime(199911170000), stock, 26.48, 26.48, 26.48, 0, 0);
164 BOOST_CHECK(result == Null<TradeRecord>());
167 tm = crtTM(Datetime(199901010000), 100000, costfunc,
false, 2);
168 result = tm->buy(Datetime(199911170000), stock, 26.48, 26.48, 26.48, stock.minTradeNumber() - 1, 0);
169 BOOST_CHECK(result == Null<TradeRecord>());
172 tm = crtTM(Datetime(199901010000), 100000, costfunc,
false, 2);
173 result = tm->buy(Datetime(199911170000), stock, 26.48, 26.48, 26.48, stock.maxTradeNumber() - 1, 0);
174 BOOST_CHECK(result == Null<TradeRecord>());
180 StockManager& sm = StockManager::instance();
181 Stock stock = sm.getStock(
"sh600000");
182 TradeCostPtr costfunc = crtFixedATC(0.0018, 5, 0.001, 0.001, 1.0);
187 TradeRecordList trade_list;
190 tm = crtTM(Datetime(199901010000), 0, costfunc,
false, 2);
191 result = tm->sell(Datetime(199911180000), stock, 27.2, 27.2, 100);
192 BOOST_CHECK(result == Null<TradeRecord>());
195 tm = crtTM(Datetime(199901010000), 100000, costfunc,
false, 2);
196 result = tm->sell(Datetime(199911180000), Null<Stock>(), 27.2, 27.2, 100);
197 BOOST_CHECK(result == Null<TradeRecord>());
198 BOOST_CHECK(tm->cash() == 100000);