test_doc  0.1
 全部  文件 函数 变量 宏定义 
test_TradeManager.cpp
浏览该文件的文档.
1 /*
2  * test_TradeManager.cpp
3  *
4  * Created on: 2013-2-21
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/StockManager.h>
16 #include <hikyuu/trade_manage/crt/crtFixedATC.h>
17 #include <hikyuu/trade_manage/crt/crtTM.h>
18 
19 using namespace hku;
20 
28 BOOST_AUTO_TEST_CASE( test_TradeManager_init ) {
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");
34 
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>());
51 
52 }
53 
54 
56 BOOST_AUTO_TEST_CASE( test_TradeManager_getBuyCost ) {
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");
62 
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;
68  expect.total = 19.0;
69  BOOST_CHECK(result == expect);
70 }
71 
72 
74 BOOST_AUTO_TEST_CASE( test_TradeManager_getSellCost ) {
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);
80 
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;
86  expect.total = 7.0;
87  BOOST_CHECK(result == expect);
88 }
89 
90 
92 BOOST_AUTO_TEST_CASE( test_TradeManager_buy ) {
93  StockManager& sm = StockManager::instance();
94  Stock stock = sm.getStock("sh600000");
95  TradeCostPtr costfunc = crtFixedATC(0.0018, 5, 0.001, 0.001, 1.0);
96  TradeManagerPtr tm;
97  TradeRecord result;
98  CostRecord cost;
99  TradeRecord trade;
100  TradeRecordList trade_list;
101 
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>());
106 
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);
112 
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>());
117 
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>());
122 
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>());
127 
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);
140 
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>());
145 
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));
153 
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>());
160 
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>());
165 
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>());
170 
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>());
175 }
176 
177 
179 BOOST_AUTO_TEST_CASE( test_TradeManager_sell ) {
180  StockManager& sm = StockManager::instance();
181  Stock stock = sm.getStock("sh600000");
182  TradeCostPtr costfunc = crtFixedATC(0.0018, 5, 0.001, 0.001, 1.0);
183  TradeManagerPtr tm;
184  TradeRecord result;
185  CostRecord cost;
186  TradeRecord trade;
187  TradeRecordList trade_list;
188 
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>());
193 
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);
199 
200  //TODO 补充测试
201 }
202